Skip to content

finding(tests): a corpus scan for objectui#8688's shape — a waitFor on one recorder array, a read of another — leaves 9 unaudited sites outside packages/permissions #8690

Description

@os-justin

Filed by the objectui#8688 dev seat (branch claude/issue-8688-provider-ctx-wait-alignment, PR #8689) as an out-of-scope by-product. ⛔ Not claimed, not assigned. The number below is a raw detector count, not a diagnosis — every site still needs a human reading.

What was scanned

objectui#8688 was one instance of: await waitFor(...) keyed on one recorder array, followed by a read of a different recorder array, with nothing establishing the second was filled. Fixing it needed a sweep, so a mechanical detector was written and pointed at the in-scope package. It is cheap to point at the whole corpus, so that was measured too.

Algorithm (about 30 lines of node; re-derivable from this description alone):

  1. Per file, discover recorders mechanically: every identifier appearing as the target of a .push( call.
  2. For each await waitFor(, balance parentheses to the end of the wait, and collect which recorders are named inside it — the WAIT SET.
  3. Scan forward to the next await (or the end of the block), collecting recorders that are read (excluding their own .push( lines).
  4. Flag any read of a recorder the wait did not name.

The reading

Population: 2776 *.test.ts / *.test.tsx files tracked in the repo, on da5e4f69e.

bucket count what it means
total flags 160 before triage
wait named a recorder — the strict objectui#8688 shape 9 (7 files) worth reading
wait named no recorder (a DOM node, a hook result, a test id) 151 out of the detector's judgement — it cannot tell whether that signal gates the read

The 151 are not claimed as defects and mostly look benign on spot-check (e.g. a recorder filled causally upstream of the awaited signal, in the same render commit). They are reported only so the 160 is not mistaken for 160 findings.

The 9 strict-shape sites

  • packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.packageDoorFacets.test.tsx:241 — waits server.saved, reads server.savedOpts[0]
  • packages/plugin-charts/src/ObjectChart.optionColors.test.tsx:285 — waits host.calls, reads host.inits[0]
  • packages/plugin-dashboard/src/__tests__/DatasetWidget.relabel.test.tsx:206 — waits host.calls, reads host.inits[0]
  • packages/plugin-designer/src/MetadataObjectsPage.lookupKeying.test.tsx:380 — waits puts, reads deletes (an absence assertion)
  • packages/plugin-list/src/__tests__/ListView.objectProviderBinding-7477.test.tsx:161, :191, :231 — waits one renderer's props recorder, asserts the other is empty
  • packages/plugin-list/src/__tests__/ListView.timeline-binding.test.tsx:82
  • packages/plugin-tree/src/ObjectTree.settledSchemaKeying-6481.test.tsx:169

⚠️ Several are absence assertions ("the other renderer got nothing"), which is a related but different weakness: an absence can also be satisfied by not having rendered yet, so it is weak in the same direction but not by the same mechanism. Two more (calls then inits[0]) are plausibly sound by construction — both arrays are pushed by the same fetch double, likely in one statement. Read each; do not batch-repair.

Dedup — declared, not claimed

⚠️ This repo's search_issues returns false zeros (recorded on objectui#8688), so no zero from it is evidence of absence. Channel used instead: read the nearest neighbours by number. objectui#8665 is the closest and is a different population — the eleven named contractEnvelope-6839 files, keyed on mount vs rows signals in the DOM. Its checklist is about DOM completion anchors; this is about two plain arrays in a test's own closure. The intersection of the two lists is empty (ObjectTree.settledSchemaKeying-6481 is flagged here and is not one of #8665's eleven). objectui#8534 (kanban mirrored state) and objectui#8664 / objectui#6839 (the worked ObjectTree repair) are the same family at a different layer.

Why this is a card and not a PR

The detector answers where to look, never what is wrong: three of the nine may well be sound. A batch repair driven by the flag list would be the exact mistake objectui#8665 warns about — porting a diff shape into an undiagnosed race.

Activity

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

Metadata

Metadata

Assignees

Labels

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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions