Repository navigation
docs(changeset): date-note two pending entries whose option-description and rows refusals spec 17.3.0 lifted (objectui#10801) - #10828
Conversation
…iption and rows refusals spec 17.3.0 lifted Two pending changesets still told a reader that `@objectstack/spec` refuses `options[].description` and `rows` by name. Spec 17.3.0 declared both, and the repository resolves 17.4.0. Each file gains one appended dated note in the form the retirement notes use, stating the boundary as measured on 17.2.0, 17.3.0 and 17.4.0. The frontmatter is byte-identical and the corrected history is kept. Claude-Session: https://claude.ai/code/session_01DuWo5bdP9SdVebamn99GGk Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Isolated, adversarial read of PR objectui#10828 for card objectui#10801. Inputs: the card and its three comments, the PR body, file list, diff and the head's check-runs (REST), the objectui#10533 precedent and the objectui#6140 / objectui#6153 rulings on GitHub, and the objectui tree at Diff: 2 files, 35 insertions, 0 deletions, one commit. Each file gains exactly one appended paragraph. ① Derived judgmentsInstalled spec, read from the head. Measured, one probe beside one control per key, on all three versions (
The bare controls (option, select field, object, each field type without the key) parse on every version. Every spec claim in both notes and in the PR's measurement table matches this table. The PR's aside that a one-character option 6140 note, sentence by sentence. "17.3.0 declared 7014-q1 note, sentence by sentence. "17.3.0 declared it" true. "strict over six keys, Standing sentences. Every sentence the addition makes obsolete is named by the note rather than left under the umbrella: 6140's "refuses Still pending. 42 tracked Frontmatter. md5 of the frontmatter block, computed by me at merge-base, ② Semver levelUnchanged. 6140 stays ③ Boundary flagsForm vs the objectui#10533 precedent.
Dev's deviations. (1) Widening the 7014-q1 note to "exactly one key, on one face" and " PR body. Checked against the tree and the check-runs: the quoted sentences in the "What the note corrects" table are verbatim from the files; the frontmatter md5 prefixes match; "35 insertions, 0 deletions" true; the 17.2.0 / 17.3.0 / 17.4.0 table matches my measurements cell for cell; the Check-runs on the head (read after they settled, 2026-09-27 ~18:35Z). 41 check-runs: 38 success, 3 skipped ( Measured vs reasoned. Measured: every spec cell above (three registry installs, integrity-matched to the lockfile at 17.4.0), the lockfile and manifest versions, the frontmatter md5s at three refs, the diff stat, the CHANGELOG grep and its lit control, the 17.x version list, and the check-runs. Reasoned from source, not executed: the form-face Implemented-by: VERDICT: PASS Generated by Claude Code |
…i#10793, objectstack-ai#10802 and objectstack-ai#10821 made false (objectui#10877) (objectstack-ai#10891) Fixes objectstack-ai#10877 Clause-②: no. It is release-text hygiene, and no published type or behaviour moves. ## What this does Eight pending changesets each state a contract fact that a later PR in this same unreleased batch made false: PR objectstack-ai#10793 (objectui#7924, `densityMode` retired), PR objectstack-ai#10821 (objectui#7928, `ObjectViewSchema.listViews` mirrored by reference, a named view's `options` bag refused whole) and PR objectstack-ai#10802 (objectui#10770, `ObjectChartSchema.series` became two arms). A pending changeset publishes verbatim into the CHANGELOG at the next release, and the release PR objectui#5400 is still open. So each false sentence now has a dated supersession note beside it. The note form is copied from the landed precedents, PR objectstack-ai#10533 (the `6235-mergedsort-wrap.md` note) and PR objectstack-ai#10828 (objectui#10801): a bold headline naming the date and the card whose change supersedes the sentence, then what holds now, then the superseding entry by file and PR, then "the text above is kept as the reading of this change". - Zero lines deleted: `git diff --numstat` against the merge-base `9f0c84a448` is 168 insertions, 0 deletions, over 8 files. The first round added 10 notes in 6 files. Patch round 1 added 4 notes in 2 files (below). Patch round 2 edited the 7779 note and added none, so there are 14 notes. - The frontmatter is byte-identical in all nine entries the claim and its addendum `5862987983` name. The md5 of the frontmatter block is equal at the merge-base `9f0c84a448` and the head `50deccd71a` for each: 7924-retire `ecedb10c`, 8355 `8f322642`, 10321 `564c93d5`, 10584 `84f96a9a`, 8365 `379475b3`, 9242 `acef2a2c`, 8086 `e927372d`, 7779 `ecedb10c`, 7946 `2ffd8635`. - The seventh entry, `8086-chart-series-type-arm.md`, is untouched (whole-file md5 `7ea6b544` at base and head). Every sentence in it measured STILL-TRUE (see the lit control below). - No new changeset: the diff is `.changeset/` only, and `check-changeset-presence` says none is owed. | Entry | FALSE-NOW sentences, quoted | Superseding entry (PR) | Notes | | --- | --- | --- | --- | | `7924-named-list-view-retire.md` | "`NamedListView` (one entry of `ObjectViewSchema.listViews`)"; "Two bucket-③ members are NOT retired" and "They stay declared as they were." | `7928-listviews-by-reference-fold.md` (objectstack-ai#10821); `7924-density-mode-through-fold.md` (objectstack-ai#10793) | 2 | | `8355-retire-calendar-date-aliases.md` | "it now names the key and the remedy on all five authoring surfaces", for "a named view's two nestings under `listViews`"; "plus a `.check()` on `ObjectViewSchema` for a named view's two nestings"; "`ObjectViewSchema.listViews` stays UNMIRRORED" and the rest of that paragraph; "`timeline.dateField` stays a live, accepted alias", on a named view; "the structural guard that `listViews` stays out of the object's `shape`" | `7928-listviews-by-reference-fold.md` (objectstack-ai#10821) | 3 | | `10321-named-view-kanban-groupby-refused.md` | "`ObjectViewSchema.listViews` is unmirrored"; "and in its legacy `options.kanban` bag" with the issue path under `options.kanban`; "reports one issue per written key, naming the key and the replacement"; "Not changed, deliberately: `listViews` stays unmirrored" and the rest of that paragraph | `7928-listviews-by-reference-fold.md` (objectstack-ai#10821) | 2 | | `10584-object-chart-series-describe.md` | "It now says the copy is that `{ dataKey }` arm minus its per-series `type`, and that the per-series family override on an `object-chart` node is `chartType`"; "taking `type` up would widen a published accept set" | `10770-object-chart-react-tier-node.md` (objectstack-ai#10802) | 1 | | `8365-stray-kanban-groupby-refused.md` | "objectui#10321 gives that route its own door, which refuses the key in either nesting with the same message" | `7928-listviews-by-reference-fold.md` (objectstack-ai#10821) | 1 | | `9242-stray-kanban-groupby-lane-second-route.md` | "which refuses the key in either nesting with the same message"; "(a named view's `kanban` is typed as the `list-view`'s), but not the key inside the untyped `options.kanban` bag on either" | `7928-listviews-by-reference-fold.md` (objectstack-ai#10821) | 1 | | `object-view-unmirrored-keys-7779.md` (patch round 1) | the table's "still unmirrored"; "`listViews` stays unmirrored, on the ruling's own fallback clause."; "The declaration's value is the local `NamedListView`"; the 21-read / 43-unread figures; "The key therefore stays in the parity ledger … until the maintainer decides its value type" | `7928-listviews-by-reference-fold.md` (objectstack-ai#10821) | 1 | | `objectchart-schema-anchor-7946.md` (patch round 1) | the `series` half of "value types taken from their READ sites (`ChartRendererProps` for `xAxisKey` / `series`)" and of "two are INTERNAL, relay-composed (`xAxisKey`, `series` …)"; "`series` entries must be `dataKey`-shaped."; "`aggregate` is the exception, and only because the spec's own object is strict." | `10770-object-chart-react-tier-node.md` (objectstack-ai#10802) | 3 | **Placement.** Each note sits directly after the paragraph that holds the false sentence. Where two false paragraphs are adjacent, one note covers both: the first 10321 note, the 10584 note and the last 8355 note. The 8355 note after the UNMIRRORED paragraph also covers the matching clause in the `@object-ui/types` bullet above it, because both describe the same named-view check. No note cites a line address; source facts are cited by symbol and test name, and `check:new-line-citations` reads 0 new citations. ## Measured, not inherited (one-time probes, not committed) The probes ran the worktree sources at base `b2683a2c0e`, with `@objectstack/spec` 17.4.0 resolved from `packages/types`. The zod face ran through `tsx`, and the TS face through `tsc --noEmit` against `packages/types/src/index.ts`. Each probe sits beside a control that differs only by the key. A named view is `listViews.v` with `columns` set. Zod face (`ObjectViewSchema.safeParse`; `safeValidateSchema` gives the same issues on the two `kanban` rows): | Probe | Result | | --- | --- | | control `kanban: { groupByField, columns }` | parses | | `kanban.groupBy` | two issues: `unrecognized_keys` at `listViews.v.kanban` naming `groupBy`, and `custom` at `listViews.v.kanban.groupBy` | | `options: { kanban: { groupBy } }` | one issue: `unrecognized_keys` at `listViews.v` naming `options`; nothing at the `options.kanban.groupBy` path | | `calendar.dateField` | `unrecognized_keys` at `listViews.v.calendar`, and `custom` at `listViews.v.calendar.dateField` | | `options: { calendar: { dateField } }` | one issue: `options` refused | | `timeline.dateField` | `unrecognized_keys` at `listViews.v.timeline`; control `timeline: { startDateField, titleField }` parses | | each of the 16 retired `NamedListView` spellings, and `densityMode` | `unrecognized_keys` at `listViews.v` naming the key (17 of 17); control `userActions: { search: false }` parses | | `listViews` in `ObjectViewSchema.shape` | present | | list-view route: `kanban.groupBy`, `options.kanban.groupBy`, `calendar.dateField`, `options.calendar.dateField`, `timeline.dateField` | `invalid_type`, `custom`, `invalid_type`, `custom`, parses: unchanged | TS face (`tsc`): | Probe | Result | | --- | --- | | named view `kanban.groupBy` in an `ObjectViewSchema` literal | TS2353, excess property on the spec's kanban block | | named view `options` | TS2353, `options` does not exist | | named view canonical control | compiles | | `list-view` `kanban.groupBy` | TS2322 (`never`): unchanged | | `list-view` `options.kanban.groupBy` | compiles: unchanged | | a `NamedListView` value as a `listViews` entry | TS2322, not assignable | | `NamedListView` with `densityMode`; with `allowExport` | TS2322; compiles | Chart series (`ObjectChartSchema.safeParse`): `{ name, type: 'line' }` parses with `type` kept; `{ dataKey, type: 'line' }` parses with `type` stripped; `{ name, chartType }` is refused (`invalid_union`). The series `.describe()` string now names both arms. The runtime fold was read, not probed: `normalizeListViewSchema` still folds `densityMode` and the eight `show*` flags, and `ListView` still merges `options.kanban` under `kanban`. ## Lit control: STILL-TRUE, left byte-identical - `8086-chart-series-type-arm.md`, the whole entry. PR objectstack-ai#10802 changed no `plugin-charts` source (its one file there is a test). `ChartRendererProps.schema.series` still declares `type?: string` on both arms. The `ObjectChartSchema.series` docblock still says the copy of the internal arm omits `type`, and that internal arm's type is the same literal as before PR objectstack-ai#10802. - 8365, "takes the identical message through a check on that untyped bag", and the distinguishing `options.kanban` fixture. Both are the `list-view` route, measured unchanged. - 9242, "a `list-view` document carrying the key, under `kanban` or under the legacy `options.kanban` bag, is refused by `safeValidateSchema`". Measured unchanged. - 8355, the `@object-ui/types` bullet's "on the legacy `options.calendar` nesting (a check, since an open record declares no member". This is the list-view surface, measured unchanged. - 7924-retire, "`densityMode` is folded onto `rowHeight` by `normalizeListViewSchema`" and "Only the authoring face changes". The fold still does both. - 10584, "Wording only. The accepted shape does not move on either face". This is a statement about that change's own delta, and it is still true of that change. - 7779 (patch round 1): `viewTabBar` retired; the eight keys enforced; "64 declared top-level members"; the spec record requires `columns` and refuses `options`, tuple filters and `default`; "not papered over with `z.any()`"; "absent stays valid on all nine"; the ledger move 14/96 → 14/87 (that change's own delta). Each measured true at `0ea55c3701`. - 7946 (patch round 1): the `xAxisKey` half of the INTERNAL sentence (its `.describe()` still says all five producers compute it); `type: 'object-chart'` required; `chartType` must be the declared union; `normalizeChartSchema` translates the `{ name }` arm; `aggregate` `function` / `groupBy` required with unknown members refused; a misspelled key on the node itself is not refused; `filter` keeps both arms. Each measured true at `0ea55c3701`. ## Gates (re-taken at head `50deccd71a`; hand-derived from `package.json` and `.github/workflows/`; each exit captured by redirect-then-status) | Command | Verdict line | Exit | | --- | --- | --- | | `pnpm check:pending-changeset-literals` | ✅ No test source names a pending changeset. | 0 | | `node scripts/check-changeset-claims.mjs` | ✅ No pending changeset names a file this change touches. (Self-contradiction reading: every declared package across the 8 bodies is not negated.) | 0 | | `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-changeset-overwrite.mjs` | report-only: this change touches 8 changesets it did not add. The declared packages are identical at base and head for all 8, which is the prose-correction case. | 0 | | `node scripts/check-changeset-fixed.mjs` | ✅ All workspace packages are in the changeset fixed group. | 0 | | `pnpm check:new-line-citations` | VERDICT new-cross-file-line-citations: 0 new citation(s) | 0 | | `pnpm check:control-bytes` | ✅ check-control-bytes: OK | 0 | | `pnpm check:spec-symbols` | ✅ spec member citations: nothing cites a key its spec symbol does not declare. | 0 | | `pnpm check:test-path-roots` | ✅ check-test-path-roots: OK | 0 | | `node scripts/check-installed-spec-pin-claims.mjs` | OK (it excludes `.changeset/`, so it was run for completeness only) | 0 | | `node scripts/check-governed-queue-guard.mjs --test` (the 8 paths) | ✅ NOT GOVERNED | 0 | Tests, from the repo root under the shared verify lock: every `scripts/__tests__` file that names `.changeset` (derived with `git grep -l`: 24 test files, plus one fixture that is not a test), and the five `@object-ui/types` pins that re-derive what the notes state (`calendar-date-alias-refusal-8355`, `named-view-kanban-stray-group-by-10321`, `object-view-listviews-by-reference-7928`, `object-chart-react-tier-node-10770`, `object-view-unmirrored-keys-7779`). Result at `f5e0123f4b`: **Test Files 29 passed (29), Tests 1193 passed (1193)**, lock `VERDICT command-exit 0`. Re-taken at `0ea55c3701` with the 24 `scripts/__tests__` files and the four pins the new notes rest on (`object-view-unmirrored-keys-7779`, `object-chart-react-tier-node-10770`, `object-view-listviews-by-reference-7928`, `zod-mirror-parity`): **Test Files 28 passed (28), Tests 1200 passed (1200)**, lock `VERDICT command-exit 0`. Re-taken at `50deccd71a` (patch round 2): the 24 `scripts/__tests__` files plus `object-view-unmirrored-keys-7779` gave **25 files / 1146 tests**, and the four other pins (`calendar-date-alias-refusal-8355`, `named-view-kanban-stray-group-by-10321`, `object-view-listviews-by-reference-7928`, `object-chart-react-tier-node-10770`) gave **4 files / 48 tests**. Both runs gave lock `VERDICT command-exit 0`. Not applicable, with the reason: - `@object-ui/types` type-check, package vitest runs and consumer sweeps: the diff touches no package source, only `.changeset/`. - The Spec Main Shape Gate: no touched type. - ESLint `--no-inline-config` on the touched files: `eslint.config.js` has no configuration that matches `.md`. All 8 files report "File ignored because no matching configuration was supplied", so it judged nothing (NOT MEASURED). ## Acceptance notes - **Residue in the same family: closed by patch round 1.** The first round stopped on two files outside the claimed surface, `object-view-unmirrored-keys-7779.md` and `objectchart-schema-anchor-7946.md`. Each is named by a superseding PR itself. The seat extended the file surface (addendum `5862987983`, option A), and patch round 1 (`80ee15eecb`) added one note to 7779 and three to 7946, in the same form and measured the same way. `Fixes objectstack-ai#10877` stays. - **For the at-tier review.** The last 7946 note also names two changes outside the three PRs: `drillDown` (objectui#8885, PR objectstack-ai#8895) and `xAxis` / `yAxis` (objectui#10518, PR objectstack-ai#10601). Both landed after the 7946 entry, and both also make its "`aggregate` is the exception" sentence false. That sentence of the note can be dropped if the review holds it out of scope; the rest of the note stands without it. - Not measured: the wider pending population that names `listViews` / `NamedListView` or `ObjectChartSchema`. Only the entries the superseding PRs name were read. - **Source prose. These are observations and were not filed; carrier: none.** - The `ObjectChartSchema.series` TS docblock (`packages/types/src/objectql.ts`) says "A `type` written on this arm anyway is an excess property on a literal typed by this interface." Since PR objectstack-ai#10802 that is false. `{ dataKey: 'amount', type: 'line' }` compiles in an `ObjectChartSchema` literal, because the union's `{ name }` arm declares `type` (tsc probe above). The zod mirror still strips it. - The zod docblock headed "WHERE THIS ARM IS INSTALLED — TWO ROUTES, TWO NESTINGS EACH, ONE STRING" (`packages/types/src/zod/objectql.zod.ts`) still says a named view's `listViews` "is unmirrored", and it still names a `custom` issue under `options.kanban` on that route. The docblocks of `checkNamedViewKanbanStrayGroupBy` and `namedViewKindRefusals` are current. - **A dispatch premise, corrected.** "Each one already states in its own body that it supersedes the older entry" holds for `7924-density-mode-through-fold.md` and `7928-listviews-by-reference-fold.md`. `10770-object-chart-react-tier-node.md` names no superseded entry. The supersession is stated in PR objectstack-ai#10802's body ("Superseded pending changesets"), which names the objectui#10584, objectui#7946-anchor and objectui#8086 entries. - **`main` merged, twice.** `origin/main` `4f38f39286` was merged as `0ea55c3701`: the two merged commits touch none of the probed sources, and the probes re-ran byte-identical. `origin/main` `9f0c84a448` was merged as `bade176fff` (patch round 2), which carries `35d68c4c` (PR objectstack-ai#10884, objectui#10758). That merge moved probed sources (`objectql.zod.ts`, `objectql.ts`, `ChartRenderer.tsx`); the probes re-ran at `50deccd71a`, byte-identical to round 1's head outputs. Neither merge used a rebase or a force-push. - **Patch round 2 (at-tier record `5864532186`, FAIL on one note).** The 7779 note said the renderer reads 20 members and leaves 44 unread. That was true at `4f38f39286`, but PR objectstack-ai#10884 re-took the census to 43 / 21 on `main`. Per the seat's decision (REWORK `5864543090`), the note now states no figure. It says the split is no longer the 21 / 43 the entry counted, names both changes that moved it (objectui#7928 and objectui#10758), and cites the census pin in `object-view-unmirrored-keys-7779.test.ts`, which re-derives the figures on every run (`43 read + 21 unread = 64` at the head). No other note moved. - **The headline card.** Each note's headline names the card whose change supersedes the sentence, as the PR objectstack-ai#10533 notes did. PR objectstack-ai#10828's notes named their own card instead, because the cause there was a spec release that has no pending entry. - **Commit trailers are model-free** (`Co-Authored-By: Claude`), per the dispatch. The harness offered a trailer that carries a model name, and it was not used. Implemented by a `domain:spec#1` dispatch (dev subagent). Session: `https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW`. --- _Generated by [Claude Code](https://claude.ai/code/session_014fWVhLzhxR8qrFsJ5o8TYW)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
Fixes #10801
Clause-②: no
What this does
Two pending changesets still tell a reader that
@objectstack/specrefusesoptions[].descriptionandrowsby name. Spec 17.3.0 declared both keys (the objectui#6140 / objectui#6153 ruling), and this repository installs 17.4.0. A pending changeset publishes verbatim into the CHANGELOG at the next release, so the text would ship stating the opposite of the installed contract.Each file gains ONE appended dated note in the objectui#10533 form: a bold headline naming the date and the card, then what holds now, then a sentence keeping the rest as the reading of the change. The frontmatter is byte-identical (md5 of the frontmatter block, base to head: 6140
85cd680d, 7014-q1ecedb10c, both unchanged), and zero lines are deleted (git diffis 35 insertions, 0 deletions)..changeset/6140-field-metadata-rows-option-description.mdFieldSchemarefusesrowsBY NAME … on all four of textarea/markdown/html/richtext"; "SelectOptionSchemais strict over exactly{label, value, color, default, visibleWhen}and refusesdescriptionBY NAME"; "never in an object document sent to the platform".changeset/7014-q1-tier1-select-option-convergence.mddescription; plus "exactly one key, on one face" and "SelectOptionidentically"Why the 7014-q1 note also corrects "What widened". It is the same cause in the same file.
SelectOptionBasederives the spec's option keys by reference, so when 17.3.0 addeddescriptionthe SDUI form faceSelectOptiongained an optionaldescriptiontoo. The entry's "exactly one key, on one face" and "SelectOptionidentically" therefore undercount what ships. Nothing narrowed. The note says so in the same paragraph, and no other sentence was touched.Placement. The claim's file surface says "appended", so both notes sit at the end of their files. In 6140 that puts the note directly after the existing 17.2.0 correction paragraph, which reads as a chronological chain. The objectui#10533 precedent (
6235-mergedsort-wrap.md) put its note after the opening paragraph; only the form is copied here, not the position.Measured, not inherited
@objectstack/specwas resolved frompackages/typesin this worktree: 17.4.0, andpnpm-lock.yamlhas exactly one entry, 17.4.0. To date the move, 17.2.0 and 17.3.0 were installed from the registry into a scratch directory. Every probe sits beside a control that differs only by the key. Option values are at least two characters long: a one-character value failstoo_smallatvaluefor an unrelated reason. The first run hit that failure and was discarded.SelectOptionSchemakeysnever, i.e. strict)descriptionunrecognized_keysFieldSchema/ObjectSchemawhose option carriesdescriptionunrecognized_keysat the optionicon(the lit control)unrecognized_keysunrecognized_keysunrecognized_keysdisabledunrecognized_keysunrecognized_keysunrecognized_keysrows: 4on textarea, markdown, html, richtextunrecognized_keysrows: 4ontextunrecognized_keyscustomatrowscustomatrowsrows: 4on everyFieldTypemembercustomatrowsA note on the triage reading: triage named
textareaandmarkdownas acceptingrows. The installed spec accepts it on all four multiline editor types, and the notes say four.Form face, by type probe on the worktree sources at 17.4.0:
keyof SelectOptionequalslabel | value | color | default | description | visibleWhen | disabled | icon, and a negative control asserting the seven keys withoutdescriptionfails with TS2344. The convergence pin's own assertions compile (assertionFormFaceGainedOnlyDescription,assertionFormFaceKeptEveryMember,assertionMetadataFaceKeptEveryMember,assertionMetadataFaceGainedOnlyDefault).tsc -p packages/types/tsconfig.test.json --listFilesOnlylists both pin files, so the packagetype-checkre-derives them.Still pending: distinctive strings from both bodies (for example "refuses
rowsBY NAME", "The convergence is an EXTENSION", "consumed-but-undeclared field-metadata keys") have 0 hits across all 42 trackedCHANGELOG.mdfiles. The lit control, the released entry "Adopt@objectstack/spec", hitspackages/types/CHANGELOG.md.The notes name the instruments that re-derive these facts instead of copying the answers:
select-option-spec-extension-7014.test.tscovers the option key set,descriptionaccepted,icon/disabledrefused,rowsaccepted on the four types, andcustomontext/select.select-option-tier1-convergence-7014.test.tscovers the form face's gained key.Gates (head
00a082a68, hand-derived frompackage.jsonand.github/workflows/; each exit captured by redirect-then-status)node scripts/check-changeset-presence.mjsnode scripts/check-changeset-no-major.mjsmajorbump.node scripts/check-changeset-overwrite.mjsnode scripts/check-changeset-claims.mjsnode scripts/check-pending-changeset-literals.mjsnode scripts/check-spec-symbol-derivation.mjsnode scripts/check-control-bytes.mjsnode scripts/check-changeset-fixed.mjsnode scripts/check-new-cross-file-line-citations.mjsnode scripts/check-installed-spec-pin-claims.mjs.changeset/by design, so it is run for completeness only)Tests, under the shared verify lock, from the repo root: the two
.changeset/**readersnode scripts/markdown-test-inputs.mjs --listnames (check-changeset-no-major.test.ts,dollar-dialect-alias-census.test.ts), plus the changeset-gate suites that walk the real directory (check-changeset-presence,-claims,-overwrite,check-pending-changeset-literals,changeset-polarity-census,body-dialect-census,check-control-bytes) and the three@object-ui/typespins the notes cite or sit beside (select-option-spec-extension-7014,select-option-tier1-convergence-7014,field-metadata-rows-option-description-6140): Test Files 12 passed (12), Tests 427 passed (427), lockVERDICT command-exit 0, at00a082a68.No build: the diff touches no package source, and no gate above reads
dist/.Acceptance notes
SelectOptionBasedocblock inpackages/types/src/select-option.tslists "WHAT COMES FROM THE SPEC, unchanged" aslabel,value,color,default.descriptionalso arrives from the spec by reference now. The list is incomplete, not false: nothing there saysdescriptionis refused. The same docblock deliberately declines to re-enumerate the keys, so this is polish.descriptionorrows. The only other carrier is the sibling7014-select-option-spec-claim-correction.md, which already carries its correction.Session of this run:
https://claude.ai/code/session_01DuWo5bdP9SdVebamn99GGk(the dispatchingdomain:uiseat #1; dev subagent).Generated by Claude Code