You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#235's accepted fix makes a self-decided ask-user finding visible by marking firstmate's own answers, so an answered call can be told from one a worker decided for itself. That marking works only where the answer's decision key is recoverable from what already exists: the key IS the held task id, or it is the legacy <origin>-decision-<key> form that encodes the key in the id.
It does NOT cover the shape captain-hold-lifecycle itself recommends. That skill says, verbatim, "Prefer holding the work item the question gates over minting a new row", so the common case is an origin task escalating needs-decision [key=route] while the held row is the gated work item under a different id. In that shape the mark cannot be attributed.
Why it was not simply fixed
Established from the code during the #235 work rather than assumed: command_complete receives a flat list of hold ids with no keys attached, and pairs them with fold-derived keys only by writing the whole inventory on every key's line, so the transfer note records no key-to-hold mapping at all. Any hold in the inventory therefore matches every key that the same complete transferred. Nothing else associates a hold with a key.
An attempted fix inside #235 made this worse rather than better: it over-marked, writing a false answered record for one call using another call's ruling and then suppressing the real answer. That is a false record, which is strictly worse than a gap.
So closing this properly needs durable per-key attribution that does not exist today. That is new state, it was judged an expansion beyond #235's accepted intent, and it was declined there deliberately.
Marking restricted to the provably attributable shapes, and for every other shape the row is VISIBLY SILENT: it reports that this shape cannot be attributed and why, rather than emitting either a verdict or an accusation. A check that names what it cannot see is preferred over one that quietly gets it wrong.
The question this issue holds
Should firstmate carry durable per-key attribution so a captain answer can be tied to the specific decision key it answered, covering the gated-hold shape?
Worth weighing when it is picked up:
The benefit is real: the uncovered shape is the one the lifecycle skill actively recommends, so the blind spot sits over the common case rather than an edge.
The cost is real too: this mechanism produced defects in five consecutive review rounds, and the one attempt to add correlation without new state produced a false-record defect. New durable state on that path deserves a deliberate decision rather than an accretion.
Split out of #235 on 2026-09-04 as a deliberate deferral with a record, not a quiet scope reduction.
What #235's fix does and does not cover
#235's accepted fix makes a self-decided ask-user finding visible by marking firstmate's own answers, so an answered call can be told from one a worker decided for itself. That marking works only where the answer's decision key is recoverable from what already exists: the key IS the held task id, or it is the legacy
<origin>-decision-<key>form that encodes the key in the id.It does NOT cover the shape
captain-hold-lifecycleitself recommends. That skill says, verbatim, "Prefer holding the work item the question gates over minting a new row", so the common case is an origin task escalatingneeds-decision [key=route]while the held row is the gated work item under a different id. In that shape the mark cannot be attributed.Why it was not simply fixed
Established from the code during the #235 work rather than assumed:
command_completereceives a flat list of hold ids with no keys attached, and pairs them with fold-derived keys only by writing the whole inventory on every key's line, so the transfer note records no key-to-hold mapping at all. Any hold in the inventory therefore matches every key that the samecompletetransferred. Nothing else associates a hold with a key.An attempted fix inside #235 made this worse rather than better: it over-marked, writing a false
answeredrecord for one call using another call's ruling and then suppressing the real answer. That is a false record, which is strictly worse than a gap.So closing this properly needs durable per-key attribution that does not exist today. That is new state, it was judged an expansion beyond #235's accepted intent, and it was declined there deliberately.
What #235 ships instead
Marking restricted to the provably attributable shapes, and for every other shape the row is VISIBLY SILENT: it reports that this shape cannot be attributed and why, rather than emitting either a verdict or an accusation. A check that names what it cannot see is preferred over one that quietly gets it wrong.
The question this issue holds
Should firstmate carry durable per-key attribution so a captain answer can be tied to the specific decision key it answered, covering the gated-hold shape?
Worth weighing when it is picked up:
completerecord the mapping at write time IF the caller can supply it, rather than reconstructing it afterwards. That was ruled out for A steer delegated ask-user finding authority back to the implementation worker, and nothing in the fleet noticed for four findings #235 only because the current caller does not have the keys, which is a caller question rather than a storage question.Not urgent
Nothing is blocked. The shipped behaviour is honest about its own limits, which is what #235 asked for.