Skip to content

spec(ui): action:icon and action:group/menu members refuse confirmText beside an array params (ruling A) #30017

Open

Description

@objectstack-fleet

domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K

Ruled: 6624208841 · letter A
Ruling-ref: 6624208841

Filing gate: ② a decision the maintainer made. In the project thread "Discuss pending spec rulings", the maintainer answered 「以上同意」 at 2026-11-04T06:22:07Z to an A (refuse) / B (keep) question that recommended A. The question came from the review of PR #29869 (#29844), record 6599507683, which found two more doors outside the #29844 ruling: action:icon and the action:group / action:menu member rows. The ruling text is recorded as this card's first comment. ⛔ Not a claim. Suggested-grade: p3 (the same family as #29844 and #29383).

Business reason. A page action that carries both confirmText and an array params shows the user a confirm dialog first and a param dialog second, two dialogs for one decision. ActionSchema, InlineActionSchema and, since PR #29869, action:button refuse that pair. action:icon and the members of action:group / action:menu still accept it. Reader: the domain:spec seat (packages/spec/src/ui/component.zod.ts).

What the code does (at origin/main eee41490)

  • ActionIconPropsSchema (packages/spec/src/ui/component.zod.ts ≈:4055) carries description, params: z.unknown() and confirmText, with no pair rule.
  • actionContainerMemberShape() (≈:4212), shared by the action:group member (≈:4328) and the action:menu member (≈:4349), carries params (an array is the inputs to collect; a non-array is refused except on a type: 'api' member, where it is the request payload) and confirmText, with no pair rule.
  • The shared predicate and message are declaresConfirmBesideParams / CONFIRM_BESIDE_PARAMS_REFUSAL in packages/spec/src/ui/action-confirm-beside-params.ts, already used by action:button (≈:4010).

Wanted (ruling A)

  • ActionIconPropsSchema and the action:group / action:menu member rows refuse confirmText beside a NON-EMPTY ARRAY params, at path ['confirmText'], with the same predicate and message family. On the members, refine once on the shared shape's consumers so both containers carry it, with the item index in the path.
  • Still accepted: confirmText with no params, beside params: [], and beside an object-form params (a type: 'api' member's payload).
  • Before building, census in-repo carriers with both keys: examples/, packages/**, ui/**, skills/**, templates, cloud fixtures. Zero shipped carriers were known at ruling time.
  • Declarations: Clause-②: no (narrowing), Metadata-protocol: narrowed, @objectstack/spec minor, and an ADR-0087 disposition (precedent: PR fix(spec)!: an action:button refuses confirmText beside a non-empty array params, as the two action doors do #29869).

Serial: after PR #29869 (merged). One S PR.

Cross-references: #29844 (the action:button door), #29383 (the inline door), PR #29869 review record 6599507683.

Dedupe: searched action:icon confirmText params and action:menu confirmText params. The only hits are #29844 and #29383. New.

Body updated by the seat with the ruling line: 2026-11-04T06:27Z

Activity

  1. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K

    Ruling: decision thread "Discuss pending spec rulings" · letter A · maintainer 「以上同意」

    The maintainer was asked whether action:icon and the action:group / action:menu member rows should also refuse confirmText beside a non-empty array params (A, recommended) or keep accepting it (B). They answered 「以上同意」 at 2026-11-04T06:22Z, which covers this item among three, all taken as recommended. This card's letter is A.

    What the ruling binds (letter A):

    Recorded 2026-11-04T06:24Z.

  2. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p3 kept · domain:spec kept · pm:queue kept · 2026-11-04T06:55Z

    ⛔ Not a claim.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:specDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpm:queueReady for the PM dispatch looppriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions