Skip to content

Add four phone mockups for the therapy comparison picker - #2339

Closed
BigSimmo wants to merge 17 commits into
mainfrom
claude/therapy-comparison-mobile-design-z0dagr
Closed

Add four phone mockups for the therapy comparison picker#2339
BigSimmo wants to merge 17 commits into
mainfrom
claude/therapy-comparison-mobile-design-z0dagr

Conversation

@BigSimmo

@BigSimmoBigSimmo commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds four design-scratch directions for the phone selection experience on /therapy-compass/compare, each a live, tappable phone prototype rather than a static picture, under src/app/mockups/therapy-compare-{progressive,sheet,tray,perfected} with their components in src/components/therapy-compare-picker-mockups/.
    • A · therapy-compare-progressive — Add as you go. Empty slots are never drawn. An empty screen is a heading, one sentence, one primary button and three starter pairs; each therapy chosen becomes a row, and the add control moves below it and quietens. At four it becomes a plain sentence rather than a disabled control.
    • B · therapy-compare-sheet — Build the set in one sheet. Selection is a full-height mode: search, a category chip row over the sixteen catalogue groups, multi-select with a draft that only commits on Compare N, so cancelling cannot destroy the current set. The page body shrinks to one wrapping row of pills plus the comparison.
    • C · therapy-compare-tray — Carry a compare tray. Selection leaves the page body entirely for a persistent bottom tray filled from search results and therapy records; the compare route is only ever reached with something in it. Notes flag the docs/search-chrome-behaviour.md collision this direction has to resolve (one bottom-chrome owner, edge-to-edge composer, zero reserve when hidden).
    • C+ · therapy-compare-perfected — the master version of C. Resolves the chrome collision C only flagged: the tray sits in flow above the composer as one bottom stack, both hide together on scroll-down from a single collapse owner, and the reserve released when they hide is exactly zero. The comparison view is derived from the live set (count >= 2) rather than latched, so emptying the tray while reading cannot strand a blank screen, and a full tray marks further adds aria-disabled with a stated reason instead of silently ignoring them.
  • All four share one fixture set, one six-defect brief, and a per-field stacked comparison in place of the shipped min-w-[720px] table in a horizontal scroller.
  • Registers the /mockups/therapy-compare- prefix in mockups-layout-client.tsx so shared chrome is suppressed — each frame draws its own universal header and edge-to-edge composer, and the surface under study is defined by what sits between them.
  • Regenerates docs/site-map.md and data/repo-awareness-snapshot.json for the four new routes.

Mockup-only arbitrary Tailwind values are written as inline styles. globals.css carries @source not "../components/**/*mockup*", so a utility used nowhere else in src is never emitted and silently collapses the frame — the shipped therapy-navigation mockups render at content height rather than their declared h-[28rem] for this reason. Not fixed here; flagged for a separate change.

Design-scratch only: src/app/mockups/** 404s in production, and these routes are exempt from the button-wiring and route-reachability gates and nothing else. Comparison copy in the fixtures is placeholder text for layout, stated as such on each page; every record carries needs_review, matching the real catalogue.

Verification

  • npm run lint — pass ([gate-receipts] recorded a pass for "lint:internal" (5241 input files))

  • npm run typecheck — pass ([gate-receipts] recorded a pass for "typecheck:internal" (5241 input files))

  • npm run verify:cheap — pass, exit 0 (Test Files 431 passed (431) · Tests 10035 passed | 41 skipped (10076))

  • npm run check:repo-awareness-snapshot[repo-awareness] in step with data/repo-awareness-snapshot.json (193 pages, 430 documents, 2613 reviews)

  • npm run sitemap:check — pass, clean after regeneration

  • npm run docs:check-indexcoverage OK: all 63 repository roots/modules/routes and all schema tables are indexed

  • npm run format — run and committed; prettier --check on the changed paths reports All matched files use Prettier code style!

  • Rendered proof: all four routes return 200 on the local dev server and were driven through their states with Chromium (add/remove, picker, sheet multi-select and commit, tray expand/collapse, scroll-hide and restore) with zero page errors and zero console errors; the phone frame measures 390 × 736 as designed. On C+ the measured bottom reserve moves 138px → 12px on scroll-down with the stack translated 126px, and restores on scroll-up.

  • npm run verify:pr-localVerification not run: superseded by the gates above. The change is design-scratch mockup routes plus two generated files; lint, typecheck, the reachability test and the full unit suite under verify:cheap are the failure classes this diff can plausibly break, and all ran green. CI's own routing remains the authority.

  • npm run verify:uiUI verification not run: no production route, shared component, or token changed. src/app/mockups/** 404s in production and no Playwright journey covers these routes. Browser proof above is Chromium interaction against the live dev server.

  • npm run verify:release — not a release or handoff-confidence claim.

  • npm run eval:retrieval:quality — no retrieval, ranking, selection, chunking or scoring behaviour changed.

  • npm run eval:rag -- --limit 15 + npm run eval:quality -- --rag-only — no answer generation, synthesis prompt or post-processing changed.

  • npm run check:production-readiness — no clinical workflow, privacy, environment, Supabase, source governance or deployment behaviour changed.

  • npm run check:deployment-readiness — no deployment startup, hosting or rollout behaviour changed.

Clinical Governance Preflight

This section is required because data/repo-awareness-snapshot.json matches the clinical-risk path pattern ^(?:src/data|data|public/therapy-compass-data)/. That file is a generated repository inventory (routes, documents, review counts) regenerated by npm run snapshot:repo-awareness; it carries no clinical content and is present only because check:repo-awareness-snapshot requires it to list this PR's four new mockup routes. No clinical surface is touched by this change. Each item below is a statement of fact about this diff, verified against the changed-file list.

  • Source-backed claims still require linked source verification before clinical use
  • No patient-identifiable document workflow was introduced or expanded without explicit governance approval
  • Supabase target remains Clinical KB Database (sjrfecxgysukkwxsowpy)
  • Service-role keys and private document access remain server-only
  • Demo/synthetic content remains clearly separated from real clinical sources
  • Source metadata, review status, and outdated/unknown-source behavior remain conservative
  • Deployment classification/TGA SaMD impact was checked when clinical decision-support behavior changed

Evidence for each: the diff touches four src/app/mockups/** route files, five src/components/therapy-compare-picker-mockups/** component files, one path-prefix flag in mockups-layout-client.tsx, and two generated files (docs/site-map.md, data/repo-awareness-snapshot.json). It contains no answer-path, retrieval, citation-rendering, ingestion, upload, document-access, auth, privacy, Supabase, or environment code. The twenty therapy fixtures are synthetic placeholder text, labelled as such on every page, confined to files that 404 in production and blocked from production import by the existing no-restricted-imports rule; each fixture renders a Needs review pill, so the mockups' own review-status display fails conservative. No clinical decision-support behaviour changed, so the SaMD classification question was checked and returns no impact.

Risk and rollout

  • Risk: Very low. The only file outside the new mockup surface and the two generated files is mockups-layout-client.tsx, where a new path-prefix flag is added and ANDed into the existing searchComposerVisible and chromeVisible expressions; it can only affect paths starting /mockups/therapy-compare-, all of which are new in this PR.
  • Rollback: git revert the merge-free commits, or regenerate the two generated files from main. Nothing is imported by production code — the ESLint no-restricted-imports rule blocks that by construction.
  • Provider or production effects: None.
  • RAG impact: none.

Notes

  • The four directions are deliberately not variations on one layout; they answer the same brief at different depths, and each page ends with what it costs to build. C+ is the recommended one to build: it is a Therapy-mode change with a phone-chrome contract attached, not a compare-screen fix, and should not be bundled with A or B.
  • src/components/compare/ is shared by therapy, dictionary, DSM, formulation and specifiers, so the empty-slot problem these mockups target is present on all five. Direction A would land on all of them at once.

Summary by CodeRabbit

  • New Features
    • Added four therapy comparison mockup experiences: progressive selection, full-screen sheet, persistent tray, and perfected tray.
    • Users can search, filter, add, remove, and compare up to four therapies.
    • Added validation requiring at least two selections before comparison.
    • Added responsive states for empty, selected, expanded, and comparison views.
  • Bug Fixes
    • Improved mockup layouts by hiding shared navigation elements where they interfere with comparison flows.

The phone compare screen opens with four empty A/B/C/D slot cards, a
`Change therapies` button and an `Add therapies to compare` empty state —
three affordances for one outcome, with the primary one pushed below the
fold by ~1,100px of placeholders. The toolbar (density, Copy set, Clear)
renders disabled above it all, and the payoff is a 720px-minimum table in
a horizontal scroller.
Three design-scratch directions, each a live phone prototype:
- A `therapy-compare-progressive` — Add as you go. Empty slots are never
drawn; one button and three starter pairs, then a row per therapy chosen.
- B `therapy-compare-sheet` — Build the set in one sheet. Full-height
multi-select with search, category chips and a draft that commits once.
- C `therapy-compare-tray` — Carry a compare tray. Selection leaves the
page body for a persistent bottom tray filled from search and records.
All three share the same fixtures, a per-field stacked comparison in place
of the sideways table, and the same six-defect brief. Mockup-only arbitrary
Tailwind values are inlined: globals.css excludes `*mockup*` sources, so a
utility used nowhere else in `src` is never emitted and silently collapses
the frame (the shipped therapy-navigation mockups have the same issue).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
@coderabbitai

coderabbitaiBot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 28 minutes.

View limit details

Limit details: You’ve used the included review currently available. Your 95 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d57d8873-e877-4d10-b84e-d91ccc1d0cd8

📥 Commits

Reviewing files that changed from the base of the PR and between e3c4c10 and 7fcafbe.

⛔ Files ignored due to path filters (1)
  • docs/site-map.md is excluded by !docs/**, !**/*.md
📒 Files selected for processing (12)
  • bundle-budget.json
  • data/repo-awareness-snapshot.json
  • src/app/mockups/mockups-layout-client.tsx
  • src/app/mockups/therapy-compare-perfected/page.tsx
  • src/app/mockups/therapy-compare-progressive/page.tsx
  • src/app/mockups/therapy-compare-sheet/page.tsx
  • src/app/mockups/therapy-compare-tray/page.tsx
  • src/components/therapy-compare-picker-mockups/progressive.tsx
  • src/components/therapy-compare-picker-mockups/shared.tsx
  • src/components/therapy-compare-picker-mockups/sheet.tsx
  • src/components/therapy-compare-picker-mockups/tray-perfected.tsx
  • src/components/therapy-compare-picker-mockups/tray.tsx

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d10e38bf-f3d9-4f42-8ebe-4026b87e7d9f

📥 Commits

Reviewing files that changed from the base of the PR and between d5d79e9 and f76f0ab.

⛔ Files ignored due to path filters (1)
  • docs/site-map.md is excluded by !docs/**, !**/*.md
📒 Files selected for processing (11)
  • data/repo-awareness-snapshot.json
  • src/app/mockups/mockups-layout-client.tsx
  • src/app/mockups/therapy-compare-perfected/page.tsx
  • src/app/mockups/therapy-compare-progressive/page.tsx
  • src/app/mockups/therapy-compare-sheet/page.tsx
  • src/app/mockups/therapy-compare-tray/page.tsx
  • src/components/therapy-compare-picker-mockups/progressive.tsx
  • src/components/therapy-compare-picker-mockups/shared.tsx
  • src/components/therapy-compare-picker-mockups/sheet.tsx
  • src/components/therapy-compare-picker-mockups/tray-perfected.tsx
  • src/components/therapy-compare-picker-mockups/tray.tsx

Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.


📝 Walkthrough

Walkthrough

Adds shared therapy comparison picker primitives and four interactive mockup directions. Adds dedicated routes, hides shared mockup chrome, and updates repository page counts.

Changes

Therapy comparison picker mockups

Layer / File(s)Summary
Shared comparison model and mockup shell
src/components/therapy-compare-picker-mockups/shared.tsx
Adds therapy fixtures, capped selection state, filtering, reusable phone UI, comparison previews, navigation, and defect notes.
Progressive picker interaction
src/components/therapy-compare-picker-mockups/progressive.tsx
Adds incremental selection, starter pairs, full-screen search, four-item ceiling behavior, and comparison previews.
Selection sheet interaction
src/components/therapy-compare-picker-mockups/sheet.tsx
Adds draft selection, search and category filtering, cancel-safe closing, commit validation, and comparison results.
Persistent comparison tray
src/components/therapy-compare-picker-mockups/tray.tsx
Adds browse and comparison views, capacity handling, expanded and collapsed tray states, and composer stacking.
Perfected tray interaction
src/components/therapy-compare-picker-mockups/tray-perfected.tsx
Adds list, record, and comparison screens with scroll behavior, reduced-motion handling, capacity feedback, and an empty state.
Mockup route exposure
src/app/mockups/therapy-compare-*/page.tsx, src/app/mockups/mockups-layout-client.tsx, data/repo-awareness-snapshot.json
Adds four routes, hides shared search and chrome on therapy comparison pages, and updates page counts and revision metadata.

Estimated code review effort: 4 (Complex) | ~60 minutes

Merge Risk:⚪ Minimal · up to f76f0

This PR adds isolated, non-production therapy comparison mockups and related generated documentation without changing shipped clinical or production behavior. No actionable merge-blocking risk remains beyond normal checks and review.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 22.50% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 40 functions across 10 files. (1 skipped:…Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly and concisely identifies the main change: four phone mockups for the therapy comparison picker.
Description check✅ PassedThe description is complete and matches the template. It documents the four mockups, verification results and exceptions, risk and rollback, production and RAG impact, and clinical governance checks.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 22.50% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 40 functions across 10 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/therapy-comparison-mobile-design-z0dagr

Comment @coderabbitai help to get the list of available commands.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.

Fix All in Cursor

Bugbot Autofix prepared fixes for both issues found in the latest run.

  • ✅ Fixed: Compare view stays empty
    • Empty and per-row remove now switch back to browse when the tray drops below two, so the compare surface cannot stay mounted empty.
  • ✅ Fixed: Full tray ignores adds
    • Unused Plus controls now dim and use aria-disabled at the four-therapy ceiling, matching Direction B so a fifth tap no longer looks live.

You can send follow-ups to the cloud agent here.

Reviewed by Cursor Bugbot for commit 341c3c9. Configure here.

Comment threadsrc/components/therapy-compare-picker-mockups/tray.tsx
Comment threadsrc/components/therapy-compare-picker-mockups/tray.tsx
@supabase

supabaseBot commented Aug 24, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Left a non-blocking comment; no approval. Cursor Bugbot skipped its check and reported 2 unresolved medium-severity findings that need human review. No additional reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

Leave compare when Empty or a row remove drops the tray below two, and
dim leftover Plus controls at the four-therapy ceiling so they no-op
visibly instead of looking live.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:341c3c9dd1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadsrc/components/therapy-compare-picker-mockups/tray.tsx Outdated
Comment threadsrc/components/therapy-compare-picker-mockups/tray.tsx
Comment threadsrc/components/therapy-compare-picker-mockups/tray.tsx
@BigSimmo

Copy link
Copy Markdown
OwnerAuthor

@codex resolve actionable Codex review findings for this pull request and current head using the repository instructions. This is the pull request's single automatic repair pass: do not perform a fresh review, create new standalone findings, or request another review. Work only the existing unresolved Codex threads on the current head. The only repository destination is BigSimmo/Database, and the only branch destination is the pull request head branch claude/therapy-comparison-mobile-design-z0dagr at starting commit 767f388; never publish fixes to a detached or synthetic work branch and never create a stacked pull request. Use the authenticated GitHub connector to commit each approved fix to BigSimmo/Database:claude/therapy-comparison-mobile-design-z0dagr, then verify that the pull request head contains the published commit before reporting success. Always fix P0 and P1 findings. For P2 and lower findings, fix only clear, scoped, low-risk issues; otherwise disposition them with a concise reason. For a fixed thread, reply with as the first line and as the second line. For a no-code disposition, use followed by . These result markers authorize the workflow to close that exact thread only after it verifies a fixed commit is the pull request head; a local-only commit is not a fix. If publication or verification fails, do not use either result marker, do not claim success, and leave the thread open with the blocker. If human input or new authorization is required, do the same. Finish only after every actionable thread is fixed or dispositioned and closed, or explicitly left open for a human decision. Do not update the branch from main, address unrelated reviews, broaden scope, or create more than one scoped fix commit. Do not use external APIs, paid services, credentials, dependency changes, or broad refactors unless explicitly authorized. Add targeted tests where behavior changes and run the narrowest relevant validation.

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Left a non-blocking comment; no approval. Cursor Bugbot is not running on this head, and two unresolved medium-severity findings from the prior Bugbot review still need human review. No additional reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

Both confirmed against the running prototype before fixing.
1. Emptying or trimming the tray below two while reading a comparison left
the compare view mounted over a `ComparisonPreview` that renders null —
a blank screen, in the one direction whose whole claim is that an empty
compare screen is unreachable. The view is now derived (`showCompare`)
rather than latched, so dropping below two falls back to browse.
2. At four, the result-row plus controls still looked live and `add`
silently no-opped. They now carry `aria-disabled`, an explanatory title
and label, and 40% opacity, matching what the sheet and progressive
pickers already did; the tray heading reads `4 of 4 · full`. Focus order
is preserved — no native `disabled`, per the repo's wiring convention.
Also replaces the bare `opacity-40`/`opacity-45` dimming in all three
directions with inline styles. Production only ever uses those utilities
behind `disabled:`, so the bare form was never emitted and every "blocked"
row rendered at full strength — the same mockup-only utility trap as the
frame heights. Verified in Chromium: 0.4 / 0.4 / 0.45 computed, tabIndex 0,
`aria-disabled=true`, and Playwright refuses to click the tray's fifth
control ("element is not enabled").
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
Both commits fix the same Bugbot findings; this keeps whichever half is
actually correct rather than either wholesale.
Kept from the autofix: the `blocked` local, and the muted border tokens on
a control at the ceiling.
Kept from mine, and why:
- The compare view is derived (`showCompare = view === "compare" && count >= 2`)
rather than reset at each call site. The autofix patched `Empty` and the
per-row remove to also `setView("browse")`, which works but leaves
`if (count <= 2)` reading a pre-removal count and only looking
load-bearing; any later removal path would have to remember to repeat it.
With the guard derived, both side effects are redundant, so they are
dropped.
- The blocked control's dimming is an inline style, not `opacity-40`.
Production only ever uses that utility behind `disabled:`, so the bare
class is never emitted for a mockup-only source and the autofix's blocked
rows would have rendered at full strength — the finding's own symptom.
- The explanatory `title` and the "already holds 4" label, so the ceiling
states its reason rather than only looking inert.
Verified in Chromium on the merged tree: Empty and per-row remove both
return to browse with the list intact; the fifth control computes opacity
0.4, `aria-disabled=true`, tabIndex 0, title "Tray full — remove one to add
DBT"; no page or console errors.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
cursor[bot]
cursorBot previously approved these changes Aug 24, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings were marked fixed by Bugbot Autofix and the current tray code derives compare visibility and disables adds at the four-therapy ceiling. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

Direction C's own notes say the tray has to negotiate the bottom-chrome
contract with the edge-to-edge composer, but neither of its frames rendered
`PhoneComposer` — unlike Directions A and B. The prototype therefore hid
the single collision the direction most needs judging on, and showed it
with more viewport than production would allow.
The tray now sits in flow directly above the composer in both frames, to
scale, so the ~134 px of permanent bottom chrome is visible rather than
assumed away. The list padding drops from `pb-28` to `pb-4` because the
tray no longer overlays the content it sat on top of. The `warn` note is
rewritten to point at what the frames now show instead of describing it.
Re-verified in Chromium: composer present, compare view still reachable at
two, Empty still returns to browse, no page or console errors.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit:767f388149

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

cursor[bot]
cursorBot previously approved these changes Aug 24, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its two prior findings and the related Codex threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

BigSimmo pushed a commit that referenced this pull request Aug 24, 2026
Records the Run-PR-style sweep check on PR #2339 (therapy comparison
mobile design mockups): already fully green, only needed a main sync.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
BigSimmo added a commit that referenced this pull request Aug 24, 2026
* Add branch review record for PR #2342 sweep
Records the Run-PR-style sweep check on PR #2342 (Improve Therapy
best-match visibility): review comments already fixed, branch synced
from main, CI green on completed checks.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
* docs(ledger): record Run PR sweep of Dependabot PRs #2296, #2297, #2325, #2326
Immutable review records for the four-PR dependency sweep: CI fix on
#2325, clean main-syncs on #2296/#2297, and diagnosis-only on #2326
(Node 26 Docker bump incompatible with the engine-strict Node 24 pin).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
* Add branch review record for PR #2339 sweep
Records the Run-PR-style sweep check on PR #2339 (therapy comparison
mobile design mockups): already fully green, only needed a main sync.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
* Add branch review records for PR #2341, #2347 sweep
Records the Run-PR-style sweep checks on #2341 (dictionary filter
band, fixed via main sync, unrelated flake confirmed) and #2347
(browser test gate handoff, fixed stale generated file + doc-link
allowlist entries; owner closed the PR mid-sweep for unrelated reasons).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
---------
Co-authored-by: Claude <noreply@anthropic.com>
BigSimmo added a commit that referenced this pull request Aug 24, 2026
* Add branch review record for PR #2342 sweep
Records the Run-PR-style sweep check on PR #2342 (Improve Therapy
best-match visibility): review comments already fixed, branch synced
from main, CI green on completed checks.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
* docs(ledger): record Run PR sweep of Dependabot PRs #2296, #2297, #2325, #2326
Immutable review records for the four-PR dependency sweep: CI fix on
#2325, clean main-syncs on #2296/#2297, and diagnosis-only on #2326
(Node 26 Docker bump incompatible with the engine-strict Node 24 pin).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
* Add branch review record for PR #2339 sweep
Records the Run-PR-style sweep check on PR #2339 (therapy comparison
mobile design mockups): already fully green, only needed a main sync.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
* Add branch review records for PR #2341, #2347 sweep
Records the Run-PR-style sweep checks on #2341 (dictionary filter
band, fixed via main sync, unrelated flake confirmed) and #2347
(browser test gate handoff, fixed stale generated file + doc-link
allowlist entries; owner closed the PR mid-sweep for unrelated reasons).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
* Add branch review records for PR #2338, #2337, #2333 sweep
Records the Run-PR-style sweep checks: #2337 fixed a design-token
ratchet failure, #2333 fixed a tap-target size regression and
resolved a concurrent-push merge, #2338 was only a main sync. #2333
and #2338 still have an open PR-policy failure (missing Clinical
Governance Preflight section) left for the PR author to fill in.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4RHy24AtgPobEQQwrj7u1
---------
Co-authored-by: Claude <noreply@anthropic.com>
The tray was the strongest of the three ideas and the weakest execution.
This is the same model with its three real costs removed, added as a fourth
direction rather than replacing the original so the two can be compared.
- The tray does not exist until something is in it. An empty Therapy screen
is exactly what it is today: one composer and nothing more. The original
drew a 68px bar with four hollow dots before any choice had been made —
permanent furniture advertising a feature nobody was using yet.
- Tray and composer are one bottom stack that translates off together on
scroll-down and returns on scroll-up, with the content reserve going to
zero while hidden. That is the `docs/search-chrome-behaviour.md` contract
the original only described in prose.
- You can add from a therapy record, not just from a list. Tapping a name
opens the record and its primary action fills the tray without losing
your place. That is the entire argument for carrying a set, and the
original never showed it.
- Arrival is legible: the filled slot marks itself as it lands and the row
control flips to a tick, so a state change 600px from the thumb still
reads. Dropped entirely under `prefers-reduced-motion`.
The fixture list grows from 10 to 20 records because a short list cannot
demonstrate scroll-hide honestly — releasing the reserve shortens the
content, which un-scrolls a short list, which reveals the chrome again. The
real catalogue is 205 records and never does this; an 8-row mockup did, and
the loop was visible before the list was lengthened.
Verified in Chromium: no tray at zero; reserve 138px -> 12px and the stack
translating 126px on scroll-down, both restored on scroll-up; record-add
moving the tray to 3 of 4; compare reachable at two and unreachable below
it; no page or console errors.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

@github-actions

github-actionsBot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

CI triage

CI failed on this PR. Automated classification of the 3 failed job(s):

  • Buildneeds investigation: inspect the failing step and uploaded diagnostics; rerun only after classifying the cause.
  • Advisory UInot baselined: this job did NOT run on the main comparison below (path-scoped skip), so that run says nothing about it either way. Treat the comparison as absent, not green, and inspect the failing step.
  • PR requiredneeds investigation: inspect the failing step and uploaded diagnostics; rerun only after classifying the cause.

Compared with main CI run #13925 (failure). That run's conclusion is an aggregate and did not exercise Advisory UI.

Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger.

Fixes the Static PR checks failure on 022021d:
[repo-awareness] The committed snapshot is behind the repository:
- routes differs from the repository
`data/repo-awareness-snapshot.json` records every route in the repository
and the four `/mockups/therapy-compare-*` pages were missing from it. The
regenerated snapshot adds exactly those four and nothing else.
Why it passed locally and failed in CI: the branch was 12 commits behind
main, and `snapshot:repo-awareness` / `check:repo-awareness-snapshot` were
added to package.json on main after this branch was cut. CI evaluates the
merge of the head with the current base, so it ran a gate whose npm script
this branch did not yet contain — `npm run snapshot:repo-awareness` failed
with "Missing script" here while the same check ran and failed there. The
gate is also outside the `verify:cheap` set, so a clean local broad run
said nothing about it. Merging main in resolves both halves.
Verified on the merged tree: check:repo-awareness-snapshot in step (192
pages), sitemap:check clean, lint and typecheck green, and the three tests
that guard the snapshot and route reachability passing (22 tests).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

Main advanced to cf7a873 and GitHub reported a real conflict, in
`data/repo-awareness-snapshot.json` only. Both sides had regenerated the
same committed inventory, which is what that file is for and also what
makes it a contention magnet.
Resolved the way the repo requires for generated files — take the base
version and re-run the generator, never hand-merge the hunks:
git checkout origin/main -- data/repo-awareness-snapshot.json
npm run snapshot:repo-awareness
The result is main's snapshot plus this branch's four mockup routes, which
is exactly the intended union of the two sides.
Verified: check:repo-awareness-snapshot in step (192 pages), sitemap:check
clean, whole-tree Prettier clean, lint and typecheck green, and the three
tests covering the snapshot, its gate and route reachability passing (22).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

Main advanced to 069058a and `data/repo-awareness-snapshot.json` conflicted
for the second time in twelve hours, on the same generated inventory and
for the same reason: both sides regenerated it.
Resolved the same way — take the base version and re-run the generator,
never hand-merge:
git checkout origin/main -- data/repo-awareness-snapshot.json
npm run snapshot:repo-awareness
Verified: snapshot in step (193 pages), sitemap:check clean, whole-tree
Prettier clean, lint and typecheck green.
This is the third problem that one generated file has caused on a PR whose
substance is four design-scratch mockup routes — a clinical-risk
classification it does not deserve, and now two merge conflicts. Dropping
it from this branch is with the owner as a decision; the file rebuilds on
the next generator run, so nothing is lost by removing it here.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WKxKU17WQqryM8iNhpyJk7
cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

data/repo-awareness-snapshot.json conflicts on every main merge because it
records a repository-wide inventory that moves with each landed PR. Resolved
the documented way for a generated file: take main's version, regenerate.
Reviews 2610 -> 2613; routes unchanged from this branch's four mockup routes.
@BigSimmoBigSimmo changed the title Add three phone mockups for the therapy comparison pickerAdd four phone mockups for the therapy comparison pickerAug 25, 2026
cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

Same cause as the previous three: data/repo-awareness-snapshot.json records a
repository-wide inventory that every landed PR moves, so it conflicts on each
main merge. Resolved the documented way for a generated file - take main's
version, regenerate.
Documents 430 -> 431. docs/site-map.md auto-merged cleanly.
cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

data/repo-awareness-snapshot.json conflicted again; resolved the documented
way for a generated file - take main's version, regenerate. Pages 193 -> 196,
documents 431 -> 436, reviews 2613 -> 2615.
mockups-layout-client.tsx auto-merged this time because main also edited it.
Verified after the merge that isTherapyComparePickerMockup is still declared
and still ANDed into both searchComposerVisible and chromeVisible; typecheck
reports no error on the merged file.
cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

…exhausted
Build failed on 6d12681: mockups scratch 620.0 KiB, +27.2% against a 25%
tolerance. Measured both sides before touching the baseline rather than
refreshing reflexively:
origin/main alone 594.3 KiB +21.9% (already past the 15% drift warning)
main + these 4 routes 620.0 KiB +27.2% FAIL
So 21.9 of the 27.2 points predate this branch. Four mockup routes add 25.7 KiB
and 5.3 points, which is what tips it over - the failure is this PR's to fix,
but the accumulated drift is the dominant cause. This is the failure mode
recorded as `#QSHHGK`: nothing schedules a baseline refresh, so accumulated
growth fails whichever PR lands last.
Refreshed with `check:bundle-budget -- --update`, which the failing check
itself prescribes for this bucket - it is a repo-hygiene ceiling on unbounded
accumulation, not a per-mockup gate, and nobody downloads these chunks.
Every production-facing baseline moved DOWN, i.e. tighter, not looser:
production 1656.0 -> 1655.1 KiB
route / 278.5 -> 233.0 KiB
route /documents/... 281.6 -> 236.1 KiB
mockups (scratch) 487.6 -> 620.0 KiB
Only the scratch bucket rose. Verified no route budget was dropped by the
update (both before and after track `/` and `/documents/search`). The old
baselineSource 0764fb5 was 71 commits stale and not an ancestor of HEAD,
which is why the check also warned about ancestry; it now points at 6d12681.
Measured on a clean build (`rm -rf .next` first, per the AGENTS.md warning that
a cached .next makes this check report stale byte-identical numbers).
@BigSimmoClaude

Copy link
Copy Markdown
OwnerAuthor

Bundle budget baseline refreshed — why

Build failed on 6d12681: mockups scratch 620.0 KiB, +27.2% against a 25% tolerance. The failing check prescribes either pruning stale mockups or a deliberate refresh "and say why in the PR", so this is the why.

I measured both sides on clean builds (rm -rf .next first, per the AGENTS.md warning that a cached .next makes this check report stale byte-identical numbers) before touching the baseline:

Buildmockups scratchvs baseline
origin/main alone (3ab1f3d)594.3 KiB+21.9% — already past the 15% drift warning
main + this PR's four routes620.0 KiB+27.2% — FAIL

So 21.9 of the 27.2 points predate this branch. The four new mockup routes add 25.7 KiB and 5.3 points, which is what tips it over the line. The failure is therefore this PR's to fix rather than a base-branch red — main alone still passes — but the accumulated drift is the dominant cause. This is the failure mode already recorded as #QSHHGK: nothing schedules a baseline refresh, so accumulated growth fails whichever PR happens to land last.

Refreshed with npm run check:bundle-budget -- --update. Every production-facing baseline moved down, i.e. tighter, not looser:

BucketBeforeAfter
production (what users download)1656.0 KiB1655.1 KiB
route /278.5 KiB233.0 KiB
route /documents/search281.6 KiB236.1 KiB
mockups (design scratch, 404s in production)487.6 KiB620.0 KiB

Only the scratch bucket rose, and nobody downloads those chunks. Production had in fact shrunk since the old baseline was captured.

Two things I checked rather than assumed:

  • No route budget was silently dropped by --update. The file tracked / and /documents/search both before and after. (Note for anyone reading AGENTS.md's "Bundle budget" section: it names five routes for this bucket, but the committed bundle-budget.json has only ever carried these two. That mismatch predates this PR and I have not changed it.)
  • The old baselineSource0764fb581356 was 71 commits stale and is not an ancestor of HEAD, which is why the check was also emitting an ancestry warning alongside the size failure. It now points at 6d1268197017.

node scripts/check-bundle-budget.mjs exits 0 locally after the refresh.


Generated by Claude Code

cursor[bot]
cursorBot previously approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

@BigSimmoClaude

Copy link
Copy Markdown
OwnerAuthor

Advisory UI is failing on main, not on this PR — with a proposed patch

Advisory UI fails on head f11e7cd5, one test:

tests/ui-ward-management.spec.ts:101 › @mockup Ward Flow command view ›
keeps every rail mode link at the 3rem tap-target floor on a short, narrow viewport
Expected: 8
Received: 0

This is not this PR's failure, and I have not patched it here. Evidence, in order:

  1. This branch changes no Ward Flow file and no test file.git diff --stat origin/main...HEAD is 13 files: four src/app/mockups/therapy-compare-* routes, five src/components/therapy-compare-picker-mockups/* components, one path-prefix flag in mockups-layout-client.tsx, and three generated/config files.
  2. It reproduces on origin/main with none of this branch's code present. I checked out origin/main detached and ran that single test against a local dev server — same failure, same Expected: 8 / Received: 0.
  3. It arrived with 3ab1f3d ("Ward Flow Phase 4, and the prototype becomes its own developer-gated sandbox", Ward Flow Phase 4, and the prototype becomes its own developer-gated sandbox #2373), which is also the last commit to touch tests/ui-ward-management.spec.ts. Advisory UI passed on this PR's head f76f0ab, which predates merging that commit in, and has failed on every head since.

Root cause

Phase 4 made the mode rail responsive. At 320×640 it collapses behind an Open Ward Flow menu button, so getByRole("navigation", { name: "Ward Flow views" }) matches nothing and .all() returns 0. The test still assumes the rail is always rendered at that width.

The property the test guards is fine. I probed the collapsed state directly: the menu button is 48×48, and once opened the nav contains exactly 8 links, every one 271×48. Nothing is under the 3rem floor — only the test's route to the links is out of date.

Proposed patch (verified passing on main, not applied here)

@@ -102,7 +102,17 @@ test.describe("@mockup Ward Flow command view", () => {
await page.setViewportSize({ width: 320, height: 640 });
await gotoWardFlow(page);
+ // Phase 4 collapses the rail behind a menu button at this width, so the nav does not+ // exist until it is opened. The button is itself a tap target and is checked here.+ const menuButton = page.getByRole("button", { name: "Open Ward Flow menu" });+ const menuBox = await menuButton.boundingBox();+ expect(menuBox).not.toBeNull();+ expect(menuBox!.height).toBeGreaterThanOrEqual(48);+ expect(menuBox!.width).toBeGreaterThanOrEqual(48);+ await menuButton.click();+
const nav = page.getByRole("navigation", { name: "Ward Flow views" });
+ await expect(nav).toBeVisible();
const links = await nav.getByRole("link").all();
expect(links.length).toBe(8);
for (const link of links) {

Applied to origin/main: 1 passed (2.6s). It keeps the original assertion and adds coverage of the collapsed control, rather than relaxing the floor — deliberately not the min-h-11 direction AGENTS.md warns against.

I have left it out of this PR because it belongs to Ward Flow, not to four therapy-comparison mockups, and widening this diff to carry someone else's test fix is the wrong shape. Happy to open it as its own one-file PR if that's wanted.

Note on the check name

Advisory UI reads as non-blocking, but it is currently failing the PR required aggregate. Worth confirming that is intended — if it is meant to be advisory, it probably should not gate; if it is meant to gate, the name is misleading. Not something I've changed either way.


Generated by Claude Code

@BigSimmoClaude

Copy link
Copy Markdown
OwnerAuthor

Correction to my previous comment: Advisory UI is not gating this PR. In the same workflow run (32903180554) where Advisory UI failed, PR required completed successfully. The name is accurate and my closing note was wrong.

What misled me: PR required did fail on the previous head 6d12681 — but that was Build failing on the bundle budget, not Advisory UI. With the budget refreshed, the current head f11e7cd5 is:

  • PR requiredsuccess
  • Buildsuccess
  • Static PR checkssuccess
  • Production UI (1/2/3), Production UI criticalsuccess
  • Advisory UI — failure, for the main reason set out above, non-gating

So the Ward Flow test is still worth fixing on main, and the patch above is still verified, but it is not blocking anything here.


Generated by Claude Code

Same generated-file conflict as before; resolved the documented way - take
main's data/repo-awareness-snapshot.json, regenerate. Reviews 2615 -> 2616.
Main also brought in Supabase migrations, CI workflow and schema changes.
Those arrive through the merge and are not part of this PR's own diff.
cursor[bot]
cursorBot approved these changes Aug 25, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. Cursor Bugbot is not running on this head; its prior two findings and related review threads are resolved, and no approval policy requires human review. No reviewers were assigned.

Open in WebView Automation

Sent by Cursor Approval Agent: Pull Request Router and Approver

@BigSimmoClaude

Copy link
Copy Markdown
OwnerAuthor

Withdrawing the Ward Flow patch offer above — it has been fixed on main independently, in e3c4c10b ("test(ward-flow): follow the phone drawer navigation contract", #2376), with the same approach: click Open Ward Flow menu before querying the nav. It arrived here through the sixth main merge, and Advisory UI is now success on head 7fcafbe7.

Nothing further needed on that. Current head is green across the board, including PR required.


Generated by Claude Code

@BigSimmoClaude

Copy link
Copy Markdown
OwnerAuthor

Closing this: it has done its job, and keeping it open is now costing more than it returns.

Why close rather than repair again. The purpose of this PR was to put four tappable directions in front of the owner so one could be chosen. That happened — direction C+ (therapy-compare-perfected) was chosen, and it has now been built for real against the production Therapy Compass surfaces on claude/therapy-compare-tray, with the phone chrome contract, device memory, the stacked phone comparison, and browser proof. The prototypes have no further decision to inform.

Meanwhile this branch cannot stay mergeable. Every merge to main regenerates data/repo-awareness-snapshot.json, and because this PR adds four routes it always rewrites the same region of that file. It has conflicted seven times; each resolution went stale within minutes, and PR mergeability failed three more times tonight alone (bases 517acdc4, f8c810b1, e5d9979d, head unchanged at 7fcafbe7). Each repair is a push that re-triggers required CI on design scratch that 404s in production — exactly the cancellation churn AGENTS.md "Open PR branch sync (anti-churn)" and "PR bundling" exist to cut.

Nothing is lost. The branch claude/therapy-comparison-mobile-design-z0dagr stays on the remote and the full diff remains readable from this closed PR, so all four prototypes can still be reviewed or revived. The chosen direction additionally survives as shipped code rather than scratch.

No verification claim is being withdrawn. The gates recorded in the description ran and passed on head 7fcafbe7; this closes for merge-queue economics, not because anything here was found wrong.

Follow-up work is tracked on the real implementation PR, which carries its own Clinical Governance Preflight because it touches src/lib/*therap* paths — something this design-scratch PR deliberately was not bundled with.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@BigSimmo@claude@cursoragent