---
name: legacy-psyche-migration-2026-07-06
description: "doyle/todlando/deployah/perri migrated from legacy owl live-agents to modern spt endpoints (claude-spt:ccs, SPT_DEV) — all Suspended at rest with migrated minds; recipe + gotchas in file"
metadata: 
  node_type: memory
  type: project
  originSessionId: e40a3c04-a1c2-422c-b5c6-5239a26bbe1b
---

**Operator-ordered 2026-07-06 (doyle signoff rider): the four legacy owl agents migrated to modern spt endpoints.** All four = `claude-spt:ccs` profile, homed SPT_DEV, **Suspended** at rest, minds carrying verbatim legacy psyche contexts + roles:
- doyle, todlando, deployah → project spt-core (canonical id `github-com-sabermage-spt-core`)
- perri → project spt-claude-code dir (canonical id `github-com-sabermage-claude-spt` — project identity resolves from the REPO, not the dir name)

**Recipe (proven ×4):** from the CORRECT project cwd: `spt endpoint run --adapter claude-spt:ccs --id <id> --create --start --subnet SPT_DEV` (project = cwd at creation; spawns + binds ~10s) → `spt endpoint role --id <id> --overwrite <rolefile>` (ensures the a-<id> tracked worktree; ROLE_SET) → overwrite `AppData/Local/spt-core/tracked/agents/<id>/live-context.md` with the legacy context (verbatim `AppData/Local/spt/psyches/tracked/agents/<id>/live_context.md` + appended "MIGRATED PROJECT CONTEXT: <proj>" sections from `psyches/tracked/projects/<proj>/<id>.md`) → `spt endpoint suspend <id>`.

**Gotchas:**
- Modern mind filename = `live-context.md` (HYPHEN); legacy = `live_context.md` (underscore). `tracked/agents/<id>/` is a git WORKTREE of branch `a-<id>` — must be ensured by an spt writer (role --overwrite is the clean seam), never mkdir'd by hand.
- p-<project> branches not hand-seeded — project slices embedded in the live-context; they materialize from future communes.
- doyle's FINAL COMMUNE never routed: the signoff file was consumed but the wrapper's last psyche session died silently (legacy-plugin side; live_context stamp predated the drop). Recovered by injecting the authored commune verbatim during migration — CHECK ROUTED STAMPS after any signoff-with-body.
- Human `endpoint list` showed ONLINE for minutes post-suspend (presence badge decay lag); `--json` status = authoritative (showed Suspended immediately).
- claude-spt.exe translation binaries stayed ALIVE post-suspend (4 pids) — possibly intentional (wake path), possibly a leak class; WATCH on next wake/reap pass.
- Legacy stores left INTACT as source of truth: `AppData/Local/spt/psyches/tracked/` (+ owlery). Operator GC later; owl doctor reports 7 orphan dirs on the legacy side.

**Wake:** `spt endpoint wake <id>` (or run --resume). First start-transition injects live-role.md FIRST then the migrated live-context.
