refactor(pipeline): ignore specs/plans via project-local docs/.gitignore

Replace the global ~/.config/git/ignore mechanism with a committed,
per-project docs/.gitignore whose entries `specs/` and `plans/` are
relative to docs/. The ignore now travels with each repo instead of
living in the user's global excludes.

specify (Step 3) and planner (intro) create docs/.gitignore on demand
if a project has not set it up yet, so a spec/plan can never become
committable. conventions.md § File layout is the single source; the
onboarding fragment tells a new project to set it up.

The global ~/.config/git/ignore block is removed separately (it is
outside this repo).
This commit is contained in:
2026-07-02 11:53:59 +02:00
parent 2bc0cf025f
commit ea54be6535
4 changed files with 32 additions and 20 deletions
+11 -9
View File
@@ -68,15 +68,17 @@ Two rules govern who touches git history and how:
## Spec/plan artefacts are ephemeral
`docs/specs/` and `docs/plans/` hold only the active cycle's spec and
plan, and they are **git-ignored** — never committed (the plugin ignores
them globally via `~/.config/git/ignore`; a project may add its own
`.gitignore` entry instead). Each is a working file: present on disk for
its own cycle, read across sessions from the working tree, and
shell-`rm`'d at cycle close by `audit` — never `git rm`'d, since it was
never tracked, so no git-history copy survives. The durable record of a
past cycle is the design ledger only, and no durable artefact cites a
spec/plan by number or path (see `~/dev/skills/docs/conventions.md`
§ Lifecycle).
plan, and they are **git-ignored** — never committed. This repo carries
a committed `docs/.gitignore` with the two entries `specs/` and `plans/`
(relative to `docs/`); that ignore file is the only committed part — the
spec and plan files it covers never are. If `docs/.gitignore` is missing
when the first working file is written, the writing skill creates it.
Each spec / plan is a working file: present on disk for its own cycle,
read across sessions from the working tree, and shell-`rm`'d at cycle
close by `audit` — never `git rm`'d, since it was never tracked, so no
git-history copy survives. The durable record of a past cycle is the
design ledger only, and no durable artefact cites a spec/plan by number
or path (see `~/dev/skills/docs/conventions.md` § Lifecycle).
## Design rationale ≠ implementation effort