Imported from SavinRazvan/agent-colony (
skills/drift-audit/SKILL.md). Install upstream withnpx skills add SavinRazvan/agent-colony --skill drift-audit. Copyright stays with the author.
Drift audit
Use ASD-STE100: .ai_infra/docs/operations/asd-ste100-prose.md
Goal
Detect operational workflow drift and a falsifiable goal/doctrine pulse:
- plan ↔ tracker ↔ session-pointer incoherence
- DRIFT-004b session Board vs export; DRIFT-009 dual-write; DRIFT-010 board vs PRs
- DRIFT-011
.cursor/agentsbasenames == eight live kit agent ids - DRIFT-011b (consumer) extra integrator agents — advisory only
- DRIFT-012
.local/plans/snapshot-only underboard_only(no live/current plan SSOT in that dir) - DRIFT-013 git index must not track
.local/, secrets, or.venv/(consumer + kit-dev) - DRIFT-014 token-efficiency anchor in agent cards (profile-aware)
- DRIFT-015 (kit-dev) plugin+workspace rule basename dup — WARN
- DRIFT-016 thin-index § headings for skills on disk (profile-aware skip)
- DRIFT-017 (kit-dev) audit independence WARN when Schema-1
Commissioned-Byis missing/placeholder or equalsAudited-By - Prose goal pulse: board Acceptance/Notes vs plan pointers vs
AGENTS.md/ agent cards (flag gaps; hand off — do not rewrite architecture)
Does not replace auditor (CHK-* scorecard) or verifier.
When
- Substantive implementer slice closure (recommended)
- After plans / board Acceptance / agent doctrine docs change
- Optional pre-review drift pass before PR workflow
- When
project_ssot.enabled— every pass should include board Status evidence
Entry checklist (goal pulse)
- Board (when enabled):
project api-readythenproject entry(orproject status+ scopedlist --status in_progress) — read Acceptance / Notes on In progress cards. - Plan pointers:
.local/index-and-planning/current/plan.md(or board card body as SSOT) — Current focus / goals. - Doctrine:
AGENTS.mdskills/agents table vs.cursor/agents/*.md(script: DRIFT-011). - Docs freshness vs goals: note Probable if AGENTS.md / IMPLEMENTATION-STATUS look stale relative to Current focus (prose only).
Steps
- Board first (when enabled):
python3 -m agent_colony project api-readythenproject entry(orproject status+project list --status in_progress) — cite board Status in artifacts. Optionally refresh the read-only snapshot:python3 -m agent_colony project export(never writes Status). - Script:
python3 -m agent_colony drift validate --directory .(ormake drift-validate). On consumer app projects, use--profile consumer. Include DRIFT-004b / DRIFT-009 / DRIFT-010 / DRIFT-011 / DRIFT-012 / DRIFT-013 when kit-dev / board_only as applicable (ADR-007/008/010). Consumers always get DRIFT-013 + DRIFT-011b onconsumer/consumer-boardprofiles. - Capture profile, check IDs, severities, and details from output.
- Add prose Goal pulse section in drift-audit.md (board/plan/AGENTS gaps). Fuzzy “vision mismatch” stays Probable — not CI.
- Write artifacts under
.local/workflow-artifacts/drift/only. - Board Exit: Shippable drift-pass (PR citation /
[AUDIT]/ P0|P1) →handoff --next verifier --to in_reviewbefore Done (CLI EXIT_VALIDATION without hop / allow-skip). Hygiene chores may →donewith--agent drift-guard. For Confirmed dual-write or roster gaps, Notes on offending card or Ready handoff to board/implementer — do not auto-editplan.md,work-tracker.md, orsession-pointer.md. - Print handoff line with
item_idwhen applicable.
Evidence contract
Universal canon: evidence-first skill · evidence-first.md. Drift-specific labels:
| Label | Meaning |
|---|---|
| Confirmed | Script output + file path cited |
| Probable | Inference from trackers/docs; label explicitly |
| Unknown | Not verifiable from repo |
Artifact frontmatter (both files)
Audit-Schema: 1
Audit-Scope: kit
Named-Target: <repo or profile under review>
Commissioned-By: maintainer
Audit-Type: workflow-drift-pass
Audited-By: drift-guard
Action-By: <name>
GitHub-User: <handle>
Date: <ISO-8601>
Profile: kit-dev | consumer
Command: python3 -m agent_colony drift validate --directory . [--profile consumer]
Include ## Accountability summary and mandatory ## Audit limits. P0/P1 script findings mirrored in drift-todos.md need owner, due_slice, consequence_if_ignored, status (missing/open → Schema-1 FAIL), category, paths, recommendation, and evidence when stamped Audit-Schema: 1.
Consumer DRIFT-005: When IMPLEMENTATION-STATUS.md is absent (normal on plugin installs), DRIFT-005 PASSes (skip). A FAIL on the missing file is a kit false positive on older payloads — not a consumer app defect. See consumer-quickstart.md § Drift on consumer apps.
drift-audit.md
Summary, per-check table (ID, severity, pass/fail, detail, evidence path), Goal pulse subsection, verdict (GO / blocked on P0).
drift-todos.md
Open findings with id, severity, evidence, recommendation, status (open | fixed | deferred | accepted_divergence).
Severity handling
| Severity | Action |
|---|---|
| P0 | Block prepare-pr handoff until fixed or accepted with rationale |
| P1 | Fix in same slice when possible |
| P2 | Backlog in drift-todos |
Overlap (do NOT duplicate)
Governance/debrand → check_governance_consistency.py. Agent/registry deep structure → integrate validate. Architecture / CHK-* → auditor. Claims → verifier. Agent doc/canvas content parity vs machine truth → auditor + agent-surface-parity (not this skill).
Exit criteria
Script run captured; both artifacts written; P0 count explicit; Goal pulse noted; handoff names next agent if blocked.
Peers (debugger)
SG rows in debugger publish packs are standards gaps, not DRIFT findings — open DRIFT only when doctrine/docs drift is confirmed by script output.