diff --git a/.claude/skills/to-tasks/SKILL.md b/.claude/skills/to-tasks/SKILL.md index 19d2b63..112d382 100644 --- a/.claude/skills/to-tasks/SKILL.md +++ b/.claude/skills/to-tasks/SKILL.md @@ -34,7 +34,7 @@ Break the plan into **tracer bullet** tasks — vertical slices, not horizontal ### 4. Quiz the user -Number slices with a single sequence shared across every file already in `.claude/tasks/`: scan for the highest existing `NNNN` (four-digit, zero-padded lowercase hex, `0000`-`ffff`) and increment from there. Never restart the sequence per feature and never reuse a number. +Number slices with a single sequence shared across every file already in `.claude/tasks/`: scan for the highest existing `NNNN` (four-digit, zero-padded decimal, `0000`-`9999`) and increment from there. Never restart the sequence per feature and never reuse a number. Present the proposed breakdown as a numbered list. For each slice, show: diff --git a/.claude/skills/to-tasks/TASK-FORMAT.md b/.claude/skills/to-tasks/TASK-FORMAT.md index 05d96b8..1ac9871 100644 --- a/.claude/skills/to-tasks/TASK-FORMAT.md +++ b/.claude/skills/to-tasks/TASK-FORMAT.md @@ -22,7 +22,7 @@ A concise description of this vertical slice. Describe the end-to-end behavior, ## Rules - **`spec`**: the feature-slug this task was written from. Omit the field entirely if there's no spec. -- **`blocked-by`**: which other task(s) must complete before this one can start. Omit the field entirely if there are none. Each value is the blocking task's full `-` filename stem, not just its slug. A single blocker is a bare string (`blocked-by: 000a-add-schema`); more than one is a YAML list (`blocked-by: [000a-add-schema, 000b-wire-api]`). Once written, keep the field even after the referenced task is completed — it's a permanent record of the dependency, not a "still blocked" flag. +- **`blocked-by`**: which other task(s) must complete before this one can start. Omit the field entirely if there are none. Each value is the blocking task's full `-` filename stem, not just its slug. A single blocker is a bare string (`blocked-by: 0010-add-schema`); more than one is a YAML list (`blocked-by: [0010-add-schema, 0011-wire-api]`). Once written, keep the field even after the referenced task is completed — it's a permanent record of the dependency, not a "still blocked" flag. - **Don't include specific file paths or code snippets** in "What to build" — they go stale fast. Exception: if a prototype produced a snippet that encodes a decision more precisely than prose can (state machine, reducer, schema, type shape), inline it here and note briefly that it came from a prototype. Trim to the decision-rich parts — not a working demo, just the important bits. - A task is done when every criterion in "Acceptance criteria" is resolved: mark `[x]` as satisfied, or `[-]` if deliberately dropped (`/implement` records the reason in the task's Implementation Notes) — track completion here, not anywhere else. - A slice becomes pickable once every task named in `blocked-by` is done (all of its acceptance criteria resolved) — check the referenced tasks' state, not just whether the field is present. The file's number is an identifier and a rough ordering hint, not a strict gate — sibling slices with no blockers can be worked in parallel. diff --git a/.config/dot/.claude/tasks/000a-kde-shortcuts-diff-broadscan.md b/.config/dot/.claude/tasks/0010-kde-shortcuts-diff-broadscan.md similarity index 100% rename from .config/dot/.claude/tasks/000a-kde-shortcuts-diff-broadscan.md rename to .config/dot/.claude/tasks/0010-kde-shortcuts-diff-broadscan.md diff --git a/.config/dot/.claude/tasks/000b-folders-unconditional-merge.md b/.config/dot/.claude/tasks/0011-folders-unconditional-merge.md similarity index 100% rename from .config/dot/.claude/tasks/000b-folders-unconditional-merge.md rename to .config/dot/.claude/tasks/0011-folders-unconditional-merge.md diff --git a/.config/dot/.claude/tasks/000c-folders-fixed-target-mapping.md b/.config/dot/.claude/tasks/0012-folders-fixed-target-mapping.md similarity index 98% rename from .config/dot/.claude/tasks/000c-folders-fixed-target-mapping.md rename to .config/dot/.claude/tasks/0012-folders-fixed-target-mapping.md index 9457b08..f4cf818 100644 --- a/.config/dot/.claude/tasks/000c-folders-fixed-target-mapping.md +++ b/.config/dot/.claude/tasks/0012-folders-fixed-target-mapping.md @@ -1,6 +1,6 @@ --- spec: dot-setup-folders -blocked-by: 000b-folders-unconditional-merge +blocked-by: 0011-folders-unconditional-merge --- ## What to build diff --git a/.config/dot/CLAUDE.md b/.config/dot/CLAUDE.md index 8efc358..74d6bc3 100644 --- a/.config/dot/CLAUDE.md +++ b/.config/dot/CLAUDE.md @@ -149,11 +149,6 @@ Tests live at `~/.config/dot/tests/dot.fish`, run with `$HOME/.claude/`. Writing to `$HOME/.claude/tasks/` instead of `~/.config/dot/.claude/tasks/` silently lands files in Claude Code's own global config dir instead of the project. -- Task file numbers (`.claude/tasks/-.md`) are lowercase - **hexadecimal**, not decimal — per `~/.claude/skills/to-tasks/SKILL.md`. - After `0009` comes `000a`, not `0010`. A past task-breakdown session - ignored this and produced a decimal `0010`, which had to be renamed back - to `000a` once caught. - An agent's `Bash` tool runs commands through **zsh**, not fish, so the `dot` fish function (defined in `~/.config/fish/functions/dot.fish`) is not on that shell's autoload path. Typing `dot ` there