docs(fields): attribute option description to objectui, not to the spec - #7994
Merged
baozhoutao merged 2 commits intoSep 6, 2026
Merged
Conversation
…spec `content/docs/fields/lookup.mdx` told readers that `SelectOptionMetadata`'s option `description` is "aligned with `@objectstack/spec`'s `SelectOptionSchema.description`". Re-measured today against the installed `@objectstack/spec` 17.2.0, that schema declares exactly `color, default, label, value, visibleWhen` and refuses `description` by name with `unrecognized_keys`; `FieldSchema` routes a field's `options` through it, so the sentence was inviting a write that fails the whole field with a 422. The page now carries the same attribution PR #7510 gave the published JSDoc on `SelectOptionMetadata.description`: an objectui-side read-model extension the spec refuses by name, declared because `LookupField` consumes it, and never to be written into an authored object document. The key itself stays declared and stays consumed. The still-unconsumed `.changeset/6140-field-metadata-rows-option-description.md` carried the same false claim on both keys it declares, scheduled to ship into the CHANGELOG. Corrected in place as a deliberate prose correction, which `scripts/check-changeset-overwrite.mjs` documents as its case 2 and reports without failing; every package name the declaration carried at base is unchanged, so nothing is lost from it. Docs and changeset prose only — no type, schema, export or runtime path moves. Settles objectui#7537. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MM7kaS4dPpYHV5BsMyu4tQ
baozhoutao
marked this pull request as ready for review
September 6, 2026 07:34
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Sep 6, 2026
…note `scripts/__tests__/doc-version-claims.test.ts` refuses a version literal on the surfaces it scans, and the sentence added by the previous commit carried one: "Measured on the installed `@objectstack/spec` 17.2.0". The pin is right — a version frozen in prose is the objectui#3645 shape, where a spec range sat in 36 READMEs across thirteen majors because no review step ever asked whether it was still true. The literal is deleted rather than added to KNOWN_CLAIMS, which is what the pin's own message asks for. The sentence now reads "Measured on the installed `@objectstack/spec`"; the version of that reading lives in the pull request body and on the card, where it is dated and cannot silently go stale. Every other byte of the sentence is unchanged, so the attribution the card asked for is intact. The changeset corrected in the previous commit keeps its literal: the pin's SCAN_ROOTS are content/docs, packages/*/README.md and skills, so `.changeset` is outside its population — and a changeset is a dated release note about a measurement already taken, which is the one place a version literal cannot rot. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MM7kaS4dPpYHV5BsMyu4tQ
baozhoutao
deleted the
claude/issue-7537-lookup-option-description-attribution
branch
September 6, 2026 08:19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7537
Docs and changeset prose only. No type, schema, export or runtime path moves.
Half 1 —
content/docs/fields/lookup.mdxBefore (
:68on36fc746):After — the same attribution PR objectui#7510 gave the published JSDoc on
SelectOptionMetadata.description(as shipped after the patch round below, which removed the version literal):The key stays declared and stays consumed —
LookupFieldreally does search it. Only the attribution was wrong, and it was wrong in the direction that costs the reader the most.The reading behind that sentence (re-measured today, not carried from the card)
Package resolved to
node_modules/.pnpm/@objectstack+spec@17.2.0_ai@7.0.65_zod@4.4.3_/node_modules/@objectstack/spec, entrydist/data/index.js. The version belongs here, in a dated pull-request body, rather than in the page — see the patch round.The negative control uses a value short enough to trip
too_small, which is what makes the clean-option ACCEPT a reading rather than a coincidence.Half 2 —
.changeset/6140-field-metadata-rows-option-description.md, corrected in placeThe card and its triage both recorded a mechanism assumption: that
scripts/check-changeset-overwrite.mjs"fails any change that modifies a pre-existing changeset". That is not what the shipped gate does, and its own header is the source:and, in the report it prints on this very diff, case 2 of the three shapes it names:
.github/workflows/changeset-guard.ymlruns it with noOS_CHANGESET_OVERWRITE_ENFORCE, so report-only is CI's configuration, not a local relaxation. So this half needed no decision-box escalation and no additive correction changeset — an additive one would in any case have left the false sentence in the CHANGELOG and merely printed a correction beside it, which is the opposite of what the card asked for.Gate output on this diff (exit 0):
No
GONE from the declarationline: every package name the declaration carried at base is still there. That is the narrower signal the gate's header says a future blocking rule would be scoped to, and this change passes it too. Under the non-shippedOS_CHANGESET_OVERWRITE_ENFORCE=1flip the same run exits 1 on the same finding — recorded for honesty; that flag is set nowhere in this repository.Bounded in-place fix, declared
That changeset declares two keys, and both carried the same false spec attribution —
rowsas well as optiondescription. The card named only:18. Correcting one and leaving its sibling would ship a release note that reads as if therowsclaim had been verified, and would cost a second deliberate modification of a pre-existing changeset later. So both were corrected in one stroke, both backed by today's reading:The bumps (
@object-ui/types: minor,@object-ui/fields: patch) and the declared behaviour are untouched.Root cause worth one line
scripts/check-spec-symbol-derivation.mjscannot see prose incontent/docs, which is why PR objectui#7510 corrected three TypeScript JSDoc claims and this documentation copy survived. Widening that gate's scan surface is a separate card (same family as thecheck-readme-exportsscan-surface point recorded in objectui#7417) and is deliberately not attempted here.Reverse check
The gate family cannot see prose, so the reverse check for this change is textual, on the page and on the changeset:
lookup.mdx— the false attribution stringlookup.mdx—refuses(the new attribution's key word)aligned withNOT a(spec key)Repo-wide sweep after the change,
git grep -n "SelectOptionSchema.description" -- content/docs .changeset packages/*/README.md: the only surviving hit is objectui#7014's own correction changeset, which quotes the old claim in order to correct it.Gates
Run on
f5154f2and re-run on1809407(the patch head); exit codes captured by redirect, never through a pipe.vitest scripts/__tests__/doc-version-claims.test.tsTest Files 1 passed (1)·Tests 29 passed (29)— red before the patch, see belowpnpm check:doc-snippetsSemantic phase: 495 of 495 block(s) judged, 0 failed.pnpm check:doc-fencesnode scripts/check-doc-links.mjsLinks are valid across 17 scan roots.pnpm check:doc-typesEvery documented component type is registered.pnpm check:control-bytesOK (scanned 6435 tracked text file(s); skipped 85 binary)pnpm check:docs-route-closurepnpm check:doc-example-readersno @example hand-spells onenode scripts/check-changeset-presence.mjsno changeset is owed(nothing this change touches is published source)node scripts/check-changeset-overwrite.mjspnpm changeset:checkmajornode scripts/check-governed-queue-guard.mjs --testNOT GOVERNED — 1 path(s) checkedturbo run build --filter=./packages/*39 successful, 39 total(run before the doc-snippet gate)vitest run scripts/__tests__/check-doc-links.test.ts121 passedTURBO_SCM_BASE=36fc746 turbo ls --affectedreports 0 packages, so no packagetest/typecheckis owed. Repo-wideeslint --format jsonon both changed files reports 2 files,errors=0, eachFile ignored because no matching configuration was supplied.— the repo-wide lint has no judgement to make about.mdx/.md, so nothing was narrowed away.Readers of the page (
git grep -l 'fields/lookup.mdx'overscripts/ packages/ .github/ examples/ apps/):scripts/check-doc-links.mjsand its test (both green above),packages/plugin-grid/src/relationalMetaKeys.ts(a comment citing the page for the snake-case / camelCase dialect — untouched, and thelookupFiltersspelling question belongs to objectui#7021), andexamples/console-starter/README.md(a link, still valid).Patch round (R45)
Removed from the merge queue at 07:49:20Z. Merge-group run
34019566751, job101449510557,Test (shard 4/4):Fix (
1809407, one line): the sentence now reads "Measured on the installed@objectstack/spec, …". The literal is deleted, not added toKNOWN_CLAIMS— the pin's own message prefers deletion, and objectui#3645 is the reason: a spec range frozen in 36 READMEs survived thirteen majors because no review step ever asked whether it was still true. The measured version stays in this body and on the card, where it is dated. Every other byte of the sentence is unchanged.The changeset keeps its literal, deliberately. The pin's population is
SCAN_ROOTS = ['content/docs', 'packages/*/README.md', 'skills'], so.changeset/**is outside it — and a changeset is a dated release note about a measurement already taken, the one place a version literal cannot go stale.Reproduced red before, green after, both on this branch:
Why this PR's own
Test (shard 4/4)was green at 07:34ZNot shard assignment. In the PR run
34019282906all four shards reportRun tests (shard N/4)with conclusionskippedand the job still concludessuccess: theDecide whether this change needs a full runstep took the no-full-run path, because this diff is entirelycontent/docs/**and.changeset/**, both on that step's exclusion list. The whole run finished in 48 seconds. So the PR-run shard 4 was green because it executed zero tests, not because the pin passed there. The merge-group build does not take that path — its four shards each ran 12 to 13 minutes overef6d7d4a(this commit merged ontomainat15789d5), and shard 4 is wheredoc-version-claims.test.tsactually executed and failed.The consequence, stated rather than filed: on a docs-only pull request the first real execution of the repo-wide doc pins is inside the merge queue. That is the documented design of the path filter, and the queue did catch it — but it is why a docs-only PR's green shards are not evidence that the doc pins passed.
CI note
Live E2E (informational)is red on every branch today for an upstream reason (objectui#7990 / objectstack#16186). It is not this diff's.Session, as a code span so it survives a body rewrite:
https://claude.ai/code/session_01MM7kaS4dPpYHV5BsMyu4tQ🤖 Generated with Claude Code
https://claude.ai/code/session_01MM7kaS4dPpYHV5BsMyu4tQ