Files
skills/.tasks/STATUS.md

656 lines
76 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
-->
## ⚪ [#315 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 файле.)
**Created:** 2026-06-08
**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) -->
---
## 🟡 [#24 skill-readmes] — write English README.md for every skill + translate root README
**Status:** paused
**Created:** 2026-04-28
**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
---
## ⚪ [#23 archive-roundtrip-test] — smoke-test for .skill archive shape
**Weight:** needs-human
**Status:** ready
**Created:** 2026-04-28
**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)
---
## 🟡 [#49 active-platform-eval] — eval-driven tuning of active-platform (description + body), absorbs `[active-platform-tuning]`
**Status:** paused
**Created:** 2026-05-05
**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
---
## ⚪ [#25 skills-grouping-revisit] — revisit flat vs grouped skills/ layout if count grows past ~30
**Weight:** needs-human
**Status:** ready
**Created:** 2026-04-28
**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)
---
## ⚪ [#53 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
**Created:** 2026-05-06
**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 -->
---
## ⚪ [#64 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
**Created:** 2026-05-07
**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 -->
---
## ⚪ [#63 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
**Created:** 2026-05-07
**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 -->
---
## ⚪ [#254 meta-host-routing-install] — Установить новый скил `meta-host-routing` v0.1.0 (закоммичен локально a7526d1, ещё не установлен — потому не триггерит).
Запустить `install.sh` в `~/projects/claude-skills/`, проверить что скил активируется в новой сессии, `/reload-plugins`.
**Weight:** needs-human
**Status:** ready
**Created:** 2026-05-27
**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 -->
---
## ⚪ [#255 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
**Created:** 2026-05-27
**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 -->
---
## ⚪ [#336 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
**Created:** 2026-06-09
**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 -->
---
## ⚪ [#335 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
**Created:** 2026-06-09
**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 -->
---
## ⚪ [#337 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
**Created:** 2026-06-09
**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 -->
---
## 🔵 [#443 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
**Created:** 2026-06-18
**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 -->
---
## 🟢 [#655 agent-neutral-skill-pipeline] — ДОЛГ (идея 19 п.5): инсталл/апдейт-пайплайн скилов — claude-only. update-claude-skills ставил только в ~/.claude/skills; pi получил каталог вручную (settings skills array, идея 6). Цель: update-skills обслуживает всех агентов (единый канон + честный per-agent срез).
**Status:** done
**Created:** 2026-08-12
**Where I stopped:** РЕШЕНИЕ ОПЕРАТОРА (2026-08-12, зафиксировано после вскрытия непротоколированного решения вчерашней сессии «канон = ~/.claude/skills»): **dual install target**. install.sh/ps1 + update.sh/ps1 ставят в ОБА каталога: ~/.claude/skills (Claude Code — читает только его нативно, кастомные диры не конфигурируются) + ~/.agents/skills (pi — нативный скан-путь, нейтральный неймспейс .agents/). Из ~/.pi/agent/settings.json убран skills-массив (вендор-лок устранён). update-skills SKILL.md v0.2.1 — секция «Install targets (dual, agent-neutral)», semver-bump, lint 46/0. Оба таргета синхронны (46/46, diff IDENTICAL). Источник истины — git-репо skills/, оба дира — инсталлы.
**Next action:** (none — kept until merged) pi перезапустить чтобы убедиться, что скилы грузятся из ~/.agents/skills (нативный скан без settings-хака).
**Branch:** master
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-12T09:58:08.312Z -->
<!-- closed-by: pi session 2026-08-12 / dual install target: ~/.claude/skills + ~/.agents/skills, pi settings hack убран, update-skills v0.2.1 -->
---
## 🟢 [#656 readme-command-index-row] — README.md + README.ru.md: 0 строк про скил `command-index` (провенанс-таблица не обновлена); заодно стейл-заметка README.md про `install.ps1` («not yet implemented», а build.ps1/update.ps1 существуют). Найдено: command-index-review (F1/F2).
**Status:** done
**Created:** 2026-08-12
**Where I stopped:** F1/F2 закрыты: README.md + README.ru.md — строка command-index в провенанс-таблице (author: ours, идея 3/18); стейл-заметка про install.ps1 («not yet implemented») исправлена — install.ps1 существует. Commit 32979fb.
**Next action:** (none — kept until merged)
**Branch:** master
**Weight:** cheap-ok
**Notify:** OpeItcLoc03/workshop
<!-- created-by: vitya@DESKTOP-NSEF0UK / from: command-index-review / 2026-08-12 -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-12T17:26:16.506Z / note: F1/F2 закрыты: README.md + README.ru.md — строка command-index в провенанс-таблице (author: ours, идея 3/18); стейл-заметка про install.ps1 («not yet implemented») исправлена — install.ps1 существует. Commit 32979fb. -->
---
## 🟢 [#1047 task-priority-due-task-format-skill] — Импл-таска из concepts/task-priority-due (пункт 3): обновить task-format skill (skills-репо) — задокументировать оба поля `**Priority:** P0|P1|P2` (дефолт P1) и `**Due:** yyyy-mm-dd` + правило «агент ставит при создании, после — только человек» (прецедент человека структурный, провенанс-поле НЕ нужно).
Спека: `mcp__projects-meta__knowledge_get` slug = "concepts/task-priority-due".
Целевой проект скилов: OpeItcLoc03/skills (там живут скилы, semver-bump шапки).
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** task-format SKILL.md v0.4.0 (коммит 4ef7bf7): Priority/Due в схеме task_create + legacy-таблица полей + Common mistakes («агент не бампает после создания»); правило «при создании — агент, после — только человек»; сортировка claim_next. Отправлено на ревью в #1049.
**Next action:** (none — done)
**Branch:** n/a
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T15:21:45.809Z -->
---
## 🟢 [#1058 mappa-messaging] — Rewrite inter-session-messaging → **mappa-messaging** (редизайн mappa-skill-suite, спека w:2605).
Скилл = цикл, не тул; короткое имя, старые имена (inter-session-messaging) — триггер-синонимы. Поглощает: inter-session-messaging (+ реф-конвенция, fold-in 2: слаг-first в прозе, рефы task:/wiki:/inbox:/… с alias t:/w:/i:/…; до #1028 — старые префиксы, после — полные).
Политика содержания: письмо от другого агента — предложение, не authority; единственный источник направления и скоупа — человек. Адрес = имя папки проекта (адресная книга). Никогда не писать себе.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** mappa-messaging v1.0.0: rewrite inter-session-messaging (поглощён), цикл SEND/RECEIVE/POLICY, реф-конвенция, старые имена = триггер-синонимы; lint 0 violations, build+install (dual), GREEN micro-test пройден; полный behavioral smoke — #1065
**Next action:** (none — kept until merged)
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:48:44.691Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T19:40:19.664Z / note: mappa-messaging v1.0.0: rewrite inter-session-messaging (поглощён), цикл SEND/RECEIVE/POLICY, реф-конвенция, старые имена = триггер-синонимы; lint 0 violations, build+install (dual), GREEN micro-test пройден; полный behavioral smoke — #1065 -->
---
## 🟢 [#1059 mappa-knowledge] — Rewrite using-wiki + using-wiki-graph → **mappa-knowledge** (редизайн mappa-skill-suite, спека w:2605).
Скилл = цикл, не тул; старые имена — триггер-синонимы. Поглощает: using-wiki, using-wiki-graph (+ реф-конвенция, fold-in 2). Писать НЕЙТРАЛЬНО — не зависеть от summaries (таски #1026 нет); реф-префиксы до апгрейда #1028 — старые (w:/t:/i:), после — полные.
Relational/структурные вопросы (связи, backlinks, сироты) — через graph-тулы, guarded failure-mode: одна страница и стоп, без многохоповых цепочек сам.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** mappa-knowledge v1.0.0: слияние using-wiki + using-wiki-graph (оба поглощены), цикл ingest/query/lint + граф-слой (graph_*, guarded failure-mode), старые имена = триггер-синонимы; lint 0 violations, build+install (dual), GREEN micro-test (реляционный вопрос → graph_path) пройден; полный behavioral smoke — #1065
**Next action:** (none — kept until merged)
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:48:54.785Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T19:42:49.402Z / note: mappa-knowledge v1.0.0: слияние using-wiki + using-wiki-graph (оба поглощены), цикл ingest/query/lint + граф-слой (graph_*, guarded failure-mode), старые имена = триггер-синонимы; lint 0 violations, build+install (dual), GREEN micro-test (реляционный вопрос → graph_path) пройден; полный behavioral smoke — #1065 -->
---
## 🟢 [#1060 mappa-brainstorm-promote] — UPDATE workshop-promote-brainstorm → **mappa-brainstorm-promote** (редизайн mappa-skill-suite, спека w:2605). АПДЕЙТ, не rewrite.
Fold-in 1: mappa-service target. Промоут в mappa-сервисные борды (mappa, .common, …) — отдельный канал: сервисные тулы mcp__mappa__task_create/wiki_create (под лизом, claim через task_claim_next); pointers-таска НЕ нужна, если спека уже в вики проекта (w:NNNN) — описание импл-таски ссылается на неё; review-umbrella — сервисная таска (status=blocked, blocker=impl#); covering-письмо в инбокс цели (канон delegate-task) — в обоих каналах. Файловый путь (projects-meta → .tasks/STATUS.md) остаётся.
**NB (2026-08-24):** таски при промоушене создавать ПОСЛЕДОВАТЕЛЬНО — параллельный tasks_create → гонка на sha-CAS общего счётчика (agenda-репо), часть тасок падает с PushRejected (инцидент при промоуте mappa-skill-suite: 6/7 упали, повторены последовательно).
Fold-in 1: mappa-service target. Промоут в mappa-сервисные борды (mappa, .common, …) — отдельный канал: сервисные тулы mcp__mappa__task_create/wiki_create (под лизом, claim через task_claim_next); pointers-таска НЕ нужна, если спека уже в вики проекта (w:NNNN) — описание импл-таски ссылается на неё; review-umbrella — сервисная таска (status=blocked, blocker=impl#); covering-письмо в инбокс цели (канон delegate-task) — в обоих каналах. Файловый путь (projects-meta → .tasks/STATUS.md) остаётся.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** mappa-brainstorm-promote v1.2.0 (UPDATE workshop-promote-brainstorm, старое имя = триггер-синоним): mappa-service channel (fold-in 1 — лиз, wiki_create, task_create последовательно, без pointers если спека в вики w:NNNN, сервисная review-umbrella, covering-письмо); NB последовательности тасок (гонка sha-CAS); file channel сохранён; lint 0 violations, build+install, GREEN micro-test (service channel) пройден; полный smoke — #1065
**Next action:** (none — kept until merged)
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:49:01.430Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T19:45:55.665Z / note: mappa-brainstorm-promote v1.2.0 (UPDATE workshop-promote-brainstorm, старое имя = триггер-синоним): mappa-service channel (fold-in 1 — лиз, wiki_create, task_create последовательно, без pointers если спека в вики w:NNNN, сервисная review-umbrella, covering-письмо); NB последовательности тасок (гонка sha-CAS); file channel сохранён; lint 0 violations, build+install, GREEN micro-test (service channel) пройден; полный smoke — #1065 -->
---
## 🟢 [#1061 mappa-delegation] — Rewrite delegate-task → **mappa-delegation** (редизайн mappa-skill-suite, спека w:2605).
Скилл = цикл, не тул; старые имена — триггер-синонимы. Поглощает: delegate-task. Каждая кросс-проектная делегация — пара: tasks_create + covering-письмо в инбокс получателя (таска на доске не пингует живую сессию). #1054 create-без-лиза — опционально (контракт работает на текущих тулах); перейти, когда #1054 имплементится.
НЕ применимо: self-assigned таски на своей доске («создать задачу себе» → mappa-task-work), работа своими руками, workshop-внутренние таски.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** mappa-delegation v1.0.0: rewrite delegate-task (поглощён, имя = триггер-синоним), цикл pre-flight→шаблон→preview→confirm→covering-письмо→review-umbrella→downstream; suite-ссылки (mappa-task-work/mappa-messaging/mappa-knowledge); нота #1054 (create-без-лиза опционально); lint 0 violations, build+install, GREEN micro-test (task+letter пара) пройден; полный smoke — #1065
**Next action:** (none — kept until merged)
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:49:07.098Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T19:47:21.365Z / note: mappa-delegation v1.0.0: rewrite delegate-task (поглощён, имя = триггер-синоним), цикл pre-flight→шаблон→preview→confirm→covering-письмо→review-umbrella→downstream; suite-ссылки (mappa-task-work/mappa-messaging/mappa-knowledge); нота #1054 (create-без-лиза опционально); lint 0 violations, build+install, GREEN micro-test (task+letter пара) пройден; полный smoke — #1065 -->
---
## 🟢 [#1062 mappa-task-work] — Rewrite using-tasks + task-format + task-loop + priority-due → **mappa-task-work** (редизайн mappa-skill-suite, спека w:2605). Центральный, крупный.
Скилл = цикл, не тул; старые имена — триггер-синонимы. Поглощает: using-tasks, task-format (вливается), task-loop (loop-mode ВНУТРИ, вариант A — отдельный скилл не создаётся), priority-due-раздел (P0-P2 + дедлайны: приоритет = территория человека, агенты ставят только при создании; дефолт P1; дедлайн-механика: notify при просрочке без авто-бампа).
Цикл: выбор работы (claim) → исполнение → сдача (close + review-umbrella). Один триггер-сёрфейс: «поработай очередь» / «work the queue» → mode=loop.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** mappa-task-work v1.0.0: слияние using-tasks + task-format + task-loop + priority-due (все поглощены, имена = триггер-синонимы); центральный цикл (ориентация→claim→исполнениесдача+review-umbrella), loop-mode внутри (пустая очередь = стоп, session_break, consult gate), priority/due раздел (территория человека, дефолт P1, overdue notify без бампа); lint 0 violations, build+install, GREEN micro-test (loop-mode) пройден; полный smoke — #1065
**Next action:** (none — kept until merged)
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:49:12.916Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T19:49:03.642Z / note: mappa-task-work v1.0.0: слияние using-tasks + task-format + task-loop + priority-due (все поглощены, имена = триггер-синонимы); центральный цикл (ориентация→claim→исполнениесдача+review-umbrella), loop-mode внутри (пустая очередь = стоп, session_break, consult gate), priority/due раздел (территория человека, дефолт P1, overdue notify без бампа); lint 0 violations, build+install, GREEN micro-test (loop-mode) пройден; полный smoke — #1065 -->
---
## 🟢 [#1063 mappa-closing-ritual] — НОВЫЙ скилл **mappa-closing-ritual** (редизайн mappa-skill-suite, спека w:2605).
Финиш-фаза форкфлоу: session-handoff(write) + PROPOSE wiki-ingest + task closes + sweep. Старт ≠ финиш: closing-ritual = write-path с процедурой и подтверждением. Ad-hoc: mode=light — явный вопрос «Сделать handoff?» в конце сессии (НЕ автоматический sweep); решение за человеком. Поглощает: session-handoff(write-часть).
Handoff: sliding, per-project, versioned-история; read на старте — mappa-session-orient, write на финише — тут. Мутации (handoff write / wiki-ingest / task closes) — только после подтверждения пользователя.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** mappa-closing-ritual v1.0.0 (НОВЫЙ): финиш-фаза — handoff write (h:N, versioned) + PROPOSE wiki-ingest + PROPOSE task closes, confirm-gated (мутации только после «да»); mode=light для ad-hoc (явный вопрос «Сделать handoff?», без авто-sweep); поглощает session-handoff write-часть (read — за #1064); lint 0 violations, build+install, GREEN micro-test (полный ритуал + mode=light) пройден; полный smoke — #1065
**Next action:** (none — kept until merged)
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:49:18.719Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T19:50:23.077Z / note: mappa-closing-ritual v1.0.0 (НОВЫЙ): финиш-фаза — handoff write (h:N, versioned) + PROPOSE wiki-ingest + PROPOSE task closes, confirm-gated (мутации только после «да»); mode=light для ad-hoc (явный вопрос «Сделать handoff?», без авто-sweep); поглощает session-handoff write-часть (read — за #1064); lint 0 violations, build+install, GREEN micro-test (полный ритуал + mode=light) пройден; полный smoke — #1065 -->
---
## 🟢 [#1064 mappa-session-orient] — НОВЫЙ скилл **mappa-session-orient** (редизайн mappa-skill-suite, спека w:2605). Самый новый, делается ПОСЛЕДНИМ.
Старт-фаза форкфлоу: контракт + чтение (нужен и для ad-hoc, где нет AGENTS.md-контракта). Поглощает: pulling-before-work (полный цикл --ff-only), session-handoff(read), session-inbox-monitor(raise), using-system-snapshot (liveness-сводка «живо/мертво», одна строка), live-ingest query (потребитель session-live-ingest: GET /session?project=, stale-active детект, «другая связка + не завершена» → предложение: забить / дернуть письмом / продолжить).
Граница: session-orient = «живо/мертво»; глубокая диагностика — вне suite (адхок). Эскалация: проблема на старте → не углубляться, передать человеку/диагностической сессии.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** mappa-session-orient v1.0.0 (НОВЫЙ, последний в suite): старт-ритуал контракт→pull(--ff-only)→handoff-read→inbox-raise→liveness(«живо/мертво»)→live-ingest query (stale-active, другая связка→предложение); граница orient/ops (эскалация, не углубление); поглощает pulling-before-work/session-handoff(read)/session-inbox-monitor/using-system-snapshot; 404-skip для неразвёрнутых /session (E2E шага 6 — за #1055 деплой + #1024 клиент); lint 0 violations, build+install, GREEN micro-test пройден; полный smoke — #1065
**Next action:** (none — kept until merged)
**Blocker:** #1024 session-sync-pi-extension (клиентская часть live-ingest, .common); server #1022 готово
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:49:25.226Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T19:52:24.928Z / note: mappa-session-orient v1.0.0 (НОВЫЙ, последний в suite): старт-ритуал контракт→pull(--ff-only)→handoff-read→inbox-raise→liveness(«живо/мертво»)→live-ingest query (stale-active, другая связка→предложение); граница orient/ops (эскалация, не углубление); поглощает pulling-before-work/session-handoff(read)/session-inbox-monitor/using-system-snapshot; 404-skip для неразвёрнутых /session (E2E шага 6 — за #1055 деплой + #1024 клиент); lint 0 violations, build+install, GREEN micro-test пройден; полный smoke — #1065 -->
---
## 🟢 [#1065 mappa-skill-suite-review] — Skill-review checkpoint для mappa-skill-suite (промоушен 2026-08-24).
**Спецификация:** w:2605 concepts/mappa-skill-suite (mappa wiki). **Источник дизайна (trace):** .workshop/.archive/2026-08-24-mappa-skill-suite.md.
**Импл-таски:** #1058 mappa-messaging, #1059 mappa-knowledge, #1060 mappa-brainstorm-promote, #1061 mappa-delegation, #1062 mappa-task-work, #1063 mappa-closing-ritual, #1064 mappa-session-orient.
**Кто делает:** **не имплементер.** Ревьюер по решению оператора 2026-08-24 — **.workshop** (опытный практик, чистый контекст). Identity-not-location.
**Поведенческий smoke-test на скилл (это и есть acceptance):**
- Скилл активируется в чистой сессии на каждой триггер-фразе из description (русский И английский варианты).
- Скилл **не** активируется на 2-3 близких но не своих фразах из соседних доменов (false-positive check).
- Каждый шаг секции Steps отрабатывает на тестовом буфере без ошибок.
- Failure modes уводят в abort, не в частичный успех.
- What NOT to do соответствует реальности.
**Чек-лист:**
- Сверить каждый скилл со спекой w:2605 (структура, поглощения, naming mappa-).
- Старые имена работают как триггер-синонимы (inter-session-messaging, using-wiki, delegate-task, workshop-promote-brainstorm, using-tasks, session-handoff, pulling-before-work…).
- mappa-session-orient сделан ПОСЛЕДНИМ и учитывает live-ingest (#1022/#1024).
- mappa-task-work: loop-mode, priority/due-раздел, session-break.
- #1060: последовательное создание тасок (NB от промоутера).
Findings → follow-up tasks через tasks_create в OpeItcLoc03/skills.
**Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note.
**Спецификация:** w:2605 concepts/mappa-skill-suite (mappa wiki). **Источник дизайна (trace):** .workshop/.archive/2026-08-24-mappa-skill-suite.md.
**Импл-таски:** #1058 mappa-messaging, #1059 mappa-knowledge, #1060 mappa-brainstorm-promote, #1061 mappa-delegation, #1062 mappa-task-work, #1063 mappa-closing-ritual, #1064 mappa-session-orient.
**Кто делает:** **не имплементер.** Другая сессия / другой день / другой агент (identity-not-location).
**Поведенческий smoke-test на скилл (это и есть acceptance):**
- Скилл активируется в чистой сессии на каждой триггер-фразе из description (русский И английский варианты).
- Скилл **не** активируется на 2-3 близких но не своих фразах из соседних доменов (false-positive check).
- Каждый шаг секции Steps отрабатывает на тестовом буфере без ошибок.
- Failure modes уводят в abort, не в частичный успех.
- What NOT to do соответствует реальности.
**Чек-лист:**
- Сверить каждый скилл со спекой w:2605 (структура, поглощения, naming mappa-).
- Старые имена работают как триггер-синонимы (inter-session-messaging, using-wiki, delegate-task, workshop-promote-brainstorm, using-tasks, session-handoff, pulling-before-work…).
- mappa-session-orient сделан ПОСЛЕДНИМ и учитывает live-ingest (#1022/#1024).
- mappa-task-work: loop-mode, priority/due-раздел, session-break.
Findings → follow-up tasks через tasks_create в OpeItcLoc03/skills.
**Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note.
**Status:** done
**Created:** 2026-08-24
**Where I stopped:** VERDICT: APPROVE-WITH-FINDINGS → все findings зафайлены и исправлены (3 фикса: 78542c0 promote cycle-framing + EN-triggers, 45baadc review-umbrella attribution; 9358a48 review record). Структурно 7/7 скилов против w:2605 (clean-context субагенты, не-имплементер identity). Behavioral smoke: позитив — все старые имена активируют mappa-* скилы; негатив — self-task/«отбой» без ложных срабатываний. Deferred (не findings): live-ingest E2E session-orient шаг 6 после деплоя #1055 + клиента #1024 (404-skip задокументирован); build-hermes unmapped — pre-existing. Suite #1058-1064 closed.
**Next action:** (none — kept until merged)
**Blocker:** impl-tasks: #1058 mappa-messaging, #1059 mappa-knowledge, #1060 mappa-brainstorm-promote, #1061 mappa-delegation, #1062 mappa-task-work, #1063 mappa-closing-ritual, #1064 mappa-session-orient
**Branch:** n/a
**Notify:** OpeItcLoc03/workshop
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-24T18:49:35.068Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-24T20:01:11.918Z / note: VERDICT: APPROVE-WITH-FINDINGS → все findings зафайлены и исправлены (3 фикса: 78542c0 promote cycle-framing + EN-triggers, 45baadc review-umbrella attribution; 9358a48 review record). Структурно 7/7 скилов против w:2605 (clean-context субагенты, не-имплементер identity). Behavioral smoke: позитив — все старые имена активируют mappa-* скилы; негатив — self-task/«отбой» без ложных срабатываний. Deferred (не findings): live-ingest E2E session-orient шаг 6 после деплоя #1055 + клиента #1024 (404-skip задокументирован); build-hermes unmapped — pre-existing. Suite #1058-1064 closed. -->
---
## 🟢 [#1066 mappa-brainstorm-promote-storm-channel] — Апдейт скила mappa-brainstorm-promote (1.5.0 → 1.6.0): миграция с файлового канала на mappa storm-сущности.
Скоуп:
1. Буфер шторма = mappa storm-сущность (type=storm) в ЛЮБОМ проекте (не файл .workshop/.brainstorm/). Скил становится project-agnostic: шторм живёт там, где его ведут, не только в воркшопе.
2. Промоут mappa-service маршрута через storm_promote (атомарно buffer → wiki-страница + archive, решение 7), не через git mv в .workshop/.archive/.
3. Зафиксировать «штормы в любом проекте» в mappa-спеке (concepts/mappa) — сейчас скил воркшоп-центричный.
4. Workshop-meta маршрут: файловые .brainstorm/.archive остаются только для локальной методологии зоны — или мигрируют тоже (решить в таске).
5. Summary-дисциплина уже в 1.5.0 (9b606f7) — не дублировать.
Контекст: решение оператора 2026-08-25 («штормы могут вестись не только в воркшопе»). Связано: wiki:2661 (unified search — storm-карточки), task:1048 (review mappa-wiki-search). Исполнитель — workshop-сессия (оператор: «ты сам сделаешь в новой сессии»).
**Status:** done
**Created:** 2026-08-25
**Where I stopped:** Скил mappa-brainstorm-promote 1.6.0 завершён: storm→brainstorm (коммиты d109479/a875a7f), review субагентом PASS-with-findings → фиксы ef92053 (brainstorm_update для summary, порядок валидации, failure modes, admin_status убран). Review-зонтик task:1052 закрыт. Mappa-канал (task:1054/1055) — done, деплой task:1056 за .admin. Спека wiki:4 решение 26 обновлена.
**Next action:** (none — kept until merged)
**Branch:** n/a
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-08-25T06:00:36.779Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-25T08:05:43.238Z / note: Скил mappa-brainstorm-promote 1.6.0 завершён: storm→brainstorm (коммиты d109479/a875a7f), review субагентом PASS-with-findings → фиксы ef92053 (brainstorm_update для summary, порядок валидации, failure modes, admin_status убран). Review-зонтик task:1052 закрыт. Mappa-канал (task:1054/1055) — done, деплой task:1056 за .admin. Спека wiki:4 решение 26 обновлена. -->
---