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>
36 lines
1.6 KiB
Markdown
36 lines
1.6 KiB
Markdown
---
|
|
name: lifecycle-deprecate-node
|
|
risk_class: config_mutation
|
|
inputs: [node_name, replacement_node_or_reason]
|
|
verification: "homelab node <name> relations — 'affected by' must be empty before completing"
|
|
docs_update_checklist: [doc_page_deprecation_note]
|
|
transition: "active -> deprecated"
|
|
---
|
|
|
|
# Lifecycle: deprecate a node
|
|
|
|
Per [oikos/ontology.yaml](../../../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](../lifecycle-destroy-node/SKILL.md).
|