docs(m5): handoff в новую сессию после Пакетов 1-2
Готовый промт-эстафета для продолжения Машины 5 с Пакета 3: дерево (worktree+ветка), источники (spec §3/§10 + план R1 + этот handoff), план использования скилов с HARD-запретом на нарушение алгоритма (audit-context только 4/5/7; net-new 3/6/8 skip; TDD RED-first; focus-линза; systematic-debugging на непредвиденный красный; инлайн без суб-агентов; commit-not-push), квирки (vitest absolute / git PowerShell / tdd-real-test- verifier не принимает it.each + coverage-ссылка в Edit), состояние (Пакет 122b84fbb+ Пакет 2b6d06ede, baseline 2649+2), вскрытые аудитом расхождения план↔код (writer unsigned / F5 мнимая / force-push door мут / router-gate default-deny). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
# Машина 5 — handoff в новую сессию (после Пакетов 1-2)
|
||||
|
||||
> **Это готовый промт.** Скопируй блок «=== ПРОМТ ДЛЯ НОВОЙ СЕССИИ ===» целиком в новую сессию.
|
||||
|
||||
Кодовая фраза эпика: **«роутер-наставник»**.
|
||||
|
||||
---
|
||||
|
||||
## === ПРОМТ ДЛЯ НОВОЙ СЕССИИ ===
|
||||
|
||||
роутер-наставник — ПРОДОЛЖИТЬ РЕАЛИЗАЦИЮ Машины 5 с Пакета 3.
|
||||
|
||||
Продолжаем эпик «роутер-наставник» (цепочка план→роутер→судья→владелец→ПОЛ).
|
||||
Машина 5 (несущий пол) строится по плану. Пакеты 1-2 уже сделаны и закоммичены.
|
||||
Твоя задача — продолжить реализацию С ПАКЕТА 3, СТРОГО соблюдая алгоритм
|
||||
использования скилов (п.4 — нарушать ЗАПРЕЩЕНО).
|
||||
|
||||
1. ДЕРЕВО (вся работа здесь, НЕ в основном репо):
|
||||
путь: c:\моя\проекты\портал crm\Документация\.claude\worktrees\brainrepo
|
||||
ветка: worktree-brainrepo
|
||||
Все git/vitest — с этим путём. «parallel session lock» → закрой второе окно
|
||||
Claude на этом дереве; замок протухнет за 5 минут.
|
||||
ОПЕЧАТКА-ловушка: «Документация» — русские а/и (не украинская «і»).
|
||||
|
||||
2. ПРОЧИТАТЬ ПЕРВЫМ:
|
||||
- Spec: docs/superpowers/specs/2026-06-07-router-mentor-machine-5-floor-design.md
|
||||
(§3 пять блоков + §10 «Амендмент» Δ1-Δ9 + N1/N5).
|
||||
- План: docs/superpowers/plans/2026-06-07-router-mentor-machine-5-floor.md
|
||||
(шапка «Ревизия R1»; Пакеты 3-8 — задачи+критерии+линзы, бит-сайз пишется
|
||||
just-in-time на RED).
|
||||
- Этот handoff: docs/superpowers/plans/2026-06-07-router-mentor-machine-5-handoff-session2.md
|
||||
(раздел «СОСТОЯНИЕ» ниже — что уже сделано и какие расхождения план↔код вскрыты).
|
||||
|
||||
3. ГДЕ СТОИМ (HEAD = b6d06ede):
|
||||
- Машины 1-4 собраны+переаудичены ранее; М4 инертна ($0).
|
||||
- Машина 5 Пакет 1 — ГОТОВ, commit 22b84fbb (classifyDestructive двухуровневый
|
||||
{floor,suspicious} + rewire a2CaseSelect/detectHighRisk; оба локальных
|
||||
DESTRUCTIVE_RE удалены; Δ9-б seed-инвариант m5-floor-invariants.test.mjs).
|
||||
- Машина 5 Пакет 2 — ГОТОВ, commit b6d06ede (несущий пол: tools/floor-decide.mjs +
|
||||
tools/enforce-floor.mjs matcher '*' + дверь владельца Δ1 read-only + Δ7
|
||||
defense-in-depth в supreme-gate + C4 migrate:fresh/refresh/reset убраны из
|
||||
router-gate whitelist → default-deny).
|
||||
- Базовая регрессия tools-only сейчас: **2649 passed + 2 skip** (новый baseline).
|
||||
- НАЧАТЬ: Пакет 3 (floor-signer + RECEIPT_DOMAINS.M5_GREEN + occurrence).
|
||||
|
||||
4. ПЛАН СКИЛОВ — HARD-RULE, НАРУШАТЬ ЗАПРЕЩЕНО. Исполнение ИНЛАЙН через
|
||||
superpowers:executing-plans. Суб-агенты / Task / Workflow / ultracode ЗАПРЕЩЕНЫ.
|
||||
Петля на КАЖДЫЙ пакет:
|
||||
(1) executing-plans ведёт пакет;
|
||||
(2) audit-context-building — ТОЛЬКО Пакеты 4,5,7 (трогают существующий код M1-M4/
|
||||
хуки); на net-new Пакетах 3,6,8 ПРОПУСТИТЬ (понимать нечего, скил для
|
||||
существующего кода);
|
||||
(3) test-driven-development — RED→GREEN, реальный expect в изменённом фрагменте;
|
||||
(4) линзы: focus-линза пакета из таблицы плана ОБЯЗАТЕЛЬНА; две другие
|
||||
(sharp-edges / корректность / agentic-actions-auditor) — по риску, не вслепую;
|
||||
(5) requesting-code-review инлайн (суб-агент запрещён → самопроверка по чеклисту);
|
||||
(6) verification-before-completion — без свежего прогона «готово» НЕ говорить;
|
||||
(7) regression (quick per-пакет, full в конце) — sentinel ≥2649 passed + 2 skip.
|
||||
Спец: systematic-debugging при ЛЮБОМ непредвиденном красном (НЕ угадывать фикс!);
|
||||
verify на Пакете 4 (живой прогон тулчейна после сужения node-whitelist — RISK);
|
||||
finishing-a-development-branch только под слово владельца «пуш».
|
||||
ЗАПРЕЩЕНО: пропускать audit-context-building на 4/5/7; линзы вслепую вместо focus;
|
||||
угадывать фикс вместо systematic-debugging; код до RED; два инструмента на задачу;
|
||||
«готово» без verification; суб-агенты.
|
||||
|
||||
5. ЖЁСТКИЕ ПРАВИЛА: commit-not-push (пуш только по слову «пуш»); эпик в памяти +
|
||||
spec/план/handoff в worktree, НЕ в основном CLAUDE.md (worktree-эксцепшн);
|
||||
владельцу — простым языком, код/память — технически; активация хуков в
|
||||
settings.json (enforce-floor + будущие) — шаг ВЛАДЕЛЬЦА, не код (до регистрации
|
||||
пол инертен); каждый ответ: 1-я строка «экономия:…», 2-я «coverage:…».
|
||||
|
||||
6. КВИРКИ (проверено в сессии 1):
|
||||
- vitest в worktree — одной АБСОЛЮТНОЙ командой, без cd и без &&:
|
||||
node "<wt>\app\node_modules\vitest\vitest.mjs" run --root "<wt>\app" --config "<wt>\app\vitest.config.tools.mjs" [фильтр] (+ --reporter dot для сводки)
|
||||
- git commit через PowerShell, БЕЗ переменных, по одной команде с литеральным путём:
|
||||
git -C "<wt>" add <files> потом отдельно git -C "<wt>" commit -F "<wt>\.scratch\msg.txt"
|
||||
(«Can't find lefthook in PATH» — шум.)
|
||||
- PowerShell/Bash-гейт режет цепочки (&&/;/|) с мутирующей частью (C13) и sort —
|
||||
по одной простой команде.
|
||||
- Glob с {скобками} и tools/+path на кириллице глючит → используй **/имя.mjs.
|
||||
- ХУК tdd-real-test-verifier (важно!): (а) НЕ распознаёт it.each( как тест-блок
|
||||
(regex /\b(test|it)\s*\(/) → пиши for-of + плоский it(); (б) на Edit тест-файла
|
||||
new_string ОБЯЗАН содержать и expect(+it(, И строковый литерал с basename
|
||||
prod-файла, отредактированного в ЭТОЙ сессии (coverage) — иначе no_coverage.
|
||||
Решение: объединяй import+тест в один Edit, ИЛИ упомяни имя модуля
|
||||
(напр. 'classify-destructive') в describe-заголовке/строке. Чисто-import Edit
|
||||
тест-файла отклоняется (no_test_block/no_expect_call).
|
||||
- Базовая регрессия tools-only: 2649 passed + 2 skip.
|
||||
|
||||
7. СТАРТ: прочитай spec §3 (Блок 2) + §10 (Δ4) и план (Пакет 3), запусти
|
||||
superpowers:executing-plans, начни Пакет 3 (net-new → audit-context ПРОПУСТИТЬ,
|
||||
сразу TDD RED). Фокус-линза Пакета 3 — «атака». Коммить каждую задачу, БЕЗ пуша.
|
||||
|
||||
Кодовая фраза эпика: «роутер-наставник».
|
||||
|
||||
## === КОНЕЦ ПРОМТА ===
|
||||
|
||||
---
|
||||
|
||||
## СОСТОЯНИЕ (детали для новой сессии — расхождения план↔код, уже учтённые)
|
||||
|
||||
Аудит-контекст Пакета 2 (mandatory audit-context-building) вскрыл, что **премиссы
|
||||
плана 2.2 не совпадали с кодом**. Это УЖЕ исправлено в Пакете 2 (commit b6d06ede),
|
||||
задокументировано в JSDoc `tools/floor-decide.mjs`. Новой сессии знать для контекста
|
||||
дверей/подписей в Пакетах 3 и 5:
|
||||
|
||||
1. **Writer approval-записей НЕ подписывает.** `enforce-askuser-answer-parser.mjs`
|
||||
пишет `{type:'approve_git_operation', command, ts}` БЕЗ `sig`. Функции
|
||||
`signApprovalRecord`/`verifyApprovalRecord` (домен `RECEIPT_DOMAINS.APPROVAL`)
|
||||
существуют в `askuser-answer-parser.mjs` (P10-c), но к writer'у НЕ подключены.
|
||||
→ План «дверь через verifyReceipt(APPROVAL)» дал бы вечный deadlock. Дверь Пакета 2
|
||||
сделана на реальном механизме: read-only `approve_git_operation` через
|
||||
`shell-content-rules::loadApprovedGitOps` (exact-match + окно 5 мин), интегрити —
|
||||
protected-path side-channel (~/.claude/runtime: runtime-write-deny + Bash/PowerShell
|
||||
гейты; пишет только PostToolUse на реальный AskUser), НЕ HMAC.
|
||||
2. **F5-гонка мнимая.** `enforce-branch-switch.mjs` НЕ потребляет `approve_git_operation`
|
||||
(он на текстовых маркерах). Реальный потребитель `loadApprovedGitOps` — read-only +
|
||||
window, НЕ consume. Гонки нет; floor читает тем же read-only способом.
|
||||
3. **force-push доп-блокируется shell-content GIT_HARD_PATTERNS ВСЕГДА** (даже approved).
|
||||
→ дверь владельца для force-push операционно мута (защита-в-глубину). Дверь реально
|
||||
значима для floor-only (migrate:fresh/reset/refresh/db:wipe). В М5 дверь = «шов под
|
||||
М6» (полный escape — в М6, Р3).
|
||||
4. **router-gate default-deny** (стр.182). После C4 (Пакет 2) migrate:fresh/refresh/reset
|
||||
default-денятся router-gate'ом даже без enforce-floor (SPOF-защита).
|
||||
|
||||
**Для Пакета 3 (floor-signer):** Δ4 в плане УЖЕ честно переписан (§10 Δ4) — подписант
|
||||
НЕ заявляет «защиту ключа от контроллера» (ключ читается через `node tools/X.mjs` до
|
||||
сужения node-whitelist в Пакете 4). Честная ценность: (а) убрать ключ из логов/env;
|
||||
(б) шов под HSM/YubiKey. occurrence-счётчик — анти-пере-зачёт одного green на 2 критерия.
|
||||
Добавить `RECEIPT_DOMAINS.M5_GREEN` в `receipt-sign.mjs` (НЕ дефолтный домен).
|
||||
|
||||
**Для Пакета 5 (критерий):** Δ5 — criterion_id = целостность, не подлинность (защита =
|
||||
подпись подписанта И id∈sealed, обе). Δ6 — 4 проверки регистрируются шагами
|
||||
существующей `runGateLadder` (НЕ плодить criterionFullyProven). `judge-gate-floor.mjs`
|
||||
`criteriaGreenMatched` дополняется fingerprint+подписью.
|
||||
|
||||
## Файлы Машины 5 (созданы/изменены в сессии 1)
|
||||
- Новые: tools/classify-destructive.mjs(+test), tools/floor-decide.mjs(+test),
|
||||
tools/enforce-floor.mjs(+test), tools/enforce-supreme-gate-floor.test.mjs,
|
||||
tools/m5-floor-invariants.test.mjs.
|
||||
- Изменены: tools/judge-orchestrator.mjs(+test), tools/router-engine.mjs(+test),
|
||||
tools/enforce-router-gate.mjs(+test), tools/enforce-supreme-gate.mjs.
|
||||
|
||||
## Осталось: Пакеты 3,4,5,6,7,8 + финал (full regression + finishing-a-development-branch под «пуш»).
|
||||
Reference in New Issue
Block a user