Skip to content

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

Description

@objectstack-fleet

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):
    • ComponentPropsMap['action:button'].safeParse({ label: 'Go', actionType: 'api', endpoint: '/api/v1/x' }) → success. action:icon gives the same.
    • 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/main a5bce408):

  • 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

Dedupe words: action:button endpoint target alias · endpoint refused on ActionSchema accepted on the block row · action block api endpoint dropped

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:specpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions