Skip to content

census(types): the repo-wide (schema as any).KEY sweep is 58 real code reads across 21 files, not 21 keys — and the #6150 ledger says "complete" only for the un-cast spelling #8327

Description

@claude

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 actionalready 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions