# Plan: delete all 16 compatibility aliases

## Evidence (verified 2026-07-10, two independent methods)

1. **Graph** (graphify, 356 files): every alias dir = 3-node island, **zero
   cross-boundary edges**. No structural inbound from anything.
2. **Grep** (string refs the graph can't see): manifests auto-discover
   (`"skills": "./skills/"` — no enumeration); all remaining refs are prose
   except `course-plan-import`, which has functional refs (below).

Deletion is reversible: git history keeps every stub.

## Changes

### 1. Delete 16 skill dirs
`skills/{image-search,image-generator,accessibility-audit,canvas-setup,content-fix,course-fit-quiz,course-readiness-check,course-review,knowledge,lecture-support,notebooklm-notebook,notebooklm-podcast,notebooklm-video,remediation-brief,templates,course-plan-import}/`

### 2. Retarget course-plan-import's functional refs → course-build
- `scripts/alignment_skill.py:572` — `"Add one or run /course-plan-import to scaffold."` → `/course-build`
- `scripts/alignment_skill.py:646` — `claude://invoke/course-plan-import` link + `/course-plan-import` text → `course-build`
- `CLAUDE.md` routing: "If alignment reports 0 CLOs → next step is `course-plan-import`" (2 spots) → `course-build`; also drop the "Use SDO JD template"-style alias mentions ONLY if they name deleted aliases (check; SDO lines reference standards, likely untouched)
- Verify `course-build`'s SKILL.md description covers plan-import vocabulary ("import syllabus", "planning map") — CLAUDE.md Build & Import examples already do; add to course-build frontmatter description only if absent.
- Check `skills/alignment/SKILL.md` + `skills/needs-analysis/SKILL.md` course-plan-import mentions → retarget to course-build.

### 3. Clean prose mentions of deleted aliases (one-liners)
Files (from grep): `skills/course-audit/SKILL.md` (accessibility-audit, course-review, course-readiness-check), `skills/course-concierge/SKILL.md` (canvas-setup, remediation-brief), `skills/plugin-feedback/SKILL.md` (canvas-setup), `skills/bulk-edit/SKILL.md` (content-fix, remediation-brief), `skills/quiz-generator/SKILL.md` (course-fit-quiz), `skills/instructor-guide/SKILL.md` (lecture-support), `skills/notebooklm/SKILL.md` (lecture-support), `skills/resource-discovery/SKILL.md` (notebooklm-*), `skills/syllabus-generator/SKILL.md` (course-readiness-check), `scripts/setup_env.py:4` docstring (canvas-setup → course-concierge).
Rule: delete or retarget the mention only — surgical, no adjacent edits.

### 4. Docs/counts
- `README.md`: delete §Compatibility Aliases (L181); L7 "27 Primary Skills + 16 Compatibility Aliases" → "27 Skills"
- `.claude-plugin/plugin.json` description: "26 skills (+16 aliases)" → "27 skills" (NOTE: current text says 26 — count `ls skills/` after deletion and use the real number; description must stay ≤500 chars)
- `.codex-plugin/plugin.json`: check description for alias mention; sync if present
- `CLAUDE.md` §Overview "27 primary skills plus compatibility aliases" + §Skills Reference "27 primary skills + 16 compatibility aliases" → real count, drop alias mention
- `AGENTS.md`: grep for alias mentions; sync

### 5. Tests
- Grep tests/ for alias names first (`grep -rl 'image-search\|course-plan-import\|...' tests/`); update any that enumerate skill dirs or assert alias counts. If none reference aliases, no test changes.

## Acceptance
- `for a in <16 names>; do grep -rn "$a" --include='*.py' --include='*.md' --include='*.json' . | grep -v CHANGELOG | grep -v graphify-out | grep -v docs/plan-; done` → empty (CHANGELOG history + this plan exempt)
- `ls skills/ | wc -l` = 27
- Full suite green: `.venv/bin/python3 -m pytest tests/ -q`
- Plugin description ≤500 chars (enterprise validator cap)
- No live tests needed (no Canvas-facing behavior change) — mock suite only

## Out of scope
`backlog` (separate bounded investigation), `resource-discovery` (kept per product decision).

## Process
Branch `chore/delete-compat-aliases`, single commit
`chore(skills): delete 16 compatibility aliases (graph+grep verified orphans)`,
Sonnet coder, parent reviews (diff read, suite, acceptance greps), gate-merge.
`chore` → no forced release; rides next tag.
