Master doc: docs/shaping/acs-reference-impl-slices.md §V3 — authoritative for this slice's scope.
Demo: One bundle produces allow, deny, ask, a rewritten tool call, and a policy-fired allow that is AGT's warn. Kill the Guardian under proceed and the step proceeds with an audit event; under deny it blocks. Posture negotiated at handshake.
Blocked by: #3
Plan: docs/superpowers/plans/2026-08-10-v3-dispositions-and-postures.md
Implemented across 10 tasks. 320 tests (319 pass, 1 skip — the byte-identity check, which bun run verify:pin runs for real), typecheck clean, verify:pin green, policy/lib/ byte-untouched.
Amendments
- Blocker resolved — S13 gets a session-keyed file at
.acs/sessions/<session_id>.json; one interface, two implementations (file-backed for subprocess hosts, in-memory for V5's in-process plugin) — a0ad0e7
- Demo corrected — ACS
defer has no AGT verdict behind it, so it comes off the demo. ACS being the wider contract is the finding, not a gap to fill — a0ad0e7
- R1.3 qualified —
annotations reaches AGT's policy input from a manifest-declared annotator, never from the snapshot, so AGT's warn gate is drivable only by a Guardian-originated score. One more cell for V7 to resolve — a0ad0e7
- AGT's stock approval gate is a single global switch, so several verdict classes need several config documents. Recorded as a mechanic of the demo, per R4.3 — a0ad0e7
- "Rest of the slice is data, not structure" corrected — the
modify path needs two structural pieces: synthesizing modifications from an AGT transform, and applying them — a0ad0e7
- D8 closed on the spec default,
proceed — a0ad0e7
- Risk row 11: AGT's stock
warn gate has no ACS v0.1.0 wire source — a0ad0e7
- Risk row 12: V3's fixture bundles could fork the pinned bundle; the helper asserts per-file byte identity — a0ad0e7
- §V2's R5.2 import gate widened to forbid
host-adapter, since N51 reads a host-side artifact — a0ad0e7
- §V7 gains a cell:
warn is green for the Guardian, red for a wire consumer — a0ad0e7
- Plan's Global Constraint 2 amended in place — it contradicted constraint 3, the contradiction shipped as an unrecorded fail-open, and constraint 3 governs: an unauditable bypass is not one §6.4 permits — 5277b6d
- §V3 row corrected — the shim never "always exits 0 once a payload parses"; there is no exit-1 tier now — 5277b6d
- Risk row 13:
seq is derived by reading the log, so concurrent hooks can duplicate a number — and V6 wants that index — 5277b6d
- Risk row 14: a ServerHello that cannot be persisted is now visible in the audit entry but still unused for the step that negotiated it — 5277b6d
Master doc:
docs/shaping/acs-reference-impl-slices.md§V3 — authoritative for this slice's scope.Demo: One bundle produces allow, deny, ask, a rewritten tool call, and a policy-fired allow that is AGT's
warn. Kill the Guardian underproceedand the step proceeds with an audit event; underdenyit blocks. Posture negotiated at handshake.Blocked by: #3
Plan:
docs/superpowers/plans/2026-08-10-v3-dispositions-and-postures.mdImplemented across 10 tasks. 320 tests (319 pass, 1 skip — the byte-identity check, which
bun run verify:pinruns for real), typecheck clean,verify:pingreen,policy/lib/byte-untouched.Amendments
.acs/sessions/<session_id>.json; one interface, two implementations (file-backed for subprocess hosts, in-memory for V5's in-process plugin) — a0ad0e7deferhas no AGT verdict behind it, so it comes off the demo. ACS being the wider contract is the finding, not a gap to fill — a0ad0e7annotationsreaches AGT's policy input from a manifest-declared annotator, never from the snapshot, so AGT'swarngate is drivable only by a Guardian-originated score. One more cell for V7 to resolve — a0ad0e7modifypath needs two structural pieces: synthesizingmodificationsfrom an AGTtransform, and applying them — a0ad0e7proceed— a0ad0e7warngate has no ACS v0.1.0 wire source — a0ad0e7host-adapter, since N51 reads a host-side artifact — a0ad0e7warnis green for the Guardian, red for a wire consumer — a0ad0e7seqis derived by reading the log, so concurrent hooks can duplicate a number — and V6 wants that index — 5277b6d