Files
Garry Tanandcapy-ai[bot] 82db89ab3e v1.93.22.0 fix(ship): targeted record binds to the commit it read; write/carry run the targeted verdict; fix-check ledgers count (GST-986) (#3887)
* test: GST-986 failing-first cases for the targeted record, receipt write/carry and fix-check counters

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

* fix(ship): GST-986 targeted record binds to the read commit; write/carry run the targeted verdict; fix-check ledgers count

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

* fix(ship): GST-986 write/carry report fail-closed targeted classes; docs, changelog, adversarial repin (brief bodies unchanged)

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

* test: GST-986 review round 1 failing-first: a docs/TODOS commit after the targeted read binds; verify clears a stale --targeted-out

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

* fix(ship): GST-986 review round 1: a record binds across class-free commits after the read; verify removes a stale targeted record

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

* test: GST-986 fix-check failing-first: test skip after the read, re-raised blocker, verify early-return cleanup, carry wording

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

* fix(ship): GST-986 scoped fix-check batch: record binds only when nothing after the read carries a class (gate scan run), a re-raised blocker is not fixed, verify always clears the stale record, carry names #3859

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

* test: GST-986 carry case runs receiptDepthAtHead under the fixture's private HOME (pregate real-HOME tripwire)

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

* test: GST-986 classify .gstack/tmp/targeted.json as a /ship producer (gstack-clean, from the main merge)

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

* fix: GST-986 bind a targeted record only to the product patch the reader read

The targeted gate reader at 0715327 found that the classifier-only binding
rule kept a stale record bound when a post-read edit removed an enforcing
line with no money token. Restore main's equal-product-patch check and keep
the gate-scan refusal on top of it. Docs-only binding moves to GST-1031.

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>
2026-11-02 21:53:30 +00:00

1.8 KiB

Step 18-H: Handoff without a PR (automation lanes)

Replaces the pr-body section when the run must not open a PR (--no-pr, an automation lane, an unattended parent said so). Nothing here publishes. What an unattended run may do is docs/unattended.md#what-an-unattended-session-may-do.

  1. Verify-only checks: write Step 16's per-lane pass/fail/skip counts, naming requires-remote lanes, to .gstack/tmp/ship-gate.json as the pr-body section does, then (with its Issue links flags; ask nothing):
    ~/.claude/skills/gstack/bin/gstack-issue-links --base <base> --out .gstack/tmp/issues.json
    ~/.claude/skills/gstack/bin/gstack-ship-receipt write --base <base> --gate @.gstack/tmp/ship-gate.json --issues @.gstack/tmp/issues.json --out .gstack/tmp/ship-receipt.md
    
    When Step 11 saved .gstack/tmp/targeted.json, add --review-targeted @.gstack/tmp/targeted.json to that write.
  2. Send the completion message, identifiers first, in this order: the SHIP_RECEIPT: line and receipt block; branch: and sha: (git rev-parse HEAD), pushed or not pushed; inputs: the plan or issue, the base SHA and the spend cap; before/after: one row per claimed metric, measured on base and on this SHA with the command used; escalation: the one condition that stops the merge (a requires-remote lane, an open gate finding, an unverified claim) or none. issues: its lines, unpromoted candidates and lookup failures. Full thread ids (jam_…) cross-thread.
  3. Skip Steps 19 and 21. Run Step 20 with "version":null when NO_VERSION applied, then Step 22 with --body .gstack/tmp/ship-receipt.md.

Multi-lane runs

Lanes push a WIP commit after each step and gate a pushed SHA.