ac38b59322
AdapterFactory.Herdrs is keyed by herdr instance id (e.g. "homesrv-claude"), but Reconcile, expire, and rotate all looked adapters up by session.Harness (the harness kind, e.g. "claude"). In production this key never resolves, so every one of those call sites silently no-ops via a bare `continue`: orphaned panes are never killed on restart, expired leases never kill their pane, and rotation exits before it begins. Add Coordinator.adapterFor(taskID, session), matching the fallback already used correctly by refreshSessionHealth (HerdrID, then the lease's HarnessID, then Harness as a last resort), and route all four call sites through it. Regression test TestAdapterResolvedByHerdrIDNotHarnessKind registers an adapter under "homesrv-claude" and leases with Session.Harness == "claude" (reproducing the real key mismatch) and asserts rotation still fires — the existing rotation tests used a keyed-by-nothing fake adapter that matched any lookup string and so masked this bug entirely. AUDIT.md B2.