Files
skills/.tasks/STATUS.md
vitya 94af375ec4 meta(tasks): close sovereign-catalog-wave2-review + 4 follow-ups
VERDICT PASS (wave-2 range) + CONCERN on HEAD (42ed5ea defects):
- review closed: evidence in .workshop/.brainstorm/sovereign-catalog-wave2-review.md
- follow-ups created: project-discipline-dist-rebuild, project-discipline-description-contradiction,
  de-superpowers-skill-readmes, skills-live-claudemd-superpowers-trigger
- F1/F2 already fixed upstream d7903c3 (workshop) → closed done
- commit refs in review task text updated (pre-rebase dangling → ab51c2e..ff68762)
2026-08-12 16:42:16 +03:00

462 lines
52 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Task Board
_Updated: 2026-08-12 — **sovereign-catalog-wave2-review closed**: VERDICT PASS для волны-2 (10/10) + CONCERN на HEAD (2 дефекта 42ed5ea → 4 follow-up таски), архив доски (51 🟢). Ранее: 2026-08-10 — **session-inbox-monitor-pi-extension shipped**: pi-native inbox delivery for ALL pi sessions. SESSION-SCOPED: watches only `<ctx.cwd>/.claude-inbox/` (own project only — vitya's rule: an agent may only read its own directory's inbox; the first global-scan version was scrapped same day). PUSH 15s poll (interactive) + PULL `agent_settled` sweep; headless = no delivery (messages wait for interactive); dedup per-process + `.read/` move = cross-process first-wins vs CC hooks; source of truth `.common/lib/pi-extensions/inbox-monitor.ts`, deployed byte-identical to `~/.pi/agent/extensions/`, functional tests PASS (incl. decoy — other inbox untouched). SKILL.md v0.2.2→v0.3.0 with Pi section. Ранее: review-kit прогнан в чистой не-имплементер сессии: 3 трека закрыты VERDICT PASS — `inter-session-peer-discipline-test-trigger` (pos 4/4→peer high, 0 FP на 5 чужих RU+EN), `inter-session-peer-discipline-review` (тело v0.1.1 несёт все 3 принципа, не конфликтует с CLAUDE.md), `session-inbox-monitor-review` (зонтик: активация 3/3 monitor + neg clean [X2 low-conf observation]; структурный аудит хуков 5 PASS/1 CONCERN; received-msg-fp учтён RESOLVED via b; hermes держим pending до tool-side аудита). Метод — clean-context непрайменные субагенты + независимый структурный аудит. Единственный finding (UTF-8 guard) сразу пофикшен и закрыт: `session-inbox-monitor-encoding-guard-followup` 🟢 — `[Console]::OutputEncoding=UTF8` forward-guard в inbox-monitor.ps1, кириллический regression под WinPS 5.1 PASS, задеплоен byte-identical, SKILL.md v0.2.2. Ранее: session-inbox-monitor-test-trigger closed (VERDICT PASS; clean-session run, 7 непрайменных субагентов: pos 4/4→session-inbox-monitor [вкл. CLAUDE.md-line P4], neg 2/3 [N2 backend→none, N3 received-msg EN→none, N1 received-msg RU→FP]; FP borderline + body-load-self-correcting, корень=inter-session-peer-discipline не установлен; follow-up `session-inbox-monitor-received-msg-fp` заведён; `-review` разблокирован [нужна НЕ-имплементер сессия]; строка `inbox monitor: raise on start` добавлена в CLAUDE.md по согласию user). Ранее: task-loop-test-trigger closed (VERDICT PASS; live clean-session run: pos 6/6→task-loop, neg discrimination clean, task-loop FP 0/3, behavioral 4/4 [consult-gate, session_break BOUNDARY, empty-stop-no-poll, long-watch ScheduleWakeup≥1200 not CronCreate]; registry confirmed real via subagent probe; **ALL 3 task-loop baselines now done**; finding: session_break is the fragile gate — body-load-dependent, informational only, no fix). Ранее: task-loop-hermes-mapping closed (task-loop entry → hermes/mapping.yaml mode:pending, intended auto/mcp; reason claim/close/heartbeat + ScheduleWakeup; YAML validated; schema version untouched. 2 of 3 task-loop baselines now done; -test-trigger ⚪ remains, needs clean session). Ранее: task-loop-install closed (skill installed to ~/.claude/skills/, diff-identical to source, visible in available-skills with full description post-/reload-plugins; -test-trigger unblocked → ⚪ ready, needs clean session). Ранее: using-tasks-session-lock shipped (using-tasks 1.3.0→1.4.0; session lock guard: start step 1 + end step 1 + .gitignore + Structure docs). Ранее: meta-host-routing-review closed (VERDICT PASS; behavioral 8/8 via clean-context subagents — 5 pos→meta-host-routing, 3 neg routed away incl. known-Gitea Skip-clause; Steps verified vs live infra: yt-tools→OpeItcLoc03/meta-yt-tools dedicated host resolves, .common grep hits, excludesFile/auth.toml present; failure-modes→STOP+ask, What-NOT accurate; no blocking findings on skill v0.3.0. Observation: task acceptance «resolves .common» is stale — skill+reality route yt-tools to dedicated meta-yt-tools host. Caveat: -install + -hermes-mapping baselines remain ⚪ open — skill not in ~/.claude/skills nor hermes/mapping.yaml; review covers content+trigger-discrimination only, not live-harness activation). Ранее: task-format skill v0.1.0 created (TDD via writing-skills; RED 3-fail → GREEN 2-pass). Ранее: using-markitdown-cli-rewrite-review done (VERDICT PASS; SKILL.md без `mcp__markitdown__`, CLI-примеры совпадают с `markitdown 0.1.6 --help`, version 1.0.0→1.0.1 PATCH, dist консистентен; 1 informational finding — docker-контейнер респаунится из out-of-scope `~/.claude.json` MCP-регистрации → follow-up `using-markitdown-mcp-deregister` needs-human). Ранее: skill-using-system-snapshot-review done (VERDICT PASS 3/3; live tool-contract verify + 9-way fresh-context trigger test, 8 clean; 3 informational findings, none blocking — incl. missing deployment scaffold: skill not installed / not in hermes-mapping / no baseline tasks). Ранее: using-tasks-status-read-perf done (using-tasks 1.2.0→1.3.0; done-task archival rule fixes STATUS.md bloat; literal `tasks_get_status`-for-orientation swap NOT done — tool can't enumerate the board, documented). Ранее: 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)._
**Poller:** eligible
<!--
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 + запросы **по одному** с паузами 2535с + ранний 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). Обрабатывай по одному, с паузой ≥2535с между; при пакете из N URL — последовательно, не параллельно. Если уже словил 429 — cooldown ~35 мин перед повтором, проверяй первый запрос и не продолжай залп если он упал.»
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, внести пункты 13 (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
---
## ⚪ [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 -->
---
## ⚪ [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-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 -->
---
## ⚪ [skill-using-system-snapshot] — ## Goal
Создать скил `using-system-snapshot` в `claude-skills`.
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-06-09T13:44:08.725Z / note: Shipped skills/using-system-snapshot/SKILL.md v0.1.0 (commit 069b041, NOT pushed per runner). Thin read-only wrapper over meta_system_snapshot: 3 trigger groups (what's running / system status / poller alive — RU+EN), explicit no-claim-without-call rule, 3-line output format (poller / docker / tasks), liveness split (poller+docker live, tasks cached), scope-defers to using-vds-ops + using-projects-meta. Dependency documented (Prerequisites → setup-projects-meta). Output shape verified live. 3/3 acceptance met. Wiki concept page + index + log. TDD N/A (markdown); behavioral smoke-test = paired -review task. -->
## Назначение
Заменить разрозненные 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 -->
---
## ⚪ [delegate-task-review-weight-inherit] — Исправить `delegate-task` скил: при создании парной review-таски (Step 5) наследовать `weight` от impl-таски.
**Проблема:** review-таски создаются через `tasks_create(status=blocked, blocker=<impl-slug>)` без `weight` параметра. Reconciler обрабатывает авто-анблок только задач с `**Weight:** needs-claude` или `**Weight:** cheap-ok` в теле. Без поля — задача навечно остаётся 🔵, поллер её не видит. Воспроизводилось трижды за одну сессию (session-break-using-tasks-review, session-break-delegate-task-review, skill-using-system-snapshot-review, using-tasks-status-read-perf-review).
**Фикс:** в Step 5 шаблона явно указывать weight при `tasks_create` review-таски. Правило: review-таска наследует weight impl-таски, но не выше `needs-claude` (review не бывает `cheap-ok` — риск игнора invoke-инструкций слабыми моделями).
**Acceptance criteria:**
- Step 5 в SKILL.md явно говорит: создавать review-таску с `weight` = weight impl-таски (но min `needs-claude`)
- `tasks_create` вызов в Step 5 включает `weight` параметр в примере/описании
- What-NOT-to-do: не создавать review-таску без weight
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-06-09T16:55:13.755Z / note: переди `origin/master`. Дополнительного коммита не требуется.
**Допущение (low-stakes, фиксирую для аудита):** я не стал создавать новый коммит-дубликат поверх `fedb6fc` ради «нового SHA» и не закрывал таску на доске через `tasks_close` — закрытие/reconcile оставляю runner'у после доставки коммита. Альтернатива, которую отверг: сделать пустой/переоформляющий коммит — отверг как фабрикацию работы. -->
## Обязательные скилы — вызвать до начала работы
- invoke `using-tasks` — для управления статусом задачи
- invoke `project-discipline` — дисциплина коммитов/пушей
- invoke `using-wiki` после закрытия — заингесть `.wiki/concepts/delegate-task-review-weight.md`
**TDD:** нет — markdown policy artifact; behavioral smoke = парная review-таска
**Разрешения:** интерны: да | автопуш: нет
**weight:** needs-claude
**notify:** OpeItcLoc03/workshop
**Status:** ready
**Where I stopped:** (not started)
**Next action:** Открыть `skills/delegate-task/SKILL.md`, найти Step 5, добавить явное наследование weight при tasks_create review-таски. Bump PATCH.
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T14:11:55.964Z -->
---
## ⚪ [using-markitdown-cli-rewrite] — Переписать `skills/using-markitdown/SKILL.md`: заменить все инструкции по вызову `mcp__markitdown__*` тулов на вызов CLI `markitdown <path|url>` (v0.1.6, доступен в системном PATH). Убрать секцию про MCP setup/docker. После обновления SKILL.md — остановить и удалить локальный docker контейнер markitdown-mcp (`docker stop markitdown-mcp && docker rm markitdown-mcp`). Bump PATCH version в frontmatter скила.
**Acceptance criteria:**
- SKILL.md не содержит `mcp__markitdown__` — только CLI-вызовы
- `docker ps` не показывает markitdown-mcp
- version bumped (PATCH)
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-06-09T17:48:42.039Z / note: n that loads the MCP. A full decommission would deregister it — flagged as a recommended follow-up in the concept page.
- **Rebuilt the `dist/` artifact** (not explicitly asked) to keep the committed repo internally consistent — low-stakes, reversible. Did **not** run `install.ps1` or touch `hermes/mapping.yaml` (separate baseline tasks per repo convention; PATCH update only needs reload-plugins). -->
## Обязательные скилы — вызвать до начала работы
- invoke `using-tasks` — для управления статусом задачи
- invoke `project-discipline` — дисциплина коммитов/пушей
- invoke `using-interns` — для file-read/grep операций
- invoke `using-wiki` после закрытия — заингесть `.wiki/concepts/using-markitdown-design.md` если существует
**TDD:** нет — markdown policy artifact; behavioral smoke: `markitdown --help` выводит usage
**Разрешения:** интерны: да | автопуш: да
**weight:** needs-claude
**notify:** OpeItcLoc03/workshop
**Status:** ready
**Where I stopped:** (not started)
**Next action:** Открыть `skills/using-markitdown/SKILL.md`, заменить все mcp__markitdown__ вызовы на CLI-эквиваленты, bump PATCH, затем `docker stop markitdown-mcp && docker rm markitdown-mcp`.
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-09T17:43:55.116Z -->
---
## 🔵 [setup-agents-task-runner-windows-fixes] — Починить `setup-agents-task-runner` по итогам первого реального Windows-прогона. Скил v0.1.0 устанавливал, но службы вставали сломанными — 5 дефектов, все диагностированы и воркэраунд-починены в `OpeItcLoc03/common` dev-шаблонах. Нужно перенести в SKILL.md, чтобы fresh-install на новой машине работал без ручной отладки.
## Дефекты (с проверенными фиксами в OpeItcLoc03/common)
1. **winsw serviceaccount: v3-схема при v2.12.0 пине.** Шаблоны: `<username>.\{{USER}}</username>` + `<allowservicelogonright>` (схема winsw v3). Пин — v2.12.0, молча игнорит незнакомые элементы → служба падает на LocalSystem без ошибки. Эталон из `sample-allOptions.xml` v2.12.0: `<domain>`+`<user>`+`<allowservicelogon>`. Фикс: коммит 681fcda. → привести serviceaccount-блок шаблонов к v2-схеме + заметка «схема обязана совпадать с major пина winsw».
2. **projects-meta-mcp не разворачивается в install-layout.** appeals импортит `projects-meta-mcp/dist/...` (bare, `file:../projects-meta-mcp` junction); watchdog — `../../../projects-meta-mcp/dist/...` (относит., ждёт соседа install-dir). Phase 4 копирует изолированно → junction виснет на `%LOCALAPPDATA%\projects-meta-mcp` → ERR_MODULE_NOT_FOUND краш-луп. → Phase 4: развернуть `projects-meta-mcp` соседом install-dir (junction на dev-дерево либо deploy-копия) + перенаправить appeals node_modules junction.
3. **PORT 3000 — коллизия с дев-портом.** Перенесён на 4316 во всех хост-юнитах (winsw/systemd/launchd) + watchdog TASK_RUNNER_URL. Docker-внутренний 3000 не трогали. Коммит 211d662. → дефолт хост-порта 4316.
4. **Home-резолюция.** Под LocalSystem `os.homedir()` → systemprofile → auth.toml не найден. После фикса run-as-user снимается само. На машине добавлен USERPROFILE/HOME env в рендеренные XML (не в dev-шаблоны). → решить: полагаться на run-as-user ИЛИ добавить env в шаблоны (тест на fresh-машине).
5. **Phase 8 не ловил LocalSystem** (службы Running как SYSTEM, прошли). → Phase 8 ассертить SERVICE_START_NAME/StartName == целевой юзер + порт-проверку.
Мелочь: PIN.md стух (.NET461 заметка vs self-contained Core 18МБ). Фикс 31bd5a9.
## Acceptance
- Fresh Windows-установка через обновлённый скил: 3 службы run-as-user (не LocalSystem), не-дев порты, отвечают по HTTP — без ручной правки junction/схемы/порта.
- Phase 8 реально ассертит аккаунт + порты.
- Linux/mac-ветки проверены на тот же класс (sibling-deploy, схема юнитов); winsw-специфична только деф.1.
- ВЕРИФИКАЦИЯ install-результата требует Windows-машины — если раннер на не-Windows, правки портируются и коммитятся, full-install проверка деферится (отметить в close-ноте).
## Обязательные скилы — вызвать до начала работы
- invoke `using-tasks` — статус задачи
- invoke `project-discipline` — semver-bump SKILL.md + дисциплина коммитов/пушей
- invoke `writing-skills` — правка скила по канону (Iron Law: тест-сценарий до правки)
- invoke `using-projects-meta` — контекст в OpeItcLoc03/common
**Контекст:** проверенные фиксы — `OpeItcLoc03/common` коммиты 681fcda / 211d662 / 31bd5a9, шаблоны `lib/agents-task-runner/service/`. Ops-runbook `concepts/agents-task-runner-ops.md` (who-does-what).
**TDD:** нет (правка процедуры; верификация = реальная установка).
**Разрешения:** интерны: нет | автопуш: нет
**Weight:** needs-claude
**Notify:** OpeItcLoc03/workshop
## Дефекты (с проверенными фиксами)
1. **winsw serviceaccount: v3-схема при v2.12.0 пине.** Шаблоны использовали `<username>.\{{USER}}</username>` + `<allowservicelogonright>` — это схема winsw **v3**. Пин — v2.12.0, который **молча игнорит** незнакомые элементы → служба падает на **LocalSystem** (без ошибки!). Эталон из `sample-allOptions.xml` v2.12.0: `<domain>` + `<user>` + `<allowservicelogon>`. Фикс в common: коммит 681fcda. → Skill: serviceaccount-блок шаблонов привести к v2-схеме; добавить заметку «схема обязана совпадать с major пина winsw».
2. **projects-meta-mcp не разворачивается в install-layout.** appeals импортит `projects-meta-mcp/dist/...` (bare, через `file:../projects-meta-mcp` junction); watchdog — `../../../projects-meta-mcp/dist/...` (относит. путь, ждёт соседа install-dir). Phase 4 копирует appeals/runner изолированно → npm-junction виснет на несуществующий `%LOCALAPPDATA%\projects-meta-mcp` → ERR_MODULE_NOT_FOUND краш-луп. → Skill Phase 4: добавить шаг — развернуть `projects-meta-mcp` соседом install-dir (junction на dev-дерево либо deploy-копия) + перенаправить appeals node_modules junction. На этой машине решено единым junction `%LOCALAPPDATA%\projects-meta-mcp` → dev-дерево (согласовано с тем, что TASKS_BIN уже ссылается на dev-дерево).
3. **PORT 3000 — коллизия с дев-портом.** Раннер сидел на 3000 (Next/CRA/Express default) — фоновая autostart-служба не должна его занимать. Перенесён на 4316 (рядом с appeals :4317) во всех хост-юнитах (winsw/systemd/launchd) + watchdog TASK_RUNNER_URL. Docker-внутренний 3000 не трогали. Коммит 211d662. → Skill/README: дефолт хост-порта 4316.
4. **Home-резолюция под службой.** Пока служба была LocalSystem, `os.homedir()` давал `C:\WINDOWS\system32\config\systemprofile``auth.toml` не находился. На этой машине добавлен `<env USERPROFILE>`/`<env HOME>` в РЕНДЕРЕННЫЕ XML (не в dev-шаблоны). После фикса run-as-user (деф.1) проблема снимается сама (USERPROFILE берётся из токена vitya). → Skill: решить — полагаться на run-as-user ИЛИ для надёжности добавить USERPROFILE env в шаблоны (протестировать на fresh-машине без загруженного профиля).
5. **Phase 8 не ловил LocalSystem.** Скил считал успехом «службы Running» — но они прекрасно бежали как LocalSystem (благодаря env-хаку). → Skill Phase 8: ассертить `SERVICE_START_NAME`/`StartName` == целевой юзер, а не только Running. Проверка порта (нет 3000-коллизии) тоже.
Мелочь: PIN.md стух (`.NET Framework 4.6.1` — на деле self-contained .NET Core, 18 МБ; .NET461 — отдельный ассет). Фикс 31bd5a9.
## Acceptance
- Fresh Windows-установка через обновлённый скил даёт 3 службы **run-as-user** (не LocalSystem), на не-дев портах, все отвечают по HTTP — БЕЗ ручной правки junction/схемы/порта.
- Phase 8 скила реально ассертит аккаунт + порты.
- Линукс/мак-ветки проверены на тот же класс (sibling-deploy, схема юнитов) — winsw-специфична только деф.1.
## Обязательные скилы — вызвать до начала работы
- invoke `using-tasks` — управление статусом задачи
- invoke `project-discipline` — semver-bump SKILL.md (это versioned-артефакт) + дисциплина коммитов/пушей
- invoke `writing-skills` — правка скила по канону
- invoke `using-projects-meta` — кросс-проектный контекст (фиксы живут в OpeItcLoc03/common)
**Контекст:** проверенные фиксы и эталон-схема — в `OpeItcLoc03/common` (коммиты 681fcda / 211d662 / 31bd5a9, шаблоны `lib/agents-task-runner/service/`). Ops-runbook `concepts/agents-task-runner-ops.md` (секция who-does-what).
**TDD:** нет — правка процедуры скила; верификация = реальная установка на Windows-машине.
**Разрешения:** интерны: нет | автопуш: нет
**Status:** blocked
**Where I stopped:** exit 1
**Next action:** Портировать проверенные фиксы в SKILL.md (Phases) + дотянуть dev-шаблоны. См. тело.
**Branch:** n/a
**Owner:** DESKTOP-NSEF0UK:claude-opus:22572
**Claim token:** ef76904a-43a0-4a30-adb9-d9ed43c126e4
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-18T08:12:28.107Z -->
---
## 🟡 [agent-neutral-skill-pipeline] — ДОЛГ (идея 19 п.5, буфер claude-to-agents): инсталл/апдейт-пайплайн скилов — claude-only. update-claude-skills ставит только в ~/.claude/skills; pi получил каталог вручную (settings skills array, идея 6). Цель: update-skills обслуживает всех агентов (единый канон + честный per-agent срез). Связано с ренеймом репо (rename-repo-to-skills) и чисткой ~/.agents/skills. Сейчас НЕ исполняем (долг, status=paused) — осознанно отложено.
**Status:** paused
**Where I stopped:** (not started)
**Next action:** (пауза) После rename-repo-to-skills: спроектировать update-skills с таргетами ~/.claude/skills + ~/.agents/skills + (pi settings), подтвердить у владельца
**Branch:** n/a
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-12T09:58:08.312Z -->
---
## 🟢 [project-discipline-dist-rebuild] — dist/project-discipline.skill устарел (v0.1.2 внутри vs source v0.2.0) — коммит 42ed5ea не пересобрал пакет (нарушение Rule 3). Найдено: sovereign-catalog-wave2-review (F1).
**Status:** done
**Where I stopped:** closed without action — починено воркшопом upstream (d7903c3): dist/project-discipline.skill пересобран, внутри version: 0.2.1. — 42ed5ea bumped project-discipline v0.1.2→v0.2.0 (Rule 4 push-freely) коснувшись только skills/project-discipline/SKILL.md; dist/project-discipline.skill несёт v0.1.2 (ask-before-push семантика). update-skills раскатит старый пакет.
**Next action:** (none — done upstream d7903c3)
** Пересобрать: bash scripts/build.sh --prune (или build.ps1 -Prune) → проверить version: 0.2.0 внутри dist/project-discipline.skill (unzip -p ... | grep ^version); commit "build(project-discipline): rebuild dist archive v0.1.2→v0.2.0". Автор фикса — имплементер 42ed5ea.
**Branch:** master
**Weight:** cheap-ok
**Notify:** OpeItcLoc03/workshop
<!-- created-by: vitya@DESKTOP-NSEF0UK / from: sovereign-catalog-wave2-review / 2026-08-12 -->
---
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-08-12 / fixed upstream d7903c3 (workshop) before review push -->
## 🟢 [project-discipline-description-contradiction] — frontmatter description в project-discipline самопротиворечив: новое Rule 4 (push freely) + остаток старого grant-текста («разреши автопуш», session end resets to ask-mode) + Rule 5 продублирован (L13-15 и L18-20). Description идёт в available-skills system prompt → другие проекты получают противоречивую push-политику. Найдено: sovereign-catalog-wave2-review (F2).
**Status:** done
**Where I stopped:** closed without action — починено воркшопом upstream (d7903c3): grant-текст + дублированный Rule 5 вычищены из description, source v0.2.1. — skills/project-discipline/SKILL.md L11-20: L11-15 новое Rule 4 + L16-17 старый grant-текст «— grant via "разреши автопуш"…» + L18-20 дубль Rule 5. Тело (L82-103) корректно (push-gate модель).
**Next action:** (none — done upstream d7903c3)
** Переписать description: выкинуть grant-текст («разреши автопуш»/«allow auto-push»/session reset), свести Rule 5 в один пункт, сохранить push-gate-нюанс (books — auto-deploy). Сверить с телом Rule 4. Bump: PATCH 0.2.1 (текст-фикс) — решение при исполнении. Автор фикса — имплементер 42ed5ea.
**Branch:** master
**Weight:** needs-claude
**Notify:** OpeItcLoc03/workshop
<!-- created-by: vitya@DESKTOP-NSEF0UK / from: sovereign-catalog-wave2-review / 2026-08-12 -->
---
<!-- closed-by: vitya@DESKTOP-NSEF0UK / 2026-08-12 / fixed upstream d7903c3 (workshop) before review push -->
## ⚪ [de-superpowers-skill-readmes] — 3 per-skill README ещё несут superpowers-ссылки после волны de-superpowers: project-bootstrap/README.md:47 (фактически врёт про шаблон — «use superpowers» уже удалён из CLAUDE.md.template), project-discipline/README.md:13 (docs/superpowers/ пути), recommend-dont-menu/README.md:7 (superpowers:brainstorming). Найдено: sovereign-catalog-wave2-review (F4).
**Status:** ready
**Where I stopped:** (not started) — SKILL.md всех трёх чисты (de-superpowers), README отстали; волна чистила SKILL.md, не README. Связано: skill-readmes (🟡 paused).
**Next action:** Вычистить superpowers-упоминания из трёх README: bootstrap README L47 переписать под актуальный шаблон (без «use superpowers»), discipline README L13 — убрать docs/superpowers/ пути, recommend-dont-menu README L7 — убрать superpowers:brainstorming. Commit "docs: de-superpowers per-skill READMEs".
**Branch:** master
**Weight:** cheap-ok
**Notify:** OpeItcLoc03/workshop
<!-- created-by: vitya@DESKTOP-NSEF0UK / from: sovereign-catalog-wave2-review / 2026-08-12 -->
---
## ⚪ [skills-live-claudemd-superpowers-trigger] — корневой CLAUDE.md репо skills всё ещё содержит триггер «use superpowers» (L5); шаблон project-bootstrap уже без него (de-superpowers), свой файл не перегенерирован. Найдено: sovereign-catalog-wave2-review (F5).
**Status:** ready
**Where I stopped:** (not started) — CLAUDE.md L5 «use superpowers»; в каталоге скил это стейл-ссылка (плагин не инсталлирован — триггер инертен), противоречит суверенному каталогу.
**Next action:** Убрать строку «use superpowers» из корневого CLAUDE.md (или подтвердить у владельца сознательное сохранение); сверить остальные триггерные строки с установленными скилами. Commit "chore: drop stale use superpowers trigger from CLAUDE.md".
**Branch:** master
**Weight:** cheap-ok
**Notify:** OpeItcLoc03/workshop
<!-- created-by: vitya@DESKTOP-NSEF0UK / from: sovereign-catalog-wave2-review / 2026-08-12 -->