From ac76e8096dd5cd7169409ceb48afe6497129017d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 25 Jun 2026 12:19:33 +0300 Subject: [PATCH] =?UTF-8?q?docs(secretary):=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=81-=D1=85=D0=B5=D0=BD=D0=B4=D0=BE=D1=84=D1=84=20?= =?UTF-8?q?=D1=8D=D0=BF=D0=B8=D0=BA=D0=B0=20=D0=BF=D1=83=D1=88=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B3=D0=BE=20=D0=B4=D0=B5=D1=80=D0=B5=D0=B2=D0=B0?= =?UTF-8?q?=20(A+C=20=D0=B2=D0=BB=D0=B8=D1=82=D1=8B,=20B=20=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=D1=81=D1=8F)=20=D0=B4=D0=BB=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=D0=B4=D1=83=D1=8E=D1=89=D0=B5=D0=B9=20=D1=81=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/observer/STATUS.md | 80 ++++++++----------- ...25-secretary-fluffy-EPIC-status-handoff.md | 65 +++++++++++++++ 2 files changed, 100 insertions(+), 45 deletions(-) create mode 100644 docs/superpowers/specs/2026-06-25-secretary-fluffy-EPIC-status-handoff.md diff --git a/docs/observer/STATUS.md b/docs/observer/STATUS.md index 06afd08..0a20af0 100644 --- a/docs/observer/STATUS.md +++ b/docs/observer/STATUS.md @@ -1,15 +1,14 @@ # Brain Status (auto-generated) -Last updated: 2026-06-19T09:01:22.699Z +Last updated: 2026-06-25T09:14:25.680Z | Контролёр | Состояние | Детали | |---|---|---| | C1 L1-watcher | ✅ | [l1-watcher] OK — 0 drift | | C2 Cross-ref consistency | ✅ | [cross-ref-checker] OK — 0 drift in 4 files | -| C3 Observer-of-observer | ✅ | [observer-of-observer] OK — last read 3 week(s) ago | +| C3 Observer-of-observer | ✅ | [observer-of-observer] OK — last read 4 week(s) ago | | C4 Сигнальный статус | ✅ | This file (self-reference) | -| C5 Observer-coverage | ✅ | 2094 episode(s) this month · Stop-hook + post-commit OK | -| C6 Chain map sync | ✅ | [chain-map-checker] OK — 17 chains in sync | +| C5 Observer-coverage | ✅ | 3044 episode(s) this month · Stop-hook + post-commit OK | ## Кто на посту (оборона М1–М6) @@ -33,43 +32,26 @@ Last updated: 2026-06-19T09:01:22.699Z | enforce-todowrite-skill-verifier.mjs | `enforce-todowrite-skill-verifier.mjs` | ✅ | | М4 Судья (приёмка + надзор) | `enforce-judge-gate.mjs` | 🔴 | -Недавние escape владельца: 10 · Недавние блоки: 10 - -**Недавние escape владельца (детали):** - -| Время | Действие | Причина | -|---|---|---| -| 2026-06-18T20:19:20.269Z | mcp:mcp__playwright__browser_navigate:{"url":"http://127.0.0.1:8000/register"} | escape владельца | -| 2026-06-18T20:19:20.267Z | write: | escape владельца | -| 2026-06-18T20:10:26.533Z | bash:npm --prefix app run type-check | escape владельца | -| 2026-06-18T20:10:26.532Z | write:c:/моя/проекты/портал crm/документация/app/tests/frontend/auth-store.spec.ts | escape владельца | -| 2026-06-18T20:10:26.529Z | write:c:/моя/проекты/портал crm/документация/app/tests/frontend/auth-api.spec.ts | escape владельца | -| 2026-06-18T20:05:10.985Z | bash:npm --prefix app run lint:vue | escape владельца | -| 2026-06-18T20:05:10.984Z | bash:npm --prefix app run type-check | escape владельца | -| 2026-06-18T20:05:10.982Z | write:c:/моя/проекты/портал crm/документация/app/resources/js/views/auth/confirmemailview.vue | escape владельца | -| 2026-06-18T20:03:13.578Z | write:c:/моя/проекты/claude-brain/docs/pravila_raboty_claude_v1_1.md | escape владельца | -| 2026-06-18T20:01:53.546Z | write:c:/моя/проекты/портал crm/документация/app/resources/js/router/index.ts | escape владельца | +Недавние escape владельца: 0 · Недавние блоки: 8 **Недавние блоки (детали):** | Время | Действие | Причина | |---|---|---| -| 2026-06-19T08:59:52.931Z | bash:git -c gc.auto=0 commit -F .git/CB_MSG_guide.txt | действие не в плане (ожидался шаг undefined: Bash git add docs/superpowers/router-mentor-wall-GUIDE.md) | -| 2026-06-19T08:50:11.367Z | write:c:/моя/проекты/claude-brain | действие не в плане (ожидался шаг undefined: Write tools/registry-initial-inputs.test.mjs) | -| 2026-06-19T08:50:00.416Z | write:c:/users/administrator/.claude/projects/c--------------claude-brain/b6267c66-30ec-488a-91aa-005ad0ecca3d.jsonl | path «C:/Users/Administrator/.claude/projects/c--------------claude-brain/b6267c66-30ec-488a-91aa-005ad0ecca3d.jsonl» pr | -| 2026-06-19T08:49:52.852Z | bash:cat "$TEMP/claude-economy-b6267c66-30ec-488a-91aa-005ad0ecca3d.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | действие не в плане (ожидался шаг undefined: Write tools/registry-initial-inputs.test.mjs) | -| 2026-06-19T08:49:52.711Z | bash:cat "$TEMP/claude-economy-b6267c66-30ec-488a-91aa-005ad0ecca3d.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ | -| 2026-06-19T08:49:39.301Z | write:c:/моя/проекты/claude-brain | действие не в плане (ожидался шаг undefined: Write tools/registry-initial-inputs.test.mjs) | -| 2026-06-19T08:49:05.830Z | write:c:/users/administrator/.claude/projects/c--------------claude-brain/b6267c66-30ec-488a-91aa-005ad0ecca3d.jsonl | path «C:/Users/Administrator/.claude/projects/c--------------claude-brain/b6267c66-30ec-488a-91aa-005ad0ecca3d.jsonl» pr | -| 2026-06-19T08:49:01.483Z | powershell:$path = "$env:TEMP\claude-economy-b6267c66-30ec-488a-91aa-005ad0ecca3d.json"; if (Test-Path $path) { Get-Cont | действие не в плане (ожидался шаг undefined: Write tools/registry-initial-inputs.test.mjs) | -| 2026-06-19T08:48:56.921Z | bash:ls $TEMP/claude-economy-b6267c66-30ec-488a-91aa-005ad0ecca3d.json 2>/dev/null && cat $TEMP/claude-economy-b6267c66- | действие не в плане (ожидался шаг undefined: Write tools/registry-initial-inputs.test.mjs) | -| 2026-06-19T08:48:56.833Z | bash:ls $TEMP/claude-economy-b6267c66-30ec-488a-91aa-005ad0ecca3d.json 2>/dev/null && cat $TEMP/claude-economy-b6267c66- | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:ls $TEMP/claude-econom | +| 2026-06-25T07:54:02.996Z | bash:git commit -- "docs/superpowers/specs/2026-06-25-secretary-pipeline-A-design.md" "docs/secretary/протокол-наставник | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:git commit -- "docs/su | +| 2026-06-25T07:51:49.071Z | bash:git commit -- "docs/superpowers/specs/2026-06-25-secretary-pipeline-A-design.md" "docs/secretary/протокол-наставник | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:git commit -- "docs/su | +| 2026-06-25T07:48:28.072Z | bash:git commit -- "docs/superpowers/specs/2026-06-25-secretary-pipeline-A-design.md" "docs/secretary/протокол-наставник | [verify-gate] расписка отклонена (stale-fingerprint) — пере-прогоните verify (staged-diff изменился / битая подпись) | +| 2026-06-25T07:48:27.839Z | bash:git commit -- "docs/superpowers/specs/2026-06-25-secretary-pipeline-A-design.md" "docs/secretary/протокол-наставник | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:git commit -- "docs/su | +| 2026-06-25T04:50:29.265Z | bash:node -e "process.stdout.write('KEY='+(!!process.env.SECRETARY_LLM_KEY)+' BASE='+(process.env.SECRETARY_LLM_BASE_URL | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:node -e "process.stdou | +| 2026-06-25T04:45:11.810Z | bash:grep -n "export function buildStepLine\\|export function splitRawIntoTurns\\|export function realBoundariesFromRaw" | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) | +| 2026-06-25T04:45:11.692Z | bash:grep -n "export function buildStepLine\\|export function splitRawIntoTurns\\|export function realBoundariesFromRaw" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:grep -n "export functi | +| 2026-06-24T13:03:35.613Z | write:c:/моя/проекты/claude-brain/docs/secretary/протокол-наставника/прогон/находки.md | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) | ## Метрики (информационные, не алерты) -- Observer evidence: 2094 episodes this month, 0 observer_error markers, 131 PII matches before filter -- Legacy v1 episodes (not in factor analysis): 2094 -- Last /brain-retro: 23 day(s) ago +- Observer evidence: 3044 episodes this month, 0 observer_error markers, 198 PII matches before filter +- Legacy v1 episodes (not in factor analysis): 3044 +- Last /brain-retro: 29 day(s) ago - Использование узлов: см. `/brain-retro` (раз в спринт). missed_activations: 0. **Неиспользованные узлы — не алерт, если профильной задачи не было** (Pravila §16.4 v1.36; capability-readiness; см. memory `feedback_brain_unused_tools_not_problem` — outside-repo memory store). ## Метрики дисциплины @@ -78,16 +60,16 @@ Baseline дисциплины роутера (этап 2 router discipline overh | Тип задачи | Эпизодов | % с триггер-матчем | % через скил | |---|---|---|---| -| planning | 284 | 5.3% | 17.3% | -| feature | 71 | 5.6% | 2.8% | -| analysis | 49 | 6.1% | 2.0% | -| bugfix | 47 | 8.5% | 23.4% | -| cleanup | 2 | 50.0% | 50.0% | +| planning | 366 | 5.7% | 20.2% | +| feature | 111 | 4.5% | 2.7% | +| analysis | 68 | 5.9% | 4.4% | +| bugfix | 55 | 7.3% | 21.8% | +| cleanup | 4 | 25.0% | 25.0% | | refactor | 1 | 0.0% | 0.0% | -Router step distribution: 1: 1074, 2: 712, 3: 57, 5: 220 +Router step distribution: 1: 1548, 2: 1048, 3: 88, 5: 289 -Boundaries applied (ADR / границы): 52 of 2063 эпизодов (2.5%). +Boundaries applied (ADR / границы): 89 of 2973 эпизодов (3.0%). ## Активные многоэтапные проекты @@ -99,11 +81,11 @@ Boundaries applied (ADR / границы): 52 of 2063 эпизодов (2.5%). ## Длинные сессии -⚠️ Сегодня (2026-06-19 UTC) есть сессии с ≥50 ходов — корреляция с падением дисциплины роутинга (retro #5 candidate B). +⚠️ Сегодня (2026-06-25 UTC) есть сессии с ≥50 ходов — корреляция с падением дисциплины роутинга (retro #5 candidate B). | session_id | макс. ход | % regulated | последний эпизод | |---|---|---|---| -| `aca79163` | 80 | 0% | 2026-06-19T04:53:00.418Z | +| `e0e992ac` | 87 | 10% | 2026-06-25T09:07:47.215Z | Long sessions correlate with discipline drift. Если % regulated просел в текущей сессии — рассмотри перезапуск. @@ -127,7 +109,7 @@ Episodes since last run: 542 / threshold: 10 ## Reviewer: субагент vs fallback -0 эпизодов проверено из 2094. +0 эпизодов проверено из 3044. ## Reviewer findings @@ -149,7 +131,15 @@ Episodes since last run: 542 / threshold: 10 ## System Health -Долго работающих процессов нет (порог CPU > 1ч). +Топ-3 процессов с CPU > 1ч: + +| PID | Имя | CPU-время | Возраст | +|---|---|---|---| +| 3440 | MsMpEng | 9.21ч | NaNч | +| 1212 | svchost | 2.41ч | NaNч | +| 4 | System | 2.24ч | 0.0ч | + +⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий. ## Очередь обучения роутера @@ -161,7 +151,7 @@ Episodes since last run: 542 / threshold: 10 ## Целостность журналов действий -🔴 Битые цепочки (3 из 91): +🔴 Битые цепочки (3 из 114): | session | broken at seq | |---|---| diff --git a/docs/superpowers/specs/2026-06-25-secretary-fluffy-EPIC-status-handoff.md b/docs/superpowers/specs/2026-06-25-secretary-fluffy-EPIC-status-handoff.md new file mode 100644 index 0000000..d5f3493 --- /dev/null +++ b/docs/superpowers/specs/2026-06-25-secretary-fluffy-EPIC-status-handoff.md @@ -0,0 +1,65 @@ +# Эпик «пушистое дерево» секретаря — СТАТУС и HANDOFF (для следующей сессии) + +**Дата:** 2026-06-25 · **Состояние main:** `d6dc0f7` (A+C влиты, забэкаплены в gitea) · полная сюита +`tools` — **4639 зелёных** · флаг `SECRETARY_FLUFFY` **выключен** → живой секретарь не тронут. + +## Что это за эпик +Превратить вывод секретаря из «ободранного дерева» (ствол + куча статичных скрытых веток) в **пушистое +дерево**: ствол + живые ветки (закрываются/сужаются/растут садовником) + заземлённый брейншторм-кандидаты ++ горящие Л8/Л9, со сквозной прослеживаемостью и сворачиванием. Декомпозиция на 3 подпроекта (каждый — +свой цикл спека→план→исполнение): + +| | Подпроект | Статус | +|---|---|---| +| **A** | боевой конвейер веток (диагностика 8/8 ∥ ловец → брейншторм → садовник → применение) | ✅ ВЛИТ в main (`aded6b8`) | +| **C** | рендер пушистого дерева (`renderFluffy` + развилка `renderDoc` + проводка в stop-хук) | ✅ ВЛИТ в main (`d6dc0f7`) | +| **B** | фоновый воркер (очередь-один-писатель) + включение флага | ⬜ НЕ НАЧАТ | + +## Сделано (A + C) +- **A** (`docs/superpowers/specs/2026-06-25-secretary-pipeline-A-design.md` + план + `…/plans/2026-06-25-secretary-pipeline-A.md`): новые модули `secretary-armor.mjs` (JSON-броня, + опора-словарь, линзы), `secretary-trunkdiff.mjs`, `secretary-models.mjs` (5 слотов), `secretary-harvest.mjs` + (диагностика 8/8/ловец/брейншторм без лимита), `secretary-gardener.mjs` (close-с-пруфом + В1-гейт), + `secretary-apply.mjs` (ветки/кандидаты-накопление/тенд). Дирижёр `secretary-distill.mjs` — развилка по + флагу (новый путь / старый аудит). 50 тестов. Промпты перенесены из доказанной песочницы `.scratch/sec/v2.mjs`. +- **C** (`…/specs/2026-06-25-secretary-render-C-design.md` + `…/plans/2026-06-25-secretary-render-C.md`): + `secretary-render-fluffy.mjs` — `renderFluffy(protocol,opts)` (markdown по макету) + `renderDoc(...,env)` + (флаг ON → пушистый, OFF → старый `renderProtocol`). Проводка: `secretary-stop-hook.mjs:143,165` зовут + `renderDoc`. 10 тестов. +- **Флаг** `fluffyPipelineOn(env)` в `secretary-flag.mjs` (`SECRETARY_FLUFFY=1|true`). ВЫКЛ по умолчанию. + +## Осталось — B (фоновый воркер). Дизайн уже решён владельцем +**Все 8 архитектурных решений + рабочий поток + про кандидаты/прослеживаемость — в** +`docs/secretary/протокол-наставника/прогон/НАХОДКИ.md`, раздел **«ДИЗАЙН-РЕШЕНИЯ 25.06»** (читать первым). +Ключевое для B: +- **Гонка, которую B обязан решить:** убежали на 3 хода → фон затирает свежий протокол старым (потерянное + обновление). **Решение:** очередь с ОДНИМ работником, спаны по порядку, каждый берёт протокол-после- + предыдущего; никогда два сразу. Протокол ДОГОНЯЮЩИЙ (отстаёт на N ходов), но не ломается. **Лаг принят.** +- **Один протокол, ЕДИНСТВЕННЫЙ писатель — редактор.** Фон сам в файл не пишет — отдаёт результат + редактору. Один писатель = нет затирания. +- Ствол (редактор) — на критпути (или тоже в очередь); ветки (1.1/1.2/1.3/садовник) — в фон. +- **B включает флаг** (`SECRETARY_FLUFFY=1`) — конвейер идёт вживую. Это повышает ставки → B самый рисковый. +- **Непроверенное механикой (тест при B):** гравитация (продвижение кандидата в ствол, когда владелец + заговорил об идее); reopen/обратный каскад (в тесте не было повода); сжатие длинной истории на масштабе. +- Латентность, обосновавшая B: брейншторм 67-97с (см. НАХОДКИ «Латентность флэша»). + +## Как поднять B (следующая сессия) +1. **Включить штатный режим** (`да, штатный`) — экспериментальная работа секретаря шла в нём весь + 25.06 (стена опущена, пол/проверки остаются). Стена по умолчанию поднята в новой сессии. +2. **Брейншторм** (передняя дверь) → спека B → план B → исполнение (как A/C). Дизайн B уже почти готов в + НАХОДКИ — брейншторм будет коротким (формализация + решить, где физически живёт очередь и чем триггерится). +3. Реализация — TDD, на ветке (не main), коммит/merge через терминал владельца (пол блокирует агента; + `node tools/produce-verify-receipt.mjs` перед коммитом, `-m` ДО `--`, влитие fast-forward). + +## Опорные файлы (карта) +- **Находки + дизайн-решения + макет вида:** `docs/secretary/протокол-наставника/прогон/НАХОДКИ.md`, + `…/прогон/ФИНАЛЬНЫЙ-ВИД-макет.md`. +- **Доказанная песочница (источник промптов/логики):** `.scratch/sec/v2.mjs` (НЕ удалять до конца эпика — + референс для B; после — прибрать по CLAUDE.md п.11). +- **Спеки/планы A,C:** `docs/superpowers/specs/2026-06-25-secretary-*.md`, `…/plans/2026-06-25-secretary-*.md`. +- **Боевой код:** `tools/secretary-{armor,trunkdiff,models,harvest,gardener,apply,render-fluffy,flag,distill,stop-hook}.mjs` + `.test.mjs`. + +## Коммит-механика в этом репо (памятка) +Пол блокирует коммит/merge агента. Путь: контроллер `git add` + `node tools/produce-verify-receipt.mjs` +(зелёная сюита) → **владелец вставляет `git commit`/`git merge`/`git push gitea main` в свой терминал** +(`-m` ДО `--`; на unlink-pack отвечать `n`). docs-only коммиты проходят сами, смешанные — нужна расписка.