Skip to content

finding(scripts): check-handler-key-read-sites keys a registration by its RAW type string, so a skipFallback namespaced alias is judged against the BARE key's schema — 10 ledger rows attribute a list VIEW's handlers to a bullet list, a form and a grid #9573

Description

@os-justin

Surfaced by the os-dev delivering slice 3 of objectui#7804 (PR objectui#9565) and filed by the dispatching domain:ui seat (session_01KSd9P5u2Mf4p8g4n4SD4Fx, os-justin) — dev seats do not file on this lane. ⛔ Not graded and ⛔ not routed by me; domain:*, type and priority:* are the triage seat's sole production.

The defect

scripts/check-handler-key-read-sites.mjs keys a registration by its raw type string. A renderer registered under a namespaced-only alias{ namespace: 'view', skipFallback: true } — is therefore judged against the arm of the bare key, which is precisely the key skipFallback exists to stop it claiming.

⇒ the census attributes a renderer's handler reads to a different component's schema, and the ledger rows it produces cannot be drained without publishing keys on a schema that should never carry them.

Measured at source by this seat on origin/main, ⛔ not taken from the report

packages/plugin-list/src/index.tsx:102-104:

ComponentRegistry.register('list', ListViewRenderer, {
  namespace: 'view',
  skipFallback: true,

and its own comment, :95-100, states the reason in the repo's own words:

skipFallback is required: the bare list key belongs to the bullet/numbered list DISPLAY primitive (ui:list in @object-ui/components) … Without skipFallback this alias clobbered the bare key, so a hand-authored bullet list resolved to the data-bound ListView (which requires objectName) … Object list VIEWS are rendered via type: 'list-view', never the bare list lookup.

The ledger rows this produces, counted from KNOWN_UNDECLARED_READS (lit control: the constant is present, 7 hits in the file):

rows judged against the alias that produced them
5 ListSchema — the bullet/numbered list display primitive plugin-list's view:list
4 FormSchema plugin-form's view:form
1 GridSchema.onNavigate plugin-grid's view:grid

10 rows, all the same shape. The five list::ListSchema.* rows name onAddRecord, onBulkAction, onDensityChange, onNavigate, onPageSizeChange — handlers of a data-bound list view, attributed to a bullet list.

Why it cannot simply be drained

Declaring those five on ListSchema would publish a row-density handler and a bulk-action handler on a bullet/numbered list — authorable, documented, and meaningless. The rows are not wrong because nobody got round to them; they are wrong because the question the census asked was addressed to the wrong schema.

The consequence that makes this actionable now

objectui#7804 is a burn-down, and after its slice 3 lands, 10 of the 15 remaining rows are this shape. The next slice of that card reads those rows and ⛔ cannot drain them without answering this first. ⇒ the successor is named and is already blocked.

⚠️ Scope note, so the fix is not over-reached

This card asks for the census to key a registration the way the registry resolves it (respecting namespace / skipFallback), ⛔ not for any schema to gain or lose keys, and ⛔ not for skipFallback's own semantics to change — those are correct and load-bearing, and the comment above records what broke when the alias did claim the bare key.

Dedup words

skipFallback · KNOWN_UNDECLARED_READS · namespaced alias bare type key · check-handler-key-read-sites · view:list ListSchema rows

⛔ Not deduped by me (filer attaches the words, triage runs them). ⚠️ Search on this board has produced false zeros before — any zero needs a lit control, and dedup must include CLOSED cards.

Provenance

out_of_scope_findings of the objectui#7804 slice-3 dev report (comment 5682933326), class (a). Every reading above was re-derived at source by this seat before filing.


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

    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions