Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
2fac4ac
Rebuild DSM documentation support as a criteria-anchored note builder
claude Sep 6, 2026
33aafac
Merge branch 'main' into claude/confident-allen-8ek1fi
BigSimmo Sep 6, 2026
56829e6
Merge branch 'main' into claude/confident-allen-8ek1fi
BigSimmo Sep 6, 2026
a2e5251
Merge remote-tracking branch 'origin/main' into claude/confident-alle…
claude Sep 6, 2026
b25d9f7
issues: queue release-browser-matrix redness, main CI cancellations, …
claude Sep 7, 2026
30e5965
issues: queue release-browser-matrix redness, main CI cancellations, …
claude Sep 7, 2026
607945a
Supersede the pre-merge branch history
claude Sep 7, 2026
6e871f1
issues: correct the ineffective PR-required remedy in the browser-mat…
claude Sep 7, 2026
eeecbbe
issues: correct the main-CI cancellation mechanism, it is a job timeo…
claude Sep 7, 2026
931cab4
ci: split release-browser-matrix by engine so it finishes and reports…
claude Sep 7, 2026
3b191e4
feat(dsm): surface differential discriminators, make every row action…
claude Sep 7, 2026
3ee370a
fix(dsm): keep the tap area off the chip recipe on the ICD copy control
claude Sep 7, 2026
f7477e4
mockup(dsm): design scratch for saving a DSM diagnosis to favourites
claude Sep 7, 2026
11241fb
fix(mockup): use the named type-scale step instead of an arbitrary fo…
claude Sep 7, 2026
0234740
chore(mockup): record the new route in the repo-awareness snapshot
claude Sep 7, 2026
dcaf127
Merge branch 'main' into claude/confident-allen-8ek1fi
BigSimmo Sep 8, 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
61 changes: 56 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1558,7 +1558,32 @@ jobs:
(needs.ui-critical.result == 'success' || needs.ui-critical.result == 'skipped')
needs: [changes, static-pr, build, ui-critical]
runs-on: ubuntu-24.04
timeout-minutes: 70
# Per ENGINE, not for the whole matrix. Before 2026-09-07 one job ran
# chromium-mockups + firefox + webkit sequentially under `workers: 1` /
# `fullyParallel: false`, and it stopped finishing: measured 70m23s
# (run 34100540973) and 70m20s (run 34104496596), both landing exactly on the
# old 70-minute cap. GitHub reports a timed-out job as `cancelled`, so every
# main run concluded cancelled while every other job passed — and the matrix
# produced NO verdict, which is worse than a red one. `main` had zero
# Firefox/WebKit coverage rather than failing coverage.
#
# A single-worker suite is not made faster by a longer cap, so the cap was
# NOT raised. The engines run as sibling jobs instead, the same answer
# `Production UI` already uses for Chromium (see its shard strategy above),
# which keeps `fullyParallel: false` / `retries: 0` determinism inside each
# job while cutting wall-clock to the slowest engine rather than their sum.
timeout-minutes: 45
strategy:
# One engine's failure must not cancel its siblings: a cancelled sibling
# reports no verdict, which is the exact failure mode this change exists to
# remove.
fail-fast: false
matrix:
# Groups, not bare project names, because the fail-safe path below runs
# the COMPLETE project set and every project must land in exactly one
# group. `tests/ci-browser-matrix-coverage.test.ts` proves that union
# against playwright.config.ts and fails closed when a project is added.
engine: [chromium, firefox, webkit]

steps:
- name: Checkout
Expand Down Expand Up @@ -1610,21 +1635,47 @@ jobs:

- name: Full browser UI matrix
id: e2e-matrix
env:
ENGINE: ${{ matrix.engine }}
run: |
# Both paths below are exhaustive across playwright.config.ts projects
# for their own path, and disjoint between engines. The fail-safe union
# must equal the COMPLETE project set — a project omitted here would
# vanish from CI silently, so
# `tests/ci-browser-matrix-coverage.test.ts` re-derives both unions from
# this file plus playwright.config.ts and fails closed on any drift.
if [ "${{ needs.changes.outputs.ui_changed }}" = "true" ] && [ "${{ needs.ui-critical.result }}" = "success" ]; then
# Production Chromium already passed in this run. Keep mockup
# Chromium plus the cross-browser backstop without repeating it.
npm run test:e2e -- --project=chromium-mockups --project=firefox --project=webkit
case "$ENGINE" in
chromium) PROJECTS="--project=chromium-mockups" ;;
firefox) PROJECTS="--project=firefox" ;;
webkit) PROJECTS="--project=webkit" ;;
*) echo "::error::unknown engine '$ENGINE'" >&2; exit 1 ;;
esac
else
# Fail-safe path for perf/lockfile-only or otherwise skipped UI proof.
npm run test:e2e
# Fail-safe path for perf/lockfile-only or otherwise skipped UI proof:
# this is where the complete project set has to be accounted for.
case "$ENGINE" in
chromium) PROJECTS="--project=chromium --project=chromium-mockups --project=chromium-caring-contacts-seeded" ;;
firefox) PROJECTS="--project=firefox" ;;
webkit) PROJECTS="--project=webkit --project=mobile-webkit --project=mobile-pwa-standalone" ;;
*) echo "::error::unknown engine '$ENGINE'" >&2; exit 1 ;;
esac
fi
echo "Running $ENGINE projects: $PROJECTS"
# Word-splitting is intended: $PROJECTS is a list of --project= flags
# built above, never user input.
# shellcheck disable=SC2086
npm run test:e2e -- $PROJECTS

- name: Upload UI diagnostics
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: release-ui-diagnostics-${{ github.run_id }}
# Per engine: a shared name makes the second failing engine fail on
# upload, the same trap already documented on the Production UI shards.
name: release-ui-diagnostics-${{ github.run_id }}-${{ matrix.engine }}
path: |
test-results/
playwright-report/
Expand Down
29 changes: 29 additions & 0 deletions data/repo-awareness-snapshot.json
Original file line number Diff line number Diff line change
Expand Up @@ -909,6 +909,11 @@
"file": "src/app/mockups/document-search/page.tsx",
"area": "mockup"
},
{
"path": "/mockups/dsm-favourites",
"file": "src/app/mockups/dsm-favourites/page.tsx",
"area": "mockup"
},
{
"path": "/mockups/therapy-navigation-rail",
"file": "src/app/mockups/therapy-navigation-rail/page.tsx",
Expand Down Expand Up @@ -6424,6 +6429,14 @@
"outcome": "CHANGES REQUESTED / findings. No P0. Two confirmed P2 UX defects: (1) mobile presentation Compare tab is a self-link that drops `ids`/`q` and resets selection (1→default 4) + clears Query chip; (2) document “Browse by tag” / `searchByTag` navigates to `/?mode=documents&q=…` without `run=1`, so results do not run. P3: comparison disabled dropdown/filter controls lack `aria-describedby` placeholder contract; bare `/documents` 404 (no inbound links; `/documents/search` is canonical); phone mode-switcher truncates “Differenti…”. Deduped: `/tools` vs `/?mode=tools` remains #007; coming-soon density/favourites/forms remain #010. Phone docks flush `bottom:0` on sampled result routes; no document horizontal overflow at 390/768/1280 across 30 routes.",
"checks": "`npm run workflow:design-sweep -- --write-evidence`; `npm run ensure` → http://localhost:4461 identity Clinical KB; Playwright HTTP+overflow matrix 30/30 no overflow; live Compare/tag proofs + phone route matrix; `npm run test:e2e:accessibility` 12/12; screenshots under `/opt/cursor/artifacts/screenshots/design-review-2026-07-24/`. No OpenAI/Supabase/GitHub/hosted CI/provider mutations. Added project subagent `.cursor/agents/design-review.md`."
},
{
"date": "2026-09-07",
"ref": "PR-2601",
"head": "01cfdbd9f314291640e5d39bc698a7fcc418b3b4",
"scope": "PR CI and review repair",
"outcome": "Fixed three unresolved governance findings and the deterministic forms sorting CI failure; focused calculator checks, lint and typecheck passed.",
"checks": "vitest calculators-governance-hardening (8); check:calculator-content; lint; typecheck; verify:pr-local offline stages through unit suite start"
},
{
"date": "2026-07-14",
"ref": "codex/global-answer-reliability",
Expand Down Expand Up @@ -17440,6 +17453,14 @@
"outcome": "FIXED. Supersedes prior reviews after merging current-main PR #1469. No remaining P0-P2 findings; #107 is archived with executing jsdom state-matrix coverage, and the branch's existing changes remain intact.",
"checks": "focused current-main state-matrix suite 2 files / 10 tests PASS; outstanding ledger 146 rows / 49 open / 97 archived PASS; branch-review ledger PASS; prior combined-tree verify:cheap 32 gates PASS"
},
{
"date": "2026-09-07",
"ref": "PR-2693",
"head": "85aad321b9a67eefa4dac2acb22552b8086df9c5",
"scope": "PR CI and review repair",
"outcome": "Verified complete 24-request reconciliation and fixed deterministic forms sorting CI expectation.",
"checks": "check:outstanding-issues; check:ledger-write-discipline; installed-lock parity; merge-tree clean"
},
{
"date": "2026-07-28",
"ref": "PR #1295 / `fix/audit-remediation-from-main`",
Expand Down Expand Up @@ -21408,6 +21429,14 @@
"outcome": "Redundant: no patch-unique non-merge commits remain against `origin/main`; eligible for deletion when unreferenced.",
"checks": "`git log --right-only --cherry-pick --no-merges origin/main...claude/mobile-search-bar-fix` returned empty."
},
{
"date": "2026-09-05",
"ref": "codex/calculators-governance-hardening (PR #2601)",
"head": "b755976a79bb8e0b203fd0ede882685f6804f1eb",
"scope": "Run PR sweep: CI fix + threads + drift",
"outcome": "before: PR required green but BEHIND main, 1 unresolved P2 thread (governance checker wiring test never exercised failure path). after: merged origin/main (clean, no conflicts), added test that runs the real checker script against corrupted fixture data and asserts nonzero exit + diagnostic, thread replied and resolved.",
"checks": "npx vitest run tests/calculators-governance-hardening.test.ts (6 passed); npm run typecheck (clean, recorded pass); npx prettier --write (unchanged); git merge-tree confirmed clean before merging origin/main. No provider-backed checks run."
},
{
"date": "2026-08-30",
"ref": "codex/smart-natural-search-current-main",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "3c0b6354-a44c-4003-aa08-a1277f3f7d22",
"createdOn": "2026-09-07",
"action": "add",
"payload": {
"pri": "P2",
"type": "issue",
"summary": "Every main CI run concludes cancelled because release-browser-matrix hits its own 70 minute timeout, so main has had no browser coverage at all",
"detail": "MECHANISM IDENTIFIED 2026-09-07 by job-level timing, and it is NOT the spending or concurrency cap this row originally hypothesised. That hypothesis is withdrawn, and the per-run concurrency group is not implicated. release-browser-matrix carries timeout-minutes: 70 (.github/workflows/ci.yml). Measured on two consecutive main runs: run 34100540973 (f3ea7cb), job 101675121681, started 08:30:56Z and completed 09:41:19Z = 70m23s, with its 'Full browser UI matrix' step ending in conclusion cancelled. Run 34104496596 (c8cc72f), job 101689976803, started 09:22:47Z and completed 10:33:07Z = 70m20s, identical shape. Both land exactly on the configured timeout. GitHub reports a timed-out job as cancelled, and one cancelled job makes the whole run conclusion cancelled. That is the entire explanation for main's run-level redness, and it also explains the earlier temporal pattern (runs stopped concluding cancelled when the merge queue quietened and the matrix presumably completed inside 70 minutes). In both runs every other job succeeded, PR required included: Change scope, Static PR checks, Unit coverage, Build, Safety and config, Caring Contacts database, Production UI (1)(2)(3), Visual baselines, Lighthouse budget. CONSEQUENCE, and it is worse than the original row implied: the matrix now produces NO result rather than a red one. Main's Firefox and WebKit coverage is currently zero, not failing. The sibling row recording 15 Firefox/WebKit failures describes the last state in which the matrix still finished, at 48.3m on edbd29f. It has since crossed 70 minutes, so those 15 failures are no longer even being reported. NEXT ACTION: find why the matrix went from roughly 48 minutes to over 70. The first candidate is the 15 failing tests themselves, because a failing Playwright test spends its full timeout and then pays for trace and video capture, so failures are disproportionately expensive and a growing failure set is self-accelerating. Fix the failures first and re-measure. Do NOT simply raise timeout-minutes: that buys a longer run without restoring a verdict, and it hides the regression that made the suite slower. If the suite is genuinely too long after the failures are fixed, shard it the way Production UI is already sharded into three jobs rather than extending one 70 minute job. ORIGINAL EVIDENCE, retained: of the 8 completed CI runs on main sampled 2026-09-06, 6 concluded cancelled and 2 failed, none succeeded. Volume context: 132 merge commits to main in 24 hours, 19 in one 3-hour window. The 2026-08-20 queue-eviction mechanism was ruled out and stays ruled out: commit 19ee948 carries group: CI-${{ github.run_id }} for push events plus cancel-in-progress: ${{ github.event_name != 'push' }}, so a main push run has a unique group and cannot be superseded.",
"source": "Session 2026-09-07. Original hypothesis from run-level reads on 2026-09-06; corrected the same day by job-level timing on runs 34100540973 and 34104496596, which both show release-browser-matrix ending at its 70 minute timeout. Offline repo read of ci.yml plus GitHub Actions job reads. No provider mutation.",
"issueUlid": "01M1XFW8TMYSKD8JMVH02ZTV0C"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "6b90cb8e-eec5-4bb1-8406-d00e123c8527",
"createdOn": "2026-09-07",
"action": "add",
"payload": {
"pri": "P2",
"type": "rec",
"summary": "Do not refresh the Lighthouse performance baseline until main has one genuinely green run",
"detail": "The Lighthouse budget cells on the release browser matrix have drifted from their recorded baseline, and the obvious remedy (re-record the baseline from a recent main run) is unsafe right now. All four cells drifted together, which points at an environment/runner-level shift rather than any one PR, and main is not currently in a known-good state because release-browser-matrix fails on every run with 15 Firefox/WebKit failures. Refreshing the baseline from a red main would stamp unattributable drift as 'the new normal' and permanently lose the ability to attribute it. NEXT ACTION, in this order: (1) fix or triage the release-browser-matrix Firefox/WebKit failures, (2) obtain one main run where the whole matrix is genuinely green, (3) only then re-record the Lighthouse baseline from that SHA and note the SHA in the commit message. STOP RULE: if step 2 cannot be reached, do not proceed to step 3 - raise it with the owner instead. Related but distinct: #QSHHGK covers the bundle-budget baseline refresh, which is a different artefact.",
"source": "Session 2026-09-07 (DSM diagnosis page work). Reversal of my own earlier advice in the same session: I first suggested refreshing the baseline, then withdrew that after establishing main is red. Offline analysis plus GitHub Actions run reads; no baseline was changed.",
"issueUlid": "01M1XFZZ550H0S89B5N5XKHAVT"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "9fcfa105-cf74-462b-9a10-3601894600e0",
"createdOn": "2026-09-07",
"action": "add",
"payload": {
"pri": "P2",
"type": "issue",
"summary": "release-browser-matrix fails on every main run with 15 Firefox/WebKit failures, and it is not in PR required so it never blocks a merge",
"detail": "Evidence, main run 34065301954 on edbd29f (#2690): every other job passed - Static PR checks, Unit coverage, Safety and config, Build, Visual baselines, Caring Contacts, Production UI (1)(2)(3), Lighthouse budget, and PR required itself. The sole failure was release-browser-matrix: '15 failed, 80 skipped, 1397 passed (48.3m)'. The identical single-job failure occurred on the preceding main commit cae0655 (#2689), so it is persistent and independent of the change under test. ALL 15 failures are Firefox (5) or WebKit (10); Chromium had zero. They are viewport and scroll-geometry assertions, e.g. tests/ui-tools.spec.ts:3172 'long mobile service details paint to the viewport edge with no bottom search dock' expected footerBottom <= 820 but received 838.546875 on webkit. Others: ui-formulation-result-cards.spec.ts:35 (both engines), ui-smoke.spec.ts:1202/2939/1648/5171/5961, ui-stress.spec.ts:436, ui-tools.spec.ts:2927, ui-phone-scroll-page-owned.spec.ts:98 (x2), ui-phone-scroll.spec.ts:236, ui-route-coverage.spec.ts:554, ui-specifiers.spec.ts:181 (axe violation). WHY IT IS INVISIBLE: release-browser-matrix is not part of the PR required aggregate - PR required concluded success on edbd29f while the run overall went red - so this paints every main run red without blocking any merge, and trains readers to ignore main's status. Distinct from #055, which is a process task to run the release gate before a handoff; this row is that the matrix is currently and persistently red. NEXT ACTION: triage the 15 as one focused piece of work (they cluster into phone-chrome scroll geometry, document viewer composer, service detail footer clearance, and one specifiers axe violation). VISIBILITY REMEDY, corrected 2026-09-07 after review: do NOT simply add release-browser-matrix to the pr-required needs list. ci.yml gates the job on workflow_dispatch, schedule, refs/heads/release/*, or refs/heads/main only, so it never runs on a pull_request event at all, and the comment above it records that it must deliberately not wait on pr-required (#023 - a blocking weekly dependency audit once skipped the matrix entirely). A needs edit alone would aggregate a skipped job and change nothing. Fix the post-merge signal instead so a red matrix on main is visible and owned rather than ambient. Making it genuinely merge-blocking is a separate and much larger change - a pull_request trigger plus an aggregate redesign that runs a roughly 50 minute matrix before every merge - and must be costed and decided on its own rather than assumed here. SUPERSEDED IN PART 2026-09-07: the matrix no longer reports these 15 failures at all. It now exceeds its 70 minute timeout on every main run and is recorded as cancelled, so main's Firefox and WebKit coverage is currently zero rather than red. The 48.3m/15-failure evidence above is the last state in which the job still finished. Fix the timeout cause first (see the sibling row on release-browser-matrix timing out), because the 15 failures cannot be re-measured until the job completes again.",
"source": "session 2026-09-06 diagnosis of main CI; runs 34065301954 and 34064564709",
"issueUlid": "01M1XFVVAZ9Z197J7AAJJEP4C7"
}
}
1 change: 1 addition & 0 deletions docs/site-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -1241,6 +1241,7 @@ This file is generated by `npm run docs:update` (or `npm run sitemap:update` dir
- `/mockups/document-search/source-overlays` - Route discovered from app directory Source: `src/app/mockups/document-search/source-overlays/page.tsx`.
- `/mockups/document-search/source/evidence` - Route discovered from app directory Source: `src/app/mockups/document-search/source/evidence/page.tsx`.
- `/mockups/document-top-navigation` - Route discovered from app directory Source: `src/app/mockups/document-top-navigation/page.tsx`.
- `/mockups/dsm-favourites` - Route discovered from app directory Source: `src/app/mockups/dsm-favourites/page.tsx`.
- `/mockups/factsheets-compact-view` - Route discovered from app directory Source: `src/app/mockups/factsheets-compact-view/page.tsx`.
- `/mockups/factsheets-topics-phone` - Route discovered from app directory Source: `src/app/mockups/factsheets-topics-phone/page.tsx`.
- `/mockups/favourites-hub` - Route discovered from app directory Source: `src/app/mockups/favourites-hub/page.tsx`.
Expand Down
7 changes: 4 additions & 3 deletions mockups/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ picked — kept as-is rather than guessed at.

### Favourites page

| Route | Status |
| ---------------------------- | ---------------------------------------------------- |
| `favourites-phone-perfected` | Chosen design (2026-08-27) — see the write-up above. |
| Route | Status |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `favourites-phone-perfected` | Chosen design (2026-08-27) — see the write-up above. |
| `dsm-favourites` | Active study (2026-09-07) — save a DSM diagnosis to favourites. Open decisions only; nothing wired. Blocks on a check-constraint migration. |

Six earlier studies (`favourites-command-console`, `favourites-command-desk`,
`favourites-library-view`, `favourites-review-console`, `favourites-set-board`,
Expand Down
Loading
Loading