806 lines
76 KiB
Markdown
806 lines
76 KiB
Markdown
# Task Board
|
||
_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
|
||
.tasks/<task-slug>.md (created by using-tasks when a task becomes active
|
||
or paused). Historical Done entries dropped — git log is the history.
|
||
|
||
Status legend:
|
||
🔴 Active — only one at a time
|
||
🟡 Paused — in progress, resumable
|
||
⚪ Ready — defined, not started
|
||
🟢 Done — kept until merged
|
||
🔵 Blocked — waiting on external input
|
||
-->
|
||
|
||
## ⚪ [using-yt-tools-rate-limit-guard] — Add explicit "don't batch requests at YouTube" rule to `skills/using-yt-tools/SKILL.md` (avoid HTTP 429 IP-block).
|
||
|
||
**Эмпирика (2026-05-31, modulair-wiki ingest, DESKTOP).** Владелец кинул подборку из 10 YouTube URL. Агент выстрелил залпом ~21 запрос подряд: `yt-dlp --dump-json` ×10 (метаданные — прошли) + `yt-transcript` ×10 (transcript-api). Первый transcript-вызов достучался (вернул список языков), **со второго пошёл `HTTP 429 / "YouTube is blocking requests from your IP"`**. Блок IP-wide и держится минутами — упёрлись **оба** пути: `youtube-transcript-api` (yt-transcript) И `yt-dlp` timedtext-subtitle endpoint (метаданные при этом ещё проходили, а субтитры — нет). Что разблокировало: ~4-мин cooldown + запросы **по одному** с паузами 25–35с + ранний abort если первый не прошёл (чтобы не жечь cooldown впустую).
|
||
|
||
Второй, смежный баг той же сессии: `yt-transcript` по умолчанию просит `--lang en` и **промахивается мимо ручных `en-US` субтитров** (видео с manually-created `en-US` и без `en` отдаёт "no transcript"). Лечится `--lang en-US,en` (или вообще автоопределением).
|
||
|
||
**Что добавить в SKILL.md:**
|
||
|
||
1. **What NOT to do** — новый буллет: «**Не пулять в YouTube пачкой запросов.** Несколько URL подряд (или metadata+transcript залпом) → `HTTP 429`, IP-block на минуты, бьёт оба пути (transcript-api и yt-dlp). Обрабатывай по одному, с паузой ≥25–35с между; при пакете из N URL — последовательно, не параллельно. Если уже словил 429 — cooldown ~3–5 мин перед повтором, проверяй первый запрос и не продолжай залп если он упал.»
|
||
|
||
2. **Failure modes** — новая строка: симптом `HTTP 429 Too Many Requests` / `"blocking requests from your IP"` → причина: слишком много запросов подряд (rate-limit, не приватность/регион) → действие: cooldown + по одному с паузами; НЕ retry в цикле без задержки. Отличать от `yt-dlp source download failed` (это реальная недоступность видео).
|
||
|
||
3. (опц.) **Inputs / Flow A** — упомянуть `--lang en-US,en` как дефолт-страховку для ручных не-`en` субтитров (видео NE/прочие с `en-US`-only).
|
||
|
||
**Bump:** PATCH (поверхностное расширение guidance, не breaking).
|
||
**TDD:** не применим (markdown-документ). Behavioral-смок опционален: «дай 5 URL» → агент обрабатывает последовательно с паузами, не залпом.
|
||
**Дисциплина:** после правки — bump version в frontmatter, commit `feat(using-yt-tools): rate-limit guard (no-batch) vX.Y.Z`; install/hermes-mapping/push — отдельно, как в прошлых yt-tools-тасках (для PATCH достаточно reload-plugins).
|
||
|
||
**Weight:** needs-human
|
||
**Status:** ready — **RE-SCOPED 2026-06-08:** исходный таргет `skills/using-yt-tools/SKILL.md` устарел — это deprecated inert stub (v0.4.1), канонический контент мигрировал в **plugin-репо `OpeItcLoc03/yt-tools`** (v0.6.0), там же живут секции, на которые ссылается задача (вкл. буллет «Не retry на yt-dlp failures» для расширения). Правило по-прежнему нужно — но вносить его в plugin-репо, не в stub. (Находка автономного агента 2026-06-08; consult по «какой репо править» → halt при `consult_policy=human-only`; decision-trail в per-task файле.)
|
||
**Where I stopped:** (not started в правильном репо) — баг и фикс зафиксированы по живой сессии 2026-05-31; правка отложена в задачу (владелец просил не лезть в глобальный скил из проекта modulair-wiki).
|
||
**Next action:** В репо `OpeItcLoc03/yt-tools` (plugin) открыть его SKILL.md, внести пункты 1–3 (rate-limit guard), bump PATCH, commit. Свериться с существующим «Не retry на yt-dlp failures» — расширить его, а не плодить дубль. (НЕ править claude-skills stub.)
|
||
**Branch:** master
|
||
<!-- created-by: vitya@DESKTOP / from: modulair-wiki ingest session / 2026-05-31 -->
|
||
<!-- re-scoped: vitya@.admin-exec / 2026-06-08 / target moved claude-skills stub → OpeItcLoc03/yt-tools plugin (agent finding during always-on dry-run) -->
|
||
|
||
---
|
||
|
||
## 🟡 [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:** done
|
||
**Where I stopped:** All 3 acceptance items shipped 2026-05-25. (a) `scripts/install.ps1` existed pre-task. (b) `--prune` / `-Prune` flag added in commit `6cf0e98` (paired sh + ps1; combined-flag pattern; global-scan; default off; smoke-tested on disposable target dirs against fake stale skills). (c) Concept page `.wiki/concepts/install-cross-platform.md` written this commit: parity contract, --prune design choices, rejected alternatives, scope vs build/.skill prune.
|
||
**Next action:** (none — kept until merged)
|
||
**Branch:** master
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-25 / 3/3 acceptance met; build-script analogue for dist/.skill prune remains separate concern -->
|
||
|
||
---
|
||
|
||
## 🟢 [install-ps1-build-prune-followup] — Add matching `--prune` flag to `scripts/build.{sh,ps1}` for `dist/<name>.skill` artefacts (analogue of install-script prune).
|
||
**Status:** done
|
||
**Where I stopped:** Shipped 2026-05-25. `--prune` / `-Prune` added to both `build.sh` and `build.ps1`. Bash arg-parses out `--prune` from positionals, runs prune at the end of the script against `dist/*.skill` (works regardless of which build branch executed — zip-path or powershell.exe delegation). PS `-Prune` switch runs after the build loop. Same default-off / global-scan / print-and-delete pattern as install-side. Smoke-tested with fake `dist/fake-stale-{sh,ps}.skill` files against real `dist/` — both paths pruned correctly without touching real archives. `[skip-tdd: wrapper]` carve-out applies. Wiki page `.wiki/concepts/install-cross-platform.md` extended with new "Build-side --prune" section + scope note that `dist-hermes/` is separate. Index + log updated.
|
||
**Next action:** (none — kept until merged)
|
||
**Branch:** master
|
||
<!-- created-by: vitya@DESKTOP-NSEF0UK / 2026-05-25 / origin: [install-ps1] close — natural extension to build scripts -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-25 / acceptance: bash + PS prune ✅; smoke-test ✅; wiki extended ✅ -->
|
||
|
||
---
|
||
|
||
## ⚪ [archive-roundtrip-test] — smoke-test for .skill archive shape
|
||
**Weight:** needs-human
|
||
**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
|
||
**Weight:** needs-human
|
||
**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`.
|
||
|
||
**Weight:** needs-human
|
||
**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
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .meeting-room / 2026-05-06T20:21:57.210Z -->
|
||
|
||
---
|
||
|
||
## ⚪ [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):**
|
||
```bash
|
||
# 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.
|
||
|
||
**Weight:** needs-human
|
||
**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
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .meeting-room / 2026-05-07T05:10:28.610Z -->
|
||
|
||
---
|
||
|
||
## ⚪ [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.
|
||
|
||
**Weight:** needs-human
|
||
**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` с шапкой:
|
||
|
||
```markdown
|
||
# Archived — Done batch 2026-05
|
||
|
||
Перемещено из `.tasks/STATUS.md` 2026-05-07 в рамках board-cleanup. Полный список 🟢 done-тасок, шипанутых в апреле-мае 2026.
|
||
|
||
Полный source — git history `.tasks/STATUS.md` до commit X.
|
||
|
||
---
|
||
```
|
||
|
||
И подряд все 🟢-блоки в исходном виде.
|
||
|
||
5) 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
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: meeting-room / 2026-05-07T09:43:23.919Z -->
|
||
|
||
---
|
||
|
||
## 🟢 [using-synology-ops-review] — Skill-review checkpoint для using-synology-ops (промоушен 2026-05-12).
|
||
|
||
**Status:** done (wontfix)
|
||
**Where I stopped:** Closed 2026-05-25 — Synology NAS decommissioned permanently. Skill `using-synology-ops` is now dead-code candidate (full retire tracked separately). Review acceptance criteria (behavioral smoke-test, Steps behavior, Failure modes, What NOT to do) have no target — both the underlying MCP server (`opsmcp.kzntsv.site`) and the host fleet (modulair-* containers) are gone.
|
||
**Next action:** (none — closed as wontfix; full skill retire is a separate task)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-12T16:22:03.380Z -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-25 / wontfix: NAS decommissioned -->
|
||
|
||
---
|
||
|
||
## 🟢 [using-vds-ops-description-length-investigate] — Investigate description length vs MEMORY ≤900 char limit. Drift between memory feedback и реальным harness behavior?
|
||
|
||
**Status:** done (wontfix — empirical close)
|
||
**Where I stopped:** Closed 2026-05-25. Empirical evidence sufficient: `using-vds-ops` description = 1473 chars activates correctly (7/7 behavioral smoke-test PASSED, harness listing shows full description, hermes/mapping.yaml processes it fine). MEMORY note `feedback_skill_description_length_limit.md` was paranoid — actual limit either raised or never as tight as feared. Hypothesis (c) confirmed. No need for systematic measurement — investigation cost > information value.
|
||
**Side effect:** Memory entry `feedback_skill_description_length_limit.md` deleted same commit (no longer load-bearing). YAML colon-space gotcha memory (`feedback_skill_description_yaml_colon_gotcha.md`) kept — different concern, still valid.
|
||
**Next action:** (none — closed)
|
||
**Branch:** n/a
|
||
<!-- created-by: vitya@DESKTOP-NSEF0UK / 2026-05-21 / origin: [using-vds-ops-review] fresh-eyes subagent informational note #1 -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-25 / wontfix: empirically 1473 chars works, memory note was paranoid; entry deleted -->
|
||
|
||
---
|
||
|
||
## 🟢 [using-synology-ops-disambiguation-uplift] — Add explicit disambiguation clause to `using-synology-ops` description (sibling parity with `using-vds-ops`).
|
||
|
||
**Status:** done (wontfix)
|
||
**Where I stopped:** Closed 2026-05-25 — Synology NAS decommissioned, no longer in fleet. Disambiguation between NAS / VDS for shared container names (`traefik` etc.) is moot when only VDS exists. Acceptance criteria no longer have a target.
|
||
**Next action:** (none — closed as wontfix)
|
||
**Branch:** n/a
|
||
<!-- created-by: vitya@DESKTOP-NSEF0UK / 2026-05-21 / origin: [using-vds-ops-review] fresh-eyes subagent informational note #2 -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-25 / wontfix: NAS decommissioned; sibling skill using-synology-ops itself is now a retirement candidate — see follow-up question -->
|
||
|
||
## 🟢 [using-yt-tools-listen-skill-update] — Расширить `skills/using-yt-tools/SKILL.md` поддержкой нового CLI `yt-listen` (audio/FFT analysis).
|
||
|
||
**Дизайн-контекст:**
|
||
- Спецификация: `mcp__projects-meta__knowledge_get` slug `concepts/yt-tools-audio` в `OpeItcLoc03/common`.
|
||
- Process trace: `~/projects/.workshop/.archive/2026-05-25-yt-tools-audio.md`.
|
||
- Текущий SKILL.md (v0.3.x): уже триггерится на YouTube URL + transcript/frames; расширить аудио-триггерами и iterative-флоу.
|
||
|
||
**Изменения в SKILL.md:**
|
||
|
||
1. **`description` frontmatter** — добавить аудио-семантику без раздувания (existing description уже длинноват, аккуратно):
|
||
- Новые триггеры: «послушай момент N», «BPM/тональность/гармония видео», «спектрограмма», «что в музыке на T», «listen to fragment», «analyze audio».
|
||
|
||
2. **Steps section** — расширить iterative-флоу:
|
||
- Для музыкальных URL: `yt-transcript` опциональный (если captions есть), `yt-listen --timestamps T1,T2,...` primary.
|
||
- Output: per timestamp — `clip_TTTT.wav` + `spectrum_TTTT.png` + `features_TTTT.md`.
|
||
- Агент Read'ом получает spectrum.png (vision) + features.md (числа).
|
||
- Помнить: spectrum image-only недостаточен; всегда читать features.md в паре (Dixit et al., arXiv 2411.12058).
|
||
|
||
3. **What NOT to do** — точечная защита от scope creep:
|
||
- НЕ вызывать Whisper на смешанной музыке (без source-separation = мусор). Если user просит lyrics из музыки — сказать что это отдельный pipeline (Demucs + Whisper), out of scope.
|
||
- НЕ интерпретировать spectrum-PNG без features.md.
|
||
|
||
4. **Step 0 probe** — добавить проверку `yt-listen` в существующую цепочку (PATH → pipx-shim → legacy venv).
|
||
|
||
**Bump:** PATCH (0.3.x → 0.3.(x+1)) — поверхностное расширение, не breaking.
|
||
|
||
**TDD-mode:** `claude-skills` имеет `follow tdd-criteria` в CLAUDE.md, но это markdown-документ (SKILL.md), не код — TDD не применим. Behavioral smoke-test покрывается отдельной таской `using-yt-tools-listen-test-trigger`.
|
||
|
||
**Status:** done
|
||
**Where I stopped:** shipped (fd8a382, NOT pushed per task instruction). SKILL.md v0.3.1 → v0.3.2 PATCH. Изменения: (1) description frontmatter — добавлены audio-триггеры (BPM/тональность/гармония/спектрограмма/listen to fragment/analyze audio); (2) "Three flows" + новый Flow C — audio-analysis под "When to use"; (3) Step 0 probe расширен — yt-listen в install-set (5 binaries вместо 4) + диагностика "только yt-frames без yt-listen = старый 0.1.x"; (4) Inputs-table добавлена Flow C row (--duration, --mode interval, --no-wav, --no-spectrogram, --linear, --chroma, --sample-rate); (5) Steps добавлена "### Flow C — audio-analysis" секция с pipeline-шагами и stdout-контрактом; (6) What NOT to do: точечная защита от Whisper-on-mixed-music (Demucs+Whisper отдельный pipeline, out of scope) + правило "spectrum-PNG только в паре с features.md" (VLM ~50-60% Dixit et al. arXiv 2411.12058). Install.sh не запускался, hermes/mapping.yaml не правился, push отложен (test-trigger разблокирован, но требует чистой сессии).
|
||
**Next action:** (none — kept until merged)
|
||
2. Прочитать `concepts/yt-tools-audio` из global wiki + workshop archive.
|
||
3. Открыть `skills/using-yt-tools/SKILL.md`.
|
||
4. Внести изменения по 4 пунктам выше.
|
||
5. Bump version в frontmatter (PATCH).
|
||
6. Commit: `feat(using-yt-tools): add yt-listen support (audio/FFT) v0.3.<x+1>`.
|
||
7. **НЕ запускать install.sh, НЕ делать push, НЕ править hermes/mapping.yaml** — `install` и `hermes-mapping` идут отдельными скил-baseline-тасками (создадутся если/когда понадобятся; для PATCH update обычно достаточно reload-plugins).
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-25T09:51:08.193Z -->
|
||
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-05-25T10:38:20.156Z / note: shipped (fd8a382, NOT pushed per task instruction). SKILL.md v0.3.1 → v0.3.2 PATCH. Изменения: (1) description frontmatter — добавлены audio-триггеры (BPM/тональность/гармония/спектрограмма/listen to fragment/analyze audio); (2) "Three flows" + новый Flow C — audio-analysis под "When to use"; (3) Step 0 probe расширен — yt-listen в install-set (5 binaries вместо 4) + диагностика "только yt-frames без yt-listen = старый 0.1.x"; (4) Inputs-table добавлена Flow C row (--duration, --mode interval, --no-wav, --no-spectrogram, --linear, --chroma, --sample-rate); (5) Steps добавлена "### Flow C — audio-analysis" секция с pipeline-шагами и stdout-контрактом; (6) What NOT to do: точечная защита от Whisper-on-mixed-music (Demucs+Whisper отдельный pipeline, out of scope) + правило "spectrum-PNG только в паре с features.md" (VLM ~50-60% Dixit et al. arXiv 2411.12058). Install.sh не запускался, hermes/mapping.yaml не правился, push отложен (test-trigger разблокирован, но требует чистой сессии). -->
|
||
|
||
---
|
||
|
||
## 🟢 [using-yt-tools-listen-test-trigger] — Behavioral smoke-test для расширения `using-yt-tools` под `yt-listen`. Без TDD per-se (это смок поверх готового), но включает explicit before-after evidence — что без скила агент не вызывает `yt-listen` на новых триггерах, а с обновлённым скилом — вызывает корректно.
|
||
|
||
**Дизайн-контекст:** см. `concepts/yt-tools-audio` (target=`OpeItcLoc03/common`) — какие триггеры обязательны, какой output ожидаем.
|
||
|
||
**TDD-mode (per `claude-skills` `follow tdd-criteria`):** для behavioral skill-теста applicable интерпретация — **write expectations first, then verify**. Тест-сценарии сформулировать ДО запуска агента, не подгонять под наблюдаемое поведение.
|
||
|
||
**Acceptance (test scenarios):**
|
||
|
||
1. **Trigger activation positive (минимум 4 фразы):**
|
||
- «послушай момент 2:30 в этом ролике <URL>» → агент вызывает `yt-listen URL --timestamps 2:30`.
|
||
- «какой BPM в <URL>» → `yt-listen URL` (без timestamp = bulk-mode hint или quick-default).
|
||
- «listen to fragment at 1:15 <URL>» → `yt-listen URL --timestamps 1:15`.
|
||
- «спектрограмма видео <URL>» → `yt-listen --timestamps` с хотя бы одним таймкодом (агент должен выбрать sensible default или спросить).
|
||
|
||
2. **Trigger activation negative (3 близкие, но не свои):**
|
||
- «расшифруй видео <URL>» → `yt-transcript`, НЕ `yt-listen`.
|
||
- «покажи кадр на 1:23 <URL>» → `yt-frames`, НЕ `yt-listen`.
|
||
- «о чём этот ролик <URL>» → `yt-transcript` + summary, НЕ `yt-listen` (нет музыкального контекста).
|
||
|
||
3. **What-NOT-to-do compliance:**
|
||
- User: «дай lyrics из <музыкальный URL>» → агент НЕ должен вызывать Whisper / `yt-transcribe-music`; должен объяснить что это отдельный pipeline (Demucs + Whisper), out of scope `yt-listen`.
|
||
|
||
4. **E2E против реального URL** (короткий музыкальный клип, e.g. 1-минутный royalty-free track):
|
||
- `yt-listen URL --timestamps 0:30 --duration 10s` создаёт 3 артефакта в `./yt-cache/<vid>/audio/`.
|
||
- `features_0030.md` содержит BPM, key, хотя бы одну строку chord progression, RMS, spectral centroid.
|
||
- `spectrum_0030.png` валиден (открывается, ~1024×384, mel-scale читаема).
|
||
|
||
**Закрытие:** все 4 группы зелёные, findings — отдельные follow-up tasks через `tasks_create` если есть.
|
||
|
||
**Status:** done
|
||
**Where I stopped:** behavioral 8/8 ✅ (4 pos→yt-listen, 3 neg-route→transcript/frames, 1 W-NOT-do→Demucs+Whisper pointer); E2E content 5/5 ✅ (BPM 113.5, Key G# Minor, chord G#→D#, RMS 0.14/0.22, centroid 2882 Hz; PNG 1024×384 mel+log+viridis vision-checked); naming divergence + PATH-shim gap → follow-ups: OpeItcLoc03/common slug=yt-listen-naming-align, claude-skills slug=using-yt-tools-listen-path-shim-investigate
|
||
**Next action:** (none — kept until merged)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-25T09:51:38.340Z -->
|
||
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-05-25T12:36:06.299Z / note: behavioral 8/8 ✅ (4 pos→yt-listen, 3 neg-route→transcript/frames, 1 W-NOT-do→Demucs+Whisper pointer); E2E content 5/5 ✅ (BPM 113.5, Key G# Minor, chord G#→D#, RMS 0.14/0.22, centroid 2882 Hz; PNG 1024×384 mel+log+viridis vision-checked); naming divergence + PATH-shim gap → follow-ups: OpeItcLoc03/common slug=yt-listen-naming-align, claude-skills slug=using-yt-tools-listen-path-shim-investigate -->
|
||
|
||
---
|
||
|
||
## 🟢 [using-yt-tools-listen-path-shim-investigate] — SKILL.md Prerequisites/Invoke pattern рекомендует `$HOME\.local\bin\yt-dlp.exe` — на DESKTOP-NSEF0UK даёт `SRE module mismatch` (uv-managed cpython-3.12 corrupt). Working path = `$HOME\pipx\venvs\yt-tools\Scripts`. Источник: E2E E1 в `using-yt-tools-listen-test-trigger` STEP 5 — default invoke упал, ручной prepend venv Scripts dir починил. Решить: shim-corruption local или systemic gap в SKILL.
|
||
|
||
**Status:** done (wontfix — machine-local transient)
|
||
**Where I stopped:** Closed 2026-05-25. SRE не воспроизводится. На машине обнаружены три yt-dlp: (a) `Python313\Scripts\yt-dlp.exe` (system pip, первый на PATH), (b) `~\.local\bin\yt-dlp.exe` (uv tool install → uv-managed Python 3.14.3), (c) `~\pipx\venvs\yt-tools\Scripts\yt-dlp.exe` (pipx-bundled с yt-tools, Python 3.12.13). Все три отвечают `--version` exit 0. Все три интерпретатора (3.12.13/3.13.13/3.14.3) импортят `re` без SRE error. Shim'ы `yt-listen.exe` в `.local/bin` и pipx venv — байт-идентичны (SHA256 match). Диагноз task'и «uv-managed cpython-3.12 corrupt» вероятно misdiagnosis — реальный виновник на момент smoke-test был `Python313\Scripts\yt-dlp.exe` (первый на PATH). uv с тех пор апгрейднулся 3.12 → 3.14.3, что независимо могло залечить состояние. SKILL.md "Locating binaries" уже имеет корректную fallback chain (PATH → `~/.local/bin` → legacy venv); прописывать `$HOME\pipx\venvs\yt-tools\Scripts` приоритетным не нужно.
|
||
**Next action:** (none — closed as wontfix; если рекуррент на другой машине — root-cause вероятно corrupt system-Python `_sre.pyd`, не SKILL gap)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/claude-skills / 2026-05-25T12:35:52.467Z -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-25 / wontfix: SRE не воспроизводится; три yt-dlp на машине (Python313 system / uv / pipx-bundled), все работают; shim'ы byte-identical; SKILL.md уже корректна -->
|
||
|
||
---
|
||
|
||
## ⚪ [meta-host-routing-install] — Установить новый скил `meta-host-routing` v0.1.0 (закоммичен локально a7526d1, ещё не установлен — потому не триггерит).
|
||
|
||
Запустить `install.sh` в `~/projects/claude-skills/`, проверить что скил активируется в новой сессии, `/reload-plugins`.
|
||
|
||
**Weight:** needs-human
|
||
**Status:** ready
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Запустить install.sh, открыть новую CC-сессию, убедиться что meta-host-routing в available-skills, /reload-plugins.
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-27T06:51:20.306Z -->
|
||
|
||
---
|
||
|
||
## ⚪ [meta-host-routing-hermes-mapping] — Добавить запись `meta-host-routing` в `~/projects/claude-skills/hermes/mapping.yaml`.
|
||
|
||
Режим: **pending** (не auto) — скил трогает инструменты/окружение (projects-meta MCP: tasks_create/knowledge_ingest/meta_status), требует отдельного hermes-аудита перед auto-promotion.
|
||
|
||
**Weight:** needs-human
|
||
**Status:** ready
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Добавить entry meta-host-routing в hermes/mapping.yaml с mode: pending; зафиксировать что причина — tool-touching скил.
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-27T06:51:27.010Z -->
|
||
|
||
---
|
||
|
||
## ⚪ [meta-host-routing-test-trigger] — Прогнать триггер-фразы `meta-host-routing` из description на тестовом сценарии.
|
||
|
||
**Должен активироваться:** «project not in cache» от projects-meta; промоушен/таски для проекта с github-remote; «заведи таски в <github-проект>», «промоутни <github-проект>».
|
||
**НЕ должен (false-positive check):** обычный Gitea-проект уже в projects-meta (прямой маршрут); 2-3 близкие фразы из соседних доменов (using-projects-meta query, обычный tasks_create в known-проект).
|
||
|
||
**Weight:** needs-human
|
||
**Status:** ready
|
||
**Where I stopped:** (not started)
|
||
**Next action:** В чистой сессии прогнать активацию на своих фразах И убедиться что не фаерит на 2-3 чужих близких; зафиксировать результат.
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-27T06:51:35.089Z -->
|
||
|
||
---
|
||
|
||
## 🔵 [meta-host-routing-review] — Skill-review checkpoint для meta-host-routing (промоушен 2026-05-27).
|
||
|
||
**Источник дизайна:** `~/projects/.workshop/.archive/2026-05-10-meta-out-of-repo.md` (правило) + причина создания в `.workshop/.wiki/log.md` (2026-05-27).
|
||
**Импл-таски:** meta-host-routing-install, -hermes-mapping, -test-trigger.
|
||
|
||
**Кто делает:** НЕ имплементер. Другая сессия / агент.
|
||
|
||
**Поведенческий smoke-test (acceptance):**
|
||
- Активируется на каждой триггер-фразе из description (RU/EN).
|
||
- НЕ активируется на близких чужих фразах (known-Gitea-проект → прямой маршрут).
|
||
- Steps отрабатывают: detect (github remote / not-in-cache) → resolve meta-host (grep .common) → route. На реальном кейсе yt-tools резолвит `.common`.
|
||
- Failure modes уводят в STOP+ask (no host found / multiple hosts), не в гадание.
|
||
- What NOT to do соответствует реальности.
|
||
|
||
NB: написан целиком в обход workshop-promote skeleton-флоу (по решению user'а), потому тело уже заполнено — ревью проверяет содержание, не пустой каркас.
|
||
|
||
Findings → follow-up tasks в claude-skills.
|
||
|
||
**Закрытие:** когда findings зафайлены ИЛИ «нет findings» в close-note. Семвер дальше — владелец claude-skills.
|
||
|
||
**Status:** blocked
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Дождаться 🟢 у 3 baseline-тасок. Прогнать поведенческий smoke-test. Findings → follow-up tasks.
|
||
**Blocker:** impl-tasks: meta-host-routing-install, meta-host-routing-hermes-mapping, meta-host-routing-test-trigger
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-27T06:51:48.622Z -->
|
||
|
||
---
|
||
|
||
## 🟢 [private-dev-public-publish-install] — [skill private-dev-public-publish, baseline 1/3] Установить скил. Запустить `install.sh` в `~/projects/claude-skills/`, проверить что скил активируется в новой сессии (триггер-фразы из description), сделать `/reload-plugins`. Skeleton-коммит: 63eab18. NB: тело скила пока пустой каркас (Steps/Failure modes/… не заполнены) — это нормально для install (description достаточно для активации); тело дописывается вторым проходом «доведём private-dev-public-publish».
|
||
|
||
**Status:** done
|
||
**Where I stopped:** Установлен 2026-05-29 через `install.ps1 -Names private-dev-public-publish` (Windows) → `~/.claude/skills/private-dev-public-publish/SKILL.md`. Подтверждено: скил появился в available-skills прямо в этой сессии (харнес подхватил без явного /reload-plugins).
|
||
**Next action:** (none — done; настоящий behavioral-тест активации = задача -test-trigger в чистой сессии)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-29T09:45:22.748Z -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-29 / installed via install.ps1; visible in available-skills this session -->
|
||
<!-- amg-handoff: 2026-05-29 / Claude — install verified by skill appearing in available-skills mid-session -->
|
||
|
||
---
|
||
|
||
## 🟢 [private-dev-public-publish-hermes-mapping] — [skill private-dev-public-publish, baseline 2/3] Добавить запись в `~/projects/claude-skills/hermes/mapping.yaml`. **Режим: pending** (НЕ auto) — скил не чисто стилевой: его Steps трогают git/gh/Gitea-API, токены, force-push, удаление/приватность репо. Требует отдельного аудита перед auto-режимом.
|
||
|
||
**Status:** done
|
||
**Where I stopped:** Запись добавлена в `hermes/mapping.yaml` (секция pending — behavioral audit required), `mode: pending` + `intended: {mode: auto, category: software-development}` + reason про git/gh/Gitea-API/токены/force-push/приватность. Стиль зеркалит using-vds-ops/session-handoff. version маппинга не бампал — schema-версия, не контент.
|
||
**Next action:** (none — done; перевод pending→auto только после аудита tool-side эффектов, гейт = -test-trigger + review)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-29T09:45:29.551Z -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-29 / mapping entry added, mode:pending, intended auto/software-development -->
|
||
|
||
---
|
||
|
||
## 🟢 [private-dev-public-publish-test-trigger] — [skill private-dev-public-publish, baseline 3/3] Прогнать триггер-фразы из description на тестовом буфере: убедиться что активируется на СВОИХ фразах («опубликовать форк на гитхаб», «приватный гитеа публичный гитхаб», «publish a fork without exposing dev history», «curated publish to github») И НЕ активируется на 2-3 близких чужих (false-positive check): напр. «инициализируй проект» (→ project-bootstrap), «запушь на гитхаб» (обычный push, не публикация форка), «настрой приватный репо» (без upstream/публикации).
|
||
|
||
**Status:** done
|
||
**Where I stopped:** Прогнано 2026-05-29 через 7 параллельных clean-context субагентов (каждый — свежий контекст, прокси чистой сессии; имплементер прайменный). Результат: 4/4 positive → private-dev-public-publish ✅; 3/3 negative мимо (инициализируй→project-bootstrap, запушь→project-discipline push-gate, настрой приватный репо→project-bootstrap) ✅. Ноль false-positive. Findings нет — description хорошо отскоплен.
|
||
**Next action:** (none — done; clean pass, follow-up не требуется)
|
||
**Blocker:** (cleared)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-29T09:45:38.735Z -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-29 / 4/4 pos + 3/3 neg clean, no false-positive, no findings (subagent clean-context proxy) -->
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-29T09:45:38.735Z -->
|
||
|
||
---
|
||
|
||
## 🟢 [private-dev-public-publish-review] — Skill-review checkpoint для private-dev-public-publish (промоушен 2026-05-29).
|
||
|
||
**Источник дизайна:** .workshop/.archive/2026-05-29-skill-private-dev-public-publish.md.
|
||
**Импл-таски:** private-dev-public-publish-{install, hermes-mapping, test-trigger}.
|
||
**Предусловие:** второй проход дописал тело каркаса (Steps/Failure modes/Side effects/What NOT to do) из архива — иначе поведенческий smoke-test нечего проверять.
|
||
|
||
**Кто делает:** НЕ имплементер. Другая сессия / другой агент. Identity-not-location.
|
||
|
||
**Поведенческий smoke-test (acceptance):**
|
||
- Активируется в чистой сессии на каждой триггер-фразе description (RU И EN).
|
||
- НЕ активируется на 2-3 близких чужих (project-bootstrap, обычный git push, приватный репо без публикации).
|
||
- Каждый шаг Steps отрабатывает на тестовом сценарии (fork + private Gitea + curated copy) без ошибок.
|
||
- Failure modes уводят в abort, не в частичный успех (особ.: безродный снапшот вместо форка; meta молча проигнорена глобальным gitignore; релиз без полного исходника).
|
||
- What NOT to do соответствует реальности.
|
||
|
||
Findings → follow-up tasks (private-dev-public-publish-<gap>-fix) в claude-skills.
|
||
**Закрытие:** все findings зафайлены ИЛИ ревьюер подтвердил «нет findings».
|
||
**NB семвер:** version 0.1.0 записан промоутером; дальнейшие бампы — владелец claude-skills, не ревьюер.
|
||
|
||
**Status:** done
|
||
**Where I stopped:** Review прогнан 2026-05-29 свежим non-implementer субагентом против заполненного тела v0.2.0. Вердикт: CHECK 1 (полнота vs архив) PASS, CHECK 2 (executability Steps) FAIL, CHECK 3 (failure modes→abort) PASS, CHECK 4 (What-NOT) PASS, CHECK 5 (description↔body) PASS. **3 findings, все устранены в том же v0.2.0 (некоммиченный инкремент, без двойного бампа):** (1) Step 5 копировал dev→pub без exclusion → утечка `.wiki/`/`.tasks/`/`CLAUDE.md` в публичный форк — добавлен явный meta-exclude + `.gitignore`-backstop + `git status`-чек + новый 4-й failure mode; (2) `origin` pub-папки не заводился до push — Step 4 теперь клонирует форк в pub (origin=fork, upstream=canonical); (3) minor — Step 3 «на той же базе» механизирован (clone fork→add gitea remote→push base). Re-install выполнен.
|
||
**Next action:** (none — done; все findings зафайлены и зафиксированы fix'ами; follow-up tasks не требуются)
|
||
**Blocker:** (cleared)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-29T09:45:58.420Z -->
|
||
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-05-29 / non-implementer subagent review; 3 findings (meta-leak in copy, undefined pub origin, unmechanized base) all fixed in v0.2.0 -->
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-29T09:45:58.420Z -->
|
||
|
||
---
|
||
|
||
## 🟢 [delegate-task-install] — Запустить install.sh в ~/projects/claude-skills/, проверить что скил delegate-task активируется в новой сессии, сделать /reload-plugins.
|
||
|
||
**Weight:** needs-claude
|
||
**Notify:** OpeItcLoc03/workshop
|
||
**Status:** done
|
||
**Where I stopped:** hot-loaded the skill mid-session (same evidence the prior install task closed on). A clean-session behavioral trigger run is intentionally scoped to the separate `delegate-task-test-trigger` task, not this install task.
|
||
|
||
No code/TDD surface (markdown skill + board update). The install writes outside the repo to `~/.claude/skills/`, so the only committable artifact was the `.tasks/STATUS.md` close.
|
||
**Next action:** (none — kept until merged)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T08:42:01.631Z -->
|
||
<!-- closed-by: DESKTOP-NSEF0UK:claude-opus:11140 / 2026-06-09 / installed via install.ps1; visible in available-skills this session -->
|
||
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-06-09T09:20:28.812Z / note: hot-loaded the skill mid-session (same evidence the prior install task closed on). A clean-session behavioral trigger run is intentionally scoped to the separate `delegate-task-test-trigger` task, not this install task.
|
||
|
||
No code/TDD surface (markdown skill + board update). The install writes outside the repo to `~/.claude/skills/`, so the only committable artifact was the `.tasks/STATUS.md` close. -->
|
||
|
||
---
|
||
|
||
## 🟢 [delegate-task-hermes-mapping] — Добавить запись delegate-task в ~/projects/claude-skills/hermes/mapping.yaml. Режим: pending (скил трогает MCP-инструменты — требует аудит перед auto).
|
||
|
||
**Weight:** needs-claude
|
||
**Notify:** OpeItcLoc03/workshop
|
||
**Status:** done
|
||
**Where I stopped:** ed entry — which confirms `delegate-task` is now correctly mapped. Mapping `meta-host-routing` requires its own per-skill audit (mode + category) and belongs to a separate task; I did not guess it. Recommend a follow-up task to map `meta-host-routing` so the build goes green again.
|
||
|
||
Note: I skipped the session-handoff hook suggestion — this is a one-shot delegated task, not an interactive session.
|
||
**Next action:** (none — kept until merged)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T08:42:04.880Z -->
|
||
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-06-09T09:23:28.902Z / note: ed entry — which confirms `delegate-task` is now correctly mapped. Mapping `meta-host-routing` requires its own per-skill audit (mode + category) and belongs to a separate task; I did not guess it. Recommend a follow-up task to map `meta-host-routing` so the build goes green again.
|
||
|
||
Note: I skipped the session-handoff hook suggestion — this is a one-shot delegated task, not an interactive session. -->
|
||
|
||
---
|
||
|
||
## 🟢 [delegate-task-test-trigger] — Прогнать триггер-фразы из description на тестовом буфере: убедиться что скил активируется на своих фразах И не активируется на 2-3 близких чужих (false-positive check).
|
||
|
||
Тест-фразы (должны активировать): «делегировать таску», «delegate task», «создать задачу на агента», «поставить задачу агенту», «tasks_create для».
|
||
|
||
False-positive check (не должны активировать): «создать задачу себе», «обновить таску», «закрыть таску».
|
||
|
||
**Weight:** needs-claude
|
||
**Notify:** OpeItcLoc03/workshop
|
||
**Status:** done
|
||
**Where I stopped:** Прогнано 2026-06-09 через clean-context субагентов (свежий контекст = прокси чистой сессии, имплементер прайменный). Каждому давалась только тест-фраза как первое сообщение + реалистичный neighborhood available-skills (delegate-task + конкуренты using-tasks/using-projects-meta/setup-tasks/session-handoff и др.), без подсказки «какой скил ожидается». **Positives 5/5 ✅:** «делегировать таску»→delegate-task; «delegate task to the books project»→delegate-task; «создать задачу на агента»→delegate-task; «поставить задачу агенту»→delegate-task; «tasks_create для проекта X»→delegate-task. **Negatives 2/3:** «обновить таску»→using-tasks ✅, «закрыть таску»→using-tasks ✅, **«создать задачу себе [на завтра]»→delegate-task ❌ FALSE POSITIVE (5/5 trials, консистентно)**. Корень: триггер «создать задачу на агента» матчится по стему «создать задачу», а негатив-клауза "Does NOT apply when doing the work yourself" слишком абстрактна чтобы перебить literal-match под 1%-rule — субагенты распознавали «себе»-исключение в reasoning, но всё равно ставили delegate-task FIRST. Finding → follow-up `delegate-task-description-fp-fix` (ниже) + кормит `delegate-task-review`.
|
||
**Next action:** (none — done; follow-up зафайлен)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T08:42:09.557Z -->
|
||
<!-- closed-by: DESKTOP-NSEF0UK:claude-opus:11140 / 2026-06-09 / pos 5/5, neg 2/3; reliable FP on «создать задачу себе» (5/5 trials) → follow-up delegate-task-description-fp-fix -->
|
||
|
||
---
|
||
|
||
## 🟢 [delegate-task-description-fp-fix] — Устранить false-positive активацию `delegate-task` на «создать задачу себе» (self-assigned task).
|
||
|
||
**Находка** (`delegate-task-test-trigger`, 2026-06-09, 5/5 trials): фраза «создать задачу себе [на завтра]» консистентно фаерит `delegate-task` вместо `using-tasks`. Триггер `«создать задачу на агента»` матчится по стему «создать задачу»; негатив-клауза "Does NOT apply when doing the work yourself" слишком абстрактна — субагенты распознавали «себе» в reasoning, но всё равно ставили delegate-task FIRST под 1%-rule.
|
||
|
||
**TDD:** N/A (markdown/description). Верификация = повторный clean-context trigger-прогон.
|
||
|
||
**Weight:** needs-claude
|
||
**Status:** done
|
||
**Where I stopped:** Shipped 2026-06-09. `skills/delegate-task/SKILL.md` 0.2.0→0.2.1 (PATCH). Description negative-clause сделана literal+routed: «создать задачу себе» / «task for myself» / «поставить себе задачу» → using-tasks; body "Не применяется" получил self-assigned буллет + дизамбигуатор («на агента»/«агенту»/«в проект X» = делегирование; «себе»/«myself» = своя доска). Верификация — fresh-context субагенты, симулированный available-skills registry (новое описание + конкуренты using-tasks/using-projects-meta/setup-tasks/session-handoff), без подсказки об ожидаемом ответе: **positives 5/5** (все 5 делегирующих фраз → delegate-task, регресса нет), **negative «создать задачу себе на завтра» 4/5 → using-tasks** (было 0/5 до фикса). Единственный остаточный miss reasoned правильно («себе»→using-tasks), но споткнулся об eval-артефакт (промпт форсил имя скила в первой строке ДО reasoning), не об неоднозначность описания. Concept page `.wiki/concepts/delegate-task-negative-trigger-fp.md` + index/log обновлены. NB: re-install (`~/.claude/skills/`) и hermes/mapping не трогал — install это отдельная baseline-таска (для PATCH достаточно reload-plugins), а правка только negative-clause не меняет tool-touching семантику (mapping mode остаётся pending).
|
||
**Next action:** (none — kept until merged). Optional follow-up: разблокировать `delegate-task-review` (его smoke-test включает этот negative-кейс).
|
||
**Branch:** n/a
|
||
<!-- created-by: DESKTOP-NSEF0UK:claude-opus:11140 / from: delegate-task-test-trigger finding / 2026-06-09 -->
|
||
<!-- closed-by: DESKTOP-NSEF0UK:claude-opus:11140 / 2026-06-09 / 0.2.0→0.2.1 PATCH; literal negative-clause; verified pos 5/5 + neg 4/5 (was 0/5); 1 residual miss = eval-harness artifact -->
|
||
|
||
---
|
||
|
||
## 🟢 [delegate-task-review] — Skill-review checkpoint для delegate-task (промоушен 2026-06-09).
|
||
|
||
**Источник дизайна:** .workshop/.archive/2026-06-09-agent-task-delegation-format.md.
|
||
**Импл-таски:** delegate-task-install, delegate-task-hermes-mapping, delegate-task-test-trigger.
|
||
|
||
**Кто делает:** не имплементер. Другая сессия / другой день.
|
||
|
||
**Поведенческий smoke-test:**
|
||
- Активируется на каждой trigger-фразе из description (RU + EN)
|
||
- Не активируется на «создать задачу себе», «обновить таску», «закрыть таску»
|
||
- Pre-flight gate (4 вопроса) задаётся перед tasks_create
|
||
- Тело задачи содержит секцию «## Обязательные скилы» с императивными invoke
|
||
- Поля weight/notify/allow_upgrade присутствуют в созданной задаче
|
||
- Failure modes уводят в abort, не в частичный успех
|
||
|
||
Findings → follow-up tasks через tasks_create в claude-skills.
|
||
|
||
**Status:** done
|
||
**Where I stopped:** Review прогнан 2026-06-09 свежей non-implementer сессией против SKILL.md v0.2.1 (включает negative-trigger fp-fix). Все 3 blocker-таски 🟢 (install/hermes-mapping/test-trigger). **VERDICT: PASS — нет блокирующих findings.** Smoke-test 6 bullets: (1) trigger activation — 6/6 fresh clean-context субагентов: pos 3/3 [«делегировать таску»/«delegate task to the books project»/«поставить задачу агенту» → delegate-task], neg 3/3 [«создать задачу себе на завтра»/«обновить таску»/«закрыть таску» → using-tasks]; ранее FP-кейс «себе» теперь маршрутится верно (v0.2.1 literal-negative держится под fresh eyes); (2) negatives — ✅; (3) pre-flight gate ПРИСУТСТВУЕТ перед tasks_create (Step 1 до Step 3); (4) «## Обязательные скилы» с императивными invoke — ✅ (Step 2 template); (5) weight/notify/allow_upgrade — ✅ в template; (6) failure modes → abort/re-ask, не частичный успех — ✅. CHECK completeness vs design archive: все элементы Round 7/8 присутствуют (default skill-set, steering-loop поля, paired review-task, TDD да/нет, разрешения). CHECK executability: все Steps исполнимы реальным tasks_create (notify=native param; weight/allow_upgrade пишутся в body как board-convention — поллер читает оттуда; dry-run confirm=false; paired review-task через status=blocked+blocker — native). **3 информационные заметки (не дефекты, follow-up не заводил):** (a) pre-flight gate теперь 5 вопросов (добавлен Q0 critical-infra→needs-human), а design-архив/acceptance говорят «4» — это улучшение, согласованное с What-NOT-to-do правилами про needs-human для инфры; skill менять не надо, текст acceptance устарел; (b) body-template хардкодит `.wiki/concepts/<slug>.md`, design Round 6 хотел выбор папки (concepts/entities/raw) — concepts/ разумный дефолт per wiki-schema; (c) Inputs перечисляет weight/allow_upgrade рядом с notify, но native tasks_create-параметр только notify — weight/allow_upgrade это body-поля; косметика, не дефект.
|
||
**Next action:** (none — done; PASS, нет блокирующих findings, follow-up tasks не требуются)
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T08:42:20.151Z -->
|
||
<!-- closed-by: DESKTOP-NSEF0UK:claude-opus:26012 / 2026-06-09 / VERDICT PASS; smoke-test 6/6 (trigger pos 3/3 + neg 3/3 fresh subagents); completeness+executability checks pass; 3 informational notes, no blocking findings, no follow-up tasks -->
|
||
|
||
---
|
||
|
||
## 🟢 [session-break-using-tasks] — ## Goal
|
||
Add `session_break` field support to `using-tasks` skill v1.1.0 → v1.2.0.
|
||
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-06-09T13:34:20.319Z / note: hermes/mapping.yaml` и не запускал install.** Версия в mapping — это schema-версия, не контент (подтверждено прошлыми тасками); для policy-правки install/mapping идут отдельными baseline-тасками. Если нужен re-install в `~/.claude/skills/` — это вне скоупа этой задачи.
|
||
3. **Не пушил**, хотя в задаче `auto-push: yes` — прямая инструкция раннера («do NOT push — the runner delivers it») перевешивает. -->
|
||
|
||
## Design
|
||
Поле `session_break: true | "<hint>"` в frontmatter задачи — маркер точки разрыва сессии.
|
||
|
||
После закрытия задачи (статус 🟢), ДО `tasks_claim_next`:
|
||
1. Прочитать frontmatter закрытой задачи
|
||
2. Если `session_break` присутствует — вывести:
|
||
`🔚 SESSION BOUNDARY — [slug] закрыта. Рекомендую завершить текущую сессию. Следующий трек: [value | "см. STATUS.md"]`
|
||
3. Остановиться, не клеймить следующую задачу
|
||
|
||
Без флага — поведение прежнее.
|
||
|
||
## Acceptance criteria
|
||
- [ ] SKILL.md → v1.2.0
|
||
- [ ] Поле `session_break` задокументировано в frontmatter-конвенциях (тип: bool | string, примеры)
|
||
- [ ] Правило проверки: ПОСЛЕ close, ДО claim-next — явно вписано в раздел Task completion
|
||
- [ ] Формат SESSION BOUNDARY сообщения зафиксирован дословно
|
||
|
||
## Skills
|
||
- invoke `using-tasks` (прочитать текущий SKILL.md перед правкой)
|
||
|
||
## Permissions
|
||
- interns: no
|
||
- auto-push: yes
|
||
|
||
## Weight
|
||
needs-claude
|
||
|
||
**Weight:** needs-claude
|
||
**Status:** done
|
||
**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:** (none — kept until merged; paired review task `session-break-using-tasks-review` unblocked)
|
||
**Branch:** n/a
|
||
<!-- 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) -->
|
||
|
||
---
|
||
|
||
## ⚪ [session-break-delegate-task] — ## Goal
|
||
Add `session_break` as optional field to `delegate-task` task body template v0.2.1 → v0.2.2.
|
||
|
||
## Design
|
||
Добавить в template тела задачи:
|
||
```
|
||
session_break: "<hint>" # optional — using-tasks остановится после close и предложит закрыть сессию
|
||
```
|
||
|
||
Добавить Q6 в pre-flight gate:
|
||
> "Нужен ли разрыв сессии после этой задачи? (domain-switch, milestone, heavy infra)"
|
||
|
||
Если да — ставить `session_break: "<название следующего трека или hint>"` в создаваемую задачу.
|
||
|
||
Usage guidance (три случая):
|
||
1. Смена домена / репо — переход между несвязанными треками
|
||
2. Milestone-задача — последняя в группе sub-tasks фичи
|
||
3. Тяжёлые инфра-задачи — shared checkout, migrations
|
||
|
||
## Acceptance criteria
|
||
- [ ] SKILL.md → v0.2.2
|
||
- [ ] Template: поле `session_break` с inline-комментарием и примером
|
||
- [ ] Pre-flight Q6 добавлен после Q5 (notify)
|
||
- [ ] Usage guidance: три случая когда ставить
|
||
|
||
## Skills
|
||
- invoke `delegate-task` (прочитать текущий SKILL.md перед правкой)
|
||
|
||
## Permissions
|
||
- interns: no
|
||
- auto-push: yes
|
||
|
||
## Weight
|
||
needs-claude
|
||
|
||
**Status:** ready
|
||
**Where I stopped:** (not started)
|
||
**Weight:** needs-claude
|
||
**Next action:** Прочитать skills/delegate-task/SKILL.md, добавить Q6 в pre-flight и поле session_break в template, поднять версию до v0.2.2
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T10:15:32.125Z -->
|
||
|
||
---
|
||
|
||
## 🔵 [session-break-using-tasks-review] — Review реализации `session_break` в `using-tasks` skill.
|
||
|
||
Проверить:
|
||
- [ ] Правило стоит ПОСЛЕ close, ДО claim-next (не наоборот)
|
||
- [ ] Формат SESSION BOUNDARY сообщения соответствует дизайну (включает slug и hint)
|
||
- [ ] Отсутствие флага не меняет поведение (регрессия)
|
||
- [ ] Версия поднята до v1.2.0
|
||
|
||
**Status:** blocked
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Прочитать итоговый SKILL.md после impl, сверить с acceptance criteria задачи session-break-using-tasks
|
||
**Blocker:** session-break-using-tasks
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T10:15:45.969Z -->
|
||
|
||
---
|
||
|
||
## 🔵 [session-break-delegate-task-review] — Review реализации `session_break` в `delegate-task` skill.
|
||
|
||
Проверить:
|
||
- [ ] Q6 добавлен на правильном месте (после Q5 notify)
|
||
- [ ] Template: поле `session_break` с понятным inline-комментарием
|
||
- [ ] Usage guidance: три случая явно перечислены
|
||
- [ ] Версия поднята до v0.2.2
|
||
|
||
**Status:** blocked
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Прочитать итоговый SKILL.md после impl, сверить с acceptance criteria задачи session-break-delegate-task
|
||
**Blocker:** session-break-delegate-task
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T10:15:48.687Z -->
|
||
|
||
---
|
||
|
||
## ⚪ [skill-using-system-snapshot] — ## Goal
|
||
Создать скил `using-system-snapshot` в `claude-skills`.
|
||
|
||
## Назначение
|
||
Заменить разрозненные ops-проверки (tasklist, docker ps, meta_status вручную) одним вызовом `mcp__projects-meta__meta_system_snapshot` в начале сессии.
|
||
|
||
## Содержание скила
|
||
- **Когда вызывать**: старт сессии при ops-контексте; перед любым утверждением о состоянии процессов/поллера
|
||
- **Что делать**: вызвать `mcp__projects-meta__meta_system_snapshot`, интерпретировать ответ
|
||
- **Формат вывода**: одна строка на секцию — поллер (стоп/работает + проекты), docker (ОК / список проблем), задачи (сводка по проектам)
|
||
- **Запрет**: не утверждать состояние процессов без предварительного вызова snapshot
|
||
|
||
## Acceptance criteria
|
||
- [ ] `skills/using-system-snapshot/SKILL.md` создан
|
||
- [ ] Trigger-фразы описаны: «что запущено», «состояние системы», «поллер работает?»
|
||
- [ ] Dependency: инструмент `meta_system_snapshot` должен быть готов (`meta-system-snapshot` в .common)
|
||
|
||
## Permissions
|
||
- interns: no
|
||
- auto-push: yes
|
||
|
||
## Weight
|
||
needs-claude
|
||
|
||
**Weight:** needs-claude
|
||
**Status:** ready
|
||
**Where I stopped:** Разблокировано 2026-06-09 — meta-system-snapshot в OpeItcLoc03/common закрыт (review прошёл, live call верифицирован).
|
||
**Next action:** Написать skills/using-system-snapshot/SKILL.md
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T11:01:41.414Z -->
|
||
|
||
---
|
||
|
||
## 🔵 [skill-using-system-snapshot-review] — Review скила `using-system-snapshot`.
|
||
|
||
Проверить:
|
||
- [ ] Trigger-фразы покрывают реальные сценарии
|
||
- [ ] Запрет на утверждение состояния без вызова snapshot — явно прописан
|
||
- [ ] Формат вывода достаточно краткий (одна строка на секцию)
|
||
|
||
**Status:** blocked
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Прочитать SKILL.md, протестировать триггер в реальной сессии
|
||
**Blocker:** skill-using-system-snapshot
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T11:01:59.476Z -->
|
||
|
||
---
|
||
|
||
## ⚪ [using-tasks-status-read-perf] — ## Goal
|
||
Убрать жалобы агента на «огромный STATUS.md» в `using-tasks` skill.
|
||
|
||
## Проблема
|
||
STATUS.md раздувается от накопившихся 🟢 done-задач. Агент читает файл целиком при ориентации — растёт контекст, жалобы на размер. `tasks_aggregate` не замена: не индексирует ready/done, кэш stale.
|
||
|
||
## Фикс
|
||
Добавить в скил правило архивации done-задач:
|
||
- После закрытия задачи (или при заходе в сессию) — если done-блоков накопилось ≥ N (например 10) — переместить их в `.tasks/archive/YYYY-MM.md`
|
||
- STATUS.md содержит только активные/паузированные/blocked/ready задачи
|
||
|
||
## Acceptance criteria
|
||
- [ ] SKILL.md обновлён: правило архивации done-задач описано (порог + целевой файл)
|
||
- [ ] Формат архивного файла зафиксирован (append в `.tasks/archive/YYYY-MM.md`)
|
||
- [ ] Версия поднята (v1.x)
|
||
|
||
## Permissions
|
||
- interns: no
|
||
- auto-push: yes
|
||
|
||
## Weight
|
||
needs-claude
|
||
Убрать жалобы агента на «огромный STATUS.md» в `using-tasks` skill.
|
||
|
||
## Проблема
|
||
Скил предписывает читать STATUS.md целиком для ориентации (активные/паузированные блоки). Файл растёт по мере накопления задач — агент тратит контекст и жалуется на размер.
|
||
|
||
## Фикс
|
||
Заменить `Read STATUS.md` на `mcp__projects-meta__tasks_get_status` при ориентации (найти активные/паузированные задачи). STATUS.md читать только при явном запросе полного обзора доски.
|
||
|
||
Дополнительно: добавить правило периодической архивации 🟢 done-задач из STATUS.md (накапливаются, не нужны в активном файле).
|
||
|
||
## Acceptance criteria
|
||
- [ ] SKILL.md обновлён: ориентация через `tasks_get_status`, не Read
|
||
- [ ] STATUS.md читается только по явной необходимости (полный обзор)
|
||
- [ ] Правило архивации done-задач добавлено
|
||
- [ ] Версия поднята (v1.x)
|
||
|
||
## Permissions
|
||
- interns: no
|
||
- auto-push: yes
|
||
|
||
## Weight
|
||
needs-claude
|
||
|
||
**Weight:** needs-claude
|
||
**Status:** ready
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Прочитать текущий SKILL.md, найти все места где предписан Read STATUS.md, заменить на tasks_get_status где уместно
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T11:05:08.162Z -->
|
||
|
||
---
|
||
|
||
## 🔵 [using-tasks-status-read-perf-review] — Review фикса STATUS.md bloat в `using-tasks`.
|
||
|
||
- [ ] Ориентация действительно идёт через `tasks_get_status`, не Read
|
||
- [ ] Нет регрессий — полный обзор доски всё ещё работает когда нужен
|
||
- [ ] Правило архивации done-задач понятно сформулировано
|
||
|
||
**Status:** blocked
|
||
**Where I stopped:** (not started)
|
||
**Next action:** Прочитать обновлённый SKILL.md, проверить что Read STATUS.md убран из ориентационного flow
|
||
**Blocker:** using-tasks-status-read-perf
|
||
**Branch:** n/a
|
||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T11:05:18.063Z -->
|
||
|
||
---
|