Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -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 |
Original file line numberDiff line numberDiff line change
@@ -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 |
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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"
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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-<run_id>; 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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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"
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Original file line numberDiff line numberDiff line change
@@ -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."
}
}
Loading
Loading