Operator cleanup: retire server-native agent services #667
Labels
No labels
burndown-2026-06
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#667
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Operator boundary
Commits
c311353and10753b4remove the tracked server-native agent surfaces and establish the warded-only server profile. The engineer role did not mutate live hosts.Operator action
Kai or an Ops run follows the committed server-native agent retirement runbook once on kai-server and ser8. The runbook owns the exact Ansible and systemd commands.
Evidence to post
~/.mcporter/mcporter.jsonis a regular file on both hosts.The operator stops and posts the failing command and output if any check fails.
Commit
0bc67b3extends the same operator pass with the staggered host-convergence timers.fleet-converge.timerat:00targeting onlykai-server.:30targetingser8,kai-server.The committed retirement runbook now includes timer and lingering verification. In addition to the original cleanup evidence, the Ops run should post the next timer timestamp from each host, confirm
Linger=yeson both, and post the lastfleet-converge.serviceresult. The engineer role did not apply this to either live host.Ops applied and verified the ser8 half on 2026-07-28.
Completed live state:
agentic-os-pin-convergeservice, timer, and 331-line script are absent on ser8.Linger=yes, Ward reportsv0.630.0, and~/.mcporter/mcporter.jsonis a regular file on ser8.o2rformula andcoilyco-flight-deck/otel-a2a-relay-clitap are absent on both ser8 and kai-server.origin/main, and reached canonical commit8a4c116without touching ser8s dirty operator checkout.Landed fixes include controller-local self-targeting, SSH config isolation, bundled credential-helper rollout, in-process registry read-token reminting, Homebrew formula-before-tap retirement ordering, and a Ward-auditable service-owned converge checkout. Infrastructure lint and secret-scan workflows passed for
8a4c116. All agentic-os workflows passed for credential commit18eb13de.Current wall:
apt-baselinewithMissing sudo password.sudo -n -lconfirms that userkaihas only command-scoped NOPASSWD grants, not unattended Ansible become. Neither host has an OS-levelopsaccount.docs/FEATURES.md, so Ops did not widen privilege without Kai choosing that security boundary.Safe rollback:
fleet-converge.timerto prevent hourly failure alerts.Next human decision: authorize a one-time attended kai-server bootstrap that grants the convergence controller passwordless become, or direct the scheduled controller to run an explicitly unprivileged role set. After that decision, Ops can re-enable ser8 at
:30and post one successful two-host service result here. This issue remains open.Ops completed the ser8 privileged-drift alert path on 2026-07-28.
Landed behavior:
ansible/playbooks/sync.ymlnow owns separatescheduledandprivilegedrole inventories.Live evidence:
fleet-converge.timeris enabled at:30with the next hourly tick scheduled.Result=successandExecMainStatus=0.ser8=currentandkai-server=pending.0600, and all three Telegram cache files are present and non-empty.[fleet-converge: privileged apply pending] targets=kai-serverfollowed byward exec ansible-sync apply hosts=kai-server ask_pass.8eb845e.The initial live pass exposed two roles that were password-free but unsuitable for hourly control.
dev-harnesshit private-registry authorization drift, and Homebrew lost the long-running SSH channel. Ops removed both, along with the other general host-convergence roles, from the scheduled set instead of masking those failures.Kai runs
ward exec ansible-sync apply hosts=kai-server ask_passwhen ready. The next ser8 tick will observe the new marker, clear its owned pending state, and send the green recovery line. This issue remains open until that attended kai-server apply and recovery tick are verified.