---
name: feedback_monthly_drift_audit
description: Monthly doc/skill drift-audit method — investigator-codebase ground-truth-from-disk scan → em main patch; gotchas.md has no self-count
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 221b3d94-ec6c-44c2-bd62-334ac0dd8e85
---

Monthly cadence audit (cron ngày 1, e.g. next 2026-07-01): delegate the drift SCAN to **investigator-codebase** (read-only) — establish ground truth from CODE not docs (count migration files excl `*.Designer.cs`/`*ModelSnapshot.cs`; highest gotcha `#N`; test count), then scan skills + key docs for stale count cites, return `file:line | claimed | actual | fix`. **Em main patches** (docs = em main domain; implementers KHÔNG touch docs).

**Why:** "incremented-per-session" counts (mig/table/test/gotcha) drift optimistically. S44 (2026-06-01) found `40→42` mig, `84/59/55/47→91` tables, `130/111→154` test, `52/49→56` gotcha stale across 6 files (CLAUDE.md root + docs/CLAUDE.md + ef-core/dependency-audit skills + schema-diagram + database-guide). The 3 "hard-to-fake" numbers (mig-file-count / gotcha-#N / git-sha) stay correct; narrative counts rot.

**How to apply:** (1) ground-truth FROM DISK first, never trust prior doc. (2) **gotchas.md header carries NO self-count** → every gotcha-count is a downstream COPY; patching one cite won't self-heal others → patch each cite. (3) schema-diagram full per-table ERD for new modules = big; extend the migration INDEX table (compact rows) + flag the detailed-§ gap EXPLICIT as deferred backlog (không silent) rather than balloon the audit into ERD-writing. (4) historical session-scoped counts (e.g. "S40 confirmed 130 test") = LEAVE (accurate as history; rewriting history violates the audit rule). (5) docs-only → all `.md` → CI-skip per gotcha #41 (no cicd-monitor needed). Links [[feedback_status_handoff_tiering]] (re-ground định kỳ từ code).
