diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 217ec40..626989b 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,5 +1,5 @@ # Task Board -_Updated: 2026-06-09 — delegate-task-review done (VERDICT PASS; smoke-test 6/6 fresh subagents, no blocking findings, 3 informational notes). Ранее: delegate-task-test-trigger done (pos 5/5, neg 2/3; FP на «создать задачу себе» → follow-up delegate-task-description-fp-fix, shipped v0.2.1). Ранее (2026-06-08): откат churn'а от агент-раннера (always-on dry-run): 5 тасок (using-yt-tools-rate-limit-guard, archive-roundtrip-test, skills-grouping-revisit, hermes-converter-ci, tdd-criteria-precommit-hook) спуриозно claimed/blocked из-за workspace-divergence бага раннера → возвращены в ⚪ ready. yt-tools re-scoped на plugin-репо `OpeItcLoc03/yt-tools` (исходный stub deprecated)._ +_Updated: 2026-06-09 — session-break-using-tasks done (using-tasks 1.1.0→1.2.0; `session_break` marker — stop after close before claim-next). Ранее: delegate-task-review done (VERDICT PASS; smoke-test 6/6 fresh subagents, no blocking findings, 3 informational notes). Ранее: delegate-task-test-trigger done (pos 5/5, neg 2/3; FP на «создать задачу себе» → follow-up delegate-task-description-fp-fix, shipped v0.2.1). Ранее (2026-06-08): откат churn'а от агент-раннера (always-on dry-run): 5 тасок (using-yt-tools-rate-limit-guard, archive-roundtrip-test, skills-grouping-revisit, hermes-converter-ci, tdd-criteria-precommit-hook) спуриозно claimed/blocked из-за workspace-divergence бага раннера → возвращены в ⚪ ready. yt-tools re-scoped на plugin-репо `OpeItcLoc03/yt-tools` (исходный stub deprecated)._ + --- diff --git a/.wiki/concepts/using-tasks-session-break.md b/.wiki/concepts/using-tasks-session-break.md new file mode 100644 index 0000000..3992ed4 --- /dev/null +++ b/.wiki/concepts/using-tasks-session-break.md @@ -0,0 +1,52 @@ +--- +title: using-tasks session_break marker +type: concept +tags: [using-tasks, autonomous-runner, session-boundary] +updated: 2026-06-09 +--- + +# using-tasks `session_break` marker + +`using-tasks` v1.2.0 adds a `session_break` marker so a task author can mark a task's +completion as a natural place to **stop**, rather than have an autonomous agent immediately +chain into the next task via `tasks_claim_next`. + +## Problem + +An autonomous runner closes a task and, by default, claims the next one. There is no signal +for "this is a good seam to end the session" — so unrelated tracks get welded into one +ever-growing context, and the natural review/hand-off moment is skipped. + +## Design + +- **Marker:** `session_break` in the task's frontmatter (task-system delivery) or the + `**Session break:**` field in the task's STATUS.md block (local board mirror). +- **Type:** boolean or string. + - `true` → pause after close; next track is "see STATUS.md". + - `""` → pause after close; the hint names the recommended next track. +- **Enforcement point:** `using-tasks` → Task completion, **step 6** — *after* the task is + 🟢 and committed, *before* any `tasks_claim_next` / starting the next task. +- **Behaviour when present:** print the SESSION BOUNDARY line verbatim, then stop (do not + claim the next task). +- **Behaviour when absent:** unchanged — claim / start the next task as usual. + +### Verbatim message + +``` +🔚 SESSION BOUNDARY — [slug] закрыта. Рекомендую завершить текущую сессию. Следующий трек: [value | "см. STATUS.md"] +``` + +`[slug]` = the closed task's slug. `[value | "см. STATUS.md"]` = the marker's string value, +or the literal `см. STATUS.md` when the marker is just `true`. The wording is fixed so the +boundary is greppable and recognisable across sessions. + +## Why a marker, not a heuristic + +The decision of *what counts as a stopping point* belongs to whoever scoped the work (the +delegating workshop), not to the runner mid-flight. A heuristic ("stop after N tasks", "stop +when tired") would either over- or under-fire. An explicit, opt-in marker keeps the default +unchanged and makes the boundary a deliberate authoring choice. + +## Versioning + +MINOR bump (1.1.0 → 1.2.0): new optional capability, no existing behaviour changed. diff --git a/.wiki/index.md b/.wiki/index.md index 2e69481..b3cb7ff 100644 --- a/.wiki/index.md +++ b/.wiki/index.md @@ -41,6 +41,7 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever - [project-bootstrap-meta-isolation.md](concepts/project-bootstrap-meta-isolation.md) — project-bootstrap@1.11.0 — Step 1 ships meta-isolation block in `.gitignore` (`!.claude/`, `!.tasks/`, `!.wiki/`, ...) so own greenfield/upgrade projects re-enable agent meta-paths against global `core.excludesFile` cutter. Marker-based append-only on existing files; smoke-tested with negative control - [interns-grep-audit-design](concepts/interns-grep-audit-design.md) — interns-grep-audit-design - [session-handoff-skill-design.md](concepts/session-handoff-skill-design.md) — design rationale for the `session-handoff` skill (sliding overwrite into `.tasks/NEXT_SESSION.md`, phrase whitelist + substantive-commit heuristic, optional PostToolUse hook for harness-side determinism, orient+ask default, project scope, cluster 7/7 closure) +- [using-tasks-session-break.md](concepts/using-tasks-session-break.md) — `using-tasks` v1.2.0 `session_break` marker: task-author-set boolean/string flag; after a task closes 🟢, before `tasks_claim_next`, an autonomous agent prints the verbatim SESSION BOUNDARY line and stops instead of chaining the next task. Absent → unchanged - [delegate-task-negative-trigger-fp.md](concepts/delegate-task-negative-trigger-fp.md) — `delegate-task` v0.2.1 FP fix: «создать задачу себе» stem-matched the «создать задачу на агента» positive trigger; abstract "does NOT apply when doing the work yourself" carve-out loses to literal stem-match under the 1%-rule → made the negative literal + routed (→ using-tasks). Verified pos 5/5, neg 4/5 (was 0/5) ## Packages diff --git a/.wiki/log.md b/.wiki/log.md index 4c9bfc0..aca4f9d 100644 --- a/.wiki/log.md +++ b/.wiki/log.md @@ -67,3 +67,4 @@ Parseable: `grep "^## \[" .wiki/log.md | tail -20`. ## [2026-05-25] decision | install-cross-platform extended to build scripts — `build.{ps1,sh}` get the symmetric `--prune` / `-Prune` flag (removes `dist/.skill` where `` is not in `skills/`). Bash delegation to `powershell.exe -File build.ps1` does NOT forward the flag — bash runs prune itself against the shared `dist/`. Both paths smoke-tested with fake stale .skill files against real dist/. Closes `[install-ps1-build-prune-followup]`. ## [2026-06-09] decision | delegate-task-negative-trigger-fp — `delegate-task` 0.2.0→0.2.1 (PATCH): fixed 5/5-consistent false-positive on «создать задачу себе». Root cause: self-task phrase shares stem «создать задачу» with the «создать задачу на агента» positive trigger; the abstract "Does NOT apply when doing the work yourself" carve-out can't beat a literal stem-match under the 1%-rule. Fix: made the negative literal + routed («создать задачу себе» / «task for myself» / «поставить себе задачу» → using-tasks) in description + body disambiguator («на агента»/«агенту» = delegate; «себе» = own board). Re-verified via fresh-context subagent trigger run: positives 5/5 (no regression), negative 4/5 → using-tasks (was 0/5); the 1 residual miss was an eval-harness artifact (forced skill-name-before-reasoning), not description ambiguity. Concept page written; reusable principle = put the exact colliding negative phrase with an explicit →sibling route, literal beats abstract. +## [2026-06-09] decision | using-tasks-session-break — `using-tasks` 1.1.0→1.2.0 (MINOR): added the `session_break` marker. Task author sets `session_break: true | ""` in task frontmatter (mirrored as `**Session break:**` on the local board); after the task closes 🟢, before `tasks_claim_next`, an autonomous agent prints the verbatim line `🔚 SESSION BOUNDARY — [slug] закрыта. Рекомендую завершить текущую сессию. Следующий трек: [value | "см. STATUS.md"]` and stops instead of chaining the next task. Absent → behaviour unchanged. Enforced in Task completion step 6 + Rules bullet + format docs. Marker not heuristic: the stop-point is an authoring choice, not a runner guess. diff --git a/skills/using-tasks/SKILL.md b/skills/using-tasks/SKILL.md index 1f158d3..9dd915b 100644 --- a/skills/using-tasks/SKILL.md +++ b/skills/using-tasks/SKILL.md @@ -1,6 +1,6 @@ --- name: using-tasks -version: 1.1.0 +version: 1.2.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 @@ -52,6 +52,7 @@ _Updated: YYYY-MM-DD_ **Where I stopped:** one sentence — the exact thought or action interrupted **Next action:** one concrete step to resume immediately **Blocker:** (only if blocked) what is preventing progress +**Session break:** (optional) `true` — or a hint string for the next track. Marks this task as a session boundary. **Branch:** git branch name --- @@ -64,6 +65,18 @@ _Updated: YYYY-MM-DD_ - 🟢 Done — completed, kept until merged - 🔵 Blocked — waiting on external input +### `session_break` marker + +A task may carry a `session_break` marker — set by whoever defines the task (e.g. the delegating workshop) when its completion is a natural place to stop and start a fresh session. It signals an autonomous agent: *finish this task, then pause instead of immediately claiming the next one.* + +- **Type:** boolean or string. + - `session_break: true` — pause after close; the next track is "see STATUS.md". + - `session_break: ""` — pause after close; `` names the recommended next track. +- **Where it lives:** in the task's frontmatter when delivered via the task system (`session_break: true` / `session_break: ""`); mirrored on the local board as the optional `**Session break:**` field in the task's STATUS.md block. +- **Absent →** behaviour is unchanged: close the task and continue as usual. + +The check is enforced in the **Task completion** flow below (after close, before claiming the next task). + --- ## Per-task file format (`.md`) @@ -133,6 +146,13 @@ Temporary hypotheses, links, names of people to consult. 3. Set status to 🟢 in STATUS.md. 4. Append final summary line to Decisions log. 5. Remind user to delete the branch after merge. +6. **Session-break check (after close, before claiming the next task).** Once the task is 🟢 and committed — and **before** any `tasks_claim_next` or starting the next task — read the closed task's `session_break` marker (its frontmatter `session_break`, or the `**Session break:**` field in its STATUS.md block). If present: + - Print this line **verbatim**, substituting the closed task's slug for `[slug]` and the marker's string value for `[value | "см. STATUS.md"]` (use the literal `см. STATUS.md` when the marker is just `true`): + + `🔚 SESSION BOUNDARY — [slug] закрыта. Рекомендую завершить текущую сессию. Следующий трек: [value | "см. STATUS.md"]` + + - **Stop.** Do not claim or start the next task. + - If the marker is absent → behaviour is unchanged: proceed to claim / start the next task as usual. ### Post-commit task closure prompt @@ -171,4 +191,5 @@ Pair: `using-projects-meta` declares local-first for **reads**; this rule extend - **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. +- **Honour `session_break`** — a closed task carrying a `session_break` marker means stop after close; never chain into `tasks_claim_next`. See "### Task completion" step 6. - **Local-first recommendations** — cwd-project board comes first; cross-project urgents are at most one footnote line.