# Handoff — Codex **Sprint goal focus:** Well-specified, self-contained bugs with tight file pointers. Low ambiguity — the spec is in each Vikunja ticket. Read the full task body in Vikunja (project 4) before starting each — `get_task_details `. Mark each **Doing** on start, and **commit green work referencing the task #** when done. ## Tasks ### #266 — Retire `pm.repoRoot()`, unify session workspace-root to ONE source The workspace root is plumbed through THREE sources that can diverge (boot-static `ProjectMemoryService.repoRoot()`, per-session `boundWorkspace?.workspaceRoot`, `sessionConfig.workspace?.workspaceRoot`). A stopgap already made `sessionWorkspaceRoot(sessionId)` read the bound value; this task RETIRES the vestigial boot root. Collapse to canonical `boundWorkspace?.workspaceRoot` (invariant #9, replay-safe). ⚠️ The shared L3 namespace `project:` is used by ProjectMemoryService AND ArchitectContradictionChecker AND the concept compiler — all must switch together or memory keys drift. Pointers: `ServerModule.kt`, `memory/ProjectMemoryService.kt`, `BootWorkspace.kt`, `Main.kt`, `workspace/WorkspaceResolver.kt`, `git/GitRunBranchTransport.kt`. **Do this before #189.** ### #189 — Server repo-map scan uses cwd, not session workspace_root Symptom of the same #266 divergence (`repoRoot()` vs `bindWorkspace`). Read #266 first — its canonical-root fix may absorb this. **Confirm #189 still needs its own change after #266 lands**; if not, close it referencing #266. ### #191 — Resolve/validate generated manifest dependencies before plan lock or scaffold accept A scaffolded manifest (e.g. package.json) needs its deps resolvable / a `setup` step (`npm ci`) before the build gate can pass — otherwise the gate fires into absent `node_modules`. **Land this EARLY** — Sonnet's #263/#267 live run depends on it going green. ### #264 — Review loop can't converge The review loop loops back `changes_requested` indefinitely with scope drift. Bound iterations + anchor the reviewer to the fixed DoD so it can't keep expanding scope. Kill the drift. ### #40 — Build-gate: toolchain-aware command resolution A flat command alias can't serve two toolchains (e.g. npm vs gradle). Resolve build commands per detected toolchain. Related to #263 (the build gate) and #191.