feat(types,components)!: retire four zero-read or third-spelling keys, mirror two chatbot keys, file eighteen runtime slots by name (objectui#6152, round 4) - #11285
Conversation
…, mirror two chatbot keys, file eighteen runtime slots by name (objectui#6152, round 4) - LabelSchema.content: retired on both faces (a third spelling of the label text); the label renderer's third read is dropped. - ReportComponentSchema.chartConfig / reportType and DetailViewSchema.autoDiscoverRelated: re-measured zero-read, retired on both faces; specReportToPresentation stops writing reportType. - ChatbotSchema.requestBody mirrored through the shared pick; ChatbotFloatingSchema.floatingConfig mirrored through a module-private FloatingChatbotConfig restatement that carries the triggerIcon tombstone. - DataTableSchema (14 code-produced keys) and DetailViewSchema (activities, comments, history, recordNavigation) filed in RuntimeOnlyDeclared by name, each with its reason on RuntimeOnlyNamedAllowList. - UnmirroredDeclared 9 / 44 -> 6 / 20; RuntimeOnlyDeclared 4 / 9 -> 4 / 27. Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh Co-authored-by: Claude <noreply@anthropic.com>
…block stop authoring pageSize / totalItems, which neither face declares (objectui#6152, round 4) Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh Co-authored-by: Claude <noreply@anthropic.com>
…ectui#6152, round 4) Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh Co-authored-by: Claude <noreply@anthropic.com>
…ctions to four pending changesets it made false (objectui#6152, round 4) Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh Co-authored-by: Claude <noreply@anthropic.com>
Carries main through PR #11275. No conflicts. Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh 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
|
Refs #6152
Clause-②: yes (narrowing). The two mirrors widen
@object-ui/types/zodand the strict authoring face to keys the TypeScript face already invited and the renderers read (requestBody,floatingConfig). The four retirements (label.content,report.chartConfig,report.reportType,detail-view.autoDiscoverRelated) narrow both faces at once, under the startup no-gradualism rule. It is priced in.changeset/6152-unmirrored-round4.mdasminor, with the break stated.Round 4 of objectui#6152, dispatched under claim
5919877490(thedomain:devxseat 2, sessionsession_01TdiauJaVCHuj45EzZGUxHh, on the maintainer's direct order). The rulings are the seat review5914490915: Q1 B, Q2 A, Q3 B. ⛔ This is a draft from a dispatched dev: do not mark it ready and do not enable auto-merge. The card stays open, becauseObjectGridSchema, the spec-derived pairs and threeDataTableSchemakeys (below) are not this round's.What changed
LabelSchema.contentis retired. It is?: neveronform.tsand aretirementTombstoneonform.zod.tsthat names the kept spellingstextandlabel. Thelabelrenderer drops its third read limb (schema.text || schema.label). Re-measured: 0 documents author it (JSON, Markdown JSON fences and typed literals); its only author was a test inform-renderers.test.tsx, which now pins the refusal. Which oftext/labelis canonical is not decided here.DetailViewSchemaactivities,comments,historyandrecordNavigationgo toRuntimeOnlyDeclaredby name. Each has a row with its reason onRuntimeOnlyNamedAllowList, in round 3's shape. They carry host-fetched runtime data, andrecordNavigation.onNavigateis a required function.displayModekeeps its TypeScript-only refusal. It gets no zod arm, because stored designer documents carrydisplayMode: 'floating'(pinned bychatbot-display-mode-retired.test.ts). The ledger entries no longer call the mirror half "owed"; the key stays listed by decision. Separately, after a reader census for each:ChatbotSchema.requestBodyis mirrored through the shared pick. All three chatbot registrations read it (body: schema.requestBody).ChatbotFloatingSchema.floatingConfigis mirrored through a module-private restatement ofFloatingChatbotConfig. That restatement judges the six membersFloatingChatbotdestructures, and carries thetriggerIcontombstone's runtime half that the objectui#7654 tripwire asked for.ReportComponentSchema.chartConfig,ReportComponentSchema.reportTypeandDetailViewSchema.autoDiscoverRelated, each?: neverplus aretirementTombstone.reportType's one in-code producer,specReportToPresentationinspec-report.ts, no longer writes it, andLegacyReportPresentationLikeno longer declares it.DataTableSchema: 14 of 17 keys go toRuntimeOnlyDeclaredby name. They are produced only in code, byObjectGrid's in-codedata-tablenode orRelatedList's, and authored by no document. Three keys fit none of the classes, so the round stopped at them (see "Stopped" below).components-basic-pagination/with-item-count.jsonno longer authorspageSize/totalItems, which neither face declares and nothing reads. The plaintext interface block oncontent/docs/components/basic/pagination.mdxstops listing them, and its section is retitled from "With Page Size" to "On a Later Page"..changeset/6152-unmirrored-round4.md(@object-ui/typesminor,@object-ui/componentsminor, with the break stated). Four dated, append-only corrections were added, each 2 lines with frontmatter unchanged:6639-objectgrid-title-mirrored.md(the stale "97 + 1 + 23" sentence),7654-floating-chatbot-trigger-icon-tombstone.md,7655-chatbot-registration-authoring-faces.mdand9447-detail-view-handler-key-refusal.md. Every other pending changeset was re-read after the merges, including the 8 that landed since the base, and none is made false by this round.Ledger totals, before and after
These are read by the file's own pins (
objectui#7279derives every figure) and re-counted with the TypeScript parser on the final head.origin/maine420df3)2cc4ab9)UnmirroredDeclaredRuntimeOnlyDeclaredRuntimeOnlyNamedAllowListUnmirroredDeclared; union 11 = 9 + 2KnownDriftWiderThanDeclared,MirroredUndeclaredThe 24 keys that left
UnmirroredDeclaredmoved by three routes, which must not be added up as one repair: 2 were mirrored, 4 were retired, and 18 were reclassified by name. The reclassification is one move seen from both ledgers: it is not new debt, and it mirrors nothing.Per-key table
typeliterals)label·contentlabel.tsx), 0 documents (1 test)report·chartConfigwidget?.chartConfighits are plugin-dashboard'sDatasetWidget(widget: any, a dashboard widget), which plugin-report never imports. 0 documentsreport·reportTypespecReportToPresentation); 0 documentsdetail-view·autoDiscoverRelatedchatbot·requestBodychatbot-floating·floatingConfigfloatingConfig={schema.floatingConfig}); 6 of 7FloatingChatbotConfigmembers read, andtriggerIcon0FloatingChatbotConfigrestatementchatbot,chatbot-floating·displayModedetail-view·activities(7 reads),comments(4),history(7)RuntimeOnlyDeclaredby namedetail-view·recordNavigationRuntimeOnlyDeclaredby namedata-table·disableInnerScroll,manualPagination,manualSearch,manualSorting,page,rowActionDefs,rowClassName,rowCount,rowStyle,search,selectionResetKey,showAddRow,showSelectionCount,sortdata-table; produced only in code (ObjectGrid,RelatedList); 0 docs and 0 catalog documentsRuntimeOnlyDeclaredby name; the reasons are on the allow-listdata-table·editable,singleClickEditObjectGrid; 0 documents, butdata-table.mdxlists both and teacheseditable: truedata-table·selectionStyleRuntime probe for the three zero-read retirements
AGENTS.md requires more than a source census, because leftover keys reach a renderer as spread props. So the probe used the real
SchemaRendererand the real registry, and varied only the key. It was a one-off: the files were deleted afterwards andgit diff HEADis empty.report: the DOM is identical with and withoutchartConfigplusreportType(797 = 797 characters, byte-equal). Lit control: changingtitlechanges the DOM (805).detail-view: the DOM is identical with and withoutautoDiscoverRelated: true, after normalising React'suseIdtokens. The only raw difference wasradix-_r_5_againstradix-_r_d_. The data-source andfetchcall log is identical:getObjectSchema(account)and twosecurity/explainfetches. Lit control: changingtitlechanges the DOM (5943 against 5951).Ablations
The predictions were written at
4c272dcbefore any run, and every leg was restored with the blob equal toHEADandgit diff HEADempty.LabelSchemaliteral carryingcontentintolabel.tsx. Componentstsc --noEmitexits 2 with exactly one TS2322 there ('string' is not assignable to type 'undefined'), as predicted. This red direction also shows the consumer read the rebuilt.d.ts.zod/*.zod.tsfiles to basef61dab1.unmirrored-declared-round4-6152.test.tsreads27 failed | 6 passed (33), exactly as predicted, andtsc -p tsconfig.test.jsonexits 2 with its only error in the ledger reconciliation ofzod-mirror-parity.test.ts.rowCounttorowCountRenamed.tsc -p tsconfig.test.jsonexits 2 with exactly two TS2344, at the two allow-list pins, as predicted.Verification on the final head
2cc4ab9This round resumed after two container restarts, so every run below was redone on
2cc4ab9. That head carriesorigin/maine420df3, merged twice (never rebased): once through PR #11275, and before that through PRs #11267, #11268, #11269, #11271, #11273 and #11274. Each run went through the shared verify lock with at most 2 workers.@object-ui/types:type-check(the--noEmit,tsconfig.examples.jsonandtsconfig.test.jsonlegs) exits 0;vitest run packages/types/gives 299 files and 7498 tests passed;buildexits 0 (138 emitted files verified).type-checkexits 0 with 0 TS errors forcomponents,plugin-report,plugin-detailandplugin-chatbot.vitest run packages/plugin-report/ packages/plugin-chatbot/plusform-renderers.test.tsxgives 78 files, 827 passed and 7 skipped. All 228plugin-detailtest files, run in two halves, give 227 files passed plus 1 skipped, and 2264 tests passed plus 8 skipped.vitest run examples/schema-catalog/ packages/cli/plus the 17 app-shell files that import@object-ui/types/zodor sit inmetadata-admin/previews/__tests__give 77 files and 2741 tests passed.check:changeset-claims,check:pending-changeset-literals,check-changeset-presence(16 source files of 2 released packages, 1 changeset),check-changeset-no-major,check-changeset-fixed,check-changeset-overwrite(report-only; its 4 findings are the 4 dated appends above),check:control-bytes(9717 files),check:doc-fences,check:doc-snippets(697 of 697 blocks judged, 0 failed),check:doc-examples,check:doc-types,check:doc-example-ids,check:doc-example-readers,check:skill-examples,check:handler-key-reads,check:component-surface-parity(report-only),check:designer-field-key-parity,check:element-data-source-declaration,check:new-line-citations(0 new),check:prompt-keys,check:readme-exports,check:spec-symbols,check:test-path-roots,check:unreferenced-sourcesandcheck-type-check-coverage.doc-snippetsanddoc-examplesran after the scoped build their own--build-filternames (35 turbo tasks, all successful).eslint --no-inline-config --format jsonover the 16 lintable changed files gives 0 errors. All 16 were judged and 0 were ignored, a population read from eslint's own output. The 39 warnings are pre-existingno-explicit-any, and the diff adds no explicitany.eslint.config.jsdeclares noparserOptions.projectorprojectService, and no custom rule ineslint-rules/reads the disk, so this diff cannot move any untouched file's verdict. The repo-widepnpm lintis CI's.check-governed-queue-guard.mjs --testover the 23 paths reports NOT GOVERNED.check:sdui-registration-pins: it needs a console build, and this diff changes no registration.pnpm testfarm and repo-wide lint: CI's.plugin-grid: its code and tests are untouched. The 14 reclassified keys moved between two test ledgers and no declaration changed.Stopped (ruling needed; reported in the card report with options)
DataTableSchema.editableandsingleClickEdit.data-tablereads both andObjectGridsets both in code, while no document authors them. Butcontent/docs/components/complex/data-table.mdxlists both in its interface block and teacheseditable: true. Filing them runtime-only would contradict that page. Mirroring them would rest on no authored document, and, from the source, an authorededitable: truestages cell edits locally and persists nothing without theonRowSave/onCellChangefunction slots.DataTableSchema.selectionStyle.data-tablereads it ('always'or'hover'), and nothing authors or produces it in either repository.ChatbotSchema.floatingConfighas 0 reads on thechatbotnode (onlychatbot-floatingreads it), which makes it an ADR-0049 narrowing candidate. Thechatbothalf offloating-chatbot-trigger-icon-retired.test.tspins its absence as a tripwire.Parallel discipline
PR #11269 and PR #11273 edited
zod-mirror-parity.test.tsin disjoint hunks: theKnownDrifttotal line, the Kanban entry and oneEXCLUSIONSrow. Both merges were clean. This round's ledger edits stay in theUnmirroredDeclared/RuntimeOnlyDeclared/RuntimeOnlyNamedAllowListblocks, their prose totals and its own pairs' entries. Every prose total was reconciled to the measured count above. The diff does not touchzod/objectql.zod.ts,zod/index.zod.ts,zod/nested-component-walk.ts,strict-authoring-face.ts,zod/README.md,field-types.ts, theDetailViewFieldmember, ordata-table.tsx(read only).Acceptance notes
7654-chatbot-display-mode-tombstone.md,6150-…,7804-…,6175-…,7722-…,7947-…and8072-….Session:
https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHhGenerated by Claude Code