diff --git a/data/outstanding-issues-snapshot.json b/data/outstanding-issues-snapshot.json index f59de2d743..9db655ca7b 100644 --- a/data/outstanding-issues-snapshot.json +++ b/data/outstanding-issues-snapshot.json @@ -4,13 +4,13 @@ "committed_at": "2026-10-09" }, "counts": { - "open": 141, - "p1": 14, - "p2": 74, - "p3": 53, + "open": 109, + "p1": 17, + "p2": 55, + "p3": 37, "queued": 6, "pending": 0, - "resolved": 717 + "resolved": 787 }, "queue": [ { @@ -243,39 +243,12 @@ "source": "Owner phone report 2026-09-04 during PR #2590 follow-up; screenshot of Answer mode, query 'lithium level timing'; session 2026-09-13 live QA; retract duplicate inbox add 9b595f7f", "added": "2026-09-04" }, - { - "id": "#3944SV", - "priority": "P2", - "type": "issue", - "summary": "clearlyNonClinicalConsumerPattern refuses in-corpus psychiatric queries on bare consumer tokens, the same defect as the topic denylist", - "detail": "REVIEW 2026-09-25 (offline audit of current main; no provider access): Offline probe on current main: 'phone contact after discharge' (confidence 0.432, above the 0.42 cutoff), 'car accident trauma assessment', 'tv watching and negative symptoms', 'holiday leave from the ward' and 'flight of ideas in mania' still short-circuit. 'restaurant avoidance in social anxiety' now reaches retrieval via the psychiatricOrClinicalContextPattern override (3f2bb4771); 'mania' and 'discharge' are not in that override. Partial mitigation only. PRIOR DETAIL: Found while fixing #000GN4 (2026-09-02, probed against the real analyzeClinicalQuery on main at 45a3dcacb54a). src/lib/rag/rag-query-guard.ts:3-4 short-circuits any soft-tail-eligible query matching bare tokens including phone, car, tv, television, restaurant, holiday, hotel, flight, kitchen and laptop. Measured, with shouldShortCircuitUnsupportedSearch on the real analyzer: 'phone contact after discharge' short-circuits to zero retrieval while 'telephone follow up after discharge' reaches retrieval, and the word 'phone' is the only difference. Post-discharge phone contact is a topic this repo actively builds for - see the Caring Contacts work. Also confirmed refused by the pattern alone, with confidence and expandedTerms both above the soft-tail thresholds so the pattern is the sole cause: 'restaurant avoidance in social anxiety', 'car accident trauma assessment', 'tv watching and negative symptoms', 'holiday leave from the ward'. Separately, the token 'flight' matches 'flight of ideas', a core sign of mania, though that query would short-circuit through the soft tail anyway. This is milder than #000GN4 because these tokens sit behind unsupportedSoftTailEligible rather than firing unconditionally, but the mechanism is identical: a bare token standing in for a topic judgement. FIX: the same shape as #000GN4 - replace bare tokens with phrases that cannot occur in a clinical question, or route the decision through classifyCorpusGrounding where the query is soft-tail eligible anyway. Protected RAG surface: needs the RAG impact declaration, the clinical governance preflight, and an eval:quality --rag-only run, since the consumer controls in rag-eval-cases.ts (coffee machine, air fryer, overnight oats) are what this pattern pins. Note unavailableDocumentNoisePattern was checked in the same pass and is clean - every entry there is a multi-word phrase.", - "source": "src/lib/rag/rag-query-guard.ts:3-4; probed with shouldShortCircuitUnsupportedSearch against analyzeClinicalQuery on main 45a3dcacb54a; RAG retrieval review of PR branch claude/rag-query-guard, 2026-09-02", - "added": "2026-09-02" - }, - { - "id": "#RP00FZ", - "priority": "P2", - "type": "task", - "summary": "Reindex reaper: the storage-object half of the abandoned-generation cleanup is still missing", - "detail": "PARTIAL PROGRESS, recorded here so it is not tracked only in code comments. The DETECTION half landed on branch claude/reindex-reaper: scripts/cleanup-abandoned-reindex-generations.ts gained a read-only --alert-on-abandoned flag whose pure decision function (abandonedReindexGenerationAlertExitCode in src/lib/reindex-pipeline.ts) exits 2 when a dry run finds abandoned staged rows, and .github/workflows/reindex-reaper.yml runs it as a weekly read-only probe that opens or updates an alert issue. That workflow ships INERT (repo variable REINDEX_REAPER_ENABLED is unset) and its destructive apply path is triple-gated and statically guarded by scripts/check-github-action-pins.mjs. WHAT REMAINS, and what this row exists for: the storage-object half. cleanup_abandoned_document_index_generations deletes generation-bearing rows across seven artifact tables, but nothing enqueues storage_cleanup_jobs rows for the objects those generations left behind, so a crash mid-reindex still leaks Storage objects that no schedule revisits. The recorded fix is for the commit RPC to enqueue storage_cleanup_jobs rows for superseded generations at commit time. That is a migration, it deploys to the live clinical database on merge, and it was deliberately excluded from the detection batch. THREE PREREQUISITES the same review recorded, all of which should land before the repo variable REINDEX_REAPER_APPLY is ever set: (1) the RPC has no owner scoping and no row ceiling -- seven deletes in one transaction under a 180s statement timeout -- so a migration adding a row ceiling and a keep-most-recent-generation guard should come first; (2) the RPC's predicate makes every generation-bearing row eligible on any document whose metadata.index_generation_id is absent, so documents predating generation stamping will register as abandoned forever and the weekly probe will very likely be permanently red until either a backfill migration lands or the probe alerts on a delta rather than an absolute count; (3) arming the apply path safely needs a GitHub Environment with required reviewers on a separate apply job, because two of the three gates are standing repository variables and only client_payload.apply is per-run. Full reasoning is in the header of .github/workflows/reindex-reaper.yml.", - "source": "review of branch claude/reindex-reaper, 2026-09-02", - "added": "2026-09-02" - }, - { - "id": "#XSZ4XV", - "priority": "P2", - "type": "task", - "summary": "Audit remediation leftovers: calculator governance link, stale Docling pin references, unrecorded Docling model treeDigest", - "detail": "PARTLY FIXED 2026-09-25: (1) the calculator governance reference now renders as plain text, not a link, per the owner decision (8465d2e97, search-detail.tsx; pinned by tests/calculators-clinical-safety.dom.test.tsx). The url in data/calculators/evidence.json is unchanged. (2) eval/docling/README.md and docs/worker-deploy-runbook.md now name the version pinned in eval/docling/requirements.txt instead of the stale docling==2.120.2 (7bd62e845; pinned by tests/docling-model-artifacts.test.ts); the Gate B decision record was left alone as history. STILL OPEN: (3) eval/docling/model-artifacts.json has treeDigest null, so the model pin only warns; one operator Docker build records it. Earlier history: PR #2920 (2026-09-19) landed vendored brand fonts, the Docling artifact-digest check and the real offline BrandMark; CACHE_VERSION was already done.", - "source": "Codex review PR #2701 discussion_r3946596430; corrects #4BE39H", - "added": "2026-09-07" - }, { "id": "#9Z197J", "priority": "P2", "type": "issue", - "summary": "release-browser-matrix Firefox/WebKit failures: four of six Firefox ones fixed (three sub-pixel artefacts merged, dark-mode test ordering merged), two Firefox and all eight WebKit still open, and the job is not in PR required so it never blocks a merge", - "detail": "Failure count substantially reduced by layout tolerance and settled-click repairs; main-failure-routing active. PRIOR DETAIL (restored 2026-10-09, an earlier update replaced it wholesale): UPDATE 2026-09-25 from the owner-supplied Ultimate Audit Master Report (audit F10), not reproduced offline: the WebKit phone-chrome failures include header overlay, composer visibility, scroll animation and narrow settings geometry, with one settings position measured at -140 px. Audit recommendation: audit the shared scroll controller, safe-area geometry and scroll-container ownership rather than per-test fixes. The audit duplicate-
finding (F08) is already resolved as the hidden streaming clone (#TWS2GD); the Specifiers mobile Axe failure and the Differentials ChunkLoadError are separate rows queued the same day. PRIOR DETAIL: UPDATE 2026-09-20 (six Firefox failures read from the job log of main run 35503893104; four now addressed, two open; no Firefox was run - see the egress row). THE COUNT AND THE CLASSIFICATION IN THIS ROW WERE BOTH WRONG. Firefox failed SIX, not five, and only THREE were tolerance, not five. FIXED AND MERGED (PR #2932): three sub-pixel artefacts - a 16px card gap measured 15.999969482421875, a 12px column gap measured 11.999954223632812, and a 48px tap target measured 47.98333740234375 against its existing 2px allowance. The first two are float error from subtracting two client rects; the third is Firefox storing layout in app units of 1/60 CSS px, so 47.98333740234375 is exactly 2879/60 - one app unit short, the smallest miss the engine can express. tests/helpers/layout-tolerance.ts holds one 0.05px tolerance, mutation-tested from both sides. No floor lowered, nothing skipped or quarantined. FIXED, MERGED as PR #2933 at 0cfdd250e on 2026-09-20, verified as an ancestor of this reconciliation - originally recorded as AWAITING MERGE because the request was queued before it landed: the fourth, ui-on-call-boards dark mode, was TEST ORDERING and not an app bug. It set the colour-scheme override while the page was still on about:blank, and Playwright Firefox does not carry that into the first navigation; the theme is resolved once pre-paint by the bootstrap in src/lib/theme.ts, so a late preference is already missed. PROOF IT IS NOT THE APP: the twelve dark assertions in ui-caring-contacts-workspace.spec.ts PASS on Firefox in this same run (tests 48, 53, 59, 65, 72, 79, 85, 100, 138, 152, 159, 169) and every one navigates first and switches scheme after. An earlier reading blamed color-scheme: light on :root and concluded dark mode was broken for every Firefox and Safari user; those twelve passes refute it. Do not reopen the design-system dark contract on this evidence. STILL OPEN: the remaining two Firefox failures are tracked separately - see the row for the document-viewer hit counter and the tools Forms panel. The eight WebKit failures are UNCHANGED and still unexamined; the six phone-chrome ones remain the likely-real-iPhone-bug reading recorded above. UPDATE 2026-09-20 (read from the GitHub job logs of the latest main release-browser-matrix run; still no local browser run, provisioning fails here as described below). THE COUNT IS 13, NOT 15: Chromium green in ~8 min; Firefox 700 passed / 5 failed in ~28 min; WebKit 696 passed / 8 failed in ~40 min. THE 2026-09-06 CONCLUSION IS HALF WRONG AND THE CORRECTION IS THE POINT OF THIS UPDATE. The Firefox half is tolerance work as recorded — one failure is provably a measurement artefact, Expected >= 12 / Received 11.999954223632812, a sub-pixel rounding difference and nothing more. THE WEBKIT HALF IS NOT. Six of the eight WebKit failures are phone scroll, header, footer and composer behaviour. WebKit is Safari engine, so on an iPhone those are candidate real user-visible bugs, not engine-geometry tolerance, and must be read as a bug report rather than assertion-loosening work. ORDER: fix the five Firefox tolerances first because they are cheap and provably artefacts, then treat the six WebKit phone-chrome failures as a defect investigation, and do that before the tablet row #6GR6B8 because the two are plausibly the same root cause. QUARANTINING IS STILL THE WRONG ANSWER, and more so now: quarantining a phone-chrome failure on Safari engine would hide a defect, not a flake. tests/flake-ledger.json is for REPRODUCED flakes, requires @quarantine in the test title, and expires every entry within 31 days — and it is currently empty by design. NOT FIXED 2026-09-18. WHY IT WAS NOT DONE: the failures are only visible by running Firefox and WebKit, and browser provisioning fails in this environment — scripts/setup-claude-cloud.sh browsers returns 403, no allowlist entry for cdn.playwright.dev. A substitute Chromium exists at /opt/pw-browsers and playwright.config.ts honours PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH, so Chromium work is possible here; the other two engines are not. Sizing this needs a machine that can run all three. Note also that this is the one thing keeping main red, so it will be the first failure the new red-main reporting (#T82ND3) raises. Historical note only: an earlier 2026-09-06 write-up used a 15-failure count and treated the whole set as deterministic geometry differences to loosen; that count and that blanket remedy are superseded by this update and must not be reapplied.", + "summary": "release-browser-matrix Firefox/WebKit failures: WebKit now runs in CI and its ~26 failures are down to intermittent timing races (2026-10-12); confirm the next main run, and the job is not in PR required so it never blocks a merge", + "detail": "UPDATE 2026-10-12 (read from main CI job logs via the GitHub MCP; WebKit cannot run in the cloud container): WebKit/Safari now launches in CI (PR #3487) and the ~26 genuine Safari failures it exposed were fixed test-side in small PRs #3492-#3494 and #3501-#3504, with no test skipped, quarantined or loosened. Main run 38300091965 (after #3503) had every Firefox, WebKit desktop, phone and tablet shard green except ONE installed-app (mobile-pwa-standalone) failure, the DSM category facet keyboard test, fixed in #3504. PATTERN: the last three failures were the same race, a keypress or fill straight after navigation before React attached the handler, which slower WebKit runners expose intermittently. Use expectHydrated (tests/playwright-settlement.ts) or the handler poll in tests/ui-clinical-ask.spec.ts before the first interaction after load. NEXT: read the release-browser-matrix jobs of the first main run after #3504; if all green, close this row. A new single failure of the same shape is the same race in another test, not an app bug. The two Firefox items in #33346A did not fail in runs 38291430591 or 38300091965 (Firefox 3/3 green both times); re-check before working that row. PRIOR DETAIL: Failure count substantially reduced by layout tolerance and settled-click repairs; main-failure-routing active. PRIOR DETAIL (restored 2026-10-09, an earlier update replaced it wholesale): UPDATE 2026-09-25 from the owner-supplied Ultimate Audit Master Report (audit F10), not reproduced offline: the WebKit phone-chrome failures include header overlay, composer visibility, scroll animation and narrow settings geometry, with one settings position measured at -140 px. Audit recommendation: audit the shared scroll controller, safe-area geometry and scroll-container ownership rather than per-test fixes. The audit duplicate-
finding (F08) is already resolved as the hidden streaming clone (#TWS2GD); the Specifiers mobile Axe failure and the Differentials ChunkLoadError are separate rows queued the same day. PRIOR DETAIL: UPDATE 2026-09-20 (six Firefox failures read from the job log of main run 35503893104; four now addressed, two open; no Firefox was run - see the egress row). THE COUNT AND THE CLASSIFICATION IN THIS ROW WERE BOTH WRONG. Firefox failed SIX, not five, and only THREE were tolerance, not five. FIXED AND MERGED (PR #2932): three sub-pixel artefacts - a 16px card gap measured 15.999969482421875, a 12px column gap measured 11.999954223632812, and a 48px tap target measured 47.98333740234375 against its existing 2px allowance. The first two are float error from subtracting two client rects; the third is Firefox storing layout in app units of 1/60 CSS px, so 47.98333740234375 is exactly 2879/60 - one app unit short, the smallest miss the engine can express. tests/helpers/layout-tolerance.ts holds one 0.05px tolerance, mutation-tested from both sides. No floor lowered, nothing skipped or quarantined. FIXED, MERGED as PR #2933 at 0cfdd250e on 2026-09-20, verified as an ancestor of this reconciliation - originally recorded as AWAITING MERGE because the request was queued before it landed: the fourth, ui-on-call-boards dark mode, was TEST ORDERING and not an app bug. It set the colour-scheme override while the page was still on about:blank, and Playwright Firefox does not carry that into the first navigation; the theme is resolved once pre-paint by the bootstrap in src/lib/theme.ts, so a late preference is already missed. PROOF IT IS NOT THE APP: the twelve dark assertions in ui-caring-contacts-workspace.spec.ts PASS on Firefox in this same run (tests 48, 53, 59, 65, 72, 79, 85, 100, 138, 152, 159, 169) and every one navigates first and switches scheme after. An earlier reading blamed color-scheme: light on :root and concluded dark mode was broken for every Firefox and Safari user; those twelve passes refute it. Do not reopen the design-system dark contract on this evidence. STILL OPEN: the remaining two Firefox failures are tracked separately - see the row for the document-viewer hit counter and the tools Forms panel. The eight WebKit failures are UNCHANGED and still unexamined; the six phone-chrome ones remain the likely-real-iPhone-bug reading recorded above. UPDATE 2026-09-20 (read from the GitHub job logs of the latest main release-browser-matrix run; still no local browser run, provisioning fails here as described below). THE COUNT IS 13, NOT 15: Chromium green in ~8 min; Firefox 700 passed / 5 failed in ~28 min; WebKit 696 passed / 8 failed in ~40 min. THE 2026-09-06 CONCLUSION IS HALF WRONG AND THE CORRECTION IS THE POINT OF THIS UPDATE. The Firefox half is tolerance work as recorded — one failure is provably a measurement artefact, Expected >= 12 / Received 11.999954223632812, a sub-pixel rounding difference and nothing more. THE WEBKIT HALF IS NOT. Six of the eight WebKit failures are phone scroll, header, footer and composer behaviour. WebKit is Safari engine, so on an iPhone those are candidate real user-visible bugs, not engine-geometry tolerance, and must be read as a bug report rather than assertion-loosening work. ORDER: fix the five Firefox tolerances first because they are cheap and provably artefacts, then treat the six WebKit phone-chrome failures as a defect investigation, and do that before the tablet row #6GR6B8 because the two are plausibly the same root cause. QUARANTINING IS STILL THE WRONG ANSWER, and more so now: quarantining a phone-chrome failure on Safari engine would hide a defect, not a flake. tests/flake-ledger.json is for REPRODUCED flakes, requires @quarantine in the test title, and expires every entry within 31 days — and it is currently empty by design. NOT FIXED 2026-09-18. WHY IT WAS NOT DONE: the failures are only visible by running Firefox and WebKit, and browser provisioning fails in this environment — scripts/setup-claude-cloud.sh browsers returns 403, no allowlist entry for cdn.playwright.dev. A substitute Chromium exists at /opt/pw-browsers and playwright.config.ts honours PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH, so Chromium work is possible here; the other two engines are not. Sizing this needs a machine that can run all three. Note also that this is the one thing keeping main red, so it will be the first failure the new red-main reporting (#T82ND3) raises. Historical note only: an earlier 2026-09-06 write-up used a 15-failure count and treated the whole set as deterministic geometry differences to loosen; that count and that blanket remedy are superseded by this update and must not be reapplied.", "source": "Release matrix review", "added": "2026-09-07" }, @@ -283,7 +256,7 @@ "id": "#Z3GZ5P", "priority": "P2", "type": "task", - "summary": "DSM-5-TR specifier catalogue has no clinician sign-off: 585 items, 71 signed off in PR #3143, 514 still pending review", + "summary": "DSM-5-TR specifier catalogue: 514 of 585 items still pending clinician review, and the 71 marked reviewed in PR #3143 name no clinician reviewer", "detail": "71 specifiers signed off in PR #3143; pending review dropped from 585 to 514. PRIOR DETAIL (restored 2026-10-09, an earlier update replaced it wholesale): UPDATE 2026-09-25 (offline traversal of data/specifiers-content.json; no provider access). Two corrections to this row's own headline, both reproducible from the committed file. FIRST: '71 source-verified' overstates the work. 57 of the 71 restate their own label, matching 'For , \"