From 2ec3dd8f7f320953d8b64f12834b8511490ab7cc 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: Fri, 26 Jun 2026 07:16:19 +0300 Subject: [PATCH] =?UTF-8?q?docs(secretary):=20=D0=B3=D0=B0=D0=B9=D0=B4=20?= =?UTF-8?q?=E2=80=94=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=2011=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=20=D1=81=D0=B5=D0=BA=D1=80=D0=B5=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D1=8F;=20=D1=85=D1=8D=D0=BD=D0=B4=D0=BE=D1=84=D1=84=20?= =?UTF-8?q?=E2=80=94=20=D1=81=D0=BB=D0=B5=D0=B4=D1=83=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D0=B9=20=D1=88=D0=B0=D0=B3=20(=D1=80=D0=B0=D0=B7=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BB=D0=B8?= =?UTF-8?q?=D0=BD=D0=B7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - router-mentor-wall-GUIDE.md: новый раздел 11 «Секретарь» (включение/выключение/снос) + пункт оглавления - 2026-06-25-secretary-fluffy-EPIC-status-handoff.md: раздел «на чём остановились 26.06» — разблокировка линз - содержание.md: убрано закрытое пробное дело «развитие-секретаря» Co-Authored-By: Claude Opus 4.8 --- docs/secretary/содержание.md | 5 +- docs/superpowers/router-mentor-wall-GUIDE.md | 49 +++++++++++++++++++ ...25-secretary-fluffy-EPIC-status-handoff.md | 37 ++++++++++++++ 3 files changed, 88 insertions(+), 3 deletions(-) diff --git a/docs/secretary/содержание.md b/docs/secretary/содержание.md index 93f80f9..5b243ec 100644 --- a/docs/secretary/содержание.md +++ b/docs/secretary/содержание.md @@ -1,3 +1,2 @@ -- [создание-секретаря](создание-секретаря/protocol.md) — Создание фонового секретаря протокола работ · открыто · 2026-06-22 12:40 -- [строительство-секретаря](строительство-секретаря/protocol.md) — Доработка секретаря: двойники дел (№2), выдачи инструментов (№3), надёжность reconcile, целостность «Шагов» · открыто · 2026-06-22 15:50 -- [мета-секретарь](мета-секретарь/protocol.md) — Спроектировать «умного» секретаря: фоновый аудитор скрытых вопросов с отслеживанием мутации и тихого закрытия · открыто · 2026-06-22 12:43 \ No newline at end of file +- [протокол-наставника](протокол-наставника/protocol.md) — Протокол работы с наставником (роутер-наставник) · открыто · 2026-06-24 01:44 +- [секретарь-лидерра](секретарь-лидерра/protocol.md) — секретарь-лидерра · открыто · 2026-06-25 12:41 \ No newline at end of file diff --git a/docs/superpowers/router-mentor-wall-GUIDE.md b/docs/superpowers/router-mentor-wall-GUIDE.md index 1d3cc7e..03b28f0 100644 --- a/docs/superpowers/router-mentor-wall-GUIDE.md +++ b/docs/superpowers/router-mentor-wall-GUIDE.md @@ -54,6 +54,7 @@ 8. [Частые ошибки и тупики](#s8) 9. [Только владелец (штатный режим, снятие печати)](#s9) 10. [Что под капотом (хуки + env)](#s10) +11. [Секретарь (фоновый протоколист дел)](#s11) --- @@ -236,6 +237,54 @@ Claude обязан **запросить** подтверждение. В шта --- + +## 11. Секретарь (фоновый протоколист дел) — включение/выключение/снос + +> Сверено с кодом 2026-06-26 (`tools/secretary-*.mjs`, `.claude/settings.json`). **Это АВТОМАТ — не ищи код, не запускай руками.** Хук `secretary-prompt-hook.mjs` (UserPromptSubmit, [settings.json:323](../../.claude/settings.json#L323)) ловит фразу в промпте владельца и всё делает сам. + +**Включить дело:** владелец пишет «**включи секретаря <имя-дела>**». Хук пишет флажок сессии +`~/.claude/runtime/secretary-mode-.json` (`mode:on`, `work=имя`) и заводит/активирует дело. Имя +выдирается regex'ом; **похожее** на существующее → хук переспрашивает (анти-двойник, `resolveCaseActivation` +в [secretary-flag.mjs](../../tools/secretary-flag.mjs)). Контроллеру делать **НИЧЕГО** — только знать, что включилось. + +**Выключить дело:** «**выключи секретаря**» → флажок `mode:closing`; ближайший стоп-хук добивает финальный +спан и ставит `mode:off`. ⚠️ слово строго «**секретар**…» — опечатка («секреторя») НЕ ловится +(`detectSecretaryCommand`). + +**Что происходит, пока включено:** на КАЖДОМ ходу стоп-хук (`secretary-stop-hook.mjs`) ставит закрытые спаны +в очередь дела и «выстреливает» фоновый воркер `tools/secretary-worker.mjs <папка-дела>` (detached, на флэше, +**единственный писатель** протокола). Пишет только ВПЕРЁД от хода включения, не задним числом. + +**Где что лежит:** +- Дело: `docs/secretary/<имя>/` — `protocol.md` (пульт-ёлочка) · `protocol.json` (источник) · `архив.md` + (полный леджер, только под флагом fluffy) · `_sessions.json` · `_worker/` (очередь+курсор воркера). +- Оглавление дел: `docs/secretary/содержание.md` (его показывает SessionStart-хук в начале сессии). +- ⚠️ **Сырьё `docs/secretary/raw/.log` пишется ВСЕГДА**, каждый стоп, для ЛЮБОЙ сессии (стоп-хук + строки 40-45 — ДО проверки флажка). Это зеркало сессии, **НЕ часть дела**. Удалять бессмысленно — возродится + следующим стопом. Не трогай. + +**Пушистый конвейер v2** (две грядки + мост + ёлочка + `архив.md`): флаг `SECRETARY_FLUFFY=1` (env) ИЛИ +рантайм-файл `~/.claude/runtime/secretary-fluffy` (`fluffyPipelineOn`, [secretary-flag.mjs:66](../../tools/secretary-flag.mjs#L66)). +Без флага — классический рендер (fallback). На 2026-06-26 ВКЛЮЧЁН. + +**СНЕСТИ дело под ноль** (как будто не включали) — порядок важен, иначе воскресает: +1. **Удали флажок** `~/.claude/runtime/secretary-mode-.json` ПЕРВЫМ — без него стоп-хук на строке 49 + выходит и новых воркеров не спавнит. (Read рантайма закрыт — просто удаляй.) +2. **Убей ВСЕХ воркеров дела и дождись смерти.** Поздний воркер закрытия делает длинный LLM-проход и + **дописывает дело уже ПОСЛЕ удаления папки** → дело «воскресает». Перечисли pid'ы + (`Get-CimInstance Win32_Process | ? { $_.Name -eq 'node.exe' -and $_.CommandLine -like '*secretary-worker*' }`), + `process.kill(pid)` в цикле, **повторно проверь, что их нет**, и только потом удаляй. +3. **Удали папку дела** `docs/secretary/<имя>/` (рекурсивно). Сырьё `raw/.log` НЕ трогай (п. выше). +4. **Edit** убери строку дела из `docs/secretary/содержание.md`. + +⚠️ Пол режет `rm` / `Stop-Process` напрямую — всё это делай **node-скриптом-файлом** (`node x.mjs` с +`process.kill` + `fs.rmSync`; пол пускает запуск скрипта, §3). Шаги 1-3 — в одном скрипте (kill → ждать → +rm); шаг 4 — отдельным Edit. + +[↑ наверх](#top) + +--- + ## ⚠️ Урок 2026-06-19 — как НЕ работать со стеной (косяки контроллера) > Записано после сессии, где контроллер потратил почти весь ход на толкание со стеной вместо дела. ВСЕ причины — недоработки контроллера, НЕ стена: стена ловила реальные дефекты планов. 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 index 1ab6d6f..5705640 100644 --- 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 @@ -139,3 +139,40 @@ follow-up тема-калибровка. `git commit`/`git merge --ff-only`/`git push gitea main` в свой терминал** (`-m` ДО `--`; на unlink-pack отвечать `n`). docs-only коммиты проходят сами, смешанные — нужна расписка. Несколько мелких коммитов одной строкой: `git commit -m "…" -- путь1 путь2 …` (один прогон хуков). + +--- + +## ⏭️ НА ЧЁМ ОСТАНОВИЛИСЬ 26.06.2026 — следующий шаг: РАЗБЛОКИРОВКА ЛИНЗ + +Эпик v2 закрыт (в main). Владелец открыл новую задачу — пока ОБСУЖДЕНИЕ, код НЕ начат. Дело секретаря +«развитие-секретаря» включалось на пробу и **выключено** (mode:closing) — заново не включать без команды. + +**Две проблемы конвейера (владелец назвал их парой — тянут в разные стороны):** +1. **Линзы диагноста зажаты одним ответом.** Каждая из 8 линз возвращает РОВНО ОДНУ находку за ход. Места + зажима в `tools/secretary-harvest.mjs`: (а) `SYS_11` Л1 «назови **САМОЕ** рисковое» (строка ~47); + (б) правило отчёта «8 линз = 8 вердиктов, по ОДНОМУ» (строки ~56-59); (в) схема `{"lenses":[{...,"text"}]}` + — один `text` на линзу (строка ~64). На многоголовом ходу (4 допущения) ловится 1, остальные теряются — + и ровно на жирных стартовых ходах. +2. **Дикий рост объёма протокола.** + +**Почему просто «разблокировать» нельзя:** у брейншторма щедрость безопасна — кандидаты ЭФЕМЕРНЫ (слабое +тонет само). У линз НЕТ: находки = ПОСТОЯННЫЕ ветки `hidden[]`, каждая лишняя растёт навсегда → разблок №1 +усиливает №2. Нужен разблок С ПОВОДКОМ. + +**Предложенный дизайн (на согласовании у владельца, НЕ закрыт):** +- Переформулировать Л1 (и по аналогии Л4 доказательность, Л9 хвосты — они многоголовые): «несколько + по-настоящему РАЗНЫХ — назови каждое, сначала острейшее; одно размазанное на три — НЕ дроби». +- Вердикт линзы: `clean` ИЛИ `findings:[…]` (пустой список = clean). Схема — массив `findings` на линзу. + Сохранить «8 линз, ни одной пропущенной» (критик полноты — находка №16). +- **Поводок против №2 (обязателен, оба):** в промпт — «лучше 1 острая, чем 3 размазанные; по умолчанию 0-1»; + в КОД — жёсткий стоп-кран: **≤3 на линзу** и **≤6 новых веток за ход всего** (truncate в `diagFindings`, + оставляя острейшие по тяжести). +- **Тронуть:** `tools/secretary-harvest.mjs` (`SYS_11`, Л1, схема выхода, `diagFindings` — разложить + `findings[]` в плоский список + потолок) и `tools/secretary-apply.mjs` (`applyHarvest` сейчас читает один + `text` на линзу → переучить на массив). + +**ОТКРЫТЫЙ ВОПРОС к владельцу (не закрывать без него):** берём подход «массив + потолок ≤6 веток/ход»? +Число 6 — норм, или свободнее/жёстче? + +**Дальше по правилам:** это feature-правка → через `brainstorming`/`writing-plans` → TDD → коммит через +терминал владельца. Сперва владелец подтверждает потолок, потом план, потом код.