Files
skills/.tasks/2026-05-05-00833-bootstrap-skill-deps-check.md

54 lines
6.9 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.
# bootstrap-skill-deps-check
## Goal
Refactor `project-bootstrap` Step 5.6 (single-skill `superpowers` plugin detector) into a single, generic **Step 5.6 "Skill dependencies check"** that walks the canonical CLAUDE.md template, looks up each trigger line against a `trigger → fulfiller` map, detects what's missing on the host, and prints one chat-only block with prioritized install commands. Replaces the per-skill `Step 5.X` shape (which doesn't scale: every new canonical trigger would need its own mirror section). Subsumes the deferred `[bootstrap-recommend-projects-meta]` task — that task was the seed of this generalization. Bumps `project-bootstrap` 1.6.0 → 1.7.0 (MINOR — adds capability without breaking existing flow).
## Key files
- `skills/project-bootstrap/SKILL.md` — replace Step 5.6 contents, bump `version:` 1.6.0 → 1.7.0
- `skills/project-bootstrap/README.md` — Workflow Step 5.6 description + (optional) See also
- `skills/project-bootstrap/assets/CLAUDE.md.template` — source of truth for the trigger list (no change here, but the new step reads from it)
- `skills/project-bootstrap/assets/skill-deps-map.md` (or `.json` / inline in SKILL.md) — the `trigger → fulfiller` table; new file or inline section, decide during impl
- `.wiki/concepts/bootstrap-skill-deps-check.md` — design rationale (why generic over per-skill mirrors, kind: skill vs plugin, MCP server caveat)
- `.tasks/STATUS.md` — supersede `[bootstrap-recommend-projects-meta]`; mark this task active when started
- `dist/project-bootstrap.skill` — rebuild after changes
## Decisions log
- 2026-05-05: chose generic Step 5.6 over `Step 5.7 mirror per missing-skill` shape. Rationale: `bootstrap-recommend-projects-meta` (deferred task) + the analogous gap for `setup-interns` / `using-interns` / `pulling-before-work` / `project-discipline` would all need their own mirror sections — that's a 5×Step-5.X explosion. Single generic step reads the template (already canonical), maps each trigger to its fulfiller, prints one block.
- 2026-05-05: scope of detection is the canonical CLAUDE.md template's trigger lines. Don't try to detect arbitrary user-added lines — the project-bootstrap contract is "we own canonical triggers; non-canonical lines are user's responsibility".
- 2026-05-05: differentiate `kind: skill` (install via `bash scripts/install.sh <name>`) from `kind: plugin` (install via `/plugin install <name>@<marketplace>`). The install-command line in the chat block differs between the two; one mapping table that flags `kind` keeps the recommendation block honest.
- 2026-05-05: MCP-server-backed skills (`using-context7`, `using-projects-meta`, `using-interns`) — only check the `using-X` policy skill. If MCP isn't registered, the `using-X` Prerequisites pointer fires `setup-X` at first use; bootstrap doesn't need to duplicate that detection. Keeps the Step simple.
- 2026-05-05: hard rule from current Step 5.6 (`never auto-install`) **carries over** verbatim. Slash-commands aren't callable from a skill; silently mutating `~/.claude/skills/` is overreach. Recommendation only — chat block with copy-pasteable commands.
## Open questions
- [ ] Storage of the map: inline in SKILL.md (simplest, single source of truth), or separate `assets/skill-deps-map.md` / `.json` (cleaner, programmatically parseable)? Inline probably fine for MVP — the table is short.
- [ ] When the user pinned a non-canonical platform line (e.g. `we're on Linux` on a Windows host), the platform-line check is already handled in Step 5 idempotent merge. Step 5.6 should ignore the platform line entirely — same dependency (`active-platform` skill) regardless of which platform.
- [ ] How to handle a CLAUDE.md the user has *removed* canonical triggers from on purpose? Step 5.6 reads from `CLAUDE.md` (the actual project file), not from `template`, so removed lines silently skip the check — correct behavior. Verify in implementation.
- [ ] Optional polish: print a one-line "✅ all skill dependencies satisfied" when nothing is missing, to make the silent-success case visible. Probably worth it; very low cost.
## Completed steps
- [x] 2026-05-05: read `skills/project-bootstrap/SKILL.md` + README to confirm scope (Step 5.6 located lines 349-389; README Workflow item 5).
- [x] 2026-05-05: wrote `.wiki/concepts/bootstrap-skill-deps-check.md` design page (rationale, skill/plugin kind, MCP-server caveat, source-of-truth invariant).
- [x] 2026-05-05: replaced SKILL.md Step 5.6 in place with generic `trigger → fulfiller` map (9 rows) + algorithm + recommendation block. Hard rule "never auto-install" preserved verbatim. ✅ all-satisfied case prints one line.
- [x] 2026-05-05: bumped SKILL.md `version:` 1.6.0 → 1.7.0 (MINOR per project-discipline Rule 3 — adds capability, absorbs prior single-skill detector cleanly).
- [x] 2026-05-05: updated README.md Workflow Step 5.6 description to match the new shape.
- [x] 2026-05-05: rebuilt `dist/project-bootstrap.skill` via `scripts/build.sh`, reinstalled to `~/.claude/skills/project-bootstrap/` via `scripts/install.sh`; verified installed `version: 1.7.0`.
- [x] 2026-05-05: updated `.wiki/index.md` (added concept entry) and `.wiki/log.md` (ingest + decision lines).
- [x] 2026-05-05: closed sibling `[bootstrap-recommend-projects-meta]` 🟢 in same commit (closed by absorption — note in commit message).
## Notes
- Triggers in current template (2026-05-05) and their fulfillers — initial seed for the map:
| Trigger | Fulfiller | Kind | Install |
|---|---|---|---|
| `talk like a caveman` | `caveman` | skill | `bash scripts/install.sh caveman` |
| `use superpowers` | `superpowers@claude-plugins-official` | plugin | `/plugin install superpowers@claude-plugins-official` |
| `use project wiki` | `using-wiki` | skill | `bash scripts/install.sh using-wiki` |
| `use task management system` | `using-tasks` | skill | `bash scripts/install.sh using-tasks` |
| `check across all projects` | `using-projects-meta` | skill | `bash scripts/install.sh using-projects-meta` |
| `pull remote before work` | `pulling-before-work` | skill | `bash scripts/install.sh pulling-before-work` |
| `follow project discipline` | `project-discipline` | skill | `bash scripts/install.sh project-discipline` |
| `delegate to interns when allowed` | `using-interns` | skill | `bash scripts/install.sh using-interns` |
| `we're on Windows` / `we're on Linux` / `we're on macOS` | `active-platform` | skill | `bash scripts/install.sh active-platform` |
- Detection paths: `~/.claude/skills/<name>/SKILL.md` for skills; `~/.claude/plugins/installed_plugins.json` (`plugins.<name>`) for plugins. Both paths identical on Windows / Linux / macOS under `~`.
- Once shipped, close `[bootstrap-recommend-projects-meta]` with a note pointing at the commit that absorbed it.
- Versioning per project-discipline Rule 3: 1.6.0 → 1.7.0 (MINOR — adds capability, doesn't break the existing Step-5.6 superpowers detector since it absorbs it cleanly).