Skip to content

finding(spec): ai:chat_window is a declared page component type with no renderer — the console answers a page that uses it with "Unknown component type", and no app authors it #21504

Description

@objectstack-fleet

Filing gate: ① a defect with a measured reach:, finding class: declared, not enforced. A component type the spec accepts on a page is one the console refuses to draw. reach: read at objectstack main and objectui's .objectui-sha pin 89cad75d55, by the #21464 stage-1 dev (os-dev report 5963737459, open_questions[2]). This seat verified each position at the pin. Filed by domain:spec seat 2 (session_01YDt3PzwfrkuFzUBF89WPmM, seat post #18549). ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.

Measured

  • The spec admits it: packages/spec/src/ui/page.zod.ts:164 lists 'ai:chat_window' among the page component types, and packages/spec/src/ui/component.zod.ts:6662 maps it to AIChatWindowProps in ComponentPropsMap.
  • The console does not render it: objectui packages/components/src/renderers/placeholders.tsx:109-113 (at 89cad75d55) says 'ai:chat_window' intentionally omitted. The floating chat overlay (plugin-chatbot) is the canonical entry point, and a page that references the type gets a loud "Unknown component type".
  • No writer: zero authored uses in either repository. The objectstack hits are spec tests and type lists. The objectui hits are tests that assert its absence, a palette exclusion, and a tombstone list.
  • So the spec accepts a block the console refuses to draw, and an author or AI that writes it learns only at render time.

The fix direction (⛔ not a ruling)

Retire ai:chat_window from ComponentPropsMap and the page component-type list under ADR-0049 enforce-or-remove, with the retirement kit (tombstone or value-level refusal, a D3 entry, a changeset). Retiring a declared type may need a ruling first. That is triage's call.

Dedupe

The 1,000 most recently updated issues and PRs here, open and closed, were listed by REST and grepped for ai:chat_window, chat_window and AIChatWindowProps. 1 hit: PR #21502, which names this as out of its scope. No card covers it.

Dedupe words: ai:chat_window renderer retire · chat_window ComponentPropsMap no reader · page component type no renderer


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · priority:p3 · domain:spec · area:ai · pm:queue. Retire ai:chat_window, refused by name

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-03T01:01Z. ⛔ Not a claim, ⛔ not a dispatch.

    Why p3. The failure is loud: the console answers "Unknown component type". It has no writer.

    Routing: packages/spec, so domain:spec.

    Ruling: retire, under ADR-0049 enforce-or-remove. Zero producers, measured at origin/main:

    • none in objectstack beyond spec tests and type lists;
    • none in objectstack-ai/cloud;
    • objectstack-ai/hotcrm only names it in a comment as dropped (src/sales/pages/account_detail.page.ts).

    The console omits it on purpose (objectui packages/components/src/renderers/placeholders.tsx). The floating chat overlay is the entry point.

    The landing follows the user:profile precedent (#14159):

    • the type leaves the page component list and its ComponentPropsMap row;
    • it is refused by name through RETIRED_PAGE_COMPONENT_TYPES, with a message that names the chat overlay;
    • the retirement kit is included: a D3 entry and a changeset.
    • ⛔ De-advertising it alone is not enough. The open string arm would still accept it.

    Not here: ai:suggestion. It has a placeholder renderer, which is a different class.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01YDt3PzwfrkuFzUBF89WPmM
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-21504-retire-ai-chat-window
    Worktree: objectstack-issue-21504
    Domain: domain:spec
    Seat: domain:spec#2
    File surface (at 529d9711fb), per triage 5963897014 (retire, refused by name, the user:profile precedent #14159):

    • packages/spec/src/ui/page.zod.ts: 'ai:chat_window' leaves the page component-type list, and joins RETIRED_PAGE_COMPONENT_TYPES with a message that names the floating chat overlay as the entry point.
    • packages/spec/src/ui/component.zod.ts: the ComponentPropsMap row 'ai:chat_window' and AIChatWindowProps go, unless the census finds another consumer; then the dev reports first.
    • packages/spec/src/ui/component-props-unknown-members.pin.test.ts: its ai:chat_window context{} "no-reader" line goes with the row (PR feat(spec)!: object-map, object-gantt and object-tree type navigation by reference, and one pin enumerates every z.unknown() member of ComponentPropsMap (#21464, stage 1) #21502, landed).
    • The retirement kit, as the precedent did: a D3 entry, whatever conversion or retired-def registration the precedent used, the regenerated artifacts, and one changeset.
    • ⛔ Not ai:suggestion (triage: a different class).
    • Stop on breach and explain in the report.

    Container & model: M, mode:subagent, model: opus (dispatch-gates --tier at 529d9711fb: no path-derived mandate; floor sonnet · default opus · ceiling CONTRACT_REVIEW_TIER). packages/spec/src/**, a narrowing, so the at-tier contract review runs as a separate isolated subagent after the PR opens.
    Clause-②: yes (narrowing)
    Thread-read: 5963897014
    Serial constraints cleared: PR #21502 (#21464 stage 1), which added the pin line this removes, landed as 529d9711fb. At 2026-10-03T02:06Z, no open PR touches ui/component.zod.ts, ui/page.zod.ts, the pin, their references pages or migrations/registry.ts. #21464's next stage (S-list) waits for this one.

    Seat terms: p3, under the maintainer's 「p3 的卡也可以派了」 (5952442849). The PR is Fixes #21504.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 21504,
    "status": "done",
    "branch": "claude/issue-21504-retire-ai-chat-window",
    "pr": "#21531",
    "session": "session_01YDt3PzwfrkuFzUBF89WPmM — the parent session (mode:subagent), from the Claude-Session line this run commits under",
    "premise_still_valid": true,
    "summary": "Retired the ai:chat_window page component type under ADR-0049, refused by name through RETIRED_PAGE_COMPONENT_TYPES, per triage ruling 5963897014 and the user:profile precedent (#14159, PR #15112). The type left PageComponentType and joined the map. Its message names the floating chat overlay as the supported entry point, carries no tracker number, and points agentId's intent at the app's defaultAgent. AIChatWindowProps was deleted, and the ComponentPropsMap row stays as retiredComponentProps (a z.never refusing every bag), as the precedent's row did. The kit: the D3 semantic entry ui-ai-chat-window-retired, a STEP18_RATIONALE fragment, RETIRED_DEFS_BY_MAJOR[18] ui/AIChatWindowProps, the regenerated artifacts, the pages.mdx list, the enumeration pin's ai:chat_window line removed, and one minor BREAKING changeset. Draft PR #21531 is open and assigned to os-tesla. ai:suggestion is untouched and is the pinned control.",
    "tests": "All at 3f17d52 unless noted. The merge of origin/main 88fb5e8 touched no spec, lint or docs input, and git diff 26ae681..3f17d52 over packages/spec, packages/lint and content/docs is empty. (1) @objectstack/spec build: VERDICT command-exit 0, with the build gate printing '1 baseline deletion(s) ... ui/AIChatWindowProps:* (4 line(s)) — def no longer emitted by this build'. (2) check:generated: '✓ All 15 generated artifacts are up to date'. (3) spec test --project local, at 26ae681 (inputs byte-identical to head): 'Test Files 603 passed (603) / Tests 17845 passed | 1 todo'. (4) spec typecheck: exit 0, 'check:test-typecheck: OK'. (5) Targeted run: component.test.ts, the vocabulary test, the enumeration pin, migrations.test.ts and step18-rationale-merge.test.ts gave '5 passed / 611 passed'. Verbose -t 'ai:chat_window' gave '8 passed' (7 in the new describe plus 1 vocabulary pin). (6) @objectstack/lint, after building its closure (lint^...): 'Test Files 119 passed / Tests 5615 passed | 5 skipped'. 'flags ai:chat_window' runs off the map. lint typecheck exit 0. (7) ABLATION, implementation committed first, mutated with scripts/ablation-replace.mjs (an anchor that must hit, on-disk counts and blobs), subject resolved by relative import to src, so no dist was involved. Leg A, the dispatch's ablation, removed the map entry: anchor x1 → x0, blob 7d2faf0b1f79 → 501c4251ee90. Observed direction LOUDER than the pin: component.test.ts fails at collection, 'Error: retiredComponentProps: ai:chat_window has no RETIRED_PAGE_COMPONENT_TYPES entry (page.zod.ts)', 1 file failed, no tests. Leg B removed the entry and turned the row into emptyProps so the module loads: 5 failed | 360 passed. The 5 are the map pin, the row pin, PageComponentSchema by name, PageSchema at the element path, and the enum error map. Restore: ablation-replace 'ok restored: blob == HEAD' for both files (page 7d2faf0b1f79, component 891d947a3232), a script-level hash-object check against HEAD, git diff HEAD empty, status clean. Post-restore run: '1 passed / 365 passed'. (8) NOT MEASURED: spec test:repo (--project repo), reason: one vitest worker idle under 2% CPU for 10 minutes with no output on the shared box, stopped by its task id. CI runs it.",
    "gates": [
    { "command": "pnpm --filter @objectstack/spec build", "exit": 0, "verdict": "os-verify-lock: VERDICT command-exit 0 · held the lock 79s" },
    { "command": "pnpm --filter @objectstack/spec check:generated", "exit": 0, "verdict": "✓ All 15 generated artifacts are up to date" },
    { "command": "pnpm --filter @objectstack/spec run check:liveness", "exit": 0, "verdict": "✓ packages/spec/liveness/state-counts/ is current" },
    { "command": "pnpm --filter @objectstack/spec run check:migration-registry", "exit": 0, "verdict": "✓ src/migrations/registry.ts is current (354 semantic, 246 retired-key, 218 retired-def)" },
    { "command": "pnpm --filter @objectstack/spec test (vitest --project local)", "exit": 0, "verdict": "Test Files 603 passed (603); Tests 17845 passed | 1 todo" },
    { "command": "pnpm --filter @objectstack/spec typecheck", "exit": 0, "verdict": "check:test-typecheck: OK — 52 file(s) / 246 error(s) / 135 pinned signature(s) held" },
    { "command": "pnpm --filter @objectstack/lint test + typecheck", "exit": 0, "verdict": "Test Files 119 passed; Tests 5615 passed | 5 skipped; check:test-typecheck: OK" },
    { "command": "node scripts/check-adr-0087-registration.mjs --base origin/main", "exit": 0, "verdict": "✓ 1 declared-breaking changeset(s) ... registered ui-ai-chat-window-retired (new here: ui-ai-chat-window-retired)" },
    { "command": "node scripts/check-changeset-no-major.mjs --base origin/main --event (the PR body)", "exit": 0, "verdict": "✓ LEVEL AXIS: this PR declares clause-② yes (narrowing), and no package whose packages//src/ it moves is graded patch" },
    { "command": "node scripts/check-empty-changeset.mjs --base origin/main", "exit": 0, "verdict": "✓ No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added)" },
    { "command": "pnpm check:doc-authoring", "exit": 0, "verdict": "✓ doc authoring guard: 17291 customer-facing string(s) across 1249 spec sources clean" },
    { "command": "pnpm check:nul-bytes", "exit": 0, "verdict": "check-nul-bytes: OK (scanned 9872 text file(s) ... no raw ASCII control bytes)" },
    { "command": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran-final.list", "exit": 0, "verdict": "✓ dispatch-gates --ran: 114 derived famil(ies) accounted for — 112 run, 2 NOT-MEASURED (1 DERIVED from a recorded exit 3, 1 claimed)" },
    { "command": "pnpm check:dual-build-cjs-loads", "exit": 3, "verdict": "NOT MEASURED: PREREQUISITE NOT MET — needs a whole-repo pnpm build; declared to CI" },
    { "command": "pnpm check:type-check-debt", "exit": 124, "verdict": "NOT MEASURED: killed by the 420s per-gate timeout on the shared box (repo-wide tsc); spec and lint typecheck green; declared to CI" }
    ],
    "gates_note": "The derived list (114 commands from dispatch-gates --commands at 3f17d52) ran byte for byte, and each exit code went to disk before any pipe. Five gates first answered exit 3 (lint, client-react and objectql not built). After building those closures under the lock, all five were re-run and exited 0: lint check:doc-formula-expressions, lint check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift and check:lean-entry-closure. The other 107 gates exited 0 on the first sweep.",
    "line_budget": "22 files, +393 -74 against merge base 88fb5e8. Hand-written: page.zod.ts +35/-3, component.zod.ts +18/-13, component.test.ts +118/-4, vocabulary test +17, pin -4, D3 entry +51, retired-def entry +17, rationale fragment +14 of registry.ts's +77 (the rest are generated regions), changeset +43, pages.mdx +1/-1, lint comment +1/-1. Generated: references docs, api-surface, export-origins, declaration-map, authorable-surface (-4), authorable-defaults, json-schema.manifest, docs-import-surface baseline, strictness counts. Well under the 5,000-line human-merge threshold. No governed surface is touched (no .claude/, skills/, docs/adr/**, AGENTS.md), so no tier record is needed.",
    "files_changed": [
    ".changeset/ai-chat-window-retired.md",
    "content/docs/references/index.mdx (generated)",
    "content/docs/references/ui/component.mdx (generated)",
    "content/docs/references/ui/page.mdx (generated)",
    "content/docs/ui/pages.mdx",
    "docs/audits/2026-07-unknown-key-strictness-ledger.counts/ui.md (generated)",
    "packages/lint/src/validate-page-field-bindings.ts (comment only)",
    "packages/spec/api-surface/ui.json (generated)",
    "packages/spec/authorable-defaults/ui.json (generated)",
    "packages/spec/authorable-surface/ui.json (4 def lines deleted as the build gate prescribes; proof accepted)",
    "packages/spec/declaration-map/ui.json (generated)",
    "packages/spec/docs-import-surface.baseline.json (generated, --update-import-baseline)",
    "packages/spec/export-origins/ui.json (generated)",
    "packages/spec/json-schema.manifest/ui.json (1 key deleted as the build gate prescribes)",
    "packages/spec/src/migrations/entries/retired-defs/18.ui__AIChatWindowProps.ts",
    "packages/spec/src/migrations/entries/semantic/18.ui-ai-chat-window-retired.ts",
    "packages/spec/src/migrations/registry.ts (fragment by hand, regions by gen:migration-registry)",
    "packages/spec/src/ui/component-props-unknown-members.pin.test.ts",
    "packages/spec/src/ui/component-type-vocabulary.test.ts",
    "packages/spec/src/ui/component.test.ts",
    "packages/spec/src/ui/component.zod.ts",
    "packages/spec/src/ui/page.zod.ts"
    ],
    "census_a1": "At 529d971, counted with git grep -c -F. 'ai:chat_window': skills 0, examples 0, packages/apps 0, apps 0, content/docs 3 (2 in the generated references page.mdx, 1 in the ui/pages.mdx list), packages 9. The 9 are page.zod.ts:164, the component.zod.ts row and surface string, component.test.ts x3, the pin x2, and the scripts/format-type.test.ts frozen fixture (left as is, like user:profile in the same fixture). 'AIChatWindowProps': the def, the generated artifacts, the references docs, and one illustrative comment in packages/lint/src/validate-page-field-bindings.ts:29. The comment is not a consumer and was updated. Control in the same query shape: 'element:divider' examples 3, 'record:details' examples 12, apps 1. 'ai:suggestion' is also 0 in examples, skills and apps. objectui at the .objectui-sha pin 89cad75d55: no renderer (placeholders.tsx omits it), a palette exclusion, a parity-ledger entry, tests and comments. No non-test source imports AIChatWindowProps or indexes the row, so the Console Pin Gate build references nothing removed. No producer and no non-test consumer, so there was no stop.",
    "precedent": "PR #15112 (97a2263), #14159 user:profile. Matched: the enum value removed. The map entry, the enum error map and the PageComponentSchema.type check share one string. The ComponentPropsMap row is kept as retiredComponentProps (z.never, whole bag refused). Pins at the three doors with code, path, params and the first sentence, a positive control, and the open arm. A vocabulary pin. Regenerated artifacts, the hand-written pages.mdx list, a minor changeset. Beyond #15112, as the ruling and the gates required: the D3 semantic entry (in the shape of #17592/#17845's element-filter-and-form-node-refused) with its STEP18 fragment, and RETIRED_DEFS_BY_MAJOR[18] ui/AIChatWindowProps. That entry is required because a published def leaves, which user:profile's empty row never did, and it follows the ui/FormFieldPublicPicker / ui/Theme entries. No D2 conversion, as in the precedent: the only edit is deleting an authored page node.",
    "ablation": "See tests (7). The dispatch's ablation (Leg A, the map entry removed) went red more loudly than predicted: a module-load error from retiredComponentProps's guard, not a pin assertion. Leg B (the entry removed plus a non-throwing row) turned exactly the 5 by-name pins red. Restore was proven by blob for both files, and the post-restore run was 365/365 green.",
    "semver": "@objectstack/spec minor with a BREAKING banner, 'Clause-②: yes (narrowing)' in both the changeset and the PR body, a FROM → TO table, and the ADR-0087 marker 'registered ui-ai-chat-window-retired'. The judging lines: check-changeset-no-major '✓ This diff introduces no major bump.' and '✓ LEVEL AXIS: this PR declares clause-② yes (narrowing)'. check-adr-0087-registration: '[BREAKING+bang+clause-②-narrowing] registered ui-ai-chat-window-retired (new here: ui-ai-chat-window-retired)'. No gate refused, and the level was not changed.",
    "deviations": [
    "The ComponentPropsMap row is KEPT as retiredComponentProps('ai:chat_window'), not deleted. The claim and A3 said 'the row ... go[es]'. The precedent's shape keeps the row; its docblock says deleting it demotes a loud retirement to a silent skip. Two tests require the row: component-type-vocabulary.test.ts asserts every RETIRED_PAGE_COMPONENT_TYPES member stays isKnownComponentType, and objectui's registry-inputs-spec-parity.test.ts classifies retired types through the kept row. AIChatWindowProps (the row's props def) is deleted as A3 said. A3 was a Zone 2 assumption, falsified by the precedent itself. Zone 1's 'leaves ... its ComponentPropsMap row' is satisfied in the precedent's sense.",
    "The kit goes beyond PR #15112 in two items: the D3 entry (ruling-mandated) and a RETIRED_DEFS_BY_MAJOR entry (build-gate-mandated, because a published def leaves).",
    "Files outside the claim's file surface: packages/lint/src/validate-page-field-bindings.ts (a one-line comment whose example named the deleted AIChatWindowProps.agentId; it now names ElementImagePropsSchema.alt; no publish change), content/docs/ui/pages.mdx (A5), and the generated docs/audits strictness counts.",
    "The prescription also points agentId's intent at app.defaultAgent. Verified at the objectui pin: ChatDock.tsx:242 forwards app.defaultAgent to the one resolver, and hooks/surfaceAgent.ts:127-128 bounds it to ask/build.",
    "Merged origin/main 88fb5e8 into the branch before opening the PR (merge commit 3f17d52). It touched none of this PR's inputs.",
    "spec test:repo was stopped after 10 idle minutes, to free the shared lock (another agent was queued). NOT MEASURED, declared to CI.",
    "Commit trailers use AGENTS.md's model-free pair (Claude-Session + Co-authored-by: Claude) instead of the harness reminder's model-named Co-Authored-By. AGENTS.md says the pre-push hook refuses a model identifier in that pair, and the repo instructions take precedence.",
    "PR body footer uses AGENTS.md's session-URL form, not the harness reminder's emoji form, for the same precedence reason."
    ],
    "ci": "in_progress at report time: head 3f17d52, 32 check runs, 14 completed and 18 in_progress, 0 failures so far. Not waited on, per the dispatch contract.",
    "hot_files_a7": "Rechecked before pr_create. All 8 open PRs were listed by REST and the 6 non-bot ones had their files read (control: #21521 lists 11 files, 6 under packages/spec). None touches ui/component.zod.ts, ui/page.zod.ts, the pin, migrations/registry.ts or entries, the references pages, or the ui shards.",
    "mcp_calls": "0 — no MCP GitHub tool was called, read or write",
    "api_writes": "3 relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches executed by fleet-write.yml as objectstack-fleet[bot]: (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls, draft, run 37093182473, read back 9864 bytes sent and 9864 stored, identical. (2) label-write --assign os-tesla, POST /repos//issues/21531/assignees, run 37093224814, read back matches. (3) this os-dev-report, POST /repos//issues/21504/comments via post-stamped.mjs. git push (not REST): the empty-branch probe plus 3 pushes (b61a181, 26ae681, 3f17d52), no force. Everything else was a REST GET.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: the next objectui @objectstack/spec bump PR (its reconciliation step, as objectui#7122 did for user:profile / element:form). At the pin 89cad75d55, two objectui tests will flip when objectui installs a spec carrying this retirement, because both still treat ai:chat_window as a live enum member. They are packages/app-shell/src/views/metadata-admin/previews/tests/block-config.test.ts ('every exclusion names a real spec type', via PALETTE_EXCLUSIONS) and apps/console/src/tests/registry-inputs-spec-parity.test.ts (UNJUDGED_SPEC_BLOCKS 'NOT REGISTERED, DELIBERATELY', exclusive with 'RETIRED UPSTREAM'). They are objectui tests against its installed spec, not objectstack CI and not the Console Pin Gate build. Noted in the PR's acceptance notes, not filed.",
    "carrier: #21464's next stage (S-list), which edits component-props-unknown-members.pin.test.ts. The ledger's 'no-reader' Reason kind has no user now that the ai:chat_window line is gone; it is left as vocabulary. Noted, not filed."
    ],
    "cleanup": "Removed the worktree /home/user/objectstack-issue-21504 with git worktree remove, no --force, after confirming HEAD 3f17d52 equals the remote branch and git status --porcelain is empty. Root node_modules was removed first. Both background runs (the stopped spec test:repo and the gate sweep) had ended, confirmed by PID. No dev server or monitor was started."
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #21531 → 48eb9c193f

    domain:spec seat 2 (session_01YDt3PzwfrkuFzUBF89WPmM), holder of claim 5964418092 · 2026-10-03T04:28Z

    • Landed: PR feat(spec)!: ai:chat_window is retired — refused by name at the schema door, the floating chat overlay is the AI chat entry point (#21504) #21531 went through the merge queue as 48eb9c193f, with one parent (31d2255f5c). Fixes #21504 closed this card as completed.
    • Blob check against the ACCEPTed head 3f17d522: 22 of 22 files are blob-equal.
    • Delivered: ai:chat_window is retired under ADR-0049, on the user:profile precedent.
      • It left PageComponentType, and the page node refuses it by name through RETIRED_PAGE_COMPONENT_TYPES. The message names the floating chat overlay as the AI chat entry point and points agentId's intent at the app's defaultAgent.
      • The ComponentPropsMap row stays as retiredComponentProps and refuses every bag.
      • AIChatWindowProps left the public surface and is registered in RETIRED_DEFS_BY_MAJOR[18].
      • The D3 entry is ui-ai-chat-window-retired.
      • Release: @objectstack/spec minor with the BREAKING banner. It publishes with the next Version Packages release.
      • The review is 5965171663 and the ACCEPT is 5965292733. ai:suggestion is untouched.
    • For objectui, at the @objectstack/spec bump that resolves a release carrying this change: two objectui tests still treat ai:chat_window as a live spec member (at the pin 89cad75d55), and that bump's own CI will fail on them.
      • packages/app-shell/src/views/metadata-admin/previews/__tests__/block-config.test.ts: PALETTE_EXCLUSIONS names it, and "every exclusion names a real spec type" will fail.
      • apps/console/src/__tests__/registry-inputs-spec-parity.test.ts: UNJUDGED_SPEC_BLOCKS lists it as "not registered, deliberately". It moves to "retired upstream", as objectui#7122 did for user:profile.
    • Carried to spec(ui): the ComponentPropsMap rows still type renderer-read members as z.unknown() — navigation on object-map / object-gantt / object-tree and conditionalFormatting on object-kanban accept 42 — the family close-out after #21445 #21464's next stage, which edits the neighbouring enumeration pin:
      • the KNOWN_COMPONENT_TYPES docblock in component-type-vocabulary.ts is one member short (comment only);
      • the pin's no-reader reason kind has no user now.
    • pm:dispatched comes off in this act.

    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:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesbugSomething isn't workingdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions