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
refactor(actions)!: target is the only handler slot — delete the execute alias (objectstack#3856)
`ActionRunner.executeScript` read `action.target || action.execute`. Against
`@objectstack/spec` 17 that fallback is unreachable: `execute` is a tombstoned
key (objectstack#3855) the parser rejects with the rename prescription, so no
parsed action can carry it and the `||` could only ever yield `target`. Verified
against 17.0.0-rc.0 — an action declaring `execute` fails `ActionSchema.safeParse`
and a `target` action's parsed output has no `execute` key.
Deleted rather than kept as harmless residue: two handler slots is what let one
action run one script server-side and a different one client-side
(objectstack#3713, where this renderer preferred the alias while the spec
transform preferred `target`). A dead slot still reads as a live contract.
objectstack#3856 predicted a compile error here and there wasn't one — the real
finding. Neither reader was typed against the spec's `z.infer`; both
hand-declared the key:
- `@object-ui/types` `ActionSchema.execute` removed, so `execute: '…'` now fails
`tsc` at the authoring site (TS2353).
- `@object-ui/core` `ActionDef.execute` removed too, but `ActionDef` carries a
`[key: string]: any` index signature, so stale hand-authored metadata still
compiles. For that path `executeScript` returns the rename prescription rather
than a bare "No script provided" — removing an authorable key has to be
audible, and binding no handler silently is the objectstack#2169 "Mark Done
does nothing" shape.
The four action renderers stop forwarding `execute`, and Studio's `ActionPreview`
no longer falls back to it (previewing an alias-only draft as bound contradicted
the parse that rejects it on save). Tests move to `target`; the "prefer canonical
over the alias" case becomes a regression test that the alias is not read.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014DBMo8gnFduzgpuSHd5Eje
0 commit comments