aim-content-drift — Sanctum Content-Drift Detection

SkillFiles & storage

Detect content drift of an operator's scaffolded sanctum files (BOND,

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the aim-content-drift skill

What this skill tells your AI

The instructions your AI receives, as published by hidden-history/ai-memory in _ai-memory/pov/skills/aim-content-drift/SKILL.md and read by ahel’s review.

When an operator's already-scaffolded sanctum files drift from the evolving reference templates, the operator must see a recommended add/remove with rationale — never a silent overwrite, never a hard-default to stale content. This generalizes the langfuse-guard version-drift pattern (recorded reference, offline detection, surface→human-decides, never auto-apply) from version drift to content drift.

The deterministic mechanics (unit parsing, anchored-fingerprint comparison, classification, ack bookkeeping) live in scripts/content_drift.py, invoked by path. This file decides when to run and how to read the recommendations.

v1 is detect + acknowledge, and is READ-ONLY for sanctum content — it never writes a sanctum file or a template. Applying a recommendation is the operator's manual edit (an --apply path is deferred). The only files the skill writes are its own per-project ack sidecar (via --ack / --prune-ack).

Known v1 limitation (the ORPHAN remove heuristic). ORPHAN — the only class that recommends removing a section — fires only when the operator's section is a pristine scaffold remnant: the reference framing kept verbatim with each {placeholder} resolved to a short value (a name, a date, a language). The remnant test is a bounded heuristic, so a short, value-shaped fill that still preserves the full reference framing can read as pristine even if the operator meant it as content. This is safe by design: detect is read-only and the operator always decides, so a borderline ORPHAN is only ever a suggestion to consider removing, never an automatic edit. Longer or punctuation-joined fills exceed the bound and classify CUSTOMIZED (kept). A confirming --apply path is deferred to v1.1.

When to use

  • A session-start sanctum drift check, or after the reference templates change.
  • The operator asks whether their sanctum is current with the standard.

Steps

  1. Resolve the sanctum path: {project-root}/_ai-memory/sanctum/{agent_id}/.

  2. Detect (DEFAULT — read-only): python3 scripts/content_drift.py <sanctum-path> Reports batched, severity-ranked recommendations (HIGH first), each with its class (MISSING / SUPERSEDED / ORPHAN), rationale, and an --ack pointer. The notify is a cheap count + pointer (index-not-log); add --show-diff for the full previewable detail.

  3. Read the recommendations. Each is explainable (which reference unit changed and why) and previewable. CUSTOMIZED operator content is never recommended for removal — only reference-owned units are ever surfaced. Nothing changes until the operator chooses; apply by hand.

  4. Acknowledge intentional divergence (writes the ack sidecar only): python3 scripts/content_drift.py <sanctum-path> --ack LORE.md::system-architecture An ack suppresses that recommendation until the reference unit changes again. Drop entries whose unit no longer drifts with --prune-ack.

  5. Verify: re-run detect. Acknowledged units no longer surface; a clean sanctum reports no recommendations.

References

  • The section/unit schema for the sanctum family: references/unit-schema.md
  • The MATCH/MISSING/SUPERSEDED/ORPHAN/CUSTOMIZED decision rule: references/classification-rule.md

Signals

GitHub stars
41
Forks
5
Last commit
Sep 2026
Advanced
Item type
skill
Key
aim-content-drift
Source
github.com/hidden-history/ai-memory