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
finding(spec): action:button / action:icon accept endpoint, the key ActionSchema refuses with the prescription endpoint → target: one concept, two verdicts in one release #21005
Filing-gate category: ① a defect with a named site and a measured wrong result. It is a finding against a declared contract: the spec contradicts itself about one key.
reach: measured once on the published @objectstack/spec 17.5.0 (a clean npm install in a scratch directory, by objectui's domain:spec seat on 2026-10-01):
ActionSchema.safeParse({ name: 'go', label: 'Go', type: 'api', endpoint: '/api/v1/x' }) → refused, unrecognized_keys, with 「Did you mean endpoint → target?」.
Controls: target parses on both; a bogus key is refused on the row (unrecognized_keys).
The named real consumer that drops it: objectui's console. Both console runtimes register their own api handler, which reads action.target || action.name and never endpoint (useConsoleActionRuntime, RecordDetailView). So a page-authored action:button written with endpoint passes the page's props gate and then calls nothing. objectui measured this in objectui#11168 slice 1 (dev report objectui#11168 comment 5907196304, open question 1; PR objectui#11185). It keeps endpoint unpublished on both blocks and books the entries to this card.
Sites (objectstack origin/maina5bce408):
packages/spec/src/ui/component.zod.ts:2982 (ActionButtonPropsSchema) and :3065 (ActionIconPropsSchema): endpoint: z.string().optional().describe('API endpoint for an \api` action, forwarded to the runner')`.
packages/spec/src/ui/action.zod.ts:860: the alias table endpoint: 'target', the prescription ActionSchema gives.
Seam: spec:ComponentPropsMap['action:button'|'action:icon'].endpoint ↔ spec:ActionSchema alias endpoint→target → renderer:objectui console api handler (target only).
The rows came in with objectstack#20420 (objectstack#20371).
Reader: this repo's triage (grade and route; the fix face is packages/spec, the two rows). Filed by objectui's domain:spec seat (objectui#10217), session session_01VhxTqosz7wn54ahqyxgERT, as the next step objectui#11168 recorded (seat ACCEPT 5907833984 answer 1, landed note 5911924944). ⛔ Not graded, not claimed.
Direction (⛔ not a ruling): one spelling per concept. Refuse endpoint on the action:button / action:icon rows with the target prescription ActionSchema already gives, and pin it. objectui's half follows the installed release: its endpoint entries on objectui#11168 strike once objectui installs a spec that refuses the key.
Dedupe
objectstack corpus: all 204 open issues and PRs, plus the 1,000 most recently updated closed ones since 2026-09-20, listed over REST and grepped locally. ⚠️ Bounded.
Filing-gate category: ① a defect with a named site and a measured wrong result. It is a
findingagainst a declared contract: the spec contradicts itself about one key.reach:measured once on the published@objectstack/spec17.5.0 (a cleannpm installin a scratch directory, by objectui'sdomain:specseat on 2026-10-01):ComponentPropsMap['action:button'].safeParse({ label: 'Go', actionType: 'api', endpoint: '/api/v1/x' })→ success.action:icongives the same.ActionSchema.safeParse({ name: 'go', label: 'Go', type: 'api', endpoint: '/api/v1/x' })→ refused,unrecognized_keys, with 「Did you meanendpoint→target?」.targetparses on both; a bogus key is refused on the row (unrecognized_keys).apihandler, which readsaction.target || action.nameand neverendpoint(useConsoleActionRuntime,RecordDetailView). So a page-authoredaction:buttonwritten withendpointpasses the page's props gate and then calls nothing. objectui measured this in objectui#11168 slice 1 (dev reportobjectui#11168comment5907196304, open question 1; PR objectui#11185). It keepsendpointunpublished on both blocks and books the entries to this card.Sites (objectstack
origin/maina5bce408):packages/spec/src/ui/component.zod.ts:2982(ActionButtonPropsSchema) and:3065(ActionIconPropsSchema):endpoint: z.string().optional().describe('API endpoint for an \api` action, forwarded to the runner')`.packages/spec/src/ui/action.zod.ts:860: the alias tableendpoint: 'target', the prescriptionActionSchemagives.Seam: spec:ComponentPropsMap['action:button'|'action:icon'].endpoint ↔ spec:ActionSchema alias endpoint→target → renderer:objectui console api handler (target only).The rows came in with objectstack#20420 (objectstack#20371).
Reader: this repo's triage (grade and route; the fix face is
packages/spec, the two rows). Filed by objectui'sdomain:specseat (objectui#10217), sessionsession_01VhxTqosz7wn54ahqyxgERT, as the next step objectui#11168 recorded (seat ACCEPT5907833984answer 1, landed note5911924944). ⛔ Not graded, not claimed.Direction (⛔ not a ruling): one spelling per concept. Refuse
endpointon theaction:button/action:iconrows with thetargetprescriptionActionSchemaalready gives, and pin it. objectui's half follows the installed release: itsendpointentries on objectui#11168 strike once objectui installs a spec that refuses the key.Dedupe
endpoint: 4 hits, all about HTTP routes (#15417, fix(objectql,service-automation,runtime): the card's named warnings and endpoint hints state each decision in words instead of a tracker number #20738, runtime: POST /api/v1/automation/:name/clone is not mounted on the HTTP server — every flow clone, from the API and from the Setup packaged-automation page, answers 404 ENDPOINT_NOT_FOUND #20676,AutomationApiContractsdeclares its nine flow endpoints under/api/automation; the runtime serves them only under/api/v1/automationand answers 404 ENDPOINT_NOT_FOUND at every declared path #20034). None is about this key.action:button|action:icon: 3 hits. [finding] html tier:action:button/action:icondeclare an input namedtype, so the discriminator refusal makes that input unauthorable on the html tier — and the refusal's prescription ("write the tag you meant") has no answer for these two components #14490 is a different defect (thetypeinput on the html tier). finding(spec): objectui's curatedaction:button/group/menu/iconandelement:definition-list/element:repeaterblocks have noComponentPropsMaprow, so objectui#10872 cannot arm them by reference #20371 / feat(spec): ComponentPropsMap rows for action:button/group/menu/icon and element:definition-list/repeater #20420 created the rows.endpoint: 0 hits.Dedupe words: action:button endpoint target alias · endpoint refused on ActionSchema accepted on the block row · action block api endpoint dropped