← ClaudeAtlas

id-driftlisted

The infra-delivery RECURRING drift sentinel (post-spine) — a read-only forever drift check that re-runs the empty-plan seam (`tofu plan == ∅`) on a CADENCE to compare reality vs the merged IaC. It runs the active profile's `infra_binding.plan` as a read-only `tofu plan`, reads the per-resource plan delta from the canonical contractless parser `foundry_plan_model.parse_actions_detail`, and frames an empty plan as DRIFT-FREE / a non-empty plan as DRIFT — naming the diverging resources. It records its observation as a `.foundry/`-partitioned STEP-REPORT NOTE (`.foundry/id-drift-report`), NOT contract-keyed walk-evidence; there is no `argocd app diff` live read. ADVISORY craft — drift is SURFACED and handed to id-sync/id-rollback, NEVER auto-reconciled.
lukasrepublic/agentic-foundry · ★ 1 · AI & Automation · score 67
Install: claude install-skill lukasrepublic/agentic-foundry
# id-drift — the recurring drift sentinel (infra-delivery, post-spine) The `infra-delivery` step sequence (a documented procedure this skill family forms — no workflow engine or state-machine file ships) drives an infra change → merge. After that spine, `id-drift` is the **recurring** step — a forever **drift sentinel** that re-runs the **empty-plan seam** (`tofu plan == ∅`) on a **cadence** (continuous and/or scheduled) to compare **reality vs the merged IaC**. It is the cadence-generalization of `id-baseline`: `id-baseline` proves drift-free **once** (at adoption); `id-drift` proves it **forever** (on every tick). The empty plan doubles as the forever drift check. To detect drift it runs a **read-only `tofu plan`** — the active stack profile's **`infra_binding.plan`** command. It then reads the **per-resource plan delta** from the BUILT canonical parser **`foundry_plan_model.parse_actions_detail`** and frames the result: - **The empty-plan seam (`tofu plan == ∅`, `actions_detail == []`) ⇒ DRIFT-FREE** — reality equals the merged IaC. - **The DRIFT (non-empty-plan) branch (`actions_detail != []`) ⇒ DRIFT — surface the diverging resources** (the `parse_actions_detail` per-resource `actions_detail`) and **hand them to `id-sync`/`id-rollback`** (the reconcile/revert consumers). It **NEVER auto-reconciles** — detection is read-only; the operator (via `id-sync`/`id-rollback`) decides the fix. The same empty-plan predicate `id-baseline`/`id-import` accept on is REUSED — not