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>
This commit is contained in:
garrytanandcapy-ai[bot] committed 2026-11-02 19:36:33 +00:00
1 parent 0715327524
commit cfda4e868d
4 files changed
+33 -17

No files matched your search

+4 -4
View File
@@ -404,10 +404,10 @@ renders its brief; `verify --targeted-out .gstack/tmp/targeted.json` writes the
(Step 19, the handoff and the driver pass it when the file exists). The record is `done` when
the reader got its brief verbatim and its reply was collected on a committed diff, whatever
happened to HEAD after, and it names the commit it read (`head`). `write` binds it only while
that commit is an ancestor of HEAD and nothing changed after it carries a targeted class, with
the gate scan run over that range: a money, gate, auth or secret change after the read refuses
with `RECEIPT_INVALID`, a test edit the gate scan tags (a skipped case) included, while a
version, docs, TODOS.md (Steps 14 and 14.5) or untagged test commit still binds. Every verify
that commit is an ancestor of HEAD, its product patch is the receipt's, and nothing changed
after it carries a targeted class, with the gate scan run over that range: any product change
after the read refuses with `RECEIPT_INVALID`, docs and TODOS.md commits included, and so
does a test edit the gate scan tags (a skipped case). Every verify
removes `--targeted-out` before it writes a record, so an earlier run's record never reaches
Step 19. `write` and `carry` (which rescans the gate at the new head) also
refuse a receipt whose head needs a class no `done` record covers (`RECEIPT_INVALID`,