Files
claude-skills/.tasks/STATUS.md
vitya 3810945b59 meta(tasks): archive done batch 2026-05 → .archive/done-2026-05.md
STATUS.md 1467 → 239 lines (-84%), 70 → 11 active blocks.
Archive: 21 → 57 done blocks (full snapshot, replaces prior partial).

Перемещено 36 done-блоков из STATUS.md в .archive/done-2026-05.md
(uses-yt-tools cluster, tdd-criteria rollout, bootstrap fixes,
session-handoff cluster, using-vds-ops/using-synology-ops promo,
interns-grep-audit, recommend-dont-menu, project-creation-lifecycle,
project-discipline-brainstorm-workspaces).

Один heading-emoji flip: [bootstrap-fix-tdd-recommend-template] 🟢
(ship-commit aac9088 2026-05-07 был авторитативным,  heading stale;
duplicate **Next action** spec block stripped at the same time).

[tasks-board-cleanup-2026-05] остаётся  в STATUS.md — по NB таски,
её закрытие идёт следующим batch'ем, не в этом же коммите.
2026-05-25 07:20:18 +03:00

22 KiB
Raw Blame History

Task Board

Updated: 2026-05-25 (board-cleanup: done-блоки → .archive/done-2026-05.md, остались только активные)

🟡 [skill-readmes] — write English README.md for every skill + translate root README

Status: paused Where I stopped: infra-skill cluster done — READMEs for project-bootstrap, setup-wiki, setup-tasks, using-wiki, using-tasks; root README translated; cross-links between all five skills wired up Next action: continue with the next batch — suggest the caveman cluster (caveman, caveman-commit, caveman-review, caveman-help, caveman-compress, compress) since they form a coherent group; or jump to active-platform, find-skills, setup-context7, using-context7, using-markitdown if the caveman cluster needs deduplication first (see compress-dedup task) Branch: master


[install-ps1] — paired install.sh + install.ps1 (cross-platform parity, with --prune)

Status: ready Where I stopped: Verify 2026-05-07 (factory-context audit): (a) scripts/install.ps1 существует — кросс-платформа есть; (b) --prune flag отсутствует в обоих скриптах; (c) doc .wiki/concepts/install-cross-platform.md не написан. 1/3 acceptance — не закрывать.

Пересечение с [claude-skills-update-skill]: оба про install/build/prune trinity. Имеет смысл сделать вместе — --prune логику добавить в существующие install.{ps1,sh} параллельно с новыми update.{ps1,sh} (которые будут жить в том же scripts/). Doc install-cross-platform.md тогда покрывает всю четвёрку. Next action: (a) уже есть. Остаётся: (b) добавить --prune flag в scripts/install.ps1 и scripts/install.sh — для каждого имени в ~/.claude/skills/<name>/, отсутствующего в skills/<name>/, удалить (lesson из [compress-dedup]). (c) написать .wiki/concepts/install-cross-platform.md — документировать parity-инвариант (PS+bash сpan, identical behavior, paired flags, error semantics). Опционально: совместить с [claude-skills-update-skill] (см. её next_action). Branch: (not started)


[archive-roundtrip-test] — smoke-test for .skill archive shape

Status: ready Where I stopped: (not started) — caught the PowerShell-Compress-Archive backslash bug manually; a smoke-test would catch the next regression automatically Next action: add a script that builds dist/<name>.skill, unzips into a temp dir, and diff -r against skills/<name>/. Fail on any difference. Run from CI or pre-commit if we add one Branch: (not started)


🟡 [active-platform-eval] — eval-driven tuning of active-platform (description + body), absorbs [active-platform-tuning]

Status: paused Where I stopped: design doc complete (.wiki/concepts/active-platform-eval-design.md, ~150 lines); per-task file complete (.tasks/active-platform-eval.md); STATUS.md collapsed the two original tasks into this one block. Pre-flight verified: claude CLI on PATH at C:\nvm4w\nodejs\claude.ps1 (Claude Code 2.1.128); run_loop.py present at ~/.claude/plugins/cache/claude-plugins-official/skill-creator/unknown/skills/skill-creator/scripts/run_loop.py. Stopped right before eval-set authoring at user request — paused for asynchronous follow-up. No code touched, no tooling launched, no .tasks/active-platform-eval/ workspace dir created yet. Next action: resume by answering Q2 from the chat ("eval set — write 20 queries solo from current SKILL.md + concept-page open questions, or run skill-creator's HTML review template first for user-driven edits before kickoff?"), then (a) build .tasks/active-platform-eval/eval-set.json, (b) snapshot skill to .tasks/active-platform-eval/skill-snapshot/, (c) launch run_loop.py in background, (d) parallel manual body sweep, (e) apply changes + bump to 1.1.0 + rebuild + reinstall + final report + commit. Branch: master


[skills-grouping-revisit] — revisit flat vs grouped skills/ layout if count grows past ~30

Status: ready Where I stopped: (not started) — current 14 skills fit fine in flat skills/; threshold for revisiting is ~30 Next action: when triggered (skill count crosses threshold), evaluate variant B (grouped by family) vs variant C (flat + manifest) from the original brainstorm in .wiki/concepts/repo-layout.md Branch: (not started)


[hermes-converter-ci] — [deferred — после ручной валидации MVP] CI hook (Gitea-pipeline или GitHub-Action если зеркалим): на push to master запустить scripts/build-hermes.py, сравнить diff dist-hermes/, авто-коммит если изменения (или PR-шаблон). Цель — чтобы dist-hermes/ всегда матчил skills/+hermes/mapping.yaml+hermes/skills/ без ручного запуска build. Не блокирует MVP — первая итерация делается ручным запуском конвертера. Дизайн: .wiki/concepts/hermes-skills-rollout-design.md.

Status: ready Where I stopped: unblocked 2026-05-07 — hermes-mvp-coverage shipped в a003b80; MVP живой на фабрике. Next action: Выбрать платформу CI (Gitea Actions vs внешняя), написать workflow, прогнать тестовый push. Branch: master


[tdd-criteria-precommit-hook] — Optional pre-commit hook script that automates the bright-line checks from tdd-criteria Anti-loophole rules 1 and 4. Project owner opts in per-repo by symlinking / copying to .git/hooks/pre-commit (or via husky / lefthook integration if the project uses them).

Two checks (both bright-line, both fail-closed):

Check 1 — [skip-tdd: <category>] validation. If git diff --cached --name-only includes a *.ts / *.js / *.py / similar code file (excluding tests and Permissive-zoned paths like *.css / *.env* / *.md / *.yaml), require either:

  • A *.test.* / *.spec.* / test_*.py / similar file present in the same diff, OR
  • The commit subject (read from $1 arg, line 1 of $1 = msg path) matches \[skip-tdd: (visual|spike|oneshot|wrapper)\].

If neither holds → block with message:

TDD policy violation: code change without test or skip marker.
Add a test, or include [skip-tdd: <visual|spike|oneshot|wrapper>] in commit subject.
See claude-skills/.wiki/concepts/tdd-criteria-design.md for which category applies.

Check 2 — Test-modification audit ([test-modify] rule 4). Detect test-modifying changes in git diff --cached:

  • Removed line matching ^-\s*(expect|assert|assertThat|chai\.)\( (assertion deletion)
  • Added/removed lines that change argument values inside expect(...) / assert(...) calls
  • Added .skip / \.xit\b / @pytest\.mark\.skip / @Disabled / @Ignore annotations
  • Deleted it(...) / test(...) / def test_* definitions (matches ^-\s*(it|test|describe)\( or ^-def test_)

If any matched → require commit subject matches \[test-modify: [^:]+: was .+; is .+; reason: .+\]. Block otherwise with message:

Test-modification without [test-modify: ...] marker.
Required format: [test-modify: <name>: was <literal>; is <literal>; reason: <Z>]
The was/is must be the LITERAL assertion expressions, not paraphrased.
See tdd-criteria Anti-loophole rule 4.

ALSO: if git diff --cached --name-only includes both a test-pattern file AND an impl-pattern file → block:

Test changes must be in a separate commit from impl changes (tdd-criteria rule 4b).
Run: git reset HEAD <impl-files> && git commit (test-only) && git add <impl-files> && git commit (impl-only).

Implementation:

  • Bash script (single file). Cross-platform: works on Linux/macOS and on Windows under git-bash (which Claude/Hermes both already run on).
  • Path: ~/projects/claude-skills/scripts/tdd-criteria-precommit-hook.sh. Plus a Windows wrapper .ps1 that delegates if needed.
  • Tested on a real repo before commit (books is a good candidate — it has Jest tests + *.test.js convention).
  • Documented in claude-skills/.wiki/concepts/tdd-criteria-design.md «See also» section (already linked).

Activation pattern (per-repo):

# Symlink or copy the hook
ln -sf ~/projects/claude-skills/scripts/tdd-criteria-precommit-hook.sh \
       .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

Or via lefthook.yml / .husky/pre-commit if the project already uses one of those.

Out of scope:

  • Mutation testing (Stryker, mutmut) — separate heavyweight infra, not this hook.
  • Coverage gates — different mechanism, different cost/benefit.
  • Visual regression infra (Percy, Chromatic) — Permissive-5 acknowledges this is heavyweight; not bundled.
  • Auto-fixing the violation — hook only blocks; fix is human's job.

Why this is optional, not required by the SKILL.md:

The skill is policy that lives in claude-skills and gets pulled into agent context per project. The hook is enforcement that needs per-project setup. Some projects opt out of pre-commit hooks entirely (e.g. karu if it's pure CSS — no code surface to enforce). Forcing the hook into the skill would couple policy to tooling.

Bypass:

Pre-commit hooks have --no-verify. Per project-discipline Rule 4 («never skip hooks unless user explicitly asks») agents must not use --no-verify — but humans can in emergencies. Each --no-verify use should be self-flagged in the commit body («bypassed pre-commit because: ...»). Not enforceable by the hook itself; this is a higher-level audit.

Status: ready Where I stopped: (not started) Next action: Решить, нужен ли hook (он опционален) — если да, написать ~/projects/claude-skills/scripts/tdd-criteria-precommit-hook.sh по спеке в description, протестировать на books (Jest-конвенция *.test.js), задокументировать activation pattern. Если нет — закрыть как wontfix с пометкой что fence чисто социальная (commit subject visible в git log). Branch: master


[tasks-board-cleanup-2026-05] — Архивная чистка .tasks/STATUS.md: переместить все 🟢 done-блоки в .tasks/.archive/done-2026-05.md, оставить в STATUS.md только header + status legend + 🔴/🟡//🔵 блоки. Цель — разгрузить файл от исторического шума без потери data (git history + явный архивный файл для текстового поиска).

Предпосылка: на 2026-05-07 в claude-skills/.tasks/STATUS.md накопилось ~18+ 🟢 done-блоков (rolled out за 2026-04-25 — 2026-05-07: tdd-criteria-rollout, hermes-rollout, bootstrap-related, project-creation-lifecycle, recommend-dont-menu и т.д.). Convention в шапке файла говорит «🟢 Done — kept until merged», но проект работает на master-only (нет ветвления для merge), поэтому convention превратилась в «kept forever». Файл рос до ~600 строк / 26K токенов — Read-инструменты упираются в лимит.

После чистки STATUS.md остаётся только активный board (🔴/🟡//🔵 + closed [bootstrap-upgrade-canonical-triggers] если уже отработал). Архивный файл .tasks/.archive/done-2026-05.md сохраняет полный текст всех перемещённых блоков для grep-поиска и historical context.

Status: ready Where I stopped: Создана 2026-05-07. После rollout v1.10.0/1.10.1 на STATUS.md накопилось много свежих 🟢 (bootstrap-add-tdd-trigger, refresh-project-bootstrap closed-as-superseded, bootstrap-fix-tdd-recommend-template, bootstrap-upgrade-canonical-triggers если уже отработал). Хороший момент для batch-archive. Next action: 1) Прочитать .tasks/STATUS.md целиком (Read in chunks if needed). 2) Идентифицировать все блоки ## 🟢 [...] — разделители ---. 3) Создать .tasks/.archive/ директорию (если нет). 4) Записать .tasks/.archive/done-2026-05.md с шапкой:

# Archived — Done batch 2026-05

Перемещено из `.tasks/STATUS.md` 2026-05-07 в рамках board-cleanup. Полный список 🟢 done-тасок, шипанутых в апреле-мае 2026.

Полный source — git history `.tasks/STATUS.md` до commit X.

---

И подряд все 🟢-блоки в исходном виде.

  1. Edit .tasks/STATUS.md: убрать все 🟢-блоки + соседние --- разделители. Header + status legend + 🔴/🟡//🔵 блоки оставить. 6) Verify: grep '^## ' .tasks/STATUS.md | wc -l — было ~28+, должно остаться число активных (🔴+🟡++🔵, ожидание ~10-12). 7) Commit meta(tasks): archive done batch 2026-05 → .tasks/.archive/done-2026-05.md с body, описывающим какие группы перемещены (tdd-criteria, hermes, bootstrap, etc.) и итоговый count. 8) tasks_close.

NB: эта таска сама уйдёт в следующий cleanup batch (2026-06 или подобный), так что не пытаться её закрыть+архивировать в одном коммите. Branch: n/a


[using-synology-ops-review] — Skill-review checkpoint для using-synology-ops (промоушен 2026-05-12).

Источник дизайна: .workshop/.archive/2026-05-12-using-synology-ops-skill.md (process trace дискуссии Q1Q6) + .wiki/concepts/synology-ops-mcp-design.md в shared projects-wiki (canonical design самого MCP-сервера). Импл-таски: using-synology-ops-install, using-synology-ops-hermes-mapping, using-synology-ops-test-trigger.

Кто делает: не имплементер. Другая сессия / другой день / другой агент. Identity-not-location: ревьюер работает в любой папке, где есть доступ к файлам (см. .workshop/.wiki/concepts/workshop-architecture.md §5.1 если есть).

Поведенческий smoke-test (это и есть acceptance):

  • Скил активируется в чистой сессии на каждой триггер-фразе из description (русский И английский варианты — список в test-trigger таске).
  • Скил не активируется на 2-3 близких но не своих фразах из соседних доменов (false-positive check; список в test-trigger таске).
  • Каждый шаг секции Steps отрабатывает на тестовом буфере без ошибок (NB: после второго прохода body, см. ниже).
  • Failure modes уводят в abort, не в частичный успех с грязным состоянием.
  • What NOT to do соответствует реальности — нет дыры между правилом и реализацией.

Findings — обычные follow-up tasks (using-synology-ops-<gap>-fix или подобное) через tasks_create в claude-skills.

Закрытие: только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note.

NB по семверу: version: 0.1.0 записан промоутером. Дальнейшие инкременты — ответственность владельца claude-skills/, не этого скила и не ревьюера. Если ревью требует правок — правит владелец, бампит он же.

NB по body: на момент создания таски body SKILL.md — пустой каркас (When to use / Inputs / Steps / Failure modes / Side effects / What NOT to do все пустые). Второй проход «доведём using-synology-ops» дописывает их глазами из archive + concepts/synology-ops-mcp-design.md. Если этот проход не сделан до review — close-note: "skill каркас, body пустой, перенесите review", это не findings.

Status: ready Where I stopped: (not started — baseline-таски все 🟢 на 2026-05-12, version теперь 0.1.1, body всё ещё <пусто> stub) Next action: Ревьюер: прогнать поведенческий smoke-test в чистой main-сессии (subagent fire-test уже сделан имплементером — см. close-note test-trigger; нужен gold-standard прогон). Body пустой → по NB-правилу: "skill каркас, body пустой, перенесите review" или закрыть с findings про body-gap. Findings → follow-up tasks через tasks_create. Branch: n/a


[using-vds-ops-description-length-investigate] — Investigate description length vs MEMORY ≤900 char limit. Drift between memory feedback и реальным harness behavior?

Observed (2026-05-21, fresh-eyes review of using-vds-ops): description field в skills/using-vds-ops/SKILL.md = 1473 chars. MEMORY entry feedback_skill_description_length_limit.md декларирует «hard limit ~1024 chars; превышение → harness тихо отбрасывает description и подставляет H1; держать ≤900 chars». При этом 7/7 behavioral smoke-test PASSED, и hermes/mapping.yaml корректно обрабатывает скил с этим description — empirically работает.

Гипотезы:

  • (a) Harness limit увеличился / снят — memory note устарел. Проверить current behavior в available-skills listing: full description vs H1-fallback.
  • (b) Limit зависит от downstream consumer (Claude vs Gemini vs Copilot). VDS skill пока тестировался только на CC — может Gemini его дропнет.
  • (c) MEMORY note был paranoid — реальный limit выше, но best-practice держать ≤900 всё равно (compression discipline).

Acceptance:

  • Замер реального текущего harness limit (написать тестовый skill с известной длиной description, инкрементировать, смотреть когда listing fallback'нет).
  • Обновить или удалить MEMORY entry feedback_skill_description_length_limit.md в зависимости от результата.
  • Если limit реально низкий — открыть using-vds-ops-description-compress follow-up (compress 1473 → ≤900 без потери triggers).

Status: ready Where I stopped: (not started) Next action: написать пустой skill skills/.test-description-length/SKILL.md с description progressively dlinning, прогонять /reload-plugins, смотреть харнес listing. Document findings → update memory. Branch: (not started)


[using-synology-ops-disambiguation-uplift] — Add explicit disambiguation clause to using-synology-ops description (sibling parity with using-vds-ops).

Observed (2026-05-21, fresh-eyes review of using-vds-ops): VDS skill description содержит explicit clause Disambiguation: traefik exists on both VDS and NAS — ask «на VDS или на NAS?» before tool call when ambiguous. NAS skill (using-synology-ops) такого clause не имеет, хотя проблема симметричная — traefik есть на обоих хостах.

Acceptance:

  • skills/using-synology-ops/SKILL.md description обновлён: добавить mirror-clause «Disambiguation: traefik exists on both NAS and VDS — ask "на NAS или на VDS?" before tool call when ambiguous.»
  • bump version (PATCH — wording / clarity без поведенческого изменения).
  • scripts/install.ps1 -Names using-synology-ops пройден.
  • Behavioral smoke-test на двух новых сессиях: «traefik unhealthy» в чистой сессии должна вызвать disambiguation, не silent activation одного скила.

Status: ready Where I stopped: (not started) Next action: edit SKILL.md description + version bump + reinstall + smoke. Заодно посмотреть нет ли других shared names (portainer? postgres — где он живёт?). Branch: (not started)