mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-02 15:04:37 +01:00
* feat(ship): review loop converges (frozen finding scope, 3-pass cap, NO FINDINGS first-class) and receipts carry across conflict-only merges
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* test(ship): keep the Step 9 first-entry and Fix-First phrasing the skip/requeue contract asserts; fill the review record's pass, review_scope and range_base placeholders in the caller template test; narrow a test type
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: pre-landing review fixes (pass 1) and the review-loop budget wording
Two blocking findings from /ship's own pass 1, both reproduced in the QA smoke before the fix:
gstack-ship-receipt carry hashed the product diff with git patch-id --stable, which strips
whitespace, so a space moved in a reviewed shell line carried as "no product change"; and it
classed package.json and every lockfile as release metadata, so a dependency swap carried too.
The patch-id is now --verbatim, package.json and VERSION are metadata only while the change is a
version stamp (lib/pregate/stamp-only.ts), lockfiles are product unless the policy names them,
the test globs name code extensions, a dirty working tree refuses before anything is compared,
and a receipt carried twice keeps the reviewed head as carry.from.
gstack-review-scope: an unresolvable base is POLICY_SOURCE_UNAVAILABLE instead of a silent
working-tree read; --range-base is validated; git runs with core.quotePath=false; range_base is
null on pass 1; a blocking finding with no path is fix; category "testing" is a test finding
below the floor; defer searches once, files nothing on a failed search and exits 0 unfiled;
summary refuses zero matching passes and the receipt write is chained to it with &&; a finding
the diff causes elsewhere names the changed line in `cause` and classify follows it.
Review-loop budget wording (ideas from tstack's sol-loop and pstack's interrogate, rewritten;
NOTICE.md): the blocker / should / nit glossary and two stop rules in Step 9.4, the checklist
and docs/review-policy.md; a lead-judgment stage in the finding merge both /review and /ship
render. The core read diffs $RANGE_BASE from pass 2 on. Caps and pins re-measured with reasons.
Step 7 coverage audit: four tests added in existing files, the --review-loop case moved to its
own test (the shared test tripped bun's 5 s default).
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: pin the renumbered review-army stages and point the wording test at product code
CI at c3e27fc failed three free-tier tests, all this branch's own: the
workflow-required-steps fixture and shared-libs-rendering still pinned the
pre-Lead-judgment stage numbers, and test-of-test-ratchet counted
review-loop-budget-wording.test.ts as test-only code because it read only
generated markdown. The fixture and rendering test now pin stages 1-8, and the
wording test renders both armies through generateReviewArmy and reads the
authored ship template as well as the generated sections.
Pass-2 maintainability notes folded in: docs/troubleshooting.md names the two
new RECEIPT_CARRY_REFUSED causes (dirty tree, unreadable status) and the two new
REVIEW_SCOPE_INPUT causes (non-hex --range-base, summary with no matching
pass); gstack-review-scope's help states that classify reads the base branch's
policy and refuses an unresolvable base unless --policy is passed.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: date a review-log row from its binding start when it has no timestamp
The Step 9.4 template asks the writer to fill `timestamp`; the logger stamps
`review_binding.started_at` but never `timestamp`. `gstack-review-scope
summary` dropped such a row silently, so this PR's own pass 2 was missing from
REVIEW_LOOP (passes=1 for a two-pass loop). A row now dates from `timestamp`,
else from its binding start; a row with neither is still not counted.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* fix: pass-4 review fixes (carry stamp rule, deleted-file locus, scanned defer, diff prefixes, row time)
Five findings at the blocking floor from the Step 11 outside voice (gpt-6.1-sol)
and the native adversarial pass, fixed as a fourth pass approved by GStack
Minder under the three-pass policy:
- carry: a path the policy names under stamp_files, stamp_paths or
release_outputs is metadata only while its change is a stamp (versionStampOnly
for a manifest kind, stampOnlyText otherwise), the rule the tree receipt
applies; a logic change in a stamped source file is product. Every
metadata-listed path is read at both heads and a non-stamp change drops its
globs from the product exclusion.
- review-scope: parseHunks keeps a deleted file as a whole changed location, so
a cause anchored in a removed export is the diff's to fix, not deferred.
- defer: issues are filed through lib/gstack-post's publication scan; a HIGH
finding in the title or body refuses and a MEDIUM one needs a human, both
recorded as unfiled with the reason; --repo names the destination.
- classify: both diffs pin --src-prefix=a/ --dst-prefix=b/ --no-textconv, so
diff.mnemonicPrefix cannot send every finding outside.
- summary: a row dates from review_binding.started_at before the writer-typed
timestamp, so a date-only value cannot drop a real pass.
Docs: ship-policy.md#receipt-carry, review-policy.md, the Step 9.4 template
and the CHANGELOG gate-integrity note record the rule and the pass.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* test(review-army): assert the Red Team branch the run took in the N+1 case
Under the blocking floor the Performance specialist rates a 12-line N+1
INFORMATIONAL, so the conditional Red Team does not activate; the case
encoded the old severity (N+1 is CRITICAL, a Red Team always follows). It
now asserts the branch the run took: a Red Team that ran must follow the
Performance specialist; no Red Team is correct only when the report's own
count says 0 critical and its Red Team line names that reason. The N+1
detection assertion is unchanged. The free contract test gains the
informational-not-activated and informational-claimed controls and the
budget test's synthetic report carries the count line.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* v1.91.256.0 stamp
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
---------
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
221 lines
8.2 KiB
JSON
221 lines
8.2 KiB
JSON
{
|
|
"source": "Step and phase headings of the judged workflow skills, derived on 2026-10-04 from the generated Claude SKILL.md and sections (templates at the integration head). qa-only lists its template's own top-level headings. C1 calibration showed the workflow judges pass a bundle with a required step removed, so missing-step coverage lives here.",
|
|
"skills": {
|
|
"qa": {
|
|
"SKILL.md": [
|
|
"## Step 0: Detect platform and base branch",
|
|
"## Phases 1-6: QA Baseline",
|
|
"## Phase 7: Triage",
|
|
"## Phase 8: Fix Loop",
|
|
"### 8a. Diagnose and reproduce",
|
|
"### 8a.5. Regression test before repair",
|
|
"### 8b. Fix",
|
|
"### 8c. Re-test",
|
|
"### 8d. Commit verified work",
|
|
"### 8e. Classify",
|
|
"### 8e.5. Regression Test record",
|
|
"### 8f. Self-Regulation (STOP AND EVALUATE)",
|
|
"## Phase 9: Final QA",
|
|
"## Phase 10: Report",
|
|
"## Phase 11: TODOS.md Update"
|
|
],
|
|
"sections/exploratory.md": [
|
|
"## 1. Charter and preflight",
|
|
"## 2. Probe loop",
|
|
"## 3. Parent handoff",
|
|
"## 4. Final report"
|
|
],
|
|
"sections/qa-patterns.md": [
|
|
"### Phase 1: Initialize",
|
|
"### Phase 2: Authenticate (if needed)",
|
|
"### Phase 3: Orient",
|
|
"### Phase 4: Explore",
|
|
"### Phase 5: Document",
|
|
"### Phase 6: Wrap Up"
|
|
]
|
|
},
|
|
"qa-only": {
|
|
"SKILL.md": [
|
|
"## Request Parameters",
|
|
"## Test Plan Context",
|
|
"## Select Surfaces and Isolation",
|
|
"## Prepare Report Artifacts",
|
|
"## Browser Setup (conditional)",
|
|
"## Run the Selected Checks",
|
|
"## Output",
|
|
"## Additional Rules (qa-only specific)"
|
|
],
|
|
"sections/exploratory.md": [
|
|
"## 0. Preparation gate",
|
|
"## 1. Charter and preflight",
|
|
"## 2. Probe loop",
|
|
"## 3. Parent handoff",
|
|
"## 4. Final report"
|
|
],
|
|
"sections/reporting.md": [
|
|
"## 1. Establish each finding once",
|
|
"## 2. Fill timing fields from their actual boundaries",
|
|
"## 3. Assemble and check every repetition before writing",
|
|
"## 4. Capture permitted notes, then write the report"
|
|
]
|
|
},
|
|
"review": {
|
|
"SKILL.md": [
|
|
"## Step 0: Detect platform and base branch",
|
|
"## Step 1: Check branch",
|
|
"## Step 1.5: Scope Drift Detection",
|
|
"## Step 2: Read the checklist",
|
|
"## Step 2.5: Check for Greptile review comments",
|
|
"## Step 3: Get the diff",
|
|
"## Step 3.4: Workspace-aware queue status (advisory)",
|
|
"## Step 3.5: Diff scans",
|
|
"## Step 3.6: Gather review context",
|
|
"## Step 4: Critical pass (core review)",
|
|
"### Step 4.7: Exploratory QA (before Fix-First)",
|
|
"## Step 5: Fix-First Review",
|
|
"### Step 5.0: Cross-review finding dedup",
|
|
"### Step 5a: Classify each finding",
|
|
"### Step 5b: Auto-fix all AUTO-FIX items",
|
|
"### Step 5c: Batch-ask about ASK items",
|
|
"### Step 5d: Apply user-approved fixes",
|
|
"## Step 5.8: Persist Eng Review result",
|
|
"### 1. Re-review after edits",
|
|
"### 2. Fill the record"
|
|
],
|
|
"sections/adversarial.md": [
|
|
"## Step 4.8: Adversarial review (always-on)"
|
|
],
|
|
"sections/review-army.md": [
|
|
"## Step 4.5: Review Army — Specialist Dispatch",
|
|
"### Step 4.6: Collect and merge findings",
|
|
"#### 1. Parse outputs",
|
|
"#### 2. Validate severity",
|
|
"#### 3. Identify and merge",
|
|
"#### 4. Lead judgment",
|
|
"#### 5. Apply specialist confidence gates",
|
|
"#### 6. Score and present specialists",
|
|
"#### 7. Save specialist activity",
|
|
"#### 8. Hand off to Fix-First"
|
|
]
|
|
},
|
|
"ship": {
|
|
"SKILL.md": [
|
|
"## Step 0: Detect platform and base branch",
|
|
"## Step 0.9: Apple target detection",
|
|
"## Step 1: Pre-flight",
|
|
"## Step 2: Distribution Pipeline Check",
|
|
"## Step 3: Merge the base branch (BEFORE tests)",
|
|
"## Step 11.5: Bind the reviews",
|
|
"## Step 12: Version bump (auto-decide)",
|
|
"## Step 14: TODOS.md (auto-update)",
|
|
"## Step 14.5: Documentation audit (every ship)",
|
|
"## Step 15: Commit (bisectable chunks)",
|
|
"## Step 16: Verification Gate",
|
|
"### 1. Finish writers and prepare outputs",
|
|
"### 2. Choose the change route",
|
|
"### 3. Resolve documentation freshness",
|
|
"### 4. Verify the frozen candidate",
|
|
"### 5. Report, then push",
|
|
"## Step 17: Push",
|
|
"## Step 18: Prepare publication metadata",
|
|
"## Step 20: Persist ship metrics",
|
|
"## Step 21: Plan-tune discoverability nudge (first-successful-ship only)",
|
|
"## Step 22: Terminal line (every run)"
|
|
],
|
|
"sections/adversarial.md": [
|
|
"## Step 11: Adversarial review (always-on)"
|
|
],
|
|
"sections/changelog.md": [
|
|
"## Step 13: CHANGELOG (auto-generate)"
|
|
],
|
|
"sections/greptile-early.md": [
|
|
"## Step 6.5: Early Greptile PR (after the free tests pass)"
|
|
],
|
|
"sections/greptile.md": [
|
|
"## Step 10: Address Greptile review comments (if PR exists)"
|
|
],
|
|
"sections/plan-completion.md": [
|
|
"## Step 8: Plan Completion Audit",
|
|
"## Step 8.1: Plan Verification",
|
|
"## Step 8.2: Scope Drift Detection"
|
|
],
|
|
"sections/pr-body.md": [
|
|
"## Step 19: Create PR/MR"
|
|
],
|
|
"sections/review-army.md": [
|
|
"## Step 9: Pre-Landing Review",
|
|
"## Step 9.1: Review Army — Specialist Dispatch",
|
|
"### Step 9.2: Collect and merge findings",
|
|
"#### 1. Parse outputs",
|
|
"#### 2. Validate severity",
|
|
"#### 3. Identify and merge",
|
|
"#### 4. Lead judgment",
|
|
"#### 5. Apply specialist confidence gates",
|
|
"#### 6. Score and present specialists",
|
|
"#### 7. Save specialist activity",
|
|
"#### 8. Hand off to Fix-First",
|
|
"### Step 9.2.1: Exploratory QA (before Fix-First)",
|
|
"### Step 9.3: Cross-review finding dedup",
|
|
"## Step 9.4: Fix-First and persistence"
|
|
],
|
|
"sections/test-coverage.md": [
|
|
"## Step 7: Test Coverage Audit"
|
|
],
|
|
"sections/tests.md": [
|
|
"## Step 4: Test Framework Bootstrap",
|
|
"## Step 5: Run tests (on merged code)",
|
|
"## Step 6: Eval Suites (conditional)"
|
|
]
|
|
},
|
|
"plan-ceo-review": {
|
|
"SKILL.md": [
|
|
"## Step 0: Detect platform and base branch",
|
|
"## Step 0: Nuclear Scope Challenge + Mode Selection",
|
|
"### 0A. Premise Challenge",
|
|
"### 0B. Existing Code Leverage",
|
|
"### 0C. Dream State Mapping",
|
|
"### 0D. Alternatives (reusable decision procedure)",
|
|
"### 0E. Mode Selection",
|
|
"### 0F. Expansion Framing (shared by EXPANSION and SELECTIVE EXPANSION)",
|
|
"### 0G. Mode-Specific Analysis",
|
|
"### 0H. Persist CEO Plan (EXPANSION and SELECTIVE EXPANSION only)",
|
|
"### 0I. Temporal Interrogation (EXPANSION, SELECTIVE EXPANSION, and HOLD modes)"
|
|
],
|
|
"sections/review-sections.md": [
|
|
"### Section 1: Architecture Review",
|
|
"### Section 2: Error & Rescue Map",
|
|
"### Section 3: Security & Threat Model",
|
|
"### Section 4: Data Flow & Interaction Edge Cases",
|
|
"### Section 5: Code Quality Review",
|
|
"### Section 6: Test Review",
|
|
"### Section 7: Performance Review",
|
|
"### Section 8: Observability & Debuggability Review",
|
|
"### Section 9: Deployment & Rollout Review",
|
|
"### Section 10: Long-Term Trajectory Review",
|
|
"### Section 11: Design & UX Review (skip if no UI scope detected)"
|
|
]
|
|
},
|
|
"plan-eng-review": {
|
|
"SKILL.md": [
|
|
"### Step 0: Scope Challenge"
|
|
],
|
|
"sections/review-sections.md": [
|
|
"### 1. Architecture review",
|
|
"### 2. Code quality review",
|
|
"### 3. Test review",
|
|
"### 4. Performance review"
|
|
]
|
|
},
|
|
"setup-deploy": {
|
|
"SKILL.md": [
|
|
"### Step 1: Check existing configuration",
|
|
"### Step 2: Detect platform",
|
|
"### Step 3: Platform-specific setup",
|
|
"### Step 4: Write configuration",
|
|
"### Step 5: Verify",
|
|
"### Step 6: Summary"
|
|
]
|
|
}
|
|
}
|
|
}
|