From bd8c378f83c57bcd31ca3744a61c392979a641f6 Mon Sep 17 00:00:00 2001 From: vitya Date: Tue, 28 Apr 2026 13:26:46 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20split=20tasks=20=E2=80=94=20using-tasks?= =?UTF-8?q?=20(policy)=20+=20setup-tasks=20(one-time)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirror the wiki split. Rename `task-status-wiki` → `using-tasks` (preserves file history via `git mv`). Strip the "Initialization" section out — that content moves to the new `setup-tasks` skill, which owns greenfield creation and migration. `setup-tasks` has 6 phases (sanity → discovery → plan + confirm → backup → greenfield/migrate → verify → report) and two modes: - greenfield: write `.tasks/STATUS.md` with the canonical board template (emoji legend in a comment block; no per-task files at bootstrap — they get created on demand by using-tasks when actual tasks are added) - migrate: detect old flat STATUS.md (no emoji, plain `## Done`/`## In Progress` sections), back it up, then walk the user *interactively* through each task to extract slug / status / branch / where-stopped / next-action. Never auto-parses the old format — too varied, real work at stake. `using-tasks` Prerequisites section delegates to `setup-tasks` when the board is missing or non-canonical (no emoji, no per-task files). `project-bootstrap` Step 4 now delegates to `setup-tasks`. The user's manual follow-up after this commit: rm -rf ~/.claude/skills/{wiki-maintainer,task-status-wiki}/ to clean up the stale installs of the old names. (install.sh creates the new ones but doesn't remove the old.) This completes the three-commit refactor (a/b/c) tracked in .tasks/STATUS.md. Co-Authored-By: Claude Opus 4.7 (1M context) --- .tasks/STATUS.md | 53 ++--- .wiki/log.md | 1 + dist/project-bootstrap.skill | Bin 4761 -> 4810 bytes dist/setup-tasks.skill | Bin 0 -> 3599 bytes dist/task-status-wiki.skill | Bin 2518 -> 0 bytes dist/using-tasks.skill | Bin 0 -> 2634 bytes skills/project-bootstrap/SKILL.md | 19 +- skills/setup-tasks/SKILL.md | 202 ++++++++++++++++++ .../SKILL.md | 53 +++-- 9 files changed, 253 insertions(+), 75 deletions(-) create mode 100644 dist/setup-tasks.skill delete mode 100644 dist/task-status-wiki.skill create mode 100644 dist/using-tasks.skill create mode 100644 skills/setup-tasks/SKILL.md rename skills/{task-status-wiki => using-tasks}/SKILL.md (65%) diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 49751d2..3d46cc0 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,38 +1,31 @@ # Task Board _Updated: 2026-04-28_ -## In Progress - -### Versioning + setup/using split for wiki & tasks -**Goal:** version 6 infra skills (`1.0.0`), record them in a per-project bootstrap manifest, then split `wiki-maintainer`/`task-status-wiki` into `setup-X`/`using-X` pairs (mirroring context7) so bootstrap delegates to setup-skills and using-skills self-bootstrap on missing infra. - -**Three commits:** - -#### (a) Versioning + manifest -- [x] Add `version: 1.0.0` to frontmatter of all 6 infra skills -- [x] `project-bootstrap` Step 5.5 writes `.wiki/concepts/bootstrap-manifest.md` (table read live from each delegated skill's frontmatter) -- [x] `concepts/skill-versioning.md` documents the convention; index + log updated -- [x] Build + install affected skills (loop in build.sh handles 6-arg invocation cleanly) - -#### (b) Split wiki -- [x] `git mv skills/wiki-maintainer/ skills/using-wiki/` (history preserved as rename) -- [x] Updated `name:` to `using-wiki` and description to include `use project wiki` trigger; H1 + headline rewritten -- [x] New `skills/setup-wiki/SKILL.md` — 6 phases (sanity → discovery → plan+confirm → backup → 4a greenfield / 4b migrate → verify → report), with full templates for each canon file -- [x] `using-wiki` Prerequisites section delegates to `setup-wiki` when layout missing/non-canon -- [x] `project-bootstrap` Step 3 now delegates to `setup-wiki`; inline templates kept as reference only -- [x] Stale `dist/wiki-maintainer.skill` removed - -#### (c) Split tasks -- [ ] Rename `skills/task-status-wiki/` → `skills/using-tasks/`; update `name:` -- [ ] New `skills/setup-tasks/` derived from `.wiki/raw/setup-task-status-wiki.md` + existing SKILL.md -- [ ] Prerequisites in `using-tasks` → invokes `setup-tasks` -- [ ] `project-bootstrap` Step 4 delegates to `setup-tasks` - -**One-time, after all three:** -- [ ] Manual `rm -rf ~/.claude/skills/{wiki-maintainer,task-status-wiki}/` (the old names) once the renamed installs are in place - ## Done +### Versioning + setup/using split for wiki & tasks (3 commits) + +#### (a) Versioning + manifest — `e1e5bd1` +- [x] `version: 1.0.0` added to all 6 infra skills' frontmatter +- [x] `project-bootstrap` Step 5.5 writes `.wiki/concepts/bootstrap-manifest.md` +- [x] `concepts/skill-versioning.md` documents the convention + +#### (b) Split wiki — `36fe39e` +- [x] `wiki-maintainer` → `using-wiki` (rename via `git mv`) +- [x] New `setup-wiki` skill — 6 phases, two modes (greenfield / migrate), full canon templates +- [x] `using-wiki` Prerequisites delegates to `setup-wiki` +- [x] `project-bootstrap` Step 3 delegates + +#### (c) Split tasks — _this commit_ +- [x] `task-status-wiki` → `using-tasks` (rename via `git mv`) +- [x] New `setup-tasks` skill — 6 phases, two modes (greenfield / migrate); migration is interactive, never auto-parses old flat STATUS.md +- [x] `using-tasks` Prerequisites delegates to `setup-tasks` +- [x] `project-bootstrap` Step 4 delegates +- [x] Stale `dist/task-status-wiki.skill` removed + +### Manual follow-up for the user (one-time) +- [ ] `rm -rf ~/.claude/skills/{wiki-maintainer,task-status-wiki}/` — the old folders linger on disk after rename. The new `using-wiki` / `using-tasks` are already installed alongside; once you remove the old ones, `available_skills` will list only the new names. + ### Create `setup-context7` skill - [x] Drafted `skills/setup-context7/SKILL.md` — 8 phases (discovery → plan → backup → install → inject → clean → smoke-test → restart) + rollback + cross-platform notes - [x] API-key discovery in priority order: `settings.json` → `.claude.json` (top-level + project-scoped) → `settings.local.json` → env → ask diff --git a/.wiki/log.md b/.wiki/log.md index c9eda2d..49746a1 100644 --- a/.wiki/log.md +++ b/.wiki/log.md @@ -24,3 +24,4 @@ Parseable: `grep "^## \[" .wiki/log.md | tail -20`. ## [2026-04-28] decision | skill-vs-plugin — documented when a bare skill suffices vs when a plugin is required (slash commands, hooks, sub-agents, MCP via marketplace) ## [2026-04-28] decision | skill-versioning — added `version: 1.0.0` to 6 infra skills' frontmatter; project-bootstrap now writes .wiki/concepts/bootstrap-manifest.md per project ## [2026-04-28] refactor | wiki split — `wiki-maintainer` renamed to `using-wiki` (policy); new `setup-wiki` skill owns greenfield creation and canon migration; `project-bootstrap` Step 3 delegates +## [2026-04-28] refactor | tasks split — `task-status-wiki` renamed to `using-tasks` (policy); new `setup-tasks` skill owns greenfield + interactive migration (no auto-parsing of old flat STATUS.md); `project-bootstrap` Step 4 delegates diff --git a/dist/project-bootstrap.skill b/dist/project-bootstrap.skill index 705b48490701c18f262bf536d6806add162a548e..930298b64d3e4a4d763e19c0b8da2a91a6c4ca09 100644 GIT binary patch delta 4169 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 V000000RRC2LI3~&w+#RQ005Q&;6?xd literal 0 HcmV?d00001 diff --git a/dist/task-status-wiki.skill b/dist/task-status-wiki.skill deleted file mode 100644 index 679cfacafde3367ec3bba3b37297ffc837564f6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2518 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 a|EK>1F>_;jhX3toe*6CKME#~W0N`J%J-mDX diff --git a/dist/using-tasks.skill b/dist/using-tasks.skill new file mode 100644 index 0000000000000000000000000000000000000000..8d052781faf14af6ab1ccc719df66a917725078e GIT binary patch literal 2634 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 literal 0 HcmV?d00001 diff --git a/skills/project-bootstrap/SKILL.md b/skills/project-bootstrap/SKILL.md index 9c9263c..4e8b5df 100644 --- a/skills/project-bootstrap/SKILL.md +++ b/skills/project-bootstrap/SKILL.md @@ -209,24 +209,11 @@ each get a `.gitkeep` so git tracks them. ## Step 4 — .tasks/ -If `.tasks/` already exists — skip it, notify the user. +**Delegate to the `setup-tasks` skill.** It handles greenfield creation, migration from flat STATUS.md, and the no-op case uniformly, with its own confirmation gate. Don't recreate the layout inline. -If it does not exist — create the structure: +If `setup-tasks` is not installed, **stop** and tell the user — same rule as Step 3. -``` -.tasks/ - STATUS.md ← task board -``` - -Contents of `STATUS.md`: - -```markdown -# Task Board -_Updated: _ - - -``` +**Reference (for context only — `setup-tasks` is the source of truth):** the canonical layout is `.tasks/STATUS.md` (the board, with emoji status 🔴/🟡/⚪/🟢/🔵) plus `.tasks/.md` per active or paused task. The full pattern is documented in this repo at `.wiki/raw/setup-task-status-wiki.md`. --- diff --git a/skills/setup-tasks/SKILL.md b/skills/setup-tasks/SKILL.md new file mode 100644 index 0000000..fd8275c --- /dev/null +++ b/skills/setup-tasks/SKILL.md @@ -0,0 +1,202 @@ +--- +name: setup-tasks +version: 1.0.0 +description: Creates or migrates a project's `.tasks/` board to the canonical layout — `STATUS.md` (the board, with emoji status legend) plus per-task `.md` files for each active or paused task. Use when the user says "set up tasks", "init tasks", "настрой таски", "инициализируй таски", "create task tracking", "migrate tasks to canon", "tasks broken", or whenever `using-tasks` detects a missing or non-canonical `.tasks/`. Two modes — greenfield (no `.tasks/`) and migrate (existing flat STATUS.md without per-task files). Confirmation gate before writing. Cross-platform. +--- + +# setup-tasks + +> Creates or migrates a `.tasks/` board to canon. The canonical layout is enforced by `using-tasks` and described in `.wiki/raw/setup-task-status-wiki.md` (the original idea file from which this skill is derived). This skill is the *only* place that creates the board structure. + +## When to use + +- User explicitly asks: set up / init / migrate / create tasks. +- `using-tasks` runs and detects a missing or non-canonical `.tasks/` — its Prerequisites delegate here. +- `project-bootstrap` Step 4 delegates here when initializing a new project. + +## Out of scope + +- Editing existing task content during normal work (that's `using-tasks`). +- Anything outside `.tasks/`. + +## Hard rule: don't auto-mutate + +The procedure mutates `.tasks/`. **Pause for explicit confirmation between Phase 1 (discovery) and Phase 2 (plan).** A trigger phrase is permission to inspect, not to write. + +## Procedure + +### Phase 0 — Environment sanity + +- Confirm current working directory is a project root (preferably with `.git/`; otherwise it's still OK to bootstrap, just note it). +- Tasks paths are POSIX-style (`.tasks/...`) on every OS. + +### Phase 1 — Discovery + +Inspect `.tasks/`: + +- **No `.tasks/`** → mode = `greenfield`. +- **`.tasks/STATUS.md` exists with canonical signals** — has emoji status (🔴 / 🟡 / ⚪ / 🟢 / 🔵) AND at least one per-task `.tasks/.md` exists for any active/paused entry → mode = `noop`. +- **`.tasks/STATUS.md` exists but flat** — no emoji legend, no per-task files, just plain `## Done` / `## In Progress` / `## Backlog` sections (or similar) → mode = `migrate`. + +Report findings: + +``` +Mode: greenfield | noop | migrate +STATUS.md: exists | missing +Per-task files: +Format: canon | flat | mixed +``` + +### Phase 2 — Plan + confirm + +Show the plan in one block. + +**Greenfield:** +``` +Will create .tasks/STATUS.md with the canonical board template. +Per-task files will be created on demand by using-tasks when actual tasks are added. +``` + +**Migrate:** +``` +Will: + • back up existing STATUS.md → STATUS.md.bak- + • for each task entry I can identify in the old STATUS.md, ask you for: + - task-slug (kebab-case, latin) + - current status (active / paused / ready / done / blocked) + - branch + - where you stopped (one sentence) + - next action (one sentence) + then write `.tasks/.md` and a canonical STATUS.md block. + • leave the .bak file as a fallback reference. +``` + +If existing `STATUS.md` is purely a placeholder (just the bootstrap-default comment block, no real tasks), treat as `greenfield` — no migration needed, just overwrite with the template. + +Wait for explicit confirmation ("ok", "go", "поехали"). Anything else → stop. + +### Phase 3 — Backup (migrate only) + +```bash +TS=$(date +%Y%m%d-%H%M%S) +cp .tasks/STATUS.md ".tasks/STATUS.md.bak-$TS" +``` + +### Phase 4a — Greenfield create + +Write `.tasks/STATUS.md`: + +```markdown +# Task Board +_Updated: _ + + +``` + +No per-task files at greenfield — they're created when actual tasks are added. + +### Phase 4b — Migrate + +In migrate mode, do *not* try to auto-parse the old flat STATUS.md. The old layout is too varied — agent-driven heuristics will mangle real work. Instead, drive the migration interactively: + +1. Show the user the old STATUS.md content (or a summary). +2. Ask: "Which of these are real, in-flight tasks you want to keep?" Get a list. +3. For each task, ask the four canonical fields (slug, status, branch, where-stopped, next-action). The skill never invents these. +4. Build a fresh canonical `.tasks/STATUS.md` from those answers. +5. Create `.tasks/.md` for each active or paused task using the per-task template (Goal, Key files, Decisions log, Open questions, Completed steps, Notes). +6. Leave the `.bak-` file in place — historical record. + +Per-task template: + +```markdown +# + +## Goal +One paragraph. What this achieves and why it matters. + +## Key files +- `path/to/file.ts` — role in this task + +## Decisions log +- : migrated from flat STATUS.md via setup-tasks@ + +## Open questions +- [ ] (fill in) + +## Completed steps +- [x] (fill in) + +## Notes +``` + +### Phase 5 — Verify + +After writes: + +- `.tasks/STATUS.md` exists and has the emoji status legend (or template comment block in greenfield). +- For migrate: each task referenced in STATUS.md has its `.md` file (active and paused only). +- No required content was lost (the `.bak` file is the safety net). + +If verification fails → restore from `.bak-` and report. + +### Phase 6 — Report + +Print final state: + +``` +✅ Tasks board ready at .tasks/. + Mode: greenfield | migrate + STATUS.md: > + Per-task files: + +Next steps for the user: + • Add or edit task entries in .tasks/STATUS.md + • Read using-tasks SKILL.md if unfamiliar with the workflow +``` + +If invoked from `project-bootstrap`, return control silently. + +## Rollback + +1. `rm -rf .tasks/` (greenfield rollback) + or + `mv .tasks/STATUS.md.bak- .tasks/STATUS.md` (migrate rollback) and `rm .tasks/.md` for any newly created per-task files. +2. `git reset HEAD .tasks/` if a git repo. +3. Tell user what failed. + +## Common mistakes + +- **Auto-parsing existing flat STATUS.md.** Don't. The format varies, real work is at stake — drive migration through the user, one task at a time. +- **Inventing task slugs / branches / "where you stopped" values.** Never. Ask the user. The whole point of `.tasks/` is *real* preserved context, not hallucinated context. +- **Skipping confirmation on greenfield.** Yes, even greenfield needs the gate — the user might be running this in the wrong directory. +- **Creating per-task files at bootstrap.** Don't pre-generate empty `.md` files in greenfield mode — wait until the user adds actual tasks. +- **Editing the `.bak` file.** It's the rollback artifact; leave it alone. + +## Cross-platform notes + +The procedure is platform-agnostic. Wiki-style paths (`.tasks/...`) work the same on Windows / Linux / macOS. The only platform-conditional command is the timestamp generator (`date +%Y%m%d-%H%M%S` in bash; equivalent in PowerShell), and our scripts use bash via git-bash on Windows. + +## Source + +The canonical pattern (extended documentation, decisions log format, agent operations) lives in this repo at `.wiki/raw/setup-task-status-wiki.md`. Refer to it when designing project-specific extensions. diff --git a/skills/task-status-wiki/SKILL.md b/skills/using-tasks/SKILL.md similarity index 65% rename from skills/task-status-wiki/SKILL.md rename to skills/using-tasks/SKILL.md index 23eeb85..9b8b428 100644 --- a/skills/task-status-wiki/SKILL.md +++ b/skills/using-tasks/SKILL.md @@ -1,21 +1,32 @@ --- -name: task-status-wiki +name: using-tasks version: 1.0.0 description: > - Manage a persistent task status wiki inside a monorepo using the .tasks/ folder pattern. - Use this skill whenever the user is switching between tasks, resuming a paused task, - starting a new task, asking "where were we", or wanting to track progress across multiple - parallel workstreams. Also use when the user says "pause", "switch to X", "what's the status", - "update status", or "initialize task tracking". Trigger even if the user doesn't explicitly - mention the wiki — any context-switching or multi-task coordination question in a code project - is a signal to use this skill. + Policy skill for working with an existing `.tasks/` board (per-task files + STATUS.md). + Use whenever the user is switching between tasks, resuming a paused task, starting a new + task, asking "where were we", says "use task management system", "pause", "switch to X", + "what's the status", "update status", or wants to track progress across parallel workstreams. + Trigger on any context-switching or multi-task coordination question in a code project. + If `.tasks/` is missing or non-canonical (no per-task `.md` files, no emoji + status legend in STATUS.md), delegate to `setup-tasks` first — it has its own confirmation + gate. Renamed from `task-status-wiki` at v1.0.0. --- -# Task Status Wiki +# using-tasks -A pattern for maintaining compressed working context across parallel tasks in a monorepo. -The agent reads and updates a small wiki in `.tasks/` so that every session starts oriented -and every switch costs seconds, not minutes. +> Policy for maintaining compressed working context across parallel tasks in a monorepo. +> The agent reads and updates `.tasks/` so every session starts oriented and every switch +> costs seconds, not minutes. This skill governs *usage* of an existing `.tasks/` — initial +> creation and migration to canon are owned by `setup-tasks`. + +## Prerequisites + +This skill assumes the project has a canonical `.tasks/` layout: + +- `.tasks/STATUS.md` — the board, with per-task blocks using emoji status (🔴 active / 🟡 paused / ⚪ ready / 🟢 done / 🔵 blocked). +- `.tasks/.md` — one deep-context file per active or paused task. + +If `.tasks/` is **missing**, or `STATUS.md` exists but is non-canonical (e.g. flat sections like "## Done" / "## In Progress" without the emoji + per-task block format, or no per-task files exist alongside STATUS.md) — invoke `setup-tasks` first. It detects greenfield vs migrate, has its own confirmation gate, and creates / migrates the structure. Only after `setup-tasks` finishes should this skill operate on `.tasks/`. ## Structure @@ -87,7 +98,7 @@ Temporary hypotheses, links, names of people to consult. ## Agent operations ### Session start -1. Check if `.tasks/STATUS.md` exists. If not → run **Initialization** below. +1. Check if `.tasks/STATUS.md` exists. If not → invoke `setup-tasks` and stop here until it returns. 2. Read `STATUS.md`. 3. If user names a task, read its `.md`. 4. Confirm in one sentence: "We're in the middle of X, next step is Y." @@ -120,22 +131,6 @@ Temporary hypotheses, links, names of people to consult. --- -## Initialization (first time in a project) - -Run when `.tasks/` doesn't exist yet. - -1. Confirm understanding in one sentence. -2. Ask: "What tasks are currently in flight? Give me each name and a one-line description." -3. For each task: ask for branch, current status, and where work stopped last. -4. Create `.tasks/STATUS.md` with all tasks filled in. -5. Create `.md` for each active or paused task. -6. Commit: `git add .tasks/ && git commit -m "chore: init task status wiki"` -7. Print path to STATUS.md and confirm it's ready. - -**Do not invent task details — ask for what is unknown.** - ---- - ## Rules - **Never lose "Where I stopped"** — most critical field. If unclear, ask before ending session.