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):
- Per file, discover recorders mechanically: every identifier appearing as the target of a
.push( call.
- For each
await waitFor(, balance parentheses to the end of the wait, and collect which recorders are named inside it — the WAIT SET.
- Scan forward to the next
await (or the end of the block), collecting recorders that are read (excluding their own .push( lines).
- 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.
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):
.push(call.await waitFor(, balance parentheses to the end of the wait, and collect which recorders are named inside it — the WAIT SET.await(or the end of the block), collecting recorders that are read (excluding their own.push(lines).The reading
Population: 2776
*.test.ts/*.test.tsxfiles tracked in the repo, onda5e4f69e.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— waitsserver.saved, readsserver.savedOpts[0]packages/plugin-charts/src/ObjectChart.optionColors.test.tsx:285— waitshost.calls, readshost.inits[0]packages/plugin-dashboard/src/__tests__/DatasetWidget.relabel.test.tsx:206— waitshost.calls, readshost.inits[0]packages/plugin-designer/src/MetadataObjectsPage.lookupKeying.test.tsx:380— waitsputs, readsdeletes(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 emptypackages/plugin-list/src/__tests__/ListView.timeline-binding.test.tsx:82packages/plugin-tree/src/ObjectTree.settledSchemaKeying-6481.test.tsx:169callstheninits[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
search_issuesreturns 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 namedcontractEnvelope-6839files, 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-6481is 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.