From 90c5be7c880a705c75cc987690e639d2ad27355f Mon Sep 17 00:00:00 2001 From: vitya Date: Sun, 24 May 2026 21:56:30 +0300 Subject: [PATCH] fix(skills): session-handoff yaml desc, double-quote [v0.2.1] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bare-scalar description contained `: ` (colon-space) inside backticks (`Триггер-строка CLAUDE.md ` + literal trigger-line containing `: `). Strict YAML parser treated the inner `: ` as nested mapping → description field dropped → harness fallback to H1 → skill listing showed "session-handoff: session-handoff" (trigger phrases non-functional). Fix: wrap entire description in double-quotes. Shrink 650→462 chars (865→555 bytes) by moving substantive-commit heuristic, sliding-overwrite detail, and project-scope clause to body Steps/Side/Failure sections (already documented there). All 6 session-end triggers + 4 skip phrases + trigger-line preserved verbatim. Bump 0.2.0 → 0.2.1 PATCH (frontmatter wording, no behavior change). Closes [session-handoff-install]; unblocks [session-handoff-test-trigger]. Co-Authored-By: Claude Opus 4.7 (1M context) --- .tasks/STATUS.md | 19 ++++++++--------- .tasks/session-handoff-install.md | 34 +++++++++++++++++++++++++++++++ skills/session-handoff/SKILL.md | 4 ++-- 3 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 .tasks/session-handoff-install.md diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index d4b9a78..239d389 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,5 +1,5 @@ # Task Board -_Updated: 2026-05-22 (interns-grep-audit-skill-updates closed 🟢 — using-interns v0.2.2→0.3.0 with 3 routing rows for `grep_audit` deterministic intern plus consistency adds; unblocks half of `[interns-grep-audit-review]`.)_ +_Updated: 2026-05-24 (session-handoff-install закрыт 🟢 — fix description YAML `: ` ambiguity, bump 0.2.0→0.2.1, reinstall, listing рендерит полный description.)_ + --- diff --git a/.tasks/session-handoff-install.md b/.tasks/session-handoff-install.md new file mode 100644 index 0000000..d829756 --- /dev/null +++ b/.tasks/session-handoff-install.md @@ -0,0 +1,34 @@ +# session-handoff-install + +## Goal +Установить скил `session-handoff` в `~/.claude/skills/session-handoff/` через `scripts/install.ps1 -Names session-handoff` и убедиться что harness видит его + рендерит description в листинге. Анлокает `[session-handoff-test-trigger]` (нужен установленный + работающий скил для trigger smoke). + +## Key files +- `scripts/install.ps1` — копирует `skills//` → `~/.claude/skills//` (replace mode) +- `skills/session-handoff/SKILL.md:1-5` — frontmatter (`version: 0.2.1`, double-quoted description) +- `~/.claude/skills/session-handoff/SKILL.md` — установленная копия + +## Decisions log +- 2026-05-24: исходный description v0.2.0 (650 chars / 865 bytes) renderился как `- session-handoff: session-handoff` (harness fallback к H1). Сначала подозревал byte-overflow (memory `feedback_skill_description_length_limit` — лимит ~1024). Прокачав через PowerShell + Python YAML parser, root cause найден: `: ` (colon-space) внутри bare-scalar — конкретно `Триггер-строка CLAUDE.md \`session handoff: read on start, write on end\`` — YAML parser в strict mode принимал `session handoff:` за nested mapping key. Backticks не спасают, YAML их не интерпретирует. +- 2026-05-24: fix = wrap description в double-quotes (`"..."`). Альтернатива (rephrase to remove `: `) — слабее, потому что trigger-line literal содержит `: ` by design (это user-facing trigger phrase в формате CLAUDE.md). +- 2026-05-24: бонусом shrink с 650→462 chars (убрал substantive-commit heuristic, sliding-overwrite detail, project-scope clause — всё уже в body Steps/Side effects/Failure modes). Triggers + skip phrases сохранены 1-в-1. +- 2026-05-24: bump 0.2.0 → 0.2.1 PATCH (wording-only frontmatter edit, поведение скила не меняется). +- 2026-05-24: harness auto-discovered после `Copy-Item` (replace mode install) — `/reload-plugins` не понадобился, listing внутри текущей сессии обновился. Это противоречит формулировке task'и («Открыть новую CC сессию → /skills»). На этой версии CC re-scan SKILL.md происходит при следующем skill-listing вызове. + +## Open questions +- [ ] (нет — атомарная install-таска) + +## Completed steps +- [x] edit STATUS.md → 🔴 active +- [x] run `pwsh scripts\install.ps1 -Names session-handoff` (через PowerShell tool, bash не видит pwsh) +- [x] verify `~/.claude/skills/session-handoff/SKILL.md` v0.2.0 on disk +- [x] discover description-rendering bug в листинге (fallback к H1) +- [x] root-cause: YAML `: ` ambiguity внутри bare scalar (не byte-overflow) +- [x] fix: wrap description в double-quotes + bump 0.2.0 → 0.2.1 +- [x] reinstall +- [x] verify listing рендерит полный description +- [x] save memory: `feedback_skill_description_yaml_colon_gotcha.md` (new) + cross-ref в `feedback_skill_description_length_limit.md` +- [x] close 🟢 + +## Notes +Step «открыть новую CC сессию → /skills» из исходного next_action был safety-net на случай если harness не подхватит auto. Auto-pickup сработал — verified в эту же сессию через системный skill-listing. diff --git a/skills/session-handoff/SKILL.md b/skills/session-handoff/SKILL.md index 974af04..7220772 100644 --- a/skills/session-handoff/SKILL.md +++ b/skills/session-handoff/SKILL.md @@ -1,7 +1,7 @@ --- name: session-handoff -version: 0.2.0 -description: Sliding handoff между CC сессиями через `.tasks/NEXT_SESSION.md`. Read on start (orient + ask user'а перед действиями), write on substantive-commit (prefix не meta/docs/style/chore + body>200 OR files>3; первый non-trivial commit сессии всегда) или session-end фразе («завершаем сессию», «сворачиваемся», «закругляемся», «wrap up session», «end session», «we're done for now»). Триггер-строка CLAUDE.md `session handoff: read on start, write on end`. Sliding overwrite — один файл, история через git log. Project-scope, никакого global state. НЕ триггерится на «закрываем эту таску», «pause», «отбой», «разбегаемся» — task-zone / non-session phrases. +version: 0.2.1 +description: "Sliding handoff between CC sessions via .tasks/NEXT_SESSION.md. Read on session start: orient agent, ask user before action. Write on session-end phrase or substantive commit. Session-end phrases: «завершаем сессию», «сворачиваемся», «закругляемся», «wrap up session», «end session», «we're done for now». Trigger-line in CLAUDE.md: `session handoff: read on start, write on end`. Skip task-zone phrases: «закрываем эту таску», «pause», «отбой», «разбегаемся»." --- # session-handoff