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
6 changes: 4 additions & 2 deletions docs/branch-review-ledger.md
Original file line number Diff line number Diff line change
Expand Up @@ -575,10 +575,12 @@ Records before 2026-07-28 were written by hand and had drifted: 146 lines carrie
| 2026-07-31 | claude/top-search-design-mockups-w53znc | c09eb64918ae2956968d35f3253c405ed9b915d5 | therapy-compass filter sheet + documents review fixes (C2) | Therapy Compass's phone Topics/availability selects were faking multi-select (value pinned to "", literal check-prefix in option text, a Clear-filters action among the options); replaced with one sheet of aria-pressed toggles matching the wide viewport, in the tc- idiom. Also lands two CodeRabbit findings from merged PR #1542: sheet footer primary action to sm:min-h-12, and the dialog test now pins aria-expanded/aria-controls. Third finding (unmount skips focus restore) dispositioned no-change with a test pinning the scroll lock is not leaked. | verify:cheap exit 0 (458 files / 4785 tests); ui-accessibility.spec.ts 15 passed chromium incl. the rewritten Therapy Compass case; ui-smoke documents journey 1 passed chromium |
| 2026-08-01 | claude/top-search-design-mockups-w53znc | 4f4440fd6776742f5de203ee15295f372205321d | search results bar: scope-system deletion, filter shelf, bar anatomy | Handoff for PR #1555. Deleted the inert command-scope system (voided props, six modes' scope config, three matchers, four no-op call sites, the original shelf) — behaviour-preserving because every matcher early-returned true on a permanently-empty array. Rebuilt the applied-filter shelf prop-driven on live facet data, scoped to documents and therapy-compass. Landed the bar anatomy: tile spinner and funnel states, Filter to the right edge, Sort inboard. Study step 6 (remove the library button) deliberately declined — the nav route clears the query via onSearchModeChange. Ledger #182 closed. | verify:pr-local exit 0 (460 files / 4796 tests, production build, client-bundle secret scan, RAG fixtures 36 cases / 23 suites); ui-tools 87 passed; ui-smoke + ui-accessibility 108 passed 1 failed (pre-existing PDF-canvas test, fails identically stashed, Chromium 1194 vs pinned 1228); mutation-tested the shelf's survives-loading guard |
| 2026-08-01 | claude/sentry-agent-monitoring-eri94v | 86983f344b45e42310e9f167a5adb0a56e46ddb5 | pr-1551 | merge-ready-pending-ci: merged origin/main; fixed outstanding-issues blank-line/#183 orphan + renumbered npm row to #204; kept worker+wizard error-tracking sections; qodo claim-spam thread already fixed on prior tip and resolved | check:outstanding-issues pass; merge-tree clean vs origin/main; prior tip Static PR failed on outstanding-issues; push 86983f344 |
| 2026-08-01 | claude/ds-v2-tooling-loop | 40181192519fddc9405523d06bd3e691096cda6c | PR-0 tooling loop: Context7 + Chrome DevTools MCP wiring, design-sync and mockup-capture scripts, docs/env-example updates (11 files, +1005/-11, no clinical or RAG surfaces) | gates green | verify:pr-local: format/lint/typecheck/lock-parity green; unit 4803 passed, 6 env-class WSL relay failures in ci-cache-safety.test.ts (Ubuntu distro stopped), focused rerun 13/13 green after WSL boot; check:rag:fixtures 36 golden cases green; build skipped by selector |
| 2026-08-01 | work | d4a4463172671cff3fd333feb685fa397e4f95d0 | latency, lazy loading, React and Next.js frontend performance | P2 eager document administration bundle boundary fixed; no P0/P1 findings | lint; typecheck; 463 files/4811 tests; production build; bundle budget |
| 2026-08-01 | codex/cloud-connected-profile-boundary | 6fddcfc780b237b6b2cd524dbebd7b1de70d9701 | Cloud connected profile credential boundary | No high-confidence issues after least-privilege MCP hardening and portable Git fixture fix | Cloud static PASS; focused Vitest 15/15; full format PASS; Bash syntax PASS; PR-local dry-run |
| 2026-08-01 | codex/cloud-connected-profile-boundary | 55b08496a5ee3495eed8a7436e8f69ae7b6612d8 | Cloud connected profile credential boundary | Reviewer findings fixed: cross-tenant service-role credential scrubbed and duplicate Supabase MCP parameters rejected | Cloud static PASS; focused Vitest 15/15; Bash syntax PASS; targeted Prettier PASS |
| 2026-08-01 | work | d4a4463172671cff3fd333feb685fa397e4f95d0 | latency, lazy loading, React and Next.js frontend performance | P2 eager document administration bundle boundary fixed; no P0/P1 findings | lint; typecheck; 463 files/4811 tests; production build; bundle budget |
| 2026-08-01 | codex/review-latency-and-lazy-loading-optimizations | 5f069a7fec4e6ada47a0074aa5f2ea2c9dc97830 | pr-1562 unblock | unblocked: merge-tree was clean behind-by-4; merged origin/main; no unresolved threads; prior tip CI green including Production UI + PR required | merge-tree clean vs origin/main; gh mergeable was CONFLICTING/DIRTY (staleness); unresolved threads 0; auto-merge off |
| 2026-08-01 | claude/ds-v2-therapy-teardown | f9cf75fefcf78a2049fa756322265ecb64845254 | PR-T therapy-compass CSS teardown: delete therapy-compass.css, migrate tc-* to design-system control recipes, resolve #205/#016(e); focusRing local after ui-primitives rename | gates green | check:design-system-contract green; docs-surface (links/scripts/inventory/index) green; test:e2e:critical 15/15; verify:ui 344 passed; verify:pr-local green (build+client-bundle+rag fixtures 36/36) |
| 2026-08-01 | claude/ds-v2-therapy-teardown | 4c96b90aa3e99f3e3aec81a005a1da6bf7a8792f | PR-T therapy-compass CSS teardown: delete therapy-compass.css, migrate tc-* to design-system control recipes, resolve #205/#016(e); focusRing local after ui-primitives rename | gates green | check:design-system-contract green; docs-surface (links/scripts/inventory/index) green; test:e2e:critical 15/15; verify:ui 344 passed; verify:pr-local green (build+client-bundle+rag fixtures 36/36); tip includes ledger append |
| 2026-08-01 | claude/ds-v2-tooling-loop | 40181192519fddc9405523d06bd3e691096cda6c | PR-0 tooling loop: Context7 + Chrome DevTools MCP wiring, design-sync and mockup-capture scripts, docs/env-example updates (11 files, +1005/-11, no clinical or RAG surfaces) | gates green | verify:pr-local: format/lint/typecheck/lock-parity green; unit 4803 passed, 6 env-class WSL relay failures in ci-cache-safety.test.ts (Ubuntu distro stopped), focused rerun 13/13 green after WSL boot; check:rag:fixtures 36 golden cases green; build skipped by selector |
| 2026-08-01 | claude/ds-v2-tooling-loop (PR #1568) | f6317ea48355c26e080ce45b6f574159e8397e24 | PR #1568 unblock/fix | merged origin/main (behind-but-clean; merge-tree was clean); cleared GitHub DIRTY/CONFLICTING; advisory review threads left open (not merge/CI blockers); auto-merge remains armed | merge-tree clean; ahead 7 behind 0; no provider-backed checks; no product code fix needed |
| 2026-08-01 | claude/ds-v2-tooling-loop (PR #1568) | b76bcc9fbc39f2f986a52869c810ba3cb89994f2 | PR #1568 review-thread resolve | fixed and resolved all 13 review threads (fail-closed project identity, inventory exit code, provenance demo id, buildCmd execution, chrome pin, context7 rollback); ledger row for superseded 93d41c1 dispositioned | node --check scripts; design-sync --dry-run; no provider-backed checks |
5 changes: 3 additions & 2 deletions docs/outstanding-issues.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ removed after current-main verification; it is not missing recommended work.
| 81 | `#204` | A2 | High — install/CI integrity | Next dependency or verify:pr-local change | 1–3 hours | npm 11.6.2 regenerates a lockfile its own `npm ci` rejects, reddening every CI job — add `npm ci --dry-run` (or lockfile-sync assertion) to `verify:pr-local` when package.json/lock change; do not regenerate with `npm install` to "fix". Distinct from #149. |


<!-- issues:next-id=205 -->
<!-- issues:next-id=206 -->
## Open items

> **Merged-main canary update (2026-07-23, run `30018289898`):** the new structured report correctly recorded evaluated tree `c24f2e8f2d30d0c59fc1eba025d3dcd63478137e`, run/attempt identity and `cross-region-runner` latency context. Golden retrieval remained 36/36 with document/content recall 1.0 and no failed cases. The 44-case answer gate had grounded-supported and unsupported-correct rates of 1.0, but failed because `neuroleptic-side-effect-escalation` again returned one citation where two are required (citation-failure rate 0.0227). `admission-discharge-comparison` again omitted the specific AKG admission document after `comparison_source_extractive_fallback`; `admission-discharge-coverage-paraphrase` was advisory-only at 24,870 ms. Answer cost was reported as `$0.234736`. Do not retry immediately: retain this as the first structured datapoint, compare it with the scheduled 2026-07-26 report, and keep retrieval/ranking unchanged.
Expand All @@ -154,7 +154,7 @@ removed after current-main verification; it is not missing recommended work.
| #057 | P2 | task | Complete staging soak and rollback rehearsal | After #056, run the documented soak and rollback against an exact candidate; retain latency/error/rollback evidence. Stop on unsafe data, identity mismatch, or an unowned rollback decision. | `docs/launch-operator-runbook.md`; `docs/capacity-review.md` | 2026-07-24 |
| #011 | P3 | task | Auth DB-connection allocation is operator-only | Supabase Auth (GoTrue) is capped at ~10 absolute DB connections (Supabase perf advisor). Switch to **percentage-based** allocation in the Supabase **dashboard** before the first compute scale-up — **not settable via SQL/MCP** (operator-owned). Verify via a staging soak + an approval-gated read-only advisor re-check. | `docs/auth-connection-cap-runbook.md`; `docs/process-hardening.md` (Known follow-up debts) | 2026-07-21 |
| #013 | P3 | rec | Route-chunk + mockup catalogue JSON weight | Keep this recommendation open and measurement-gated. `build:analyze` still finds route-scoped catalogue modules: `/specifiers` ships `specifiers-search-index.json` (~180 KB parsed), `/forms` ships `forms-catalog.json` (~132 KB), and `/formulation` ships `formulation-content.json` (~52 KB; client-side local search needs an index/full split or a search endpoint). The approved Lighthouse sample covered `/forms`, but `/specifiers` and `/formulation` remain unmeasured, so the precommitted `#017` rule does not permit archiving their payload work. Development-only `*-mockups.tsx` chunks are not an initial production bundle and production returns 404 for `/mockups/*`; do not restructure them without deploy-artifact or cold-start evidence. **Next:** collect route-specific LCP/CLS and CrUX INP evidence for `/specifiers` and `/formulation`, then close only the routes that meet every `#017` threshold. | session 2026-07-21 (`build:analyze`); PR #1470 review | 2026-07-21 |
| #016 | P3 | rec | "Big but not easy" structural + motion perf | 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) `src/app/(search-app)/layout.tsx:4` imports 71.6 KB of Therapy-Compass-only CSS in the ROUTE-GROUP layout, making it 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. | session 2026-07-21 (build route table + design audit) | 2026-07-21 |
| #016 | P3 | rec | "Big but not easy" structural + motion perf | 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. | session 2026-07-21 (build route table + design audit) | 2026-07-21 |
| #018 | P2 | task | Split the lithium, ADHD and metabolic residuals by mechanism | Current evidence keeps the mechanisms separate. **Lithium — closed within this item:** the row/atom-aware subject guard, foreign-parameter rejection and query-specific range promotion returned `0.5–1.0 mmol/L` with correct targeting/citation; the full retrieval canary remained 36/36 with recall 1.0 and zero per-case RR regressions, and the full answer canary passed every blocking gate. **ADHD — open corpus debt:** `CG.MHSP.ADHD.pdf` is absent from the hosted corpus and the retrieved chart exposes `accessible_table_count=0`; repair corpus/fixture or ingestion evidence rather than weakening extractive budgets. **Metabolic — open structured-evidence debt:** the standalone plural classifier worsened the live answer and was reverted; obtain auditable schedule text/table evidence before another candidate. | targeted live lithium/ADHD/metabolic evidence 2026-07-27; `docs/evidence/rag-reliability-evidence-2026-07-27.md`; refuted approaches | 2026-07-21 |
| #022 | P2 | task | Source-governance metadata refresh (operator) | The selected policy is now encoded locally as auditable `third_party_reference_attested` evidence with policy version, reviewer qualification, evidence references and append-only review history. It deliberately preserves `clinical_validation_status=unverified`; malformed, stale or non-BMJ evidence remains review debt. Migration `20260727010000_bmj_third_party_source_attestation.sql` is prepared but was **not applied**. The ten most visible local-document candidates are captured in `docs/evidence/rag-top-local-review-manifest-2026-07-26.json` with `attestation_applied=false`; qualified human review, deliberate hosted apply/attestation, and warning-rate remeasurement remain operator work. | governance worklist; local policy/migration tests; top-ten evidence manifest | 2026-07-21 |
| #023 | P2 | task | Complete scheduled browser and labeling disposition | **Partial 2026-07-30:** `release-browser-matrix` no longer depends on `pr-required`, so a blocking scheduled dependency audit cannot skip Firefox/WebKit. Still need one green matrix datapoint + human irrelevant-at-10 disposition. The 2026-07-26 retrieval and answer artifacts are read and compared under resolved #051. Scheduled CI run `30216361999` failed its existing production dependency audit before Firefox/WebKit, while production Chromium passed. After that audit is green, capture one scheduled/manual browser-matrix datapoint; separately record the human decision for the stable irrelevant-at-10 set. #084 now makes each top-10 grade and matched signal reproducible, but it does not substitute for the human disposition. Do not rerun or spend on RAG for this item. | runs `30216191889`/`30216361999`; per-rank diagnostics #084; session 2026-07-27 | 2026-07-21 |
Expand Down Expand Up @@ -362,5 +362,6 @@ Move resolved rows here with the resolution date and a one-line outcome. Keep th
| #185 | task | Confirm hosted migration history row for 20260731150000 db-query-perf | Confirmed on live Clinical KB Database (sjrfecxgysukkwxsowpy): supabase_migrations.schema_migrations has version 20260731150000 name db_query_perf_rate_limit_and_image_indexes; document_images_searchable_doc_page_relevance_idx present. No re-apply needed. | 2026-07-31 |
| #184 | task | Regenerate supabase/drift-manifest.json after db-query-perf migration | Regenerated supabase/drift-manifest.json via Docker npm run drift:manifest on host; includes document_images_searchable_doc_page_relevance_idx and updated consume_api_*_rate_limit inventory; schema_sha256 matches schema.sql. | 2026-07-31 |
| #182 | issue | The command-scope system is inert — chips are configured and matchers exist, but nothing can ever set a scope | Deleted. Took the option the row recommended: dropped the two voided props from universal-search-command-surface, the scope state and callbacks from both shells and the master header, the scopes config arrays and CommandScopeChip type, the three matcher functions, the four no-op consumer filters (services, forms, prescribing, favourites), and the band's scope shelf plus its empty-state Clear-scopes button. Net 453 deletions / 23 insertions across 13 files. Behaviour-preserving by construction: every matcher early-returned true on the permanently-empty array, so each call site was already a no-op. SearchCommandContext survives with query/modeId — applications-launcher-page still consumes it. Verified verify:cheap exit 0 (460 files / 4792 tests) and ui-smoke 93 passed, the one failure being the pre-existing PDF-canvas test that fails identically without this change. | 2026-07-31 |
| #205 | task | Retire therapy-compass.css (tc- class system) in favour of design-system classes | Resolved in PR-T (claude/ds-v2-therapy-teardown): therapy-compass.css deleted, all tc- classes migrated to design-system classes (therapyBtn/outlineControl/softControl), layout import removed, filter-sheet migrated; design-system contract check green. qtc- (cardiac QTc) identifiers deliberately untouched. | 2026-08-01 |


Loading
Loading