Skip to content
Closed
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 number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"version": 2,
"id": "2ab09b4d-a5b8-4854-b04e-c18942cbc33b",
"createdOn": "2026-09-07",
"action": "update",
"payload": {
"id": "#ZWJ71W",
"detail": "Found 2026-09-02 while correcting #YTR84P, and recorded separately because it is a different defect from the pinned-clock one and would be missed inside that row's prose. On branch claude/ward-flow-phases-6-7-design at 1888ad1: tests/ui-ward-morning.spec.ts clicks ward-morning-view-fixed and ward-morning-view-live (lines 51-52 and 195-206). Those test ids live in ViewControl (morning-page.tsx around lines 481-487), but owner decision WB-DB-11 ('ONE VIEW, ALWAYS LIVE') left MorningPage rendering MorningBody and nothing else, so ViewControl is exported and rendered by nothing. The spec therefore cannot pass as written. Same root cause as the D5 problem recorded in #YTR84P - the fixed/live split was removed while the code and tests that depend on it were left behind - so both should be settled by the same decision: either restore the fixed view, or retire it and remove the orphaned code and assertions together. SCOPE AND URGENCY: low. That branch's PR #2466 was closed unmerged on 2026-08-31 (299 commits ahead of main, mergeable_state dirty, titled 'DRAFT, not for merge'), and all of it is synthetic design scratch under src/app/mockups/ward-flow/**, which 404s in production. Nothing on main is affected. Recorded so it is not rediscovered from scratch by whoever takes the D5 decision. Offline only - the branch fetches normally from a cloud container with git fetch --depth=50 origin claude/ward-flow-phases-6-7-design. UPDATE 2026-09-06 (cross-reference only; this row's own finding is unchanged): the SAME two tests are now test.skip ON MAIN as well, not just unpassable on the Phase 6 branch. Commit 18a42d2 marked \"the morning page renders its headline, and the rail navigates away and back\" and \"print states when the sheet was printed, and the real PDF is exactly one A4 page\" as test.skip with a stated reason, because on main /mockups/ward-flow/morning is now only a redirect to /capacity and MorningPage is mounted by no route at all - so there is nothing honest to retarget them to either. That commit deliberately skipped rather than deleted or rewrote them, pending an owner ruling on spec D9. WHY THIS MATTERS FOR THIS ROW: the non-required Advisory UI job is consequently GREEN again, so the decision behind these skips is now less visible than it was while they were failing, not more. Component-level coverage continues in tests/ward-morning-page.dom.test.tsx and tests/ward-morning-print.test.ts. The ruling itself is unchanged and still owner-owned: restore the fixed/live morning view, or retire it and remove the orphaned ViewControl code and both specs together. Settling it should close this row and the D5 half of #YTR84P at the same time.",
"baseRowFingerprint": "565ee27887d9f0607ebd62021df38cd59d495a251f856431f23ef6b374007136"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"version": 2,
"id": "2e5e2bc1-25b0-43af-805c-e3f7d8c63a13",
"createdOn": "2026-09-07",
"action": "done",
"payload": {
"id": "#QSHHGK",
"outcome": "CLOSED 2026-09-07 by owner decision: the owner is the named refresh owner, and the weekly report-only run is sufficient. That resolves point (1), the last of the three reasons this row stayed open. Points (2) and (3) were resolved on 2026-09-06 in PR #2665: the baseline was refreshed from main at fd8156109c54ed078895610406f629f4baf282b7, a commit that resolves and is an ancestor of main, so the provenance warning this row was opened around no longer fires. Production moved 1656.0 -> 1808.2 KiB gzip, mockups 613.1 -> 746.9, route / 278.5 -> 246.2, route /documents/search 281.6 -> 249.0, with tolerances untouched at 10/10/25 percent. THE ROW'S CAUTION IS NOT UN-RECORDED BY CLOSING IT: that refresh absorbed roughly two weeks of accumulated growth that was never attributed to a reviewed change set, and the owner took that decision knowingly and explicitly. The standing mechanism is .github/workflows/bundle-budget-refresh.yml, weekly on Wednesday 04:40 UTC plus workflow_dispatch, report-only, publishing a rolling issue and a refreshed bundle-budget.json artifact; the owner applies it at their discretion. REOPEN IF: the weekly run stops producing a resolvable baselineSource, or accumulated drift again fails an unrelated PR before anyone has applied an artifact.",
"baseRowFingerprint": "b31c2800eec69dfc49e478f141fed32c8b6ac287f84983b5e349ea16b993fcdf"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"version": 2,
"id": "5057727d-f394-47ee-b8cf-e61328d93e6d",
"createdOn": "2026-09-07",
"action": "cancel",
"payload": {
"requestId": "2ab09b4d-a5b8-4854-b04e-c18942cbc33b",
"reason": "Superseded verbatim by ce667f09-3a39-4d1d-bc8f-969bc0b5393d, which contains this request's full text plus the 2026-09-07 correction that spec D9 is the shift handover page, not the fixed/live morning view. Cancelled so the row carries exactly one pending mutation, per the reconciler's one-mutation-per-row rule."
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "6582c265-084e-4c0d-8de8-4f5511df7b35",
"createdOn": "2026-09-07",
"action": "add",
"payload": {
"pri": "P1",
"type": "task",
"summary": "Ten locally authored differential records are live and carry no clinician sign-off",
"detail": "Merged and live in PR #2665 (main e45bd02, which auto-deploys to psychiatry.tools), so this content is in front of clinicians now. TEN SEEDED SLUGS in src/lib/differential-curated.ts: delirium, hypoactive-delirium, neuroleptic-malignant-syndrome, serotonin-toxicity, catatonia-in-mood-disorder, akathisia, alcohol-withdrawal, clozapine-specific-adverse-effects-toxicity, postpartum-psychosis, lithium-physiological-withdrawal-tremor. Each entry may carry atAGlance safety facts, doNow first moves, discriminators for the map comparison table, and a contentNote. WHAT IS ALREADY IN PLACE, so this row is not overstated: every authored block renders the provenance line \"Locally authored - verify before use\" (curatedProvenanceLabel in differential-detail.ts); the Source tab states when a record carries authored content (hasCuratedContent, rendered as testid differential-authored-content-note); authored steps stop at assessment and escalation rather than dosing, which docs/clinical-governance.md \"Clinical Use Rules\" reserves for validated tooling; and two unit tests in tests/differential-detail.test.ts enforce both boundaries - no discriminator may name a diagnosis its own record does not list in related, and no authored doNow step may match a dose pattern. The entry is resolved server-side in getDifferentialDetailContext and travels on DifferentialDetailContext.curated, so only the record on screen crosses the client boundary. WHAT IS MISSING: clinician sign-off. The content was authored by an assistant, not by a clinician, and no qualified reviewer has read it. Treat this exactly as #SBKXZ7 treats therapy sign-off - the tooling and labelling are done, the attestation is not, and assistants must never tick the clinical checks on their own behalf. NEXT: the owner reads the ten entries and either signs them off, edits them, or removes the ones they do not want to stand behind. There is currently no review-status field on a curated entry, so consider whether sign-off should be recorded in the module (a reviewedBy/reviewedAt pair per slug, mirroring the therapy generator's contract) or tracked only here. STOP: do not add further seeded records until these ten are ruled on. SEPARATE BUT ADJACENT: lithium-physiological-withdrawal-tremor is seeded largely to CORRECT the generated export, whose clinicalHinge is the definition of akathisia and whose immediateActions are four statements about akathisia, parkinsonism and tardive syndromes; its contentNote says so on the page. The underlying export defect is its own row.",
"source": "Claude Code session 2026-09-06 (session_01GMHX5TDG34BBn2yDdi81s5), PR #2665 merged as e45bd02",
"issueUlid": "01M1XMVB7K87GR248JR8CYQ151"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "6d9ced9d-0f97-4519-b7d0-8a5bffc596d6",
"createdOn": "2026-09-07",
"action": "add",
"payload": {
"pri": "P2",
"type": "issue",
"summary": "The differentials export leaves 194 of 201 records with an empty section summary, and at least one carries another diagnosis's content",
"detail": "Measured over all 201 records in data/differentials-snapshot.json during the 2026-09-06 session: 150 carry NO investigations, 110 carry NO immediate actions, 194 have at least one EMPTY section summary, and 55 of the 91 records that do have \"immediate actions\" carry statements rather than actions. Worse than sparse in at least one case: lithium-physiological-withdrawal-tremor is titled \"Lithium\" with a tremor subtitle, but its clinicalHinge is the definition of AKATHISIA, its four immediateActions are statements about akathisia, drug-induced parkinsonism and tardive syndromes rather than actions, and its related nodes are the EPS family rather than tremor differentials. That is another diagnosis's content presented under this one. WHY THIS IS P2 AND NOT P1: the detail page now degrades honestly around it. Every panel added in PR #2665 renders only when it has content, so a sparse record produces a sparse page rather than a confident-looking empty one; buildDiscriminators derives a row only from data the catalogue actually carries and leaves the cell blank rather than echoing the other column; and the one known-mismatched record shows a content note saying its generated sections mix material from other diagnoses. Nothing fabricates. WHAT REMAINS: the overlay in src/lib/differential-curated.ts treats symptoms one record at a time and does not scale - repairing the generator that produced 194 records with an empty section summary is a data-pipeline job, and no row owned it before this one. NEXT: find the export/generation step behind data/differentials-snapshot.json, establish whether the empty sections are a source-content gap or a mapping bug in the exporter, and fix at that layer. The per-record counts above are the measurement to re-run afterwards - a fix should move them materially, and the lithium record specifically should stop carrying akathisia content. STOP: do not paper over further records by seeding differential-curated.ts; that overlay exists for correction and high-yield enrichment, not as a substitute for a working export, and every seeded record adds clinical content that needs its own sign-off (see the authored-records row).",
"source": "Claude Code session 2026-09-06 (session_01GMHX5TDG34BBn2yDdi81s5), measured across data/differentials-snapshot.json while building PR #2665",
"issueUlid": "01M1XMVVBHVMG7D8T4KN1HCQ0R"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"version": 2,
"id": "7c9df6d8-6113-407a-842e-0899aa7799c2",
"createdOn": "2026-09-07",
"action": "cancel",
"payload": {
"requestId": "2e5e2bc1-25b0-43af-805c-e3f7d8c63a13",
"reason": "Ordering, not a reversal: the owner's decision to close #QSHHGK stands. Its pending update a4593f03 corrects a statement in the row that is now false (that the baseline was deliberately not refreshed), and a done cannot carry a detail change, so the update must land first. Re-queue this closure after the next reconcile."
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": 2,
"id": "a4593f03-bf88-4310-8138-c14b4a77b97d",
"createdOn": "2026-09-07",
"action": "update",
"payload": {
"id": "#QSHHGK",
"detail": "UPDATE 2026-09-02 (PR #2527): the missing TRIGGER now exists. .github/workflows/bundle-budget-refresh.yml runs weekly (Wednesday 04:40 UTC, deliberately off the crowded Sunday-evening cluster) plus workflow_dispatch, removes .next before building so the measurement is not read from a stale cache, and runs check-bundle-budget.mjs --refresh-baseline. It is REPORT ONLY: it publishes to a rolling bundle-budget-refresh issue and uploads the refreshed bundle-budget.json as an artifact, and never commits, pushes or opens a PR, because check-github-action-pins.mjs bans workflow-authored branch mutation and a baseline moved by a bot is one nobody reviewed. WHAT REMAINS, and why this row stays open: (1) no named refresh OWNER — the apply step is still a human action on the artifact the run produces; (2) the recorded baselineSource 0764fb58 STILL does not resolve, re-checked 2026-09-02 after deepening a container clone to 3419 commits, so the standing +5.2% remains unattributable to any reviewed change set; (3) the baseline numbers were deliberately NOT refreshed in PR #2527, because doing so would have silently absorbed that unattributable growth. The first run — scheduled, or dispatched once after merge — produces a measurement whose source resolves, and that is the point at which a refresh becomes reviewable and this row can close. UPDATE 2026-09-06 (PR #2665): THE BASELINE HAS NOW BEEN REFRESHED, at the owner's explicit instruction, so points (2) and (3) above are superseded. Measured from MAIN at fd8156109c54ed078895610406f629f4baf282b7 rather than from the feature branch, for two reasons that this row's own history explains: a baseline taken on a feature branch describes unreviewed code and freezes that PR's weight into the ceiling as free allowance; and --update stamps HEAD as baselineSource, so run on a feature branch it would have pinned a commit that squash-merge deletes, which is exactly how 0764fb58 became unresolvable. fd81561 was verified as an ancestor of main after the merge, so the provenance warning this row was opened around no longer fires. NUMBERS: production 1656.0 -> 1808.2 KiB gzip, mockups 613.1 -> 746.9, route / 278.5 -> 246.2, route /documents/search 281.6 -> 249.0 (both route budgets FELL). Tolerances untouched at 10/10/25 percent - the ruler was re-datumed, not lengthened. WHAT PROMPTED IT: main sat at +9.2% of a 10% ceiling, leaving roughly eight kilobytes of headroom, and PR #2665's Build job failed at exactly +10.0% - the failure mode this row predicted. That PR's own regression was found and fixed separately (an authored data module was reaching the client bundle) and it passed at +9.7% against the OLD baseline before any refresh, so the refresh was not used to rescue it. THE ROW'S CAUTION STANDS AND SHOULD NOT BE READ AWAY: this refresh DID absorb roughly two weeks of accumulated growth that was never attributed to a reviewed change set. That was the owner's decision, taken knowingly and stated at the time. WHAT KEEPS THIS ROW OPEN: point (1) only - there is still no named OWNER for the weekly bundle-budget-refresh.yml artifact, so the apply step remains an unscheduled human action and the same drift will re-accumulate. Whoever closes this row should name that owner, or decide the weekly report is enough.",
"source": "session 2026-09-02, PR #2527; refreshed 2026-09-06 in PR #2665 (session_01GMHX5TDG34BBn2yDdi81s5)",
"baseRowFingerprint": "b31c2800eec69dfc49e478f141fed32c8b6ac287f84983b5e349ea16b993fcdf"
}
}
Loading
Loading