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
Pinned by a test — packages/spec/src/ui/action.test.ts:1032, "should preserve target over execute when both are set" → asserts result.target === 'preferredHandler'.
runs preferredHandler server-side (the parsed metadata carries target) and legacyHandler client-side (ActionRunner prefers execute). Two different scripts for one action, with no error anywhere.
Low frequency — it needs an author to set both, which only happens mid-migration or by copy-paste — but it is silent and the failure is "the wrong code ran", which is the worst kind to debug.
Suggested fix
Align objectui on the spec's rule (target || execute), since the spec's direction is the documented one (execute is the deprecated alias) and is test-pinned. Then either:
keep both readers permanently, or
have the spec transform dropexecute from its output once it has been lowered, so the ambiguity cannot reach a renderer at all — the same "canonical wins, alias disappears" shape used for agent.knowledge.topics → sources ([P2] Naming drift → silent no-ops (spec key ≠ consumed key) #1891), which asserts 'topics' in parsed === false.
The second is stronger: it makes the divergence unrepresentable rather than merely agreed-upon.
Verification notes
Both sides read directly, not via the agent report that surfaced this. The ledger entry for action.execute (corrected in #3711) now cites both readers and records this divergence.
Found while re-verifying the liveness ledger's
action.executeentry (#3711). Not a ledger problem — a real behavioural divergence.The divergence
executeis the deprecated alias oftarget. Both sides handle "author declared both" — in opposite directions.Spec keeps
target—packages/spec/src/ui/action.zod.ts:576-581:Pinned by a test —
packages/spec/src/ui/action.test.ts:1032, "should preserve target over execute when both are set" → assertsresult.target === 'preferredHandler'.objectui keeps
execute—packages/core/src/actions/ActionRunner.ts:704, insideexecuteScript():Consequence
An action declaring both:
runs
preferredHandlerserver-side (the parsed metadata carriestarget) andlegacyHandlerclient-side (ActionRunner prefersexecute). Two different scripts for one action, with no error anywhere.Low frequency — it needs an author to set both, which only happens mid-migration or by copy-paste — but it is silent and the failure is "the wrong code ran", which is the worst kind to debug.
Suggested fix
Align objectui on the spec's rule (
target || execute), since the spec's direction is the documented one (executeis the deprecated alias) and is test-pinned. Then either:executefrom its output once it has been lowered, so the ambiguity cannot reach a renderer at all — the same "canonical wins, alias disappears" shape used foragent.knowledge.topics→sources([P2] Naming drift → silent no-ops (spec key ≠ consumed key) #1891), which asserts'topics' in parsed === false.The second is stronger: it makes the divergence unrepresentable rather than merely agreed-upon.
Verification notes
Both sides read directly, not via the agent report that surfaced this. The ledger entry for
action.execute(corrected in #3711) now cites both readers and records this divergence.Refs #3711, #3686.