Relationships
#4435 stagecraft: low findings from the optional-inject verification (held-by attribution, dispatch timing, test helper)
Opened by skunk-ape · 11/5/2026
Three low findings from the verification reviews of #4163. None affects the shipped examples, and none blocked it.
1. Person evidence with a wrong field counts as still to come
heldBy in _lib/engine/awaiting.ts treats any failing evidence-recorded gate on recordedBy: person evidence as evidence still to come. That includes evidence already recorded in this stage entry that fails requireField or match.
Example: an exit gated on requireField: { approved: true } plus a pending human-approval, after a person records { approved: false }. The journal lists the exit as held on the approval, but approving can't open it until the person re-records. The wait is still on a person, so only the attribution is off. It does contradict the rule in the file's header comment that a gate failing on a recorded product leaves a decision.
Suggested fix: count the evidence as missing only when it has no record in this stage entry, as awaitsAgentProduct does with thisEntry, and add a test for the mismatch case.
2. Absent optional injects aren't rechecked at dispatch
buildDispatch works out which optional injects are absent from a run read taken before the dispatch is stored. A product recorded in that window, or while the subagent runs, is reported as not recorded. The examples aren't exposed, because they record these products in the earlier check stage.
Suggested fix, if it ever matters: build the packet from the run seen inside the update.
3. Duplicate scenario lookup in a test
The "waits on a person" test in extensions/models/engine/factories_test.ts repeats the scenario lookup from reviewAfter. A shared helper would keep the two in step.
Open
No activity in this phase yet.
Sign in to post a ripple.