From b0d2d5169a68df9dfdf554f8ece40910ca0073ad Mon Sep 17 00:00:00 2001 From: vitya Date: Wed, 6 May 2026 23:49:09 +0300 Subject: [PATCH] feat(using-tasks): pre-close coverage gate + local-first recommendations [v1.1.0] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Part A — Pre-close coverage gate. ### Task completion now lists acceptance criteria from the per-task file before setting 🟢; missing evidence → ask the user. New section ### Post-commit task closure prompt: after a feat:/fix: commit the agent asks "эта работа закрывает таску ?" so shipped code doesn't sit under stale ⚪ blocks (cf. extend-project-discipline-brainstorm- workspaces / project-creation-lifecycle-skill, both shipped before close). Part B — Local-first recommendations at session-start / "what next" triggers. cwd-project board (🔴 → 🟡 → ⚪) leads; cross-project urgents are at most one footnote line. Explicit "по всем проектам" flips the order. Pairs with using-projects-meta's local-first read rule. Bump 1.0.0 → 1.1.0 (MINOR — adds two new operation types; task block suggested PATCH but Rule 3 grades these as capability additions). Closes [using-tasks-close-coverage-gate] (next commit). Co-Authored-By: Claude Opus 4.7 (1M context) --- dist/using-tasks.skill | Bin 4943 -> 6910 bytes skills/using-tasks/README.md | 38 +++++++++++++++++++++++++++---- skills/using-tasks/SKILL.md | 42 ++++++++++++++++++++++++++++++----- 3 files changed, 71 insertions(+), 9 deletions(-) diff --git a/dist/using-tasks.skill b/dist/using-tasks.skill index fe030a3a4f0d12fddc87c42a046b5eb13edf6d0c..af3e8e94d9e8182dda391ba23b67e94bffe26e03 100644 GIT binary patch literal 6910 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 diff --git a/skills/using-tasks/README.md b/skills/using-tasks/README.md index 497243f..aa560fe 100644 --- a/skills/using-tasks/README.md +++ b/skills/using-tasks/README.md @@ -103,10 +103,36 @@ hypotheses, links). ### Task completion -1. Resolve or drop all open questions. -2. Set status to 🟢 in `STATUS.md`. -3. Append a final summary line to the Decisions log. -4. Remind the user to delete the branch after merge. +1. **Pre-close coverage check** — list acceptance criteria, locate + evidence (tests, smoke-test artefacts, manual checklist ticks, design + doc refs). Missing evidence → ask the user before closing; never auto-close. +2. Resolve or drop all open questions. +3. Set status to 🟢 in `STATUS.md`. +4. Append a final summary line to the Decisions log. +5. Remind the user to delete the branch after merge. + +### Post-commit task closure prompt + +After a `feat:` / `fix:` commit the agent prompts: +"эта работа закрывает таску ``?". Slug candidates: commit-message +scope, current branch, most recent `Where I stopped`. If yes → run the +coverage check above. Skips `chore:` / `meta:` / `docs:` commits. + +Forces a fresh-while-fresh decision, instead of letting shipped code sit +under a stale ⚪ block. + +### Recommendations / "what's next" trigger + +When the user asks «что дальше», «срочные», «куда копаем», "what next", +"status", or on session-start — recommend in this order: + +1. **Local cwd-project board** ranked 🔴 → 🟡 → ⚪. Cite slugs. +2. **One footnote line** if relevant: `Cross-project: N 🔴 in other repos + (см. mcp__projects-meta__tasks_aggregate).` Only if N>0 and no local 🔴. + +Explicit "по всем проектам" / "across all projects" flips the order. +Pairs with `using-projects-meta`'s local-first rule (which covers reads; +this one covers recommendations). ## Rules @@ -120,6 +146,10 @@ hypotheses, links). - **Always confirm orientation at session start.** State understanding before acting. - **One active task at a time** — only one 🔴 in `STATUS.md`. +- **Never close without coverage check.** See "### Task completion" + step 1. +- **Local-first recommendations.** cwd-project first; cross-project at + most one footnote line. ## Install diff --git a/skills/using-tasks/SKILL.md b/skills/using-tasks/SKILL.md index 9b8b428..1f158d3 100644 --- a/skills/using-tasks/SKILL.md +++ b/skills/using-tasks/SKILL.md @@ -1,6 +1,6 @@ --- name: using-tasks -version: 1.0.0 +version: 1.1.0 description: > 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 @@ -124,10 +124,40 @@ Temporary hypotheses, links, names of people to consult. 4. Create and checkout branch if it doesn't exist. ### Task completion -1. Resolve or drop all open questions. -2. Set status to 🟢 in STATUS.md. -3. Append final summary line to Decisions log. -4. Remind user to delete the branch after merge. +1. **Pre-close coverage check.** Before setting 🟢: + - List acceptance criteria from the per-task `.md` (or the STATUS block if no per-task file). + - For each criterion, locate evidence: a test name in the diff, a smoke-test artefact, a manual-checklist tick in the per-task file, or a design-doc reference. + - Missing evidence on any criterion → flag to user and ask "закрывать или подождать coverage'а?". Never silently close. + - If acceptance criteria are policy / docs-only and have no testable shape, an explicit user "ok, closed by inspection" is required (record this in the close-note). +2. Resolve or drop all open questions. +3. Set status to 🟢 in STATUS.md. +4. Append final summary line to Decisions log. +5. Remind user to delete the branch after merge. + +### Post-commit task closure prompt + +After any implementation commit (`feat:` / `fix:` / similar), prompt the user once: + +> Эта работа закрывает таску ``? + +Slug candidates, in priority: (a) commit message scope, (b) current branch name, (c) the most recent `Where I stopped` field that mentions a now-shipped artefact. If user says yes → run the pre-close coverage check from "### Task completion". If no → silent. + +Skip on `chore:` / `meta:` / `docs:` / `style:` commits — they rarely close work. + +This exists because shipped code can sit while the task block stays ⚪ ready (e.g. `extend-project-discipline-brainstorm-workspaces` lived as ⚪ for a day after `215afdd` shipped Rule 5). The prompt forces a one-line decision while the work is fresh. + +### Recommendations / "what's next" trigger + +When the user asks «что дальше», «срочные», «куда копаем», «status», «what next», or session-start lands on a project — recommend in this order: + +1. **Local cwd-project board** ranked 🔴 → 🟡 → ⚪. Group by status, summarize one line each. Cite slugs. +2. **One footnote line** if cross-project state is relevant: `Cross-project: N 🔴 active in other repos (см. mcp__projects-meta__tasks_aggregate).` Only when N>0 and there is no active 🔴 in the current cwd. Never bury local recommendations under it. + +Cross-project urgents are *information*, not the driver of "what to do here". The user chose this cwd; that's the implicit scope. + +If the user explicitly asks "across all projects" / "по всем проектам" / "cross-project status" — flip the order: cross-project first, local as footnote. + +Pair: `using-projects-meta` declares local-first for **reads**; this rule extends local-first to the **recommendation phase**. --- @@ -140,3 +170,5 @@ Temporary hypotheses, links, names of people to consult. - **Commit after every session end** — git log is the history of thinking. - **Always confirm orientation at session start** — state understanding before acting. - **One active task at a time** — only one 🔴 in STATUS.md. +- **Never close a task without a coverage check** — see "### Task completion" step 1. Acceptance criteria with no evidence → ask, don't auto-close. +- **Local-first recommendations** — cwd-project board comes first; cross-project urgents are at most one footnote line.