Part of #1126
Scope
The two existing-machinery fixes the adversarial pass exposed (both are prerequisites for honest evidence, not new features):
- S-13b — central truncation:
truncation.ts slices arrays to 50 without updating sibling metadata and has no whole-result byte bound; recompute truncation metadata after any cap the central pass applies and enforce a result-level byte bound.
- S-15 — receipt ordering:
withReceipt commits success when the flow returns, before the runner validates output (mcp-server.ts:96-112), and a throwing flow leaves prior green receipts standing. Move receipt commit after output validation; record thrown/validation failures as failed attempts so a stale receipt cannot masquerade as the new run.
S10 (evidence-gate acceptance) is explicitly blocked on this issue — see its body for why.
Design source: RFC #1123 (rfc.md §4 Wave 1) + adversarial-sol.md S-13/S-15.
Acceptance
Part of #1126
Scope
The two existing-machinery fixes the adversarial pass exposed (both are prerequisites for honest evidence, not new features):
truncation.tsslices arrays to 50 without updating sibling metadata and has no whole-result byte bound; recompute truncation metadata after any cap the central pass applies and enforce a result-level byte bound.withReceiptcommits success when the flow returns, before the runner validates output (mcp-server.ts:96-112), and a throwing flow leaves prior green receipts standing. Move receipt commit after output validation; record thrown/validation failures as failed attempts so a stale receipt cannot masquerade as the new run.S10 (evidence-gate acceptance) is explicitly blocked on this issue — see its body for why.
Design source: RFC #1123 (
rfc.md§4 Wave 1) +adversarial-sol.mdS-13/S-15.Acceptance
truncated: false