Merge remote-tracking branch 'origin/gsta-167-review-packets' into gsta-167-batched-review

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

# Conflicts:
#	bin/gstack-review-packet
#	lib/review-packet-collect.ts
#	lib/review-packet.ts
#	scripts/resolvers/review-army.ts
#	ship/sections/review-army.md
#	ship/sections/test-coverage.md
#	ship/sections/test-coverage.md.tmpl
#	test/review-packet.test.ts
#	test/size-ledger/ship/gsta167-review-packets.json
This commit is contained in:
garrytan committed 2026-10-29 22:20:50 +00:00
commit cc28dd35c5
21 files changed
+512 -75

No files matched your search

+1 -1
View File
@@ -129,7 +129,7 @@ Those files are part of the recorded content too.
Dispatch via the Agent tool with ${FOREGROUND_IF_AVAILABLE} (background is the default since ${CC_BACKGROUND_DEFAULT_SINCE}); findings must arrive before review concludes. ${BACKGROUND_RECOVERY} Fresh context avoids checklist bias, but this is the same harness, not an independent model unless runtime identity proves otherwise.
${isShip ? `Build Step 11's packets from Step 9's last full-pass plan: \`~/.claude/skills/gstack/bin/gstack-review-packet build --only adversarial,outside-voice --base <base> --out-dir "$_PKA"\` with \`_PKA=.gstack/tmp/review-packets-adv-p$PASS\`, that plan run's flags and \`--range <RANGE_BASE sha>\` from pass 2 on. The \`adversarial\` packet carries the defensive framing, the prompt below, the diff with fixtures in summary mode and a JSONL contract (\`NO FINDINGS\` is the expected result for a clean range). Its whole brief is "${packetBrief('<file>', '<out>')}"` : `Subagent prompt:
${isShip ? `Build Step 11's packets from Step 9's last full-pass plan: \`~/.claude/skills/gstack/bin/gstack-review-packet build --only adversarial,outside-voice --base <base> --out-dir "$_PKA"\` with \`_PKA=.gstack/tmp/review-packets-adv-p$PASS\`, that plan run's flags and \`--range <RANGE_BASE sha>\` from pass 2 on. Leave \`outside-voice\` out of \`--only\` when nothing will run it (\`CODEX_MODE\` neither \`ready\` nor \`unverified\` and no reviewer on another model family): collect counts a built packet with no output as missing coverage. The \`adversarial\` packet carries the defensive framing, the native adversarial prompt (\`ADVERSARIAL_NATIVE\`), the diff with fixtures in summary mode and a JSONL contract (\`NO FINDINGS\` is the expected result for a clean range). Its whole brief is "${packetBrief('<file>', '<out>')}" with that packet's \`read=\` ranges.` : `Subagent prompt:
"${DEFENSIVE_REVIEW_FRAMING}
Read the diff for this branch. First list changed files: \`DIFF_BASE=$(git merge-base origin/<base> HEAD) && git diff --name-status "$DIFF_BASE"\`. ${FIXTURE_SUMMARY_MODE}
+5 -2
View File
@@ -169,12 +169,15 @@ its \`DIFF_CMD:\` diff at -U8 against the literal diff base with a stat, past le
--out-dir "$_PK" --only specialist,red-team\` plus the plan run's flags, \`--range <sha>\` (the literal \`RANGE_BASE\` sha)
from pass 2 on and \`--plan-file <plan>\` when a plan is bound. Each \`PACKET:\` line is one
reviewer; a diff past 200 KB is split by path into shards (\`batched.1of3\`), each its
own reviewer. \`PACKETS:\` carries the plan's fingerprint. Step 9.1 dispatches every
own reviewer. Its \`read=\` ranges are what the reviewer reads in parallel, each under one
read call's budget. \`PACKETS:\` carries the plan's fingerprint; under a token cap,
\`gstack-ship-budget check --next\` takes build's \`BUDGET_NEXT:\` value (one
\`budget_role=\` per packet), never packet names. Step 9.1 dispatches every
packet; the Red Team's waits for collect (below) and Step 11 builds its own.
Launch one subagent per packet via the Agent tool (\`subagent_type: "general-purpose"\`,
${FOREGROUND_IF_AVAILABLE}; ${BACKGROUND_RECOVERY}) at its \`effort=\` on the same model
family. The whole brief is "${packetBrief('<file>', '<out>')}" Never paste a diff,
family. The whole brief is "${packetBrief('<file>', '<out>')}" with that packet's \`read=\` ranges. Never paste a diff,
checklist or finding into a brief.
**Fan-out (\`--review-fanout auto|serial|parallel\` in the prompt; default \`auto\`).**