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
for b in 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 each
done

for b in 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.

Item Why 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, #102 Supabase 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, #018 Provider-backed live evaluation; costs money and needs explicit approval.
#S4K1GA, #71NT23, #75JA0P Physical 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.

Activity

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

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