docs(secretary): гайд — раздел 11 про секретаря; хэндофф — следующий шаг (разблокировка линз)

- 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 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-26 07:16:19 +03:00
parent eacd97c1f0
commit 2ec3dd8f7f
3 changed files with 88 additions and 3 deletions
+2 -3
View File
@@ -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
- [протокол-наставника](протокол-наставника/protocol.md) — Протокол работы с наставником (роутер-наставник) · открыто · 2026-06-24 01:44
- [секретарь-лидерра](секретарь-лидерра/protocol.md) — секретарь-лидерра · открыто · 2026-06-25 12:41
@@ -54,6 +54,7 @@
8. [Частые ошибки и тупики](#s8)
9. [Только владелец (штатный режим, снятие печати)](#s9)
10. [Что под капотом (хуки + env)](#s10)
11. [Секретарь (фоновый протоколист дел)](#s11)
---
@@ -236,6 +237,54 @@ Claude обязан **запросить** подтверждение. В шта
---
<a id="s11"></a>
## 11. Секретарь (фоновый протоколист дел) — включение/выключение/снос
> Сверено с кодом 2026-06-26 (`tools/secretary-*.mjs`, `.claude/settings.json`). **Это АВТОМАТ — не ищи код, не запускай руками.** Хук `secretary-prompt-hook.mjs` (UserPromptSubmit, [settings.json:323](../../.claude/settings.json#L323)) ловит фразу в промпте владельца и всё делает сам.
**Включить дело:** владелец пишет «**включи секретаря &lt;имя-дела&gt;**». Хук пишет флажок сессии
`~/.claude/runtime/secretary-mode-<session>.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/<session>.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-<session>.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/<session>.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 — как НЕ работать со стеной (косяки контроллера)
> Записано после сессии, где контроллер потратил почти весь ход на толкание со стеной вместо дела. ВСЕ причины — недоработки контроллера, НЕ стена: стена ловила реальные дефекты планов.
@@ -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 → коммит через
терминал владельца. Сперва владелец подтверждает потолок, потом план, потом код.