Overlap audit (fork, 2026-07-25): experiment-spec and dream exist as real skill directories on disk but are absent from SKILLS_INDEX.md's table entirely. Everything else in the table matches a real directory — no other stale/renamed entries found.
Action:
Add both as index rows (description + "use when").
Wire experiment-spec into the "Skill Relationships" diagram at the bottom of the index — it sits parallel to feature-spec, both downstream of spec-driven-dev (per its own description: "adapted for scientific/ML research projects, instead of feature-spec").
dream is a memory-maintenance skill (not part of the requirements/spec chain) — add to the index table but it doesn't need a diagram edge, same treatment as trainer/session-retrospective.
Overlap audit (fork, 2026-07-25): `experiment-spec` and `dream` exist as real skill directories on disk but are absent from `SKILLS_INDEX.md`'s table entirely. Everything else in the table matches a real directory — no other stale/renamed entries found.
Action:
1. Add both as index rows (description + "use when").
2. Wire `experiment-spec` into the "Skill Relationships" diagram at the bottom of the index — it sits parallel to `feature-spec`, both downstream of `spec-driven-dev` (per its own description: "adapted for scientific/ML research projects, instead of feature-spec").
3. `dream` is a memory-maintenance skill (not part of the requirements/spec chain) — add to the index table but it doesn't need a diagram edge, same treatment as `trainer`/`session-retrospective`.
Fixed in 83b069a, released as v0.8.2 — CI run #27conclusion: success.
Both rows added: experiment-spec next to feature-spec, dream next to trainer.
Where the rows went
Worth recording, because it explains the mechanism rather than the symptom. Both rows were written — they lived on feat/add-dream-skill and feat/experiment-spec-skill, the branches cleaned up in #22. Those branches predate the move of skills into skills/, so they carried dream/SKILL.md at the repo root. The squash-merge landed the SKILL.md (relocated) and dropped the index row. The own-the-task branch carried three index rows the same way; those did survive.
So this was not forgetfulness, it was a merge shape that silently drops part of a change. Adding two rows by hand fixes today only.
The gate
bin/check-index, called from task check, following bin/should-skip-release's precedent — a real script with a real test rather than untested logic inside the Taskfile. It asserts both directions:
every skills/*/SKILL.md has a row (the bug here),
every row names a skill that still exists (the reverse drift, after a delete).
tests/check_index_test.sh covers four cases against temp fixtures: complete index, missing row, stale row, absent index. Mutation-verified on the real repo — deleting the dream row again turns task check red and the report names it:
$ sed -i '/^| `dream`/d' SKILLS_INDEX.md && task check
ERROR: skills/dream has no row in SKILLS_INDEX.md
exit 201
Audit of the other 41 skills: no other rows missing, no stale rows.
Fixed in `83b069a`, released as **v0.8.2** — CI run [#27](https://git.d-ma.be/mathias/skills/actions/runs/4836) `conclusion: success`.
Both rows added: `experiment-spec` next to `feature-spec`, `dream` next to `trainer`.
## Where the rows went
Worth recording, because it explains the mechanism rather than the symptom. Both rows *were* written — they lived on `feat/add-dream-skill` and `feat/experiment-spec-skill`, the branches cleaned up in #22. Those branches predate the move of skills into `skills/`, so they carried `dream/SKILL.md` at the repo root. The squash-merge landed the SKILL.md (relocated) and dropped the index row. The `own-the-task` branch carried three index rows the same way; those did survive.
So this was not forgetfulness, it was a merge shape that silently drops part of a change. Adding two rows by hand fixes today only.
## The gate
`bin/check-index`, called from `task check`, following `bin/should-skip-release`'s precedent — a real script with a real test rather than untested logic inside the Taskfile. It asserts both directions:
- every `skills/*/SKILL.md` has a row (the bug here),
- every row names a skill that still exists (the reverse drift, after a delete).
`tests/check_index_test.sh` covers four cases against temp fixtures: complete index, missing row, stale row, absent index. Mutation-verified on the real repo — deleting the `dream` row again turns `task check` red and the report names it:
```
$ sed -i '/^| `dream`/d' SKILLS_INDEX.md && task check
ERROR: skills/dream has no row in SKILLS_INDEX.md
exit 201
```
Audit of the other 41 skills: no other rows missing, no stale rows.
Correction to the comment above: I closed this one commit early. This issue asked for three things and 83b069a did two — the table rows and (not asked for, but related) the gate. Item 2, the Skill Relationships diagram, was still missing experiment-spec.
Added in b188965: feature-spec and experiment-spec now sit as siblings under spec-driven-dev, with the planning→atdd chain re-indented under feature-spec where it belongs. dream gets no edge, same treatment as trainer and session-retrospective, per item 3.
All three items done now. Issue stays closed.
Correction to the comment above: I closed this one commit early. This issue asked for three things and `83b069a` did two — the table rows and (not asked for, but related) the gate. Item 2, the Skill Relationships diagram, was still missing `experiment-spec`.
Added in `b188965`: `feature-spec` and `experiment-spec` now sit as siblings under `spec-driven-dev`, with the planning→atdd chain re-indented under `feature-spec` where it belongs. `dream` gets no edge, same treatment as `trainer` and `session-retrospective`, per item 3.
All three items done now. Issue stays closed.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Overlap audit (fork, 2026-07-25):
experiment-specanddreamexist as real skill directories on disk but are absent fromSKILLS_INDEX.md's table entirely. Everything else in the table matches a real directory — no other stale/renamed entries found.Action:
experiment-specinto the "Skill Relationships" diagram at the bottom of the index — it sits parallel tofeature-spec, both downstream ofspec-driven-dev(per its own description: "adapted for scientific/ML research projects, instead of feature-spec").dreamis a memory-maintenance skill (not part of the requirements/spec chain) — add to the index table but it doesn't need a diagram edge, same treatment astrainer/session-retrospective.Fixed in
83b069a, released as v0.8.2 — CI run #27conclusion: success.Both rows added:
experiment-specnext tofeature-spec,dreamnext totrainer.Where the rows went
Worth recording, because it explains the mechanism rather than the symptom. Both rows were written — they lived on
feat/add-dream-skillandfeat/experiment-spec-skill, the branches cleaned up in #22. Those branches predate the move of skills intoskills/, so they carrieddream/SKILL.mdat the repo root. The squash-merge landed the SKILL.md (relocated) and dropped the index row. Theown-the-taskbranch carried three index rows the same way; those did survive.So this was not forgetfulness, it was a merge shape that silently drops part of a change. Adding two rows by hand fixes today only.
The gate
bin/check-index, called fromtask check, followingbin/should-skip-release's precedent — a real script with a real test rather than untested logic inside the Taskfile. It asserts both directions:skills/*/SKILL.mdhas a row (the bug here),tests/check_index_test.shcovers four cases against temp fixtures: complete index, missing row, stale row, absent index. Mutation-verified on the real repo — deleting thedreamrow again turnstask checkred and the report names it:Audit of the other 41 skills: no other rows missing, no stale rows.
Correction to the comment above: I closed this one commit early. This issue asked for three things and
83b069adid two — the table rows and (not asked for, but related) the gate. Item 2, the Skill Relationships diagram, was still missingexperiment-spec.Added in
b188965:feature-specandexperiment-specnow sit as siblings underspec-driven-dev, with the planning→atdd chain re-indented underfeature-specwhere it belongs.dreamgets no edge, same treatment astrainerandsession-retrospective, per item 3.All three items done now. Issue stays closed.