From 0e3ed773cddf1b59c64ca81162fd76d84051359d Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Aug 2026 14:46:55 +0000 Subject: [PATCH 1/4] docs(issues): re-file the 2026-08-12 ledger yield review as inbox requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sweep's judgements are unchanged; only the delivery mechanism is. The original pass edited the canonical ledger directly, which is how it was done at the time, and the inbox/reconcile architecture that landed afterwards forbids it — check:ledger-write-discipline compares the canonical file against merge-base(HEAD, origin/main) plus the moved requests, so every direct edit on that branch became a violation and PR #1890 was closed without merging. Nothing from it reached main. 43 requests, no canonical ledger edit: - 22 done: #304 (already completed before the sweep), the six standing cautions whose own text says "no action" (#241 #244 #272 #294 #300 #257), the five DR runbook steps (#196-#200), two index umbrellas (#086 #188), two superseded rows (#250 #253) plus #254, and five rows merged into survivors (#156 into #168; #301 into #292; #152 #236 #260 into #169). - 19 update: the deprioritisations, six of which move the Pri cell to P3 now that `--pri` exists (#183 #090 #211 #212 #266 #269) and thirteen of which record the reasoning against a row already at the floor. - 2 add: the row-outlives-its-own-completion gap, and the residual dead Outcome cells left by PR #1902. Every closure premise was re-verified against current main rather than trusted from the earlier pass, and that mattered: five of them turn on a code comment carrying the knowledge the row was protecting, and those comments had to be confirmed present on main before the row could be closed. All five are (differentials-home, ckb-v2-tokens, bindings, page-secondary-navigation, and the viewer plan), and #244 is now additionally pinned by a test. #304's premise was re-measured too: the snapshot is 1 day old with sourceRunId 31329507691. Two deliberate omissions. #013 is skipped because it already has a pending update request, and a second one would force an explicit cancellation decision on someone else's mutation. #313 gets no row: it was fixed in PR #1905, and its tracking row only ever existed in the closed PR. The batch was dry-applied before committing: 114 open -> 95, archive 196 -> 220, and checkIssues passes on the applied result. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01DuYJz8hauCsCdx8r4fXiZU --- .../09b3e12b-c171-49a6-b9d3-3ff627c8f2cd.json | 10 ++++++++++ .../0d8735c6-1950-4fef-8880-007063bbf662.json | 13 +++++++++++++ .../0e47904b-f354-4795-a4fc-dcf8b91c1790.json | 11 +++++++++++ .../2a2200d7-83ea-4cff-9969-ae682bad740c.json | 10 ++++++++++ .../2a5aadb2-ab0e-4d89-8653-7a704933d533.json | 10 ++++++++++ .../439cd410-9311-4d22-8888-9fc15948fea0.json | 10 ++++++++++ .../52929edc-53b9-4694-a0e2-1bd3c4b0a41b.json | 10 ++++++++++ .../5a2b5bda-41b7-45e9-921b-d87df7ac6af0.json | 10 ++++++++++ .../5af9a8bf-6136-4347-bcae-8433c8c9e686.json | 11 +++++++++++ .../5bf830df-f89b-4789-a6dc-48284d212171.json | 10 ++++++++++ .../67352cea-8989-4e12-b50d-5a775664d8a7.json | 10 ++++++++++ .../6a90b0f5-e5e2-46a1-9981-d5886d0e41b8.json | 10 ++++++++++ .../72929356-5ff3-47da-89a9-82de09602e73.json | 10 ++++++++++ .../75a2729c-b0b0-4144-8d99-2c3014d4bcf1.json | 10 ++++++++++ .../7f9de4f4-73ca-4ab2-946c-b2ee3c27d708.json | 10 ++++++++++ .../7fc8d67c-e2e4-4e6c-9bcf-6ac65fe9adc7.json | 11 +++++++++++ .../82377462-2da9-4f8e-b0f5-a421a1ab5fdd.json | 10 ++++++++++ .../8c2d3fea-e7a9-41af-a825-62c8109d0248.json | 10 ++++++++++ .../8ef1a871-8573-4eab-83fd-213734efd82c.json | 10 ++++++++++ .../9424f687-997a-4b52-ab31-b49e462168b6.json | 10 ++++++++++ .../9dd78494-88b6-4d8e-b5c3-28caf91acaba.json | 10 ++++++++++ .../a101203a-ae13-46e0-9f76-6e91adf77c9a.json | 10 ++++++++++ .../a5c8654c-f466-49b5-86ec-f783c15fc6e7.json | 11 +++++++++++ .../a8a73f5a-f4c5-4c97-8c5d-bc93215469bc.json | 10 ++++++++++ .../abd14d84-e4d6-4f8c-8384-a97817aafcb7.json | 11 +++++++++++ .../b278a991-3122-4662-a835-37dd1d6645cc.json | 11 +++++++++++ .../bb14f53c-d36f-48ce-a02d-836aaa107008.json | 10 ++++++++++ .../bce5b6bd-4727-4ad5-ac5f-d05a24df43cc.json | 10 ++++++++++ .../bf12d7c9-04f8-4095-ba68-0cf6f5736501.json | 10 ++++++++++ .../bfc60ffa-e648-47e1-8270-bc1056516239.json | 10 ++++++++++ .../c1218846-c99f-4d49-a44c-a97d642926aa.json | 10 ++++++++++ .../c2c0104b-02e3-4ae3-8f8a-706c421ea4ce.json | 10 ++++++++++ .../cafca1f3-5985-4d5e-9a5e-47cb6d5ffafb.json | 10 ++++++++++ .../d34ff313-231a-4e65-93d6-806f5b910846.json | 10 ++++++++++ .../da9b65c7-7245-4878-8b75-56c4cbe211cb.json | 10 ++++++++++ .../dcb1ba9e-18ea-4ae4-9594-8b7cbb6cbbcc.json | 13 +++++++++++++ .../e2b81b96-5063-429c-866f-3d42549bd1c8.json | 10 ++++++++++ .../e7d125c0-98a4-45db-883e-b19937bd4550.json | 10 ++++++++++ .../f1673818-e4fe-4733-9db4-312b11d0279c.json | 10 ++++++++++ .../f6953f9c-671e-4bd3-82a5-d5825046cd95.json | 10 ++++++++++ .../f6e5fe24-02f4-4a49-beea-2f8bf20e0a0e.json | 10 ++++++++++ .../fa725f37-2d49-480e-83bc-23e8bca4c232.json | 10 ++++++++++ .../fc44a290-5b8f-4ee4-b233-516774792802.json | 10 ++++++++++ 43 files changed, 442 insertions(+) create mode 100644 docs/outstanding-issues-inbox/09b3e12b-c171-49a6-b9d3-3ff627c8f2cd.json create mode 100644 docs/outstanding-issues-inbox/0d8735c6-1950-4fef-8880-007063bbf662.json create mode 100644 docs/outstanding-issues-inbox/0e47904b-f354-4795-a4fc-dcf8b91c1790.json create mode 100644 docs/outstanding-issues-inbox/2a2200d7-83ea-4cff-9969-ae682bad740c.json create mode 100644 docs/outstanding-issues-inbox/2a5aadb2-ab0e-4d89-8653-7a704933d533.json create mode 100644 docs/outstanding-issues-inbox/439cd410-9311-4d22-8888-9fc15948fea0.json create mode 100644 docs/outstanding-issues-inbox/52929edc-53b9-4694-a0e2-1bd3c4b0a41b.json create mode 100644 docs/outstanding-issues-inbox/5a2b5bda-41b7-45e9-921b-d87df7ac6af0.json create mode 100644 docs/outstanding-issues-inbox/5af9a8bf-6136-4347-bcae-8433c8c9e686.json create mode 100644 docs/outstanding-issues-inbox/5bf830df-f89b-4789-a6dc-48284d212171.json create mode 100644 docs/outstanding-issues-inbox/67352cea-8989-4e12-b50d-5a775664d8a7.json create mode 100644 docs/outstanding-issues-inbox/6a90b0f5-e5e2-46a1-9981-d5886d0e41b8.json create mode 100644 docs/outstanding-issues-inbox/72929356-5ff3-47da-89a9-82de09602e73.json create mode 100644 docs/outstanding-issues-inbox/75a2729c-b0b0-4144-8d99-2c3014d4bcf1.json create mode 100644 docs/outstanding-issues-inbox/7f9de4f4-73ca-4ab2-946c-b2ee3c27d708.json create mode 100644 docs/outstanding-issues-inbox/7fc8d67c-e2e4-4e6c-9bcf-6ac65fe9adc7.json create mode 100644 docs/outstanding-issues-inbox/82377462-2da9-4f8e-b0f5-a421a1ab5fdd.json create mode 100644 docs/outstanding-issues-inbox/8c2d3fea-e7a9-41af-a825-62c8109d0248.json create mode 100644 docs/outstanding-issues-inbox/8ef1a871-8573-4eab-83fd-213734efd82c.json create mode 100644 docs/outstanding-issues-inbox/9424f687-997a-4b52-ab31-b49e462168b6.json create mode 100644 docs/outstanding-issues-inbox/9dd78494-88b6-4d8e-b5c3-28caf91acaba.json create mode 100644 docs/outstanding-issues-inbox/a101203a-ae13-46e0-9f76-6e91adf77c9a.json create mode 100644 docs/outstanding-issues-inbox/a5c8654c-f466-49b5-86ec-f783c15fc6e7.json create mode 100644 docs/outstanding-issues-inbox/a8a73f5a-f4c5-4c97-8c5d-bc93215469bc.json create mode 100644 docs/outstanding-issues-inbox/abd14d84-e4d6-4f8c-8384-a97817aafcb7.json create mode 100644 docs/outstanding-issues-inbox/b278a991-3122-4662-a835-37dd1d6645cc.json create mode 100644 docs/outstanding-issues-inbox/bb14f53c-d36f-48ce-a02d-836aaa107008.json create mode 100644 docs/outstanding-issues-inbox/bce5b6bd-4727-4ad5-ac5f-d05a24df43cc.json create mode 100644 docs/outstanding-issues-inbox/bf12d7c9-04f8-4095-ba68-0cf6f5736501.json create mode 100644 docs/outstanding-issues-inbox/bfc60ffa-e648-47e1-8270-bc1056516239.json create mode 100644 docs/outstanding-issues-inbox/c1218846-c99f-4d49-a44c-a97d642926aa.json create mode 100644 docs/outstanding-issues-inbox/c2c0104b-02e3-4ae3-8f8a-706c421ea4ce.json create mode 100644 docs/outstanding-issues-inbox/cafca1f3-5985-4d5e-9a5e-47cb6d5ffafb.json create mode 100644 docs/outstanding-issues-inbox/d34ff313-231a-4e65-93d6-806f5b910846.json create mode 100644 docs/outstanding-issues-inbox/da9b65c7-7245-4878-8b75-56c4cbe211cb.json create mode 100644 docs/outstanding-issues-inbox/dcb1ba9e-18ea-4ae4-9594-8b7cbb6cbbcc.json create mode 100644 docs/outstanding-issues-inbox/e2b81b96-5063-429c-866f-3d42549bd1c8.json create mode 100644 docs/outstanding-issues-inbox/e7d125c0-98a4-45db-883e-b19937bd4550.json create mode 100644 docs/outstanding-issues-inbox/f1673818-e4fe-4733-9db4-312b11d0279c.json create mode 100644 docs/outstanding-issues-inbox/f6953f9c-671e-4bd3-82a5-d5825046cd95.json create mode 100644 docs/outstanding-issues-inbox/f6e5fe24-02f4-4a49-beea-2f8bf20e0a0e.json create mode 100644 docs/outstanding-issues-inbox/fa725f37-2d49-480e-83bc-23e8bca4c232.json create mode 100644 docs/outstanding-issues-inbox/fc44a290-5b8f-4ee4-b233-516774792802.json diff --git a/docs/outstanding-issues-inbox/09b3e12b-c171-49a6-b9d3-3ff627c8f2cd.json b/docs/outstanding-issues-inbox/09b3e12b-c171-49a6-b9d3-3ff627c8f2cd.json new file mode 100644 index 0000000000..dd70688769 --- /dev/null +++ b/docs/outstanding-issues-inbox/09b3e12b-c171-49a6-b9d3-3ff627c8f2cd.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "09b3e12b-c171-49a6-b9d3-3ff627c8f2cd", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#250", + "outcome": "Closed on the row's own recommendation. Its 2026-08-12 stamp says the plan has been overtaken and that closing it, letting #147/#117/#118/#098/#189 stand on their own, is probably the honest move. The multi-agent wave framing has served its purpose and the row now misdirects by naming closed rows as live A1 work." + } +} diff --git a/docs/outstanding-issues-inbox/0d8735c6-1950-4fef-8880-007063bbf662.json b/docs/outstanding-issues-inbox/0d8735c6-1950-4fef-8880-007063bbf662.json new file mode 100644 index 0000000000..651fbd3b63 --- /dev/null +++ b/docs/outstanding-issues-inbox/0d8735c6-1950-4fef-8880-007063bbf662.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "id": "0d8735c6-1950-4fef-8880-007063bbf662", + "createdOn": "2026-08-13", + "action": "add", + "payload": { + "pri": "P3", + "type": "task", + "summary": "The recommended queue's Outcome cells are now unrendered dead text", + "detail": "**Residual of the queue-misdirection fix (PR #1902).** Both consumers — .claude/hooks/issues-surface.sh and scripts/issues-report.mjs — now derive each queue row's prose from the cited row's own Detail cell, so the queue's Outcome column no longer reaches any reader through tooling. That killed the drift class: the #231 cell had spent days telling every session to pursue an approach that row itself recorded as refuted, and re-correcting it was impossible because no inbox request type reaches the queue and check:ledger-write-discipline rejects a direct canonical edit. **What remains is cosmetic but real:** the stale prose is still sitting in the file, so a human who opens docs/outstanding-issues.md can still read and act on it. **Next:** drop the Outcome column from the queue table (or replace each cell with a pointer to the row), which is a canonical ledger edit and therefore has to go through a deliberate reconciliation branch rather than an inbox request. **Stop:** do not delete the queue table itself — order, acuity, capability, when and estimate exist nowhere else.", + "source": "PR #1902; session 2026-08-13" + } +} diff --git a/docs/outstanding-issues-inbox/0e47904b-f354-4795-a4fc-dcf8b91c1790.json b/docs/outstanding-issues-inbox/0e47904b-f354-4795-a4fc-dcf8b91c1790.json new file mode 100644 index 0000000000..7c17cfbf7a --- /dev/null +++ b/docs/outstanding-issues-inbox/0e47904b-f354-4795-a4fc-dcf8b91c1790.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "id": "0e47904b-f354-4795-a4fc-dcf8b91c1790", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#211", + "pri": "P3", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** 1,266 sites, each a local judgment, and no open ledger row traces a defect to unchecked indexed access. Real hardening, but speculative against this repo's measured failure history, and the diff conflicts with every open PR. Do it in scoped batches after the clinical and CI-trust work. VERIFIED CORRECT 2026-08-12 — re-checked against merged main during the full ledger sweep and left unchanged: `noUncheckedIndexedAccess` is absent from tsconfig.json — the migration has not begun. This stamp exists so a later reader can tell \"checked and still true\" from \"never looked at\"; the two were indistinguishable before. Enable noUncheckedIndexedAccess in a branch and remediate the 1,266 errors, starting with the 15-20 highest-risk source files. Hot spots include worker/main.ts:901-942, src/lib/rag/rag-extractive-answer.ts, and src/lib/answer-verification.ts. Prefer ?. or ?? guards, or non-null assertions only where invariants are provable. Re-run npm run test and npm run typecheck before merge. See docs/review-findings-2026-08-02.md section 6." + } +} diff --git a/docs/outstanding-issues-inbox/2a2200d7-83ea-4cff-9969-ae682bad740c.json b/docs/outstanding-issues-inbox/2a2200d7-83ea-4cff-9969-ae682bad740c.json new file mode 100644 index 0000000000..402adce0b8 --- /dev/null +++ b/docs/outstanding-issues-inbox/2a2200d7-83ea-4cff-9969-ae682bad740c.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "2a2200d7-83ea-4cff-9969-ae682bad740c", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#039", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** States an intent (converge repeated toolbar behaviour) with no measured defect and no named surfaces. Needs a concrete inventory before it is work. Catalogue/search pages have independently evolved filter, sort, result-count and mobile toolbar behavior. Inventory the existing implementations and converge only the repeated interaction contract; do not flatten mode-specific search semantics." + } +} diff --git a/docs/outstanding-issues-inbox/2a5aadb2-ab0e-4d89-8653-7a704933d533.json b/docs/outstanding-issues-inbox/2a5aadb2-ab0e-4d89-8653-7a704933d533.json new file mode 100644 index 0000000000..c89cbe4046 --- /dev/null +++ b/docs/outstanding-issues-inbox/2a5aadb2-ab0e-4d89-8653-7a704933d533.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "2a5aadb2-ab0e-4d89-8653-7a704933d533", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#199", + "outcome": "Retired to the runbook (docs/operator-backlog.md disaster-recovery checklist). See #196 for the rationale." + } +} diff --git a/docs/outstanding-issues-inbox/439cd410-9311-4d22-8888-9fc15948fea0.json b/docs/outstanding-issues-inbox/439cd410-9311-4d22-8888-9fc15948fea0.json new file mode 100644 index 0000000000..8cbc27269c --- /dev/null +++ b/docs/outstanding-issues-inbox/439cd410-9311-4d22-8888-9fc15948fea0.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "439cd410-9311-4d22-8888-9fc15948fea0", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#198", + "outcome": "Retired to the runbook (docs/operator-backlog.md disaster-recovery checklist). See #196 for the rationale." + } +} diff --git a/docs/outstanding-issues-inbox/52929edc-53b9-4694-a0e2-1bd3c4b0a41b.json b/docs/outstanding-issues-inbox/52929edc-53b9-4694-a0e2-1bd3c4b0a41b.json new file mode 100644 index 0000000000..f4ed7ea38f --- /dev/null +++ b/docs/outstanding-issues-inbox/52929edc-53b9-4694-a0e2-1bd3c4b0a41b.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "52929edc-53b9-4694-a0e2-1bd3c4b0a41b", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#035", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Deliberately narrow by design, with a code comment saying so, and broadening it carries real false-positive risk on a clinical warning path. Keep as a finding, not queued work. `detectThresholdDisagreements` checks only ANC, WBC, and platelets paired with withholding verbs, so cross-source conflicts on medication doses, lithium/thyroid levels, or vital signs go undetected. Deliberately narrow (see the comment at `:469-474`). Broadening changes when an answer is classified `conflicting` and adds warnings — real false-positive risk. Needs new fixtures plus a behaviour review before any change." + } +} diff --git a/docs/outstanding-issues-inbox/5a2b5bda-41b7-45e9-921b-d87df7ac6af0.json b/docs/outstanding-issues-inbox/5a2b5bda-41b7-45e9-921b-d87df7ac6af0.json new file mode 100644 index 0000000000..350dd18d97 --- /dev/null +++ b/docs/outstanding-issues-inbox/5a2b5bda-41b7-45e9-921b-d87df7ac6af0.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "5a2b5bda-41b7-45e9-921b-d87df7ac6af0", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#300", + "outcome": "Do-not-convert caution retired into the code it protects. src/components/clinical-dashboard/differentials-home.tsx carries a comment above the sourcesChecked block explaining that '0 matches' / 'No matches' are correct empty results rather than failed-request guards, and that an ErrorState there would tell a clinician the system broke when it did not. Verified present on main 2026-08-13." + } +} diff --git a/docs/outstanding-issues-inbox/5af9a8bf-6136-4347-bcae-8433c8c9e686.json b/docs/outstanding-issues-inbox/5af9a8bf-6136-4347-bcae-8433c8c9e686.json new file mode 100644 index 0000000000..a420cf9e5b --- /dev/null +++ b/docs/outstanding-issues-inbox/5af9a8bf-6136-4347-bcae-8433c8c9e686.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "id": "5af9a8bf-6136-4347-bcae-8433c8c9e686", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#269", + "pri": "P3", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Blocked on #118 baselines, and proves a per-component state matrix for a design system on a single-user prototype. High cost, low yield at this stage. hover / active / disabled / busy / invalid / 320px / dark / forced-colours / print, per component. Currently proven for none. Blocked on #118: zero visual baselines are committed and the harness is continue-on-error, so nothing in Track B is safe at scale until baselines exist. CORRECTION 2026-08-08: the claim that baselines cannot be generated on Windows is half true and led to the wrong conclusion. It is true that snapshotPathTemplate carries {platform}, so win32 PNGs are invisible to the ubuntu CI job — but the CI job already produces the ubuntu ones. .github/workflows/ci.yml job visual-baseline runs on ubuntu-24.04 whenever ui_changed, runs npm run test:e2e:visual, and uploads tests/__screenshots__/ as artifact visual-baseline-; playwright.visual.config.ts records that on a missing baseline Playwright writes the golden and fails the first attempt, which is why retries are pinned at 0. So the mechanism exists and adoption is mechanical — see #118. Stop rule unchanged: do not commit baselines until the owner declares the design final, and do not adopt them from a developer machine." + } +} diff --git a/docs/outstanding-issues-inbox/5bf830df-f89b-4789-a6dc-48284d212171.json b/docs/outstanding-issues-inbox/5bf830df-f89b-4789-a6dc-48284d212171.json new file mode 100644 index 0000000000..9f1391c1bf --- /dev/null +++ b/docs/outstanding-issues-inbox/5bf830df-f89b-4789-a6dc-48284d212171.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "5bf830df-f89b-4789-a6dc-48284d212171", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#294", + "outcome": "Standing position retired into docs/plans/document-viewer-redesign-plan.md, whose OffscreenCanvas row states the do-not-implement-until-measured condition self-containedly instead of deferring to this ledger id. Verified present on main 2026-08-13." + } +} diff --git a/docs/outstanding-issues-inbox/67352cea-8989-4e12-b50d-5a775664d8a7.json b/docs/outstanding-issues-inbox/67352cea-8989-4e12-b50d-5a775664d8a7.json new file mode 100644 index 0000000000..0fa60d978a --- /dev/null +++ b/docs/outstanding-issues-inbox/67352cea-8989-4e12-b50d-5a775664d8a7.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "67352cea-8989-4e12-b50d-5a775664d8a7", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#197", + "outcome": "Retired to the runbook (docs/operator-backlog.md disaster-recovery checklist). See #196 for the rationale." + } +} diff --git a/docs/outstanding-issues-inbox/6a90b0f5-e5e2-46a1-9981-d5886d0e41b8.json b/docs/outstanding-issues-inbox/6a90b0f5-e5e2-46a1-9981-d5886d0e41b8.json new file mode 100644 index 0000000000..4dbd5e0b85 --- /dev/null +++ b/docs/outstanding-issues-inbox/6a90b0f5-e5e2-46a1-9981-d5886d0e41b8.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "6a90b0f5-e5e2-46a1-9981-d5886d0e41b8", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#236", + "outcome": "Merged into #169 (machine-local work at risk). Its specifics are carried there: claude/ds-v2-builder-a and -b need a content check against origin/main before deletion because squash merge means they are not ancestors, and the dev servers on ports 3258, 3135 and 3672 need stopping." + } +} diff --git a/docs/outstanding-issues-inbox/72929356-5ff3-47da-89a9-82de09602e73.json b/docs/outstanding-issues-inbox/72929356-5ff3-47da-89a9-82de09602e73.json new file mode 100644 index 0000000000..26aaf405cc --- /dev/null +++ b/docs/outstanding-issues-inbox/72929356-5ff3-47da-89a9-82de09602e73.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "72929356-5ff3-47da-89a9-82de09602e73", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#267", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Blocked on a provenance/dose payload the answer surface does not emit, which is backend work nobody has scoped. Cannot start. VERIFIED CORRECT 2026-08-12 — re-checked against merged main during the full ledger sweep and left unchanged: Neither AnswerFooter nor DoseLine has a product importer; the provenance/dose payload the answer surface would need still does not exist. This stamp exists so a later reader can tell \"checked and still true\" from \"never looked at\"; the two were indistinguishable before. Backend-shaped work, not a component swap: the two components cannot be adopted until the answer surface emits the provenance and dose data they render. Do not stub one to make the adoption count look better. Sequence after the payload exists, then adopt via the Track B1 demand-driven route." + } +} diff --git a/docs/outstanding-issues-inbox/75a2729c-b0b0-4144-8d99-2c3014d4bcf1.json b/docs/outstanding-issues-inbox/75a2729c-b0b0-4144-8d99-2c3014d4bcf1.json new file mode 100644 index 0000000000..a40b5dde34 --- /dev/null +++ b/docs/outstanding-issues-inbox/75a2729c-b0b0-4144-8d99-2c3014d4bcf1.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "75a2729c-b0b0-4144-8d99-2c3014d4bcf1", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#190", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Structural churn on the most safety-critical and most protected file in the repo, with no user-facing benefit and real behaviour-drift risk on a live-validated clinical answer path. Do the extractions opportunistically when a feature change already requires being inside a region, not as a standalone project. VERIFIED CORRECT 2026-08-12 — re-checked against merged main during the full ledger sweep and left unchanged: src/lib/rag/rag.ts measures 4,362 lines — still the monolith this row describes; the decomposition has not started. This stamp exists so a later reader can tell \"checked and still true\" from \"never looked at\"; the two were indistinguishable before. **Outcome:** `src/lib/rag/rag.ts` is decomposed into focused modules per `docs/maturity-backlog-workorders.md` X3, with existing offline RAG contracts green. **Status:** IN PROGRESS (DocumentViewer/Dashboard extractions done; rag.ts remains). **Next:** continue safe extractions only with the RAG flag before editing protected surfaces; one verified draft PR per unit. **Stop:** no behaviour change without canary when retrieval/answer paths move." + } +} diff --git a/docs/outstanding-issues-inbox/7f9de4f4-73ca-4ab2-946c-b2ee3c27d708.json b/docs/outstanding-issues-inbox/7f9de4f4-73ca-4ab2-946c-b2ee3c27d708.json new file mode 100644 index 0000000000..5a0adebf50 --- /dev/null +++ b/docs/outstanding-issues-inbox/7f9de4f4-73ca-4ab2-946c-b2ee3c27d708.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "7f9de4f4-73ca-4ab2-946c-b2ee3c27d708", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#193", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Mechanical directory moves with import-graph risk and no user-facing benefit. Same reasoning as #190: fold into work already touching the files. VERIFIED CORRECT 2026-08-12 — re-checked against merged main during the full ledger sweep and left unchanged: Six domain directories exist under src/lib (extractors, observability, rag, supabase, validation, webhooks); the reorg is genuinely partial, as the row says. This stamp exists so a later reader can tell \"checked and still true\" from \"never looked at\"; the two were indistinguishable before. **Outcome:** remaining `src/lib` clusters sit in their domain directories per X7 follow-on to X2. **Next:** move non-protected clusters first; answer/retrieval clusters need the RAG flag. **Stop:** no drive-by behaviour edits inside moves." + } +} diff --git a/docs/outstanding-issues-inbox/7fc8d67c-e2e4-4e6c-9bcf-6ac65fe9adc7.json b/docs/outstanding-issues-inbox/7fc8d67c-e2e4-4e6c-9bcf-6ac65fe9adc7.json new file mode 100644 index 0000000000..a1c97eb848 --- /dev/null +++ b/docs/outstanding-issues-inbox/7fc8d67c-e2e4-4e6c-9bcf-6ac65fe9adc7.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "id": "7fc8d67c-e2e4-4e6c-9bcf-6ac65fe9adc7", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#183", + "pri": "P3", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** A production DB p95 latency alert for a system with one user; the alert has nobody to wake. Revisit alongside #027 when real usage exists. Still blocked 2026-08-01 closeout: SUPABASE_ACCESS_TOKEN and SENTRY_AUTH_TOKEN missing from session env; Sentry MCP OAuth can list/get alerts but has no create tool; browser hits login wall; no metric rules exist yet on clinibase-xz. Create Metric Alert: p95(span.duration), filter span.op:db, environment production, threshold >500ms, notify Active Members. Provide SENTRY_AUTH_TOKEN in session to finish via sentry alert metrics create." + } +} diff --git a/docs/outstanding-issues-inbox/82377462-2da9-4f8e-b0f5-a421a1ab5fdd.json b/docs/outstanding-issues-inbox/82377462-2da9-4f8e-b0f5-a421a1ab5fdd.json new file mode 100644 index 0000000000..dc6d2d17b3 --- /dev/null +++ b/docs/outstanding-issues-inbox/82377462-2da9-4f8e-b0f5-a421a1ab5fdd.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "82377462-2da9-4f8e-b0f5-a421a1ab5fdd", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#268", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** 19 bare-dash sites with no reported clinical misreading. Cosmetic consistency on a prototype with an open P1. VERIFIED CORRECT 2026-08-12 — re-checked against merged main during the full ledger sweep and left unchanged: MissingValue is imported in 5 component files; the bare-dash conversion is partial. The ~5 calculator 'not started' sites stay permanently, per this row's own stop rule. This stamp exists so a later reader can tell \"checked and still true\" from \"never looked at\"; the two were indistinguishable before. Therapy-compass getters, specifier sourceFamily, favourites counts when untrusted. Leave the roughly 5 calculator 'derived.started ? score : dash' sites PERMANENTLY — 'not started' is not a missing clinical value, MissingValueReason has no member for it, and converting them would render 'Not recorded' for a score the clinician simply has not entered." + } +} diff --git a/docs/outstanding-issues-inbox/8c2d3fea-e7a9-41af-a825-62c8109d0248.json b/docs/outstanding-issues-inbox/8c2d3fea-e7a9-41af-a825-62c8109d0248.json new file mode 100644 index 0000000000..3e80a5a984 --- /dev/null +++ b/docs/outstanding-issues-inbox/8c2d3fea-e7a9-41af-a825-62c8109d0248.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "8c2d3fea-e7a9-41af-a825-62c8109d0248", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#196", + "outcome": "Retired to the runbook. A step of the disaster-recovery checklist in docs/operator-backlog.md, with no trigger until a schema restore. Tracking five runbook steps as five queue rows made the ledger a second copy of the runbook, which AGENTS.md forbids in the other direction for the same reason." + } +} diff --git a/docs/outstanding-issues-inbox/8ef1a871-8573-4eab-83fd-213734efd82c.json b/docs/outstanding-issues-inbox/8ef1a871-8573-4eab-83fd-213734efd82c.json new file mode 100644 index 0000000000..4af06a8733 --- /dev/null +++ b/docs/outstanding-issues-inbox/8ef1a871-8573-4eab-83fd-213734efd82c.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "8ef1a871-8573-4eab-83fd-213734efd82c", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#272", + "outcome": "No code change needed — the caution is already fully stated at src/components/page-secondary-navigation.tsx:62-70, including the two-lists-by-coincidence framing and the tests/mode-nav-addon-slot.dom.test.tsx guard. Verified present on main 2026-08-13. The ledger row duplicated a comment that already exists." + } +} diff --git a/docs/outstanding-issues-inbox/9424f687-997a-4b52-ab31-b49e462168b6.json b/docs/outstanding-issues-inbox/9424f687-997a-4b52-ab31-b49e462168b6.json new file mode 100644 index 0000000000..cc9f6c68d0 --- /dev/null +++ b/docs/outstanding-issues-inbox/9424f687-997a-4b52-ab31-b49e462168b6.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "9424f687-997a-4b52-ab31-b49e462168b6", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#156", + "outcome": "Merged into #168 — the same defect recorded twice at two priorities. #168 carries both halves: the read-modify-write allocation race and the Update-branch merge corruption (PR #1451 renumbering, the duplicated #141 rows, and the marker left at 142 below main's highest id)." + } +} diff --git a/docs/outstanding-issues-inbox/9dd78494-88b6-4d8e-b5c3-28caf91acaba.json b/docs/outstanding-issues-inbox/9dd78494-88b6-4d8e-b5c3-28caf91acaba.json new file mode 100644 index 0000000000..443ff47743 --- /dev/null +++ b/docs/outstanding-issues-inbox/9dd78494-88b6-4d8e-b5c3-28caf91acaba.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "9dd78494-88b6-4d8e-b5c3-28caf91acaba", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#260", + "outcome": "Merged into #169 (machine-local work at risk). Its specifics are carried there: two unpushed commits c3c9d6a31 and abbcdc8e9 on claude/cloud-pr-loop-prevention-bc052b, ~389 lines of Sentry setup and logging hardening across src/sentry.*.config.ts, src/lib/env.ts, src/lib/supabase/client.tsx and src/components/ui-primitives.tsx." + } +} diff --git a/docs/outstanding-issues-inbox/a101203a-ae13-46e0-9f76-6e91adf77c9a.json b/docs/outstanding-issues-inbox/a101203a-ae13-46e0-9f76-6e91adf77c9a.json new file mode 100644 index 0000000000..83c3a02872 --- /dev/null +++ b/docs/outstanding-issues-inbox/a101203a-ae13-46e0-9f76-6e91adf77c9a.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "a101203a-ae13-46e0-9f76-6e91adf77c9a", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#253", + "outcome": "Superseded by deletion. MobileResultFilterControl — the native select whose highlight PR #1606 set out to fix — no longer exists; every mode moved to ResultFilterTrigger + ResultFilterSheet under #247. What remained was a decision, not a merge, and the row's own text recommended closing it as superseded. PR #1606 should be closed on GitHub." + } +} diff --git a/docs/outstanding-issues-inbox/a5c8654c-f466-49b5-86ec-f783c15fc6e7.json b/docs/outstanding-issues-inbox/a5c8654c-f466-49b5-86ec-f783c15fc6e7.json new file mode 100644 index 0000000000..bcab864643 --- /dev/null +++ b/docs/outstanding-issues-inbox/a5c8654c-f466-49b5-86ec-f783c15fc6e7.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "id": "a5c8654c-f466-49b5-86ec-f783c15fc6e7", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#090", + "pri": "P3", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Blocked upstream on three plugins publishing ESLint 10 support, and the advisories are dev-scoped only with no runtime or user impact. A recheck reminder, not work. **Outcome:** full `npm audit` reports zero high advisories from the eslint toolchain. **Blocked 2026-07-30:** the stable ecosystem still has no compatible ESLint 10 set. `eslint-config-next@16.2.12` permits ESLint 10 but bundles `eslint-plugin-react@7.37.5`, `eslint-plugin-import@2.32.0`, and `eslint-plugin-jsx-a11y@6.10.2`; each plugin's published peer range still ends at ESLint 9, and the React plugin retains the previously reproduced removed-context-API crash. Keep the Dependabot major hold and ESLint `9.39.5`; do not force an invalid peer graph merely to make the audit report green. **Next:** recheck after those three plugins publish stable ESLint 10 support, then upgrade eslint and the complete plugin/config set together. Residual highs (`@eslint/config-array`, `@eslint/eslintrc`, `eslint`, `eslint-config-next`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, plus the advisory's numeric `<=5.0.7` hit on the unused `brace-expansion@1.1.16` / `2.1.2` maintenance lines that still ship an unpatched `main`) cascade from this dev-only toolchain. **Success:** peer-valid install, `npm run lint` clean, `verify:cheap` green, full-audit highs cleared, no rule-config regressions. **Stop:** do not use `npm audit fix --force` or override plugin peer ranges. Production `npm audit --omit=dev` is already clean after the exceljs `archiver@8` / `unzipper@0.12.5` overrides on PR #1314." + } +} diff --git a/docs/outstanding-issues-inbox/a8a73f5a-f4c5-4c97-8c5d-bc93215469bc.json b/docs/outstanding-issues-inbox/a8a73f5a-f4c5-4c97-8c5d-bc93215469bc.json new file mode 100644 index 0000000000..7674ecb7a2 --- /dev/null +++ b/docs/outstanding-issues-inbox/a8a73f5a-f4c5-4c97-8c5d-bc93215469bc.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "a8a73f5a-f4c5-4c97-8c5d-bc93215469bc", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#101", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Every candidate needs the #098 harness, the RAG flag, live-canary approval, 36/36 retrieval and recall 1.0 — provider spend and clinical-surface risk for latency nobody is currently waiting on. **Outcome:** remaining retrieval parallelisation candidates are explicit after PR #1474 shipped the metadata and memory parallelisation. **Remaining:** visual hydration triples (each migrated path still calls `attachPageVisualEvidence` after hydration — not yet parallelised, see `rag.ts:1442,1811,1857,1959,2194,2281`); nested `await`-in-loop scope enumeration (`search-scope.ts:202,328`); uncached typeahead results (`rag.ts:2698-2711`); and universal-search coalescing (`/api/search` has it; `/api/search/universal` does not). Each changes candidate assembly, truncation, or what the next keystroke returns, so each requires the #098 harness, the RAG flag, explicit live-canary approval, 36/36 retrieval, recall 1.0, and zero per-case reciprocal-rank regressions. Distinct from #001 (semantic rerank). **Completed:** PR #1474 parallelised metadata and memory (`hydrateCandidatesWithMetadataAndMemory`); do not propose that specific change again. **Stop:** no remaining candidate proceeds without its canary gate." + } +} diff --git a/docs/outstanding-issues-inbox/abd14d84-e4d6-4f8c-8384-a97817aafcb7.json b/docs/outstanding-issues-inbox/abd14d84-e4d6-4f8c-8384-a97817aafcb7.json new file mode 100644 index 0000000000..11124b47b4 --- /dev/null +++ b/docs/outstanding-issues-inbox/abd14d84-e4d6-4f8c-8384-a97817aafcb7.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "id": "abd14d84-e4d6-4f8c-8384-a97817aafcb7", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#212", + "pri": "P3", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** 40 casts at trust boundaries. Same reasoning as #211: worth doing, no measured defect traces to it, and it competes with clinical work for review attention. VERIFIED CORRECT 2026-08-12 — re-checked against merged main during the full ledger sweep and left unchanged: 40 `as unknown as` casts remain under src/ — the row's population is intact. This stamp exists so a later reader can tell \"checked and still true\" from \"never looked at\"; the two were indistinguishable before. 48 as unknown as casts and ~24 unvalidated JSON.parse calls across src/ trust Supabase, OpenAI, localStorage, file metadata and extraction boundaries. Start with src/lib/rag/rag.ts and src/app/api/* routes, mirroring existing Zod use in src/lib/validation/body.ts and src/lib/extractors/document.ts. See docs/review-findings-2026-08-02.md sections 2.2, 2.3 and 8." + } +} diff --git a/docs/outstanding-issues-inbox/b278a991-3122-4662-a835-37dd1d6645cc.json b/docs/outstanding-issues-inbox/b278a991-3122-4662-a835-37dd1d6645cc.json new file mode 100644 index 0000000000..a415317477 --- /dev/null +++ b/docs/outstanding-issues-inbox/b278a991-3122-4662-a835-37dd1d6645cc.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "id": "b278a991-3122-4662-a835-37dd1d6645cc", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#266", + "pri": "P3", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Adoption counting toward 53/53 while a clinical P1 is open. The row's own title says never as a race to 53/53; the queue has been running the race anyway. Demand-driven means it activates when a surface needs a component, not on a schedule. COUNTS RE-MEASURED 2026-08-12 from docs/design-system/adoption-manifest.json on merged main: **54 registered, 31 adopted, 23 UNADOPTED**. (This supersedes the 2026-08-08 figures of 53/30/23, which a main-merge briefly restored over this correction.) The total held at 23 but the membership moved — DisclosureGroup joined the adopted set, and the newly built ErrorState joined the unadopted set; ErrorState's enforcement is closed (archived #298) but its adoption is still open under #299. Today's 23: AnswerFooter, Checkbox, Citation, CitationList, ConfirmDialog, Disclosure, DoseLine, DownloadLink, ErrorState, ErrorSummary, ExternalTextLink, FieldError, FieldHint, LinkAction, Pagination, Progress, RadioGroup, SearchField, StageList, Tabs, TextLink, ToastRegion, Tooltip. Approach unchanged and still correct: demand-driven adoption — pick a surface and let it pull, the way AccessibleTable pulled Button and the answer surface pulled AnswerCard (#216) — never a race to 54/54. Forms remain the largest single tranche: FieldError, FieldHint, ErrorSummary, SearchField, Checkbox and RadioGroup land together on one form conversion. Do not stub a component to move the count. Regenerate with npm run design-system:adoption:update AND npm run design-system:design-sync:update; both manifests are generated, never hand-edited." + } +} diff --git a/docs/outstanding-issues-inbox/bb14f53c-d36f-48ce-a02d-836aaa107008.json b/docs/outstanding-issues-inbox/bb14f53c-d36f-48ce-a02d-836aaa107008.json new file mode 100644 index 0000000000..d738908243 --- /dev/null +++ b/docs/outstanding-issues-inbox/bb14f53c-d36f-48ce-a02d-836aaa107008.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "bb14f53c-d36f-48ce-a02d-836aaa107008", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#152", + "outcome": "Merged into #169 — one of four rows describing work that exists only on a machine no current session can reach. #169 is the survivor and carries the uncommitted worktree changes, the unpushed branches, the stranded Sentry commits (was #260) and the Wave 5 orphan branches and dev servers (was #236)." + } +} diff --git a/docs/outstanding-issues-inbox/bce5b6bd-4727-4ad5-ac5f-d05a24df43cc.json b/docs/outstanding-issues-inbox/bce5b6bd-4727-4ad5-ac5f-d05a24df43cc.json new file mode 100644 index 0000000000..f0093f511e --- /dev/null +++ b/docs/outstanding-issues-inbox/bce5b6bd-4727-4ad5-ac5f-d05a24df43cc.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "bce5b6bd-4727-4ad5-ac5f-d05a24df43cc", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#257", + "outcome": "One unreproduced sighting on 2026-08-06 (PR #1647 head f5833acc) that did not reproduce in isolation or on a full-file re-run, and has not recurred since. docs/testing.md needs three reproductions on the same SHA before a flake-ledger entry, so a single-sighting row has nothing to act on and a genuine second sighting will look like a first either way." + } +} diff --git a/docs/outstanding-issues-inbox/bf12d7c9-04f8-4095-ba68-0cf6f5736501.json b/docs/outstanding-issues-inbox/bf12d7c9-04f8-4095-ba68-0cf6f5736501.json new file mode 100644 index 0000000000..d1cc5d6dfd --- /dev/null +++ b/docs/outstanding-issues-inbox/bf12d7c9-04f8-4095-ba68-0cf6f5736501.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "bf12d7c9-04f8-4095-ba68-0cf6f5736501", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#086", + "outcome": "Umbrella index only. Superseded by its children #190 (X3 rag.ts), #191 (X5 ACL), #192 (X6 coverage), #193 (X7 reorg), #194 (L1 archive) and #195 (M1 host hardening), all of which exist as their own rows with the canonical runbook at docs/maturity-backlog-workorders.md. The index added a queue entry over rows that were already findable. AGENTS.md has been repointed at the children." + } +} diff --git a/docs/outstanding-issues-inbox/bfc60ffa-e648-47e1-8270-bc1056516239.json b/docs/outstanding-issues-inbox/bfc60ffa-e648-47e1-8270-bc1056516239.json new file mode 100644 index 0000000000..c0d291b6ff --- /dev/null +++ b/docs/outstanding-issues-inbox/bfc60ffa-e648-47e1-8270-bc1056516239.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "bfc60ffa-e648-47e1-8270-bc1056516239", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#254", + "outcome": "Archaeology on a settled dispute. PR #1613 was closed against PR #1617 on 2026-08-05, and the acceptance evidence is pinned to heads the branch has since moved past. Re-pinning evidence for a resolved dispute buys nothing; the Codex Cloud MCP position itself is recorded in docs/audit/cloud-connection-acceptance-2026-08-05.md." + } +} diff --git a/docs/outstanding-issues-inbox/c1218846-c99f-4d49-a44c-a97d642926aa.json b/docs/outstanding-issues-inbox/c1218846-c99f-4d49-a44c-a97d642926aa.json new file mode 100644 index 0000000000..123c3d1b5e --- /dev/null +++ b/docs/outstanding-issues-inbox/c1218846-c99f-4d49-a44c-a97d642926aa.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "c1218846-c99f-4d49-a44c-a97d642926aa", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#282", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** A probe to decide whether pdf.js decoder assets are needed. Worth doing eventually, but no reported rendering failure traces to JBIG2/JPX today, so it is speculative. **Outcome:** a measured decision about pdf.js's cMap/standard-font/WASM assets rather than an assumption either way. **Detail:** getDocument is configured with url plus the on-demand fetch flags and nothing else, so 'wasmUrl', 'standardFontDataUrl', 'cMapUrl' and 'iccUrl' are all unset. pdfjs-dist ships those assets (wasm 1.5 MB, standard_fonts 804 KB, cmaps 1.7 MB) and nothing copies them into public/. With wasmUrl null, 'useWorkerFetch' resolves false and the WASM image decoders cannot load, so JBIG2 and JPEG2000 images fall back to the JS decoders or fail; those are exactly the encodings a scanned guideline uses, and this repo runs an OCR pipeline, which implies scanned sources exist. Non-embedded standard-14 fonts fall back to system fonts, which is a fidelity risk on a clinical document rather than a failure. **Next:** sample the real corpus for JBIG2/JPX-encoded images and for PDFs relying on the standard 14 before shipping ~2 MB of static assets; if the corpus does use them, copy into public/pdfjs, set the URLs, and add immutable cache headers in next.config.ts (public/ is not counted by check:bundle-budget, so there is no budget risk — the cost is bytes over the wire on first use). **Stop:** do not ship the assets on the assumption alone." + } +} diff --git a/docs/outstanding-issues-inbox/c2c0104b-02e3-4ae3-8f8a-706c421ea4ce.json b/docs/outstanding-issues-inbox/c2c0104b-02e3-4ae3-8f8a-706c421ea4ce.json new file mode 100644 index 0000000000..aa18dd61f0 --- /dev/null +++ b/docs/outstanding-issues-inbox/c2c0104b-02e3-4ae3-8f8a-706c421ea4ce.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "c2c0104b-02e3-4ae3-8f8a-706c421ea4ce", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#244", + "outcome": "Standing caution retired into the code it protects, and now additionally pinned by a test. The forced-colours comment in src/app/ckb-v2-tokens.css states that trimming the three-selector group silently drops dark high-contrast mode, and tests/design-token-contract.test.ts asserts the complete selector group. Both verified present on main 2026-08-13." + } +} diff --git a/docs/outstanding-issues-inbox/cafca1f3-5985-4d5e-9a5e-47cb6d5ffafb.json b/docs/outstanding-issues-inbox/cafca1f3-5985-4d5e-9a5e-47cb6d5ffafb.json new file mode 100644 index 0000000000..5da6a66e93 --- /dev/null +++ b/docs/outstanding-issues-inbox/cafca1f3-5985-4d5e-9a5e-47cb6d5ffafb.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "cafca1f3-5985-4d5e-9a5e-47cb6d5ffafb", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#033", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** The row's own analysis argues against acting: on a partially-enriched corpus the model would likely over-caveat correct sources, and finding out costs a provider eval. Keep as a finding. `buildRagSourceBlock` omits `document_status`, `clinical_validation_status`, and `extraction_quality`, so the model cannot self-caveat during generation and governance is enforced only post-hoc. Generation-surface change: needs `eval:rag` plus `eval:quality --rag-only` (grounded-supported must not drop, citation-failure 0) and explicit approval. Carries the same \"unknown Γëá bad\" hazard as #032 — on a partially-enriched corpus the model would likely over-caveat correct sources, so design the prompt wording before spending an eval." + } +} diff --git a/docs/outstanding-issues-inbox/d34ff313-231a-4e65-93d6-806f5b910846.json b/docs/outstanding-issues-inbox/d34ff313-231a-4e65-93d6-806f5b910846.json new file mode 100644 index 0000000000..24c43fe5eb --- /dev/null +++ b/docs/outstanding-issues-inbox/d34ff313-231a-4e65-93d6-806f5b910846.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "d34ff313-231a-4e65-93d6-806f5b910846", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#016", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** A grab-bag of five deferred perf levers, each individually gated on a measurement or a rethink. Split it or leave it parked; as one row it cannot be started. Deferred larger levers: (a) nonce-CSP forces every product route to `╞Æ Dynamic` (zero static generation) — evaluate Partial Prerendering / static shells for the static clinical catalogues (DSM/differentials/therapy/specifiers/formulation); (b) sidebar expand/collapse animates `grid-template-columns` (biggest smoothness cost, motion-gated — needs a transform-overlay rethink); (c) Therapy Compass fetches 692 KB / 2.5 MB JSON client-side (defer until interaction + confirm brotli); (d) settings/setup/admin dialogs static-imported into the home chunk (`next/dynamic` them); (e) **DONE 2026-08-01 in PR-T (ds-v2 therapy teardown):** deleted `therapy-compass.css` and removed its route-group layout import — no longer render-blocking on `/`, `/documents`, `/forms`, `/dsm` and every mode home; (f) `shared-search-app-shell.tsx:8` statically imports the `therapy-compass` barrel, pulling `workspace.tsx` + `bindings.tsx` + `nav.tsx` into every `(search-app)` route; (g) three client waterfalls (`use-app-preferences.ts:156-182`, `ClinicalDashboard.tsx:977-1069`, `signed-image.tsx:60-84` + `use-signed-image-url.ts:39`) and the paint offenders in `globals.css` beyond the sidebar grid — three stacked `backdrop-filter` passes on an always-mounted translating element (`:709-748`), `box-shadow` inside a `transition` list (`:677-684`), and `@keyframes shimmer` animating `background-position` on the shared `Skeleton` (`:2289-2296`). **CORRECTED 2026-07-29 on (c):** the Therapy Compass filenames are unversioned and Next serves `/public` with an ETag, so only the FIRST visit pays 690.6 KB / 2,470 KB — repeat visits pay ~4 revalidation round trips. The fix is content-hashed filenames + `immutable` (touching `scripts/build-therapies-index.mjs` and `check:therapy-data-index`), NOT a bare `Cache-Control` line. See `docs/audit/latency-audit-2026-07-28.md` L3-1/L3-2/L3-3/L3-6/L3-7." + } +} diff --git a/docs/outstanding-issues-inbox/da9b65c7-7245-4878-8b75-56c4cbe211cb.json b/docs/outstanding-issues-inbox/da9b65c7-7245-4878-8b75-56c4cbe211cb.json new file mode 100644 index 0000000000..d0b86fc7bc --- /dev/null +++ b/docs/outstanding-issues-inbox/da9b65c7-7245-4878-8b75-56c4cbe211cb.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "da9b65c7-7245-4878-8b75-56c4cbe211cb", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#036", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** A compensating control already exists (unverified_source stays in the frontend-visible warning set) and the change touches RLS plus the clinical-risk-gated retrieval RPCs. Cost and blast radius exceed the residual risk. Public-corpus visibility is implicit: `owner_id IS NULL` on an `indexed` document (`resolveSearchScope`). The `metadata.public_corpus` marker is written by the promotion migrations but never used as a retrieval filter. Promotion is unconditional on `clinical_validation_status`, so unverified documents are publicly searchable — compensated by keeping `unverified_source` in the frontend-visible warning set. A hard schema flag touches RLS and the clinical-risk-gated retrieval RPCs; weigh against the existing compensating control before acting." + } +} diff --git a/docs/outstanding-issues-inbox/dcb1ba9e-18ea-4ae4-9594-8b7cbb6cbbcc.json b/docs/outstanding-issues-inbox/dcb1ba9e-18ea-4ae4-9594-8b7cbb6cbbcc.json new file mode 100644 index 0000000000..bb8e4b6cc9 --- /dev/null +++ b/docs/outstanding-issues-inbox/dcb1ba9e-18ea-4ae4-9594-8b7cbb6cbbcc.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "id": "dcb1ba9e-18ea-4ae4-9594-8b7cbb6cbbcc", + "createdOn": "2026-08-13", + "action": "add", + "payload": { + "pri": "P2", + "type": "issue", + "summary": "A row can outlive its own completion — nothing closes a ledger row when its work merges", + "detail": "**Found during the 2026-08-12 yield review; re-confirmed on main 2026-08-13.** The then-#304 row described a ranking-snapshot freshness fuse due to trip around 2026-08-19 and sat in the recommended queue as time-critical, but its work had already landed as commit d182844 (PR #1876) — the snapshot's generatedAt and sourceRunId no longer matched anything the row said. Nothing closes a row when its work merges: `issues:done` is a manual call, and the session that ships the work is often not the session that owns the row. This is the mirror of #292, which covers duplication BEFORE work starts; this is staleness AFTER it finishes, and it is more dangerous because the row keeps advertising urgency to every session that reads the queue. **Next:** the cheapest useful guard is a periodic re-verification pass that re-measures each open row against current main and flags rows whose stated evidence no longer reproduces — several rows already carry a hand-written VERIFIED CORRECT stamp, which shows the need but does it manually and unevenly. A stronger version has the handoff skill close the row in the same commit that lands the work. **Stop:** do not auto-close on keyword match; a row can be partially delivered (#215, #231) and auto-closing those would lose real remaining work.", + "source": "session 2026-08-12 ledger yield review; re-verified 2026-08-13" + } +} diff --git a/docs/outstanding-issues-inbox/e2b81b96-5063-429c-866f-3d42549bd1c8.json b/docs/outstanding-issues-inbox/e2b81b96-5063-429c-866f-3d42549bd1c8.json new file mode 100644 index 0000000000..9a415865b3 --- /dev/null +++ b/docs/outstanding-issues-inbox/e2b81b96-5063-429c-866f-3d42549bd1c8.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "e2b81b96-5063-429c-866f-3d42549bd1c8", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#241", + "outcome": "Standing caution retired into the code it protects. src/components/therapy-compass/bindings.tsx states, beside the THERAPY_CATALOGUE_SUMMARY read, why check:therapy-data-index is load-bearing and that a home listing real records must re-enable useTherapyData. Verified present on main 2026-08-13. No action was ever pending, so the row could not close on its own terms." + } +} diff --git a/docs/outstanding-issues-inbox/e7d125c0-98a4-45db-883e-b19937bd4550.json b/docs/outstanding-issues-inbox/e7d125c0-98a4-45db-883e-b19937bd4550.json new file mode 100644 index 0000000000..0c323811b9 --- /dev/null +++ b/docs/outstanding-issues-inbox/e7d125c0-98a4-45db-883e-b19937bd4550.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "e7d125c0-98a4-45db-883e-b19937bd4550", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#188", + "outcome": "Umbrella index only, and its children are retired to the runbook in the same batch. The disaster-recovery checklist is canonical in docs/operator-backlog.md and fires only after a schema restore, which is a runbook trigger rather than queued work. Note main separately opened a single consolidated DR row to keep the work visible; that supersedes both this umbrella and its five children." + } +} diff --git a/docs/outstanding-issues-inbox/f1673818-e4fe-4733-9db4-312b11d0279c.json b/docs/outstanding-issues-inbox/f1673818-e4fe-4733-9db4-312b11d0279c.json new file mode 100644 index 0000000000..99ce8b04a6 --- /dev/null +++ b/docs/outstanding-issues-inbox/f1673818-e4fe-4733-9db4-312b11d0279c.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "f1673818-e4fe-4733-9db4-312b11d0279c", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#027", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Off-platform uptime monitoring for a single-user prototype that is not in clinical use and has no availability commitment to anyone. Revisit when there is a user who would notice an outage. `live-domain-monitor.yml` runs on GitHub's cron, so it won't run in exactly the outage it should catch (Actions or the deploy itself down). Add an off-platform synthetic monitor (UptimeRobot / Better Stack / Checkly) hitting `/api/health` with a webhook alert. Provider setup, not code." + } +} diff --git a/docs/outstanding-issues-inbox/f6953f9c-671e-4bd3-82a5-d5825046cd95.json b/docs/outstanding-issues-inbox/f6953f9c-671e-4bd3-82a5-d5825046cd95.json new file mode 100644 index 0000000000..b210a3a621 --- /dev/null +++ b/docs/outstanding-issues-inbox/f6953f9c-671e-4bd3-82a5-d5825046cd95.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "f6953f9c-671e-4bd3-82a5-d5825046cd95", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#299", + "detail": "**DEPRIORITISED 2026-08-12 (yield review against current main).** Three surfaces hand-roll a guard that works. Converting them is consistency, not a fix. VERIFIED CORRECT 2026-08-12 — re-checked against merged main during the full ledger sweep and left unchanged: ErrorState has no product importer beyond src/components/ui/error-state.tsx, so the three hand-rolled surfaces are still unconverted. (Its ENFORCEMENT is closed — see archived #298.) This stamp exists so a later reader can tell \"checked and still true\" from \"never looked at\"; the two were indistinguishable before. Three surfaces hand-roll the guard and their comments state the rule outright: src/components/clinical-dashboard/search-results-header-band.tsx:210 ('no number may reach the DOM'), src/components/services/services-navigator-page.tsx:634 ('a blocked registry must not reach the band as 0 matches'), src/components/clinical-dashboard/favourites-command-library-page.tsx:1182. They are CORRECT today, just not shared, so this is convergence rather than a bug fix. The band's fault panel is the richest existing implementation (role=alert, warning tokens, AsyncButton retry with busy state, faultAction slot) and ErrorState was modelled on it, so the shapes already line up. Live-look change: own PR, Chromium pass. Per the M4 brief it sits DOWNSTREAM of design decisions the owner has not made, so doing it before the site-wide redesign risks redoing it. Do NOT bundle with the enforcement check. Stop: only these three - see the sibling row for three sites that were miscarried as guards." + } +} diff --git a/docs/outstanding-issues-inbox/f6e5fe24-02f4-4a49-beea-2f8bf20e0a0e.json b/docs/outstanding-issues-inbox/f6e5fe24-02f4-4a49-beea-2f8bf20e0a0e.json new file mode 100644 index 0000000000..25d9115eba --- /dev/null +++ b/docs/outstanding-issues-inbox/f6e5fe24-02f4-4a49-beea-2f8bf20e0a0e.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "f6e5fe24-02f4-4a49-beea-2f8bf20e0a0e", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#301", + "outcome": "Merged into #292 — the same failure mode (two sessions build the same queued item because the ledger has no claim mechanism), recorded twice from two incidents. #292 carries both the in-page-nav duplication (PR #1766 merged, #1767 closed) and the #262 part-3 ratchet collision, plus the understated-GATES.md-row contribution this row identified." + } +} diff --git a/docs/outstanding-issues-inbox/fa725f37-2d49-480e-83bc-23e8bca4c232.json b/docs/outstanding-issues-inbox/fa725f37-2d49-480e-83bc-23e8bca4c232.json new file mode 100644 index 0000000000..1dc0d2efe9 --- /dev/null +++ b/docs/outstanding-issues-inbox/fa725f37-2d49-480e-83bc-23e8bca4c232.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "fa725f37-2d49-480e-83bc-23e8bca4c232", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#200", + "outcome": "Retired to the runbook (docs/operator-backlog.md disaster-recovery checklist). See #196 for the rationale." + } +} diff --git a/docs/outstanding-issues-inbox/fc44a290-5b8f-4ee4-b233-516774792802.json b/docs/outstanding-issues-inbox/fc44a290-5b8f-4ee4-b233-516774792802.json new file mode 100644 index 0000000000..b56926d483 --- /dev/null +++ b/docs/outstanding-issues-inbox/fc44a290-5b8f-4ee4-b233-516774792802.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "fc44a290-5b8f-4ee4-b233-516774792802", + "createdOn": "2026-08-13", + "action": "done", + "payload": { + "id": "#304", + "outcome": "Already done before this sweep — commit d182844 (PR #1876) refreshed the ranking snapshot from the 2026-08-09 green canary. Re-verified on current main 2026-08-13: generatedAt is 1 day old with sourceRunId 31329507691, not the 2026-07-20 / 29763761133 this row describes, so the 30-day freshness fuse in tests/ranking-tuning.test.ts is not armed. The row outlived its own completion." + } +} From d896e09698f86ffecbd35a19267ae8148bdcb578 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Aug 2026 14:47:37 +0000 Subject: [PATCH 2/4] docs(ledger): record the ledger-sweep re-filing handoff Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01DuYJz8hauCsCdx8r4fXiZU --- ...9c7a8ee212d24cb85ff3d58122c4f4f65df72503e756190f3cb.record.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/branch-review-records/7cdd3521cc3cf9c7a8ee212d24cb85ff3d58122c4f4f65df72503e756190f3cb.record.md diff --git a/docs/branch-review-records/7cdd3521cc3cf9c7a8ee212d24cb85ff3d58122c4f4f65df72503e756190f3cb.record.md b/docs/branch-review-records/7cdd3521cc3cf9c7a8ee212d24cb85ff3d58122c4f4f65df72503e756190f3cb.record.md new file mode 100644 index 0000000000..d89bb557dd --- /dev/null +++ b/docs/branch-review-records/7cdd3521cc3cf9c7a8ee212d24cb85ff3d58122c4f4f65df72503e756190f3cb.record.md @@ -0,0 +1 @@ +| 2026-08-13 | claude/ledger-sweep-inbox-requests | 0e3ed773cddf1b59c64ca81162fd76d84051359d | re-file the 2026-08-12 yield review as 43 inbox requests (22 done, 19 update, 2 add); premises re-verified against current main | handoff: PR #1920 opened for review | verify:pr-local 11/11 failed:(none); check:ledger-write-discipline passed (no canonical edit); batch dry-applied 114->95 open, 196->220 archived, checkIssues PASS | From 63864c4717b7f1317a98483c652c701b128e1c74 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Aug 2026 15:35:54 +0000 Subject: [PATCH 3/4] docs(issues): re-file the dead-Outcome-cells row with the implementation design MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cancels the original request and re-files it, using the inbox's own supersede mechanism rather than editing an immutable request. The original said 'drop the Outcome column (or replace each cell with a pointer)'. Building it on 2026-08-13 established that dropping the column is wrong and that two other constraints are load-bearing, none of which are visible from reading the code: - The rewrite cannot be a direct edit, and cannot even be code-only. It has to run inside applyRequestBatch — the function check-ledger-write-discipline imports — and land in the same commit as a reconcile, or the checker computes normalise(base) against an un-normalised canonical and fails every PR. - Dropping the column makes the queue vanish from /issues, because issues-report skips any queue row whose cells.length !== 7. - Composite ID(s) rows must keep their prose. Derivation deliberately skips them, so they still fall back to the Outcome cell; blanking it leaves them with nothing. Found by running it: order 17 (#013, #016) rendered empty. Recording these now because rediscovering them costs another build-and-revert cycle, which is what this session just spent. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01DuYJz8hauCsCdx8r4fXiZU --- .../05b0c32b-07f7-4ca2-9361-4d7bc5490661.json | 10 ++++++++++ .../ce7dfda5-ea3b-4cb8-a992-aec759367f9d.json | 13 +++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 docs/outstanding-issues-inbox/05b0c32b-07f7-4ca2-9361-4d7bc5490661.json create mode 100644 docs/outstanding-issues-inbox/ce7dfda5-ea3b-4cb8-a992-aec759367f9d.json diff --git a/docs/outstanding-issues-inbox/05b0c32b-07f7-4ca2-9361-4d7bc5490661.json b/docs/outstanding-issues-inbox/05b0c32b-07f7-4ca2-9361-4d7bc5490661.json new file mode 100644 index 0000000000..4046f70a4b --- /dev/null +++ b/docs/outstanding-issues-inbox/05b0c32b-07f7-4ca2-9361-4d7bc5490661.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "id": "05b0c32b-07f7-4ca2-9361-4d7bc5490661", + "createdOn": "2026-08-13", + "action": "cancel", + "payload": { + "requestId": "0d8735c6-1950-4fef-8880-007063bbf662", + "reason": "Superseded by a re-filed version of the same row carrying the implementation design and the composite-row trap, both established by building it on 2026-08-13. The original text proposed dropping the Outcome column, which would break issues-report." + } +} diff --git a/docs/outstanding-issues-inbox/ce7dfda5-ea3b-4cb8-a992-aec759367f9d.json b/docs/outstanding-issues-inbox/ce7dfda5-ea3b-4cb8-a992-aec759367f9d.json new file mode 100644 index 0000000000..5b431eed2d --- /dev/null +++ b/docs/outstanding-issues-inbox/ce7dfda5-ea3b-4cb8-a992-aec759367f9d.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "id": "ce7dfda5-ea3b-4cb8-a992-aec759367f9d", + "createdOn": "2026-08-13", + "action": "add", + "payload": { + "pri": "P3", + "type": "task", + "summary": "The recommended queue's Outcome cells are now unrendered dead text", + "detail": "**Residual of the queue-misdirection fix (PR #1902).** Both consumers — .claude/hooks/issues-surface.sh and scripts/issues-report.mjs — now derive each queue row's prose from the cited row's Detail cell, so the Outcome column reaches no reader through tooling. The stale prose still sits in the file, where a human opening it can read and act on it; for #231 that prose pointed at an approach the row had already recorded as refuted. **Implementation, established by building it 2026-08-13 — three findings that are not obvious:** (1) It cannot be a direct edit. check-ledger-write-discipline compares the canonical ledger against exactly applyRequestBatch(base, movedRequests), and no request type reaches the queue, so a hand edit is unlandable by construction. The rewrite has to live INSIDE applyRequestBatch — the function the checker itself imports — so checker and reconciler compute the same result; make it run for an empty batch and be idempotent so ordinary PRs are byte-identical. (2) It must land in the SAME commit as a reconcile. Code alone makes the checker compute normalise(base) while canonical stays un-normalised, failing every PR until a reconcile normalises it. (3) Do NOT drop the column, and do NOT blank composite rows. issues-report skips any queue row whose cells.length !== 7, so removing the column makes the queue vanish from /issues; and derivation deliberately skips composite ID(s) rows, so those still fall back to the Outcome cell and blanking it leaves them with no prose at all — filter to rows citing exactly one id. **Stop:** do not delete the queue table; order, acuity, capability, when and estimate exist nowhere else.", + "source": "PR #1902; implementation attempt 2026-08-13" + } +} From c4fe046b7e7017cb73d2fd7341e41109531f32cd Mon Sep 17 00:00:00 2001 From: BigSimmo <87357024+BigSimmo@users.noreply.github.com> Date: Fri, 14 Aug 2026 00:59:42 +0800 Subject: [PATCH 4/4] docs(issues): preserve ledger survivor state --- ...b5f4f8ea9d058996bfaa12027e14d843d16e8d.record.md | 1 + .../721e629e-15df-4b77-a25c-c18200bdca3f.json | 12 ++++++++++++ .../9c89036c-733b-41ed-b1f7-92f3daa2940b.json | 13 +++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 docs/branch-review-records/97da85c7931e595b66e1cd8240b5f4f8ea9d058996bfaa12027e14d843d16e8d.record.md create mode 100644 docs/outstanding-issues-inbox/721e629e-15df-4b77-a25c-c18200bdca3f.json create mode 100644 docs/outstanding-issues-inbox/9c89036c-733b-41ed-b1f7-92f3daa2940b.json diff --git a/docs/branch-review-records/97da85c7931e595b66e1cd8240b5f4f8ea9d058996bfaa12027e14d843d16e8d.record.md b/docs/branch-review-records/97da85c7931e595b66e1cd8240b5f4f8ea9d058996bfaa12027e14d843d16e8d.record.md new file mode 100644 index 0000000000..e0bbe2cfc1 --- /dev/null +++ b/docs/branch-review-records/97da85c7931e595b66e1cd8240b5f4f8ea9d058996bfaa12027e14d843d16e8d.record.md @@ -0,0 +1 @@ +| 2026-08-13 | claude/ledger-sweep-inbox-requests | 3f7569ab652b5d5c7608b63f38ff8f7e3dcc9b61 | PR #1920 full ledger-request review and fix | two confirmed P1 reconciliation defects repaired: preserve one open post-restore DR survivor and update #169 with the complete #152/#236/#260 machine-local inventory; #253 dispositioned no-change because PR #1606 is already closed unmerged and MobileResultFilterControl has no production reference; no additional P0/P1/P2 finding in the distinct manual adversarial pass | all 46 changed files reviewed; request schemas, UUID filename/id parity, mutation-conflict set, required inventory tokens, review-record hash, and post-apply survivor semantics checked locally; pre-fix exact-head CI green (PR required, Static PR checks, SAST, Gitleaks); hosted exact-head CI required after push | diff --git a/docs/outstanding-issues-inbox/721e629e-15df-4b77-a25c-c18200bdca3f.json b/docs/outstanding-issues-inbox/721e629e-15df-4b77-a25c-c18200bdca3f.json new file mode 100644 index 0000000000..be336fc716 --- /dev/null +++ b/docs/outstanding-issues-inbox/721e629e-15df-4b77-a25c-c18200bdca3f.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "id": "721e629e-15df-4b77-a25c-c18200bdca3f", + "createdOn": "2026-08-13", + "action": "update", + "payload": { + "id": "#169", + "summary": "Machine-local branches, snapshots, worktrees, and dev servers remain at risk", + "detail": "**CONSOLIDATED 2026-08-13 from #152, #236, and #260 before those source rows are archived by PR #1920. Outcome:** every branch, snapshot, worktree, or process that exists on only one machine remains recoverable and receives an explicit owner disposition before machine or worktree cleanup. **Original unpushed branches:** `claude/clinical-kb-design-system-333a69` was verified to contain 57 files / +4069 at tip `feat(design-system): v2 token layer, 26 components, browser-crash fix`, including `.design-sync/previews/*.tsx` absent from main. Also inspect `design-sync-db0a54`, `fable-implementation-fc937c`, `frosty-mayer-2c6167`, and `issues-133-evidence`. **Preserved WIP snapshots from #152, all unpushed, unreviewed, and unverified:** `codex/reconcile-immediate-20260730` at `748ef018f` (21 files, +395/-200 across 19 tracked, including `.github/workflows/ci.yml`, `package.json`, and `docs/scripts-index.md`); `codex/document-results-mockup-20260730` at `5dbd9f965` (8 tracked files, +13/-3, plus an untracked `document-search-results/page.tsx` mockup); `codex/chat-ledger-triage-d344` at `b7eae51a4` (`docs/outstanding-issues.md` +59/-61); and `claude/section-spy-browser-coverage` at `d949859c3` (`tests/ui-smoke.spec.ts` +51). **Wave-5 inventory from #236:** content-compare `claude/ds-v2-builder-a` and `claude/ds-v2-builder-b` with current `origin/main` because squash merges make ancestry checks unreliable; retain the associated process evidence for ports 3258 (`Database-wt-ds-v2-capture`), 3135 (`Database-wt-ds-v2-correctness`), and 3672 (`Database-wt-ds-v2-empty-state-heading`) until the owner confirms each process is no longer needed. **Stranded Sentry work from #260:** on the originating Windows machine, inspect branch `claude/cloud-pr-loop-prevention-bc052b` commits `c3c9d6a31` and `abbcdc8e9` (~389 lines across `src/sentry.*.config.ts`, `src/lib/env.ts`, `src/lib/supabase/client.tsx`, and `src/components/ui-primitives.tsx`) plus the same four uncommitted files in `.claude/worktrees/pensive-borg-6be2f0`; content-compare them with remote branches `claude/sentry-nextjs-sdk-setup-2v24q5` and `cursor/sentry-nextjs-sdk-7cee`, then record whether the work is unique, remotely preserved, or proven superseded. **Verification rule:** do not use `git rev-list` counts, three-dot diff, or ancestry alone to declare squash-merged work represented; verify the branch-added files or content against current main. **Cloud-session stop:** fresh cloud containers cannot observe the originating machine's local branches, worktrees, or processes, so never close this row from a cloud inventory that reports them absent. **Next:** complete and record each disposition from the originating machine. **Stop:** retain every listed branch, snapshot, worktree, and process record until content proof and owner disposition exist.", + "source": "sessions 2026-07-30/31 and 2026-08-04/07; #152/#169/#236/#260; PR #1920 review" + } +} diff --git a/docs/outstanding-issues-inbox/9c89036c-733b-41ed-b1f7-92f3daa2940b.json b/docs/outstanding-issues-inbox/9c89036c-733b-41ed-b1f7-92f3daa2940b.json new file mode 100644 index 0000000000..2eaaaab082 --- /dev/null +++ b/docs/outstanding-issues-inbox/9c89036c-733b-41ed-b1f7-92f3daa2940b.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "id": "9c89036c-733b-41ed-b1f7-92f3daa2940b", + "createdOn": "2026-08-13", + "action": "add", + "payload": { + "pri": "P3", + "type": "task", + "summary": "Keep post-restore environment recovery controls visible in the universal ledger", + "detail": "**Consolidated survivor for #188 and #196–#200 before their source rows are archived by PR #1920.** A schema restore is not operationally complete until all five environment-owned controls have been re-created and verified: (1) restore the ingestion, retention, and related `pg_cron` schedules and confirm they are active; (2) re-add required Supabase Vault secrets, including `cron_ingestion_jwt`, and verify names only without printing values; (3) re-set the required custom `app.*` database GUCs and verify them with read-only settings checks; (4) redeploy the required Supabase edge functions with the Deno v2.x toolchain and confirm the function list and health, only in an explicitly approved hosted-change window; and (5) re-enter dashboard-owned configuration, including auth providers and SSO redirect URLs, connection-pool caps, per-project keys, and `E2E_USER_*`, without committing secret values. **Next:** after every schema-restore drill or real restore, follow the disaster-recovery checklist in `docs/operator-backlog.md` and `docs/disaster-recovery-runbook.md`, record the verification outcome here, and keep the row open until all five controls are green. **Stop:** the runbooks are the execution procedure, not a substitute for this universal-ledger status row; do not treat a restored schema alone as recovered, expose secret values, or perform hosted writes without the required approval.", + "source": "docs/operator-backlog.md disaster-recovery checklist; docs/disaster-recovery-runbook.md; #188/#196–#200; PR #1920 review" + } +}