feat(using-tasks): session_break marker [v1.2.0]
Add a session_break marker so a task author can mark a task's completion as a natural session boundary. After the task closes 🟢, before tasks_claim_next, an autonomous agent prints the verbatim SESSION BOUNDARY line and stops instead of chaining the next task. Absent -> behaviour unchanged. - STATUS.md format: optional **Session break:** field + new "### session_break marker" subsection (type bool|string, examples). - Task completion step 6: after close, before claim-next, check the closed task's session_break; print boundary line + stop if present. - Rules bullet "Honour session_break". - Wiki concept page concepts/using-tasks-session-break.md + index + log. MINOR bump: new optional capability, no existing behaviour changed. Closes [session-break-using-tasks]. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
# Task Board
|
# 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)._
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Canonical layout. One block per task. Per-task deep context lives in
|
Canonical layout. One block per task. Per-task deep context lives in
|
||||||
@@ -566,7 +566,7 @@ Findings → follow-up tasks через tasks_create в claude-skills.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔴 [session-break-using-tasks] — ## Goal
|
## 🟢 [session-break-using-tasks] — ## Goal
|
||||||
**Owner:** DESKTOP-NSEF0UK:claude-opus:18704
|
**Owner:** DESKTOP-NSEF0UK:claude-opus:18704
|
||||||
**Claim token:** e7a28f0e-ef35-4dc2-9c15-8cc5d8122527
|
**Claim token:** e7a28f0e-ef35-4dc2-9c15-8cc5d8122527
|
||||||
**Claim expires at:** 2026-06-09T13:44:05.344Z
|
**Claim expires at:** 2026-06-09T13:44:05.344Z
|
||||||
@@ -600,11 +600,12 @@ Add `session_break` field support to `using-tasks` skill v1.1.0 → v1.2.0.
|
|||||||
needs-claude
|
needs-claude
|
||||||
|
|
||||||
**Weight:** needs-claude
|
**Weight:** needs-claude
|
||||||
**Status:** ready
|
**Status:** done
|
||||||
**Where I stopped:** (not started)
|
**Where I stopped:** Shipped — `skills/using-tasks/SKILL.md` 1.1.0→1.2.0 (MINOR). Added `session_break` marker: (1) optional `**Session break:**` field in the STATUS.md format block + new "### `session_break` marker" subsection documenting type (bool | string) with examples (`true` → "см. STATUS.md", `"<hint>"` → named next track) and where it lives (task frontmatter / board mirror); (2) Task completion **step 6** — after close 🟢 + commit, before `tasks_claim_next`, read the closed task's `session_break`; if present, print the verbatim SESSION BOUNDARY line and STOP, else behaviour unchanged; (3) Rules bullet "Honour `session_break`". Verbatim message fixed dead-on per design. Wiki: `concepts/using-tasks-session-break.md` + index + log. All 4 acceptance criteria met (docs/policy artifact — no test surface; coverage by diff inspection).
|
||||||
**Next action:** Прочитать skills/using-tasks/SKILL.md, добавить правило session_break в раздел Task completion, поднять версию до v1.2.0
|
**Next action:** (none — kept until merged; paired review task `session-break-using-tasks-review` unblocked)
|
||||||
**Branch:** n/a
|
**Branch:** n/a
|
||||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T10:15:26.019Z -->
|
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T10:15:26.019Z -->
|
||||||
|
<!-- closed-by: DESKTOP-NSEF0UK:claude-opus:18704 / 2026-06-09 / 1.1.0→1.2.0 MINOR; session_break marker (format docs + Task-completion step 6 + Rules bullet + verbatim SESSION BOUNDARY line); wiki concept page; 4/4 acceptance met by inspection (markdown policy, no test surface) -->
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
52
.wiki/concepts/using-tasks-session-break.md
Normal file
52
.wiki/concepts/using-tasks-session-break.md
Normal file
@@ -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".
|
||||||
|
- `"<hint>"` → 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.
|
||||||
@@ -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
|
- [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
|
- [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)
|
- [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)
|
- [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
|
## Packages
|
||||||
|
|||||||
@@ -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/<name>.skill` where `<name>` 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-05-25] decision | install-cross-platform extended to build scripts — `build.{ps1,sh}` get the symmetric `--prune` / `-Prune` flag (removes `dist/<name>.skill` where `<name>` 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 | 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 | "<hint>"` 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.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: using-tasks
|
name: using-tasks
|
||||||
version: 1.1.0
|
version: 1.2.0
|
||||||
description: >
|
description: >
|
||||||
Policy skill for working with an existing `.tasks/` board (per-task files + STATUS.md).
|
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
|
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
|
**Where I stopped:** one sentence — the exact thought or action interrupted
|
||||||
**Next action:** one concrete step to resume immediately
|
**Next action:** one concrete step to resume immediately
|
||||||
**Blocker:** (only if blocked) what is preventing progress
|
**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
|
**Branch:** git branch name
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -64,6 +65,18 @@ _Updated: YYYY-MM-DD_
|
|||||||
- 🟢 Done — completed, kept until merged
|
- 🟢 Done — completed, kept until merged
|
||||||
- 🔵 Blocked — waiting on external input
|
- 🔵 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: "<hint>"` — pause after close; `<hint>` names the recommended next track.
|
||||||
|
- **Where it lives:** in the task's frontmatter when delivered via the task system (`session_break: true` / `session_break: "<hint>"`); 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 (`<task-slug>.md`)
|
## Per-task file format (`<task-slug>.md`)
|
||||||
@@ -133,6 +146,13 @@ Temporary hypotheses, links, names of people to consult.
|
|||||||
3. Set status to 🟢 in STATUS.md.
|
3. Set status to 🟢 in STATUS.md.
|
||||||
4. Append final summary line to Decisions log.
|
4. Append final summary line to Decisions log.
|
||||||
5. Remind user to delete the branch after merge.
|
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
|
### 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.
|
- **Always confirm orientation at session start** — state understanding before acting.
|
||||||
- **One active task at a time** — only one 🔴 in STATUS.md.
|
- **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.
|
- **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.
|
- **Local-first recommendations** — cwd-project board comes first; cross-project urgents are at most one footnote line.
|
||||||
|
|||||||
Reference in New Issue
Block a user