Skip to content

ui: main's Test UI (9/16) is red since #26786. The actionKeys pin lists every spec ActionSchema key, and SPEC_ACTION_KEYS lacks the new disabledReason #26849

Closed

Description

@objectstack-fleet

Source

The ui seat found this while reading two card PRs' reds (PR #26821 Test UI 5/16 and PR #26824 Test UI 15/16, both 18:24Z). It then checked origin/main: main's own push run at aeb9cf0d has Test UI (9/16) red on the same assertion (job).

Problem

PR #26786 merged at 13dc413f (18:09Z). It is part 1 of #26619 and adds disabledReason to ActionSchema in packages/spec/src/ui/action.zod.ts. ui/packages/core/src/actions/__tests__/actionKeys.pin.test.ts › "lists every key the spec ActionSchema declares" walks the spec schema and compares it with SPEC_ACTION_KEYS in ui/packages/core/src/actions/actionKeys.ts. The array has no disabledReason, so every Test UI run on main or on a PR merged with main fails:

AssertionError: expected { missing: [ 'disabledReason' ], …(1) } to deeply equal { missing: [], stale: [] }
 ❯ packages/core/src/actions/__tests__/actionKeys.pin.test.ts:140:32

classifyActionKeys reads KNOWN_ACTION_KEYS, which includes SPEC_ACTION_KEYS. Until the array lists the key, the console also reports an action that carries disabledReason as having an unknown key.

Target

Add 'disabledReason' to SPEC_ACTION_KEYS, after 'disabled', with a comment of the kind 'description' has. The comment says the array restates the spec's declared keys: the entry follows #26786, and the readers ship with the console half of #26619. ActionDef is not changed here; the console half of #26619 decides whether ActionDef declares it.

File surface

ui/packages/core/src/actions/actionKeys.ts (one entry and its comment), one changeset (@object-ui/core patch). No packages/spec/** change, no new key.

Acceptance

pnpm --filter @object-ui/core exec vitest run src/actions/__tests__/actionKeys is green. Main's Test UI shards are green after the merge.

Related: #26619, PR #26786.

Activity

  1. added
    bugSomething isn't working
    priority:p0Critical: blocker, must ship before MVP
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    on Oct 27, 2026
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01QsR2jTfvjNTaR29ehLk26T
    Account: zhuangjianguo
    Branch: claude/project-thread-r1zdiq (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)
    Worktree: objectstack-issue-26849
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/core/src/actions/actionKeys.ts (one SPEC_ACTION_KEYS entry and its comment), at most one test line beside it, one root changeset; ⛔ ActionDef (the console half of #26619); ⛔ packages/spec/**, server packages, any new key (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; reason: the maintainer's standing rule 「只认领不需要 fable 的卡」, 2026-10-27T10:39Z), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the console's action key inventory (ui core, this lane) restates the spec's ActionSchema keys and misses disabledReason, which #26786 added · the platform path that may cover it: none, the pin test is the guard and it is red · reached by every Test UI run on main and on every PR merged with main
    Thread-read: none
    Premise: holds (git show origin/main:ui/packages/core/src/actions/actionKeys.ts | grep -c disabledReason → 0 on origin/main 4702c468 at 2026-10-27T18:30Z; main's Test UI (9/16) at aeb9cf0d fails on actionKeys.pin.test.ts:140)
    Priority: p0 jump (main red), ahead of the seat's concurrency
    Serial constraints cleared: no open PR touches the surface (scan of the 80 most recently updated open PRs 2026-10-27T18:29Z)

    Dispatched at 2026-10-27T18:31Z to the card thread on that branch; the order lives in the thread's opening message.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26849,
      "status": "done",
      "branch": "claude/project-thread-r1zdiq",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26866",
      "head": "e80b8cda",
      "session": "session_01QsR2jRCnmxMuS4uyUq5ZHo",
      "premise_still_valid": true,
      "summary": "SPEC_ACTION_KEYS in ui/packages/core/src/actions/actionKeys.ts gains 'disabledReason' after 'disabled', with a comment of the kind 'description' carries (restates the spec's declared keys; follows #26786; readers ship with the console half of #26619). One assertion beside the existing classifyActionKeys case pins that an action carrying disabledReason classifies with no unknown and no retired key. One root changeset, @object-ui/core patch, carrying the claim's Clause-②: no and Metadata-protocol: none. ActionDef, packages/spec and server code untouched.",
      "files_changed": [
        "ui/packages/core/src/actions/actionKeys.ts",
        "ui/packages/core/src/actions/__tests__/actionKeys.pin.test.ts",
        ".changeset/26849-action-keys-disabled-reason.md"
      ],
      "line_budget": "3 files, +18 / -0 (7 in actionKeys.ts, 1 test line, 10 changeset)",
      "tests": "at e80b8cda: pnpm --dir ui exec vitest run packages/core/src/actions/__tests__/actionKeys.pin.test.ts -> Test Files 1 passed (1), Tests 19 passed (19); pnpm exec turbo run type-check --filter=@object-ui/core --concurrency=2 under os-verify-lock -> VERDICT command-exit 0, 4/4 tasks. Red-before: main's Test UI (9/16) at aeb9cf0d. No ablation: data-entry diff.",
      "gates": "at e80b8cda: dispatch-gates --commands derived 34; all 34 exit 0 (PR-body gates run against the final body via GITHUB_EVENT_PATH); vitest run scripts/ under the lock 178 passed | 2 skipped files, 5065 passed | 2 skipped tests; check:type-check-debt under the lock 0 raw tsc errors; --ran: 34 derived, 34 run, 0 NOT-MEASURED. ui check:new-line-citations 0 new. PR check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "deviations": [
        "The order's acceptance command runs vitest from the package directory, which ui/scripts/vitest-invocation-guard.mjs refuses; ran the ui-rooted equivalent from ui/AGENTS.md (named in the PR body).",
        "Commit carries the repo's model-free trailer pair, not the harness attribution reminder's model-named Co-Authored-By (pre-push check:commit-card-trailers)."
      ],
      "mcp_calls": "1 — mcp__claude-code-remote__get_session (own session id); 0 GitHub MCP calls",
      "api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls + assignees, read back identical, 3807 bytes); this os-dev-report comment via post-stamped. Plus git push (not REST).",
      "open_questions": [],
      "out_of_scope_findings": []
    }
  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat close · domain:ui#4 · session_01QsR2jTfvjNTaR29ehLk26T

    Main is fixed. #26859 (a20824f3, 19:19Z) adds disabledReason to SPEC_ACTION_KEYS, which is this card's Target. git show origin/main:ui/packages/core/src/actions/actionKeys.ts | grep -c disabledReason → 1. This seat's PR #26866 is closed as superseded. Closing as completed.


    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

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uipriority:p0Critical: blocker, must ship before MVPtests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions