mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-04 15:57:33 +01:00
* fix(flaky): qa-callers parents hand children literal commands and paths; Step 9 gate scan joins diff discovery Nine paid ship qa-callers reds after #3553 (late-input, plan-checks, small-cli) had two causes, replayed from their retained captures (2026-10-29 flaky pass, GSTA-162): - six trials: the parent paraphrased its specialist prompt and the child ran the one refused call (git -C <dir> diff, or a cd into the checklist directory); - three late-input trials hit error_max_turns at 25/25 after running Step 9's gate scan only after the receipt, or never. The session prompt now tells the parent the child starts in the product directory, to write each command exactly as it must run and each Read as one literal path; the ship scheduling contract lists Step 9's review-plan command and gate-scan block with the first diff discovery. The detector is unchanged. Seven new replay tests fail with the fixture prompt stashed. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix(flaky): docsync detectors accept a read given --help, the cap gate's wrong-path 127 and a full read before a failed separator; only the accepted docs attempt is parsed strictly Replayed from the 2026-10-29 window's ship-docsync reds (GSTA-162): - current 40822033640, completion 40815828320, store 40809051510: the parent joined `cat <candidate> --help 2>&1 | head -N` onto a line of reads; GNU cat printed its usage and read nothing. A declared read command given --help is neutral; its operands are still checked. - stale-after 40749421675: the cap gate typed at the shard root exited 127, then ran at the declared path. The wrong-path 127 excuse now covers the cap gate as well as the candidate. - failure 40828580338: phase.md printed in full, then zsh failed the `echo ======` separator. The read counts when the line's first unpiped cat printed the whole file first. - completion 40805543956: the parent rejected attempt 1 (no documentation_section) and re-audited; the case now parses only the accepted attempt strictly. Four public fixtures, registered as free fixtures. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * CHANGELOG: [Unreleased] entry for the 2026-10-29 flaky pass Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * docs: re-pin the ship-docsync completion/current detector-inventory row to its moved lines 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>
22 lines
2.6 KiB
JSON
22 lines
2.6 KiB
JSON
{
|
|
"note": "The first two tool calls of the captured ship-docsync-failure parent (run 40828580338 paid-slice-8-a1, PR #3572 @ 14c4c5e2, tested merge cbba43c2 onto main ff2f191b; red on docsCompletedRead(phase) toBe(true), passed on the in-run rerun). {home} is the fixture home. Call 0 printed phase.md in full, then zsh read echo ====== as an = command lookup, printed \"===== not found\" and abandoned the rest of the line (exit 1); call 1 reran the abandoned reads. Its output is kept verbatim; call 1 output is dropped.",
|
|
"sourceRun": "40828580338 slice 8 ship-docsync-failure (PR #3572 screen, tested sha cbba43c2)",
|
|
"sourceFileSha256": "59d411c8e4c07cfc46408ae6f753541721180dbbbe6032dfe6abf0778c6b5afb",
|
|
"calls": [
|
|
{
|
|
"tool": "Bash",
|
|
"input": {
|
|
"command": "cat {home}/phase.md; echo ======; cat {home}/ship-invocation.md; echo =====; ls {home} {home}/.claude/skills/gstack"
|
|
},
|
|
"output": "Exit code 1\n## Step 14.5: Documentation audit (every ship)\n\n**Doc-sync invariant:** Every ship dispatches the /document-release subagent before final\ncommit/verification/publication, including reruns, already-pushed branches, existing PRs and docs-only changes.\nNo edits means an executed audit, not a skip; report the section's verified outcome.\n\n> **STOP.** Before auditing docs before final commit/verification (Step 14.5), on every ship, Read `~/.claude/skills/gstack/ship/sections/documentation.md` and execute it\n> in full. Do not work from memory — that section is the source of truth for this step.\n\n\n\n## Documentation\n<Embed Step 14.5's vetted nonempty `documentation_section` for this invocation:\nits saved section file, inserted unchanged by the compose block's `DOCS_SECTION_FILE` lines.\nA blocked audit shipped under a user exception has no section file: state its\nblocked status, scope and exception here and drop the block's `DOCS_SECTION_FILE` guard\nand its `cat -- \"$DOCS_SECTION_FILE\" && echo &&` step. The exception is one line,\nword for word as Step 14.5 saved it in `.gstack/tmp/docs-audit.json`:\n`Documentation exception: accepted by <accepted_by> <date> via <via>: <reason>`;\nthe receipt write below refuses (`DOCS_AUDIT_BLOCKED`) when the body lacks it.>\n<Always include the status and reviewed scope: updated, current, or blocked with the actual user's named risk exception. Never omit this section or reuse another invocation's audit.>\n\n(eval):1: ===== not found"
|
|
},
|
|
{
|
|
"tool": "Bash",
|
|
"input": {
|
|
"command": "cat {home}/ship-invocation.md; ls -la {home} {home}/.claude/skills/gstack {home}/.claude/skills/gstack/ship/sections"
|
|
},
|
|
"output": ""
|
|
}
|
|
]
|
|
}
|