Skip to content

Commit 6859542

Browse files
committed
v4/go-gate: close trailing-mint cache poisoning and cross-function stored-field callback carriage
1 parent 149492f commit 6859542

4 files changed

Lines changed: 1054 additions & 44 deletions

File tree

.agents/sow/current/SOW-0025-20260811-pure-go-exact-v4-port.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,6 +1002,50 @@ OS configs; go test ./... both tag sets, -race, vet (module and
10021002
gate), gofmt, and the import-graph boundary check over the 11
10031003
GOOS/GOARCH pairs all green.
10041004

1005+
### 2026-08-17 - level-1 re-review round: trailing-mint cache poisoning and cross-function carrier escapes closed (HEAD 149492f, committed with this record)
1006+
1007+
Two level-1 reviewer classes (Linnaeus/Sartre P2, silent at 149492f)
1008+
were probe-verified and fixed, plus the earlier Jason class closed at
1009+
149492f:
1010+
1011+
- Jason escape (fixed at 149492f): type-assertion callees, assertion
1012+
aliases, indexed container slots, and identity-return wrappers
1013+
reached the storage callback with clean owned buffers; slotOfExpr
1014+
authority, fieldAliases/indexAliases/returnAliases, composite-literal
1015+
seeding, and the rules-side counterparts close it. Battery P311
1016+
(nine liar shapes) / P312 (honest assertion-alias twins).
1017+
- Linnaeus/Sartre P2-1 (fixed in this round): the definition-site
1018+
mapped exemption read the END-STATE value of a local that a TRAILING
1019+
mint (v := s.buf; fn(v, v); v = s.r.page(0)) re-blessed after the
1020+
invocation; the callback-invocation walk now snapshot-evaluates the
1021+
exemption path (snapshotEvalExpr) so the call-time owned buffer is
1022+
not poisoned by the later mapped value.
1023+
- Linnaeus/Sartre P2-2 (fixed in this round): the callback formal
1024+
carried inside a STRUCT FIELD (h := car{cb: fn}; runCar(h, out, out),
1025+
h.run(out, out), composite-literal carriers, two-helper chains)
1026+
laundered clean owned buffers; field records are now keyed by
1027+
canonical struct type + field name (canonFieldType structural
1028+
identity, named and anonymous structs share keys), composite
1029+
literals are seeded, fieldInvokes compose through call chains
1030+
(recordFieldAliasComposition forwards caller records and re-records
1031+
callee invocations), and the rules side enforces mapped views at
1032+
every carrier call site (checkCallbackInvokeCalls field fence,
1033+
moduleFieldCarrier, storeCarrierTracedFieldCall suppressing the
1034+
generic unprovable-callee fence only for parameter-sourced carrier
1035+
calls).
1036+
1037+
Evidence: probe module shapes R-A..R-I (liars flagged: direct
1038+
trailing mint, helper trailing mint, named/anonymous carrier helpers,
1039+
carrier method receiver, composite-literal carrier, two-helper
1040+
chains; honest mint-before and mapped-view carrier twins clean).
1041+
Pinned durably as P313 (direct + helper trailing mint liars), P314
1042+
(mint-before honest twins), P315 (five carrier liars), P316 (four
1043+
mapped-carrier honest twins). Battery: 622 -> 626 cases (530
1044+
rejections, 96 benign acceptances), zero misses under
1045+
--self-test-jobs 24 (1:55 wall). Real module scan rc=0; go test
1046+
./..., -race, vet, gofmt, import-graph boundary check, and GOOS=windows
1047+
cross build all green.
1048+
10051049
## Review Process (user decision, 2026-08-12)
10061050

10071051
1. Implement the milestone work, always long-term-best and minimal-complete.

0 commit comments

Comments
 (0)