fix(#3968): measure commit claims at all three surfaces — ledger, verifier BLOCKER, porcelain HANDOFF (#4230)
* test(#3968): commit claims must be measured against git, never narrated * fix(#3968): measure commit claims at all three surfaces Emitted-Drift-Ack-Growth: gsd-executor.md — #3968 plan commit ledger and measured commits contract (held under the agent size cap) Emitted-Drift-Ack-Growth: verify-work.md — #3968 commit-claim reconciliation with the same rev-list instrument Emitted-Drift-Ack-Growth: pause-work.md — #3968 uncommitted_files from git status --porcelain * fix(#3968): retired slash syntax, allowlist line pin, git-compare test pin * fix(#3968): persist the ledger on disk and reconcile with the same rev-list instrument Emitted-Drift-Ack-Growth: gsd-executor.md — #3968 plan commit ledger and measured commits contract (held under the agent size cap) Emitted-Drift-Ack-Growth: verify-work.md — #3968 commit-claim reconciliation with the same rev-list instrument * fix(#3968): hold the gsd-executor size cap with a compact ledger contract Emitted-Drift-Ack-Growth: gsd-executor.md — #3968 plan commit ledger and measured commits contract (held under the agent size cap) * fix(#3968): allowlist pin and HALT regex track the final prose * chore(#3968): changeset for measured commit claims * chore(#3968): backfill changeset pr number * fix(#3968): quote the BASE expansion (SC2086) * ci: raise the test-lane budget 21 to 32 minutes (measured cost grew past the cap) --------- Co-authored-by: sim <sim@local>
This commit is contained in:
@@ -106,13 +106,23 @@ timestamp=$(gsd_run query current-timestamp full --raw)
|
||||
"decisions": [
|
||||
{"decision": "{what}", "rationale": "{why}", "phase": "{phase_number}"}
|
||||
],
|
||||
"uncommitted_files": [],
|
||||
"uncommitted_files": ["XY path", "..."], # #3968: MEASURED — see below
|
||||
"next_action": "{specific first action when resuming}",
|
||||
"context_notes": "{mental state, approach, what you were thinking}"
|
||||
}
|
||||
```
|
||||
|
||||
Any recorded `async_jobs` entries are the primary resume context on the next session — check them first before treating a PLAN-without-SUMMARY as incomplete work.
|
||||
|
||||
**`uncommitted_files` is measured, never asserted (#3968).** Populate it from an actual call,
|
||||
not from memory — a narrated `[]` over a dirty tree is how 14 plans' worth of uncommitted
|
||||
code went invisible in the wild:
|
||||
```bash
|
||||
UNCOMMITTED=$(git status --porcelain)
|
||||
# One array entry per line ("XY path"); truncate the list at 50 entries and note the
|
||||
# elided count, but NEVER round it to empty — a non-empty porcelain output is the single
|
||||
# most load-bearing fact a resume session needs.
|
||||
```
|
||||
</step>
|
||||
|
||||
<step name="write">
|
||||
|
||||
Reference in New Issue
Block a user