Files
portal/docs/superpowers/plans/2026-06-09-phase8-migration-handoff.md
T

13 KiB
Raw Blame History

Handoff — М7 Фаза 8 «Растворение зоопарка + переезд» (настроить → тест → бой)

Дата: 2026-06-09 · Кодовая фраза: «роутер-наставник». Ветка: worktree-brainrepo · HEAD: 487a6f1d · commit-not-push (origin не тронут). Дерево: c:\моя\проекты\портал crm\Документация\.claude\worktrees\brainrepo (далее <WT>).


Зачем эта фаза (формулировка владельца)

У владельца постоянные глюки в живой работе из-за старого v4-зоопарка хуков. Цель: растворить зоопарк, настроить вместо него машины М1–М6, протестировать «всё работает» на ветке брейнрепо, затем выкатить в бой (merge в main по слову «пуш»). Это ровно М7 Фаза 8 (дизайн docs/superpowers/specs/2026-06-08-router-mentor-machine-7-design.md §9/§10/§12).

Что сделано этой сессией (A1 — закрыт)

A1 (🟦-проводка судьи М4 на Гейт-2) реализован TDD, инертен ($0), commit-not-push:

  • tools/enforce-judge-gate.mjs: parseJudgeResponse (fail-closed) / extractGate2Product (Write-only детект плана docs/superpowers/plans/*.md) / callJudgeModel (async транспорт callAnthropicAPI/Sonnet за ROUTER_LLM_KEY; unavailable ≠ malformed) / runJudgeGate async (судья недоступен → degraded-allow + WARN, не block-all — урок v4) / runJudgeTurn+main (inert=$0 / shadow=прогон+лог J8+allow / live-block=прогон+лог+decide).
  • Коммиты 0c6f084f..e8958155 + спека/план 44c194bc/843097c0/cfca7ecf + активационная заметка 487a6f1d.
  • Регрессия tools-only 3323 passed / 2 skipped / 0 failed. Движок М4 / стены / пол / нормативка / CLAUDE.md — НЕ тронуты.
  • Активация A1 (твои 🔴-шаги) — docs/superpowers/runbooks/2026-06-09-A1-judge-gate2-activation.md. Войдёт в общий переезд Фазы 8, отдельно включать не нужно.

Дорожная карта (приоритет — твой)

  1. Хвосты: что осталось ДО настройки всех машин (ПЕРВЫЙ приоритет, read-only аудит — безопасно).
  2. Настройка машин на брейнрепо (регистрация + увольнение зоопарка — твой settings.json).
  3. Тест «всё ок» (тест-гейт §9.2).
  4. Выкат в бой (по «пуш» → merge в main).

⚠️ Жёсткий порядок (иначе вместо починки — дыра)

  • §10 V1/V1-PS (БЛОКЁР): router-gate и powershell-gate снимаются только ПОСЛЕ переноса их полного чёрного списка (≈20 классов Bash + весь PowerShell) в пол М5 (content-floor, правило 8). Раньше — откроются все эти команды.
  • Правило 7 / L6 escape-survivability: остающиеся content-стражи (read-path-deny / mcp-classification / normative-content-rules) обязаны читать escape-грант М6, иначе аварийная кнопка владельца работает лишь частично (DOC-1).
  • Тест-гейт §9.2 (обязателен до переключения): регрессия tools-only ≥ 2843 passed + 2 skip; per-machine smokes (каждая М1–М6 блокирует свой класс, fail-CLOSE, громко); интеграционные smokes (escape сквозной; манифест кричит при снятом страже; ЗАКОН требует ключ, КАРТА — нет; дисциплина fail-CLOSE+громко; журнал-факт не обходится текстом). Зелёное по каждому пункту.
  • Big-bang без обкатки — ПРИНЯТ владельцем (§11), но рекомендация дизайнера: короткий тихий период D28 (shadow) у судьи М4 перед hard-block.

Шаг 1 — аудит готовности (с него начинает новая сессия)

Read-only: пройти §12 дизайна пункт-за-пунктом и сверить «собрано в коде / осталось» по факту (tools/*.mjs). Критично подтвердить в первую очередь:

  • М5 content-floor port (matchBashHardBlacklist/BASH_HARD_BLACKLIST → пол; PowerShell-набор; floor-write-guard на содержимое node/PowerShell-команд) — блокёр увольнения router-gate/powershell-gate.
  • escape-survivability — читают ли read-path-deny/mcp-classification/normative-content-rules escape-грант.
  • ИИ-проводка судьи (live llmCall в enforce-judge-gate — A1 шов готов; нужен реальный транспорт в live-block + ключ/флаг владельца).
  • PostToolUse skill-журналер (SE-K), доска «кто на посту», манифест-самопроверка (floor-manifest-check — уже есть, §7), normative-канал КАРТА/ЗАКОН.
  • Память (M1M6 *_done.md в memory/) говорит «Фазы 0–7 собраны» — но это надо верифицировать по коду, не на доверии. Итог Шага 1 — точная карта остатка: «вот что достроить до безопасного увольнения зоопарка».

Источники истины (читать)

  • Дизайн М7: docs/superpowers/specs/2026-06-08-router-mentor-machine-7-design.md (§5 карты покрытия / §9 план переезда / §10 список увольнений / §11 пределы / §12 инвентарь для writing-plans).
  • Манифест регистрации (9 хуков М1–М6): tools/floor-manifest-check.mjsDEFAULT_REQUIRED_HOOKS: enforce-floor (М5 пол, PreToolUse) · enforce-supreme-gate (М2 стена, PreToolUse) · enforce-normative-content-rules · enforce-read-path-deny · enforce-mcp-classification · enforce-judge-gate (М4) · enforce-snapshot (М6, PreToolUse после пола) · enforce-floor-escape-consume (М6, PostToolUse) · enforce-skill-journaler (М1, PostToolUse).
  • §10 увольнение (опасный порядок!): старая защита router-gate/powershell-gate/runtime-write-deny/verify-before-push/verify-record/branch-switch; старый судья llm-judge-per-tool/-response-scan; старый роутер router-prehook/router-tool-gate/router-stop-gate/router-embedding-warmup; поглощённая дисциплина memory-coverage/coverage-verify/tdd-gate/tdd-real-test-verifier/self-debrief-detector/rationalization-audit/todowrite-skill-verifier/prompt-injection; мёртвый груз decomposition-detector/safe-baseline-metering/parallel-session-lock; субагентные subagent-return-scanner/subagent-prompt-prefix; Класс 6 findOverride/findOverrideAttempt. Остаются: observer-stop-hook/cost-stop-hook/askuser-cosmetic-detector + content-стражи М5.
  • Реестр хвостов эпика: docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md (раздел A — активация).
  • A1 активация: docs/superpowers/runbooks/2026-06-09-A1-judge-gate2-activation.md.

Квирки среды (экономят время)

  • vitest — через Bash tool (PowerShell-гейт режет npx/node): npx vitest run --root "<WT>/app" --config "<WT>/app/vitest.config.tools.mjs" <фильтр> --reporter dot. БЕЗ cd, абсолютный --root.
  • git — через PowerShell git -C "<WT>" ..., отдельными командами (без if), короткие ASCII commit-msg. git --no-verify запрещён гейтом (G5). --%/Write-Output режутся PowerShell-гейтом — не использовать.
  • TDD-gate / real-test-verifier: новый describe в тест-файле добавлять так, чтобы правка содержала it+expect (надёжнее — Write тест-файла целиком).
  • settings.json + keychain — закрыты Claude'у (рубильники владельца). Память харнесса (memory/) требует активного claude-md-management + coverage: direct:memory-sync.
  • «Can't find lefthook in PATH» — ШУМ, игнор. CLAUDE.md в worktree НЕ трогать (чужая зона).
  • Субагенты / Task / Workflow — ЗАПРЕЩЕНЫ (всё инлайн). commit-not-push (пуш ТОЛЬКО по слову «пуш»). 1-я строка ответа «экономия:…», 2-я «coverage:…».
  • Цепочка скилов для несущего кода (высылать на согласование ДО старта): brainstorming → audit-context-building → sharp-edges → variant-analysis → writing-plans → executing-plans (инлайн TDD, наблюдаемый RED) → verification-before-completion → regression. НЕ requesting-code-review. Для read-only аудита — без adversarial-скилов.

=== ПРОМТ ДЛЯ НОВОЙ СЕССИИ (скопировать целиком) ===

роутер-наставник. Продолжаем эпик — М7 Фаза 8 «растворение v4-зоопарка + переезд». У владельца постоянные глюки в живой работе из-за старого зоопарка хуков; цель — растворить его, настроить машины М1–М6, протестировать на ветке брейнрепо, выкатить в бой. НЕ приступай к коду сразу: прочитай состояние, начни с аудита хвостов, согласуй со мной цепочку скилов перед несущим кодом. Всё инлайн, субагенты/Task/Workflow ЗАПРЕЩЕНЫ.

ДЕРЕВО: c:\моя\проекты\портал crm\Документация\.claude\worktrees\brainrepo, ветка worktree-brainrepo. Git — ТОЛЬКО PowerShell (git -C "<wt>" ...), литеральные пути. Сверь верх: git -C "<wt>" log -10 --oneline (верх — 487a6f1d A1 activation note; ниже A1 0c6f084f..e8958155).

ПРОЧИТАЙ ПЕРВЫМИ: docs/superpowers/plans/2026-06-09-phase8-migration-handoff.md (этот handoff) + docs/superpowers/specs/2026-06-08-router-mentor-machine-7-design.md (§5/§9/§10/§12) + tools/floor-manifest-check.mjs (DEFAULT_REQUIRED_HOOKS) + docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md.

ПЕРВЫЙ ПРИОРИТЕТ (Шаг 1, read-only, безопасно): аудит готовности Фазы 8 — пройти §12 пункт-за-пунктом, сверить по коду tools/*.mjs «собрано / осталось». Критично подтвердить ПЕРВЫМ: (1) М5 content-floor port (BASH_HARD_BLACKLIST + PowerShell в пол — БЛОКЁР увольнения router-gate/powershell-gate, §10 V1/V1-PS); (2) escape-survivability content-стражей (правило 7/L6); (3) ИИ-проводка судьи live; (4) skill-журналер / доска / normative-канал. Память *_done.md верифицировать ПО КОДУ, не на доверии. Итог — карта остатка «что достроить до безопасного увольнения зоопарка».

ДАЛЬШЕ (после аудита): достроить остаток (несущий код, инлайн TDD — ВЫШЛИ цепочку скилов на согласование ДО старта) → карты покрытия §5 → точный deployment-runbook (9 хуков М1–М6 + §10 увольнение + ключи/флаги) → тест-гейт §9.2 (регрессия ≥2843+2skip + per-machine + интеграционные smokes, зелёное по каждому) → переключение settings.json (шаг ВЛАДЕЛЬЦА) → откат наготове → бой (по «пуш» merge в main).

ЖЁСТКОЕ: commit-not-push (пуш ТОЛЬКО по «пуш»); 1-я строка «экономия:…», 2-я «coverage:…»; CLAUDE.md в worktree НЕ трогать; стены М2/М5/М4/М6 не ослаблять; нормативку не двигать; settings.json/keychain — шаг владельца; чужую грязь дерева не коммитить — стейдж своих файлов поимённо. vitest через Bash tool (PowerShell-гейт режет npx/node). Кодовая фраза: «роутер-наставник».

=== КОНЕЦ ПРОМТА ===