# HANDOFF.md **Last updated:** 2026-05-01 (session 8 — cleaned stale TODOs, wrote issue cleanup plan) **Active task:** None. Pick next from `.ai/TODO.md` or roadmap. **Just-updated:** stale local TODOs were removed and an issue cleanup plan was added. ## Where this session ended Cleanup follow-up completed: - `.ai/TODO.md`: removed resolved pytest-xdist "Up next" item, removed resolved claim-role-gate item, updated frontend lint count to 24 warnings. - Added `docs/plans/2026-05-01-issue-cleanup-plan.md` with tracker hygiene and implementation order. - Tried to close Gitea #127 via API, but this environment has no Gitea token; API returned `401 token is required`. ## Resume point — DO THIS NEXT If tracker auth is available, close #127 and close/archive stale PR #124; rewrite #66 to template packs / one-click install only. Then pick from the plan: low-risk maintenance first, then #130/#128 pilot UX friction. ## Environment notes (carry-forward) - This code-server LXC has bun + docker but no native `python`/`node`/`npm`. Use `docker exec resolutionflow_{backend,frontend} …` for all build/test commands. Documented in `.ai/PROJECT_CONTEXT.md`. - Headless Chromium (used by `/qa` `/browse`) needs `CONTAINER=1` in the env that launches the browse server, otherwise it aborts at `sandbox/linux/services/credentials.cc` due to the LXC namespace constraint. The browse server is currently running with that env set; restarting it manually requires `CONTAINER=1 $B status` again. - Code-server's `/etc/hosts` has `100.64.78.44 docker-01` so the headless browser can resolve the bake-in `VITE_API_URL`. Persistent — no need to re-add unless the container is rebuilt. - Multi-head alembic state on `main` (heads `070`, `c0f3a4b7e91d`, `024`) is pre-existing. Use `alembic upgrade heads` (plural) if `head` complains.