status-audit

/status-audit — Story Status Reconciliation

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "status-audit" with this command: npx skills add michael-menard/monorepo/michael-menard-monorepo-status-audit

/status-audit — Story Status Reconciliation

CRITICAL EXECUTION RULE: Do NOT spawn sub-agents (Task tool) for this skill. Call all MCP tools and Bash commands directly in the main conversation. Sub-agents do not have reliable access to the knowledge-base MCP server.

Usage

/status-audit [--fix] [--epic=platform] [--story=STORY-ID]

Examples:

/status-audit # Full audit of all platform stories (report only) /status-audit --fix # Audit + apply all KB corrections /status-audit --story=KBAR-0040 # Audit a single story /status-audit --epic=platform --fix # Audit + fix all platform stories

What It Does

Performs a five-part audit and optionally fixes all detected issues:

Section What It Checks

A. Legacy Stage Directories Stories that still exist in old-style stage dirs (backlog/ , in-progress/ , etc.) — flags for migration to flat stories/ layout

B. KB State Mismatch Stories in flat stories/ on disk vs KB state field — flags stories on disk not in KB, and vice versa

C. Orphaned Worktrees Active git worktree list entries vs worktree_list_active KB records

D. Deferred KB Writes DEFERRED-KB-WRITES.yaml files on disk that were never processed

E. Artifact Sync Key artifacts on disk (CHECKPOINT.yaml , EVIDENCE.yaml , QA-VERIFY.yaml ) vs KB artifact records

Source of truth: The KB is the authoritative source for story state. Filesystem directories are for artifact storage only — status is never inferred from directory location.

Execution Steps

Step 0 — Parse Arguments

Extract --fix flag, --epic (default: platform ), --story (optional single story filter).

Step 1 — Git Worktree Scan

Run via Bash tool:

git worktree list

Parse output into a map: { path → branch } . Extract story IDs from branch names matching pattern story/STORY-ID or story/STORY-ID-* .

Example:

/repo/tree/story/KBAR-0050 e2d613a4 [story/KBAR-0050] → KBAR-0050 /repo/tree/story/WINT-1120 56f9fede [story/WINT-1120] → WINT-1120

Store as GIT_WORKTREES : { storyId → { path, branch, commit } }

Step 2 — KB Worktree Query

Call MCP tool directly:

mcp__knowledge-base__worktree_list_active({}) → KB_WORKTREES: { storyId → { path, branch, status } }

If tool fails, set KB_WORKTREES = {} and note in output.

Step 3 — Filesystem Scan

Scan A: Flat stories/ directories (canonical)

Run via Bash tool to find all story directories in the flat layout:

find plans/future/platform -type d
-regextype posix-extended
-regex '.*/stories/[A-Z]+-[0-9]+$'

For each path found, extract:

  • story_id : last path segment (e.g., KBAR-0040 )

  • story_path : full path (e.g., plans/future/platform/wint/stories/KBAR-0040 )

Store as DISK_STORIES : { storyId → { story_path } }

Scan B: Legacy stage directories (flag for migration)

Run via Bash tool to find stories still in old-style stage directories:

find plans/future/platform -mindepth 2 -maxdepth 5 -type d
-regextype posix-extended
-regex '.*/(backlog|created|elaboration|ready-to-work|in-progress|needs-code-review|failed-code-review|ready-for-qa|failed-qa|UAT|completed)/[A-Z]+-[0-9]+$'

For each path found, extract:

  • story_id : last path segment

  • stage_dir : parent directory name

  • legacy_path : full path

Store as LEGACY_STORIES : { storyId → { legacy_path, stage_dir } } . These are flagged in Section A.

If --story flag is set, filter both scans to just that story ID.

Step 4 — KB Story Query

Call MCP tool directly:

mcp__knowledge-base__kb_list_stories({ epic: "platform", limit: 100 })

If result has 100 stories (may be paginated), call again with offset: 100 , repeat until exhausted.

Store as KB_STORIES : { storyId → { state, story_dir, priority, blocked } }

Step 5 — Deferred KB Writes Scan

Run via Bash tool:

find plans/future/platform -name "DEFERRED-KB-WRITES.yaml" -type f

For each file found, read the first few lines to extract:

  • deferred_at timestamp

  • reason

  • story_id from the writes array

Store as DEFERRED_WRITES : [ { file_path, story_id, deferred_at, reason } ]

Step 6 — Artifact Scan

For each story in DISK_STORIES , check for key artifact files in the canonical path and its _implementation/ subdirectory:

For each canonical_path:

ls {canonical_path}/ ls {canonical_path}/_implementation/ 2>/dev/null

Key artifacts to flag if present on disk:

  • CHECKPOINT.yaml or _implementation/CHECKPOINT.yaml

  • EVIDENCE.yaml or _implementation/EVIDENCE.yaml

  • QA-VERIFY.yaml or _implementation/QA-VERIFY.yaml

  • DEFERRED-KB-WRITES.yaml (already in Step 5, skip here)

Then check KB artifacts:

mcp__knowledge-base__kb_list_artifacts({ story_id: STORY_ID })

Only call kb_list_artifacts for stories that have at least one key artifact on disk and are in DISK_STORIES . Batch these calls — do not call for every story.

Compare disk artifacts vs KB artifact artifact_type values:

  • CHECKPOINT.yaml → type checkpoint

  • EVIDENCE.yaml → type evidence

  • QA-VERIFY.yaml → type qa_gate

Flag stories where disk artifacts exist but no corresponding KB artifact type is found.

Step 7 — Build Report

Section A: Legacy Stage Directories

For each story in LEGACY_STORIES :

STORY-ID legacy: in-progress/STORY-ID → needs migration to stories/STORY-ID/

Stories in legacy directories should be manually moved to {FEATURE_DIR}/stories/{STORY_ID}/ and the KB updated accordingly. Run with --fix to update KB state from these directories.

Section B: KB State Mismatches

Compare DISK_STORIES vs KB_STORIES :

  • If story is in DISK_STORIES but NOT in KB_STORIES : flag as Not in KB (on disk, not registered)

  • If story is in KB_STORIES but NOT in DISK_STORIES : flag as No directory (in KB, no story directory)

  • If KB_STORIES[id].story_dir doesn't match the path in DISK_STORIES : flag as Path mismatch

Also include stories from LEGACY_STORIES in KB comparisons — their KB state is preserved but directory needs migration.

Also flag if KB_STORIES[id].story_dir doesn't match the canonical path on disk.

Section C: Orphaned Worktrees

Cross-reference GIT_WORKTREES vs KB_WORKTREES :

  • In git but not in KB → Untracked worktree (git has it, KB doesn't know)

  • In KB but not in git → Orphaned KB record (KB thinks it's active, git worktree is gone)

  • In both → OK (show as healthy)

Section D: Deferred KB Writes

List all DEFERRED-KB-WRITES.yaml files with their age (current date minus deferred_at ) and story ID.

Section E: Artifact Sync Gaps

List stories where disk artifacts exist but KB has no corresponding artifact record.

Step 8 — Output Format

═══════════════════════════════════════════════════════ STATUS AUDIT — plans/future/platform Scanned: {N} stories on disk | {M} in KB | {date} ═══════════════════════════════════════════════════════

── A. LEGACY STAGE DIRECTORIES ({count} stories) ─────────────────────

KBAR-0040 legacy: in-progress/KBAR-0040 → migrate to stories/KBAR-0040/ LNGG-0030 legacy: UAT/LNGG-0030 → migrate to stories/LNGG-0030/ ...

── B. KB STATE MISMATCHES ({count} stories) ─────────────────────────

Story Disk Dir Disk State KB State Action ────────── ────────────── ──────────── ───────────── ────────────── INFR-0040 UAT/ in_qa ready_for_qa UPDATE NEEDED KBAR-0020 UAT/ in_qa ready UPDATE NEEDED LNGG-0040 UAT/ in_qa (not in KB) INSERT NEEDED WINT-0110 UAT/ in_qa ready UPDATE NEEDED ...

── C. WORKTREES ({git_count} in git, {kb_count} in KB) ──────────────

Story Git Worktree KB Record Status ────────── ────────────────────────────── ────────── ─────────────── KBAR-0050 tree/story/KBAR-0050 ✗ missing UNTRACKED WINT-1120 tree/story/WINT-1120 ✗ missing UNTRACKED WKFL-007 tree/story/WKFL-007 ✗ missing UNTRACKED ...

── D. DEFERRED KB WRITES ({count} files) ────────────────────────────

File Story Age Reason ──────────────────────────────────────────────── ───────── ────── ────────────────────────── UAT/INFR-0040/DEFERRED-KB-WRITES.yaml INFR-0040 10 days KB tools unavailable in PM ...

── E. ARTIFACT SYNC GAPS ({count} stories) ──────────────────────────

Story Disk Artifacts KB Artifacts Missing in KB ────────── ──────────────────────────────── ───────────── ───────────────── INFR-0041 CHECKPOINT, EVIDENCE, QA-VERIFY (none) checkpoint, evidence, qa_gate AUDT-0010 CHECKPOINT, EVIDENCE checkpoint evidence ...

═══════════════════════════════════════════════════════ SUMMARY Legacy stage dirs: {A_count} stories need migration KB state mismatches: {B_count} (updates needed) Orphaned worktrees: {C_count} Deferred writes: {D_count} files Artifact gaps: {E_count} stories

{if --fix} Applying fixes... {else} Run with --fix to apply all KB corrections. {/if} ═══════════════════════════════════════════════════════

Step 9 — Apply Fixes (only if --fix flag is set)

Apply in this order:

Fix A: Legacy Stage Directories

Legacy stage directories cannot be auto-migrated (requires moving files and potentially active work). Flag as:

⚠ LEGACY directories require manual migration: For each story: mv {legacy_path} {FEATURE_DIR}/stories/{STORY_ID}/ Then update KB story_dir: kb_update_story({ story_id, story_dir: "{FEATURE_DIR}/stories/{STORY_ID}" })

List each legacy path for easy access.

Fix B: KB State + story_dir Updates

For each mismatch in Section B:

mcp__knowledge-base__kb_update_story({ story_id: STORY_ID, state: kb_expected_state, story_dir: canonical_path })

For stories not in KB (INSERT NEEDED): use kb_get_story first to confirm absence, then use the appropriate insert tool. If no insert tool is available, flag for manual action.

Fix C: Worktree Records

For UNTRACKED (in git, not in KB): these are legitimate active worktrees — do NOT auto-register since we don't know if they're truly in-progress or abandoned. Instead, flag them with instructions:

⚠ UNTRACKED worktrees require manual verification: Run /wt-status to see full worktree health, then use /wt-finish or /wt-cleanup to resolve.

For ORPHANED KB records (in KB but not in git): call mcp__knowledge-base__worktree_mark_complete for each.

Fix D: Deferred Writes

These cannot be auto-applied here because the write payloads vary. Instead, output:

⚠ DEFERRED-KB-WRITES.yaml files must be processed manually: Run /kb-compress or read each file and apply writes via kb_update_story.

List each file path for easy access.

Fix E: Artifact Sync

Artifact content sync is out of scope for auto-fix (requires reading and re-uploading full file content). Flag as:

⚠ Artifact gaps noted. To sync, run /qa-verify-story or /checkpoint for each affected story, which will re-write artifacts to KB as part of normal workflow.

Step 10 — Post-Fix Summary

After applying fixes, show:

Fix Results: ✓ {N} KB story_dir paths corrected ✓ {N} orphaned worktree KB records marked complete ⚠ {N} legacy stage directories need manual migration ⚠ {N} untracked worktrees need manual review (/wt-status) ⚠ {N} deferred write files need manual processing ⚠ {N} artifact gaps need re-verification

Edge Cases

Scenario Behavior

Legacy story in UAT/ or other stage dir Flagged in Section A as needing migration to stories/ layout

Nested story dir (e.g., stories/KBAR-0020/KBAR-0020 ) Skip inner dir — it's an artifact folder

Story in git worktree but no active work / clearly abandoned Flag for manual review, don't auto-remove

kb_list_stories pagination Keep calling with increasing offset until total exhausted

Story on disk but --story filter doesn't match Skip

KB state is completed but story is in a legacy stage dir KB wins — KB is the authoritative source. Flag dir for migration.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

review

No summary provided by upstream source.

Repository SourceNeeds Review
General

review-draft-story

No summary provided by upstream source.

Repository SourceNeeds Review
General

wt-list

No summary provided by upstream source.

Repository SourceNeeds Review
General

plans

No summary provided by upstream source.

Repository SourceNeeds Review