You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
spec(types): AnySchema ("Union of all component schemas") omits 17 exported node types and ActionBarSchema, so objectui#11466's declared-node slot union would refuse their correct literals #11478
This card carries objectui#11466's Q3 half: the declared node types AnySchema is missing. objectui#11466 keeps the slot union itself (V1), the CustomNodeRegistry mechanism and its own residue. A child of objectui#11466, filed with its domain:spec and priority:p2.
Filing-gate category: ① — a named landing point (AnySchema in packages/types/src/index.ts), a docblock that states a fact the union does not hold, and named producers.
Reader: the domain:spec @ objectui seat (objectui#10217) dispatches it, and an os-dev executes it.
Parent: objectui#11466, pm:blocked until this card and objectui#11466's producers card land.
What was measured (objectui#11466's report, at main5988b6b53)
AnySchema (packages/types/src/index.ts, read on origin/main6007dd4e4) ends in a | BaseSchema arm, and its docblock says it is the union of all component schemas. Seventeen exported interfaces that extend BaseSchema with a literal type are not members:
The standalone ActionBarSchema (action:bar, packages/types/src/ui-action.ts) is missing too. app-shell hands it to SchemaRenderer four times.
With the BaseSchema arm present, nothing refuses these nodes today. Under objectui#11466's slot union (V1, no catch-all arm), their correct literals are refused. The probe case was { type: 'detail-view', objectName }, which building-crud-app.md and data-source.md author. SchemaByType is wrong for them today.
reach: the published AnySchema / SchemaByType. Named producers: those two docs pages and app-shell's four action:bar hand-offs.
Seat answer: A (non-escalation; the union's own docblock decides it)
Add the eighteen to AnySchema. The slot union of objectui#11466 then inherits them through one list, ⛔ not a second list in a new type.
B (a second list only in the slot union) leaves two lists to drift.
C (have producers register them as custom types) is wrong, because they are this package's own declarations.
Constraints
With the signature AND the BaseSchema arm present, this changes no accept set. Every edit compiles as main does today.
AGENTS.md 完善设计器的每一个细节 #9: the union's completeness must be re-derived by an instrument, ⛔ not stated in prose. The re-derivation in objectui#11466's report was a TypeScript-API enumeration of exported interfaces that extend BaseSchema with a literal type (105 members of AnySchema, 104 literal). A pin that fails when a new such interface is exported outside the union is this card's to add, if it can be done without a new gate (a test in packages/types/src/__tests__/).
The app and list discriminant collisions between AnySchema and PageDocumentNode (measured on objectui#11466) are objectui#11466's. ⛔ Not this card's.
Clause-② is stated at claim.
Dedupe
The REST list of objectui's 600 most recently updated issues and PRs, open and closed (back to 2026-09-28), grepped locally on 2026-10-02: AnySchema 1 hit (objectui#11466); AnySchema near omit/miss/lack/incomplete 0 (control AnySchema 1).
Dedupe words: AnySchema missing node types · DetailViewSchema not in AnySchema · ActionBarSchema AnySchema union
Claim: PM loop round 1 (the seat's answer A in this card's body: AnySchema gains the 17 node types and ActionBarSchema, with a re-deriving pin)
Session: session_01XvhGmGAP79ZB8swnkapxPC
Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-11478-anyschema-complete
Worktree: objectui-issue-11478
Domain: domain:spec
Seat: domain:spec#1 (objectui#10217)
File surface:
AnySchema in packages/types/src/index.ts, and the imports it needs.
A completeness pin in packages/types/src/__tests__/.
One changeset for @object-ui/types.
⛔ Not the slot union, ⛔ not CustomNodeRegistry, ⛔ not the app / list collisions (objectui#11466). ⛔ Not the interfaces themselves.
Stop on breach; explain in the report.
Container & model: S, mode:subagent, model: opus (TIER_DEFAULT; dispatch-gates --tier --repo objectstack-ai/objectui printed "no path-derived mandate" for packages/types/src paths)
Clause-②: yes
Why yes: eighteen members join a published union. With BaseSchema's arm present they move no accept set, but SchemaByType and the union's exported shape grow. Declared yes, the safe spelling. The at-tier contract record is owed on the landing head.
Thread-read: none
Serial constraints cleared: read 2026-10-02T15:29Z at objectui origin/main6007dd4e4.
PR objectui#11477 (objectui#11468, this seat, in review) edits packages/types/src/index.ts's AuthoringNode export list, a different region from AnySchema. Whichever lands second merges main.
objectui#11467 (F2, in flight) edits DashboardWidgetSlotComponentSchema in complex.ts. This card only names it in the union. File-disjoint.
{
"issue": 11478,
"status": "done",
"branch": "claude/issue-11478-anyschema-complete",
"pr": "https://github.com/objectstack-ai/objectui/pull/11486",
"session": "session_01XvhGmGAP79ZB8swnkapxPC (the dispatching seat's session; this run is its subagent, and its commit carries that Claude-Session line)",
"premise_still_valid": true,
"summary": "AnySchema (packages/types/src/index.ts) now includes the 18 node types its docblock claimed. DashboardWidgetSlotComponentSchema goes after DashboardComponentSchema. After ListViewSchema come the 6 designer, 3 report and 3 AI schemas, then the existing ViewComponentSchema union (DetailViewSchema, ViewSwitcherSchema, FilterUISchema, SortUISchema), then ActionBarSchema. The order is the barrel's module order. The BaseSchema arm is kept, no interface's shape changed, and no new type was added. The docblock now points at the new pin, packages/types/src/__tests__/anyschema-declared-node-types-11478.test.ts. The pin is a compiler-API enumeration over the root barrel and every published subpath entry, with a virtual control module, a by-name hold for ActionBarSchema, and a SchemaByType round-trip over every single-literal member. A probe measured the accept set at base and at head: all 92 value verdicts and their messages are identical, and only the 36 SchemaByType readings flip from never to the interface. Per the PM's mid-run warning, the branch was fast-forwarded to objectui#11477's merge 2c0ddf226 before the first commit. That PR covers nothing this one adds.",
"tests": "All at head 50714a6d (git rev-parse --short HEAD), working tree clean, using node v22.23.3 from this issue's scratch dir. pnpm exec vitest run packages/types/src/__tests__/anyschema-declared-node-types-11478.test.ts → 'Test Files 1 passed (1) / Tests 5 passed (5)'. pnpm exec vitest run --maxWorkers=2 packages/types/ → 'Test Files 334 passed (334) / Tests 8789 passed (8789)'. pnpm --filter @object-ui/types run type-check → exit 0. The script echoes 'tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json'. tsc -p tsconfig.test.json --listFilesOnly lists the new test file (1 hit; 334 test files in the program). Pin against BASE's index.ts (git checkout 2c0ddf226 -- abs path; restored with git checkout HEAD; restore proven by blob 79af1655 == HEAD blob and an empty git diff HEAD) → '2 failed | 3 passed'. Case 3 names the 17 (AIFormAssistSchema ... ViewSwitcherSchema, each with its literal and file), and the ActionBarSchema by-name case is red. Ablations: the fix was committed first. Each leg went through objectstack scripts/ablation-replace.mjs in WRAP mode plus a shell trap that restores from HEAD by absolute path, and each restore was proven (blob 79af1655 == HEAD, git diff HEAD empty). (A) --delete of ' | ViewComponentSchema' (anchor x1 → x0, blob 79af1655 → 78d5ac1e) → case 3 red, naming DetailViewSchema, FilterUISchema, SortUISchema, ViewSwitcherSchema. (B) '| ViewComponentSchema\\n | ActionBarSchema;' → '| ViewComponentSchema;' (blob → 190ecfe0) → case 4 red. (C) adding '| (BaseSchema & { type: \\'button\\' })' (blob → 9b62b872) → case 5 red, naming ButtonSchema and the new arm. No build or dist preflight applies: the pin reads src/ through its own ts.createProgram, with no package exports resolution and no vitest alias. Accept-set probe (compiler API, package tsconfig, base 2c0ddf226 vs head 50714a6d). Each of the 18 had 5 value cases: typed value, bare literal, unknown key, wrong value on an interface-only key, and visible: 42. There were 2 controls. All 92 value verdicts are identical with identical messages. The 36 SchemaByType cases flip: SchemaByType of each literal goes from never to the interface. The same probe at 6007dd4e4 is byte-identical to the 2c0ddf226 run. Built dist/index.d.ts carries the new AnySchema. Emitted JS of index.ts is byte-identical base vs head (ts.transpileModule, 5176 = 5176).",
"mcp_calls": "0",
"api_writes": "3 · (1) pr_create through scripts/pm/fleet-write/dispatch.mjs: POST repos/objectstack-ai/objectstack/dispatches, relayed as POST repos/objectstack-ai/objectui/pulls, giving objectui#11486, draft; read-back 11898 bytes sent = 11898 stored. (2) label-write.mjs --assign os-tesla: one relay dispatch, giving POST repos/objectstack-ai/objectui/issues/11486/assignees; read-back MATCHES. (3) post-stamped.mjs --comment=11478: POST repos/objectstack-ai/objectui/issues/11478/comments (this report). git push (empty-branch probe, the fast-forward to 2c0ddf226, and 50714a6d) is not a REST write. Reads: REST GETs of objectui#11478, its comments, and pulls/11486.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (no carrier) · SchemaByType of a literal whose member declares a union of literals is never, because Extract asks whether the whole `type` fits one literal. Measured at head: 'email' (InputShorthandSchema), 'header' (SemanticElementSchema) and 'h1' (HtmlElementSchema) resolve to never, while the control 'button' resolves. Predates this PR, has no in-repo reader, and is skipped by the pin's case 5 by design · noted in the PR's Acceptance notes, not filed · dedupe words: SchemaByType multi-literal never · InputShorthandSchema SchemaByType · Extract union type literal",
"carrier: the PR that implements objectui#11466 · the zod twin's safeValidateSchema refuses { type: 'action:bar' } and { type: 'metric-card' } at the root ('Invalid input') and accepts detail-view, report and nl-query. The TS face already admitted both through the BaseSchema arm, so this is not new; now it names them. No stored producer of either literal was found (the action:bar nodes are built in app-shell code; metric-card is a widget-slot type), so there is no reach · noted, not filed · dedupe words: action:bar zod refused · AnyComponentSchema metric-card · TS zod face divergence AnySchema",
"carrier: none (no carrier) · packages/types/README.md says the shipped AnySchema 'carries 50+ members', a prose count (AGENTS.md #9). It is still true and is outside this card's file surface · noted in Acceptance notes, not filed",
"carrier: none (no carrier) · SemanticElementSchema and HtmlElementSchema are AnySchema members exported only from the ./layout subpath, not the root barrel. The pin enumerates the subpath entries for this reason · noted, not filed"
],
"gates": {
"head": "50714a6d (the final commit; every gate below ran on it, tree clean)",
"pnpm --filter @object-ui/types run type-check": "exit 0 (script name echoed; test program includes the new file)",
"vitest packages/types/ (repo-root path form)": "Test Files 334 passed (334); Tests 8789 passed (8789)",
"vitest new pin file": "5 passed (5)",
"pnpm --filter @object-ui/types build": "exit 0; dist completeness: 144 emitted files verified",
"doc-snippets scoped build (turbo, filter from --build-filter, concurrency 2)": "35 successful, 35 total (3m25s under the lock)",
"pnpm check:doc-snippets": "exit 0 — 'Semantic phase: 776 of 776 block(s) judged, 0 failed.' (covers packages/types/README.md's two AnySchema blocks)",
"pnpm check:doc-examples": "exit 0 — 'Every covered @example compiles, or fails exactly as its ledger row declares.'",
"pnpm check:doc-types": "exit 0 — 'Every documented component type is registered.'",
"node scripts/check-changeset-no-major.mjs": "exit 0",
"node scripts/check-changeset-presence.mjs": "exit 0 — 2 published source files of 1 package, 1 changeset declared",
"pnpm check:new-line-citations": "exit 0 — 'VERDICT new-cross-file-line-citations: 0 new citation(s)'",
"pnpm check:control-bytes": "exit 0 — OK (10057 tracked text files)",
"pnpm check:changeset-claims": "exit 0 (report-only). Two pending changesets name index.ts (6051-gantt-flat-config-declared-keys, component-meta-converge-and-deprecate-alias-5893); I read both, they cover GanttConfig / PluginComponentMeta, and this diff does not touch them",
"pnpm check:pending-changeset-literals": "exit 0",
"pnpm check:test-path-roots": "exit 0",
"pnpm type-check:coverage": "exit 0",
"pnpm check:spec-symbols": "exit 0",
"pnpm check:readme-exports": "exit 0",
"pnpm check:component-surface-parity": "exit 0 (report-only)",
"pnpm check:sdui-registration-pins": "NOT MEASURED: exit 2, prerequisite not met (the console bundle is not built). Not reached by this diff: emitted JS is byte-identical and no registration input moved",
"eslint (narrowed)": "Ran on the 2 touched .ts files from packages/types (the package lint script form). --format json: 2 files, 0 errors, 0 warnings. --print-config: 118 rules in effect on the test file and no parserOptions.project, so linting is not type-aware and the diff cannot move an untouched file. The repo-wide pnpm lint is CI-owned",
"downstream consumer sweep (...@object-ui/types type-check)": "not run, declared narrowing: git grep over all tracked files finds no reader of AnySchema/SchemaByType outside index.ts (only packages/types/README.md and 3 historical .changeset bodies), and no other published type references them; CI runs the farm",
"check-governed-queue-guard --test (3 paths)": "NOT GOVERNED",
"CI": "in_progress (not awaited, per contract)"
},
"line_budget": "n/a: no skills/** or governed ledger touched. Diff is +355 / -3 over 3 files (index.ts +50/-3, the pin 282, the changeset 26)",
"deviations": [
"Toolchain: the container node v22.22.0 is refused by pnpm install (jsdom 30 engine floor). I put nodejs.org v22.23.3 on PATH from this issue's scratch dir after sha256sum -c against SHASUMS256.txt (OK). Nothing system-wide changed.",
"BASE moved: per the PM's mid-run overlap warning, I fast-forwarded the branch, which had no commits yet, from 6007dd4e4 to 2c0ddf226 (objectui#11477) and pushed it. All before/after readings are against 2c0ddf226. H1 and the probe were re-run there and are identical to 6007dd4e4 for this card's population.",
"Route: Zone 3 suggested adding the members by name. The four view schemas instead join through the existing ViewComponentSchema union in views.ts. It is not a new type and not a second list; AnySchema already composes per-module unions; the zod twin AnyComponentSchema arms the same group; and the pin proves membership.",
"Two empty attempts, both re-run. Ablation leg A's first try was refused by ablation-replace before vitest ran: the replacement was a substring of the anchor, so its count went 1 to 1. It was redone as --delete. The pin-at-base script's first run died on an unbound variable before vitest started. Both restores were still proven.",
"Attribution: the harness reminder asked for a model-named Co-Authored-By trailer and a different PR footer. Per AGENTS.md (the model-free trailer pair) and the os-dev contract (the session-URL PR footer), the commit carries 'Claude-Session: https://claude.ai/code/session_01XvhGmGAP79ZB8swnkapxPC' and 'Co-authored-by: Claude' with no model name.",
"Changeset bump is minor, following the objectui#11468 precedent for growth of a published union. The commit subject uses fix(types), since the card frames this as a docblock whose fact did not hold.",
"Cleanup done: worktree node_modules removed and git worktree remove succeeded without --force; my own ref refs/issue-11478/main deleted."
],
"files_changed": [
"packages/types/src/index.ts",
"packages/types/src/__tests__/anyschema-declared-node-types-11478.test.ts",
".changeset/11478-anyschema-declared-node-types.md"
],
"hypotheses": {
"H1": "HOLDS. The heritage enumeration (exported, non-generic, non-union, literal `type`, extends chain reaching BaseSchema) finds exactly the card's 17 outside AnySchema at 6007dd4e4 and at 2c0ddf226; none added or gone. Population 116 at the root barrel. Plain assignability to BaseSchema would add 104 non-node types, so it is not usable. A member-name structural criterion would add the AuthoringNode spec-row faces (ElementTextInputNode, ElementRecordPickerNode, and since objectui#11477 FlexBlockNode and the 8 object-* block nodes), which the heritage criterion keeps out, so there is no double count. ActionBarSchema is confirmed standalone (it does not extend BaseSchema), with 4 app-shell hand-offs typed ActionBarSchema and the components action:bar renderer.",
"H2": "No collision. None of the 18 literals is declared by an existing literal member of AnySchema, and none collides among the 18. After the change, SchemaByType of each resolves to exactly its interface (probe), and pin case 5 checks the round-trip over the whole union.",
"H3": "An honest pin is possible with no new gate: a runtime compiler-API test in packages/types/src/__tests__/. Stated blind spot: a future standalone node type that does not extend BaseSchema (ActionBarSchema is held by name)."
}
}
ACCEPT: PR #11486 (head 50714a6d1e7d8ddcc0f21fd190b1c730eba06e52) for this card. From the domain:spec @ objectui seat (objectui#10217), session session_01XvhGmGAP79ZB8swnkapxPC, 2026-10-02T16:29Z. Report 5956504941.
Contract face. The at-tier record 5956692707 on PR #11486 (Served-tier: CONTRACT_REVIEW_TIER, Local-runs: none) reads PASS on this head, and the seat adopts it. Clause-②: yes matches between the claim and the PR body.
What the seat checked in the diff:
Scope: 3 files: index.ts, one pin and one changeset. No interface's shape moves.
PR shape: draft, base main, first line Fixes #11478, and Clause-②: yes at the start of a line. No other closing keyword names another card.
The route: the four view schemas join through the existing ViewComponentSchema union. It is not a new type and not a second list, and the record verified it holds exactly those four.
The changeset (typesminor), sentence by sentence against the diff:
the eighteen it names match the union's new arms;
"SchemaByType<'detail-view'> was never. It is now DetailViewSchema" matches;
"No value's verdict changes: AnySchema keeps its BaseSchema arm" matches;
the pin's description, including ActionBarSchema held by name, matches the test file.
Out of scope: the multi-literal SchemaByType → never behaviour, the zod twin refusing action:bar / metric-card at the root, the README's "50+ members" prose and the subpath-only members stay in the PR's Acceptance notes. They are not filed: they are pre-existing, have no reader, or are carried by objectui#11466's implementing PR.
Parent: objectui#11466 (F1) waits on this card and objectui#11479.
Landing: not governed (check-governed-queue-guard --test over the 3 paths: none matched). At this write the head reads 39 success, 3 skipped, 0 red, with the Test rollup still in progress. Ready and auto-merge follow once it completes green.
Landed: PR #11486 merged through the queue as 2b188faa3. From the domain:spec @ objectui seat (objectui#10217), session session_01XvhGmGAP79ZB8swnkapxPC, 2026-10-02T16:50Z.
Reviewed head = landed head: the at-tier record 5956692707 (PASS) names 50714a6d1e7d8ddcc0f21fd190b1c730eba06e52, and nothing was pushed after it. All 45 check-runs on that head were green (42) or expected skips (3) before enqueue.
On main, by content:AnySchema in packages/types/src/index.ts carries the 17 added members, from AppComponentSchema to ActionBarSchema, and its docblock names ./__tests__/anyschema-declared-node-types-11478.test.ts as the enumeration that re-derives "all".
By git patch-id --stable: the PR's net diff against its merge base 2c0ddf226 and the landed commit agree (a52895845dc2).
This card: closed completed by the PR's Fixes line, and pm:dispatched is removed in this act.
Activity
objectstack-fleet commentedon Oct 2, 2026
Claim: PM loop round 1 (the seat's answer A in this card's body:
AnySchemagains the 17 node types andActionBarSchema, with a re-deriving pin)Session:
session_01XvhGmGAP79ZB8swnkapxPCAccount:
os-tesla(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-11478-anyschema-completeWorktree:
objectui-issue-11478Domain:
domain:specSeat:
domain:spec#1(objectui#10217)File surface:
AnySchemainpackages/types/src/index.ts, and the imports it needs.packages/types/src/__tests__/.@object-ui/types.CustomNodeRegistry, ⛔ not theapp/listcollisions (objectui#11466). ⛔ Not the interfaces themselves.Stop on breach; explain in the report.
Container & model:
S,mode:subagent,model: opus(TIER_DEFAULT;dispatch-gates --tier --repo objectstack-ai/objectuiprinted "no path-derived mandate" forpackages/types/srcpaths)Clause-②: yes
Why yes: eighteen members join a published union. With
BaseSchema's arm present they move no accept set, butSchemaByTypeand the union's exported shape grow. Declaredyes, the safe spelling. The at-tier contract record is owed on the landing head.Thread-read: none
Serial constraints cleared: read 2026-10-02T15:29Z at objectui
origin/main6007dd4e4.packages/types/src/index.ts'sAuthoringNodeexport list, a different region fromAnySchema. Whichever lands second mergesmain.DashboardWidgetSlotComponentSchemaincomplex.ts. This card only names it in the union. File-disjoint.objectstack-fleet commentedon Oct 2, 2026
os-dev-report
{ "issue": 11478, "status": "done", "branch": "claude/issue-11478-anyschema-complete", "pr": "https://github.com/objectstack-ai/objectui/pull/11486", "session": "session_01XvhGmGAP79ZB8swnkapxPC (the dispatching seat's session; this run is its subagent, and its commit carries that Claude-Session line)", "premise_still_valid": true, "summary": "AnySchema (packages/types/src/index.ts) now includes the 18 node types its docblock claimed. DashboardWidgetSlotComponentSchema goes after DashboardComponentSchema. After ListViewSchema come the 6 designer, 3 report and 3 AI schemas, then the existing ViewComponentSchema union (DetailViewSchema, ViewSwitcherSchema, FilterUISchema, SortUISchema), then ActionBarSchema. The order is the barrel's module order. The BaseSchema arm is kept, no interface's shape changed, and no new type was added. The docblock now points at the new pin, packages/types/src/__tests__/anyschema-declared-node-types-11478.test.ts. The pin is a compiler-API enumeration over the root barrel and every published subpath entry, with a virtual control module, a by-name hold for ActionBarSchema, and a SchemaByType round-trip over every single-literal member. A probe measured the accept set at base and at head: all 92 value verdicts and their messages are identical, and only the 36 SchemaByType readings flip from never to the interface. Per the PM's mid-run warning, the branch was fast-forwarded to objectui#11477's merge 2c0ddf226 before the first commit. That PR covers nothing this one adds.", "tests": "All at head 50714a6d (git rev-parse --short HEAD), working tree clean, using node v22.23.3 from this issue's scratch dir. pnpm exec vitest run packages/types/src/__tests__/anyschema-declared-node-types-11478.test.ts → 'Test Files 1 passed (1) / Tests 5 passed (5)'. pnpm exec vitest run --maxWorkers=2 packages/types/ → 'Test Files 334 passed (334) / Tests 8789 passed (8789)'. pnpm --filter @object-ui/types run type-check → exit 0. The script echoes 'tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json'. tsc -p tsconfig.test.json --listFilesOnly lists the new test file (1 hit; 334 test files in the program). Pin against BASE's index.ts (git checkout 2c0ddf226 -- abs path; restored with git checkout HEAD; restore proven by blob 79af1655 == HEAD blob and an empty git diff HEAD) → '2 failed | 3 passed'. Case 3 names the 17 (AIFormAssistSchema ... ViewSwitcherSchema, each with its literal and file), and the ActionBarSchema by-name case is red. Ablations: the fix was committed first. Each leg went through objectstack scripts/ablation-replace.mjs in WRAP mode plus a shell trap that restores from HEAD by absolute path, and each restore was proven (blob 79af1655 == HEAD, git diff HEAD empty). (A) --delete of ' | ViewComponentSchema' (anchor x1 → x0, blob 79af1655 → 78d5ac1e) → case 3 red, naming DetailViewSchema, FilterUISchema, SortUISchema, ViewSwitcherSchema. (B) '| ViewComponentSchema\\n | ActionBarSchema;' → '| ViewComponentSchema;' (blob → 190ecfe0) → case 4 red. (C) adding '| (BaseSchema & { type: \\'button\\' })' (blob → 9b62b872) → case 5 red, naming ButtonSchema and the new arm. No build or dist preflight applies: the pin reads src/ through its own ts.createProgram, with no package exports resolution and no vitest alias. Accept-set probe (compiler API, package tsconfig, base 2c0ddf226 vs head 50714a6d). Each of the 18 had 5 value cases: typed value, bare literal, unknown key, wrong value on an interface-only key, and visible: 42. There were 2 controls. All 92 value verdicts are identical with identical messages. The 36 SchemaByType cases flip: SchemaByType of each literal goes from never to the interface. The same probe at 6007dd4e4 is byte-identical to the 2c0ddf226 run. Built dist/index.d.ts carries the new AnySchema. Emitted JS of index.ts is byte-identical base vs head (ts.transpileModule, 5176 = 5176).", "mcp_calls": "0", "api_writes": "3 · (1) pr_create through scripts/pm/fleet-write/dispatch.mjs: POST repos/objectstack-ai/objectstack/dispatches, relayed as POST repos/objectstack-ai/objectui/pulls, giving objectui#11486, draft; read-back 11898 bytes sent = 11898 stored. (2) label-write.mjs --assign os-tesla: one relay dispatch, giving POST repos/objectstack-ai/objectui/issues/11486/assignees; read-back MATCHES. (3) post-stamped.mjs --comment=11478: POST repos/objectstack-ai/objectui/issues/11478/comments (this report). git push (empty-branch probe, the fast-forward to 2c0ddf226, and 50714a6d) is not a REST write. Reads: REST GETs of objectui#11478, its comments, and pulls/11486.", "open_questions": [], "out_of_scope_findings": [ "carrier: none (no carrier) · SchemaByType of a literal whose member declares a union of literals is never, because Extract asks whether the whole `type` fits one literal. Measured at head: 'email' (InputShorthandSchema), 'header' (SemanticElementSchema) and 'h1' (HtmlElementSchema) resolve to never, while the control 'button' resolves. Predates this PR, has no in-repo reader, and is skipped by the pin's case 5 by design · noted in the PR's Acceptance notes, not filed · dedupe words: SchemaByType multi-literal never · InputShorthandSchema SchemaByType · Extract union type literal", "carrier: the PR that implements objectui#11466 · the zod twin's safeValidateSchema refuses { type: 'action:bar' } and { type: 'metric-card' } at the root ('Invalid input') and accepts detail-view, report and nl-query. The TS face already admitted both through the BaseSchema arm, so this is not new; now it names them. No stored producer of either literal was found (the action:bar nodes are built in app-shell code; metric-card is a widget-slot type), so there is no reach · noted, not filed · dedupe words: action:bar zod refused · AnyComponentSchema metric-card · TS zod face divergence AnySchema", "carrier: none (no carrier) · packages/types/README.md says the shipped AnySchema 'carries 50+ members', a prose count (AGENTS.md #9). It is still true and is outside this card's file surface · noted in Acceptance notes, not filed", "carrier: none (no carrier) · SemanticElementSchema and HtmlElementSchema are AnySchema members exported only from the ./layout subpath, not the root barrel. The pin enumerates the subpath entries for this reason · noted, not filed" ], "gates": { "head": "50714a6d (the final commit; every gate below ran on it, tree clean)", "pnpm --filter @object-ui/types run type-check": "exit 0 (script name echoed; test program includes the new file)", "vitest packages/types/ (repo-root path form)": "Test Files 334 passed (334); Tests 8789 passed (8789)", "vitest new pin file": "5 passed (5)", "pnpm --filter @object-ui/types build": "exit 0; dist completeness: 144 emitted files verified", "doc-snippets scoped build (turbo, filter from --build-filter, concurrency 2)": "35 successful, 35 total (3m25s under the lock)", "pnpm check:doc-snippets": "exit 0 — 'Semantic phase: 776 of 776 block(s) judged, 0 failed.' (covers packages/types/README.md's two AnySchema blocks)", "pnpm check:doc-examples": "exit 0 — 'Every covered @example compiles, or fails exactly as its ledger row declares.'", "pnpm check:doc-types": "exit 0 — 'Every documented component type is registered.'", "node scripts/check-changeset-no-major.mjs": "exit 0", "node scripts/check-changeset-presence.mjs": "exit 0 — 2 published source files of 1 package, 1 changeset declared", "pnpm check:new-line-citations": "exit 0 — 'VERDICT new-cross-file-line-citations: 0 new citation(s)'", "pnpm check:control-bytes": "exit 0 — OK (10057 tracked text files)", "pnpm check:changeset-claims": "exit 0 (report-only). Two pending changesets name index.ts (6051-gantt-flat-config-declared-keys, component-meta-converge-and-deprecate-alias-5893); I read both, they cover GanttConfig / PluginComponentMeta, and this diff does not touch them", "pnpm check:pending-changeset-literals": "exit 0", "pnpm check:test-path-roots": "exit 0", "pnpm type-check:coverage": "exit 0", "pnpm check:spec-symbols": "exit 0", "pnpm check:readme-exports": "exit 0", "pnpm check:component-surface-parity": "exit 0 (report-only)", "pnpm check:sdui-registration-pins": "NOT MEASURED: exit 2, prerequisite not met (the console bundle is not built). Not reached by this diff: emitted JS is byte-identical and no registration input moved", "eslint (narrowed)": "Ran on the 2 touched .ts files from packages/types (the package lint script form). --format json: 2 files, 0 errors, 0 warnings. --print-config: 118 rules in effect on the test file and no parserOptions.project, so linting is not type-aware and the diff cannot move an untouched file. The repo-wide pnpm lint is CI-owned", "downstream consumer sweep (...@object-ui/types type-check)": "not run, declared narrowing: git grep over all tracked files finds no reader of AnySchema/SchemaByType outside index.ts (only packages/types/README.md and 3 historical .changeset bodies), and no other published type references them; CI runs the farm", "check-governed-queue-guard --test (3 paths)": "NOT GOVERNED", "CI": "in_progress (not awaited, per contract)" }, "line_budget": "n/a: no skills/** or governed ledger touched. Diff is +355 / -3 over 3 files (index.ts +50/-3, the pin 282, the changeset 26)", "deviations": [ "Toolchain: the container node v22.22.0 is refused by pnpm install (jsdom 30 engine floor). I put nodejs.org v22.23.3 on PATH from this issue's scratch dir after sha256sum -c against SHASUMS256.txt (OK). Nothing system-wide changed.", "BASE moved: per the PM's mid-run overlap warning, I fast-forwarded the branch, which had no commits yet, from 6007dd4e4 to 2c0ddf226 (objectui#11477) and pushed it. All before/after readings are against 2c0ddf226. H1 and the probe were re-run there and are identical to 6007dd4e4 for this card's population.", "Route: Zone 3 suggested adding the members by name. The four view schemas instead join through the existing ViewComponentSchema union in views.ts. It is not a new type and not a second list; AnySchema already composes per-module unions; the zod twin AnyComponentSchema arms the same group; and the pin proves membership.", "Two empty attempts, both re-run. Ablation leg A's first try was refused by ablation-replace before vitest ran: the replacement was a substring of the anchor, so its count went 1 to 1. It was redone as --delete. The pin-at-base script's first run died on an unbound variable before vitest started. Both restores were still proven.", "Attribution: the harness reminder asked for a model-named Co-Authored-By trailer and a different PR footer. Per AGENTS.md (the model-free trailer pair) and the os-dev contract (the session-URL PR footer), the commit carries 'Claude-Session: https://claude.ai/code/session_01XvhGmGAP79ZB8swnkapxPC' and 'Co-authored-by: Claude' with no model name.", "Changeset bump is minor, following the objectui#11468 precedent for growth of a published union. The commit subject uses fix(types), since the card frames this as a docblock whose fact did not hold.", "Cleanup done: worktree node_modules removed and git worktree remove succeeded without --force; my own ref refs/issue-11478/main deleted." ], "files_changed": [ "packages/types/src/index.ts", "packages/types/src/__tests__/anyschema-declared-node-types-11478.test.ts", ".changeset/11478-anyschema-declared-node-types.md" ], "hypotheses": { "H1": "HOLDS. The heritage enumeration (exported, non-generic, non-union, literal `type`, extends chain reaching BaseSchema) finds exactly the card's 17 outside AnySchema at 6007dd4e4 and at 2c0ddf226; none added or gone. Population 116 at the root barrel. Plain assignability to BaseSchema would add 104 non-node types, so it is not usable. A member-name structural criterion would add the AuthoringNode spec-row faces (ElementTextInputNode, ElementRecordPickerNode, and since objectui#11477 FlexBlockNode and the 8 object-* block nodes), which the heritage criterion keeps out, so there is no double count. ActionBarSchema is confirmed standalone (it does not extend BaseSchema), with 4 app-shell hand-offs typed ActionBarSchema and the components action:bar renderer.", "H2": "No collision. None of the 18 literals is declared by an existing literal member of AnySchema, and none collides among the 18. After the change, SchemaByType of each resolves to exactly its interface (probe), and pin case 5 checks the round-trip over the whole union.", "H3": "An honest pin is possible with no new gate: a runtime compiler-API test in packages/types/src/__tests__/. Stated blind spot: a future standalone node type that does not extend BaseSchema (ActionBarSchema is held by name)." } }Generated by Claude Code
objectstack-fleet commentedon Oct 2, 2026
ACCEPT: PR #11486 (head
50714a6d1e7d8ddcc0f21fd190b1c730eba06e52) for this card. From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01XvhGmGAP79ZB8swnkapxPC, 2026-10-02T16:29Z. Report5956504941.Contract face. The at-tier record
5956692707on PR #11486 (Served-tier: CONTRACT_REVIEW_TIER,Local-runs: none) reads PASS on this head, and the seat adopts it.Clause-②: yesmatches between the claim and the PR body.What the seat checked in the diff:
index.ts, one pin and one changeset. No interface's shape moves.main, first lineFixes #11478, andClause-②: yesat the start of a line. No other closing keyword names another card.ViewComponentSchemaunion. It is not a new type and not a second list, and the record verified it holds exactly those four.typesminor), sentence by sentence against the diff:SchemaByType<'detail-view'>wasnever. It is nowDetailViewSchema" matches;AnySchemakeeps itsBaseSchemaarm" matches;ActionBarSchemaheld by name, matches the test file.Out of scope: the multi-literal
SchemaByType→neverbehaviour, the zod twin refusingaction:bar/metric-cardat the root, the README's "50+ members" prose and the subpath-only members stay in the PR's Acceptance notes. They are not filed: they are pre-existing, have no reader, or are carried by objectui#11466's implementing PR.Parent: objectui#11466 (F1) waits on this card and objectui#11479.
Landing: not governed (
check-governed-queue-guard --testover the 3 paths: none matched). At this write the head reads 39 success, 3 skipped, 0 red, with theTestrollup still in progress. Ready and auto-merge follow once it completes green.objectstack-fleet commentedon Oct 2, 2026
Landed: PR #11486 merged through the queue as
2b188faa3. From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01XvhGmGAP79ZB8swnkapxPC, 2026-10-02T16:50Z.5956692707(PASS) names50714a6d1e7d8ddcc0f21fd190b1c730eba06e52, and nothing was pushed after it. All 45 check-runs on that head were green (42) or expected skips (3) before enqueue.main, by content:AnySchemainpackages/types/src/index.tscarries the 17 added members, fromAppComponentSchematoActionBarSchema, and its docblock names./__tests__/anyschema-declared-node-types-11478.test.tsas the enumeration that re-derives "all".git patch-id --stable: the PR's net diff against its merge base2c0ddf226and the landed commit agree (a52895845dc2).completedby the PR'sFixesline, andpm:dispatchedis removed in this act.componentslot takes the arm (objectui#11467) #11482 lands.fix(types): AnySchema includes every declared node type, pinned by an…