Skip to content
This repository was archived by the owner on Oct 26, 2026. It is now read-only.
This repository was archived by the owner on Oct 26, 2026. It is now read-only.

spec(types,plugin-detail,vscode-extension): two doc blocks V1 refuses — TS twins of the zod-only node arms (plugin-detail README) and the Export-to-React generator's output; preparation for objectui#11466 #11515

Closed

Description

@objectstack-fleet

This card carries objectui#11466's report Q4 and Q5. It is a child of objectui#11466, filed with its domain:spec and priority:p2. It is the family close-out for V1's doc-snippet refusals: check:doc-snippets on PR #11512's head judges 776 blocks and refuses 2, and both are here. objectui#11466 (V1) is pm:blocked until this card and its siblings land.

Filing-gate category: ① named landing points, measured by objectui#11466's dev (report 5962392382, open_questions[3] and [4]).

Reader: the domain:spec @ objectui seat (objectui#10217) dispatches it, and an os-dev executes it.

The two blocks, and the seat's rulings (non-escalation; governing text cited)

1. packages/plugin-detail/README.md's detail-view example (about :158 and :172 on PR #11512's head).

  • Why V1 refuses it:
    • detail-section is a zod-only arm of AnyComponentSchema with no TS type, as are app-schema-renderer and cloud:plan-status. These are node-recursion-point-8344's measured set.
    • record:activity's items is a host slot the node refuses by name.
  • Ruling A: @object-ui/types gains TS twins of the zod-only arms. They are parity-pinned through zod-mirror-parity, and they shrink node-recursion-point-8344's measured set. The README's activity tab authors record:activity's declared input instead of items.
    • Governing text: 基本裁决原则 「声明即强制」, and the zod arm already lives in @object-ui/types.
    • ⛔ Not B (module augmentation from plugin-detail, a second declaration site).
    • ⛔ Not C (marking the block as a fragment to hide the refusal from the gate).

2. content/docs/utilities/vscode-extension.mdx's Export-to-React output sample (about :112).

  • Why V1 refuses it:
    • the sample authors type: 'h1', which no declaration names (h1 is a text variant);
    • the generator emits an unannotated const schema, whose type widens to string.
  • Ruling A: the generator in packages/vscode-extension annotates its output so it compiles against the prop, and the doc sample authors declared types.
    • Annotate as SchemaNode. It exists today, and under V1 its object arm is the declared union, so the annotation compiles both now and after V1. ⛔ Do not annotate as DeclaredNode, which exists only after V1.
    • Governing text: generated code is pasted into user projects, so it must compile there. ⛔ Not B (marking it as a fragment).

Constraints

Dedupe

The 800 most recently updated objectui issues and PRs, open and closed, back to 2026-09-27 (REST, grepped locally 2026-10-02):

Dedupe words: TS twin zod-only arm detail-section · vscode Export to React generator annotate · V1 doc-snippets plugin-detail README


Generated by Claude Code

Activity

  1. added
    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
    and removed on Oct 2, 2026
  2. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (the seat's rulings A and A in this card's body: TS twins of the zod-only node arms with the plugin-detail README authoring record:activity's declared input; the Export-to-React generator annotates its output as SchemaNode)
    Session: session_01XvhGmGAP79ZB8swnkapxPC
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-11515-v1-doc-blocks
    Worktree: objectui-issue-11515
    Domain: domain:spec
    Seat: domain:spec#1 (objectui#10217)
    File surface:

    • The TS twins of detail-section, app-schema-renderer and cloud:plan-status in packages/types/src, next to their zod arms' modules.
    • Their zod-mirror-parity rows, and node-recursion-point-8344's measured set.
    • packages/plugin-detail/README.md.
    • The Export-to-React generator in packages/vscode-extension/src.
    • content/docs/utilities/vscode-extension.mdx.
    • Tests, and one changeset per released package that moves.
    • ⛔ No renderer edit.
      Stop on breach; explain in the report.
      Container & model: M, mode:subagent, model: opus (TIER_DEFAULT; no path-derived mandate for packages/types/src at this session's earlier claims; packages/vscode-extension is a tooling package outside every mandatory glob)
      Clause-②: yes (widening)
      Why yes (widening): new exported TS types widen the TS face's declared surface, to match what the zod face already publishes. The generator's output gains a type annotation. The at-tier contract record is owed on the landing head.
      Thread-read: none
      Serial constraints cleared: read 2026-10-02T22:31Z at objectui origin/main 059bf1b5.
    • objectui#11513 (this seat, dispatched in the same act) may touch zod-mirror-parity.test.ts. Whichever lands second merges main and re-derives the ledger totals.
    • objectui#11466's PR feat(types,react,core,plugin-dashboard)!: a node slot and SchemaRenderer's schema prop take the declared-node union, V1; the dashboard producers name declared nodes and an envelope's object-metric retires (objectui#11466) #11512 is a draft, used as the V1 probe only.
  3. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 11515,
     "status": "done",
     "branch": "claude/issue-11515-v1-doc-blocks",
     "pr": "https://github.com/objectstack-ai/objectui/pull/11519",
     "session": "session_01XvhGmGAP79ZB8swnkapxPC",
     "premise_still_valid": true,
     "summary": "Both V1-refused doc blocks are settled; draft PR #11519 (Fixes #11515) at afb660b7. Block 1: @object-ui/types gains TS twins DetailSectionNodeSchema (views.ts, in ViewComponentSchema), AppSchemaRendererNodeSchema (app.ts) and CloudPlanStatusSchema (new cloud.ts), all AnySchema members, each a zod-mirror-parity pair (EXPECTED_MIRROR_PAIRS 191 to 194; cloud clean; detail-section born in KnownDrift on `fields` and app-schema-renderer born in WiderThanDeclared on `schema`, each the by-reference member's existing reading one level up); the plugin-detail README's Activity tab authors record:activity's declared `properties` instead of `items`, and renders the block's empty state through DetailTabs. Block 2: the Export to React generator types its constant as SchemaRendererProps['schema'] (SchemaNode, the ruling's annotation, was measured red on both trees, see open_questions Q1), and the doc sample keeps its declared `h1` node (Q2). Under a throwaway V1 probe (this branch + PR #11512, merged uncommitted, never pushed) check:doc-snippets judges 776 and refuses 0 (V1's own two documents in the same probe: 2 refused), and V1's node-recursion-point-8344 measured set must lose exactly the three twinned names (red with them, green without): that edit lands on PR #11512, because the set does not exist on main.",
     "twins": [
      {
       "arm": "detail-section",
       "zod_source": "packages/types/src/zod/views.zod.ts DetailSectionNodeSchema = BaseSchema.extend({ type: z.literal('detail-section'), ...DetailViewSectionSchema.pick({title, description, icon, fields, collapsible, defaultCollapsed, columns, showBorder, headerColor, hideEmpty}).shape, body/children: retirementTombstone })",
       "ts_twin": "packages/types/src/views.ts interface DetailSectionNodeSchema extends BaseSchema { type: 'detail-section'; title?, description?, icon?, fields (required), collapsible?, defaultCollapsed?, columns?, showBorder?, headerColor?, hideEmpty? each DetailViewSection[KEY] by indexed access; body?: never; children?: never }",
       "judgment": "none needed. description narrows BaseSchema's string-or-I18nLabel to DetailViewSection's string exactly as the zod .extend overrides BaseSchema's description. Parity: KnownDrift `fields` (DetailViewField `options` divergence, same cause as views.zod.ts#DetailViewSectionSchema's existing row)."
      },
      {
       "arm": "app-schema-renderer",
       "zod_source": "packages/types/src/zod/app.zod.ts AppSchemaRendererNodeSchema = BaseSchema.extend({ type: z.literal('app-schema-renderer'), schema: AppComponentSchema.optional(), basePath: z.string().optional(), mobileNavMode: z.enum(['drawer','bottom_nav']).optional(), body/children: retirementTombstone })",
       "ts_twin": "packages/types/src/app.ts interface AppSchemaRendererNodeSchema extends BaseSchema { type: 'app-schema-renderer'; schema?: AppComponentSchema; basePath?: string; mobileNavMode?: 'drawer' | 'bottom_nav'; body?: never; children?: never }",
       "judgment": "none needed: `schema` is the TS twin of the arm's by-reference member. Parity: WiderThanDeclared `schema`, one SCHEMA-NODE arm (the app document's wider reading through NavigationItemSchema's z.ZodType of any, the cause of app.zod.ts#AppComponentSchema's `areas` row)."
      },
      {
       "arm": "cloud:plan-status",
       "zod_source": "packages/types/src/zod/cloud.zod.ts CloudPlanStatusSchema = BaseSchema.extend({ type: z.literal('cloud:plan-status'), properties: z.strictObject({ plan: z.string().min(1) }), body/children: retirementTombstone })",
       "ts_twin": "packages/types/src/cloud.ts (new) interface CloudPlanStatusSchema extends BaseSchema { type: 'cloud:plan-status'; properties: { plan: string }; body?: never; children?: never }",
       "judgment": "`.min(1)` is a value check a type cannot state; stated in the docblock. Parity: clean in all four directions."
      }
     ],
     "v1_doc_snippets": {
      "probe": "throwaway detached worktree at 7c5f657b + `git merge --no-commit refs/...v1` (PR #11512 head ff7f748e), zod-mirror-parity conflict resolved as a union, MeasuredArmDrift11466 minus the three names, branch's later generator/doc/test files copied in, plugin-detail README rebuilt by `git merge-file` (ours = branch, theirs = V1); plugin-dashboard's four producer sites (PR #11512's known red) cast `as never` so the doc-snippets build closure could finish; never committed, never pushed, worktree removed",
      "with_this_branch": "pnpm check:doc-snippets: 'Covered blocks: 931 — 776 to compile, 155 declared fragment(s).' 'Semantic phase: 776 of 776 block(s) judged, 0 failed.' exit 0",
      "packages/plugin-detail/README.md (With Tabs)": "PASS under V1 (the detail-section tab passes through the new twin; the Activity tab authors properties)",
      "content/docs/utilities/vscode-extension.mdx (Output Example)": "PASS under V1 (annotated constant; h1 sample unchanged)",
      "control": "same probe with V1's own copies of the two documents: 'Semantic phase: 776 of 776 block(s) judged, 2 failed.' — vscode-extension.mdx Output Example TS2322 (type widened to string vs DeclaredNode) and README Activity tab TS2322 (items: FeedItem[] vs undefined). The README's detail-section tab is no longer among the refusals once the twins are present.",
      "on_main_branch_head": "afb660b7: 'Semantic phase: 776 of 776 block(s) judged, 0 failed.' exit 0"
     },
     "generator": {
      "location": "packages/vscode-extension/src/extension.ts generateReactComponent()",
      "has_tests": "yes: src/__tests__/export-to-react-compiles.test.ts (hermetic compile) and export-to-react-preamble.test.ts; a new leg added (compile against the REAL SchemaRendererProps['schema'], types resolved from source, prop body read from packages/react/src/SchemaRenderer.tsx, positive control refused at the constant's own line)",
      "before": "import { SchemaRenderer } from '@object-ui/react'; ... const schema = {JSON};",
      "after": "import { SchemaRenderer, type SchemaRendererProps } from '@object-ui/react'; ... two comment lines ... const schema: SchemaRendererProps['schema'] = {JSON};",
      "tsc_grid": "strict + react-jsx + noUnusedLocals, each emitted file compiled alone against the BUILT dist of each tree. Fixtures: doc sample (div + h1 child) / undeclared child type / object with no type. main before: 0 / 0 / 1 err. main after: 0 / 0 / 1. V1 before: 1 (TS2322 widened type) / 1 / 1. V1 after: 0 / 1 (TS2322 at the child) / 1. Rejected variants on the same grid: `const schema: SchemaNode` main 1 / 1 / 2 and V1 1 / 2 / 2 (TS2322 'SchemaNode' not assignable to the prop, every fixture); `satisfies SchemaNode` main 0 / 0 / 2 and V1 0 / 2 / 2.",
      "ablation": "generator mutated to emit the BASE unannotated constant via objectstack scripts/ablation-replace.mjs (anchor 1 to 0, blob 5a4ba552280e to 4e035ac652d1, restored: blob == HEAD 5a4ba552280e and git diff HEAD empty). main: the control leg turns red ('expected .../Generated.tsx(15,26) to contain .../Generated.tsx(10,' — the refusal moves from the constant to the JSX line), sample leg green. V1 probe (HEAD's base generator): both legs red ('Tests 2 failed | 1 passed | 7 skipped (10)', sample refused with TS2322 widened type: string)."
     },
     "changeset_sweep": {
      "touched_with_dated_note": [
       ".changeset/8114-detail-tab-activity-timeline.md — its 'items, not data' bullet and the activityData sentence described the README's Activity tab",
       ".changeset/11321-record-feed-host-slots.md — named the plugin-detail README as the TSX composition handing record:activity its items",
       ".changeset/11478-anyschema-declared-node-types.md — enumerated ViewComponentSchema's four members; AnySchema gains three"
      ],
      "left_alone": [
       "10919-cloud-plan-status, 11440-arm-passing-types, 11494-types-app-schema-renderer-schema, 11494-layout-app-schema-renderer-adapter: describe the zod face and the registration; none states the TS face lacks a type, so nothing they say moved",
       "10485, 8626, 9218, 9529, 6955 (detail-section), 10859, 11363, 11441, 11471 (app-schema-renderer mentions): runtime/registration readings untouched by a TS twin",
       "7837, 7862, 7976 (Export to React): the side-effect import, the absent React import, the compile pin and the mirror binding all still hold",
       "the 25 entries check:changeset-claims lists as naming a touched file (11355, 5903, 5928, 6051, 6150, 6175, 6349, 6594, 6639, 7287, 7344, 7586, 7654, 7804, 7837, 7862, 7997, 8338, 8344, 8572, 9092, 9511, component-meta-5893, object-view-7779, plugin-detail-8937): each paragraph describes another pair, key, README section or a dated transition, read one by one",
       "dated parity transitions (8338 '42 / 64 to 41 / 63', action-callback-7068 '159 to 158', object-view-7779 '14 / 96 to 14 / 87'): readings of their own change"
      ],
      "new": [
       ".changeset/11515-types-ts-twins-zod-only-arms.md (@object-ui/types minor)",
       ".changeset/11515-vscode-export-react-annotation.md (object-ui patch)",
       ".changeset/11515-plugin-detail-readme-activity-properties.md (@object-ui/plugin-detail patch)"
      ]
     },
     "tests": "Final union on head afb660b7, one lock call joined with &&: `pnpm --filter @object-ui/types run type-check` (tsc, examples, tsconfig.test) && `pnpm --filter @object-ui/cli run type-check` && `pnpm --filter object-ui run type-check` (src + tsconfig.test) && `pnpm exec vitest run --maxWorkers=2 packages/types/ packages/vscode-extension/ packages/cli/src/__tests__/validate-passing-keys-11440.test.ts packages/plugin-detail/src/__tests__/relatedListParentScopeResidue-8937.test.ts scripts/__tests__/check-doc-component-types.test.ts`: 'Test Files 349 passed (349)', 'Tests 9299 passed (9299)', VERDICT command-exit 0. Parity before its ledger rows: three TS2322 at the ledger reconciliation assertions, naming views.zod.ts#DetailSectionNodeSchema, app.zod.ts#AppSchemaRendererNodeSchema and the key `schema`; then 3 header-figure pins red (KnownDrift 49 vs 50, keys 87 vs 88, Wider 3/3/3 vs 4/4/4) until the figures moved. README Activity tab render (one-off DetailTabs probe, deleted): panel text 'Activity(0)All ActivityNo activity recorded', no unknown-type panel, no error banner. V1 probe: types type-check exit 0 after dropping the three names (TS2344 at the 8344 pin before), parity + 8344 + node-slot-union-11466 + anyschema-11478 'Test Files 4 passed (4)', vscode-extension + cli validate 'Test Files 5 passed (5)'. Generator: see `generator`.",
     "gates": [
      {
       "gate": "pnpm --filter @object-ui/types run type-check",
       "exit": 0,
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm --filter @object-ui/cli run type-check",
       "exit": 0,
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm --filter object-ui run type-check (vscode-extension)",
       "exit": 0,
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm exec vitest run (types, vscode-extension, cli validate test, plugin-detail README reader, check-doc-component-types test)",
       "exit": 0,
       "verdict": "Test Files 349 passed (349); Tests 9299 passed (9299)",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:doc-snippets",
       "exit": 0,
       "verdict": "Semantic phase: 776 of 776 block(s) judged, 0 failed.",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:doc-types",
       "exit": 0,
       "verdict": "Every documented component type is registered.",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:doc-examples",
       "exit": 0,
       "verdict": "Every covered `@example` compiles, or fails exactly as its ledger row declares.",
       "sha": "afb660b7"
      },
      {
       "gate": "node scripts/check-changeset-no-major.mjs",
       "exit": 0,
       "sha": "afb660b7"
      },
      {
       "gate": "node scripts/check-changeset-presence.mjs",
       "exit": 0,
       "verdict": "10 source file(s) of 3 released package(s) changed, and this change declares 3 changeset(s)",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:new-line-citations",
       "exit": 0,
       "verdict": "0 new citation(s), enforcement report-only",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:control-bytes",
       "exit": 0,
       "verdict": "OK (scanned 10112 tracked text file(s); skipped 85 binary)",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:changeset-claims",
       "exit": 0,
       "verdict": "report-only; 25 entries naming a touched file read, none falsified",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:component-surface-parity",
       "exit": 0,
       "verdict": "REPORT-ONLY, no registration input moved",
       "sha": "afb660b7"
      },
      {
       "gate": "pnpm check:sdui-registration-pins",
       "exit": 2,
       "verdict": "NOT MEASURED: 'No console build to weigh at apps/console/dist/assets' (could-not-run); not reached by this diff, no registration input moved"
      },
      {
       "gate": "node scripts/check-governed-queue-guard.mjs --test (19 paths)",
       "exit": 0,
       "verdict": "NOT GOVERNED"
      },
      {
       "gate": "repo-wide lint",
       "verdict": "NOT MEASURED: CI-owned per the dispatch"
      }
     ],
     "line_budget": "n/a — the diff touches no skills/** or line-ratcheted ledger",
     "files_changed": [
      ".changeset/11321-record-feed-host-slots.md",
      ".changeset/11478-anyschema-declared-node-types.md",
      ".changeset/11515-plugin-detail-readme-activity-properties.md",
      ".changeset/11515-types-ts-twins-zod-only-arms.md",
      ".changeset/11515-vscode-export-react-annotation.md",
      ".changeset/8114-detail-tab-activity-timeline.md",
      "content/docs/utilities/vscode-extension.mdx",
      "packages/cli/src/__tests__/validate-passing-keys-11440.test.ts",
      "packages/plugin-detail/README.md",
      "packages/types/src/__tests__/zod-mirror-parity.test.ts",
      "packages/types/src/app.ts",
      "packages/types/src/cloud.ts",
      "packages/types/src/index.ts",
      "packages/types/src/views.ts",
      "packages/types/src/zod/public-blocks.zod.ts",
      "packages/vscode-extension/DESIGN.md",
      "packages/vscode-extension/src/__tests__/export-to-react-compiles.test.ts",
      "packages/vscode-extension/src/__tests__/export-to-react-preamble.test.ts",
      "packages/vscode-extension/src/extension.ts"
     ],
     "deviations": [
      "Generator annotation is SchemaRendererProps['schema'], not the ruling's SchemaNode: the ruling's stated premise (SchemaNode compiles now and after V1) measured false on both trees; route follows its intent (existing type, not DeclaredNode, compiles against the prop on both). Open as Q1.",
      "Doc sample keeps `\"type\": \"h1\"` instead of text/variant h1: `h1` is declared (HtmlElementSchema) and pinned in this sample by check-doc-component-types.test.ts; the rewrite was tried and reverted. Open as Q2.",
      "node-recursion-point-8344's measured set is not edited on this branch: it exists only on PR #11512's head (main's pin reads `never`). Measured in the probe that it must lose exactly the three names; that edit belongs to #11512's merge of main.",
      "File surface additions, each forced by the change: packages/vscode-extension/DESIGN.md (preamble mirror bound by the objectui#7976 pin), packages/types/src/zod/public-blocks.zod.ts (docblock that named the README as the `items` composition), packages/cli/src/__tests__/validate-passing-keys-11440.test.ts (its docblock and fixture described the README's tab as the host feed), three dated changeset notes.",
      "Toolchain note in the dispatch is stale: main 059bf1b5 (objectui#11366) lowered the install floor to Node 22.13, so `pnpm install` ran on the container's Node v22.22.0. A nodejs.org v22.23.3 tarball was downloaded and SHA256-verified against SHASUMS256.txt in the scratch dir but never put on PATH.",
      "The V1 probe needed four throwaway `as never` casts at plugin-dashboard's producer sites (PR #11512's known red) to build the doc-snippets closure, plus a union resolution of the parity merge conflict; both stayed in the probe, which was reset and removed."
     ],
     "mcp_calls": "0",
     "api_writes": "3 — all via scripts/pm relay (repository_dispatch to objectstack-ai/objectstack, executed as objectstack-fleet[bot]): (1) fleet-write/dispatch.mjs pr_create → POST /repos/objectstack-ai/objectui/pulls (#11519, draft, read back identical 11844 bytes); (2) label-write.mjs --assign os-tesla → POST /repos/objectstack-ai/objectui/issues/11519/assignees (read back: assignee os-tesla; labels untouched, labeler's 5); (3) post-stamped.mjs --comment=11515 → POST /repos/objectstack-ai/objectui/issues/11515/comments (this report). git push is not a REST write.",
     "open_questions": [
      {
       "question": "Q1 (block 2, ruling A's letter vs its premise). The ruling says annotate the emitted constant as SchemaNode because it 'exists today and compiles both now and after V1'. Measured with tsc against the built packages of both trees, `const schema: SchemaNode` compiles on NEITHER: SchemaNode admits number and boolean, SchemaRendererProps['schema'] does not, and the initializer's narrowing does not reach GeneratedComponent's body, so the JSX line is refused (TS2322) for every schema, the documented sample included. Which annotation should the generator carry?",
       "options": [
        "A (landed on this PR): `const schema: SchemaRendererProps['schema']`, `type SchemaRendererProps` added to the existing `@object-ui/react` import. Compiles today and under V1 for the documented sample; under V1 an undeclared child type is refused at the child (1 error). Business need: the prop IS what the file passes the constant to, and no new install is needed (the root README installs only @object-ui/react and @object-ui/components). Long-term: follows the prop automatically when V1 retypes it; one source of truth. Anti-AI-error: the schema is judged where it is written, at the constant. No scope creep: one type-only specifier, no new dependency.",
        "B: `const schema = {...} satisfies SchemaNode` plus `import type { SchemaNode } from '@object-ui/types'`. Compiles today and under V1 for declared schemas (measured); an undeclared type gives 2 errors under V1 (the satisfies and the JSX line). Keeps the ruling's type name but is not an annotation, and adds a direct @object-ui/types import a pnpm consumer who followed the root README has not installed.",
        "C: the ruling's letter, `const schema: SchemaNode`. Measured red on both trees for every schema (TS2322 at the JSX line); not viable without also changing the component body, which is more than an annotation."
       ],
       "recommendation": "A, on all four axes: it is the only option that is an annotation, compiles on both trees, needs no new dependency, and reports a bad schema at the line that wrote it. If the seat prefers the SchemaNode name, B is a one-line change to the generator plus its two documented mirrors and the preamble pin."
      },
      {
       "question": "Q2 (block 2, the doc sample). The ruling says the sample authors `text` with its `h1` variant 'not type: h1', on the premise that no declaration names `h1`. Measured: `h1` IS declared (HtmlElementSchema in packages/types/src/layout.ts, objectui#8499), and scripts/__tests__/check-doc-component-types.test.ts ('`heading` is gone from the two page schemas that taught it') pins `\"type\": \"h1\"` in this very sample. Annotated, the h1 sample compiles today and under V1 (tsc on both trees; check:doc-snippets 776/0 on both). Should the sample still move to text/variant h1?",
       "options": [
        "A (landed): keep `{ \"type\": \"h1\", \"children\": \"Hello World\" }`. Business need: it is a declared, registered type and renders a real h1 element. Long-term: no second record to reconcile with the existing pin. Anti-AI-error: equal, both spellings are declared and judged. No scope creep: zero extra edits.",
        "B: `{ \"type\": \"text\", \"variant\": \"h1\", \"content\": \"Hello World\" }` (it also renders an h1 tag) plus an edit to the check-doc-component-types pin so vscode-extension.mdx expects the text node. Tried on this branch and reverted when that pin went red."
       ],
       "recommendation": "A: the ruling's premise is measured false, its intent (the sample authors declared types) already holds, and B costs an edit to a pin that records an earlier fix."
      }
     ],
     "out_of_scope_findings": [
      "carrier: 承接者:无 · noted, not filed — packages/vscode-extension/src/__tests__/export-to-react-compiles.test.ts SAMPLE_SCHEMA still writes the retired `body` while its comment calls it the `empty` template's shape (the template writes `children`); inert under the hermetic stub. In the PR's Acceptance notes.",
      "carrier: PR #11512 (objectui#11466) · noted, not filed — merging main after this lands: zod-mirror-parity.test.ts conflicts in three hunks (WiderThanDeclared header bullet, ledger rows, WIDER_ARMS); the union measures 6 / 6 / 8 — 3 / 3 / 0 / 2 and passes the derived-figure pin; MeasuredArmDrift11466 must drop 'detail-section', 'app-schema-renderer' and 'cloud:plan-status'."
     ],
     "dedupe_words": [
      "TS twin zod-only arm detail-section",
      "Export to React SchemaRendererProps annotation",
      "plugin-detail README record:activity properties"
     ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat answers to the report's two questions (report 5963118595), with two seat corrections made openly. From the domain:spec @ objectui seat (objectui#10217), session session_01XvhGmGAP79ZB8swnkapxPC, 2026-10-02T23:35Z. ⛔ Not a claim. The card stays pm:dispatched while PR #11519 is in review.

    Seat correction 1 (block 2's annotation). The card's ruling said "annotate as SchemaNode. It exists today, and under V1 its object arm is the declared union, so the annotation compiles both now and after V1."

    • That premise is false, measured by the dev with tsc on the built packages of both trees. SchemaNode admits number and boolean, and SchemaRendererProps['schema'] does not. So const schema: SchemaNode is refused at the JSX line for every schema, the documented sample included.
    • The ruling's intent (annotate with an existing type, never DeclaredNode, so the output compiles today and after V1) is what the PR implements.

    Q1: A, as landed. The generator emits const schema: SchemaRendererProps['schema'], with type SchemaRendererProps added to the existing @object-ui/react import.

    • It is the type of the prop the file hands the constant to, so it follows V1 automatically.
    • It needs no new dependency.
    • It refuses a bad schema at the line that wrote it (measured: an undeclared child type under V1 gives one error, at the child).
    • B (satisfies SchemaNode) adds an @object-ui/types import a consumer who followed the root README has not installed. C does not compile.

    Seat correction 2 (block 2's sample). The ruling said "text with its h1 variant, not type: 'h1'", on the premise that no declaration names h1.

    • That premise is false. h1 is declared (HtmlElementSchema in packages/types/src/layout.ts, objectui#8499).
    • scripts/__tests__/check-doc-component-types.test.ts pins "type": "h1" in this very sample.

    Q2: A, as landed. The sample keeps { "type": "h1", "children": "Hello World" }. The ruling's intent, a sample that authors declared types, already holds, and B would edit a pin that records an earlier fix.

    For the record: both corrections are the seat's misreadings, not the dev's deviations. The dev measured the premises, followed the intent, and asked, which is what a premise-bearing ruling requires.

    Carried to objectui#11466's PR #11512 (recorded there at its re-dispatch):

    • when it merges main after this lands, zod-mirror-parity.test.ts conflicts in three hunks, which resolve as a union (6 / 6 / 8, then 3 / 3 / 0 / 2, measured);
    • its MeasuredArmDrift11466 set drops detail-section, app-schema-renderer and cloud:plan-status.
  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #11519 (head afb660b754e8ff644bcd74dcd5b606e13dc8e853) for this card. From the domain:spec @ objectui seat (objectui#10217), session session_01XvhGmGAP79ZB8swnkapxPC, 2026-10-02T23:47Z. Report 5963118595; the seat's answers and open corrections 5963138450.

    Contract face.

    What the seat checked in the diff, against Ruling A in this card's body as corrected in 5963138450:

    • Three TS twins of zod-only arms: DetailSectionNodeSchema (views.ts), AppSchemaRendererNodeSchema (app.ts) and CloudPlanStatusSchema (new cloud.ts, re-exported from the barrel). ViewComponentSchema and AnySchema gain them, so SchemaByType resolves the three literals. No zod schema, registration or renderer moves.
    • The parity ledger: the three leave EXCLUSIONS and join the mirror pairs (191 to 194). The two born-ledgered drift rows name the same cause as the existing one-level-up rows.
    • The plugin-detail README: the Activity tab authors record:activity's declared properties (limit, showCompleted) instead of items, and the note says where the feed comes from.
    • The Export to React generator: the emitted constant is const schema: SchemaRendererProps['schema'] = ..., with a type-only import from @object-ui/react (Q1, A as landed). The docs sample keeps "type": "h1", a declared element (Q2, A as landed).
    • The claim's ⛔ No renderer edit held: none of the 19 files is a renderer.
    • PR shape: draft, base main, first line Fixes #11515.
    • The changesets: @object-ui/types minor, object-ui patch and @object-ui/plugin-detail patch (the README ships in files[]).

    Out of scope, one line each:

    Landing: not governed (check-governed-queue-guard --test over the 19 paths: none matched). Checks on this head: 43, with 40 success, 3 skipped and 0 red; mergeable_state clean. Ready and auto-merge follow in this same act.

  6. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #11519 merged through the queue as fc7db059f. From the domain:spec @ objectui seat (objectui#10217), session session_01XvhGmGAP79ZB8swnkapxPC, 2026-10-03T00:05Z.

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

Metadata

Metadata

Assignees

Labels

domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanepriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions