[measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

Description

@os-sam

⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

rungbody originally saidactual at 7a5da1414
tier 11,1051,606
tier 3176475 (tier-2 witness rung retired)
tier 3 + settle149
published population17394

⚠️ The per-package split of the published 94 — use ONLY this for slicing

packagein the 94packagein the 94
app-shell41plugin-dashboard3
components14plugin-form3
plugin-detail9plugin-grid3
plugin-list7plugin-charts2
apps/console7plugin-chatbot2
fields3plugin-kanban0

Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

The class

#6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

The measurement ⛔ SUPERSEDED — see the banner

Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

tierdefinitionhits
1async block, first sync DOM read, no gate naming that surface1,105
2+ surface async-witnessed elsewhere in its own package413
3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

Tier 3 is the real shape — the awaited settle never touches the DOM.

The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

What is already done, and what remains

packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

packagehitspackagehits
app-shell58plugin-detail4
fields28plugin-calendar3
apps/console25plugin-dashboard3
components16react3
plugin-form11e2e/live3
plugin-grid9examples/schema-catalog2
plugin-charts5plugin-list2
plugin-chatbot1

⭐ Calibration — apply this before dispatching, it is the most useful thing here

From the implementer, who hand-triaged its own package's hits:

my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

⛔ The trap that makes this not-mechanical

#6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

Suggested shape

Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

Related

Metadata

Metadata

Assignees

Labels

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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    [measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

    Description

    @os-sam

    ⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

    The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

    rungbody originally saidactual at 7a5da1414
    tier 11,1051,606
    tier 3176475 (tier-2 witness rung retired)
    tier 3 + settle149
    published population17394

    ⚠️ The per-package split of the published 94 — use ONLY this for slicing

    packagein the 94packagein the 94
    app-shell41plugin-dashboard3
    components14plugin-form3
    plugin-detail9plugin-grid3
    plugin-list7plugin-charts2
    apps/console7plugin-chatbot2
    fields3plugin-kanban0

    Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

    Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

    Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

    The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

    Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

    The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

    Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


    Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

    The class

    #6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

    ⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

    The measurement ⛔ SUPERSEDED — see the banner

    Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

    tierdefinitionhits
    1async block, first sync DOM read, no gate naming that surface1,105
    2+ surface async-witnessed elsewhere in its own package413
    3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

    Tier 3 is the real shape — the awaited settle never touches the DOM.

    The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

    What is already done, and what remains

    packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

    Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

    packagehitspackagehits
    app-shell58plugin-detail4
    fields28plugin-calendar3
    apps/console25plugin-dashboard3
    components16react3
    plugin-form11e2e/live3
    plugin-grid9examples/schema-catalog2
    plugin-charts5plugin-list2
    plugin-chatbot1

    ⭐ Calibration — apply this before dispatching, it is the most useful thing here

    From the implementer, who hand-triaged its own package's hits:

    my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

    A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

    ⛔ The trap that makes this not-mechanical

    #6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

    ⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

    Suggested shape

    Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

    Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

    Related

    Metadata

    Metadata

    Assignees

    Labels

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      [measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

      Description

      @os-sam

      ⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

      The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

      rungbody originally saidactual at 7a5da1414
      tier 11,1051,606
      tier 3176475 (tier-2 witness rung retired)
      tier 3 + settle149
      published population17394

      ⚠️ The per-package split of the published 94 — use ONLY this for slicing

      packagein the 94packagein the 94
      app-shell41plugin-dashboard3
      components14plugin-form3
      plugin-detail9plugin-grid3
      plugin-list7plugin-charts2
      apps/console7plugin-chatbot2
      fields3plugin-kanban0

      Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

      Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

      Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

      The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

      Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

      The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

      Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


      Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

      The class

      #6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

      ⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

      The measurement ⛔ SUPERSEDED — see the banner

      Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

      tierdefinitionhits
      1async block, first sync DOM read, no gate naming that surface1,105
      2+ surface async-witnessed elsewhere in its own package413
      3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

      Tier 3 is the real shape — the awaited settle never touches the DOM.

      The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

      What is already done, and what remains

      packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

      Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

      packagehitspackagehits
      app-shell58plugin-detail4
      fields28plugin-calendar3
      apps/console25plugin-dashboard3
      components16react3
      plugin-form11e2e/live3
      plugin-grid9examples/schema-catalog2
      plugin-charts5plugin-list2
      plugin-chatbot1

      ⭐ Calibration — apply this before dispatching, it is the most useful thing here

      From the implementer, who hand-triaged its own package's hits:

      my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

      A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

      ⛔ The trap that makes this not-mechanical

      #6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

      ⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

      Suggested shape

      Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

      Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

      Related

      Metadata

      Metadata

      Assignees

      Labels

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

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        [measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

        Description

        @os-sam

        ⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

        The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

        rungbody originally saidactual at 7a5da1414
        tier 11,1051,606
        tier 3176475 (tier-2 witness rung retired)
        tier 3 + settle149
        published population17394

        ⚠️ The per-package split of the published 94 — use ONLY this for slicing

        packagein the 94packagein the 94
        app-shell41plugin-dashboard3
        components14plugin-form3
        plugin-detail9plugin-grid3
        plugin-list7plugin-charts2
        apps/console7plugin-chatbot2
        fields3plugin-kanban0

        Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

        Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

        Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

        The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

        Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

        The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

        Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


        Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

        The class

        #6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

        ⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

        The measurement ⛔ SUPERSEDED — see the banner

        Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

        tierdefinitionhits
        1async block, first sync DOM read, no gate naming that surface1,105
        2+ surface async-witnessed elsewhere in its own package413
        3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

        Tier 3 is the real shape — the awaited settle never touches the DOM.

        The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

        What is already done, and what remains

        packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

        Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

        packagehitspackagehits
        app-shell58plugin-detail4
        fields28plugin-calendar3
        apps/console25plugin-dashboard3
        components16react3
        plugin-form11e2e/live3
        plugin-grid9examples/schema-catalog2
        plugin-charts5plugin-list2
        plugin-chatbot1

        ⭐ Calibration — apply this before dispatching, it is the most useful thing here

        From the implementer, who hand-triaged its own package's hits:

        my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

        A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

        ⛔ The trap that makes this not-mechanical

        #6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

        ⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

        Suggested shape

        Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

        Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

        Related

        Metadata

        Metadata

        Assignees

        Labels

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

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          [measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

          Description

          @os-sam

          ⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

          The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

          rungbody originally saidactual at 7a5da1414
          tier 11,1051,606
          tier 3176475 (tier-2 witness rung retired)
          tier 3 + settle149
          published population17394

          ⚠️ The per-package split of the published 94 — use ONLY this for slicing

          packagein the 94packagein the 94
          app-shell41plugin-dashboard3
          components14plugin-form3
          plugin-detail9plugin-grid3
          plugin-list7plugin-charts2
          apps/console7plugin-chatbot2
          fields3plugin-kanban0

          Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

          Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

          Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

          The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

          Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

          The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

          Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


          Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

          The class

          #6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

          ⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

          The measurement ⛔ SUPERSEDED — see the banner

          Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

          tierdefinitionhits
          1async block, first sync DOM read, no gate naming that surface1,105
          2+ surface async-witnessed elsewhere in its own package413
          3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

          Tier 3 is the real shape — the awaited settle never touches the DOM.

          The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

          What is already done, and what remains

          packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

          Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

          packagehitspackagehits
          app-shell58plugin-detail4
          fields28plugin-calendar3
          apps/console25plugin-dashboard3
          components16react3
          plugin-form11e2e/live3
          plugin-grid9examples/schema-catalog2
          plugin-charts5plugin-list2
          plugin-chatbot1

          ⭐ Calibration — apply this before dispatching, it is the most useful thing here

          From the implementer, who hand-triaged its own package's hits:

          my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

          A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

          ⛔ The trap that makes this not-mechanical

          #6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

          ⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

          Suggested shape

          Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

          Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

          Related

          Metadata

          Metadata

          Assignees

          Labels

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

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            [measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

            Description

            @os-sam

            ⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

            The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

            rungbody originally saidactual at 7a5da1414
            tier 11,1051,606
            tier 3176475 (tier-2 witness rung retired)
            tier 3 + settle149
            published population17394

            ⚠️ The per-package split of the published 94 — use ONLY this for slicing

            packagein the 94packagein the 94
            app-shell41plugin-dashboard3
            components14plugin-form3
            plugin-detail9plugin-grid3
            plugin-list7plugin-charts2
            apps/console7plugin-chatbot2
            fields3plugin-kanban0

            Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

            Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

            Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

            The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

            Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

            The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

            Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


            Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

            The class

            #6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

            ⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

            The measurement ⛔ SUPERSEDED — see the banner

            Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

            tierdefinitionhits
            1async block, first sync DOM read, no gate naming that surface1,105
            2+ surface async-witnessed elsewhere in its own package413
            3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

            Tier 3 is the real shape — the awaited settle never touches the DOM.

            The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

            What is already done, and what remains

            packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

            Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

            packagehitspackagehits
            app-shell58plugin-detail4
            fields28plugin-calendar3
            apps/console25plugin-dashboard3
            components16react3
            plugin-form11e2e/live3
            plugin-grid9examples/schema-catalog2
            plugin-charts5plugin-list2
            plugin-chatbot1

            ⭐ Calibration — apply this before dispatching, it is the most useful thing here

            From the implementer, who hand-triaged its own package's hits:

            my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

            A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

            ⛔ The trap that makes this not-mechanical

            #6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

            ⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

            Suggested shape

            Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

            Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

            Related

            Metadata

            Metadata

            Assignees

            Labels

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

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              [measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

              Description

              @os-sam

              ⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

              The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

              rungbody originally saidactual at 7a5da1414
              tier 11,1051,606
              tier 3176475 (tier-2 witness rung retired)
              tier 3 + settle149
              published population17394

              ⚠️ The per-package split of the published 94 — use ONLY this for slicing

              packagein the 94packagein the 94
              app-shell41plugin-dashboard3
              components14plugin-form3
              plugin-detail9plugin-grid3
              plugin-list7plugin-charts2
              apps/console7plugin-chatbot2
              fields3plugin-kanban0

              Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

              Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

              Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

              The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

              Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

              The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

              Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


              Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

              The class

              #6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

              ⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

              The measurement ⛔ SUPERSEDED — see the banner

              Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

              tierdefinitionhits
              1async block, first sync DOM read, no gate naming that surface1,105
              2+ surface async-witnessed elsewhere in its own package413
              3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

              Tier 3 is the real shape — the awaited settle never touches the DOM.

              The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

              What is already done, and what remains

              packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

              Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

              packagehitspackagehits
              app-shell58plugin-detail4
              fields28plugin-calendar3
              apps/console25plugin-dashboard3
              components16react3
              plugin-form11e2e/live3
              plugin-grid9examples/schema-catalog2
              plugin-charts5plugin-list2
              plugin-chatbot1

              ⭐ Calibration — apply this before dispatching, it is the most useful thing here

              From the implementer, who hand-triaged its own package's hits:

              my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

              A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

              ⛔ The trap that makes this not-mechanical

              #6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

              ⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

              Suggested shape

              Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

              Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

              Related

              Metadata

              Metadata

              Assignees

              Labels

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

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                [measured out] async-settled surfaces read with a SYNCHRONOUS query — 21 sites triaged across 4 packages, ZERO defects; #6959 was the only one #6967

                Description

                @os-sam

                ⛔ THE TABLE BELOW IS SUPERSEDED — DO NOT DISPATCH FROM IT

                The census was re-derived on 2026-08-31 and this body's original numbers did not survive. The per-site lists, the 55 subtracted sites, and the instrument itself are published in a comment on this card — cut every slice from those, not from the table further down.

                rungbody originally saidactual at 7a5da1414
                tier 11,1051,606
                tier 3176475 (tier-2 witness rung retired)
                tier 3 + settle149
                published population17394

                ⚠️ The per-package split of the published 94 — use ONLY this for slicing

                packagein the 94packagein the 94
                app-shell41plugin-dashboard3
                components14plugin-form3
                plugin-detail9plugin-grid3
                plugin-list7plugin-charts2
                apps/console7plugin-chatbot2
                fields3plugin-kanban0

                Sums to 94, and 94 + 55 absence-only = 149 = tier 3 + settle.

                Do not confuse these with the tier-3+settle counts, which are larger because the 55 absence-only sites have not yet come out of them: plugin-detail is 14 there but 9 here, plugin-list 12 there but 7 here, and plugin-kanban is 3 there but 0 here because all three of its candidates are absence-only. An earlier version of this banner quoted the tier-3+settle figures next to the published total — my error. A slice cut at 14 or 12 over-scopes by 5; a plugin-kanban slice finds nothing to triage.

                Why the original numbers are void, and it is not a rounding matter: this body lists GanttView.autoscheduledlg.test.tsx:63 as a tier-3 hit, and tier 3 is cumulative on tier 2's "surface async-witnessed elsewhere in its own package". That site reads gantt-autoschedule-confirm, which occurs exactly twice in the whole repository — the production element at GanttView.tsx:5030 and the candidate read itself — and is never named by a findBy, a waitFor, or any async query anywhere. It cannot reach tier 2, therefore cannot be tier 3, yet this body published it as tier 3. The original numbers are not reproducible from their own definitions even in principle. The tier-2 witness rung is retired as a result.

                The .each blind spot that prompted the re-run is real but small — about 1.6%. It was not what killed the numbers.

                Measured at 7a5da1414 (main as of #6954). ⚠️ That is not current main, which is fd8dacecc, two merges ahead; the drift is exactly one added test file and four edited ones, which moves no conclusion. Effective corpus 2,260 after excluding 28 Playwright specs where the ladder does not apply (page.getByRole returns an auto-waiting Locator, not a synchronous DOM read).

                The 55 absence-only sites are subtracted from the published count and retained in this card as a named sub-population — they cannot fail this card's way (an early read makes an absence assertion pass) but can pass vacuously. Their first step is a probe, not a fix: make the element appear late and see whether the test still passes. Their site list is published alongside the 94.

                Everything below is kept for the record. The calibration and the trap sections remain valid and are still the most useful part of this card.


                Filed by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), carrying forward the census #6959's implementer produced and deliberately did not file itself — several of the named packages had live PRs at measurement time, so it reported rather than widened. ⛔ Grading beyond the p2 carried from #6959 is triage's.

                The class

                #6959 was one instance: ObjectGantt.referenceArms-6837.test.tsx:257 read a surface that appears after an async settle using a synchronousgetByTestId. In the merge queue — a heavier runner than PR CI — it lost that race twice in fifteen minutes and ejected two PRs that do not touch plugin-gantt at all, one of which passed and failed on byte-identical content.

                ⚠️Read #6959's correction before working this card. That card's original text — mine — blamed a React.lazy boundary. There is none.ObjectGantt imports statically and the package contains zero React.lazy; the fallback is a plain if (loading) early return. The real race is a gate that settles a mock call being ISSUED one promise-resolution before setLoading(false) runs in a finally. ⇒ The class is wider than "lazy": it is any test whose awaited settle does not touch the DOM, followed by a synchronous DOM read.

                The measurement ⛔ SUPERSEDED — see the banner

                Pathspec bound, stated:git ls-files -- '*.test.tsx' '*.test.ts' '*.spec.tsx' '*.spec.ts' = 2,282 files.

                tierdefinitionhits
                1async block, first sync DOM read, no gate naming that surface1,105
                2+ surface async-witnessed elsewhere in its own package413
                3+ no DOM-touching gate at all before the read, resolving awaited file-local helpers one level176

                Tier 3 is the real shape — the awaited settle never touches the DOM.

                The hot control fired, and the instrument was fixed rather than the corpus declared clean. Tier 1 initially did not report :257 itself, because it required a literal render( in the block while :257 mounts through a helper. A zero that would have read as "clean" was caught as "broken search."

                What is already done, and what remains

                packages/plugin-gantt's 3 tier-3 hits were hand-triaged: exactly one real defect (:257, fixed in PR #6966). The other two are false positives — ObjectGantt.quickfilter.test.tsx:141 is gated at :135 through the file-local gv() helper, and GanttView.autoscheduledlg.test.tsx:63 has a synchronous mount with nothing to race.

                Remaining: 173 tier-3 candidates outside plugin-gantt. ⛔ SUPERSEDED — the current population is 94, and the per-package table below is void.

                packagehitspackagehits
                app-shell58plugin-detail4
                fields28plugin-calendar3
                apps/console25plugin-dashboard3
                components16react3
                plugin-form11e2e/live3
                plugin-grid9examples/schema-catalog2
                plugin-charts5plugin-list2
                plugin-chatbot1

                ⭐ Calibration — apply this before dispatching, it is the most useful thing here

                From the implementer, who hand-triaged its own package's hits:

                my plugin-gantt triage found 2 of 3 tier-3 hits were false positives, so assume roughly a 2-in-3 false-positive rate; the dominant false-positive causes are a real DOM gate hidden behind a one-token file-local helper, and a mount that is synchronous to begin with.

                A candidate count is not a defect count. Expect the triage cost to dominate the fix cost. ⛔ Do not dispatch this as a mechanical sweep — a blind getByfindBy rewrite would churn files that were never wrong, and would erase gates that are load-bearing (see below).

                ⛔ The trap that makes this not-mechanical

                #6959's fix keptmount()'s find-call gate rather than trading it for the DOM gate — because the two gates measure different facts, and the refusal probe above it needed the schema-dependent commit that the chart's presence alone does not carry.

                ⇒ A rewrite that replaces an existing gate with a DOM gate can silently weaken a test while leaving it green. Whoever takes a slice must, per site, establish what the existing gate proves before adding or replacing one.

                Suggested shape

                Slice by package, largest first, one PR per package or per small group — ⛔ not one sweeping PR. Cut slices from the published-94 split in the banner, never from the void table above.

                Per site, the deliverable is a judgement, not a rewrite: is the awaited settle DOM-touching? If not, is there another gate, possibly behind a helper? Only then change the read.

                Related

                Metadata

                Metadata

                Assignees

                Labels

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

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions