Repository navigation
fix(cli,types): say what objectui check does; name objectui validate for the verdict (objectui#10524) - #10595
Conversation
…te` for the verdict `check`'s help line read "Validate schema files", and the `ChatbotSchema.body` tombstone docblock named `objectui check` beside `objectui validate` as a root parse that refuses the key. `check` is an advisory sweep: a file whose root carries a structural key (`body` is one) is recognised by that key and never parsed, and only unreadable JSON exits non-zero. Both texts now say so and point at `objectui validate`. The two `SemanticElementSchema` docblocks that said `objectui check` refused a document now name `objectui validate`. Ten pending changesets that named `check` as delivering a refusal are reconciled with a dated note; their front matter is unchanged. A pin in `cli-bin.test.ts` keeps `check --help` from leading with "validate" and requires it to name `objectui validate`. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
…at `check` does
The 8505 entry named `os-ui validate` / `check` as the JSON authoring face
that now refuses `{ xxl: 6 }`. The command is `objectui validate`, and
`check` refuses nothing on validation. Front matter unchanged; a dated note
records the correction.
Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
Co-authored-by: Claude <noreply@anthropic.com>
|
changeset-claim-re-read
|
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: ① Derived judgmentsRefs. The help line. True of
The 11 pending changesets. Frontmatter md5 base vs head identical 11/11 (10 =
Missed hits (owed).
The dev's out-of-scope finding. Verified from source, no probe (checkout has no ② Semver level
③ Boundary flags
Implemented-by: VERDICT: FAIL Exactly what stops it: three remaining Generated by Claude Code |
…alidate`/`check` refuses Three comments in `@object-ui/types` said a refusal reaches the CLI's `validate` / `check`: the `ObjectGanttSchema.gantt` comment on the interface and on its zod mirror, and the `ObjectCalendarSchema` `sort` comment on the zod mirror (which ships in `dist/zod/objectql.zod.js`). `check` refuses nothing on validation, so each now names `validate` alone. Comment lines only. The new changeset now says `check` skips the parse against the schema, not the parse, and names these three comments. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: ① Derived judgmentsRefs. FAIL item, missed hits: fixed.
The tightened changeset. Frontmatter md5 The 11 dated notes, "never parses". Judged FALSE, not shorthand. Nothing regressed. The delta touches nothing round 1 passed: Landing body claims. Reproduced: ② Semver level
③ Boundary flags
Implemented-by: VERDICT: FAIL Exactly what stops it, both text-only and both in files this PR already edits: (1) Generated by Claude Code |
…not the JSON parse `check` reads every `.json` through `parseJsonc`, and unreadable JSON still fails the run even when the root carries a structural key. What it skips is the parse against the schema. The 11 dated notes now say "never parses against the schema". The new changeset's headline counts six comment sites, not five. Front matter is unchanged in all 12 files. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: ① Derived judgmentsRefs. Delta scope: changeset text only. Item 1, "six": true. The new changeset's headline now reads " Item 2, "against the schema": all 11 fixed. Every dated note's changed line now carries the tightened form: 10478:40, 6475:41, 7694:38, 8466:53, 8499:20, 8505:52, 9239:17, 9511:88, 9559:16 and 9746:20 say "it never parses against the schema a file whose root carries a structural key", and 8572:81 says " Landing body, hunted again; no sentence false at head. Reproduced: the "changed" rows ( ② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
… in three pending changesets, and name `objectui validate` for the verdict (objectui#10606) (objectstack-ai#10642) Fixes objectstack-ai#10606 Clause-②: no Release text only. Three pending changesets told an author that `objectui check` reports a bare retired type key as unknown: `{ "type": "line-chart" }` (8760), `{ "type": "view:dashboard" }` (9533) and bare `map` (10393). `check` prints that warning only for a file it recognises. A root with no structural key that does not validate, and whose `type` is off the known-type list `check` reads, is counted as skipped, and the run exits 0. Each sentence is corrected in the objectui#10533 dated-note form, with the front matter byte-identical, and names `objectui validate` for the verdict. `check` itself is unchanged: whether it should parse the files it admits is objectui#6318's open question. The house wording is PR objectui#10523's: `check` checks the `type` of each file it recognises, and a file whose root carries an ObjectUI structural key (`children`, `className`, `body`, …) is recognised by that key alone. A file with none of those keys is parsed against the schema. It is listed by name when its root `type` is on the known-type list and the document does not validate, and is otherwise counted as skipped. `check` exits non-zero on unreadable JSON only. ## What changed | file | change | | --- | --- | | `.changeset/8760-unfulfilled-chart-stubs.md` | The **Breaking** paragraph no longer says `objectui check` reports `Unknown schema type "line-chart"`. It now says `objectui validate` refuses the document at `type` (`invalid_union`). A new `⚠️ **Dated note, 2026-09-25 — … — objectui#10606.**` records the correction and says what `check` does with the bare document and with a structural one. | | `.changeset/9533-dashboard-bare-key-converge-plugin-namespace.md` | The **Breaking for authored metadata** paragraph no longer says `check` reports `{ "type": "view:dashboard" }` as unknown. It names `objectui validate` instead. In **What changed**, "`objectui check` names it rather than blessing it" is scoped to "names it in a file it recognises". One dated note, after the first paragraph, covers both sentences. | | `.changeset/10393-retire-bare-map-key.md` | The `@object-ui/cli` bullet's "so the check now flags it" becomes "so the check now reports `map` as an unknown schema type in a file it recognises". A dated note follows the bullet list and names `objectui validate` for the verdict. Round 2: the same bullet's `view:map` clause, "and `objectui check` does not flag it", now says `check` does not report `view:map` as an unknown schema type in a file it recognises, and that a bare `{ "type": "view:map" }` is listed in `check`'s advisory did-not-validate list instead. | Front matter md5 before (at base `5add18a67`) and after, per file, identical: | file | md5 of the front matter block | | --- | --- | | `8760-unfulfilled-chart-stubs.md` | `24d9e155a9fe760e502862226ced2ba3` | | `9533-dashboard-bare-key-converge-plugin-namespace.md` | `04b5781f09530b1c4efda2273bc5a87a` | | `10393-retire-bare-map-key.md` | `02a248bf14464234d9665bad2c91931b` | The 10393 md5 is the same again at the round-2 head `7467d4e39`. `check-changeset-overwrite` prints the same declared-at-base / declares-now pair for all three files (quoted under Gates). ## Measurement on base `5add18a67` I built the CLI with `pnpm --workspace-concurrency=2 --filter "@object-ui/cli..." build` under the verify lock (`VERDICT command-exit 0`). Each probe document sat alone in its own directory, and `check` ran with that directory as `cwd`. | document | `objectui check` over its directory | `objectui validate FILE` | | --- | --- | --- | | `{ "type": "line-chart" }` | `Skipped 1 file with a root "type" that no ObjectUI recogniser admitted.`, then `✓ All checks passed`, exit 0. No unknown-type line. | exit 1: `Path: type`, `Code: invalid_union`, `No arm accepts type "line-chart".` | | control `{ "type": "line-chart", "className": "h-64" }` | `⚠️ Unknown schema type "line-chart" in line-chart-structural.json`, exit 0 | exit 1, same error | | `{ "type": "view:dashboard" }` | `Skipped 1 file …`, exit 0. No unknown-type line. | exit 1: `Path: type`, `Code: invalid_union`, `No arm accepts type "view:dashboard".` | | control `{ "type": "view:dashboard", "className": "h-64" }` | `⚠️ Unknown schema type "view:dashboard" in view-dashboard-structural.json`, exit 0 | exit 1, same error | | `{ "type": "map" }` | `Skipped 1 file …`, exit 0. No unknown-type line. | exit 1: `Path: type`, `Code: invalid_union`, `No arm accepts type "map".` | | control `{ "type": "map", "className": "h-64" }` | `⚠️ Unknown schema type "map" in map-structural.json`, exit 0 | exit 1, same error | `validate` refuses all three bare documents at `type`. It does not name a replacement spelling. Its "Nearest … accepted types" hint lists `chart` for `line-chart` and `dashboard` for `view:dashboard`, and nothing close to `object-map` for `map`. So the corrected sentences say only that `validate` refuses the document at `type` (`invalid_union`) and exits non-zero. ## Why "corrected", not "at this change" None of the three sentences was ever true of the bare document it quotes. The recognition gate landed before all three changes: `git merge-base --is-ancestor 7dc08a3 X` exits 0 for X = `6a4680b57` (8760), `e356c39ee` (9533) and `64563a915` (10393). `7dc08a3e7` is the validity-recogniser commit (objectui#6322), and it sits on top of the marker gate. Exit 0 is self-proving, so no control leg is needed; the checkout is not shallow. At each of those commits `check.ts` has the `OBJECTUI_STRUCTURAL_KEYS.some((key) => key in content) ||` recogniser and the `skipped++` branch. So I followed objectstack-ai#10595's route for sentences that were never true: the sentence is corrected, and the dated note records the correction. The objectui#10533 "at this change" scoping would have asserted a false history. ## H4: other pending changesets that name `check` near a diagnostic Sweeps, run against `origin/main`, with both the file list and the contents read from that ref: 1. The dispatch grep `git grep -n -E "objectui check|\bcheck\b.*(reports|flags|refuses|Unknown schema type)" origin/main -- .changeset`. 2. A paragraph-level node scan across line breaks: a paragraph that names the CLI (`objectui check`, backticked `check`, `the check`, `check command`) together with `unknown`, `flag`, `warn`, `report`, `names it`, `bless` or `unrecognised`. It matched 25 paragraphs. I re-ran it at main `98b1a7cac` after fetching, and it matched the same 25. 3. `git grep -i -E "unknown schema type|unknown-type|as unknown|flags? (it|them|the|a|bare)"` over `.changeset/` at main `98b1a7cac`. The test for each hit: does it promise a `check` diagnostic on a document with no structural root key? Every hit I read, with its verdict: | hit | verdict | | --- | --- | | `8760` **Breaking** paragraph | changed (above) | | `9533` **Breaking** paragraph, and "names it rather than blessing it" in **What changed** | changed (above) | | `10393` `@object-ui/cli` bullet, "so the check now flags it" | changed (above) | | `10393` same bullet, `view:map` "`objectui check` does not flag it" | changed in round 2. A bare `{ "type": "view:map" }` is flagged by name in the advisory did-not-validate list, so the absence claim was false. | | `8802` "`objectui check` will NOT flag either namespaced spelling" | stands. It claims an absence and promises no diagnostic. | | `unknown-component-type-case-suggestion-5247` "`objectui check` reports `Unknown schema type "Page" in FILE — did you mean "page"?`" | stands. It gives the text of the warning, framed as "both surfaces that report the miss", and quotes no document. (Here `FILE` stands for the angle-bracket placeholder the entry prints, which GitHub deletes from a body.) | | `9641` (four paragraphs: "Stop `objectui check` reporting five real page types as unknown", and so on) | stands. It describes a false positive being removed and promises no diagnostic. | | `check-schema-positive-marker-and-skip-count` (two paragraphs), `6075`, `7004`, `6074` | stand. They describe the marker gate, the validity recogniser and the skip count themselves. | | `8499` "**Downstream.** `objectui check` stops reporting these documents", `7113` (`chart: 2` census), `6939` ("counts four for this row") | stand. They are about the advisory list; objectstack-ai#10595 read them the same way. | | `6051`, `8344`, `7546` | stand. They say `check` / `validate` call `safeValidateSchema`, which is true of the validity arm. | | `7694`, `10478`, `6475`, `8466`, `8505`, `8572`, `9239`, `9511`, `9559`, `9746`, `10524` | objectstack-ai#10595 already reconciled these (the validation-verdict family, `objectui#10524` dated notes). None of them promises the unknown-type warning on a bare document. | | `6320` | stands. It is about the glob ignore list. | | `6143`, `6296`, `6426`, `6559`, `6577`, `7122`, `7282`, `7804`, `8557`, `9126`, `9497`, `9653`, `9659`, `9743`, `9922`, `curly-hoops-attack`, `issue-5709-…`, `nine-holdouts-six-narrow`, `tidy-pumas-repeat` | not the CLI. They name another `check*` script, a gate or the plain word. | So no H4 hit beyond the three named files. ## Gates at head `c9ef2ce5d` The diff touches only `.changeset/*.md`. No workspace package changed, so there is no dependency-closure build and no package `type-check` or test run to owe. The CLI build above was for the measurement only. The families below come from objectui's own `package.json` and `.github/workflows/`: `changeset-guard.yml` (no-major, overwrite), `changeset-presence.yml` (presence, claims), `ci.yml` (fixed), `control-bytes.yml`, `line-citation-gate.yml`, and the `check:*` scripts that read `.changeset/**`. | gate | verdict line | exit | | --- | --- | --- | | `node scripts/check-changeset-presence.mjs` | `✅ No source or published contract of a released package changed in this range, so no changeset is owed.` | 0 | | `node scripts/check-changeset-overwrite.mjs` (report-only) | `⚠️ This change touches 3 changeset(s) it did not add`. For all 3 files the declared-at-base line equals the declares-now line. | 0 | | `node scripts/check-changeset-no-major.mjs` | ``✅ No changeset declares a `major` bump.`` | 0 | | `node scripts/check-changeset-fixed.mjs` | `✅ All workspace packages are in the changeset fixed group.` | 0 | | `node scripts/check-changeset-claims.mjs` (report-only) | `✅ Every package declared across those 3 body(ies) is either not negated …` and `✅ No pending changeset names a file this change touches.` | 0 | | `pnpm check:new-line-citations` | `VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0` | 0 | | `pnpm check:control-bytes` | `✅ check-control-bytes: OK (scanned 8726 tracked text file(s); skipped 85 binary).` | 0 | | `pnpm check:pending-changeset-literals` | `✅ No test source names a pending changeset.` | 0 | | `pnpm check:installed-pin-claims` | `OK` | 0 | | `pnpm check:vi-mock-override-shape` | `✅ check-vi-mock-override-shape: OK …` | 0 | | `node scripts/markdown-test-inputs.mjs --changed` (the three paths) | lists all three: they fall under the `.changeset/**` input class of `check-changeset-no-major.test.ts` and `dollar-dialect-alias-census.test.ts` | 0 | The two tests that read `.changeset/**`, `pnpm exec vitest run --maxWorkers=2 scripts/__tests__/check-changeset-no-major.test.ts scripts/__tests__/dollar-dialect-alias-census.test.ts` under the verify lock: `Test Files 2 passed (2)`, `Tests 44 passed (44)`, `VERDICT command-exit 0`. `git merge-tree --write-tree HEAD origin/main` (main at `98b1a7cac`) exits 0. Main has not changed any of the three files since base. H5: overwrite gate route. objectstack-ai#10595 cleared `check-changeset-overwrite` as report-only (its PR body quotes the same `⚠️ This change touches 11 changeset(s) it did not add` line, exit 0). No allow-list, no trailer and no gate label was involved. `changeset-guard.yml` runs the script without `OS_CHANGESET_OVERWRITE_ENFORCE`. This PR takes the same route: case 2 of the script's own text, "prose that no longer matches the change". No pin is owed: this PR changes changeset prose only. ## Round 2, head `7467d4e39` The contract review of `c9ef2ce5d` found one false sentence, and measured it. In `10393`, the `view:map` clause "and `objectui check` does not flag it" was false for a bare document. `{ "type": "view:map" }` prints the advisory header `⚠️ 1 file carries a registered ObjectUI component type but did not validate as an ObjectUI schema:`, then `view-map.json (type "view:map")` on the next line, exit 0. With `"className": "h-64"` it prints nothing. The clause now reads, rewrapped to the file's width: "and `objectui check` does not report it as an unknown schema type in a file it recognises. A bare `{ "type": "view:map" }` with no structural key is listed in `check`'s advisory did-not-validate list instead, because `view:map` is on the known-type list and `AnyComponentSchema` has no arm for it; that line does not say the node renders a placeholder. Search documents for `view:map` directly." `packages/types/src/` has no `view:map` literal (positive control: `object-map` has 3 hits in `zod/objectql.zod.ts`). The file's dated note already says a non-validating file is listed by name when its `type` is on the known-type list, so it agrees with the new clause and is unchanged. Front matter md5 `02a248bf14464234d9665bad2c91931b` at `5add18a67`, `c9ef2ce5d`, `7467d4e39` and `3f0f8eca3`. Round 3, head `3f0f8eca3`: "because `view:map` is on that list" became "because `view:map` is on the known-type list". "That list" followed the advisory did-not-validate list and could be read as naming it. No other byte changed. At that head, `check-changeset-presence`, `check-changeset-no-major` and `check-control-bytes` print the same verdict lines as in the table below, each with exit 0. `git merge-tree --write-tree HEAD origin/main` (main at `f99f9cde7`) exits 0. | gate at `7467d4e39` | verdict line | exit | | --- | --- | --- | | `node scripts/check-changeset-presence.mjs` | `✅ No source or published contract of a released package changed in this range, so no changeset is owed.` | 0 | | `node scripts/check-changeset-no-major.mjs` | ``✅ No changeset declares a `major` bump.`` | 0 | | `node scripts/check-control-bytes.mjs` | `✅ check-control-bytes: OK (scanned 8726 tracked text file(s); skipped 85 binary).` | 0 | | the two `.changeset/**`-reading tests, under the verify lock | `Test Files 2 passed (2)`, `Tests 44 passed (44)`, `VERDICT command-exit 0` | 0 | `git merge-tree --write-tree HEAD origin/main` (main at `4a3d500fd`) exits 0. Main has not changed any of the three files since base. ## Acceptance notes These are not filed. - This one is read from source and not measured. At each change's parent, the retired key was on the CLI's known-type list (`known-schema-types.ts` has the literal at `6a4680b57^`, `e356c39ee^` and `64563a915^`), and `packages/types/src/zod/` has no literal for it. So the same bare document was then most likely listed in the advisory "did not validate" list, and the retirement moved it into the silent skipped count. That bears on objectui#6318's open question and is not acted on here. Written by the dispatched dev for the `domain:ui` seat 2, session `https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN`. --- _Generated by [Claude Code](https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
Fixes #10524
Clause-②: no
Wording only, on published text: a help string in
@object-ui/cliand six comments in five@object-ui/typesfiles. No export, type, schema or accept set moves.checkitself is unchanged: objectui#6318 recorded its behaviour as deliberate, and whether it should parse the files it admits is that card's open question, not this one.The house wording is the one PR objectui#10523 used for the two docs pages:
checksweeps a project's JSON files and recognises a file whose root carries a structural key (children,className,body, …) by that key alone, without parsing it against the schema (it is still read as JSON). Only a file with none of those keys is parsed against the schema. It is listed by name when its roottypenames a registered component but the document does not validate, and that list is advisory:checkexits non-zero on unreadable JSON only. The verdict isobjectui validate's.What changed
packages/cli/src/cli.tscheckcommand's description changes from "Validate schema files" to "Advisory JSON file sweep; run objectui validate for a verdict" (61 characters; the longest sibling description has 57). The line count does not change.packages/types/src/complex.tsChatbotSchema.bodytombstone docblock, the root-parse parenthetical now names onlyobjectui validate. A new sentence sayscheckdoes not deliver the refusal:bodyis a structural root key, andchecknever parses a file it recognised that way against the schema. One line changed and three added.body?: neverand every other line are byte-identical.packages/types/src/layout.tsSemanticElementSchemadocblock said the document "was refused byobjectui check". It now saysobjectui validate, whose refusal it was. One word changed.packages/types/src/zod/layout.zod.tsobjectui check… stop trusting the validator") now namesobjectui validate. One word changed.packages/cli/src/__tests__/cli-bin.test.tscheck --helpmust not lead with the verb "validate", and it must nameobjectui validate. Both are red on the base and green at the head (evidence below).packages/types/src/zod/objectql.zod.tsObjectGanttSchema.ganttcomment ("reaches the CLI'svalidate/check… refused at authoring time") and theObjectCalendarSchemasortcomment ("reaches the CLI'svalidate/check—sort: 'name asc'…") now namevalidatealone. These are//comments, and they ship indist/zod/objectql.zod.js. Two lines changed;git diff -wshows no code line.packages/types/src/objectql.ts.changeset/6475. TheObjectGanttSchema.ganttcomment ("therefore the CLI'svalidate/checkcommands") now reads "the CLI'svalidatecommand". One comment line changed, and it is source-only (a//comment on an interface member is dropped from.d.ts). The seat decided to fix it here; this seat's other PRs edit this file far from this line..changeset/10524-check-promise-text.md'@object-ui/cli': patch,'@object-ui/types': patch. The rework rounds tightened it:checkskips the parse against the schema, not the JSON parse; it names the three objectql comments; and its headline counts six comment sites..changeset/*.mdMeasurement on the base
6ea68e63eThe CLI's dependency closure was built with
pnpm --workspace-concurrency=2 --filter "@object-ui/cli..." build.objectui --helplistedcheck Validate schema files, andobjectui check --helpprintedValidate schema files.Probe documents, one directory each:
objectui validateobjectui checkover its directory{ "type": "chatbot", "messages": [], "body": { "tenant": "acme" } }REFUSED (objectui#8572, ADR-0049),Path: body✓ All checks passed.{ "type": "chatbot", "messages": "not-an-array" }(control, no structural key)carries a registered ObjectUI component type but did not validate.So the card's premise holds at the base.
checkadmitschatbot-body.jsonby itsbodykey and never parses it against the schema. Incheck's own output,objectui validate FILEstands for the angle-bracket placeholder the CLI prints, because GitHub's body sanitizer deletes that shape.H5: the pin is red on the base and green at the head
I committed the fix first (
dbbd2506e). For the base leg,scripts/ablation-replace.mjs(from the objectstack checkout, in wrap mode, with atrap … EXIT INT TERMrestore as a second guard) put the base description back intocli.ts. It reported anchorx1 -> x0, replacementx0 -> x1and blob3b73365ae916 -> 165ca5b82c62. Then the leg rebuilt@object-ui/cliand greppeddist/cli.js: new text 0 hits, base text 1 hit.Tests 2 failed | 38 passed (40). The failures wereexpected 'Validate schema files' not to match /^\s*validates?\b/iandexpected 'Validate schema files' to contain 'objectui validate'.3b73365ae916andgit diff HEADis empty. After a rebuild,dist/cli.jshas 1 hit for the new text and 0 for the base text.Test Files 1 passed (1),Tests 40 passed (40), and bothcheck --help does not present ... (objectui#10524)cases pass.git status --porcelainshows 0 lines.The JSDoc edits carry no pin. They are comments, and I checked them in the built output instead:
dist/complex.d.tshas 1 hit for "objectui checkdoes not deliver it",dist/layout.d.tshas 1 for "refused byobjectui validate",dist/zod/layout.zod.d.tshas 1 for "REFUSED byobjectui validate", and the two layout files have 0 remaining hits forobjectui check. After the rework round,dist/zod/objectql.zod.jshas 0 hits forvalidate/checkin either spelling. Its positive control, "reaches the CLI'svalidate—sort: 'name asc'", has 1 hit.H4: pending changesets that name
checkI read every paragraph in
.changeset/that namescheck: the literal "objectui check", pluscheckin backticks and mentions wrapped across a line break. The test I applied: does the sentence tell an author thatcheckgives a verdict (refuses, fails, delivers the refusal)? A sentence that only sayscheckcallssafeValidateSchemaor answers green is true, so it stands.Reconciled (11). Each file now names
objectui validatefor the verdict and gains a⚠️ **Dated note, 2026-09-25 — … — objectui#10524.**saying whatcheckdoes. Round 3 tightened every note:check"never parses against the schema" a file whose root carries a structural key, because it still reads that file as JSON and fails the run when the JSON is unreadable. Front matter is byte-identical in all 12 changesets this PR touches:10478-filter-condition-value-protocol-rule.md: "now failssafeValidateSchema,objectui checkandobjectui validate". Its "answered green" sentence stays true ofcheck, and the note says so.6475-gantt-block-face-declared.md: the heading's "validate/check time" and "the CLI'svalidateandcheckcommands … refused, naming the missing field".7694-chart-series-chart-type-alias-refusal.md: "Authors meet it … through the CLI'sobjectui checkandobjectui validatecommands". Because this file was touched anyway, its five cross-filepath:linecitations became file names (AGENTS.md [WIP] Update documentation for project #11). The "Before" bullet stands.8466-calendar-color-allday-fields.md: "refused … throughsafeValidateSchema, the path the CLI'svalidate/checktake".8499-node-slot-registered-arms.md: "renders correctly in the browser and is refused byobjectui check". Its "Downstream" paragraph is about the advisory list and stands.8505-grid-columns-breakpoint-narrowing.md: "the JSON authoring face —os-ui validate/check… now refuses{ xxl: 6 }". The command's name is also corrected toobjectui validatein the same clause.8572-chatbot-body-retired.md: "(tsc,objectui validate,objectui check, …)". This is the changeset twin of the H2 docblock.9239-object-calendar-data-array-arm.md: "reached bysafeValidateSchemaand so by the CLI'svalidate/check… refused AT the key".9511-record-id-is-a-string.md: its "Delivery surface" paragraph listedobjectui checkon the parse-time side.9559-filter-operator-schema-protocol-set.md: "(andobjectui check/objectui validate) refused filters".9746-render-path-not-a-validation-door.md(empty front matter): "the three doors that do validate (…;objectui validate/objectui check; …)". Here the objectui#10533 "at this change" scoping is used, because the section did say that at that change. The note records the later correction by objectui#10416.A deviation from H4 as dispatched: for the other ten I did not use "at this change" scoping. Those sentences were never true of
check, so scoping them would assert a false history. The sentence is corrected instead, and the dated note records the correction.Read, and left as they are. Each of these is either true of
checkor is not a verdict claim:6074: "judges, skips and prints exactly what it did before".6075: recognition by validation, and the advisory report.6320: the glob ignore list.7004:.successused as a boolean recogniser.7113("thechart: 2entry inobjectui check's 28-file census") and6939("objectui checkcounts four for this row"): both are counts of the advisory list. In the filter-builder case, the four leaf fixtures carry no structural key andsearch-interface.jsoncarrieschildrenandclassName, so the count is right.6051,7664,8344:checkcallssafeValidateSchema. That is true of the validity arm, and none of these three attributes a refusal tocheck.8516:check"was passing documentstscrejects", which is true.8802("will NOT flag either namespaced spelling"),9641andunknown-component-type-case-suggestion-5247: they describe the unknown-type warning for recognised files.check-schema-positive-marker-and-skip-count: the marker gate.6724:ctx.checkis the permissions API, not the CLI.10393,8760,9533: these describe the unknown-type warning, not a validation verdict, so H4 does not cover them. Their bare-document examples are the finding below.Other places that make the same promise (H3), swept again in the rework round
The first sweep of package sources used only the literal
objectui check, so it missed three sentences written as the CLI'svalidate/check. The rework sweep ran overpackages/cliandpackages/typessources, excluding tests and CHANGELOGs, with three passes:git grepfor the literalobjectui check, backtickedcheck,/ check,check command(s)and'check'.git grepforcheckwithin 40 characters ofvalidate,CLIorrefus.validate/checkpairs wrapped over a comment line, andCLI's … check.On the head, pass 3 has 0 hits. Its positive control is the pre-fix blobs of
objectql.zod.tsandobjectql.ts, which give 2 and 1 hits. Every hit I read, with its verdict:zod/objectql.zod.ts, theObjectGanttSchema.ganttcomment ("validate/check… refused at authoring time")validatealonezod/objectql.zod.ts, theObjectCalendarSchemasortcomment ("validate/check—sort: 'name asc'… refused at authoring time")validatealoneobjectql.ts, theObjectGanttSchema.ganttcomment ("the CLI'svalidate/checkcommands … refused at authoring time")validatealonecomplex.ts, theChatbotSchema.bodydocblockobjectui checkdoes not deliver it")layout.tsandzod/layout.zod.ts, theSemanticElementSchemadocblocksdata-display.tsBarChartSchema("objectui checkreports it as unrecognised") andzod/data-display.zod.ts("could only report it")form.tsCodeEditorSchema("the validatorobjectui validateandobjectui checkread")checkreadsAnyComponentSchemaas its recogniserstrict-authoring-face.ts(wiringobjectui check"is ruled to come after")zod/complex.zod.ts(safeValidateSchema,objectui checkandobjectui validate"answered green")check; the file is held by another seat and not touchedpackages/cli/README.md, the heading "objectui check,objectui doctor, …"objectui --helppackages/cli/src/cli.ts,.command('check')check.ts: "objectui checkjudged every roottype", "the reasoncheckreports a third bucket", "theobjectui checkcommand passes", "objectui checkexited 1 in any TypeScript project"cwdparameter, and the JSONC parse arm, all trueknown-schema-types.ts("objectui checkuses it", "reports an unrecognised type as a warning and never fails the run")known-type-case-suggestion.ts("Did you mean forobjectui check", "checkstill reportsPageas an unknown schema type", "the suggestion clauseobjectui checkappends")union-arm-diagnostics.ts("a DIFFERENT surface (objectui check)")index.tsname:'check',layout.ts"check,arrow-right",zod/layout.zod.tsicon:'check'(four lines)data-protocol.ts"PRE-CHECK",strict-authoring-face.ts"such a check can only ADD refusals",zod/complex.zod.ts"the type check (id: 42now refuses)",zod/objectql.zod.ts".check()refusingkanban.groupBy" and "Until this check"Gates
Round 3, head
882c5e13e(changeset text only)git diff --stat 1da91cb5e..882c5e13elists 12.changeset/*.mdfiles, 12 insertions and 12 deletions, and nothing else. Front matter md5 is identical before and after for all 12.git merge-tree --write-tree HEAD origin/main(main atab7751321) exits 0 with treedab078939. None of main's moved files is a file this PR touches.node scripts/check-changeset-presence.mjs✅ 7 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s): .changeset/10524-check-promise-text.md.node scripts/check-changeset-overwrite.mjs(report-only)⚠️ This change touches 11 changeset(s) it did not add, with all 11 declared-at-base / declares-now pairs identicalnode scripts/check-changeset-fixed.mjs✅ All workspace packages are in the changeset fixed group.node scripts/check-changeset-claims.mjs(report-only)✅ Every package declared across those 11 body(ies) is either not negated …. It lists 43 pending changesets naming a touched file; none is aboutcheck, the gantt block refusal or the calendarsortclause.node scripts/check-new-cross-file-line-citations.mjsVERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0node scripts/check-control-bytes.mjs✅ check-control-bytes: OK (scanned 8669 tracked text file(s); skipped 85 binary).Package gates, head
1da91cb5e(no package file has changed since)pnpm --filter "@object-ui/cli..." build(closure, under the verify lock)dist/cli.jshas 1 hit for the new text and 0 for the base textpnpm --filter @object-ui/types type-check(tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json)pnpm --filter @object-ui/cli type-check(tsc --noEmit)pnpm exec vitest run packages/types/Test Files 236 passed (236)·Tests 5223 passed (5223)pnpm exec vitest run packages/cli/Test Files 20 passed (20)·Tests 279 passed (279)node scripts/check-changeset-no-major.mjs✅ No changeset declares amajorbump.At that head,
git merge-treeexited 0 against main (a7df45ff1), against PR #10588's head313ca6321, and againstclaude/issue-10518-object-chart-axis-config.Round-1 readings that the rework does not move stand at
bf809e6c5: the red-then-green pin (cli.tsandcli-bin.test.tsare unchanged since then), the lint subset,pnpm check, the installed-pin and pending-literal gates, the disk-reading tests, and the governed-surface guard.Acceptance notes
These are not filed.
checkrefuses or validates: the header ofnode-slot-registered-arms-8499.test.ts, one comment infilter-builder-mirror-6939.test.ts, and the headers offilter-condition-value-protocol-rule-10478.test.tsandchart-data-model-7113.test.ts. Tests are not published, and no assertion depends on those comments.7546-chart-series-keys-declared.mdcountsobjectui checkamong the consumers of the parse output.checkreads only.success, so it loses nothing. That sentence does not claim a verdict.7773-kanban-adapter-groupfield-write.mdnamesos check/os validate, which is not this CLI. It was not measured.8516-8556-mirror-partial-record-narrowing.mdspells the CLI asos-ui validate, and the bin isobjectui. Itscheckclause is true.check.ts, the inline comment "Schema validation: check for ObjectUI schema patterns" is a code comment that ships in no user-facing output. It is outside this file surface.For the seat
layout.ts,zod/layout.zod.ts,objectql.tsandzod/objectql.zod.tsare H3 hits inside@object-ui/types.objectql.tsis here by seat decision. Each edit is confined to its comment lines, away from the lines PR fix(plugin-kanban): delete KanbanEnhanced.tsx, the module no export or barrel reached (objectui#8932) #10588 and the objectui#10518 branch edit.git merge-tree --write-treeof this head against PR fix(plugin-kanban): delete KanbanEnhanced.tsx, the module no export or barrel reached (objectui#8932) #10588's head313ca6321exits 0, and againstclaude/issue-10518-object-chart-axis-configit also exits 0. The claim comment's surface names only thecomplex.tsdocblock, so it needs these four paths appended..changeset/8760-unfulfilled-chart-stubs.mdsays{ "type": "line-chart" }makesobjectui checkreportUnknown schema type "line-chart", and.changeset/9533-dashboard-bare-key-converge-plugin-namespace.mdsays the same for{ "type": "view:dashboard" }. On the base,checkover those exact bare documents printsSkipped 2 files with a root "type" that no ObjectUI recogniser admitted.and exits 0, with no unknown-type line. The control{ "type": "line-chart", "className": "h-64" }prints⚠️ Unknown schema type "line-chart" in line-chart-structural.json.10393-retire-bare-map-key.md's "so the check now flags it" has the same boundary. This is a claim about how far a diagnostic reaches, not a verdict claim, so the contract review graded it a different family with its own card; the seat filed it as objectui#10606. That card can reuse PR objectui#10523's recognition-gate wording.Written by the dispatched dev for the
domain:uiseat 2, sessionhttps://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN.Generated by Claude Code