d90f0b87ff
The mneme-fts5 campaign stalled with @testdesigner reporting DIR NOT FOUND for a build dir that demonstrably existed: the dir was on boltzmann (grind host) while the agent was executing on orca. The ticket and the path were both correct; the doc simply never said which host each agent runs on, so "put it in /tmp/bullpen-build/<slug>/" read as one shared filesystem. - new §2.1: the `.runtime` file decides the HOST — absent/claude => runs on noether and has sic (cross-host reach); `opencode` => runs on LURKER_OC_HOST (default orca), sandboxed, sees only that host and auto-rejects external dirs. Flipping .runtime silently relocates an agent. Includes the current placement table, the rule (build dir must live where the test-writer AND grinder execute), the exact failure signature, and the drop-in recipe for moving an opencode nick to another host. - host-setup caveats learned installing opencode 1.18.4 on boltzmann: symlink the binary into /usr/local/bin (the installer only edits ~/.bashrc, which non-interactive sic never sources); install oc-run + oc-final-text.py; use a MINIMAL provider-only config — a copied full config declares MCP servers (degater/hertz/hub) that block startup on a host that lacks them, which presents as a model hang. Bisect model vs harness with a direct 3-token /chat/completions call. oc-run blocks on an open stdin (add < /dev/null by hand; harmless under systemd). - §3.1 pre-flight: verify the dir from BOTH hosts before posting a ticket. - unwedging table: two new rows (wrong-host DIR NOT FOUND; opencode hang from absent MCP). - checklist: host boundary is now the first item. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EWpfhDgYNA21tETDP9ueBE