Repository review: bug fixes, Leave/Help/Export screens, demo pass, code health, CI setup (D-145)

Merged
BI
10h ago
+2257-1235

Requested by Josh · project thread

This is the non-clinical part of the 11 November repository review. Josh approved it as D-145, which is recorded in docs/ward-flow/decisions.md. The clinical part is #1621, which has merged; Josh signed it off at 05:51 UTC, and that sign-off is recorded under D-145 here. Synthetic data only. No signed clinical value or clinical rule changes.

Screens (design review approved by Josh at 05:46 UTC, recorded under D-145)

  • Leave page:
    • Each overdue or absent row has an Open ward link.
    • Print sits in the card head (icon-only on phones) and prints a clean A4 list.
    • Searching "leave" now finds the page.
  • Help: new Help for Leave, Today's review, Start a triage and the triage form (help/ward-help-pages-more.ts).
  • Legal forms and Movements:
    • Print and spreadsheet Export, without patient names, desktop only as on other lists.
    • The CSV helper moved to the ward root (ward-csv.ts), and Statistics re-uses it.
  • Shared pattern: ListExportButton's status line is visually hidden until it has text.
  • What's new: entry 2026-11-11-leave-print-and-exports.json.

Fixes

  • Pull-hold lapse at the exact minute now uses the canonical bedHoldLapsed.
  • Staff requests keep the shift the person chose, with a 5-minute tolerance that is not clinical. REQUEST_WARD_STAFF gains a schema.
  • Typed times have one reader, and length of stay has one calculation.
  • Demo code:
    • A demo pass ends at once when WARD_DEMO_CODE changes.
    • A set code shorter than 12 characters (spaces and dashes not counted) counts as no code. This was added after #1615 merged; the tests pin the 11/12 boundary.
  • The go/no-go checklist gains rows C8 (UMRN-free record ids) and C9 (web-push vendor check).

Code health

  • max-lines counts code lines only, and the baseline is re-set; main's later +5 for the reducer carries over.
  • Every React hook rule switch-off carries a reason.
  • The side-rail helpers are shared.
  • One shared CI setup step.
  • Patch-level dependency updates.

Phone size limits

  • Raised on top of main's values: ED +0.3, Movements +0.5 and Statistics +0.3 KB, each well within the 5 KB allowance.
  • The reasons are in docs/script-budget-history/2026-11-11-pr1623-repository-review.md.

Checks

  • Local, on the branch merged with main b3a9f5a:
    • tsc --noEmit: exit 0.
    • eslint on changed files: clean.
    • Focused vitest: front door and demo code, 108 passed; budget, import map and M124, all passed.
    • Journey, doc facts and owner rulings checks: passed.
  • Hosted CI: unit, coverage, build, static and browser checks passed on earlier heads. The release gate timed out on main too; #1624 fixes that.

🤖 Generated with Claude Code

https://claude.ai/code/session_01J352nkwW4xTv5Ftznofb8N