Repository navigation
docs(types): correct the series and route-overview docblocks PRs #10802 and #10821 made false (objectui#10905) - #10939
Conversation
…ade false
The `ObjectChartSchema.series` docblock said a `type` on the `{ dataKey }`
arm is an excess property on a literal typed by the interface. Since the
series union took the spec's `ChartSeries` as its `{ name }` arm, which
declares `type`, that literal compiles; only the zod mirror still strips it.
The zod route-overview docblock ("WHERE THIS ARM IS INSTALLED") said a named
view's `listViews` is unmirrored and named a `custom` issue under
`options.kanban` on that route. `listViews` is now the protocol's strict
record by reference: it refuses a named view's `options` bag whole, and the
named-view check reports at `listViews.KEY.kanban.groupBy` only. The heading
and closing sentence are corrected to match.
Comment text only; no behaviour, type or accept-set change.
Claude-Session: https://claude.ai/code/session_012UwY3ahMixEFkfTUxMVkYm
Co-authored-by: Claude <noreply@anthropic.com>
…eleasing nothing Claude-Session: https://claude.ai/code/session_012UwY3ahMixEFkfTUxMVkYm Co-authored-by: Claude <noreply@anthropic.com>
…ent text Claude-Session: https://claude.ai/code/session_012UwY3ahMixEFkfTUxMVkYm 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
|
…ocks Picks up PR #10934 (objectui#10916), which clears the repo-wide Spec Main Shape Gate red. No conflict. Claude-Session: https://claude.ai/code/session_012UwY3ahMixEFkfTUxMVkYm 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: Inputs: card #10905 (body and its four comments — triage 5865872849, claim 5866209276, Head moved during this review. The brief named ① Derived judgmentsScope. Docblock 1 —
Docblock 2 — the route overview (
Other derived checks. No cross-file ② Semver level
③ Boundary flagsFrom the first Deviations
Open questions: none declared; none found. Second Out-of-scope finding (no pin on either half of the corrected Card-side note, not the PR's: the card body cites Check-runs on Implemented-by: VERDICT: PASS |
Fixes #10905
Clause-②: no — comment and describe text only; no accept set or public surface moves.
What changed
Two docblocks in
packages/types/src, comment text only, plus an empty-frontmatter changeset. No.describe()string, type, value or accept set moves.ObjectChartSchema.series, the TS interface inobjectql.ts. The sentence "Atypewritten on this arm anyway is an excess property on a literal typed by this interface" is replaced. Since PR feat(types):ObjectChartSchemaaccepts the react tier'sobject-chartnode — the spec's{ name }series arm, family asspecType(objectui#10770) #10802 (objectui#10770), eachseriesentry is either the spec'sChartSeries(the{ name }arm) or the internal{ dataKey }arm. The{ name }arm declarestype, and excess-property checking on that union accepts a key that either arm declares, provided the value fits that declaration. So{ dataKey: 'amount', type: 'line' }compiles. The zod half of the paragraph (a plainz.object, which stripstype, so the entry parses clean and the key is dropped) is still true and is kept. "The mirror's.describe()says the same" now reads "names the same omission". The.describe()string names the omission and never made the excess-property claim, so it is not touched.zod/objectql.zod.ts. Its second-route paragraph made three claims. It said a named view'slistViews"is unmirrored". It saidgenerateViewSchemamerges the same two nestings. It named acustomissue atlistViews.KEY.options.kanban.groupBy. Since PR feat(types,plugin-view,app-shell)!: ObjectViewSchema.listViews mirrors the spec's ObjectListViewSchema by reference; ViewPreview folds a stored options bag (objectui#7928) #10821 (objectui#7928),listViewsisstripImportedDefaults(SpecViewSchema).shape.listViews. That record refuses a named view'soptionsbag whole,generateViewSchemareads nooptionsbag, andcheckNamedViewKanbanStrayGroupByreports atlistViews.KEY.kanban.groupByonly. The heading ("TWO NESTINGS EACH") and the final sentence ("cannot depend on which route or nesting") described the same pre-feat(types,plugin-view,app-shell)!: ObjectViewSchema.listViews mirrors the spec's ObjectListViewSchema by reference; ViewPreview folds a stored options bag (objectui#7928) #10821 shape, so they are corrected in the same docblock. Three nestings now take the one string. A named view'soptions.kanban.groupBymeets the protocol's refusal ofoptionsinstead.Route 1 of the overview (
list-view:kanbanplusoptions.kanban) was re-read againstListViewandListViewSchema.optionsand is unchanged.Measurements
The probes are kept outside the tree and were run once. Everything was measured on
733fd5ac6.Sentence 1, a
tscprobe. Three literals typedObjectChartSchema, run under the package's own tsconfig:series: [{ dataKey: 'amount', type: 'line' }]produced no diagnostic, so the sentence under test is false.series: [{ dataKey: 'amount', zzzUnknownKey: 1 }]produced TS2353 ("Object literal may only specify known properties"), so a genuinely unknown key IS refused.series: [{ dataKey: 'amount', type: 'not-a-chart-family' }]produced TS2322, so the value must fit the spec'sChartType.The zod half, a parse probe (
ObjectChartSchema.safeParse):{ dataKey: 'amount', type: 'line' }succeeds with series[{"dataKey":"amount"}], so the key is stripped and that half stays true.{ dataKey, chartType: 'line' }keepschartType, and{ name, type: 'line' }keepstype.Sentence 2, a parse probe (
ObjectViewSchema.safeParse, a named view carryingcolumnsandkanban.columns):kanban.groupBygivesunrecognized_keysatlistViews.board.kanbannaminggroupBy, pluscustomatlistViews.board.kanban.groupBy.options.kanban.groupBygives onlyunrecognized_keysatlistViews.boardnamingoptions. There is nocustomunderoptions.groupByFieldandcolumnsonly): success.generateViewSchemareads nooptionsbag: a.optionsread pattern hitsplugin-view'sObjectView.tsxzero times, and hitsplugin-list'sListView.tsx(the positive control) 48 times.Lit control. I extracted each of the
checkNamedViewKanbanStrayGroupByandnamedViewKindRefusalsdocblocks, from its opening line through the declaration line, before and after the edit. Both are byte-identical:cmpis silent, and the sha256 prefixes areaaa003254ab7127aand7c8aa1b4f5cd6a3don both sides.Changeset
On the docblock commit alone,
node scripts/check-changeset-presence.mjsanswered exit 1, because both files are published source of@object-ui/types. So a declaration is owed.The declaration uses empty frontmatter, not
patch. Nothing a consumer acts on moves. Both docblocks reach the build output only as comment text: afterpnpm --filter @object-ui/types build, the newseriessentence is indist/objectql.d.tsand the route overview is in the zod module's JS. At the time of writing, both changes that made the sentences false (PR #10802 and PR #10821) are still pending changesets, so no release has carried the false text.Gates
I derived these by hand from the root
package.jsonand.github/workflows/, because the objectstackdispatch-gates.mjsdoes not cover this repository.At head
950bf6406:check-control-bytes,check-new-cross-file-line-citations("0 new citation(s)"),check-changeset-presence(empty-frontmatter pass),check-changeset-fixed,check-changeset-no-major,check-changeset-overwrite,check-changeset-claims,check-pending-changeset-literals,check-spec-symbol-derivation,check-handler-key-read-sitesandcheck-unreferenced-sources.pnpm exec vitest run packages/types/: 264 files and 5854 tests passed, exit 0.pnpm exec vitest runon the three script tests that readobjectql.zod.tsas text (check-eager-closure-budget,check-handler-key-read-sitesandvite-types-zod-lazy): 3 files and 241 tests passed, exit 0.At
7449bc6a9, which differs from the head only in the changeset's wording (git diff --statshows one file under.changeset/):pnpm --filter @object-ui/types buildexit 0, and the dist completeness check reported complete.pnpm --filter @object-ui/types type-checkexit 0.pnpm --filter @object-ui/types lintexit 0, with 0 errors.node scripts/check-governed-queue-guard.mjs --testover the three paths answered NOT GOVERNED.NOT MEASURED:
check:eager-closure, reason: it reads every package's built dist, and a comment-only diff moves no import edge. Its script test above ran green..d.tschanges JSDoc text only, and no type bytes move.Known repo-wide red, left alone:
Spec Main Shape Gate(objectui#10916, owned by another seat).Acceptance notes
seriessentence: atypeon a{ dataKey }entry compiles, and the mirror strips it. The probes above were run once. This is an observation, not filed. Carrier: none.mainhas not moved from733fd5ac6on either file. PR fix(types): object-master-detail-form, object-metric and pivot validate (objectui#10859, batch 2) #10927 editsobjectql.zod.tsat its imports and its tail, which are disjoint from this docblock.Implemented by the dispatched dev run of the
domain:specseat, sessionhttps://claude.ai/code/session_012UwY3ahMixEFkfTUxMVkYm.Generated by Claude Code