From 7e7e47d1a8c8053aa9fa6f51b8262c40e24b6f8d 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: Mon, 22 Jun 2026 18:52:40 +0300 Subject: [PATCH] =?UTF-8?q?chore(secretary):=20=D1=87=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=82=D0=B5=D1=82=D1=80=D0=B0=D0=B4=D0=B5=D0=B9?= =?UTF-8?q?=20=E2=80=94=20=D1=81=D0=B1=D1=80=D0=BE=D1=81=20general,=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=B0=20=D1=81=D1=82=D1=80=D0=BE=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - general: тетрадь сброшена начисто (protocol.json/md удалены, строка убрана из содержания); сырьё (Слой 1) сохранено, при следующем использовании регенерируется - содержание: тема дела строительство-секретаря исправлена с ошибочной «Настройка хука enforce-coverage-verify» на реальную (доработка секретаря) - тетрадь строительство-секретаря — runtime (untracked), очищена от coverage-шума на диске Co-Authored-By: Claude Opus 4.8 --- docs/secretary/general/protocol.json | 1252 -------------------------- docs/secretary/general/protocol.md | 186 ---- docs/secretary/содержание.md | 5 +- 3 files changed, 3 insertions(+), 1440 deletions(-) delete mode 100644 docs/secretary/general/protocol.json delete mode 100644 docs/secretary/general/protocol.md diff --git a/docs/secretary/general/protocol.json b/docs/secretary/general/protocol.json deleted file mode 100644 index f205a76..0000000 --- a/docs/secretary/general/protocol.json +++ /dev/null @@ -1,1252 +0,0 @@ -{ - "subject": "Механизм включения/выключения секретаря через кодовое слово (название дела)", - "decisions": [ - { - "text": "Требуется проверка наличия apiKey в post-reboot окружении через свежую запись в _debug.log", - "why": "Две записи показывают apiKey=НЕТ, но обе до ребута; post-reboot проверка запишется после завершения текущего хода", - "turns": [ - 1 - ], - "struck": false - }, - { - "text": "Если apiKey остался НЕТ после ребута — переделать секретарь на чтение ключа из файла вместо env переменных", - "why": "Хук читает файл каждый раз, что исключит проблему с env переменными", - "turns": [ - 1 - ], - "struck": false - }, - { - "text": "Оставить Хайку (200 токенов) вместо Sonnet — быстро и дёшево, небрежность по категориям приемлема", - "why": "Хайку поймал суть верно, ошибки в сортировке категорий некритичны для MVP", - "turns": [ - 20 - ], - "struck": false - }, - { - "text": "Исправить баг в secretary-transcript.mjs — tool_result теряет текст юзера и действия", - "why": "tool_result это сообщения с ролью user, разбор берёт не тот индекс", - "turns": [ - 20 - ], - "struck": false - }, - { - "text": "Хук должен форсить реальный номер хода в провенансе, не `[→1]`", - "why": "Хайку не знает номер и угадывает, хук это знает — должен сам подставить", - "turns": [ - 20 - ], - "struck": false - }, - { - "text": "Активировать штатный режим с экономией 100% и всеми паттернами", - "why": "Пользователь запросил штатный режим", - "turns": [ - 1 - ], - "struck": false - }, - { - "text": "После подтверждения выполнить багфиксы в порядке: баг 1 (действия + текст юзера на ходах с инструментами) → провенанс (реальный номер хода вместо [→1]) → кириллица в имени дела → удаление временного debug-лога", - "why": "Системный план работ по TDD где возможно", - "turns": [ - 2 - ], - "struck": false - }, - { - "text": "Оставить модель Хайку с возможностью поднятия до Sonnet одной правкой переменной SECRETARY_LLM_MODEL", - "why": "Выбор пользователя; архитектура позволяет менять без изменения кода", - "turns": [ - 2 - ], - "struck": false - }, - { - "text": "Баг 1 (корневой) в parseLastExchange固定: пропускал tool_result, теряя действия и текст промпта", - "why": "TDD: RED тест показал потерю текста при tool_result, найдена и исправлена логика разбора", - "turns": [ - 22 - ], - "struck": false - }, - { - "text": "Провенанс хука форсит реальный номер хода вместо [→1]", - "why": "Убрана временная разметка, хук теперь показывает точный turn", - "turns": [ - 22 - ], - "struck": false - }, - { - "text": "Кириллица в имени дела теперь обрабатывается корректно", - "why": "Добавлена поддержка в prompt-hook, дело 'тест' не уходит в general", - "turns": [ - 22 - ], - "struck": false - }, - { - "text": "Удален временный debug-лог из stop-hook", - "why": "Очистка кода перед финализацией", - "turns": [ - 22 - ], - "struck": false - }, - { - "text": "parseLastExchange пропускает tool_result, ищет настоящий промпт выше", - "why": null, - "turns": [ - 22 - ], - "struck": false - }, - { - "text": "Коммит 4253cd7 запушен в gitea (liderra/brain.git) с обходом pre-push hooks (LEFTHOOK=0)", - "why": "Бэкап всех 5 коммитов секретаря; github недоступен", - "turns": [ - 23 - ], - "struck": false - }, - { - "text": "Слой 1 (сырьё) — новый файл на каждую сессию (docs/secretary/raw/.log)", - "why": "Резерв данных не смешивается между сессиями", - "turns": [ - 23 - ], - "struck": false - }, - { - "text": "Протокол по делу (docs/secretary/<дело>/protocol.md) — сквозной, накапливается через все сессии", - "why": "Единица организации — дело, не сессия; память не теряется при смене сессии", - "turns": [ - 23 - ], - "struck": false - }, - { - "text": "Подготовить промпт для следующей сессии, который обеспечит контекст и продолжение работы", - "why": "Пользователь запросил промпт для следующей сессии с чтением гайда, CLAUDE.md, слоя 1 и графа проекта", - "turns": [ - 24 - ], - "struck": false - }, - { - "text": "Секретарь протокола работ собран, развернут и работает вживую на aitunnel с Haiku", - "why": "Подтверждение статуса: 8 модулей, 3 хука, 26 тестов green, функциональность проверена", - "turns": [ - 24 - ], - "struck": false - }, - { - "text": "Требуется добавить строку coverage в начало ответа", - "why": "Хук enforce-coverage-verify обнаружил мутирующие вызовы без отчета о покрытии", - "turns": [ - 1 - ], - "struck": false - }, - { - "text": "Формат: coverage: skill: или coverage: direct:", - "why": "Стандарт проверки для валидации реально вызванных компонентов", - "turns": [ - 1 - ], - "struck": false - }, - { - "text": "Выбрать между живой демонстрацией (включить → 1–2 хода → выключить → протокол + steps/turn-N.md) или сразу за качество (Sonnet / промпт Хайку)", - "why": "Ассистент запрашивает явный выбор пользователя для продолжения работы", - "turns": [ - 2 - ], - "struck": false - }, - { - "text": "Формат оглавления дел: [<дело>](<дело>/protocol.md) — <тема одна строка> · <статус> · <ГГГГ-ММ-ДД ЧЧ:ММ>", - "why": "Оглавление нужно компактным и информативным для быстрого поиска и понимания сути; текущий шаблон выводит заглушку '(дело)' вместо темы и дату без времени", - "turns": [ - 3 - ], - "struck": false - }, - { - "text": "Добавить поле 'тема' в выжимку модели (secretary-extract.mjs), парсер протокола (secretary-protocol.mjs) и хук остановки (secretary-stop-hook.mjs)", - "why": "Источник реальной темы дела — последняя непустая строка сути от модели; нужна сквозная цепь: мотор → протокол → оглавление", - "turns": [ - 3 - ], - "struck": false - }, - { - "text": "title: work, goal: реальная тема из протокола, status: текущий статус, date: ГГГГ-ММ-ДД ЧЧ:ММ", - "why": null, - "turns": [ - 3 - ], - "struck": false - }, - { - "text": "Спека docs/superpowers/specs/2026-06-22-secretary-index-subject-time-design-v2.md получила вердикт GO от наставника и судьи", - "why": "Проверка через Grep mentor-verdict-*.json подтвердила одобрение; баннер degraded не является блокером", - "turns": [ - 4 - ], - "struck": false - }, - { - "text": "Тесты produce-verify-receipt охватывают секретарские файлы и пригодны для RED/GREEN цикла", - "why": "Конфиг свода исключает только ruflo-* и subagent-prompt-prefix; базовый свод зелёный", - "turns": [ - 4 - ], - "struck": false - }, - { - "text": "Коммит отложен до завершения исполнения плана TDD", - "why": "Результат показывается владельцу без коммита; коммит вне области текущей правки", - "turns": [ - 4 - ], - "struck": false - }, - { - "text": "Удалить при финализации (остаётся только -v2)", - "why": null, - "turns": [ - 4 - ], - "struck": false - }, - { - "text": "Требуется добавить coverage-отчет в начало ответа при мутирующих вызовах", - "why": "Хук enforce-coverage-verify обнаружил отсутствие строки `coverage:` в ответе", - "turns": [ - 1 - ], - "struck": false - }, - { - "text": "Требуется добавить строку coverage в начало ответа при мутирующих вызовах", - "why": "Enforce-coverage-verify hook не получает информацию о покрытии в ответе", - "turns": [ - 5 - ], - "struck": false - }, - { - "text": "Первой строкой: coverage: skill: или coverage: direct:", - "why": null, - "turns": [ - 5 - ], - "struck": false - }, - { - "text": "Требуется первой строкой ответа указывать coverage-метрику (skill: или direct:)", - "why": "Hook enforce-coverage-verify проверяет наличие строки `coverage:` в ответах с мутирующими вызовами", - "turns": [ - 2 - ], - "struck": false - }, - { - "text": "Требуется указать coverage в первой строке ответа", - "why": "Инструмент enforce-coverage-verify обнаружил отсутствие строки coverage: в ответе ассистента", - "turns": [ - 6 - ], - "struck": false - }, - { - "text": "Требуется выбрать вариант решения: 1) выполнить в терминале, 2) уступить наставнику, 3) предложить своё", - "why": null, - "turns": [ - 6 - ], - "struck": false - }, - { - "text": "JSON дороже Markdown для контекста из-за служебных символов, повторения названий полей и встроенного балласта (base64 embeddings)", - "why": "Каждая кавычка, скобка, двоеточие — отдельный токен; названия полей повторяются в каждой строке; machine-readable данные (embeddings) не нужны человеку", - "turns": [ - 3 - ], - "struck": false - }, - { - "text": "Правильная тактика — не глотать сырые JSON-логи целиком, а запросить итог через фильтр (скрипт или помощник)", - "why": "Экономия на 10-20x раз по токенам; сессия остаётся лёгкой; сохраняется память на осмысленный контекст", - "turns": [ - 3 - ], - "struck": false - }, - { - "text": "protocol.json и protocol.md содержат одно и то же дело, различаются только форматом", - "why": "JSON для машинной обработки, MD для чтения человеком", - "turns": [ - 4 - ], - "struck": false - }, - { - "text": "JSON тяжелее MD на ~37% (25401 vs 18530 байт) при идентичном содержании", - "why": "Служебная обвязка структуры: кавычки, ключи, скобки на каждый пункт", - "turns": [ - 4 - ], - "struck": false - }, - { - "text": "Оба файла протокола (protocol.md и protocol.json) содержат идентичный контент — 5 разделов и одинаковые пункты", - "why": "Результат сверки через file-compare (чтение и сравнение без изменений)", - "turns": [ - 5 - ], - "struck": false - }, - { - "text": "JSON представление на ~37% больше по объему (25401 vs 18530 байт) из-за служебной обвязки", - "why": "Техническая характеристика формата", - "turns": [ - 5 - ], - "struck": false - }, - { - "text": "В штатном режиме ассистент работает автономно без промежуточных вопросов до полного результата", - "why": "Пользователь требует максимальной автономности и эффективности", - "turns": [ - 8 - ], - "struck": false - }, - { - "text": "Активны все паттерны обработки по умолчанию с 100% экономией токенов", - "why": "Оптимизация ресурсов при самостоятельной работе", - "turns": [ - 8 - ], - "struck": false - }, - { - "text": "Активировать штатный режим с экономией 100% и всеми паттернами", - "why": "Пользователь запросил штатный режим", - "turns": [ - 9 - ], - "struck": false - }, - { - "text": "Стена (ограничение) снимается только при второй фразе-подтверждении", - "why": "Первая фраза — только триггер, требуется подтверждение", - "turns": [ - 9 - ], - "struck": false - }, - { - "text": "Остановить все действия до явного указания пользователя", - "why": "Пользователь запретил менять содержание; ассистент поспешил с изменениями", - "turns": [ - 10 - ], - "struck": false - }, - { - "text": "Ожидание выбора: откатить все правки ИЛИ оставить правки кода", - "why": null, - "turns": [ - 10 - ], - "struck": false - }, - { - "text": "Формат содержания остаётся markdown, JSON только во внутреннем обсуждении", - "why": "Пользователь уточнил требование", - "turns": [ - 11 - ], - "struck": false - }, - { - "text": "Удаление черновиков через node-скрипт с unlinkSync, обход ограничения PowerShell", - "why": "Правило 8 блокирует удаление через PowerShell, гайд §3 предписывает способ", - "turns": [ - 11 - ], - "struck": false - }, - { - "text": "Тему генерирует модель в выжимке (новое поле), время ставит хук", - "why": "Обеспечить динамическое наполнение оглавления актуальными данными", - "turns": [ - 11 - ], - "struck": false - }, - { - "text": "Секретарь не активирован из-за опечатки в команде", - "why": "Детектор ищет точное совпадение 'включи секретар...' но получил 'включи секреторя' (через 'о' вместо 'а')", - "turns": [ - 12 - ], - "struck": false - }, - { - "text": "Секретарь включён на дело general", - "why": "Пользователь дал команду 'включи секретаря', система активировала протоколирование", - "turns": [ - 13 - ], - "struck": false - }, - { - "text": "Флажок секретаря (~/.claude/runtime/secretary-mode.json) — глобальный на всю машину, не привязан к сессии", - "why": "Единственный файл без id сессии в имени, содержит одно поле work и mode — общие для всех сессий", - "turns": [ - 14 - ], - "struck": false - }, - { - "text": "При двух параллельных сессиях память/протокол/оглавление перемешиваются в одно дело", - "why": "Stop-хук читает work из глобального флажка, последняя сессия перезатирает его — обе сессии пишут выжимку в один protocol.md", - "turns": [ - 14 - ], - "struck": false - }, - { - "text": "Вкл/выкл секретаря — общий рубильник для обеих сессий", - "why": "mode=off в глобальном файле гасит секретаря везде одновременно, нарезка steps идёт по состоянию последней трогавшей сессии", - "turns": [ - 14 - ], - "struck": false - }, - { - "text": "Сырьё (raw) не смешивается — хранится отдельно по session.log", - "why": "Raw пишется по реальному id сессии из события, восстановление данных возможно", - "turns": [ - 14 - ], - "struck": false - }, - { - "text": "Правка 1 — флажок secretary-mode-.json вместо глобального, использовать ev.session_id в обоих хуках", - "why": "Убирает смешивание дел между сессиями, каждая сессия ведёт своё независимо", - "turns": [ - 15 - ], - "struck": false - }, - { - "text": "Правка 2 — дедуплификация при записи решений: не добавлять пункт, если его нормализованный текст уже есть и не зачёркнут", - "why": "Убирает накопление дубликатов одного и того же решения, реализует сверку вместо свалки", - "turns": [ - 15 - ], - "struck": false - }, - { - "text": "1 протокол = 1 сессия (как Слой 1), стартовый промпт содержит пересказ прошлой сессии для континуитета", - "why": "Убирает смешивание данных на корню, экономит память, полная картина в последнем протоколе", - "turns": [ - 16 - ], - "struck": false - }, - { - "text": "Картина дела должна быть проговорена текстом в первом ответе ассистента, не просто Read", - "why": "Хук видит только текст обмена; содержимое файлов в выжимку не попадает", - "turns": [ - 16 - ], - "struck": false - }, - { - "text": "Реализовать по TDD одним чистым коммитом с полным набором изменений", - "why": "Избежать полу-шагов, схема меняет маршрутизацию", - "turns": [ - 16 - ], - "struck": false - }, - { - "text": "Протокол дела должен накапливаться автоматически хуком без пересказа агентом", - "why": "stop-хук уже читает и дополняет protocol.json перед записью, механизм работает, нужна только маршрутизация", - "turns": [ - 17 - ], - "struck": false - }, - { - "text": "Использовать session-specific флажок вместо глобального для каждой сессии", - "why": "Два параллельных процесса перетирают единый secretary-mode.json, разделение по сессии предотвращает смешивание", - "turns": [ - 17 - ], - "struck": false - }, - { - "text": "Добавить дедуп при записи — не писать пункт, если его текст уже есть", - "why": "Копящийся хлам от дублей; сверка перед дозаписью решает", - "turns": [ - 17 - ], - "struck": false - }, - { - "text": "Атомарная запись протокола (temp + rename, опционально файл-замок)", - "why": "Закрыть край race condition при одновременной записи из двух сессий в одно дело", - "turns": [ - 17 - ], - "struck": false - }, - { - "text": "У каждого окна своя записка-флажок (не одна на весь компьютер)", - "why": "Избежать перезаписи флажка и смешивания дел из разных окон в одну тетрадь", - "turns": [ - 18 - ], - "struck": false - }, - { - "text": "Включить дедупликацию — одна строка на решение/намерение вместо дублей", - "why": "Избежать хлама в тетради, если решение или действие повторилось несколько раз в одном разговоре", - "turns": [ - 18 - ], - "struck": false - }, - { - "text": "Название дела работает как кодовое слово для включения/выключения секретаря", - "why": "Простой и без техники способ управления записями", - "turns": [ - 19 - ], - "struck": false - }, - { - "text": "Одно слово без пробелов — правило именования дела", - "why": "Избежать ошибок парсинга при вводе команды", - "turns": [ - 19 - ], - "struck": false - }, - { - "text": "Одно слово = одна тетрадь; повторное использование слова в новом окне продолжает то же дело", - "why": "Обеспечить накопление памяти дела через сессии", - "turns": [ - 19 - ], - "struck": false - }, - { - "text": "При отсутствии слова используется дело по умолчанию 'general'", - "why": "Предотвратить потерю данных и обработать неполные команды", - "turns": [ - 19 - ], - "struck": false - }, - { - "text": "Каждое новое окно секретарь стартует выключенным", - "why": "Требовать явного включения, контролировать запись", - "turns": [ - 19 - ], - "struck": false - } - ], - "will": [ - { - "text": "Ассистент прочитает свежую запись _debug.log после получения одного слова от пользователя", - "turns": [ - 1 - ] - }, - { - "text": "Чинить баг 1 (действия) + провенанс + кириллицу в имени дела", - "turns": [] - }, - { - "text": "Коммит после чистого рабочего состояния", - "turns": [] - }, - { - "text": "Ожидание подтверждения: ровно «да, штатный»", - "turns": [ - 2 - ] - }, - { - "text": "Финальная живая проверка на следующем Stop: проверить в raw файлах появление [ДЕЙСТВИЕ] и текста", - "turns": [ - 22 - ] - }, - { - "text": "Секретарь включен (Хайку каждый ход ~0.5₽) — ждёт команды 'выключи секретаря'", - "turns": [ - 23 - ] - }, - { - "text": "Подтвердить вживую, что действия ([ДЕЙСТВИЕ]) теперь пишутся в raw (фикс бага 1)", - "turns": [ - 24 - ] - }, - { - "text": "Рассмотреть использование Sonnet вместо Haiku для повышения качества выжимки категорий", - "turns": [ - 24 - ] - }, - { - "text": "Возможно добавить .gitignore на docs/secretary/ (рантайм-данные)", - "turns": [ - 24 - ] - }, - { - "text": "Начинать ответы с coverage-строки при наличии мутирующих операций", - "turns": [ - 1 - ] - }, - { - "text": "Первой строкой ответа добавить coverage tag (coverage: skill: или coverage: direct:)", - "turns": [ - 2 - ] - }, - { - "text": "Напечатать спеку контракта оглавления (файл -design-v2.md прошёл печать наставника)", - "turns": [ - 3 - ] - }, - { - "text": "Напечатать план TDD: тесты → изменения в трёх модулях → проверка сводом → show результат (без коммита)", - "turns": [ - 3 - ] - }, - { - "text": "Исполнить TDD план: 7 шагов (тесты → RED → реализация → GREEN) для полей secretary-extract.mjs, secretary-protocol.mjs, secretary-stop-hook.mjs", - "turns": [ - 4 - ] - }, - { - "text": "Подать результат владельцу без коммита", - "turns": [ - 4 - ] - }, - { - "text": "Начинать ответы со строки coverage: skill: или coverage: direct: при выполнении мутирующих операций", - "turns": [ - 1 - ] - }, - { - "text": "При следующих мутирующих вызовах указывать coverage с реально вызванным навыком или ролью", - "turns": [ - 5 - ] - }, - { - "text": "Ассистент ждёт уточнения: показать ту же строку целиком в обоих видах coverage или остановиться", - "turns": [ - 2 - ] - }, - { - "text": "Промерить точные цифры токенов: сырой JSON-лог vs. человеческая версия", - "turns": [ - 3 - ] - }, - { - "text": "Фиксировать оглавление (тема + время) по TDD методологии", - "turns": [ - 8 - ] - }, - { - "text": "Подготовить зелёный свод результатов", - "turns": [ - 8 - ] - }, - { - "text": "Удалить 6 черновиков спек и планов", - "turns": [ - 8 - ] - }, - { - "text": "Показать готовый результат без остановок", - "turns": [ - 8 - ] - }, - { - "text": "При получении подтверждения 'да, штатный' молча выполнить окончательный фикс", - "turns": [ - 9 - ] - }, - { - "text": "Протестировать живой ход с включённым секретарём для проверки вывода темы и времени", - "turns": [ - 11 - ] - }, - { - "text": "Написать команду ровно: 'включи секретаря' (через 'а')", - "turns": [ - 12 - ] - }, - { - "text": "Сделать один любой ход для примера", - "turns": [ - 12 - ] - }, - { - "text": "Выключить секретаря командой 'выключи секретаря'", - "turns": [ - 12 - ] - }, - { - "text": "Провести один обычный ход для демонстрации работы секретаря", - "turns": [ - 13 - ] - }, - { - "text": "Выключить секретаря после демонстрационного хода", - "turns": [ - 13 - ] - }, - { - "text": "Сделать флажок секретаря привязанным к сессии (secretary-mode-.json) чтобы параллельные сессии не топтали друг друга", - "turns": [ - 14 - ] - }, - { - "text": "Закоммитить готовый фикс оглавления отдельно (31 тест зелёные), потом новым делом Правка 1 + 2 по TDD", - "turns": [ - 15 - ] - }, - { - "text": "Добавить флажок по сессии: secretary-mode-.json", - "turns": [ - 16 - ] - }, - { - "text": "Структурировать протокол по сессии: docs/secretary//protocol.md + steps/", - "turns": [ - 16 - ] - }, - { - "text": "Создать содержание.md со строкой на сессию (тема + дата/время + ссылка)", - "turns": [ - 16 - ] - }, - { - "text": "Добавить дедуп при записи в applyExtraction (спека D5)", - "turns": [ - 16 - ] - }, - { - "text": "Реализовать 3 детерминированные правки в хуке под TDD", - "turns": [ - 17 - ] - }, - { - "text": "Внедрить две правки одним делом по TDD (ждёт подтверждения «делай»)", - "turns": [ - 18 - ] - }, - { - "text": "Сделать 3 правки: записка-флажок на окно, дедуп, атомарная запись", - "turns": [ - 19 - ] - } - ], - "open": [ - { - "text": "Ожидается ввод одного слова от пользователя для триггера чтения post-reboot логов", - "turns": [ - 1 - ] - }, - { - "text": "Добавить runtime-данные secretary (raw/, general/) в .gitignore опционально", - "turns": [ - 22 - ] - }, - { - "text": "Качество выжимки Haiku небрежное по категориям — требует оценки и потенциального улучшения", - "turns": [ - 24 - ] - }, - { - "text": "claude-mem: /plugin в текущей среде недоступен — отложено на потом", - "turns": [ - 24 - ] - }, - { - "text": "Определить какие skills/roles были реально задействованы в текущем ходе для coverage-отчета", - "turns": [ - 1 - ] - }, - { - "text": "Выбор стратегии демонстрации: живая демонстрация целиком vs сразу за качество", - "turns": [ - 2 - ] - }, - { - "text": "Обеспечить корректный coverage tag в следующем ответе с документированием реально вызванных функций", - "turns": [ - 2 - ] - }, - { - "text": "Ожидание вердикта наставника по спеке (асинхронно, таймер ~2,5 минуты)", - "turns": [ - 3 - ] - }, - { - "text": "Ожидание печати плана от наставника и судьи (таймер ~3 минуты); затем автономное исполнение 7 шагов TDD", - "turns": [ - 4 - ] - }, - { - "text": "Реализовать логику отслеживания вызванных навыков/ролей для coverage-отчета", - "turns": [ - 1 - ] - }, - { - "text": "Implement coverage reporting format в responses с мутирующими операциями", - "turns": [ - 5 - ] - }, - { - "text": "Требуется ли демонстрация полного формата coverage-метрики (оба варианта: skill и direct) на примере?", - "turns": [ - 2 - ] - }, - { - "text": "Арбитраж: какой вариант действия выбрать для разрешения конфликта coverage-верификации", - "turns": [ - 6 - ] - }, - { - "text": "Проверить точное соответствие MD, собранного из JSON (нет ли рассинхрона, потерянных пунктов)", - "turns": [ - 4 - ] - }, - { - "text": "Требуется ли точная построчная сверка JSON и MD на предмет потери пункта между форматами или сверка завершена?", - "turns": [ - 5 - ] - }, - { - "text": "Ожидание подтверждения 'да, штатный' для активации режима", - "turns": [ - 8 - ] - }, - { - "text": "Ожидание второй фразы-подтверждения 'да, штатный' для снятия стены", - "turns": [ - 9 - ] - }, - { - "text": "Выбор пользователя: 1) откатить все правки + обсудить план ИЛИ 2) оставить правки кода", - "turns": [ - 10 - ] - }, - { - "text": "Уточнить требования к формату содержания и обновлению тем в оглавлении", - "turns": [ - 10 - ] - }, - { - "text": "Оценить качество темы, генерируемой Хайку; рассмотреть переход на Sonnet если результат будет небрежным", - "turns": [ - 11 - ] - }, - { - "text": "Активировать режим секретаря с корректной командой", - "turns": [ - 12 - ] - }, - { - "text": "Показать содержание.md с реальной темой и временем", - "turns": [ - 13 - ] - }, - { - "text": "Показать нарезанные steps/turn-N.md файлы", - "turns": [ - 13 - ] - }, - { - "text": "Нужно ли срочно фиксить глобальный флажок или это отдельная задача?", - "turns": [ - 14 - ] - }, - { - "text": "Редкий край: две сессии на одно дело одновременно требуют замка/слияния — отложить на потом если понадобится", - "turns": [ - 15 - ] - }, - { - "text": "Обеспечить поиск и быстрый доступ к нужному протоколу из архива", - "turns": [ - 16 - ] - } - ], - "doneNext": [ - { - "text": "Проверить наличие apiKey в свежей записи _debug.log", - "done": false, - "turns": [ - 1 - ] - }, - { - "text": "По результату: либо подтвердить успех ребута, либо переделать секретарь на файловое чтение ключа", - "done": false, - "turns": [ - 1 - ] - }, - { - "text": "Убрать временный debug-лог из хука", - "done": false, - "turns": [] - }, - { - "text": "Коммит 4253cd7 встал: 4 файла, 26 тестов GREEN, баг 1 FIXED", - "done": true, - "turns": [ - 22 - ] - }, - { - "text": "Выключить секретаря после теста (экономия 0.5₽ за ход на Haiku)", - "done": false, - "turns": [ - 22 - ] - }, - { - "text": "Опционально: подтвердить в следующий ход, что фикс действений работает (просмотр свежего raw-файла)", - "done": false, - "turns": [ - 23 - ] - }, - { - "text": "Скопировать готовый промпт и использовать его первым сообщением в следующей сессии", - "done": false, - "turns": [ - 24 - ] - }, - { - "text": "По желанию: выключить секретаря командой «выключи секретаря» + «выключи штатный» для аккуратного завершения", - "done": false, - "turns": [ - 24 - ] - }, - { - "text": "Добавить coverage-строку в следующий ответ согласно формату", - "done": false, - "turns": [ - 1 - ] - }, - { - "text": "Получить явный выбор пользователя по стратегии работы", - "done": false, - "turns": [ - 2 - ] - }, - { - "text": "Проверить вердикт по спеке и напечатать план работ", - "done": false, - "turns": [ - 3 - ] - }, - { - "text": "Выполнить шаги плана (TDD: тесты → код → зелёный свод)", - "done": false, - "turns": [ - 3 - ] - }, - { - "text": "Показать результат (без коммита, после одобрения)", - "done": false, - "turns": [ - 3 - ] - }, - { - "text": "Реализовать поле «тема» в secretary-extract.mjs с привязкой к реальной теме и времени", - "done": false, - "turns": [ - 4 - ] - }, - { - "text": "Обновить secretary-protocol.mjs для обработки темы и времени в оглавлении", - "done": false, - "turns": [ - 4 - ] - }, - { - "text": "Модифицировать secretary-stop-hook.mjs для кормления оглавления реальными данными", - "done": false, - "turns": [ - 4 - ] - }, - { - "text": "Запустить RED/GREEN через node tools/produce-verify-receipt.mjs", - "done": false, - "turns": [ - 4 - ] - }, - { - "text": "Проверить журнал выполнения и указать корректное имя вызванного навыка или роли", - "done": false, - "turns": [ - 1 - ] - }, - { - "text": "Добавить coverage:: в начало ответа при вызове tool/enforce-coverage-verify", - "done": false, - "turns": [ - 5 - ] - }, - { - "text": "Пояснить различие между coverage: skill и coverage: direct на примере одной строки лога", - "done": false, - "turns": [ - 2 - ] - }, - { - "text": "Получить решение от пользователя по трём вариантам разрешения", - "done": false, - "turns": [ - 6 - ] - }, - { - "text": "Получить дословное подтверждение активации штатного режима", - "done": false, - "turns": [ - 8 - ] - }, - { - "text": "Молча выполнить фикс до конца при получении подтверждения", - "done": false, - "turns": [ - 9 - ] - }, - { - "text": "Ждать явной команды пользователя перед любыми действиями с файлами", - "done": false, - "turns": [ - 10 - ] - }, - { - "text": "31 тест зелёные (добавлено 5 по TDD)", - "done": true, - "turns": [ - 11 - ] - }, - { - "text": "Синтаксис хука проверен", - "done": true, - "turns": [ - 11 - ] - }, - { - "text": "6 черновиков удалены, скрипт убран", - "done": true, - "turns": [ - 11 - ] - }, - { - "text": "Повторить команду активации с правильной орфографией", - "done": false, - "turns": [ - 12 - ] - }, - { - "text": "Сделать демонстрационный ход (описание или вопрос по делу)", - "done": false, - "turns": [ - 13 - ] - }, - { - "text": "Выбрать вариант: коммитить оглавление отдельно (вариант 1) или сложить всё в одну пачку (вариант 2)", - "done": false, - "turns": [ - 15 - ] - }, - { - "text": "Реализовать схему: флажки + по-сессионная структура + дедуп + содержание", - "done": false, - "turns": [ - 16 - ] - }, - { - "text": "Заменить secretary-mode.json на secretary-mode-.json", - "done": false, - "turns": [ - 17 - ] - }, - { - "text": "Добавить applyExtraction дедуп: проверка наличия текста перед дозаписью", - "done": false, - "turns": [ - 17 - ] - }, - { - "text": "Внедрить атомарную запись с temp-файлом и rename", - "done": false, - "turns": [ - 17 - ] - }, - { - "text": "Получить подтверждение пользователя на запуск реализации", - "done": false, - "turns": [ - 18 - ] - } - ], - "history": [ - { - "oldText": "parseLastExchange ловил tool_result как настоящий промпт", - "newText": "parseLastExchange пропускает tool_result, ищет настоящий промпт выше", - "turns": [ - 22 - ] - }, - { - "oldText": "title: work, goal: '(дело)', status: 'открыто', date без времени в secretary-stop-hook.mjs", - "newText": "title: work, goal: реальная тема из протокола, status: текущий статус, date: ГГГГ-ММ-ДД ЧЧ:ММ", - "turns": [ - 3 - ] - }, - { - "oldText": "Черновик спеки ...-design.md", - "newText": "Удалить при финализации (остаётся только -v2)", - "turns": [ - 4 - ] - }, - { - "oldText": "Ответ без строки coverage:", - "newText": "Первой строкой: coverage: skill: или coverage: direct:", - "turns": [ - 5 - ] - }, - { - "oldText": "coverage: direct:secretary-index-design", - "newText": "Требуется выбрать вариант решения: 1) выполнить в терминале, 2) уступить наставнику, 3) предложить своё", - "turns": [ - 6 - ] - }, - { - "oldText": "Правки в 5 файлах кода/тестов (содержание.md остаётся markdown)", - "newText": "Ожидание выбора: откатить все правки ИЛИ оставить правки кода", - "turns": [ - 10 - ] - } - ] -} \ No newline at end of file diff --git a/docs/secretary/general/protocol.md b/docs/secretary/general/protocol.md deleted file mode 100644 index c2da7ad..0000000 --- a/docs/secretary/general/protocol.md +++ /dev/null @@ -1,186 +0,0 @@ -## Решения -- Требуется проверка наличия apiKey в post-reboot окружении через свежую запись в _debug.log — Две записи показывают apiKey=НЕТ, но обе до ребута; post-reboot проверка запишется после завершения текущего хода [→1] -- Если apiKey остался НЕТ после ребута — переделать секретарь на чтение ключа из файла вместо env переменных — Хук читает файл каждый раз, что исключит проблему с env переменными [→1] -- Оставить Хайку (200 токенов) вместо Sonnet — быстро и дёшево, небрежность по категориям приемлема — Хайку поймал суть верно, ошибки в сортировке категорий некритичны для MVP [→20] -- Исправить баг в secretary-transcript.mjs — tool_result теряет текст юзера и действия — tool_result это сообщения с ролью user, разбор берёт не тот индекс [→20] -- Хук должен форсить реальный номер хода в провенансе, не `[→1]` — Хайку не знает номер и угадывает, хук это знает — должен сам подставить [→20] -- Активировать штатный режим с экономией 100% и всеми паттернами — Пользователь запросил штатный режим [→1] -- После подтверждения выполнить багфиксы в порядке: баг 1 (действия + текст юзера на ходах с инструментами) → провенанс (реальный номер хода вместо [→1]) → кириллица в имени дела → удаление временного debug-лога — Системный план работ по TDD где возможно [→2] -- Оставить модель Хайку с возможностью поднятия до Sonnet одной правкой переменной SECRETARY_LLM_MODEL — Выбор пользователя; архитектура позволяет менять без изменения кода [→2] -- Баг 1 (корневой) в parseLastExchange固定: пропускал tool_result, теряя действия и текст промпта — TDD: RED тест показал потерю текста при tool_result, найдена и исправлена логика разбора [→22] -- Провенанс хука форсит реальный номер хода вместо [→1] — Убрана временная разметка, хук теперь показывает точный turn [→22] -- Кириллица в имени дела теперь обрабатывается корректно — Добавлена поддержка в prompt-hook, дело 'тест' не уходит в general [→22] -- Удален временный debug-лог из stop-hook — Очистка кода перед финализацией [→22] -- parseLastExchange пропускает tool_result, ищет настоящий промпт выше [→22] -- Коммит 4253cd7 запушен в gitea (liderra/brain.git) с обходом pre-push hooks (LEFTHOOK=0) — Бэкап всех 5 коммитов секретаря; github недоступен [→23] -- Слой 1 (сырьё) — новый файл на каждую сессию (docs/secretary/raw/.log) — Резерв данных не смешивается между сессиями [→23] -- Протокол по делу (docs/secretary/<дело>/protocol.md) — сквозной, накапливается через все сессии — Единица организации — дело, не сессия; память не теряется при смене сессии [→23] -- Подготовить промпт для следующей сессии, который обеспечит контекст и продолжение работы — Пользователь запросил промпт для следующей сессии с чтением гайда, CLAUDE.md, слоя 1 и графа проекта [→24] -- Секретарь протокола работ собран, развернут и работает вживую на aitunnel с Haiku — Подтверждение статуса: 8 модулей, 3 хука, 26 тестов green, функциональность проверена [→24] -- Требуется добавить строку coverage в начало ответа — Хук enforce-coverage-verify обнаружил мутирующие вызовы без отчета о покрытии [→1] -- Формат: coverage: skill: или coverage: direct: — Стандарт проверки для валидации реально вызванных компонентов [→1] -- Выбрать между живой демонстрацией (включить → 1–2 хода → выключить → протокол + steps/turn-N.md) или сразу за качество (Sonnet / промпт Хайку) — Ассистент запрашивает явный выбор пользователя для продолжения работы [→2] -- Формат оглавления дел: [<дело>](<дело>/protocol.md) — <тема одна строка> · <статус> · <ГГГГ-ММ-ДД ЧЧ:ММ> — Оглавление нужно компактным и информативным для быстрого поиска и понимания сути; текущий шаблон выводит заглушку '(дело)' вместо темы и дату без времени [→3] -- Добавить поле 'тема' в выжимку модели (secretary-extract.mjs), парсер протокола (secretary-protocol.mjs) и хук остановки (secretary-stop-hook.mjs) — Источник реальной темы дела — последняя непустая строка сути от модели; нужна сквозная цепь: мотор → протокол → оглавление [→3] -- title: work, goal: реальная тема из протокола, status: текущий статус, date: ГГГГ-ММ-ДД ЧЧ:ММ [→3] -- Спека docs/superpowers/specs/2026-06-22-secretary-index-subject-time-design-v2.md получила вердикт GO от наставника и судьи — Проверка через Grep mentor-verdict-*.json подтвердила одобрение; баннер degraded не является блокером [→4] -- Тесты produce-verify-receipt охватывают секретарские файлы и пригодны для RED/GREEN цикла — Конфиг свода исключает только ruflo-* и subagent-prompt-prefix; базовый свод зелёный [→4] -- Коммит отложен до завершения исполнения плана TDD — Результат показывается владельцу без коммита; коммит вне области текущей правки [→4] -- Удалить при финализации (остаётся только -v2) [→4] -- Требуется добавить coverage-отчет в начало ответа при мутирующих вызовах — Хук enforce-coverage-verify обнаружил отсутствие строки `coverage:` в ответе [→1] -- Требуется добавить строку coverage в начало ответа при мутирующих вызовах — Enforce-coverage-verify hook не получает информацию о покрытии в ответе [→5] -- Первой строкой: coverage: skill: или coverage: direct: [→5] -- Требуется первой строкой ответа указывать coverage-метрику (skill: или direct:) — Hook enforce-coverage-verify проверяет наличие строки `coverage:` в ответах с мутирующими вызовами [→2] -- Требуется указать coverage в первой строке ответа — Инструмент enforce-coverage-verify обнаружил отсутствие строки coverage: в ответе ассистента [→6] -- Требуется выбрать вариант решения: 1) выполнить в терминале, 2) уступить наставнику, 3) предложить своё [→6] -- JSON дороже Markdown для контекста из-за служебных символов, повторения названий полей и встроенного балласта (base64 embeddings) — Каждая кавычка, скобка, двоеточие — отдельный токен; названия полей повторяются в каждой строке; machine-readable данные (embeddings) не нужны человеку [→3] -- Правильная тактика — не глотать сырые JSON-логи целиком, а запросить итог через фильтр (скрипт или помощник) — Экономия на 10-20x раз по токенам; сессия остаётся лёгкой; сохраняется память на осмысленный контекст [→3] -- protocol.json и protocol.md содержат одно и то же дело, различаются только форматом — JSON для машинной обработки, MD для чтения человеком [→4] -- JSON тяжелее MD на ~37% (25401 vs 18530 байт) при идентичном содержании — Служебная обвязка структуры: кавычки, ключи, скобки на каждый пункт [→4] -- Оба файла протокола (protocol.md и protocol.json) содержат идентичный контент — 5 разделов и одинаковые пункты — Результат сверки через file-compare (чтение и сравнение без изменений) [→5] -- JSON представление на ~37% больше по объему (25401 vs 18530 байт) из-за служебной обвязки — Техническая характеристика формата [→5] -- В штатном режиме ассистент работает автономно без промежуточных вопросов до полного результата — Пользователь требует максимальной автономности и эффективности [→8] -- Активны все паттерны обработки по умолчанию с 100% экономией токенов — Оптимизация ресурсов при самостоятельной работе [→8] -- Активировать штатный режим с экономией 100% и всеми паттернами — Пользователь запросил штатный режим [→9] -- Стена (ограничение) снимается только при второй фразе-подтверждении — Первая фраза — только триггер, требуется подтверждение [→9] -- Остановить все действия до явного указания пользователя — Пользователь запретил менять содержание; ассистент поспешил с изменениями [→10] -- Ожидание выбора: откатить все правки ИЛИ оставить правки кода [→10] -- Формат содержания остаётся markdown, JSON только во внутреннем обсуждении — Пользователь уточнил требование [→11] -- Удаление черновиков через node-скрипт с unlinkSync, обход ограничения PowerShell — Правило 8 блокирует удаление через PowerShell, гайд §3 предписывает способ [→11] -- Тему генерирует модель в выжимке (новое поле), время ставит хук — Обеспечить динамическое наполнение оглавления актуальными данными [→11] -- Секретарь не активирован из-за опечатки в команде — Детектор ищет точное совпадение 'включи секретар...' но получил 'включи секреторя' (через 'о' вместо 'а') [→12] -- Секретарь включён на дело general — Пользователь дал команду 'включи секретаря', система активировала протоколирование [→13] -- Флажок секретаря (~/.claude/runtime/secretary-mode.json) — глобальный на всю машину, не привязан к сессии — Единственный файл без id сессии в имени, содержит одно поле work и mode — общие для всех сессий [→14] -- При двух параллельных сессиях память/протокол/оглавление перемешиваются в одно дело — Stop-хук читает work из глобального флажка, последняя сессия перезатирает его — обе сессии пишут выжимку в один protocol.md [→14] -- Вкл/выкл секретаря — общий рубильник для обеих сессий — mode=off в глобальном файле гасит секретаря везде одновременно, нарезка steps идёт по состоянию последней трогавшей сессии [→14] -- Сырьё (raw) не смешивается — хранится отдельно по session.log — Raw пишется по реальному id сессии из события, восстановление данных возможно [→14] -- Правка 1 — флажок secretary-mode-.json вместо глобального, использовать ev.session_id в обоих хуках — Убирает смешивание дел между сессиями, каждая сессия ведёт своё независимо [→15] -- Правка 2 — дедуплификация при записи решений: не добавлять пункт, если его нормализованный текст уже есть и не зачёркнут — Убирает накопление дубликатов одного и того же решения, реализует сверку вместо свалки [→15] -- 1 протокол = 1 сессия (как Слой 1), стартовый промпт содержит пересказ прошлой сессии для континуитета — Убирает смешивание данных на корню, экономит память, полная картина в последнем протоколе [→16] -- Картина дела должна быть проговорена текстом в первом ответе ассистента, не просто Read — Хук видит только текст обмена; содержимое файлов в выжимку не попадает [→16] -- Реализовать по TDD одним чистым коммитом с полным набором изменений — Избежать полу-шагов, схема меняет маршрутизацию [→16] -- Протокол дела должен накапливаться автоматически хуком без пересказа агентом — stop-хук уже читает и дополняет protocol.json перед записью, механизм работает, нужна только маршрутизация [→17] -- Использовать session-specific флажок вместо глобального для каждой сессии — Два параллельных процесса перетирают единый secretary-mode.json, разделение по сессии предотвращает смешивание [→17] -- Добавить дедуп при записи — не писать пункт, если его текст уже есть — Копящийся хлам от дублей; сверка перед дозаписью решает [→17] -- Атомарная запись протокола (temp + rename, опционально файл-замок) — Закрыть край race condition при одновременной записи из двух сессий в одно дело [→17] -- У каждого окна своя записка-флажок (не одна на весь компьютер) — Избежать перезаписи флажка и смешивания дел из разных окон в одну тетрадь [→18] -- Включить дедупликацию — одна строка на решение/намерение вместо дублей — Избежать хлама в тетради, если решение или действие повторилось несколько раз в одном разговоре [→18] -- Название дела работает как кодовое слово для включения/выключения секретаря — Простой и без техники способ управления записями [→19] -- Одно слово без пробелов — правило именования дела — Избежать ошибок парсинга при вводе команды [→19] -- Одно слово = одна тетрадь; повторное использование слова в новом окне продолжает то же дело — Обеспечить накопление памяти дела через сессии [→19] -- При отсутствии слова используется дело по умолчанию 'general' — Предотвратить потерю данных и обработать неполные команды [→19] -- Каждое новое окно секретарь стартует выключенным — Требовать явного включения, контролировать запись [→19] - -## Твоя воля / запреты -- Ассистент прочитает свежую запись _debug.log после получения одного слова от пользователя [→1] -- Чинить баг 1 (действия) + провенанс + кириллицу в имени дела -- Коммит после чистого рабочего состояния -- Ожидание подтверждения: ровно «да, штатный» [→2] -- Финальная живая проверка на следующем Stop: проверить в raw файлах появление [ДЕЙСТВИЕ] и текста [→22] -- Секретарь включен (Хайку каждый ход ~0.5₽) — ждёт команды 'выключи секретаря' [→23] -- Подтвердить вживую, что действия ([ДЕЙСТВИЕ]) теперь пишутся в raw (фикс бага 1) [→24] -- Рассмотреть использование Sonnet вместо Haiku для повышения качества выжимки категорий [→24] -- Возможно добавить .gitignore на docs/secretary/ (рантайм-данные) [→24] -- Начинать ответы с coverage-строки при наличии мутирующих операций [→1] -- Первой строкой ответа добавить coverage tag (coverage: skill: или coverage: direct:) [→2] -- Напечатать спеку контракта оглавления (файл -design-v2.md прошёл печать наставника) [→3] -- Напечатать план TDD: тесты → изменения в трёх модулях → проверка сводом → show результат (без коммита) [→3] -- Исполнить TDD план: 7 шагов (тесты → RED → реализация → GREEN) для полей secretary-extract.mjs, secretary-protocol.mjs, secretary-stop-hook.mjs [→4] -- Подать результат владельцу без коммита [→4] -- Начинать ответы со строки coverage: skill: или coverage: direct: при выполнении мутирующих операций [→1] -- При следующих мутирующих вызовах указывать coverage с реально вызванным навыком или ролью [→5] -- Ассистент ждёт уточнения: показать ту же строку целиком в обоих видах coverage или остановиться [→2] -- Промерить точные цифры токенов: сырой JSON-лог vs. человеческая версия [→3] -- Фиксировать оглавление (тема + время) по TDD методологии [→8] -- Подготовить зелёный свод результатов [→8] -- Удалить 6 черновиков спек и планов [→8] -- Показать готовый результат без остановок [→8] -- При получении подтверждения 'да, штатный' молча выполнить окончательный фикс [→9] -- Протестировать живой ход с включённым секретарём для проверки вывода темы и времени [→11] -- Написать команду ровно: 'включи секретаря' (через 'а') [→12] -- Сделать один любой ход для примера [→12] -- Выключить секретаря командой 'выключи секретаря' [→12] -- Провести один обычный ход для демонстрации работы секретаря [→13] -- Выключить секретаря после демонстрационного хода [→13] -- Сделать флажок секретаря привязанным к сессии (secretary-mode-.json) чтобы параллельные сессии не топтали друг друга [→14] -- Закоммитить готовый фикс оглавления отдельно (31 тест зелёные), потом новым делом Правка 1 + 2 по TDD [→15] -- Добавить флажок по сессии: secretary-mode-.json [→16] -- Структурировать протокол по сессии: docs/secretary//protocol.md + steps/ [→16] -- Создать содержание.md со строкой на сессию (тема + дата/время + ссылка) [→16] -- Добавить дедуп при записи в applyExtraction (спека D5) [→16] -- Реализовать 3 детерминированные правки в хуке под TDD [→17] -- Внедрить две правки одним делом по TDD (ждёт подтверждения «делай») [→18] -- Сделать 3 правки: записка-флажок на окно, дедуп, атомарная запись [→19] - -## Открытые вопросы -- Ожидается ввод одного слова от пользователя для триггера чтения post-reboot логов [→1] -- Добавить runtime-данные secretary (raw/, general/) в .gitignore опционально [→22] -- Качество выжимки Haiku небрежное по категориям — требует оценки и потенциального улучшения [→24] -- claude-mem: /plugin в текущей среде недоступен — отложено на потом [→24] -- Определить какие skills/roles были реально задействованы в текущем ходе для coverage-отчета [→1] -- Выбор стратегии демонстрации: живая демонстрация целиком vs сразу за качество [→2] -- Обеспечить корректный coverage tag в следующем ответе с документированием реально вызванных функций [→2] -- Ожидание вердикта наставника по спеке (асинхронно, таймер ~2,5 минуты) [→3] -- Ожидание печати плана от наставника и судьи (таймер ~3 минуты); затем автономное исполнение 7 шагов TDD [→4] -- Реализовать логику отслеживания вызванных навыков/ролей для coverage-отчета [→1] -- Implement coverage reporting format в responses с мутирующими операциями [→5] -- Требуется ли демонстрация полного формата coverage-метрики (оба варианта: skill и direct) на примере? [→2] -- Арбитраж: какой вариант действия выбрать для разрешения конфликта coverage-верификации [→6] -- Проверить точное соответствие MD, собранного из JSON (нет ли рассинхрона, потерянных пунктов) [→4] -- Требуется ли точная построчная сверка JSON и MD на предмет потери пункта между форматами или сверка завершена? [→5] -- Ожидание подтверждения 'да, штатный' для активации режима [→8] -- Ожидание второй фразы-подтверждения 'да, штатный' для снятия стены [→9] -- Выбор пользователя: 1) откатить все правки + обсудить план ИЛИ 2) оставить правки кода [→10] -- Уточнить требования к формату содержания и обновлению тем в оглавлении [→10] -- Оценить качество темы, генерируемой Хайку; рассмотреть переход на Sonnet если результат будет небрежным [→11] -- Активировать режим секретаря с корректной командой [→12] -- Показать содержание.md с реальной темой и временем [→13] -- Показать нарезанные steps/turn-N.md файлы [→13] -- Нужно ли срочно фиксить глобальный флажок или это отдельная задача? [→14] -- Редкий край: две сессии на одно дело одновременно требуют замка/слияния — отложить на потом если понадобится [→15] -- Обеспечить поиск и быстрый доступ к нужному протоколу из архива [→16] - -## Сделано / дальше -- [ ] Проверить наличие apiKey в свежей записи _debug.log [→1] -- [ ] По результату: либо подтвердить успех ребута, либо переделать секретарь на файловое чтение ключа [→1] -- [ ] Убрать временный debug-лог из хука -- [x] Коммит 4253cd7 встал: 4 файла, 26 тестов GREEN, баг 1 FIXED [→22] -- [ ] Выключить секретаря после теста (экономия 0.5₽ за ход на Haiku) [→22] -- [ ] Опционально: подтвердить в следующий ход, что фикс действений работает (просмотр свежего raw-файла) [→23] -- [ ] Скопировать готовый промпт и использовать его первым сообщением в следующей сессии [→24] -- [ ] По желанию: выключить секретаря командой «выключи секретаря» + «выключи штатный» для аккуратного завершения [→24] -- [ ] Добавить coverage-строку в следующий ответ согласно формату [→1] -- [ ] Получить явный выбор пользователя по стратегии работы [→2] -- [ ] Проверить вердикт по спеке и напечатать план работ [→3] -- [ ] Выполнить шаги плана (TDD: тесты → код → зелёный свод) [→3] -- [ ] Показать результат (без коммита, после одобрения) [→3] -- [ ] Реализовать поле «тема» в secretary-extract.mjs с привязкой к реальной теме и времени [→4] -- [ ] Обновить secretary-protocol.mjs для обработки темы и времени в оглавлении [→4] -- [ ] Модифицировать secretary-stop-hook.mjs для кормления оглавления реальными данными [→4] -- [ ] Запустить RED/GREEN через node tools/produce-verify-receipt.mjs [→4] -- [ ] Проверить журнал выполнения и указать корректное имя вызванного навыка или роли [→1] -- [ ] Добавить coverage:: в начало ответа при вызове tool/enforce-coverage-verify [→5] -- [ ] Пояснить различие между coverage: skill и coverage: direct на примере одной строки лога [→2] -- [ ] Получить решение от пользователя по трём вариантам разрешения [→6] -- [ ] Получить дословное подтверждение активации штатного режима [→8] -- [ ] Молча выполнить фикс до конца при получении подтверждения [→9] -- [ ] Ждать явной команды пользователя перед любыми действиями с файлами [→10] -- [x] 31 тест зелёные (добавлено 5 по TDD) [→11] -- [x] Синтаксис хука проверен [→11] -- [x] 6 черновиков удалены, скрипт убран [→11] -- [ ] Повторить команду активации с правильной орфографией [→12] -- [ ] Сделать демонстрационный ход (описание или вопрос по делу) [→13] -- [ ] Выбрать вариант: коммитить оглавление отдельно (вариант 1) или сложить всё в одну пачку (вариант 2) [→15] -- [ ] Реализовать схему: флажки + по-сессионная структура + дедуп + содержание [→16] -- [ ] Заменить secretary-mode.json на secretary-mode-.json [→17] -- [ ] Добавить applyExtraction дедуп: проверка наличия текста перед дозаписью [→17] -- [ ] Внедрить атомарную запись с temp-файлом и rename [→17] -- [ ] Получить подтверждение пользователя на запуск реализации [→18] - -## История (заменено, не стёрто) -- ~~parseLastExchange ловил tool_result как настоящий промпт~~ → parseLastExchange пропускает tool_result, ищет настоящий промпт выше [→22] -- ~~title: work, goal: '(дело)', status: 'открыто', date без времени в secretary-stop-hook.mjs~~ → title: work, goal: реальная тема из протокола, status: текущий статус, date: ГГГГ-ММ-ДД ЧЧ:ММ [→3] -- ~~Черновик спеки ...-design.md~~ → Удалить при финализации (остаётся только -v2) [→4] -- ~~Ответ без строки coverage:~~ → Первой строкой: coverage: skill: или coverage: direct: [→5] -- ~~coverage: direct:secretary-index-design~~ → Требуется выбрать вариант решения: 1) выполнить в терминале, 2) уступить наставнику, 3) предложить своё [→6] -- ~~Правки в 5 файлах кода/тестов (содержание.md остаётся markdown)~~ → Ожидание выбора: откатить все правки ИЛИ оставить правки кода [→10] \ No newline at end of file diff --git a/docs/secretary/содержание.md b/docs/secretary/содержание.md index 276417b..93f80f9 100644 --- a/docs/secretary/содержание.md +++ b/docs/secretary/содержание.md @@ -1,2 +1,3 @@ -- [general](general/protocol.md) — Механизм включения/выключения секретаря через кодовое слово (название дела) · открыто · 2026-06-22 06:12 -- [создание-секретаря](создание-секретаря/protocol.md) — Создание фонового секретаря протокола работ · открыто · 2026-06-22 12:40 \ No newline at end of file +- [создание-секретаря](создание-секретаря/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