mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-01 14:34:42 +01:00
fix(review): build the GSTA-160 floor on #3660's floor words; pin the changed briefs under a pending GSTA-160 replay entry
The resolver floor now extends lib/review-scope.ts BLOCKING_FLOOR (the prose voices' copy) with the security clause, so every copy contains #3660's floor words and the voices stay at G1 bytes. fix-check carries the sentence literally for the F10 copy check. Two review-skill lines are shortened to keep the generated SKILL.md size pins from growing. Replay: 4c53e80a (pre-#3660 wording); GSTA-167 cohort no-loss arm on these bytes pending. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
c8ef82396a
commit
4fdbcc1ca9
21 files changed
+47
-45
No files matched your search
@@ -1,12 +1,12 @@
|
||||
**A real bug now gets the CRITICAL label because of what it breaks, not because of the checklist section or reviewer lens that found it (GSTA-160).** Every gstack reviewer prompt carries one blocking-floor sentence: a finding that would fail a test, break production, lose data or secrets, or open a security hole (injection, auth bypass, secret exposure) is CRITICAL, and everything else is INFORMATIONAL. On a preregistered replay of GSTA-11's 12 real gstack bugs, Opus 5.5 with gstack's /review prompts went from 4 to 6 CRITICAL catches out of 36 trials. False alarms on clean decoys fell from 5 to 3 of 24 (Haiku: 7 to 4). The replay's main bar was 10 catches, and Garry approved shipping below it; the remaining gap is GST-389.
|
||||
**A real bug now gets the CRITICAL label because of what it breaks, not because of the checklist section or reviewer lens that found it (GSTA-160).** The core checklist, every specialist and the fix-check carry one blocking-floor sentence: a finding that would fail a test, break production, or lose data or secrets, or open a security hole (injection, auth bypass, secret exposure) is CRITICAL, and everything else is INFORMATIONAL. On a preregistered replay of GSTA-11's 12 real gstack bugs, Opus 5.5 with gstack's /review prompts went from 4 to 6 CRITICAL catches out of 36 trials. False alarms on clean decoys fell from 5 to 3 of 24 (Haiku: 7 to 4). The replay's main bar was 10 catches, and Garry approved shipping below it; the remaining gap is GST-389.
|
||||
|
||||
### Changed
|
||||
- The checklist's two passes now set check order, not severity. The headings are "Pass 1 — check first" and "Pass 2 — check second", and the Severity Classification section opens with the floor, so a Pass 2 finding such as a /retro date-window bug can be CRITICAL.
|
||||
- **One floor sentence, `BLOCKING_FLOOR`** in `scripts/resolvers/review-floor.ts`, is used by the specialist schema line and the fix-check prompt. `review/SKILL.md`, docs/review-policy.md and docs/ship-policy.md carry it word for word, and `ship/SKILL.md`'s review policy line names the same four cases.
|
||||
- **One floor sentence, `BLOCKING_FLOOR`** in `scripts/resolvers/review-floor.ts`, builds on the prose voices' floor words in `lib/review-scope.ts` and adds the security clause. The specialist schema line uses it; the fix-check prompt, `review/SKILL.md`, docs/review-policy.md and docs/ship-policy.md carry it word for word, and `ship/SKILL.md`'s review policy line names the same four cases.
|
||||
- **Shell injection is no longer Python-only.** It covers bash `eval`, `source` and `sh -c` built from a file, environment variable, argument or network value.
|
||||
- **A state swap before a step that can fail, with no rollback,** is a Pass 1 check (GSTA-159's miss).
|
||||
- **The Testing specialist files a floor-level product defect as `correctness`,** so it blocks instead of reading as a test gap.
|
||||
|
||||
### Tests
|
||||
- `test/review-severity-floor.test.ts` checks that the floor appears in every copy, that no checklist heading names a severity, that shell injection covers bash, and that the state-swap check exists. It also checks that a `correctness` CRITICAL from the Testing specialist stays blocking through `classifyFindings`.
|
||||
- `test/review-packets-removed.test.ts` repins five reviewer briefs on the GSTA-160 replay (prereg 4c53e80a).
|
||||
- `test/review-packets-removed.test.ts` pins five reviewer briefs under a `GSTA-160` replay entry (prereg 4c53e80a; GSTA-167's cohort no-loss arm on these bytes is pending).
|
||||
@@ -11,7 +11,7 @@ instead of restating it. A one-line crew rule is enough:
|
||||
## The blocking floor
|
||||
|
||||
A finding is **blocking** when it is a CRITICAL defect. CRITICAL is the blocking
|
||||
floor: a finding that would fail a test, break production, lose data or secrets, or
|
||||
floor: a finding that would fail a test, break production, or lose data or secrets, or
|
||||
open a security hole (injection, auth bypass, secret exposure). Everything else is
|
||||
INFORMATIONAL. Below the floor are an advisory, an informational item, a test
|
||||
finding (category `testing`: a gap, a weak or flaky test), a wording or naming
|
||||
|
||||
+1
-1
@@ -985,7 +985,7 @@ construction:
|
||||
gives each one a `locus` (`diff`: a hunk the PR changed, with three lines of
|
||||
context; `outside`: anything else), a `kind`, `blocking` and a `scope`.
|
||||
`blocking` is a CRITICAL defect. CRITICAL is the blocking floor: a finding that
|
||||
would fail a test, break production, lose data or secrets, or open a security hole
|
||||
would fail a test, break production, or lose data or secrets, or open a security hole
|
||||
(injection, auth bypass, secret exposure). Everything else is INFORMATIONAL.
|
||||
An advisory, an informational item, a test gap or a wording note is below the
|
||||
floor. Pass 1 fixes findings in
|
||||
|
||||
+2
-2
@@ -457,9 +457,9 @@ Use this host's installation, never the product tree. If missing or unreadable,
|
||||
|
||||
QA's `sections/...` and `templates/...` paths resolve from installed QA SKILL.md, not caller/product.
|
||||
|
||||
Apply both checklist passes in order with its suppressions; neither sets severity.
|
||||
Apply both checklist passes in order with suppressions; neither sets severity.
|
||||
CRITICAL is the blocking floor: a finding that would fail a test, break production,
|
||||
lose data or secrets, or open a security hole (injection, auth bypass, secret exposure).
|
||||
or lose data or secrets, or open a security hole (injection, auth bypass, secret exposure).
|
||||
Everything else is INFORMATIONAL. `NO FINDINGS` is a complete result from any reviewer.
|
||||
|
||||
**Sideways sweep (every finding; reads code OUTSIDE the diff).** Grep the finding's pattern at every other ingress, command and call site, Read each match and rate severity on the worst sibling; a new enum value, status, tier or type constant is traced through every consumer the same way (checklist: Sideways sweep). Data loss, a trust-boundary bypass or uncapped spend is forced CRITICAL: no lane, specialist, dedup or saved decision downgrades it. Keep findings anchored to changed code.
|
||||
|
||||
@@ -169,9 +169,9 @@ the core review.
|
||||
|
||||
{{QA_REVIEW_PREFLIGHT}}
|
||||
|
||||
Apply both checklist passes in order with its suppressions; neither sets severity.
|
||||
Apply both checklist passes in order with suppressions; neither sets severity.
|
||||
CRITICAL is the blocking floor: a finding that would fail a test, break production,
|
||||
lose data or secrets, or open a security hole (injection, auth bypass, secret exposure).
|
||||
or lose data or secrets, or open a security hole (injection, auth bypass, secret exposure).
|
||||
Everything else is INFORMATIONAL. `NO FINDINGS` is a complete result from any reviewer.
|
||||
|
||||
{{SIDEWAYS_SWEEP}}
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ Review the merge-base diff from the caller, including its selected uncommitted a
|
||||
**Two-pass review:**
|
||||
- **Pass 1 (check first):** Run SQL & Data Safety, Race Conditions, LLM Output Trust Boundary, Shell Injection, Enum Completeness, and Gate Integrity first. These categories hold blocking defects most often.
|
||||
- **Pass 2 (check second):** Run remaining categories below. Still actioned.
|
||||
- **The pass never sets severity.** Rate every finding from either pass by the blocking floor (Severity Classification below): a Pass 2 finding that would fail a test, break production, lose data or secrets, or open a security hole is CRITICAL, and a Pass 1 finding that would not is INFORMATIONAL.
|
||||
- **The pass never sets severity.** Rate every finding from either pass by the blocking floor (Severity Classification below): a Pass 2 finding at the floor is CRITICAL, and a Pass 1 finding below it is INFORMATIONAL.
|
||||
- **Specialist categories (handled by parallel subagents, NOT this checklist):** Test Gaps, Dead Code, Magic Numbers, Conditional Side Effects, Performance & Bundle Impact, Crypto & Entropy, Simplification (unrequested structure). See `review/specialists/` for these.
|
||||
|
||||
Completeness Gaps and Simplification are orthogonal, not contradictory: Completeness pushes coverage UP (tests, edge cases, error paths), Simplification pushes unrequested structure DOWN (one-implementation abstractions, hand-rolled stdlib, dead flexibility). The same diff can legitimately receive both.
|
||||
@@ -165,7 +165,7 @@ A finding is a defect class, not a line. Before rating any finding from either p
|
||||
## Severity Classification
|
||||
|
||||
CRITICAL is the blocking floor: a finding that would fail a test, break production,
|
||||
lose data or secrets, or open a security hole (injection, auth bypass, secret exposure).
|
||||
or lose data or secrets, or open a security hole (injection, auth bypass, secret exposure).
|
||||
Everything else is INFORMATIONAL.
|
||||
|
||||
A category says what to check and in which order; it never sets severity. Rate every
|
||||
|
||||
@@ -106,13 +106,13 @@ Every other specialist, including Testing, reads the full diff with fixtures.
|
||||
|
||||
Required fields: severity, confidence, path, category, summary, specialist.
|
||||
Optional: line, fix, fingerprint, evidence, test_stub, advisory, evidence_paths, helper_target, cause.
|
||||
CRITICAL is the blocking floor: a finding that would fail a test, break production, lose data or secrets, or open a security hole (injection, auth bypass, secret exposure). Everything else is INFORMATIONAL.
|
||||
CRITICAL is the blocking floor: a finding that would fail a test, break production, or lose data or secrets, or open a security hole (injection, auth bypass, secret exposure). Everything else is INFORMATIONAL.
|
||||
A defect the diff causes but that shows elsewhere (a caller broken by a changed signature, a consumer of a removed export) keeps the victim as `path` and names the changed line in `cause`: {\"cause\":{\"path\":\"file\",\"line\":N}}. Without it the finding reads as pre-existing code.
|
||||
|
||||
Leave extraction advice to the core shared-code check; report real defects in duplicated code independently, keep advisory metadata on structural advice, and never call a demonstrated defect advisory because a shared helper could fix it.
|
||||
|
||||
For a finding a test could catch, add a minimal `test_stub` skeleton in the detected test
|
||||
framework ({TEST_FW}); skip it for architectural or design-only findings.
|
||||
framework ({TEST_FW}); none for architectural or design-only findings.
|
||||
|
||||
Output nothing else: no preamble, no summary or commentary.
|
||||
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
* step whose fixes do not earn a full pass. It reads the fixes, never the whole diff. The parent
|
||||
* writes every input in literally: a reviewer never sees the parent's shell.
|
||||
*/
|
||||
import { BLOCKING_FLOOR } from './review-floor';
|
||||
|
||||
export interface FixCheckInput { fixList: string; touchedHunks: string; callers: string; testResults: string }
|
||||
|
||||
export const FIX_CHECK_INSTRUCTIONS = `You are the fix-check reviewer for a pre-landing review. An earlier review pass found
|
||||
@@ -16,8 +14,9 @@ fails open (accepts what it refused) or fails closed (refuses what it accepted),
|
||||
behaviour the code had before the fix, an error or unreadable state now read as success, a test
|
||||
made weaker. Name the input or call site that reaches each defect.
|
||||
|
||||
Rate each finding against the blocking floor. ${BLOCKING_FLOOR} Output one JSON object per
|
||||
line, {"severity":"CRITICAL|INFORMATIONAL","path":"<file>","line":<n>,"summary":"<what breaks, for which input>"},
|
||||
Rate each finding against the blocking floor. CRITICAL is the blocking floor: a finding that
|
||||
would fail a test, break production, or lose data or secrets, or open a security hole (injection,
|
||||
auth bypass, secret exposure). Everything else is INFORMATIONAL. Output one JSON object per line, {"severity":"CRITICAL|INFORMATIONAL","path":"<file>","line":<n>,"summary":"<what breaks, for which input>"},
|
||||
or the two words NO FINDINGS when the fixes are sound.`;
|
||||
|
||||
export function renderFixCheckPrompt(i: FixCheckInput): string {
|
||||
|
||||
@@ -153,7 +153,7 @@ A defect the diff causes but that shows elsewhere (a caller broken by a changed
|
||||
Leave extraction advice to the core shared-code check; report real defects in duplicated code independently, keep advisory metadata on structural advice, and never call a demonstrated defect advisory because a shared helper could fix it.
|
||||
|
||||
For a finding a test could catch, add a minimal \`test_stub\` skeleton in the detected test
|
||||
framework ({TEST_FW}); skip it for architectural or design-only findings.
|
||||
framework ({TEST_FW}); none for architectural or design-only findings.
|
||||
|
||||
Output nothing else: no preamble, no summary or commentary.
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
/**
|
||||
* The blocking floor every gstack reviewer prompt carries (docs/review-policy.md#the-blocking-floor).
|
||||
* One sentence, so the core checklist, each specialist and the fix-check rate severity the
|
||||
* same way. test/review-severity-floor.test.ts keeps the markdown copies in step.
|
||||
* same way. It extends lib/review-scope.ts's floor words (the prose voices' copy) with the
|
||||
* security clause. test/review-severity-floor.test.ts keeps the markdown copies in step.
|
||||
*/
|
||||
export const BLOCKING_FLOOR = 'CRITICAL is the blocking floor: a finding that would fail a test, break production, lose data or secrets, or open a security hole (injection, auth bypass, secret exposure). Everything else is INFORMATIONAL.';
|
||||
import { BLOCKING_FLOOR as FLOOR_WORDS } from '../../lib/review-scope';
|
||||
|
||||
export const BLOCKING_FLOOR = `CRITICAL is the blocking floor: a finding that ${FLOOR_WORDS}, or open a security hole (injection, auth bypass, secret exposure). Everything else is INFORMATIONAL.`;
|
||||
+1
-1
@@ -208,7 +208,7 @@ token; `--finish` stamps the binding fields automatically. Never borrow or repla
|
||||
not a commit ID. Use `git diff <old-tree> <new-tree>` to compare these snapshots.
|
||||
|
||||
**Review policy** (docs/review-policy.md): only a finding that would fail a test,
|
||||
break production, lose data or secrets, or open a security hole blocks a pass; the
|
||||
break production, or lose data or secrets, or open a security hole blocks a pass; the
|
||||
rest is a PR-body note. Step 9's plan sets both reviews' depth (`--depth-floor
|
||||
standard|full` only raises it). Pass 1 reads the diff, later passes the range; the
|
||||
cap is two full passes and a fix-check. `NO FINDINGS` is complete. `ship:
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ token; `--finish` stamps the binding fields automatically. Never borrow or repla
|
||||
not a commit ID. Use `git diff <old-tree> <new-tree>` to compare these snapshots.
|
||||
|
||||
**Review policy** (docs/review-policy.md): only a finding that would fail a test,
|
||||
break production, lose data or secrets, or open a security hole blocks a pass; the
|
||||
break production, or lose data or secrets, or open a security hole blocks a pass; the
|
||||
rest is a PR-body note. Step 9's plan sets both reviews' depth (`--depth-floor
|
||||
standard|full` only raises it). Pass 1 reads the diff, later passes the range; the
|
||||
cap is two full passes and a fix-check. `NO FINDINGS` is complete. `ship:
|
||||
|
||||
@@ -407,13 +407,13 @@ Every other specialist, including Testing, reads the full diff with fixtures.
|
||||
|
||||
Required fields: severity, confidence, path, category, summary, specialist.
|
||||
Optional: line, fix, fingerprint, evidence, test_stub, advisory, evidence_paths, helper_target, cause.
|
||||
CRITICAL is the blocking floor: a finding that would fail a test, break production, lose data or secrets, or open a security hole (injection, auth bypass, secret exposure). Everything else is INFORMATIONAL.
|
||||
CRITICAL is the blocking floor: a finding that would fail a test, break production, or lose data or secrets, or open a security hole (injection, auth bypass, secret exposure). Everything else is INFORMATIONAL.
|
||||
A defect the diff causes but that shows elsewhere (a caller broken by a changed signature, a consumer of a removed export) keeps the victim as `path` and names the changed line in `cause`: {\"cause\":{\"path\":\"file\",\"line\":N}}. Without it the finding reads as pre-existing code.
|
||||
|
||||
Leave extraction advice to the core shared-code check; report real defects in duplicated code independently, keep advisory metadata on structural advice, and never call a demonstrated defect advisory because a shared helper could fix it.
|
||||
|
||||
For a finding a test could catch, add a minimal `test_stub` skeleton in the detected test
|
||||
framework ({TEST_FW}); skip it for architectural or design-only findings.
|
||||
framework ({TEST_FW}); none for architectural or design-only findings.
|
||||
|
||||
Output nothing else: no preamble, no summary or commentary.
|
||||
|
||||
|
||||
+1
-1
@@ -208,7 +208,7 @@ token; `--finish` stamps the binding fields automatically. Never borrow or repla
|
||||
not a commit ID. Use `git diff <old-tree> <new-tree>` to compare these snapshots.
|
||||
|
||||
**Review policy** (docs/review-policy.md): only a finding that would fail a test,
|
||||
break production, lose data or secrets, or open a security hole blocks a pass; the
|
||||
break production, or lose data or secrets, or open a security hole blocks a pass; the
|
||||
rest is a PR-body note. Step 9's plan sets both reviews' depth (`--depth-floor
|
||||
standard|full` only raises it). Pass 1 reads the diff, later passes the range; the
|
||||
cap is two full passes and a fix-check. `NO FINDINGS` is complete. `ship:
|
||||
|
||||
+1
-1
@@ -208,7 +208,7 @@ token; `--finish` stamps the binding fields automatically. Never borrow or repla
|
||||
not a commit ID. Use `git diff <old-tree> <new-tree>` to compare these snapshots.
|
||||
|
||||
**Review policy** (docs/review-policy.md): only a finding that would fail a test,
|
||||
break production, lose data or secrets, or open a security hole blocks a pass; the
|
||||
break production, or lose data or secrets, or open a security hole blocks a pass; the
|
||||
rest is a PR-body note. Step 9's plan sets both reviews' depth (`--depth-floor
|
||||
standard|full` only raises it). Pass 1 reads the diff, later passes the range; the
|
||||
cap is two full passes and a fix-check. `NO FINDINGS` is complete. `ship:
|
||||
|
||||
+1
-1
@@ -206,7 +206,7 @@ token; `--finish` stamps the binding fields automatically. Never borrow or repla
|
||||
not a commit ID. Use `git diff <old-tree> <new-tree>` to compare these snapshots.
|
||||
|
||||
**Review policy** (docs/review-policy.md): only a finding that would fail a test,
|
||||
break production, lose data or secrets, or open a security hole blocks a pass; the
|
||||
break production, or lose data or secrets, or open a security hole blocks a pass; the
|
||||
rest is a PR-body note. Step 9's plan sets both reviews' depth (`--depth-floor
|
||||
standard|full` only raises it). Pass 1 reads the diff, later passes the range; the
|
||||
cap is two full passes and a fix-check. `NO FINDINGS` is complete. `ship:
|
||||
|
||||
+1
-1
@@ -208,7 +208,7 @@ token; `--finish` stamps the binding fields automatically. Never borrow or repla
|
||||
not a commit ID. Use `git diff <old-tree> <new-tree>` to compare these snapshots.
|
||||
|
||||
**Review policy** (docs/review-policy.md): only a finding that would fail a test,
|
||||
break production, lose data or secrets, or open a security hole blocks a pass; the
|
||||
break production, or lose data or secrets, or open a security hole blocks a pass; the
|
||||
rest is a PR-body note. Step 9's plan sets both reviews' depth (`--depth-floor
|
||||
standard|full` only raises it). Pass 1 reads the diff, later passes the range; the
|
||||
cap is two full passes and a fix-check. `NO FINDINGS` is complete. `ship:
|
||||
|
||||
+8
-8
@@ -6,29 +6,29 @@
|
||||
"agy/gstack-plan-design-review": 110044,
|
||||
"agy/gstack-plan-devex-review": 116496,
|
||||
"agy/gstack-plan-eng-review": 144907,
|
||||
"agy/gstack-review": 104280,
|
||||
"agy/gstack-review": 104279,
|
||||
"codex/gstack-autoplan": 108553,
|
||||
"codex/gstack-land-and-deploy": 100284,
|
||||
"codex/gstack-plan-design-review": 111116,
|
||||
"codex/gstack-plan-devex-review": 118004,
|
||||
"codex/gstack-plan-eng-review": 146072,
|
||||
"codex/gstack-review": 103803,
|
||||
"codex/gstack-review": 103802,
|
||||
"copilot/gstack-autoplan": 109253,
|
||||
"copilot/gstack-plan-design-review": 110355,
|
||||
"copilot/gstack-plan-devex-review": 115958,
|
||||
"copilot/gstack-plan-eng-review": 145072,
|
||||
"copilot/gstack-review": 103861,
|
||||
"copilot/gstack-review": 103860,
|
||||
"cursor/gstack-autoplan": 108485,
|
||||
"cursor/gstack-plan-design-review": 108900,
|
||||
"cursor/gstack-plan-devex-review": 115228,
|
||||
"cursor/gstack-plan-eng-review": 143662,
|
||||
"cursor/gstack-review": 122131,
|
||||
"cursor/gstack-review": 122130,
|
||||
"factory/gstack-autoplan": 110763,
|
||||
"factory/gstack-land-and-deploy": 100105,
|
||||
"factory/gstack-plan-design-review": 111675,
|
||||
"factory/gstack-plan-devex-review": 118591,
|
||||
"factory/gstack-plan-eng-review": 146770,
|
||||
"factory/gstack-review": 125904,
|
||||
"factory/gstack-review": 125903,
|
||||
"gbrain/gstack-autoplan": 108892,
|
||||
"gbrain/gstack-plan-eng-review": 126289,
|
||||
"hermes/gstack-autoplan": 108891,
|
||||
@@ -37,18 +37,18 @@
|
||||
"kiro/gstack-plan-design-review": 108752,
|
||||
"kiro/gstack-plan-devex-review": 115080,
|
||||
"kiro/gstack-plan-eng-review": 143524,
|
||||
"kiro/gstack-review": 121955,
|
||||
"kiro/gstack-review": 121954,
|
||||
"openclaw/gstack-autoplan": 108715,
|
||||
"openclaw/gstack-plan-eng-review": 124804,
|
||||
"opencode/gstack-autoplan": 109234,
|
||||
"opencode/gstack-plan-design-review": 110187,
|
||||
"opencode/gstack-plan-devex-review": 115836,
|
||||
"opencode/gstack-plan-eng-review": 144931,
|
||||
"opencode/gstack-review": 122753,
|
||||
"opencode/gstack-review": 122752,
|
||||
"slate/gstack-autoplan": 108372,
|
||||
"slate/gstack-plan-design-review": 108826,
|
||||
"slate/gstack-plan-devex-review": 115154,
|
||||
"slate/gstack-plan-eng-review": 143593,
|
||||
"slate/gstack-review": 122043
|
||||
"slate/gstack-review": 122042
|
||||
}
|
||||
}
|
||||
@@ -54,16 +54,16 @@ const NO_LOSS_REPLAYS = {
|
||||
'#3638': 'no-loss round 3: main restored the pre-#3621 reviewers (v1.91.331.0)',
|
||||
'PR-a': "GSTA-167 variant G Arm 4: structural plan identity at the 14 cohort heads and the free exact re-score of saved C, D and A' findings (parts 4a and 4b)",
|
||||
'G1': "GSTA-167 variant G Arm G1: live no-loss replay of both prose voices with part 1's prompts, 2 passes, normalizer v2, paired rule against pooled C' (parts 1 and 3; specialists at medium as in C and C2)",
|
||||
'GSTA-160': "GSTA-160 severity-floor replay prereg 4c53e80a on GSTA-11's 12 bugs plus decoys (a severity no-loss check: P2, G1 and G2 pass, P1 below bar under Garry's exception); GSTA-167's cohort no-loss arm on these bytes is pending",
|
||||
'GSTA-160': "GSTA-160 severity floor: replay prereg 4c53e80a (GSTA-11's 12 bugs plus decoys) passed P2, G1 and G2 on the pre-#3660 wording; GSTA-167's cohort no-loss arm on these bytes is pending",
|
||||
'L': "GSTA-167 variant G Arm L: live no-loss replay of one batched reader (testing and security plus scoped checklists) and the Red Team on its findings, 2 passes, scored L∘G1 against G1 on the paired rule (part 2)",
|
||||
} as const;
|
||||
type Replay = keyof typeof NO_LOSS_REPLAYS;
|
||||
const REVIEWER_BRIEFS: Record<string, { sha: string; replay: Replay }> = {
|
||||
'ship/sections/review-army.md': { sha: '08503248b4cd816975c3d2b045c64008c5a6e5e0823aee36dfa5077a2b5fada2', replay: 'GSTA-160' },
|
||||
'ship/sections/review-army.md': { sha: '82b93325070c47b9f310d7b1125ae3c2eca032f76672efef0b32f1bc3fb77a01', replay: 'GSTA-160' },
|
||||
'ship/sections/adversarial.md': { sha: 'c48aa7717c7438941fa23418367e19a62e07edda7445d0d5a55924e172dd5d33', replay: 'G1' },
|
||||
'review/sections/review-army.md': { sha: '4fa13b9830259649b136df5a6c1beccfcb5c6732921f109730a2a71c671ceba1', replay: 'GSTA-160' },
|
||||
'review/sections/review-army.md': { sha: '6269bb14fde178abd544ae966c0850c6b70dd7e822d73d5996dd4a1cb17d4879', replay: 'GSTA-160' },
|
||||
'review/sections/adversarial.md': { sha: 'e6962fa25b78f362654f2954f79683e524d2ebd452d1494f8a2b099888e8e255', replay: 'G1' },
|
||||
'review/checklist.md': { sha: '08e059eafdf22d0fdbc2f8daa2130bb51a5a0cb5fa2ce8a0780cc380e9ddab63', replay: 'GSTA-160' },
|
||||
'review/checklist.md': { sha: 'bcc8d926dd7365b00693863e124b11757b430bff219cecc7e477723bcb1875a1', replay: 'GSTA-160' },
|
||||
'review/design-checklist.md': { sha: 'b9205f88313cc64902c0b13e9685722ab8138d3dcc58916154f47274abda7d83', replay: '#3638' },
|
||||
'review/gate-integrity.md': { sha: 'f570db344c9a01df633bcaa281d6017f4f12420fd3e0aa3078c1ce06e0df8332', replay: '#3638' },
|
||||
'review/specialists/api-contract.md': { sha: '263d23ac119dd601d315c191dbdbd503d47c00264c9c0ca81959559ca11d4e95', replay: '#3638' },
|
||||
@@ -75,7 +75,7 @@ const REVIEWER_BRIEFS: Record<string, { sha: string; replay: Replay }> = {
|
||||
'review/specialists/simplification.md': { sha: 'f33846b1dcf2fdeef82d0744ab2ef48fb4a33b34a737dafc33dd0e891756689f', replay: '#3638' },
|
||||
'review/specialists/state-machines.md': { sha: '597215e4438d85d9cc71b48097c61eef7cba4f4b09dc14c92b4b94893b3d3ea2', replay: '#3638' },
|
||||
'review/specialists/testing.md': { sha: 'f028ca6da0940b1b8b8861ae5f9c156606c0fc343a554f6da6637f9dac1d2581', replay: 'GSTA-160' },
|
||||
'scripts/resolvers/fix-check.ts': { sha: '2f2fca5db2d3408377dc1ccbd89a820e9ebf9c3152707af7d47896bd074b0c0a', replay: 'GSTA-160' },
|
||||
'scripts/resolvers/fix-check.ts': { sha: '44608ce5713f56989b76f2332255418d8aad91f4638546861d70da31b7ae826e', replay: 'GSTA-160' },
|
||||
'lib/review-depth.ts': { sha: 'd4715a5f534d1470c63da879a3d66bb090a9b4929065d1f06c30acd97ef77bb0', replay: 'L' },
|
||||
};
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ afterEach(() => { while (repos.length) cleanup(repos.pop()!); });
|
||||
|
||||
describe('one blocking floor in every reviewer prompt', () => {
|
||||
test('the floor names security and keeps the 2026-10-26 words', () => {
|
||||
expect(BLOCKING_FLOOR).toContain('would fail a test, break production, lose data or secrets, or open a security hole');
|
||||
expect(BLOCKING_FLOOR).toContain('would fail a test, break production, or lose data or secrets, or open a security hole');
|
||||
});
|
||||
|
||||
test.each([
|
||||
@@ -35,7 +35,7 @@ describe('one blocking floor in every reviewer prompt', () => {
|
||||
});
|
||||
|
||||
test('the ship skeleton Review policy line names the same four outcomes', () => {
|
||||
for (const file of ['ship/SKILL.md.tmpl', 'ship/SKILL.md']) expect(read(file)).toContain('only a finding that would fail a test, break production, lose data or secrets, or open a security hole blocks a pass');
|
||||
for (const file of ['ship/SKILL.md.tmpl', 'ship/SKILL.md']) expect(read(file)).toContain('only a finding that would fail a test, break production, or lose data or secrets, or open a security hole blocks a pass');
|
||||
});
|
||||
|
||||
test('the fix-check prompt carries it too', () => {
|
||||
@@ -51,7 +51,7 @@ describe('the checklist sets check order, never severity', () => {
|
||||
}
|
||||
expect(checklist).toContain('The pass never sets severity.');
|
||||
expect(checklist).toContain('A category says what to check and in which order; it never sets severity.');
|
||||
expect(read('review/SKILL.md.tmpl')).toContain('Apply both checklist passes in order with its suppressions; neither sets severity.');
|
||||
expect(read('review/SKILL.md.tmpl')).toContain('Apply both checklist passes in order with suppressions; neither sets severity.');
|
||||
expect(read('review/SKILL.md.tmpl')).not.toContain('CRITICAL, then INFORMATIONAL');
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"bytes": -49,
|
||||
"bytes": -46,
|
||||
"why": "GSTA-160: the blocking floor names security; the Review policy line and the specialist schema line were tightened to fit"
|
||||
}
|
||||
Reference in new issue
Block a user