Skip to content

Local-only follow-ups after #2253 / #2266 / #2268 — browser gates, orphaned commits, dead reconcile branches, Dev Drive #2270

Description

@BigSimmo

Task for a local Claude Code session on the Windows workstation. Everything here is blocked by the cloud container specifically, not by approval or cost. Written 2026-08-22 from a web session; main at dea32b8d. Every claim below was verified in that session unless it says otherwise.

Work A1 → A4 in order. Part B is out of scope for this issue.


Context — what just landed, so it isn't redone

Ledger is current as of dea32b8d. Pending inbox is zero.


A1 — Recover or discard the two commits that exist only on the workstation

Why local-only: these objects are not on origin and are unreachable from any container. Verified: git cat-file -t 970d28d25Not a valid object name; git ls-remote --heads origin claude/phone-dictionary-header-9180ee returns nothing.

Per the original Dictionary task brief: 970d28d25 fixes the mockup's fit-measurement code to probe intrinsic width; e8e7371b5 merges origin/main. Branch claude/phone-dictionary-header-9180ee.

git log --oneline -5 claude/phone-dictionary-header-9180ee
git show --stat 970d28d25

Then either cherry-pick onto a fresh branch off origin/main and open a PR — mockups are exempt from the wiring and reachability gates but are still typechecked and still weighed by check:bundle-budget against the mockups baseline, so run npm run verify:pr-localor state explicitly that it no longer applies and delete the branch. Do not silently drop it; this is the last unresolved item from that task brief.

Related and still open: the Codex review comment on #2241 (comment_id=3831169288) that 970d28d25 was written to address.

A2 — Run the browser gates no cloud session has been able to run

  • verify:phone-chrome green — 133 contract tests passed, focused browser 12 passed
  • verify:ui green — 473 passed, 2 skipped, 0 failed (19.7m)

Why local-only: the container has Chromium 1194 while Playwright 1.62.1 pins 1234, and the network policy blocks cdn.playwright.dev, so npx playwright install chromium returns 403. Verified this session:

Playwright browser revision check FAILED (not-installed): Playwright expects chromium
revision 1234, but no matching install was found at /opt/pw-browsers
(found instead: chromium-1194)

#2253 therefore shipped without the full Chromium gate. Two suites ran through the config's documented PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH escape hatch against the mismatched revision (ui-dictionary 7 passed, ui-mode-nav-density 48 passed) and CI Production UI passed — but verify:ui in full and verify:phone-chrome have never run against the merged Dictionary work.

npm ci --include=dev
npm run check:installed-lock-parity
npm run check:playwright-browser-revision # must report OK before the rest means anything
npm run ensure # use the URL it prints; never assume localhost:3000
npm run verify:phone-chrome
npm run verify:ui

Report the decisive "N passed" line, not the exit code. verify:ui exits 75 with a DATABASE_HEAVY_RUN_ADMISSION_BUSY marker under lock contention — that is "blocked, retry", not "red" — and exit 0 alone is not proof.

Measurement trap #XPY409: .phone-sticky-header-stack is position: fixed and mounts collapsed. Wait ~1200–1400 ms for settled height before measuring or screenshotting phone chrome.

A failure here is a real regression in merged work. Fix it with the smallest change and open a PR; do not weaken the test. In particular do not drop production tap targets from min-h-12 to min-h-11 — that reintroduces a known ui-smoke flake and is forbidden in AGENTS.md.

A3 — Delete the four dead reconcile branches

  • All four deleted, and issues:reconcile --dry-run no longer refuses

Why it matters: they blocked ledger reconciliation for five days and will block the next one identically. assertSafeRemoteReconciliation refuses to start while a branch whose name indicates an in-flight reconcile exists on origin (#EH9VA6).

Already established in #2268 — no need to re-derive. For each of the four, every docs/outstanding-issues-inbox request UUID on the branch is already on main, in either the pending or applied/ directory, so nothing queued is lost. Their only content absent from main was two branch-review records, rescued in #2268. The remaining branch-only files are five sources main deleted deliberately in #2211 (use-upload-desktop-layout.ts, service-group-nav.tsx, therapy-compass/icons.tsx, two upload tests). None had an open PR as of 2026-08-22.

git fetch --prune origin
forbin claude/issues-reconcile-2026-08-19 \
claude/ledger-reconcile-2026-08-21 \
claude/ledger-reconcile-issues-c1trbj \
claude/rag-r0-reconcile-inbox;do
gh pr list --head "$b" --state open # must be empty for eachdoneforbin claude/issues-reconcile-2026-08-19 \
claude/ledger-reconcile-2026-08-21 \
claude/ledger-reconcile-issues-c1trbj \
claude/rag-r0-reconcile-inbox;do
git push origin --delete "$b"done
npm run issues:reconcile -- --dry-run # must NOT print the unmerged-branch refusal

Deletion is irreversible. If any of the four has grown an open PR since 2026-08-22, stop and report instead of deleting.

A4 — Reclaim the Dev Drive (#6GW95D, P3)

  • Inventory taken (208 checkouts across 8 roots) — removal pass halted and fully reverted by owner decision; cleanup deferred

The ledger's own update is the point: the scope is far wider than .claude/worktrees. An accidental npx vitest run from C:/Users/joshs enumerated 253 copies of just two test files across the home directory — 253 separate checkouts of this repository across at least six roots (.codex/worktrees, .gemini/antigravity/worktrees, .copilot/repos/copilot-worktrees, .local/share/opencode/worktree, Documents/Codex/..., and more). The capacity emergency is resolved; the inventory and safe orphan cleanup are not.

Inventory first, delete second. Only remove a checkout with no unpushed commits and no uncommitted changes. Read docs/branch-cleanup-guide.md first. Treat any checkout you cannot prove is clean as one to keep.


Part B — explicitly NOT this session

Each is possible on the workstation but is its own piece of work with its own approval. Tracked already in docs/outstanding-issues.md; listed here only so the boundary is unambiguous.

ItemWhy it is separate
#1YPV51 (P1)The medication interaction lexicon is clinically unreviewed despite #318 recording otherwise. Owner's clinical judgement — no agent does this.
#1K6T35 (P2)Point-in-time recovery is OFF on the live project (pitr_enabled false, measured 2026-08-19). RPO up to ~24 h on 2,851 documents / 70,120 chunks, and it blocks the "restore point before any mutating phase" rule that #056/#057 depend on. Dashboard/billing decision.
#CCZ4HB (P1)Review-bot spending cap reached; three PRs merged 2026-08-22 with no automated review. Billing decision.
#056, #057, #102Supabase windows. check:drift is red with 19 findings, re-measured unchanged 2026-08-18; schema.sql is the stale side for at least seven. Merging under supabase/migrations/** deploys to the live clinical database within seconds.
#001, #231, #018Provider-backed live evaluation; costs money and needs explicit approval.
#S4K1GA, #71NT23, #75JA0PPhysical iPhone Safari and installed-PWA acceptance. Chromium and Playwright WebKit are not the iOS engine.
#QSHHGK (P2)Bundle-budget baseline has no owner or trigger. Note: npm run build reuses a cached .next, so rm -rf .next before measuring or the number is stale.

Standing rules

  • Never report a gate as passing that was not run. Paste the decisive line; exit 0 alone is not proof, and a reused gate receipt is reported as "reused receipt", never as a fresh run.
  • Providers need explicit confirmation — OpenAI, Supabase, GitHub, hosted CI — including indirectly through scripts and release gates.
  • Flag the task before editing anything under src/lib/rag/**, clinical-search, retrieval-selection, ranking-config, answer-ranking, the eval harness or the golden fixture, even for a rename.
  • Run npm run format and commit the result before any normal push. It is in neither test, typecheck nor lint.
  • Never assume localhost:3000. Use npm run ensure.
  • The ledger is append-only from feature branches: npm run issues:add|update|done; only a dedicated fresh-base branch runs npm run issues:reconcile.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions