Repository navigation
docs(changesets): say what objectui check does with a bare document in three pending changesets, and name objectui validate for the verdict (objectui#10606) - #10642
Conversation
…recognises; name `objectui validate` for the verdict
Three pending changesets said `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, and a root with no
structural key that does not validate and whose type is off the
known-type list is counted as skipped, exit 0. Each sentence is
corrected in the dated-note form, frontmatter byte-identical, and
names `objectui validate` for the verdict. No change to `check`.
Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
Co-authored-by: Claude <noreply@anthropic.com>
…list for a bare document
A bare `{ "type": "view:map" }` is listed in `check`'s did-not-validate
advisory list, so "`objectui check` does not flag it" was false. The
sentence now scopes the claim to the unknown-type warning in a file
`check` recognises and says what a bare document gets instead.
Frontmatter byte-identical.
Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgments
② Semver levelNo released source changed; Title misdescribes the change. It says "scope three ③ Boundary flags
Implemented-by: VERDICT: FAIL Two wording items stop landing, both with exact replacement text above: (1) Generated by Claude Code |
…, not "that list" "because `view:map` is on that list" followed the advisory did-not-validate list and could be read as naming it. It means the known-type list `check` reads, and now says so. Frontmatter byte-identical. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgmentsDiff Rewritten bullet, sentence by sentence, checked at source and measured with the CLI built from the head in a scratch worktree (removed afterwards):
Landing title ( Landing body ( ② Semver levelNone owed by this PR: changeset prose only, no package source touched, ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
objectui check sentences to files it recognises; name objectui validate for the verdict (objectui#10606)objectui check does with a bare document in three pending changesets, and name objectui validate for the verdict (objectui#10606)
|
CI note from the
Generated by Claude Code |
Bring in main at bc97f92, which carries the objectui#10645 fix (PR objectui#10677), so CI runs against the fixed base. No other change. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
Fixes #10606
Clause-②: no
Release text only. Three pending changesets told an author that
objectui checkreports a bare retired type key as unknown:{ "type": "line-chart" }(8760),{ "type": "view:dashboard" }(9533) and baremap(10393).checkprints that warning only for a file it recognises. A root with no structural key that does not validate, and whosetypeis off the known-type listcheckreads, 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 namesobjectui validatefor the verdict.checkitself is unchanged: whether it should parse the files it admits is objectui#6318's open question.The house wording is PR objectui#10523's:
checkchecks thetypeof 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 roottypeis on the known-type list and the document does not validate, and is otherwise counted as skipped.checkexits non-zero on unreadable JSON only.What changed
.changeset/8760-unfulfilled-chart-stubs.mdobjectui checkreportsUnknown schema type "line-chart". It now saysobjectui validaterefuses the document attype(invalid_union). A new⚠️ **Dated note, 2026-09-25 — … — objectui#10606.**records the correction and says whatcheckdoes with the bare document and with a structural one..changeset/9533-dashboard-bare-key-converge-plugin-namespace.mdcheckreports{ "type": "view:dashboard" }as unknown. It namesobjectui validateinstead. In What changed, "objectui checknames 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@object-ui/clibullet's "so the check now flags it" becomes "so the check now reportsmapas an unknown schema type in a file it recognises". A dated note follows the bullet list and namesobjectui validatefor the verdict. Round 2: the same bullet'sview:mapclause, "andobjectui checkdoes not flag it", now sayscheckdoes not reportview:mapas an unknown schema type in a file it recognises, and that a bare{ "type": "view:map" }is listed incheck's advisory did-not-validate list instead.Front matter md5 before (at base
5add18a67) and after, per file, identical:8760-unfulfilled-chart-stubs.md24d9e155a9fe760e502862226ced2ba39533-dashboard-bare-key-converge-plugin-namespace.md04b5781f09530b1c4efda2273bc5a87a10393-retire-bare-map-key.md02a248bf14464234d9665bad2c91931bThe 10393 md5 is the same again at the round-2 head
7467d4e39.check-changeset-overwriteprints the same declared-at-base / declares-now pair for all three files (quoted under Gates).Measurement on base
5add18a67I built the CLI with
pnpm --workspace-concurrency=2 --filter "@object-ui/cli..." buildunder the verify lock (VERDICT command-exit 0). Each probe document sat alone in its own directory, andcheckran with that directory ascwd.objectui checkover its directoryobjectui 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.Path: type,Code: invalid_union,No arm accepts type "line-chart".{ "type": "line-chart", "className": "h-64" }⚠️ Unknown schema type "line-chart" in line-chart-structural.json, exit 0{ "type": "view:dashboard" }Skipped 1 file …, exit 0. No unknown-type line.Path: type,Code: invalid_union,No arm accepts type "view:dashboard".{ "type": "view:dashboard", "className": "h-64" }⚠️ Unknown schema type "view:dashboard" in view-dashboard-structural.json, exit 0{ "type": "map" }Skipped 1 file …, exit 0. No unknown-type line.Path: type,Code: invalid_union,No arm accepts type "map".{ "type": "map", "className": "h-64" }⚠️ Unknown schema type "map" in map-structural.json, exit 0validaterefuses all three bare documents attype. It does not name a replacement spelling. Its "Nearest … accepted types" hint listschartforline-chartanddashboardforview:dashboard, and nothing close toobject-mapformap. So the corrected sentences say only thatvalidaterefuses the document attype(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 7dc08a3e7 Xexits 0 for X =6a4680b57(8760),e356c39ee(9533) and64563a915(10393).7dc08a3e7is 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 commitscheck.tshas theOBJECTUI_STRUCTURAL_KEYS.some((key) => key in content) ||recogniser and theskipped++branch. So I followed #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
checknear a diagnosticSweeps, run against
origin/main, with both the file list and the contents read from that ref:git grep -n -E "objectui check|\bcheck\b.*(reports|flags|refuses|Unknown schema type)" origin/main -- .changeset.objectui check, backtickedcheck,the check,check command) together withunknown,flag,warn,report,names it,blessorunrecognised. It matched 25 paragraphs. I re-ran it at main98b1a7cacafter fetching, and it matched the same 25.git grep -i -E "unknown schema type|unknown-type|as unknown|flags? (it|them|the|a|bare)"over.changeset/at main98b1a7cac.The test for each hit: does it promise a
checkdiagnostic on a document with no structural root key? Every hit I read, with its verdict:8760Breaking paragraph9533Breaking paragraph, and "names it rather than blessing it" in What changed10393@object-ui/clibullet, "so the check now flags it"10393same bullet,view:map"objectui checkdoes not flag it"{ "type": "view:map" }is flagged by name in the advisory did-not-validate list, so the absence claim was false.8802"objectui checkwill NOT flag either namespaced spelling"unknown-component-type-case-suggestion-5247"objectui checkreportsUnknown schema type "Page" in FILE — did you mean "page"?"FILEstands for the angle-bracket placeholder the entry prints, which GitHub deletes from a body.)9641(four paragraphs: "Stopobjectui checkreporting five real page types as unknown", and so on)check-schema-positive-marker-and-skip-count(two paragraphs),6075,7004,60748499"Downstream.objectui checkstops reporting these documents",7113(chart: 2census),6939("counts four for this row")6051,8344,7546check/validatecallsafeValidateSchema, which is true of the validity arm.7694,10478,6475,8466,8505,8572,9239,9511,9559,9746,10524objectui#10524dated notes). None of them promises the unknown-type warning on a bare document.63206143,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-repeatcheck*script, a gate or the plain word.So no H4 hit beyond the three named files.
Gates at head
c9ef2ce5dThe diff touches only
.changeset/*.md. No workspace package changed, so there is no dependency-closure build and no packagetype-checkor test run to owe. The CLI build above was for the measurement only. The families below come from objectui's ownpackage.jsonand.github/workflows/:changeset-guard.yml(no-major, overwrite),changeset-presence.yml(presence, claims),ci.yml(fixed),control-bytes.yml,line-citation-gate.yml, and thecheck:*scripts that read.changeset/**.node scripts/check-changeset-presence.mjs✅ No source or published contract of a released package changed in this range, so no changeset is owed.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.node scripts/check-changeset-no-major.mjs✅ No changeset declares a `major` bump.node 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 3 body(ies) is either not negated …and✅ No pending changeset names a file this change touches.pnpm check:new-line-citationsVERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0pnpm check:control-bytes✅ check-control-bytes: OK (scanned 8726 tracked text file(s); skipped 85 binary).pnpm check:pending-changeset-literals✅ No test source names a pending changeset.pnpm check:installed-pin-claimsOKpnpm check:vi-mock-override-shape✅ check-vi-mock-override-shape: OK …node scripts/markdown-test-inputs.mjs --changed(the three paths).changeset/**input class ofcheck-changeset-no-major.test.tsanddollar-dialect-alias-census.test.tsThe 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.tsunder 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 at98b1a7cac) exits 0. Main has not changed any of the three files since base.H5: overwrite gate route. #10595 cleared
check-changeset-overwriteas report-only (its PR body quotes the same⚠️ This change touches 11 changeset(s) it did not addline, exit 0). No allow-list, no trailer and no gate label was involved.changeset-guard.ymlruns the script withoutOS_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
7467d4e39The contract review of
c9ef2ce5dfound one false sentence, and measured it. In10393, theview:mapclause "andobjectui checkdoes 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:, thenview-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: "andobjectui checkdoes not report it as an unknown schema type in a file it recognises. A bare{ "type": "view:map" }with no structural key is listed incheck's advisory did-not-validate list instead, becauseview:mapis on the known-type list andAnyComponentSchemahas no arm for it; that line does not say the node renders a placeholder. Search documents forview:mapdirectly."packages/types/src/has noview:mapliteral (positive control:object-maphas 3 hits inzod/objectql.zod.ts). The file's dated note already says a non-validating file is listed by name when itstypeis on the known-type list, so it agrees with the new clause and is unchanged. Front matter md502a248bf14464234d9665bad2c91931bat5add18a67,c9ef2ce5d,7467d4e39and3f0f8eca3.Round 3, head
3f0f8eca3: "becauseview:mapis on that list" became "becauseview:mapis 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-majorandcheck-control-bytesprint the same verdict lines as in the table below, each with exit 0.git merge-tree --write-tree HEAD origin/main(main atf99f9cde7) exits 0.7467d4e39node scripts/check-changeset-presence.mjs✅ No source or published contract of a released package changed in this range, so no changeset is owed.node scripts/check-changeset-no-major.mjs✅ No changeset declares a `major` bump.node scripts/check-control-bytes.mjs✅ check-control-bytes: OK (scanned 8726 tracked text file(s); skipped 85 binary)..changeset/**-reading tests, under the verify lockTest Files 2 passed (2),Tests 44 passed (44),VERDICT command-exit 0git merge-tree --write-tree HEAD origin/main(main at4a3d500fd) exits 0. Main has not changed any of the three files since base.Acceptance notes
These are not filed.
known-schema-types.tshas the literal at6a4680b57^,e356c39ee^and64563a915^), andpackages/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:uiseat 2, sessionhttps://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN.Generated by Claude Code