# CLAUDE.md — GoldenEye 007 PC port This file auto-loads every session. It is the operating manual. The full rules are in `AGENTS.md` (imported below); this file adds the two checklists that were being skipped. @AGENTS.md ## Doc load order — read deliberately, not everything Context is scarce. Load by tier; do not blind-read whole files. - **Tier 0 — always (auto-loaded):** `CLAUDE.md`, `AGENTS.md`. Nothing else auto-loads. - **Tier 1 — every session start:** `docs/HANDOFF.md` (current state + next task + environment — a rolling local working file; may be absent in a fresh clone, in which case read the README "Status" section instead) — read fully; `docs/porting-notes.md` (recurring bug classes) — skim the section headers, read the classes relevant to the task. - **Tier 2 — on demand only, do NOT read start-to-finish:** - `docs/internals.md` — architecture / RSP deltas / phased plan (§1–§10). Read the section you need. - Findings: look up via `docs/dev/findings-index.csv` (label, one-liner, status), then read only the specific `## Dxx` entry in `docs/dev/findings.md` (multi-pass labels like D202/D176(a) have large sections — grep within or offset/limit). Never linear-read. - `docs/dev/HANDOFF-ARCHIVE.md` — prior-session narrative (M-2…). Only when tracing the history of one fix. - `docs/dev-process.md` — before dispatching a subagent (also Tier 1 if you may dispatch this session). ## Session preflight — do this in your FIRST few tool calls, before acting Having a concrete "next step" from the handoff is NOT license to skip this. 1. Read the Tier 1 docs: `docs/HANDOFF.md` (immediate task, standing procedure, environment gotchas — or the README "Status" section if it is absent) and `docs/porting-notes.md` (recurring bug classes — you will re-derive catalogued bugs if you don't). 2. Skim the README "Status" section for where the project stands. 3. If you may dispatch a subagent this session, read `docs/dev-process.md` NOW — not at dispatch time. ## Dispatch preflight — EVERY Agent/Task spawn, no exceptions A subagent brief is INVALID and must not be sent unless it contains all of: - **FILES YOU MAY TOUCH** — disjoint from every other running agent. - **BUDGET** — `<= N build->run->inspect cycles` or `~M min`. Tight for cheap-class bugs (truncations, off-by-ones); more room for structural ones (matrix handedness, format specs). Escalate the default as the project hardens. - **ON EXPIRY** — stop, revert temp probes, write up what you have in `docs/dev/findings.md` §F with an explicit confidence rating. A good write-up of a half-solved bug is a deliverable, not a failure. - **KNOWN-GOOD / RULED OUT**, **CONSTRAINTS** (no game-logic changes; ABI/layout/format only; `#ifdef PORT`; documented in §F), **REPORT** shape. - **VERIFY** — the exact `tools_pc/verify.sh` / probe invocation that proves the task done, or an explicit "runtime verification impossible here; a human must run X". - Instruction to read `docs/porting-notes.md` first and append any generalisable quirk to it. Full template: `docs/dev-process.md` -> "Investigation-brief template". ## Verification cadence (integrator / overseer) - **Per merged patch:** single-frame `GE_PCDUMP` capture diffed against the committed golden baseline. Cheap. Do NOT gate every patch on a long soak. - **Per batch / integration checkpoint:** one 60s `-level_09` crash-free run. - Subagents on small disjoint subsystems (input, audio, saves, converters) don't run the game — the overseer verifies. ## Local Qwen dispatch (cost-free, data-local worker) A local Qwen3.8-27B is wired in via the `delegate-local` MCP server (see `C:\Users\james\Source\Repos\20260902-qwen38claudepair`). Use it as a *subagent whose compute runs on-machine* for scoped, checkable work — the lead still owns judgment, planning, and the verification gate. - **Tools:** `local_backend_status()` (run once before first dispatch), `list_local_agents()`, `delegate_to_local_agent(agent_name, task, workdir, max_turns?, max_tokens?)`. - **Workers** (`~/.claude/agents/`): `repo-mapper` (read-only ingest/map), `mechanical-coder`, `test-writer`, `triage` (read-only root-cause + patch), `refactor-bot`. - **Dispatch when ALL hold:** narrow blast radius, clear spec, output checkable by a build/test/diff. Keep on Claude: ABI/handedness/format reasoning, novel debugging, anything you can't cheaply verify. - **Backend reality:** ~1 inference slot, slow per token — dispatch **sequentially**, `max_tokens` ~4–8K, treat as batch work. Needs the LiteLLM proxy (`litellm/run.ps1`) + Unsloth Studio both up. - **Corrected 2026-09-04:** the "worker's shell is `cmd.exe`, no grep/cat" claim that used to live here was WRONG — verified directly against the harness's own `_run_bash` (`C:\Users\james\tools\claude-code-delegate-local`): `grep`, `sed`, `cat`, `ls`, `head`, pipes, and `grep -rn` all work fine (Git-for-Windows/MSYS2 toolchain on PATH). The stale claim, baked into 4 of 5 local agent `.md` files, caused a real dispatch (a multi-file cross-referencing investigation) to burn its whole turn budget full-`read_file`-ing files instead of grepping them, hit the turn limit, and returned nothing. Agent files fixed. Always still spot-check the returned artifact against the real files before integrating — the 27B will confidently fabricate if a read fails, independent of this. - **Landing delegate output on its own branch: branch off `main` explicitly, never off whatever's currently checked out.** (2026-09-12: a delegate's docs-only writeup got `git branch ` where `` happened to sit on top of an unrelated in-flight feature branch — the resulting PR silently carried that branch's whole history, including code that had since been reverted, and it only surfaced as a CI failure (a stale env-probe-index check), not from inspecting the diff.) Before creating the branch, confirm you're branching from `main`/`origin/main` HEAD, not from `HEAD` of the session's current checkout; after pushing, sanity-check with `git log --oneline main..` that it contains only the commit(s) the delegate's task actually produced. - Fits the **dispatch preflight** rules above (FILES / BUDGET / ON EXPIRY / CONSTRAINTS / REPORT) — write the `task` string to that shape.