Files
dotfiles/claude/skills/audit/SKILL.md
T
David F GliddenandClaude Opus 4.7 119285cf43 claude: back up custom skills, memory, and settings with symlink pattern
The ~/.claude/ directory was previously local-only — a machine wipe
would have lost the accumulated memory, custom skills, and settings.
This commit moves the durable parts into dotfiles with the same
symlink-to-home pattern used for CLAUDE.md, PENDING.md, REVIEWED.md,
and L2-BOOTSTRAP.md.

Preserved (symlinked from ~/.claude/* into here):
  skills/audit/              — thinking-folder drift scanner
  skills/symmetria/          — practice-of-return discipline
  skills/vault-update-people/ — Obsidian People-file maintainer
  skills/wake-up/            — session restoration
  skills/wrap-up/            — session state capture
  memory/                    — 55+ memory files (MEMORY.md, sessions,
                               ledgers, project state, feedback, etc.)
  settings/settings.json     — user preferences (hooks, flags, no secrets)

Deliberately NOT backed up:
  settings.local.json   — contains operational secrets (HF_TOKEN,
                           SSH password in expect scripts); by naming
                           convention, *.local.* is not synced.
                           Needs separate review and probable rotation.
  sessions/, history.jsonl, caches, telemetry — ephemeral
  plugins/, marketplace skills and agents — reinstallable

The working copies at ~/.claude/skills/* and
~/.claude/projects/-Users-davidglidden/memory are symlinks into this
directory, so every write flows here automatically. install.sh
recreates the symlinks on a fresh machine.

FOLLOW-ON (flagged, not in this commit):
  settings.local.json contains a HuggingFace token and an SSH password
  as plaintext strings inside allowed Bash command patterns. These
  should be rotated and moved to secure storage (keychain / pass /
  env file outside the settings file).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 13:51:04 +02:00

170 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: audit
description: Scan thinking folder and Obsidian vault inbox for organizational drift — loose files, missing metadata, stale items, broken references. Reports only; never acts without approval.
argument-hint: "[thinking|inbox] [--include-deferred]"
---
# Collections Audit
Scan the thinking folder and/or Obsidian vault inbox for organizational drift. Produce a structured report of what's out of place. Propose fixes but **never execute without explicit steward approval**.
## Paths
- **Thinking folder**: `/Users/davidglidden/_Dev/CapableMind-AI/docs/thinking/David/`
- **Thinking README** (living index): `/Users/davidglidden/_Dev/CapableMind-AI/docs/thinking/README.md`
- **CURATION-MAP**: `/Users/davidglidden/_Dev/CapableMind-AI/docs/thinking/David/l2-constitution/CURATION-MAP.md`
- **Vault root**: `/Users/davidglidden/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch/`
- **Vault inbox**: `00a. _inbox/` (relative to vault root)
- **Vault People**: `03. People/` (relative to vault root)
## Scope
Parse `$ARGUMENTS` to determine scope:
- No argument or `all` → audit both targets
- `thinking` → thinking folder only
- `inbox` → vault inbox only
## Procedure
### 1. Thinking Folder Audit
Run these checks **in parallel** where possible. For frontmatter checks, read only the first 5 lines of each file (check for `---` opener), never the full content.
#### a. Loose files at root
Glob for `*.md`, `*.json`, `*.yaml` directly in the thinking folder (not recursive). Exclude `CLAUDE.md` (belongs at root by convention). Every other file is a MOVE issue.
Propose destinations using naming heuristics:
- `amendment-*` → `amendments/`
- `substrate-governance-*` → `l2-constitution/` (governance inquiry content)
- `l2-design-*` → `l2-constitution/`
- `D.Glidden - The Chamber*` → `chamber/` or `reviews/`
- `entities.json`, `mempalace.yaml` → flag for steward decision (utility files, no obvious home)
#### b. Missing YAML frontmatter
For every `.md` file across all subdirectories, check if line 1 is `---`. This is a binary check — has frontmatter or doesn't. Report as aggregate per subfolder: "N of M files in `l2-constitution/` lack frontmatter."
Do NOT propose specific fields — that's an editorial decision for the steward.
#### c. CURATION-MAP inventory drift
Read CURATION-MAP.md. Extract any file count statistics (§6 or similar). Compare against actual filesystem counts for `l2-constitution/` and its subdirectories. Report mismatches.
Also check: are there files on disk in `l2-constitution/` that appear in no CURATION-MAP section? These are "uncharted" files.
#### d. CURATION-MAP §4 — unresolved ambiguous items
Read CURATION-MAP.md §4 (Ambiguous Status). List any items still awaiting steward classification. These are AMBIGUOUS issues — the audit surfaces them but cannot resolve them.
#### e. Broken cross-references
Grep for markdown links `[...](...)` that reference `.md` files within the thinking folder. For each, check if the target file exists (resolving relative paths from the source file's location). Report broken links with source file and line number.
Keep this check scoped to `l2-constitution/` (the largest and most cross-referenced subfolder) to stay fast. Expand scope in v2 if needed.
#### f. README.md drift
Read `thinking/README.md`. Find David's section. Extract the file counts from subsection headings (pattern: `### Category (Path/) — N files`). Compare against actual file counts in each subdirectory. Report mismatches.
### 2. Vault Inbox Audit
Run these checks **in parallel**. Read only frontmatter (first 10 lines) of each inbox file.
#### a. Empty or placeholder titles
Read frontmatter of each `.md` file in the inbox. Flag files where the `title:` field is:
- Empty or whitespace-only
- `---`, `***`, `----`, or similar punctuation-only
- A single character or bracket expression like `[pattern template]`
These are MISSING issues — the file can't be triaged without a usable title.
#### b. Person-name detection
Identify files whose `title:` looks like a person or business name: 2–3 capitalized words, no markdown characters, no common sentence starters. Cross-reference against filenames in `03. People/`.
- Match found in People → skip (already handled)
- No match → MOVE issue: "Looks like a contact — propose creating People file or routing to `03. People/`"
#### c. Staleness by age
Extract `created` or `draft_created` date from frontmatter. Bucket files by age:
- 30–90 days
- 90–180 days
- 180+ days
Report as **aggregate** with count per bucket: "54 files older than 180 days (Sept 2025 Drafts migration batch)." Do NOT list every file individually — at 67+ files that's noise, not signal.
#### d. Missing type classification
Count how many inbox files have a `type:` field in frontmatter. Report the aggregate: "0 of 67 files have type classification."
If the count is low, note the proposed convention for steward consideration:
> Proposed `type:` values: `contact`, `fragment`, `prompt`, `session`, `reference`, `pedagogy`, `admin`
This is INFO severity — a convention proposal, not an error.
### 3. Compile Report
Structure the output exactly as follows:
```
## Audit Report — [date]
**Scope:** [thinking | inbox | both]
**Files scanned:** X thinking, Y inbox
**Issues found:** N
### MOVE (wrong location)
[one line per file: path → proposed destination]
### MISSING (metadata gaps)
[aggregates per subfolder for frontmatter; individual items for titles]
### STALE (drift / aging)
[CURATION-MAP mismatches, README drift, inbox age buckets]
### AMBIGUOUS (needs steward decision)
[CURATION-MAP §4 items, utility files with no obvious home]
### BROKEN (integrity)
[broken cross-references: source file:line → missing target]
### INFO
[type classification proposal, other non-actionable observations]
```
Omit any section that has zero items. End with:
```
Approve all proposed moves? Or review individually?
```
### 4. Handle Steward Response
**If "approve all":**
- Execute MOVE items: use `git mv` for thinking folder files (inside git repo), regular `mv` for vault files
- After moves in thinking folder: update `thinking/README.md` per the CLAUDE.md convention (scan filesystem, update file counts in subsection headings)
- Do NOT batch-approve AMBIGUOUS items — those always require individual decisions
**If "review individually":**
- Present each MOVE item one at a time
- For each: steward says apply / skip
- After all reviewed, execute approved moves and update README
**After execution:**
- Report what was moved and what was skipped
- Note any AMBIGUOUS items still unresolved
## Important constraints
- **Never move files without approval.** This is a reporting tool first.
- **Never read full file contents** for the audit scan — frontmatter and filenames only. Content is the steward's domain.
- **Respect the iCloud path.** The vault path contains spaces. Always quote paths in Bash commands.
- **Git awareness.** The thinking folder is inside a git repo. Use `git mv` for moves there. The vault is NOT in a git repo.
- **Don't propose content changes.** Missing frontmatter is reported; what fields to add is the steward's decision.
- **Aggregate where possible.** 67 individually listed inbox files is not a useful report. Bucket and count.
- **CURATION-MAP is governance.** Treat §4 items as the steward's decision queue, not as problems to solve.