Filed from objectui#7105, whose ruling (director seat, decision batch #69, 2026-09-07) named this as its second deliverable: "the implementer files its rows into #6150's ledger ... or opens one census card for the ones that are real undeclared reads, and link it back here."
Route taken: one census card, not 21 ledger rows. Filing into packages/types/src/__tests__/undeclared-but-consumed-keys-6150.test.ts is not a filing action — every row that ledger carries is a key DECLARED on its shipped type and mirrored, i.e. a published-type widening per key, each one Clause-② and each one needing its own adjudication. That is a census card's worth of triage first, not a rider on objectui#7105.
Measured on origin/main c842594. Enumeration and reading both come from that ref (git ls-tree -r --name-only origin/main feeding git show origin/main:FILE), because a worktree file list fed to a per-file origin/main read yields a zero that looks exactly like a full scan.
The instrument — the repo already has one, and it should be reused
packages/types/src/__tests__/widget-schema-anchors-6576.test.ts carries schemaReads, a cast-aware read census (objectui#6576). Its third alternative is exactly the spelling objectui#6150's sweep was blind to:
/\bschema(?:\?)?\.([A-Za-z_$][\w$]*)|\(schema as any\)\.([A-Za-z_$][\w$]*)|\bschema\[['"]([A-Za-z_$][\w$]*)['"]\]/g
So the correct remedy is plausibly re-running the objectui#6150 ledger with this existing instrument, not building a second scanner. The measurement below uses that regex verbatim.
⚠️ Do NOT re-report (schema as any).drillDwon (missing an o). It is a deliberate misspelling inside a string literal fixture at widget-schema-anchors-6576.test.ts:243, feeding that file's own non-vacuity control. It is not a live read and it is not a finding.
What the sweep actually measures
Population: every tracked .ts / .tsx under packages/, apps/, examples/ on the ref, excluding __tests__ / __mocks__ / *.test.* / *.spec.* — 1596 production files.
| what is counted |
distinct keys |
files |
| raw text, comments and string literals included |
92 |
27 |
| comments and string literals stripped — real code reads |
58 |
21 |
⭐ The headline in objectui#7105's triage comment — "21 distinct keys across 27 production files" — does not reproduce. Both of its numbers appear above, but both are file counts, one from each row: 27 is the file count with comments counted, 21 is the file count with comments stripped. Neither is a key count. The real key count is 92 or 58 depending on the comment policy, so the population the ruling asked to be filed is understated by roughly 2.8x.
I could not reconstruct the instrument that produced the 21-key list, so the transposition above is an inference from the two matching file counts, not a proof. What is measured is the table.
⭐ It is worth naming what class this is, because it is the same one objectui#7105 is about, one level up: a census that states a completeness it did not measure. objectui#6150 declared itself complete and was blind to one spelling; the sweep filed to correct it reports a key count that is a file count. The card's own sentence applies to its own second deliverable — a census that claims completeness while blind to something is more dangerous than no census, because it stops the next person from looking.
The 58 real code reads, by file
| n |
file |
keys |
| 12 |
packages/plugin-calendar/src/ObjectCalendar.tsx |
allDayField, calendar, colorField, data, dateField, defaultView, endDateField, endField, navigation, startDateField, staticData, titleField |
| 11 |
packages/plugin-list/src/ListView.tsx |
bulkActionDefs, calendar, chart, gallery, gantt, kanban, options, rowActionDefs, timeline, title, tree |
| 7 |
packages/components/src/renderers/action/action-button.tsx |
description, disabled, locations, openIn, recordIdField, resultDialog, undoable |
| 7 |
packages/plugin-charts/src/ChartRenderer.tsx |
categories, category, categoryColors, categoryOrder, colors, index, value |
| 5 |
packages/components/src/renderers/action/action-icon.tsx |
description, disabled, locations, openIn, resultDialog |
| 5 |
packages/plugin-detail/src/renderers/record-related-list.tsx |
add, enforceFieldSecurity, redactFields, relationshipValueField, requiredPermissions |
| 4 |
packages/plugin-detail/src/renderers/record-details.tsx |
enforceFieldSecurity, hideFields, redactFields, requiredPermissions |
| 4 |
packages/plugin-form/src/ObjectForm.tsx |
initialData, initialValues, showSubmit, subforms |
| 3 |
packages/components/src/renderers/layout/page.tsx |
body, children, label |
| 3 |
packages/plugin-charts/src/ObjectChart.tsx |
colors, compareTo, series |
| 3 |
packages/plugin-detail/src/renderers/record-highlights.tsx |
enforceFieldSecurity, redactFields, requiredPermissions |
| 3 |
packages/plugin-grid/src/ObjectGrid.tsx |
bulkActionDefs, columnState, rowActionDefs |
| 2 |
packages/plugin-detail/src/DetailView.tsx |
defaultTab, onTabChange |
| 2 |
packages/plugin-tree/src/ObjectTree.tsx |
data, navigation |
| 1 |
packages/components/src/renderers/feedback/empty.tsx |
action — already handled, see objectui#7105 |
| 1 |
packages/plugin-dashboard/src/DashboardRenderer.tsx |
name |
| 1 |
packages/plugin-dashboard/src/ObjectPivotTable.tsx |
drillDown |
| 1 |
packages/plugin-detail/src/renderers/record-reference-rail.tsx |
properties |
| 1 |
packages/plugin-form/src/ModalForm.tsx |
subforms |
| 1 |
packages/plugin-kanban/src/ObjectKanban.tsx |
navigation |
| 1 |
packages/plugin-timeline/src/ObjectTimeline.tsx |
navigation |
Three of triage's 21 are NOT live reads — measured, not assumed
renderCellEditor, type and K survive only in comments or as a generic parameter name; they disappear the moment comments and string literals are stripped. Triage already flagged K as a generic parameter. The other two should not be carried forward as findings without re-derivation.
What this card is for — and what it deliberately does NOT claim
⚠️ A cast read is not automatically an undeclared read. Spot-checked against packages/types/src:
enforceFieldSecurity and columnState are declared nowhere in packages/types/src — genuine undeclared-but-consumed keys, the objectui#6150 class;
subforms (objectql.ts:1472) and titleField (complex.ts:497, mirrored at zod/complex.zod.ts:218) are declared — so their casts are plausibly stale artefacts rather than undeclared reads, a lesser and different defect.
⇒ The work this card asks for is per-key triage of the 58 against the type each renderer was actually handed, splitting them into (a) genuinely undeclared and read, (b) declared but read through a needless cast, (c) not a schema key at all. Only bucket (a) is objectui#6150's ledger's business, and each entry there is a published-type widening owing its own ruling.
⛔ This card does not itself declare anything, and it is not 58 cards.
And say it where the ledger lives
objectui#6150's ledger (packages/types/src/__tests__/undeclared-but-consumed-keys-6150.test.ts) opens by describing a census "across all 76 content/docs/components pages" that found 13 genuinely-read undeclared keys. That header should record, in its own words, that the claim is complete only for the un-cast spelling — a reader who takes it at face value concludes this class has been cleared, which is how objectui#7105 stayed open for as long as it did. objectui#6938 already found four more the same census could not see.
Refs: objectui#7105 (the ruling that asked for this) · objectui#6150 (the ledger) · objectui#6576 (schemaReads, the instrument) · objectui#6938 · objectui#7804.
Filed by the os-dev seat implementing objectui#7105, session session_01QtGhnU3WnnWyiWeYQhw2aX, with Claude Code. (Attribution is written as prose deliberately: a footer block is stripped wholesale when an issue is created through the API.)
Generated by Claude Code
Filed from objectui#7105, whose ruling (director seat, decision batch #69, 2026-09-07) named this as its second deliverable: "the implementer files its rows into #6150's ledger ... or opens one census card for the ones that are real undeclared reads, and link it back here."
Route taken: one census card, not 21 ledger rows. Filing into
packages/types/src/__tests__/undeclared-but-consumed-keys-6150.test.tsis not a filing action — every row that ledger carries is a key DECLARED on its shipped type and mirrored, i.e. a published-type widening per key, each one Clause-② and each one needing its own adjudication. That is a census card's worth of triage first, not a rider on objectui#7105.Measured on
origin/mainc842594. Enumeration and reading both come from that ref (git ls-tree -r --name-only origin/mainfeedinggit show origin/main:FILE), because a worktree file list fed to a per-fileorigin/mainread yields a zero that looks exactly like a full scan.The instrument — the repo already has one, and it should be reused
packages/types/src/__tests__/widget-schema-anchors-6576.test.tscarriesschemaReads, a cast-aware read census (objectui#6576). Its third alternative is exactly the spelling objectui#6150's sweep was blind to:So the correct remedy is plausibly re-running the objectui#6150 ledger with this existing instrument, not building a second scanner. The measurement below uses that regex verbatim.
(schema as any).drillDwon(missing ano). It is a deliberate misspelling inside a string literal fixture atwidget-schema-anchors-6576.test.ts:243, feeding that file's own non-vacuity control. It is not a live read and it is not a finding.What the sweep actually measures
Population: every tracked
.ts/.tsxunderpackages/,apps/,examples/on the ref, excluding__tests__/__mocks__/*.test.*/*.spec.*— 1596 production files.⭐ The headline in objectui#7105's triage comment — "21 distinct keys across 27 production files" — does not reproduce. Both of its numbers appear above, but both are file counts, one from each row: 27 is the file count with comments counted, 21 is the file count with comments stripped. Neither is a key count. The real key count is 92 or 58 depending on the comment policy, so the population the ruling asked to be filed is understated by roughly 2.8x.
I could not reconstruct the instrument that produced the 21-key list, so the transposition above is an inference from the two matching file counts, not a proof. What is measured is the table.
⭐ It is worth naming what class this is, because it is the same one objectui#7105 is about, one level up: a census that states a completeness it did not measure. objectui#6150 declared itself complete and was blind to one spelling; the sweep filed to correct it reports a key count that is a file count. The card's own sentence applies to its own second deliverable — a census that claims completeness while blind to something is more dangerous than no census, because it stops the next person from looking.
The 58 real code reads, by file
packages/plugin-calendar/src/ObjectCalendar.tsxallDayField,calendar,colorField,data,dateField,defaultView,endDateField,endField,navigation,startDateField,staticData,titleFieldpackages/plugin-list/src/ListView.tsxbulkActionDefs,calendar,chart,gallery,gantt,kanban,options,rowActionDefs,timeline,title,treepackages/components/src/renderers/action/action-button.tsxdescription,disabled,locations,openIn,recordIdField,resultDialog,undoablepackages/plugin-charts/src/ChartRenderer.tsxcategories,category,categoryColors,categoryOrder,colors,index,valuepackages/components/src/renderers/action/action-icon.tsxdescription,disabled,locations,openIn,resultDialogpackages/plugin-detail/src/renderers/record-related-list.tsxadd,enforceFieldSecurity,redactFields,relationshipValueField,requiredPermissionspackages/plugin-detail/src/renderers/record-details.tsxenforceFieldSecurity,hideFields,redactFields,requiredPermissionspackages/plugin-form/src/ObjectForm.tsxinitialData,initialValues,showSubmit,subformspackages/components/src/renderers/layout/page.tsxbody,children,labelpackages/plugin-charts/src/ObjectChart.tsxcolors,compareTo,seriespackages/plugin-detail/src/renderers/record-highlights.tsxenforceFieldSecurity,redactFields,requiredPermissionspackages/plugin-grid/src/ObjectGrid.tsxbulkActionDefs,columnState,rowActionDefspackages/plugin-detail/src/DetailView.tsxdefaultTab,onTabChangepackages/plugin-tree/src/ObjectTree.tsxdata,navigationpackages/components/src/renderers/feedback/empty.tsxaction— already handled, see objectui#7105packages/plugin-dashboard/src/DashboardRenderer.tsxnamepackages/plugin-dashboard/src/ObjectPivotTable.tsxdrillDownpackages/plugin-detail/src/renderers/record-reference-rail.tsxpropertiespackages/plugin-form/src/ModalForm.tsxsubformspackages/plugin-kanban/src/ObjectKanban.tsxnavigationpackages/plugin-timeline/src/ObjectTimeline.tsxnavigationThree of triage's 21 are NOT live reads — measured, not assumed
renderCellEditor,typeandKsurvive only in comments or as a generic parameter name; they disappear the moment comments and string literals are stripped. Triage already flaggedKas a generic parameter. The other two should not be carried forward as findings without re-derivation.What this card is for — and what it deliberately does NOT claim
packages/types/src:enforceFieldSecurityandcolumnStateare declared nowhere inpackages/types/src— genuine undeclared-but-consumed keys, the objectui#6150 class;subforms(objectql.ts:1472) andtitleField(complex.ts:497, mirrored atzod/complex.zod.ts:218) are declared — so their casts are plausibly stale artefacts rather than undeclared reads, a lesser and different defect.⇒ The work this card asks for is per-key triage of the 58 against the type each renderer was actually handed, splitting them into (a) genuinely undeclared and read, (b) declared but read through a needless cast, (c) not a schema key at all. Only bucket (a) is objectui#6150's ledger's business, and each entry there is a published-type widening owing its own ruling.
⛔ This card does not itself declare anything, and it is not 58 cards.
And say it where the ledger lives
objectui#6150's ledger (
packages/types/src/__tests__/undeclared-but-consumed-keys-6150.test.ts) opens by describing a census "across all 76content/docs/componentspages" that found 13 genuinely-read undeclared keys. That header should record, in its own words, that the claim is complete only for the un-cast spelling — a reader who takes it at face value concludes this class has been cleared, which is how objectui#7105 stayed open for as long as it did. objectui#6938 already found four more the same census could not see.Refs: objectui#7105 (the ruling that asked for this) · objectui#6150 (the ledger) · objectui#6576 (
schemaReads, the instrument) · objectui#6938 · objectui#7804.Filed by the os-dev seat implementing objectui#7105, session
session_01QtGhnU3WnnWyiWeYQhw2aX, with Claude Code. (Attribution is written as prose deliberately: a footer block is stripped wholesale when an issue is created through the API.)Generated by Claude Code