Files
oikos/.agents/skills/lifecycle-deprecate-node/SKILL.md
dtoro 5c5016b3c7 docs: reshape runbooks into .agents/skills/<name>/SKILL.md (phase 4)
Problem: runbooks are agent-executable procedures but lived at the repo root,
separate from the other agent instruction now under .agents/.

Change:
- Move runbooks/<name>.md -> .agents/skills/<name>/SKILL.md (folder per skill,
  matching the wiki-hq skills layout). Frontmatter (name, risk_class, inputs,
  verification, docs_update_checklist, transition) preserved.
- Rewrite links (inbound from plans; between-skill siblings) via the move map.
- Update prose references in AGENTS.md, HERMES.md, .agents/OIKOS.md, and the
  operations schema; fix a pre-existing stale link to operations/commands.md.

No code consumed runbooks/ by path, so nothing else changes.

Verification: all SKILL.md frontmatter parses with valid risk_class; every
lifecycle transition resolves to an oikos/ontology.yaml state; broken-link
count 127 -> 126 (fixed one, introduced none).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:39:31 +02:00

1.6 KiB

name, risk_class, inputs, verification, docs_update_checklist, transition
name risk_class inputs verification docs_update_checklist transition
lifecycle-deprecate-node config_mutation
node_name
replacement_node_or_reason
homelab node <name> relations — 'affected by' must be empty before completing
doc_page_deprecation_note
active -> deprecated

Lifecycle: deprecate a node

Per oikos/ontology.yaml: a node keeps running but takes no new dependents. Completion condition: zero remaining inbound depends-on/routes-to edges — this is a hard gate, not a suggestion; oikos/policy.yaml lifecycle_overrides.deprecated.refuse lists new-inbound-edges as refused going forward.

  1. Set state: deprecated on the node.
  2. homelab node <name> relations — read affected_by. Every entry there is something still relying on this node.
  3. Migrate or retire each dependent one at a time (point its backend/ config_repo/ingress route elsewhere, or deprecate it too if it's being retired alongside).
  4. Re-run homelab node <name> relations after each dependent is moved. The transition to destroyed is only safe once affected_by is empty — check this every time, don't assume from memory.
  5. Note the deprecation on the doc page: reason, replacement (if any), date.

If step 2 shows dependents you didn't expect, stop and investigate before proceeding — that's exactly the kind of drift the Week-3 detector will catch automatically, but until then this manual check is the gate.

Next (once affected_by is empty): lifecycle-destroy-node.md.