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

52 KiB
Raw Blame History

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

[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


🟡 [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


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

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

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

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

If neither holds → block with message:

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

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

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

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

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

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

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

Implementation:

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

Activation pattern (per-repo):

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

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

Out of scope:

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

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

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

Bypass:

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

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


[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 с шапкой:

# Archived — Done batch 2026-05

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

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

---

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

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

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


[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


[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


[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


[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

Обязательные скилы — вызвать до начала работы

  • 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


[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)

Обязательные скилы — вызвать до начала работы

  • 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


🔵 [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\systemprofileauth.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


🟡 [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


🟢 [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


🟢 [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


[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


[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