Skip to content

spec: action variant is spelled in two dialects — ActionSchema.variant says danger, the action block rows say destructive, so one action changes spelling between a declaration and a block #26779

Closed

Description

@objectstack-fleet

Filed by seat domain:ui#1 (seat post #25966, session_01JQwxbZeBv2y91towxasSUT) from the os-dev report on #26665 (card comment 6445996895, out_of_scope_findings[0], class b) and the seat's premise correction 6444873110. ⛔ Not a claim; left for triage.

Seam: spec:ActionSchema.variant and BUTTON_PRIMITIVE_VARIANTS → renderer:action:button / action:icon / action:group / action:menu

Measured (card thread, origin/main 5cc31c78)

The question (spec lane)

Whether the spec should carry one variant dialect for actions instead of two, and if so which, with the conversion for stored pages. Until then each consumer maps between them.

Dedupe words: variant dialect, danger destructive, BUTTON_PRIMITIVE_VARIANTS, action block variant.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — priority:p2 · domain:spec · area:records · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T17:08Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-27T21:55Z
    Session: session_01WGufzfhobWEgUUrjz4rrbh
    Account: os-support-ai
    Branch: claude/project-thread-4h9cyt (card thread session_01WGufzeYWDZN6LkXji5ziLF. The platform assigns the thread's branch and the thread can push only that one, so the branch is written as measured instead of claude/issue-26779-<slug>.)
    Worktree: objectstack-issue-26779
    Domain: domain:spec
    Seat: domain:spec#1
    File surface:

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26779,
      "status": "done",
      "branch": "claude/project-thread-4h9cyt",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26966",
      "session": "session_01WGufzeYWDZN6LkXji5ziLF",
      "premise_still_valid": true,
      "summary": "Premise held on main 8074feb6: all six action block rows (action:button, action:icon, action:group + member, action:menu + member) refused danger and accepted destructive. The rows now read ACTION_BLOCK_VARIANTS (default | danger | outline | secondary | ghost | link, plus primary where it was) and answer destructive with the rename onto danger in the enum's own error map; BUTTON_PRIMITIVE_VARIANTS had no other reader and is replaced. ADR-0087 D2 conversion page-action-block-variant-destructive-to-danger (retiredFromLoadPath, retiredAfter 18.2.0, order 77) plus D3 entry ui-page-action-block-variant-destructive-refused rewrite data at rest, so the #26776 bridge is removed: the four renderers forward danger as it is (toRunnerVariant) and draw it as the primitive's destructive (toButtonVariant). Root changeset (spec, components, types, plugin-detail minor) carries the destructive -> danger prescription.",
      "tests": "head 22846fae: spec typecheck exit 0; spec test 739 files / 22139 passed (1 todo); new conversions/page-action-block-variant-destructive-to-danger.test.ts 35 passed; ui vitest (renderers/action, 3 page-header tests, console registry-inputs-spec-parity) 40 files / 921 passed; ui type-check types/components/plugin-detail/app-shell Done; reverse type check: UIActionSchema['variant'] = 'destructive' reds TS2322, 'danger' accepted (scratch file deleted). Merged head 17ecbb46: spec build + check:generated 14/14 up to date; conversions+migrations+pins 29 files / 1054 passed. No ablation: the refusal and conversion are pinned by the new file's positive and CONTROL rows.",
      "gates": "dispatch-gates --commands on 22846fae: 116 families run serially, 114 exit 0, spec check:skill-examples and check:dual-build-cjs-loads exit 3 then 0 after the dogfood closure build; --ran: 116 derived, 116 accounted for. check-nul-bytes exit 0. check:generated 14/14 (docs regenerated). CI check-runs on #26966: in_progress at report time.",
      "dogfood_battery": "22846fae · os-verify-lock VERDICT command-exit 1 · Test Files 1 failed / 339 passed / 3 skipped (343) · Tests 2 failed / 2752 passed / 20 skipped (2774) · both failures in test/packaged-action-disabled-dispatch-live.dogfood.test.ts (acceptance[0], acceptance[5]/[2]); alone on the same head 8/8 passed, the recorded load flake; this diff touches no action-disable path",
      "mcp_calls": "6 — issue_read x3 (get, get_comments x2), pull_request_read x1 (get_diff #26776); no write tool",
      "api_writes": "0 — REST proxy writes none; GitHub writes via fleet-write relay: pr_create #26966 (assignee os-support-ai), then pr_request_reviewers + this comment",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: seat domain:spec#1 · noted, not filed: .changeset/26665-action-block-destructive-confirm.md (unreleased) says the blocks translate destructive to danger and that danger stays refused; this PR makes that untrue in the same release. Not edited here (another card's changeset); amend or drop it before the next release.",
        "carrier: none · noted, not filed: the claim names an `aliases` prescription; strictObject aliases map unknown keys, so the value rename lives in the enum error map (the FORM_VIEW_LAYOUT_RETIRED shape). Recorded as a deviation, not a finding."
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:spec seat 1 (#6017) · session session_01WGufzfhobWEgUUrjz4rrbh · 2026-10-28T12:27Z

    PR #26966 merged at fbe344b3, which is an ancestor of origin/main. On 22 of the 24 paths the PR touched, the merge tree matches the accepted head ea8465ed byte for byte. The other two are conversions/registry.ts and retired-key-removal-version.pin.test.ts. On both, the PR's net hunks are identical between the merge-base and the merge. The bytes differ only because other entries landed on main in between.

    An action block's variant now uses the runner's own word, danger. This covers action:button, action:icon, action:group and action:menu, and the members of a group or menu. destructive on those blocks is refused at save, with the rename in the message. The ADR-0087 D2 conversion page-action-block-variant-destructive-to-danger rewrites stored pages, built artifacts and sources. It also covers action:bar, whose members reach the same renderers. The #26776 bridge is removed. destructive stays the Button primitive's word on element:button.

    The owed skills eval is #27243. The card closed through Fixes #26779, and this seat removes pm:dispatched.

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

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething 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