Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
68ffc83
Budget gate: stop the 1.5 KB tolerance stacking past a fixed ceiling
BigSimmo Nov 11, 2026
5dac82d
Budget check: report stylesheet, preload, shared-shell and unbudgeted…
BigSimmo Nov 11, 2026
ad63f64
Movements: add the Back listener once instead of on every movements c…
BigSimmo Nov 11, 2026
d3e0481
Governance register: look up each event's reviews from one pass
BigSimmo Nov 11, 2026
46f6263
Inbox events: refuse a missing row id instead of throwing
BigSimmo Nov 11, 2026
7d57018
Merge remote-tracking branch 'origin/main' into work-1622
claude Nov 11, 2026
b1109fb
Refresh journey source digests for the inbox and governance edits
claude Nov 11, 2026
923ecfa
Merge main into grok/perf-audit-fixes-20261111
claude Nov 11, 2026
0f854de
Merge main into grok/perf-audit-fixes-20261111
claude Nov 11, 2026
2c0373a
Merge main into grok/perf-audit-fixes-20261111
claude Nov 11, 2026
4f01709
Merge main into grok/perf-audit-fixes-20261111
claude Nov 11, 2026
0db139b
Merge main into grok/perf-audit-fixes-20261111
claude Nov 11, 2026
5c83a17
Merge main into grok/perf-audit-fixes-20261111
claude Nov 11, 2026
0a8a5ed
Merge main into grok/perf-audit-fixes-20261111
claude Nov 11, 2026
5a59ad6
Merge origin/main (51a4745) into the performance audit branch
claude Nov 11, 2026
0be369a
Fix the review findings and the stale permission matrix
claude Nov 11, 2026
908f3fc
Carry #1631's mirror-free browser setup so CI can run during the Ubun…
claude Nov 11, 2026
856729e
Merge main (#1631 browser setup, Home layout-shift and transfer budge…
claude Nov 11, 2026
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
12 changes: 10 additions & 2 deletions docs/ward-flow/PUBLIC-CI.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Public Ward Flow PR checks

_Updated 2026-11-09 - no merge queue is in use; the merge_group triggers are dormant (D-107); Documentation owns._
_Updated 2026-11-11 - the inherited-overage ceiling and report-only sizes (performance audit); 2026-11-09 - no merge queue is in use; the merge_group triggers are dormant (D-107); Documentation owns._

The `Ward Flow CI` workflow in `.github/workflows/ward-flow.yml` checks the public
`BigSimmo/Ward-Flow` repository with pinned actions, locked dependencies, a read-only token and
Expand Down Expand Up @@ -208,9 +208,17 @@ required production build red until someone raised the limit by hand. Three part
establish a match, and the existing ten-minute wait bound remains.
- **Fair blame.** The budget step is `budget-gate.mjs`. When a PR's merged result is over budget, it
builds and measures main alone in a separate worktree and fails only routes the PR pushed over,
or grew more than 1.5 KB (build noise) past an already-over main. Inherited overage is a warning. It first reuses the
or grew more than 1.5 KB (build noise) past an already-over main. Growth within that 1.5 KB passes only
while the route stays within 3 KB of its fixed budget, so the allowance cannot stack PR after PR; a PR
that measures no bigger than main always passes (performance audit WF-03, 11 November 2026).
Inherited overage is a warning. It first reuses the
measurements main's own push run saved for that commit (`main-measured.mjs`), so main is built a
second time only when none exist. That build runs only when the merged result is over.
- **Report-only sizes.** The same step prints, and saves in `measured.json` under `report`, each budgeted
route's stylesheet size, the preloaded script the budget does not count, the script every budgeted route
shares, and four heavy routes with no budget (`REPORT_ROUTES`, triage first). Nothing there can fail a
build; a limit on any of it is Josh's decision from a measured baseline (performance audit WF-01, WF-02,
WF-06 and WF-18, 11 November 2026).
- **Trim issue, never an automatic raise.** Main's build saves its measurements as the
`script-budget-measured` artifact. When a main run fails and those show a route over budget,
`ward-flow-budget-heal.yml` opens one issue, "Phone script budget: main is over, trim needed",
Expand Down
24 changes: 13 additions & 11 deletions docs/ward-flow/journey/MAP-INVENTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
The route is selective. Its action notes and the additional command models have source review evidence; source digests detect later edits. This does not establish runtime or clinical acceptance.

## 201 CURRENT ENGINE EVENTS
Source-contract SHA256: e7d01dcf792ab83c47b4da0cae3de13f629070a9f12a7f939d61775f73e6be5b
Source-contract SHA256: 893ba6732a3ea9e2dd31a2d71fc4eecebca0a3652a49de3af890910e358cd356
- RECORD_ADMISSION_CARE — diagram-reviewed; event roles: ward, coordinator, community
Diagram action notes reviewed against the recorded source revision. Source digests detect subsequent edits; this is not runtime acceptance.
Permission source: src/components/ward-management/ward-flow-event-roles.ts:20
Expand Down Expand Up @@ -1081,19 +1081,19 @@ Source-contract SHA256: e7d01dcf792ab83c47b4da0cae3de13f629070a9f12a7f939d61775f
Permission source: src/components/ward-management/ward-flow-event-roles.ts:527
Event/dispatch reference: src/components/ward-management/ward-flow-reducer.ts:2196
Event/dispatch reference: src/components/ward-management/ward-inbox-events.ts:71
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:349
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:350
- REOPEN_INBOX_ITEM — diagram-reviewed; event roles: coordinator
Diagram action notes reviewed against the recorded source revision. Source digests detect subsequent edits; this is not runtime acceptance.
Permission source: src/components/ward-management/ward-flow-event-roles.ts:528
Event/dispatch reference: src/components/ward-management/ward-flow-reducer.ts:2197
Event/dispatch reference: src/components/ward-management/ward-inbox-events.ts:99
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:384
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:385
- TAKE_INBOX_ITEM_OWNERSHIP — modelled; event roles: coordinator
Source-reviewed command model: Ownership history appended; current owner is acting role’s label.
Permission source: src/components/ward-management/ward-flow-event-roles.ts:530
Event/dispatch reference: src/components/ward-management/ward-flow-reducer.ts:2198
Event/dispatch reference: src/components/ward-management/ward-inbox-events.ts:111
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:402
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:403
Subject: A coordinator inbox row and its occurrence-specific history
Before: Real current inbox row not already owned by this desk
After: Ownership history appended; current owner is acting role’s label
Expand All @@ -1103,7 +1103,7 @@ Source-contract SHA256: e7d01dcf792ab83c47b4da0cae3de13f629070a9f12a7f939d61775f
effects: Appends {at,by} to inboxOwnership; underlying row/fact and its visibility unchanged
tests: tests/ward-inbox-snooze.test.ts
tests: tests/ward-consolidated-census-20261104.test.ts
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:402; SHA256 4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:403; SHA256 08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e
Reviewed source: src/components/ward-management/ward-flow-event-roles.ts:530; SHA256 cd2310745ab8bd06363b052024f920d5248a8815bae9e2eee5c4945c11b1013d
Reviewed source: src/components/ward-management/ward-inbox-events.ts:111; SHA256 c3c63fd47887f9bbabdefc8aa6b6742f72848bc9f744afa55b2aa7efd80f037c
Reviewed source: src/components/ward-management/ward-access-state.ts:709; SHA256 6749082a89387b340bc0b52cfe76a13f8375532e44cbbcdf17a85d696c94e703
Expand All @@ -1113,18 +1113,19 @@ Source-contract SHA256: e7d01dcf792ab83c47b4da0cae3de13f629070a9f12a7f939d61775f
Permission source: src/components/ward-management/ward-flow-event-roles.ts:531
Event/dispatch reference: src/components/ward-management/ward-flow-reducer.ts:2199
Event/dispatch reference: src/components/ward-management/ward-inbox-events.ts:121
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:422
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:423
Subject: A coordinator inbox row and its occurrence-specific history
Before: Ownership history’s current entry belongs to acting role, applying a current-row start when available
After: Ownership history appended with kind=released; ownership relinquished
Scope: Coordinator role only; shared authenticated scope must also permit the row’s subject. Shared authenticated command scope additionally checks the permitted place and stored record; EVENT_ROLE alone is not place authority. Scoped state projection retains this metadata for permitted meeting-action subjects by parsing the encoded subject id; metadata for other subjects stays excluded.
payload: inboxItemId trimmed before lookup; role and now
guards: A blank or non-text inboxItemId is refused before any history is read
guards: Current owner must match acting role after filtering entries older than the row’s current occurrence, if a start is available; this branch does not independently require row existence
effects: Appends released history entry; does not delete prior ownership, resolve fact or hide row
tests: tests/ward-inbox-snooze.test.ts
tests: tests/ward-alerts-release-ownership.dom.test.tsx
tests: tests/ward-consolidated-census-20261104.test.ts
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:422; SHA256 4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:423; SHA256 08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e
Reviewed source: src/components/ward-management/ward-flow-event-roles.ts:531; SHA256 cd2310745ab8bd06363b052024f920d5248a8815bae9e2eee5c4945c11b1013d
Reviewed source: src/components/ward-management/ward-inbox-events.ts:121; SHA256 c3c63fd47887f9bbabdefc8aa6b6742f72848bc9f744afa55b2aa7efd80f037c
Reviewed source: src/components/ward-management/ward-access-state.ts:709; SHA256 6749082a89387b340bc0b52cfe76a13f8375532e44cbbcdf17a85d696c94e703
Expand All @@ -1134,7 +1135,7 @@ Source-contract SHA256: e7d01dcf792ab83c47b4da0cae3de13f629070a9f12a7f939d61775f
Permission source: src/components/ward-management/ward-flow-event-roles.ts:532
Event/dispatch reference: src/components/ward-management/ward-flow-reducer.ts:2200
Event/dispatch reference: src/components/ward-management/ward-inbox-events.ts:133
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:435
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:439
Subject: A coordinator inbox row and its occurrence-specific history
Before: Real current inbox row visible or previously snoozed
After: Latest snoozed entry hides row until chosen return time while fact remains
Expand All @@ -1146,7 +1147,7 @@ Source-contract SHA256: e7d01dcf792ab83c47b4da0cae3de13f629070a9f12a7f939d61775f
effects: Current-occurrence selectors return row when until passes or a newer occurrence starts
tests: tests/ward-inbox-snooze.test.ts
tests: tests/ward-consolidated-census-20261104.test.ts
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:435; SHA256 4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:436; SHA256 08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e
Reviewed source: src/components/ward-management/ward-flow-event-roles.ts:532; SHA256 cd2310745ab8bd06363b052024f920d5248a8815bae9e2eee5c4945c11b1013d
Reviewed source: src/components/ward-management/ward-inbox-events.ts:133; SHA256 c3c63fd47887f9bbabdefc8aa6b6742f72848bc9f744afa55b2aa7efd80f037c
Reviewed source: src/components/ward-management/ward-access-state.ts:709; SHA256 6749082a89387b340bc0b52cfe76a13f8375532e44cbbcdf17a85d696c94e703
Expand All @@ -1156,17 +1157,18 @@ Source-contract SHA256: e7d01dcf792ab83c47b4da0cae3de13f629070a9f12a7f939d61775f
Permission source: src/components/ward-management/ward-flow-event-roles.ts:533
Event/dispatch reference: src/components/ward-management/ward-flow-reducer.ts:2201
Event/dispatch reference: src/components/ward-management/ward-inbox-events.ts:142
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:469
Event/dispatch reference: src/components/ward-management/ward-inbox-reducer.ts:473
Subject: A coordinator inbox row and its occurrence-specific history
Before: History has an active snooze, applying a current-row start when available
After: Snooze history appended with kind=returned; active snooze ends now
Scope: Coordinator role only; shared authenticated scope must also permit the row’s subject. Shared authenticated command scope additionally checks the permitted place and stored record; EVENT_ROLE alone is not place authority. Scoped state projection retains this metadata for permitted meeting-action subjects by parsing the encoded subject id; metadata for other subjects stays excluded.
payload: inboxItemId trimmed before lookup; role and now
guards: A blank or non-text inboxItemId is refused before any history is read
guards: Active snooze must exist after occurrence filtering; expired or older-occurrence entry refused; this branch does not independently require row existence
effects: Appends returned entry, retaining earlier history; an underlying row, if still present, returns to the active list without resolving its fact
tests: tests/ward-inbox-snooze.test.ts
tests: tests/ward-consolidated-census-20261104.test.ts
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:469; SHA256 4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d
Reviewed source: src/components/ward-management/ward-inbox-reducer.ts:470; SHA256 08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e
Reviewed source: src/components/ward-management/ward-flow-event-roles.ts:533; SHA256 cd2310745ab8bd06363b052024f920d5248a8815bae9e2eee5c4945c11b1013d
Reviewed source: src/components/ward-management/ward-inbox-events.ts:142; SHA256 c3c63fd47887f9bbabdefc8aa6b6742f72848bc9f744afa55b2aa7efd80f037c
Reviewed source: src/components/ward-management/ward-access-state.ts:709; SHA256 6749082a89387b340bc0b52cfe76a13f8375532e44cbbcdf17a85d696c94e703
Expand Down
60 changes: 30 additions & 30 deletions docs/ward-flow/journey/actions.json
Original file line number Diff line number Diff line change
Expand Up @@ -4685,7 +4685,7 @@
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 290,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/shell/ward-bar-state.ts",
Expand All @@ -4705,12 +4705,12 @@
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 297,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 301,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
}
]
}
Expand All @@ -4732,15 +4732,15 @@
"message": "ACKNOWLEDGE_INBOX_ITEM inboxItemId must name a row — a blank names nothing",
"source": {
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 315
"line": 316
}
},
{
"when": "Guard: !inboxCategory || !namesRecord",
"message": "ACKNOWLEDGE_INBOX_ITEM inboxItemId ${inboxItemId} does not name a real inbox row — its prefix must be one of INBOX_CATEGORIES and its remainder an existing record for that category",
"source": {
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 336
"line": 337
}
}
],
Expand All @@ -4759,7 +4759,7 @@
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 312,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-tasks-drawer.tsx",
Expand All @@ -4773,13 +4773,13 @@
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 315,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 316,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 336,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 337,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
}
]
}
Expand All @@ -4801,23 +4801,23 @@
"message": "COMPLETE_INBOX_ITEM inboxItemId must name a row — a blank names nothing",
"source": {
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 352
"line": 353
}
},
{
"when": "Guard: inboxItemId.startsWith(INBOX_CATEGORIES.daily_check.idPrefix) && !/^day-(?:0|-?[1-9]\\d*)$/.test(inboxItemId.slice(INBOX_CATEGORIES.daily_check.idPrefix.length))",
"message": "inbox row ${inboxItemId} does not name a day for the daily check",
"source": {
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 369
"line": 370
}
},
{
"when": "Guard: inboxItemCompletionState(history) === \"complete\"",
"message": "inbox row ${inboxItemId} is already complete",
"source": {
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 373
"line": 374
}
}
],
Expand All @@ -4835,8 +4835,8 @@
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 349,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 350,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-tasks-drawer.tsx",
Expand All @@ -4850,18 +4850,18 @@
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 352,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 353,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 369,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 370,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 373,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 374,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
}
]
}
Expand All @@ -4883,15 +4883,15 @@
"message": "REOPEN_INBOX_ITEM inboxItemId must name a row — a blank names nothing",
"source": {
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 387
"line": 388
}
},
{
"when": "Guard: inboxItemCompletionState(history) !== \"complete\"",
"message": "inbox row ${inboxItemId} is not complete, so there is nothing to reopen",
"source": {
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 391
"line": 392
}
}
],
Expand All @@ -4909,8 +4909,8 @@
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 384,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 385,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-tasks-drawer.tsx",
Expand All @@ -4919,13 +4919,13 @@
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 387,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 388,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
},
{
"path": "src/components/ward-management/ward-inbox-reducer.ts",
"line": 391,
"sha256": "4a7dde821d15d7032a38cb18333ed34872d78fb28e4be6efb382ad5e9095c81d"
"line": 392,
"sha256": "08c484bdd2238608d2f341a4d4026e57d200d349d16dacafcf1ba57ec0d0c21e"
}
]
}
Expand Down Expand Up @@ -5260,7 +5260,7 @@
{
"path": "src/components/ward-management/governance-registers.tsx",
"line": 546,
"sha256": "c68c89bd3aa60a17ca378d9e3f369d3ee42ffa57ac035d1ca8ebd4e29c8b634d"
"sha256": "198ab9034a632ffca21ae9f719bed97ce6b53f40f7148085fb9ddd034da46a2c"
}
]
}
Expand Down
Loading
Loading