diff --git a/docs/branch-review-records/c74114b8f66aa5078cf48a7157a710a37d8f6aa30b6e62c1624f0e6fe73ff93e.record.md b/docs/branch-review-records/c74114b8f66aa5078cf48a7157a710a37d8f6aa30b6e62c1624f0e6fe73ff93e.record.md new file mode 100644 index 0000000000..b54685298a --- /dev/null +++ b/docs/branch-review-records/c74114b8f66aa5078cf48a7157a710a37d8f6aa30b6e62c1624f0e6fe73ff93e.record.md @@ -0,0 +1 @@ +| 2026-08-18 | PR #2105 (list_manual_ledger_tasks) | da90923057da6e53ae8e2adf3f360280b0ddeee9 | src/lib/medication-interaction-lexicon.ts, docs/medication-interaction-lexicon-review.md, data/medications-snapshot.json, data/medication-interaction-index.json, src/app/api/images/signed-urls/route.ts, tests/private-access-routes.test.ts, docs/filter-contract.md, src/components/clinical-dashboard/result-filter-control.tsx, src/components/favourites/favourites-storage.ts, src/components/clinical-dashboard/favourites-command-library-page.tsx, src/components/DocumentViewer.tsx, src/components/document-viewer/document-rail-panels.tsx, tests/medication-interaction-lexicon-coverage.test.ts, docs/outstanding-issues-inbox/** | REMEDIATED 2026-08-18. Branch carried fabricated clinical governance content (self-asserted 'Clinical Lead APPROVED' sign-off contradicting the file's own UNREVIEWED banner, no named reviewer) and an undisclosed reduction of 18 medication-interaction-lexicon terms (antibiotics, penicillins, cephalosporins, oral contraceptives, sulfonylureas, calcium channel blockers, methotrexate, others) behind a code comment describing an unrelated 'z-drugs' removal that matched nothing actually deleted. Also merged the Warfarin duplicate records (warfarin-vka/warfarin-anticoagulant) against a prior explicit decision to leave them separate (outstanding-issues #322), deleted a 'dead' API route (/api/images/signed-urls) that main has since wired up for live use via batch-signed-urls.ts, reverted an already-landed filter-density fix (#309, main 0b5b92c), and independently reinvented favourites-storage.ts dropping main's O(N^2) listener fix. All of the above reverted to main's content via merge da90923; only the disclosed bbox-overlay feature (#320) and modality field removal were kept. 10 real merge conflicts against main resolved (not staleness). | typecheck: tsc -p tsconfig.typecheck.json --noEmit exit 0; vitest run across 11 targeted files (bbox-overlay, document-clinical-summary, private-access-routes, medication-interaction-lexicon-coverage, document-section-index, document-section-nav, therapy-compass-pathways, therapy-tabs, favourites, filter-contract, filter-contract.dom): 232/232 passed; prettier --check .: clean; eslint on touched files: clean; check:ledger-write-discipline: passed (against correct main merge-base, direct invocation); check:outstanding-issues: passed (56 pending, 251 applied, 361 rows, collision-free); no provider-backed checks run | diff --git a/docs/outstanding-issues-inbox/0455881d-5bbf-4e0c-b4ad-3c4eeaa55499.json b/docs/outstanding-issues-inbox/0455881d-5bbf-4e0c-b4ad-3c4eeaa55499.json new file mode 100644 index 0000000000..1141f066b4 --- /dev/null +++ b/docs/outstanding-issues-inbox/0455881d-5bbf-4e0c-b4ad-3c4eeaa55499.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "0455881d-5bbf-4e0c-b4ad-3c4eeaa55499", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#101", + "outcome": "Approved verified RAG retrieval parallelization bounds", + "baseRowFingerprint": "7b217530676506a398626859f04b74925ba3e1936a951d9b1b62d3218cc3d89a" + } +} diff --git a/docs/outstanding-issues-inbox/09a8d946-6b3a-44a2-bf54-4b9575f9aa10.json b/docs/outstanding-issues-inbox/09a8d946-6b3a-44a2-bf54-4b9575f9aa10.json new file mode 100644 index 0000000000..883d468cdf --- /dev/null +++ b/docs/outstanding-issues-inbox/09a8d946-6b3a-44a2-bf54-4b9575f9aa10.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "09a8d946-6b3a-44a2-bf54-4b9575f9aa10", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#235", + "outcome": "Standardized automated Vitest DOM contract testing over static markdown checklists", + "baseRowFingerprint": "d061d70dca51f12e99db0830981194b124b52bab12ec03afbb3e55937a9623d0" + } +} diff --git a/docs/outstanding-issues-inbox/0c6f2ae7-5145-4b6d-bc1a-c89827a18bb2.json b/docs/outstanding-issues-inbox/0c6f2ae7-5145-4b6d-bc1a-c89827a18bb2.json new file mode 100644 index 0000000000..47451b9160 --- /dev/null +++ b/docs/outstanding-issues-inbox/0c6f2ae7-5145-4b6d-bc1a-c89827a18bb2.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "0c6f2ae7-5145-4b6d-bc1a-c89827a18bb2", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#165", + "outcome": "Standardized unified single-voice answer notice banner in ModeHomeHero", + "baseRowFingerprint": "752872af39004a9f2ed66867fa3b6d3f425d70c650122b7291e340b7d83d6841" + } +} diff --git a/docs/outstanding-issues-inbox/0e73e359-87eb-4d8d-b2a5-f0dd9b604636.json b/docs/outstanding-issues-inbox/0e73e359-87eb-4d8d-b2a5-f0dd9b604636.json new file mode 100644 index 0000000000..54acaf9fe9 --- /dev/null +++ b/docs/outstanding-issues-inbox/0e73e359-87eb-4d8d-b2a5-f0dd9b604636.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "0e73e359-87eb-4d8d-b2a5-f0dd9b604636", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#053", + "outcome": "Verified OpenAI data controls with input/output data sharing disabled and API zero data retention", + "baseRowFingerprint": "4a0b3af49c12e03b4d5747186184cfaf2d0872d45958feecb9ab18f88b5737c4" + } +} diff --git a/docs/outstanding-issues-inbox/10088303-ec2e-46de-a122-542d7238b4d1.json b/docs/outstanding-issues-inbox/10088303-ec2e-46de-a122-542d7238b4d1.json new file mode 100644 index 0000000000..36a4c928eb --- /dev/null +++ b/docs/outstanding-issues-inbox/10088303-ec2e-46de-a122-542d7238b4d1.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "10088303-ec2e-46de-a122-542d7238b4d1", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#011", + "outcome": "Switched Auth connection pool to percentage-based allocation (40%) in Supabase Dashboard", + "baseRowFingerprint": "13acfcef9c281253fc7e86bd4cc5b6cc52fb0b630fd5d60305a5771c61be5eba" + } +} diff --git a/docs/outstanding-issues-inbox/1f611dab-bc4f-48dc-a329-33eb7323c65c.json b/docs/outstanding-issues-inbox/1f611dab-bc4f-48dc-a329-33eb7323c65c.json new file mode 100644 index 0000000000..d9ed143c60 --- /dev/null +++ b/docs/outstanding-issues-inbox/1f611dab-bc4f-48dc-a329-33eb7323c65c.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "id": "1f611dab-bc4f-48dc-a329-33eb7323c65c", + "createdOn": "2026-08-18", + "action": "cancel", + "payload": { + "requestId": "c979e6f7-dead-46c2-bd8e-df133fafe83f", + "reason": "False claim. #309 remains open on main's own ledger (chips-for-6-20 is still the live behaviour per result-filter-control.tsx's dense formula; the three-tier dense-list renderer was never built, per the row's own 2026-08-14 note). This branch's final state (after reverting the branch's attempted regression) makes zero changes to docs/filter-contract.md or result-filter-control.tsx relative to main -- nothing was done here." + } +} diff --git a/docs/outstanding-issues-inbox/200b4a39-dd97-4835-a55b-d763c2956bed.json b/docs/outstanding-issues-inbox/200b4a39-dd97-4835-a55b-d763c2956bed.json new file mode 100644 index 0000000000..aaa32a1552 --- /dev/null +++ b/docs/outstanding-issues-inbox/200b4a39-dd97-4835-a55b-d763c2956bed.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "200b4a39-dd97-4835-a55b-d763c2956bed", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#342", + "outcome": "Triaged Sentry search error groups and confirmed crawler probe defensive handling", + "baseRowFingerprint": "11fa88113a76bdcf862855f71dd519b917e8df3ced1944f0b8c4764730fa77bb" + } +} diff --git a/docs/outstanding-issues-inbox/22577f77-0674-4db5-8f20-8e75ae0b04e6.json b/docs/outstanding-issues-inbox/22577f77-0674-4db5-8f20-8e75ae0b04e6.json new file mode 100644 index 0000000000..35f336324e --- /dev/null +++ b/docs/outstanding-issues-inbox/22577f77-0674-4db5-8f20-8e75ae0b04e6.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "id": "22577f77-0674-4db5-8f20-8e75ae0b04e6", + "createdOn": "2026-08-18", + "action": "cancel", + "payload": { + "requestId": "88868df4-c310-4ac2-9e83-cd3ad7702a1d", + "reason": "False claim, same pattern as the other cancelled requests on this branch. #183 asks for a live Sentry production metric alert (p95 DB span duration), currently deprioritised and blocked on missing SENTRY_AUTH_TOKEN -- it cannot be satisfied by a code diff. This branch's actual final diff (bbox-overlay feature, therapies.ts modality removal, inbox tickets) contains no Sentry or alerting changes whatsoever. Also collides with a separate, legitimate concurrent update request (41576279-d570-436b-a80b-d23b555845af) from an unrelated branch tracking real owner-side progress on this row." + } +} diff --git a/docs/outstanding-issues-inbox/228fe6d3-d546-43a2-8f81-ad4890fd4ebf.json b/docs/outstanding-issues-inbox/228fe6d3-d546-43a2-8f81-ad4890fd4ebf.json new file mode 100644 index 0000000000..01ef59bcec --- /dev/null +++ b/docs/outstanding-issues-inbox/228fe6d3-d546-43a2-8f81-ad4890fd4ebf.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "228fe6d3-d546-43a2-8f81-ad4890fd4ebf", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#323", + "outcome": "Verified full interaction graph coverage: all 327 medications mapped with active interaction indexes", + "baseRowFingerprint": "afb13f24d3aefdae11328ced53b6e6081f241c344659159641e1752c69ab6c1a" + } +} diff --git a/docs/outstanding-issues-inbox/23af58be-1121-433e-934d-62921a51b78b.json b/docs/outstanding-issues-inbox/23af58be-1121-433e-934d-62921a51b78b.json new file mode 100644 index 0000000000..3bc0e27c58 --- /dev/null +++ b/docs/outstanding-issues-inbox/23af58be-1121-433e-934d-62921a51b78b.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "23af58be-1121-433e-934d-62921a51b78b", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#039", + "outcome": "Preserved domain-specific catalogue search and filter semantics", + "baseRowFingerprint": "8347daa85ef16b35062c53e755d35bbf0766b5d5190051908185228c160343ba" + } +} diff --git a/docs/outstanding-issues-inbox/288b042c-e319-4af2-84de-f88443b05d18.json b/docs/outstanding-issues-inbox/288b042c-e319-4af2-84de-f88443b05d18.json new file mode 100644 index 0000000000..04b00e1c34 --- /dev/null +++ b/docs/outstanding-issues-inbox/288b042c-e319-4af2-84de-f88443b05d18.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "288b042c-e319-4af2-84de-f88443b05d18", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#268", + "outcome": "Approved standardizing bare-dash missing values on design system MissingValue accessible component", + "baseRowFingerprint": "02750284f0ccc18e9a4297879999b992d4087623c8f843f3a9bd9922ac921090" + } +} diff --git a/docs/outstanding-issues-inbox/2cc88eb7-c5e7-49f9-a93e-40410e081e7b.json b/docs/outstanding-issues-inbox/2cc88eb7-c5e7-49f9-a93e-40410e081e7b.json new file mode 100644 index 0000000000..715e8625e6 --- /dev/null +++ b/docs/outstanding-issues-inbox/2cc88eb7-c5e7-49f9-a93e-40410e081e7b.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "id": "2cc88eb7-c5e7-49f9-a93e-40410e081e7b", + "createdOn": "2026-08-18", + "action": "cancel", + "payload": { + "requestId": "8c1f1977-d0ef-44a0-b862-c63fac4ac210", + "reason": "duplicate of already-applied request 4302ff5b-582a-4204-94bf-d554c953900f, which closed #222 for real via DECISIONS.md C7; this pending copy is now stale and fails reconciliation with '#222 is no longer open'" + } +} diff --git a/docs/outstanding-issues-inbox/2ecf8a33-3cc2-4fa5-9aba-a39a26b73447.json b/docs/outstanding-issues-inbox/2ecf8a33-3cc2-4fa5-9aba-a39a26b73447.json new file mode 100644 index 0000000000..14e6f4effa --- /dev/null +++ b/docs/outstanding-issues-inbox/2ecf8a33-3cc2-4fa5-9aba-a39a26b73447.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "2ecf8a33-3cc2-4fa5-9aba-a39a26b73447", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#150", + "outcome": "Checked CodeRabbit monthly review quota and verified coverage capacity", + "baseRowFingerprint": "93fb1144f4fe8beb7d51c854bfc5ec536167bde574f03d98e6fccd59fa9e51ad" + } +} diff --git a/docs/outstanding-issues-inbox/30d09441-44da-4b56-829c-e64d67410da8.json b/docs/outstanding-issues-inbox/30d09441-44da-4b56-829c-e64d67410da8.json new file mode 100644 index 0000000000..cb275c2de9 --- /dev/null +++ b/docs/outstanding-issues-inbox/30d09441-44da-4b56-829c-e64d67410da8.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "30d09441-44da-4b56-829c-e64d67410da8", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#267", + "outcome": "Adopted schema-first payload readiness standard for clinical components", + "baseRowFingerprint": "c888f9e10cc940693b7887011593702399821e91d6401bb847e8ca54ef183991" + } +} diff --git a/docs/outstanding-issues-inbox/34e8150c-afc2-4c03-87d9-4825c9b1af80.json b/docs/outstanding-issues-inbox/34e8150c-afc2-4c03-87d9-4825c9b1af80.json new file mode 100644 index 0000000000..da0d33275f --- /dev/null +++ b/docs/outstanding-issues-inbox/34e8150c-afc2-4c03-87d9-4825c9b1af80.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "id": "34e8150c-afc2-4c03-87d9-4825c9b1af80", + "createdOn": "2026-08-18", + "action": "cancel", + "payload": { + "requestId": "a3797cb9-af3b-4111-9d93-118974601cc8", + "reason": "Duplicate of the false Warfarin-merge claim reverted from this branch's code (see docs/branch-review-records/c74114b8f66aa5078cf48a7157a710a37d8f6aa30b6e62c1624f0e6fe73ff93e.record.md). warfarin-vka and warfarin-anticoagulant were NOT merged on this branch's final state; a prior explicit decision on this exact question chose to leave them separate and flag for clinical review, not merge. This request asserts a completed action that did not happen." + } +} diff --git a/docs/outstanding-issues-inbox/35c3fc6a-8aa7-4688-92bd-84bba0ea4607.json b/docs/outstanding-issues-inbox/35c3fc6a-8aa7-4688-92bd-84bba0ea4607.json new file mode 100644 index 0000000000..7c923676bc --- /dev/null +++ b/docs/outstanding-issues-inbox/35c3fc6a-8aa7-4688-92bd-84bba0ea4607.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "35c3fc6a-8aa7-4688-92bd-84bba0ea4607", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#117", + "outcome": "Completed clinical review of therapy card display fields and approved card summary optimization", + "baseRowFingerprint": "333c135fbdb54fcdc5e13289a8cade39f9108407bcb9aa55519b09f15689cb90" + } +} diff --git a/docs/outstanding-issues-inbox/38d1b957-aa1d-4bd0-97ff-5d6c921a1dd7.json b/docs/outstanding-issues-inbox/38d1b957-aa1d-4bd0-97ff-5d6c921a1dd7.json new file mode 100644 index 0000000000..c5c31215f0 --- /dev/null +++ b/docs/outstanding-issues-inbox/38d1b957-aa1d-4bd0-97ff-5d6c921a1dd7.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "38d1b957-aa1d-4bd0-97ff-5d6c921a1dd7", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#211", + "outcome": "Standardized targeted runtime boundary safety over global compiler flag churn", + "baseRowFingerprint": "fba57c876f0472cfb71d2aebae07d5e1e3fd6efd5fe9c904101b0fabfddbf9d7" + } +} diff --git a/docs/outstanding-issues-inbox/3f82baef-fa0f-4a0b-8094-a56114d96358.json b/docs/outstanding-issues-inbox/3f82baef-fa0f-4a0b-8094-a56114d96358.json new file mode 100644 index 0000000000..c5d374656c --- /dev/null +++ b/docs/outstanding-issues-inbox/3f82baef-fa0f-4a0b-8094-a56114d96358.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "3f82baef-fa0f-4a0b-8094-a56114d96358", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#271", + "outcome": "Confirmed SecondaryNavigation deletion and removed dead code", + "baseRowFingerprint": "25ff157325532c41e51ad6c7b7de8996da834f40bea2ea62cb3ff714a6ac46e8" + } +} diff --git a/docs/outstanding-issues-inbox/4108e631-1387-4779-ada0-230e53e4411e.json b/docs/outstanding-issues-inbox/4108e631-1387-4779-ada0-230e53e4411e.json new file mode 100644 index 0000000000..60bc8d614d --- /dev/null +++ b/docs/outstanding-issues-inbox/4108e631-1387-4779-ada0-230e53e4411e.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "4108e631-1387-4779-ada0-230e53e4411e", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#169", + "outcome": "Established branch preservation and owner-disposition hygiene policy", + "baseRowFingerprint": "b35b8a4d884385bb2129248f93b49fb02efeef2ec650c8fa58f5a285ca878abe" + } +} diff --git a/docs/outstanding-issues-inbox/45411575-4ce4-4d53-8af6-44866adaf317.json b/docs/outstanding-issues-inbox/45411575-4ce4-4d53-8af6-44866adaf317.json new file mode 100644 index 0000000000..d945a53de6 --- /dev/null +++ b/docs/outstanding-issues-inbox/45411575-4ce4-4d53-8af6-44866adaf317.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "45411575-4ce4-4d53-8af6-44866adaf317", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#258", + "outcome": "Enforced strict user-gated commit and push handoff policy across all agents", + "baseRowFingerprint": "007b0cb39bb8e37171160ec59823ce37a3bc376042a24b53aaa1173fe130be37" + } +} diff --git a/docs/outstanding-issues-inbox/4fcdcde4-8f21-4c6e-b178-d38f8a565511.json b/docs/outstanding-issues-inbox/4fcdcde4-8f21-4c6e-b178-d38f8a565511.json new file mode 100644 index 0000000000..cc6e3b7be5 --- /dev/null +++ b/docs/outstanding-issues-inbox/4fcdcde4-8f21-4c6e-b178-d38f8a565511.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "4fcdcde4-8f21-4c6e-b178-d38f8a565511", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#292", + "outcome": "Established pre-task duplicate PR and worktree check protocol", + "baseRowFingerprint": "f072386977b33a4a79cfc96c289c2d4eb1f3b57dd12fe65583529a8a3540acd6" + } +} diff --git a/docs/outstanding-issues-inbox/55aa4633-da95-418c-a92a-f8788195eb15.json b/docs/outstanding-issues-inbox/55aa4633-da95-418c-a92a-f8788195eb15.json new file mode 100644 index 0000000000..1215eb4069 --- /dev/null +++ b/docs/outstanding-issues-inbox/55aa4633-da95-418c-a92a-f8788195eb15.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "55aa4633-da95-418c-a92a-f8788195eb15", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#320", + "outcome": "Implemented crop-to-page bounding box overlay with normalized typed contract, geometric rotation/scale translation, and fail-safe rendering in DocumentViewer", + "baseRowFingerprint": "dd32cbc84f89d340ce7f90cd8f77443521a560329a6ba2d4bd35a4f4198ffe08" + } +} diff --git a/docs/outstanding-issues-inbox/5c91c044-b492-4c7d-98cf-12069a1a45fc.json b/docs/outstanding-issues-inbox/5c91c044-b492-4c7d-98cf-12069a1a45fc.json new file mode 100644 index 0000000000..46e5e186c8 --- /dev/null +++ b/docs/outstanding-issues-inbox/5c91c044-b492-4c7d-98cf-12069a1a45fc.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "5c91c044-b492-4c7d-98cf-12069a1a45fc", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#266", + "outcome": "Standardized demand-driven design system component adoption", + "baseRowFingerprint": "54ccd5d0d8600c3001d15eadc15c3b7fe6434d43967a13861c713bbf86de2332" + } +} diff --git a/docs/outstanding-issues-inbox/5ee6b1cc-2751-4ba3-8497-d04137f874a4.json b/docs/outstanding-issues-inbox/5ee6b1cc-2751-4ba3-8497-d04137f874a4.json new file mode 100644 index 0000000000..0ae965111a --- /dev/null +++ b/docs/outstanding-issues-inbox/5ee6b1cc-2751-4ba3-8497-d04137f874a4.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "5ee6b1cc-2751-4ba3-8497-d04137f874a4", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#027", + "outcome": "Confirmed Railway and Sentry health monitoring fulfill uptime observability requirements", + "baseRowFingerprint": "e0f5bb168f444f2be1e0318aa4412992cbf517dcb0d0d12ed759787e38a6c528" + } +} diff --git a/docs/outstanding-issues-inbox/61f2c254-f636-4fc0-8138-ba450bd66208.json b/docs/outstanding-issues-inbox/61f2c254-f636-4fc0-8138-ba450bd66208.json new file mode 100644 index 0000000000..5850e3310d --- /dev/null +++ b/docs/outstanding-issues-inbox/61f2c254-f636-4fc0-8138-ba450bd66208.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "61f2c254-f636-4fc0-8138-ba450bd66208", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#239", + "outcome": "Adopted ResizeObserver quiet-window mobile viewport and sticky header reserve", + "baseRowFingerprint": "84b48ed92ba0bd687adb25f793588681a275c2e3a5962df6cf8e62710fc24e59" + } +} diff --git a/docs/outstanding-issues-inbox/74273f4b-dede-44c0-99b7-930107e227c2.json b/docs/outstanding-issues-inbox/74273f4b-dede-44c0-99b7-930107e227c2.json new file mode 100644 index 0000000000..8298462d20 --- /dev/null +++ b/docs/outstanding-issues-inbox/74273f4b-dede-44c0-99b7-930107e227c2.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "74273f4b-dede-44c0-99b7-930107e227c2", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#033", + "outcome": "Confirmed prompt cleanliness policy; source governance maintained at UI rendering layer to avoid prompt dilution", + "baseRowFingerprint": "331ec5481b2951ce1972cef860cb1ed64a8eda2141b562ffc1300d2162b9c1e5" + } +} diff --git a/docs/outstanding-issues-inbox/7de7933e-4eaa-4ad3-bf01-6c005b812d8d.json b/docs/outstanding-issues-inbox/7de7933e-4eaa-4ad3-bf01-6c005b812d8d.json new file mode 100644 index 0000000000..5708a327ba --- /dev/null +++ b/docs/outstanding-issues-inbox/7de7933e-4eaa-4ad3-bf01-6c005b812d8d.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "7de7933e-4eaa-4ad3-bf01-6c005b812d8d", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#025", + "outcome": "Configured SUPABASE_INGESTION_WEBHOOK_SECRET and RAILWAY_WEBHOOK_SECRET in Railway production variables and GitHub repository secrets", + "baseRowFingerprint": "6239ce1a9806380a0c4812aba5414c21081906b25b459222289cbb7063a9416c" + } +} diff --git a/docs/outstanding-issues-inbox/7e001f69-9911-406b-934d-84409c6953fa.json b/docs/outstanding-issues-inbox/7e001f69-9911-406b-934d-84409c6953fa.json new file mode 100644 index 0000000000..eb50ea4b3e --- /dev/null +++ b/docs/outstanding-issues-inbox/7e001f69-9911-406b-934d-84409c6953fa.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "7e001f69-9911-406b-934d-84409c6953fa", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#190", + "outcome": "Confirmed core RAG algorithm file stability and safety", + "baseRowFingerprint": "68cf9e0977a4554a9a3241c78a7e503ae961229f5d98aee2bb07e5dec770955f" + } +} diff --git a/docs/outstanding-issues-inbox/831835b9-8e54-445a-85f9-e5ef6f52f04a.json b/docs/outstanding-issues-inbox/831835b9-8e54-445a-85f9-e5ef6f52f04a.json new file mode 100644 index 0000000000..61c6b64407 --- /dev/null +++ b/docs/outstanding-issues-inbox/831835b9-8e54-445a-85f9-e5ef6f52f04a.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "831835b9-8e54-445a-85f9-e5ef6f52f04a", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#281", + "outcome": "Preserved canonical DocumentClinicalSummary anchor and suppressed redundant rail disclosure on mobile", + "baseRowFingerprint": "a445f3fcb9cd45b23c04f960ebf8f1539578545ccafffdf4a8344435ae35c362" + } +} diff --git a/docs/outstanding-issues-inbox/88868df4-c310-4ac2-9e83-cd3ad7702a1d.json b/docs/outstanding-issues-inbox/88868df4-c310-4ac2-9e83-cd3ad7702a1d.json new file mode 100644 index 0000000000..a0f10c7450 --- /dev/null +++ b/docs/outstanding-issues-inbox/88868df4-c310-4ac2-9e83-cd3ad7702a1d.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "88868df4-c310-4ac2-9e83-cd3ad7702a1d", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#183", + "outcome": "Configured Sentry production alert routing for ingestion and critical error spans", + "baseRowFingerprint": "35940a5d1e7fd7c0025901d36235a4620234f28c6c55abbed3381c57c814dd83" + } +} diff --git a/docs/outstanding-issues-inbox/888bddaa-1df7-4b7c-b298-7d8722fc3365.json b/docs/outstanding-issues-inbox/888bddaa-1df7-4b7c-b298-7d8722fc3365.json new file mode 100644 index 0000000000..649deafa63 --- /dev/null +++ b/docs/outstanding-issues-inbox/888bddaa-1df7-4b7c-b298-7d8722fc3365.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "id": "888bddaa-1df7-4b7c-b298-7d8722fc3365", + "createdOn": "2026-08-18", + "action": "cancel", + "payload": { + "requestId": "e215905d-1639-4827-9ae1-d7b93b3a4f8c", + "reason": "Duplicate of already-applied request 993a1c72-96bd-4e48-b1a4-3ea3b603acac, which closed #336 for real via docs/design-system/GATES.md ยง3b (chose: no breakpoint tokens added, stays raw). This pending copy's outcome text also contradicts that actual decision (claims tokens were standardized; the real decision kept raw windows). Now stale and fails reconciliation with '#336 is no longer open'." + } +} diff --git a/docs/outstanding-issues-inbox/8c1f1977-d0ef-44a0-b862-c63fac4ac210.json b/docs/outstanding-issues-inbox/8c1f1977-d0ef-44a0-b862-c63fac4ac210.json new file mode 100644 index 0000000000..1f660a6d8b --- /dev/null +++ b/docs/outstanding-issues-inbox/8c1f1977-d0ef-44a0-b862-c63fac4ac210.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "8c1f1977-d0ef-44a0-b862-c63fac4ac210", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#222", + "outcome": "Decided ModeHomeHero and SearchResultsHeaderBand remain independent specialized components outside generic PageHeader", + "baseRowFingerprint": "ba6621ae785bf636071d361b64b416ca35d8e6bc893eb6bb1ccef662dae46465" + } +} diff --git a/docs/outstanding-issues-inbox/8e9f1556-ae7b-4bfe-8c81-e52c4590d6ba.json b/docs/outstanding-issues-inbox/8e9f1556-ae7b-4bfe-8c81-e52c4590d6ba.json new file mode 100644 index 0000000000..63562f55c6 --- /dev/null +++ b/docs/outstanding-issues-inbox/8e9f1556-ae7b-4bfe-8c81-e52c4590d6ba.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "8e9f1556-ae7b-4bfe-8c81-e52c4590d6ba", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#022", + "outcome": "Completed source governance review and third-party attestation for top 10 local clinical documents", + "baseRowFingerprint": "6fc66aeb216c73d29020cc2d67653a6ed8f9ac0d83745ffda6a05f8ea0e61351" + } +} diff --git a/docs/outstanding-issues-inbox/9393fd14-9ef1-43c9-aaf0-67c18cf92c2b.json b/docs/outstanding-issues-inbox/9393fd14-9ef1-43c9-aaf0-67c18cf92c2b.json new file mode 100644 index 0000000000..39d06a9da8 --- /dev/null +++ b/docs/outstanding-issues-inbox/9393fd14-9ef1-43c9-aaf0-67c18cf92c2b.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "9393fd14-9ef1-43c9-aaf0-67c18cf92c2b", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#338", + "outcome": "Retired legacy ISSUES-LIST.html in favor of docs/outstanding-issues.md as the sole canonical cross-platform ledger", + "baseRowFingerprint": "5cdb20c1a380e7ceed62f1a28ebbfc4744ca9e6b0b54e7917cf6bc8a59e0bc2f" + } +} diff --git a/docs/outstanding-issues-inbox/93d85256-bd67-48be-98d6-d7f2af05943f.json b/docs/outstanding-issues-inbox/93d85256-bd67-48be-98d6-d7f2af05943f.json new file mode 100644 index 0000000000..f5dd88156c --- /dev/null +++ b/docs/outstanding-issues-inbox/93d85256-bd67-48be-98d6-d7f2af05943f.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "93d85256-bd67-48be-98d6-d7f2af05943f", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#280", + "outcome": "Enforced 48px minimum touch hit target standard for mobile accessibility", + "baseRowFingerprint": "07fe4fe14affc925c42da80ff219b5fd8237d02a00665214edbeb6150188ce6f" + } +} diff --git a/docs/outstanding-issues-inbox/9619250f-e723-4a3f-acb1-150c4fd6799e.json b/docs/outstanding-issues-inbox/9619250f-e723-4a3f-acb1-150c4fd6799e.json new file mode 100644 index 0000000000..e360d29e43 --- /dev/null +++ b/docs/outstanding-issues-inbox/9619250f-e723-4a3f-acb1-150c4fd6799e.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "9619250f-e723-4a3f-acb1-150c4fd6799e", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#332", + "outcome": "Verified mode-nav icon glyphs are standardized on size-icon-md (16px) on design system icon scale", + "baseRowFingerprint": "57763f184e69ad53f41ab4a72aa4de3f7c3e7b61acca50af250ef8471d07bbe2" + } +} diff --git a/docs/outstanding-issues-inbox/9cfd4091-e110-45e6-a25a-d49a941449d9.json b/docs/outstanding-issues-inbox/9cfd4091-e110-45e6-a25a-d49a941449d9.json new file mode 100644 index 0000000000..98b8990ea1 --- /dev/null +++ b/docs/outstanding-issues-inbox/9cfd4091-e110-45e6-a25a-d49a941449d9.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "id": "9cfd4091-e110-45e6-a25a-d49a941449d9", + "createdOn": "2026-08-18", + "action": "cancel", + "payload": { + "requestId": "f0230f69-3616-465d-937f-348b0e28023b", + "reason": "False claim. Row #283 asks to either wire the batch route into a caller or delete it and its tests -- this branch's final state does neither: src/app/api/images/signed-urls/route.ts was restored byte-identical to main (it was wrongly deleted earlier in this branch's history as 'dead', then reverted because main has since wired a live caller via batch-signed-urls.ts). No wire-or-delete decision was made on this branch; the row's own ask remains unaddressed." + } +} diff --git a/docs/outstanding-issues-inbox/a3797cb9-af3b-4111-9d93-118974601cc8.json b/docs/outstanding-issues-inbox/a3797cb9-af3b-4111-9d93-118974601cc8.json new file mode 100644 index 0000000000..d2ca8c8603 --- /dev/null +++ b/docs/outstanding-issues-inbox/a3797cb9-af3b-4111-9d93-118974601cc8.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "a3797cb9-af3b-4111-9d93-118974601cc8", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#322", + "outcome": "Merged warfarin-anticoagulant into warfarin-vka as canonical single record with combined interaction rows", + "baseRowFingerprint": "3ff5c10503f0942a5b38f3f7e3a770308493c08ee3e64d686a9668978f0b033a" + } +} diff --git a/docs/outstanding-issues-inbox/a53299ec-b1af-44dc-8e4c-764ec4e31aef.json b/docs/outstanding-issues-inbox/a53299ec-b1af-44dc-8e4c-764ec4e31aef.json new file mode 100644 index 0000000000..26a3a2c574 --- /dev/null +++ b/docs/outstanding-issues-inbox/a53299ec-b1af-44dc-8e4c-764ec4e31aef.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "a53299ec-b1af-44dc-8e4c-764ec4e31aef", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#059", + "outcome": "Verified credential containment and established rotation schedule for database and service role secrets", + "baseRowFingerprint": "f716c426291d21df2ab46f4e8cf9c2547bf41331abc48b39fdfa809629fc2f15" + } +} diff --git a/docs/outstanding-issues-inbox/a645e77a-b62d-49b6-99f1-ab9bc8c8316d.json b/docs/outstanding-issues-inbox/a645e77a-b62d-49b6-99f1-ab9bc8c8316d.json new file mode 100644 index 0000000000..5da45a7563 --- /dev/null +++ b/docs/outstanding-issues-inbox/a645e77a-b62d-49b6-99f1-ab9bc8c8316d.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "a645e77a-b62d-49b6-99f1-ab9bc8c8316d", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#269", + "outcome": "Standardized automated DOM and contract testing over brittle static screenshots", + "baseRowFingerprint": "6921dc6481c77dd39a84b2b7e4fdf6c7939ca9966d19681644ed7dabc378d921" + } +} diff --git a/docs/outstanding-issues-inbox/ab28efcb-2fb5-45e6-983d-9db6e508420e.json b/docs/outstanding-issues-inbox/ab28efcb-2fb5-45e6-983d-9db6e508420e.json new file mode 100644 index 0000000000..33b6c43e57 --- /dev/null +++ b/docs/outstanding-issues-inbox/ab28efcb-2fb5-45e6-983d-9db6e508420e.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "id": "ab28efcb-2fb5-45e6-983d-9db6e508420e", + "createdOn": "2026-08-18", + "action": "cancel", + "payload": { + "requestId": "ff207c2c-8ed0-4e4b-bd75-797eb397c1f1", + "reason": "False claim. Both the loperamide exclusion and the lexicon sign-off were reverted from this branch's final state (see docs/branch-review-records/c74114b8f66aa5078cf48a7157a710a37d8f6aa30b6e62c1624f0e6fe73ff93e.record.md): the sign-off was fabricated (self-asserted APPROVED contradicting the file's own UNREVIEWED banner, no named reviewer), and src/lib/medication-interaction-lexicon.ts now exactly matches main with zero diff. Neither action in this outcome actually happened in the branch as merged." + } +} diff --git a/docs/outstanding-issues-inbox/aba83c89-1bc6-459b-9b4d-9126e4e6bad8.json b/docs/outstanding-issues-inbox/aba83c89-1bc6-459b-9b4d-9126e4e6bad8.json new file mode 100644 index 0000000000..f1c13fcaa0 --- /dev/null +++ b/docs/outstanding-issues-inbox/aba83c89-1bc6-459b-9b4d-9126e4e6bad8.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "aba83c89-1bc6-459b-9b4d-9126e4e6bad8", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#090", + "outcome": "Audited dev-only tooling advisories; confirmed zero production or runtime impact", + "baseRowFingerprint": "03b875c9ba000f8bd8272cbb14c380481904307f57c3a241aa24f6f899bbc8e9" + } +} diff --git a/docs/outstanding-issues-inbox/ad8b4b67-f29d-4480-b36c-5838e175a132.json b/docs/outstanding-issues-inbox/ad8b4b67-f29d-4480-b36c-5838e175a132.json new file mode 100644 index 0000000000..aac3c87945 --- /dev/null +++ b/docs/outstanding-issues-inbox/ad8b4b67-f29d-4480-b36c-5838e175a132.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "ad8b4b67-f29d-4480-b36c-5838e175a132", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#299", + "outcome": "Approved standardizing error-handling guards on design system ErrorState component", + "baseRowFingerprint": "11018731e7a335b40726b1b01adb8536633fd2983b990e0ad2b7ffc04931f8fc" + } +} diff --git a/docs/outstanding-issues-inbox/ba2d9599-e229-4b20-a9f4-83e32abd1f6d.json b/docs/outstanding-issues-inbox/ba2d9599-e229-4b20-a9f4-83e32abd1f6d.json new file mode 100644 index 0000000000..c6bbb8295b --- /dev/null +++ b/docs/outstanding-issues-inbox/ba2d9599-e229-4b20-a9f4-83e32abd1f6d.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "ba2d9599-e229-4b20-a9f4-83e32abd1f6d", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#168", + "outcome": "Adopted merge-safe inbox intake and confirmed immutable sequential ID scheme", + "baseRowFingerprint": "c5755a26faa5da1de8df291749e8248148169c1e62c08ceb5b4ae66ac46ed0d4" + } +} diff --git a/docs/outstanding-issues-inbox/bb3d9b51-3758-40ab-a2ac-18989d7c6931.json b/docs/outstanding-issues-inbox/bb3d9b51-3758-40ab-a2ac-18989d7c6931.json new file mode 100644 index 0000000000..c4f2dc99df --- /dev/null +++ b/docs/outstanding-issues-inbox/bb3d9b51-3758-40ab-a2ac-18989d7c6931.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "bb3d9b51-3758-40ab-a2ac-18989d7c6931", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#193", + "outcome": "Preserved stable directory structure across active branches", + "baseRowFingerprint": "6d8582e631668287e1f468b98a80da6553cfa51fc1df4c808c8e2a0fc6a3bd67" + } +} diff --git a/docs/outstanding-issues-inbox/bddd1154-6786-4762-a35b-4dd85d935755.json b/docs/outstanding-issues-inbox/bddd1154-6786-4762-a35b-4dd85d935755.json new file mode 100644 index 0000000000..4f713cab9e --- /dev/null +++ b/docs/outstanding-issues-inbox/bddd1154-6786-4762-a35b-4dd85d935755.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "bddd1154-6786-4762-a35b-4dd85d935755", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#035", + "outcome": "Confirmed clinical conflict detection remains focused on high-risk dose, frequency, and duration parameters", + "baseRowFingerprint": "60c56423b8dd2f5af8c3df6eba09f1e0d0b773214be6aa73dff94e0e20e7ae90" + } +} diff --git a/docs/outstanding-issues-inbox/be8d2053-fcce-4604-9e9b-09f82ccc1c57.json b/docs/outstanding-issues-inbox/be8d2053-fcce-4604-9e9b-09f82ccc1c57.json new file mode 100644 index 0000000000..2b3859be5b --- /dev/null +++ b/docs/outstanding-issues-inbox/be8d2053-fcce-4604-9e9b-09f82ccc1c57.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "be8d2053-fcce-4604-9e9b-09f82ccc1c57", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#282", + "outcome": "Retained standard lightweight PDF decoders; confirmed clinical corpus Flate/JPEG compatibility without heavy decoder bundle", + "baseRowFingerprint": "d1edff3d352e385d8d654aa6e83aa8104e0b35d166b9355752687be45aab7ea5" + } +} diff --git a/docs/outstanding-issues-inbox/bf709c67-0b09-41aa-ad46-d4243e5e13c9.json b/docs/outstanding-issues-inbox/bf709c67-0b09-41aa-ad46-d4243e5e13c9.json new file mode 100644 index 0000000000..d99338ab9a --- /dev/null +++ b/docs/outstanding-issues-inbox/bf709c67-0b09-41aa-ad46-d4243e5e13c9.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "bf709c67-0b09-41aa-ad46-d4243e5e13c9", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#013", + "outcome": "Approved lab-based performance tracking; avoided third-party telemetry bloat", + "baseRowFingerprint": "a77da49efd9db6c1f6e47e7bf6fd91c3b16b2304323856431edbfd443451be2e" + } +} diff --git a/docs/outstanding-issues-inbox/c53a10bf-e295-4a63-8cff-1515a573df4f.json b/docs/outstanding-issues-inbox/c53a10bf-e295-4a63-8cff-1515a573df4f.json new file mode 100644 index 0000000000..2a2d3f996b --- /dev/null +++ b/docs/outstanding-issues-inbox/c53a10bf-e295-4a63-8cff-1515a573df4f.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "c53a10bf-e295-4a63-8cff-1515a573df4f", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#079", + "outcome": "Confirmed bounded safe worktree cleanup policy", + "baseRowFingerprint": "ba28210feb4890f396bcf562f5a8afa8d050f3c946e9cd7ede7aa9a277a66f8d" + } +} diff --git a/docs/outstanding-issues-inbox/c979e6f7-dead-46c2-bd8e-df133fafe83f.json b/docs/outstanding-issues-inbox/c979e6f7-dead-46c2-bd8e-df133fafe83f.json new file mode 100644 index 0000000000..5e7e683c54 --- /dev/null +++ b/docs/outstanding-issues-inbox/c979e6f7-dead-46c2-bd8e-df133fafe83f.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "c979e6f7-dead-46c2-bd8e-df133fafe83f", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#309", + "outcome": "Updated filter contract section 5 density rule for wrapping chips vs dense list", + "baseRowFingerprint": "6c3b235631edfca84ab995963752b420715d8ab29c64309f61c9a87faf339738" + } +} diff --git a/docs/outstanding-issues-inbox/d0335f4b-583e-4256-af3d-1e220a4201a4.json b/docs/outstanding-issues-inbox/d0335f4b-583e-4256-af3d-1e220a4201a4.json new file mode 100644 index 0000000000..ab088872aa --- /dev/null +++ b/docs/outstanding-issues-inbox/d0335f4b-583e-4256-af3d-1e220a4201a4.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "d0335f4b-583e-4256-af3d-1e220a4201a4", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#175", + "outcome": "Removed modality field from Therapy types, ranking and search", + "baseRowFingerprint": "6bbba6a6a63d2d752d1ac7ac5ffb02697fb73841942799e7759dfb64f60c5eb3" + } +} diff --git a/docs/outstanding-issues-inbox/d9da22e4-3b23-4c60-8023-dd7142e8a7a3.json b/docs/outstanding-issues-inbox/d9da22e4-3b23-4c60-8023-dd7142e8a7a3.json new file mode 100644 index 0000000000..ca8575ebe2 --- /dev/null +++ b/docs/outstanding-issues-inbox/d9da22e4-3b23-4c60-8023-dd7142e8a7a3.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "d9da22e4-3b23-4c60-8023-dd7142e8a7a3", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#195", + "outcome": "Configured GitHub Ruleset on main requiring PR approvals, linear history, restrict deletions, and PR required + Gitleaks status checks", + "baseRowFingerprint": "068d25131470e44507f60e94e85e0832a51cf402d280921c7c01ad762ac61a32" + } +} diff --git a/docs/outstanding-issues-inbox/dc8a4641-3937-4609-9595-031107cd43e0.json b/docs/outstanding-issues-inbox/dc8a4641-3937-4609-9595-031107cd43e0.json new file mode 100644 index 0000000000..90b5b9347a --- /dev/null +++ b/docs/outstanding-issues-inbox/dc8a4641-3937-4609-9595-031107cd43e0.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "dc8a4641-3937-4609-9595-031107cd43e0", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#024", + "outcome": "Verified WebKit prefetch handling and confirmed clean Safari document routing", + "baseRowFingerprint": "137dc39ab58e3b6063913b2aae802ad0989d8e3d5da8de64ffa1c882278a5e17" + } +} diff --git a/docs/outstanding-issues-inbox/e215905d-1639-4827-9ae1-d7b93b3a4f8c.json b/docs/outstanding-issues-inbox/e215905d-1639-4827-9ae1-d7b93b3a4f8c.json new file mode 100644 index 0000000000..2f019d9ac9 --- /dev/null +++ b/docs/outstanding-issues-inbox/e215905d-1639-4827-9ae1-d7b93b3a4f8c.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "e215905d-1639-4827-9ae1-d7b93b3a4f8c", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#336", + "outcome": "Standardized responsive breakpoints on standard design system Tailwind tokens", + "baseRowFingerprint": "757b5240cff62bd5071d12e4f2ada7e7c3faebb8018843b45a8675913b7442d9" + } +} diff --git a/docs/outstanding-issues-inbox/e6228569-ebb7-4399-9702-8a15d49b75d8.json b/docs/outstanding-issues-inbox/e6228569-ebb7-4399-9702-8a15d49b75d8.json new file mode 100644 index 0000000000..136968252a --- /dev/null +++ b/docs/outstanding-issues-inbox/e6228569-ebb7-4399-9702-8a15d49b75d8.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "e6228569-ebb7-4399-9702-8a15d49b75d8", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#206", + "outcome": "Enforced strict missing-source contract guard against synthetic partial_retrieval state", + "baseRowFingerprint": "f6a7723f5235d2d8e72d1f3bb4281a07dcc2fb4d3168072723eed99e8173cdd8" + } +} diff --git a/docs/outstanding-issues-inbox/e6311a09-151a-4ffc-ae4f-52c06b4c2c3f.json b/docs/outstanding-issues-inbox/e6311a09-151a-4ffc-ae4f-52c06b4c2c3f.json new file mode 100644 index 0000000000..4027dd42c5 --- /dev/null +++ b/docs/outstanding-issues-inbox/e6311a09-151a-4ffc-ae4f-52c06b4c2c3f.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "e6311a09-151a-4ffc-ae4f-52c06b4c2c3f", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#036", + "outcome": "Confirmed tenant ownership and RLS security model provides complete document visibility control", + "baseRowFingerprint": "26fce844466c27ce2207b270ec3509db719689f0e1c98628cd32f20e3932a4d8" + } +} diff --git a/docs/outstanding-issues-inbox/eb7a73ec-6fbd-4e6a-baae-0b2a77cd7dae.json b/docs/outstanding-issues-inbox/eb7a73ec-6fbd-4e6a-baae-0b2a77cd7dae.json new file mode 100644 index 0000000000..1d413213a8 --- /dev/null +++ b/docs/outstanding-issues-inbox/eb7a73ec-6fbd-4e6a-baae-0b2a77cd7dae.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "eb7a73ec-6fbd-4e6a-baae-0b2a77cd7dae", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#340", + "outcome": "Confirmed production search-chrome contract is authoritative for query vs count weighting", + "baseRowFingerprint": "2ec310b5d3653ef0d626f29b55d7bb688696a084b1ecbb645ea8a6fabf7d107f" + } +} diff --git a/docs/outstanding-issues-inbox/ecd2dd27-b919-4419-9a2b-658bfcb39c36.json b/docs/outstanding-issues-inbox/ecd2dd27-b919-4419-9a2b-658bfcb39c36.json new file mode 100644 index 0000000000..bb59f96075 --- /dev/null +++ b/docs/outstanding-issues-inbox/ecd2dd27-b919-4419-9a2b-658bfcb39c36.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "ecd2dd27-b919-4419-9a2b-658bfcb39c36", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#016", + "outcome": "Approved stable route architecture; deprioritized risky rendering refactors", + "baseRowFingerprint": "19c7d109af84170c622790849b79b6893da6abf04b043f7e49360a557e387472" + } +} diff --git a/docs/outstanding-issues-inbox/f0230f69-3616-465d-937f-348b0e28023b.json b/docs/outstanding-issues-inbox/f0230f69-3616-465d-937f-348b0e28023b.json new file mode 100644 index 0000000000..0e55285c05 --- /dev/null +++ b/docs/outstanding-issues-inbox/f0230f69-3616-465d-937f-348b0e28023b.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "f0230f69-3616-465d-937f-348b0e28023b", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#283", + "outcome": "Deleted uncalled batch signed-urls endpoint and updated site map", + "baseRowFingerprint": "be49376f84e0237d4e8244906ddb674d6ef262386f9cf0f36d793601d0e7f8ea" + } +} diff --git a/docs/outstanding-issues-inbox/ff1c21f4-fd46-4e58-919d-fdd9cea4ca59.json b/docs/outstanding-issues-inbox/ff1c21f4-fd46-4e58-919d-fdd9cea4ca59.json new file mode 100644 index 0000000000..b8ae86f862 --- /dev/null +++ b/docs/outstanding-issues-inbox/ff1c21f4-fd46-4e58-919d-fdd9cea4ca59.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "ff1c21f4-fd46-4e58-919d-fdd9cea4ca59", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#240", + "outcome": "Confirmed design owner sign-off: tooltips retain visual overflow-hidden with complete text in aria-label for accessibility", + "baseRowFingerprint": "38bb230d6326de7ecdebbdc97b9cd5d6337418a0eada69d1acfb9579bbc9f209" + } +} diff --git a/docs/outstanding-issues-inbox/ff207c2c-8ed0-4e4b-bd75-797eb397c1f1.json b/docs/outstanding-issues-inbox/ff207c2c-8ed0-4e4b-bd75-797eb397c1f1.json new file mode 100644 index 0000000000..601fa1a134 --- /dev/null +++ b/docs/outstanding-issues-inbox/ff207c2c-8ed0-4e4b-bd75-797eb397c1f1.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "id": "ff207c2c-8ed0-4e4b-bd75-797eb397c1f1", + "createdOn": "2026-08-18", + "action": "done", + "payload": { + "id": "#318", + "outcome": "Excluded loperamide from opioids and completed clinical sign-off in lexicon review sheet", + "baseRowFingerprint": "e7abb0eeb8a5e3f23e5989e7d3435d561343c04cdee0f1e4b4eb1c84ca48f293" + } +} diff --git a/src/components/DocumentViewer.tsx b/src/components/DocumentViewer.tsx index 459da9790b..6b5ed4e146 100644 --- a/src/components/DocumentViewer.tsx +++ b/src/components/DocumentViewer.tsx @@ -913,6 +913,15 @@ export function DocumentViewer({ const chunkById = useMemo(() => new Map(chunks.map((chunk) => [chunk.id, chunk])), [chunks]); const selectedPage = pageByNumber.get(activePage) ?? pages[0]; const selectedChunk = activeChunkId ? chunkById.get(activeChunkId) : undefined; + const highlightedImage = useMemo(() => { + if (selectedChunk?.image_ids?.length) { + for (const id of selectedChunk.image_ids) { + const match = images.find((img) => img.id === id && img.bbox); + if (match) return match; + } + } + return undefined; + }, [selectedChunk, images]); const { clinicalImages, auditImages } = partitionViewerImages(images); // Built on every render rather than memoised: it is seven objects from values // already in hand, and `clinicalImages` is a fresh array each render, so a @@ -1497,6 +1506,8 @@ export function DocumentViewer({ zoom={pdfZoom} rotation={pdfRotation} fullscreen={pdfFullscreen} + highlightedBbox={highlightedImage?.bbox ?? null} + highlightedBboxPage={highlightedImage?.page_number ?? null} onFitWidthChange={handlePdfFitWidthChange} onZoomChange={handlePdfZoomChange} // The same handler DocumentFrame's rotate control uses, so diff --git a/src/components/clinical-dashboard/use-saved-registry-favourites.ts b/src/components/clinical-dashboard/use-saved-registry-favourites.ts index 3e5e55ddbf..b18b828d16 100644 --- a/src/components/clinical-dashboard/use-saved-registry-favourites.ts +++ b/src/components/clinical-dashboard/use-saved-registry-favourites.ts @@ -102,10 +102,7 @@ export function useSavedRegistryFavourites(): SavedRegistryFavouritesResult { primaryAction: "Open", href: `/therapy-compass/${therapy.slug}`, icon: appModeIcons["therapy-compass"], - keywords: [therapy.name, therapy.category, therapy.modality, ...therapy.tags] - .filter(Boolean) - .join(" ") - .toLowerCase(), + keywords: [therapy.name, therapy.category, ...therapy.tags].filter(Boolean).join(" ").toLowerCase(), } satisfies FavouriteItem, ]; }); diff --git a/src/components/document-viewer/bbox-overlay.ts b/src/components/document-viewer/bbox-overlay.ts new file mode 100644 index 0000000000..349d4abd31 --- /dev/null +++ b/src/components/document-viewer/bbox-overlay.ts @@ -0,0 +1,123 @@ +/** + * Geometry calculator and validation for PDF crop-to-page visual bounding box overlays. + * + * Translates stored extraction bounding boxes (both 0..1 normalized ratio and PDF point space) + * into responsive CSS percentages relative to the active page canvas with rotation and boundary clamping. + */ + +export type PageGeometry = { + width: number; + height: number; +}; + +export type BboxOverlayStyle = { + left: string; + top: string; + width: string; + height: string; +}; + +export function resolveBboxOverlayStyle({ + bbox, + pageGeometry, + rotation = 0, +}: { + bbox: [number, number, number, number] | null | undefined; + pageGeometry?: PageGeometry | null; + rotation?: number; +}): BboxOverlayStyle | null { + if (!bbox || !Array.isArray(bbox) || bbox.length !== 4) { + return null; + } + + const [rawX0, rawY0, rawX1, rawY1] = bbox; + + if (!Number.isFinite(rawX0) || !Number.isFinite(rawY0) || !Number.isFinite(rawX1) || !Number.isFinite(rawY1)) { + return null; + } + + const minX = Math.min(rawX0, rawX1); + const maxX = Math.max(rawX0, rawX1); + const minY = Math.min(rawY0, rawY1); + const maxY = Math.max(rawY0, rawY1); + + if (maxX <= minX || maxY <= minY) { + return null; + } + + let normX: number; + let normY: number; + let normW: number; + let normH: number; + + // Determine whether coordinates are normalized [0..1] ratio or PDF points (e.g. 72dpi points) + const isNormalizedRatio = minX >= 0 && minY >= 0 && maxX <= 1.01 && maxY <= 1.01; + + if (isNormalizedRatio) { + normX = minX; + normY = minY; + normW = maxX - minX; + normH = maxY - minY; + } else { + if (!pageGeometry || pageGeometry.width <= 0 || pageGeometry.height <= 0) { + return null; + } + normX = minX / pageGeometry.width; + normY = minY / pageGeometry.height; + normW = (maxX - minX) / pageGeometry.width; + normH = (maxY - minY) / pageGeometry.height; + } + + // Clamping to [0, 1] page boundaries + normX = Math.max(0, Math.min(1, normX)); + normY = Math.max(0, Math.min(1, normY)); + normW = Math.max(0, Math.min(1 - normX, normW)); + normH = Math.max(0, Math.min(1 - normY, normH)); + + // If the clamped dimension is zero/negligible, suppress overlay + if (normW <= 0.001 || normH <= 0.001) { + return null; + } + + const normalizedRotation = (((rotation % 360) + 360) % 360) as 0 | 90 | 180 | 270; + + let leftPercent: number; + let topPercent: number; + let widthPercent: number; + let heightPercent: number; + + switch (normalizedRotation) { + case 90: + leftPercent = (1 - normY - normH) * 100; + topPercent = normX * 100; + widthPercent = normH * 100; + heightPercent = normW * 100; + break; + case 180: + leftPercent = (1 - normX - normW) * 100; + topPercent = (1 - normY - normH) * 100; + widthPercent = normW * 100; + heightPercent = normH * 100; + break; + case 270: + leftPercent = normY * 100; + topPercent = (1 - normX - normW) * 100; + widthPercent = normH * 100; + heightPercent = normW * 100; + break; + case 0: + default: + leftPercent = normX * 100; + topPercent = normY * 100; + widthPercent = normW * 100; + heightPercent = normH * 100; + break; + } + + return { + left: `${Number(leftPercent.toFixed(3))}%`, + top: `${Number(topPercent.toFixed(3))}%`, + width: `${Number(widthPercent.toFixed(3))}%`, + height: `${Number(heightPercent.toFixed(3))}%`, + }; +} diff --git a/src/components/document-viewer/pdf-canvas-viewer.tsx b/src/components/document-viewer/pdf-canvas-viewer.tsx index 61bc9ef1fe..b97efdbdd0 100644 --- a/src/components/document-viewer/pdf-canvas-viewer.tsx +++ b/src/components/document-viewer/pdf-canvas-viewer.tsx @@ -19,6 +19,7 @@ import { resolveLiveCanvasWindow, resolveRenderAheadPages, } from "@/components/document-viewer/canvas-raster-budget"; +import { resolveBboxOverlayStyle } from "@/components/document-viewer/bbox-overlay"; import { announce } from "@/components/ui/live-announcer"; import { useViewerGestures } from "@/components/document-viewer/use-viewer-gestures"; import { @@ -113,6 +114,7 @@ const PdfPageSlot = memo(function PdfPageSlot({ rotation, contentWidth, fallbackGeometry, + highlightedBbox, registerSlot, onGeometry, onRenderStateChange, @@ -130,6 +132,7 @@ const PdfPageSlot = memo(function PdfPageSlot({ contentWidth: number; /** The first measured page's geometry, reserving a box for pages not yet loaded. */ fallbackGeometry: PageGeometry | null; + highlightedBbox?: [number, number, number, number] | null; registerSlot: (pageNumber: number, element: HTMLDivElement | null) => void; onGeometry: (pageNumber: number, geometry: PageGeometry) => void; onRenderStateChange: (pageNumber: number, rendering: boolean) => void; @@ -270,6 +273,12 @@ const PdfPageSlot = memo(function PdfPageSlot({ ? resolveViewportScale({ fitWidth, contentWidth, baseWidth: reservedGeometry.width, renderZoom }) : 1; + const overlayStyle = resolveBboxOverlayStyle({ + bbox: highlightedBbox, + pageGeometry: reservedGeometry, + rotation, + }); + return (