Files
brain/docs/secretary/general/protocol.json
T
Дмитрий ab8abe2c87 feat(secretary): История+многоходовый провенанс в хуке, нарезка сырья по ходам, обезвреживание маркеров, все Шаги
- stampProvenance ведёт История-таймлайн (in/out) и многоходовый провенанс при смене зачёркивания строки
- splitRawIntoTurns/prepareTurnFiles: нарезка raw на <дело>/ходы/turn-N.log; Шаги ссылаются на файл хода
- buildStepsFromRaw + обработчик off: Шаг на КАЖДЫЙ ход (без пропусков выкл-ходов)
- neutralizeMarkers в buildRawRecord: защита от самозагрязнения лога копиями маркеров
- полная форма протокола (9 категорий) + дело создание-секретаря приведено к виду; набор секретаря 56/56

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 13:24:20 +03:00

1252 lines
46 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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/<id-сессии>.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:<name> или coverage: direct:<role>",
"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:<name> или coverage: direct:<role>",
"why": null,
"turns": [
5
],
"struck": false
},
{
"text": "Требуется первой строкой ответа указывать coverage-метрику (skill:<name> или direct:<role>)",
"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-<session>.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:<name> или coverage: direct:<role>)",
"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:<name> или coverage: direct:<role> при выполнении мутирующих операций",
"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-<session>.json) чтобы параллельные сессии не топтали друг друга",
"turns": [
14
]
},
{
"text": "Закоммитить готовый фикс оглавления отдельно (31 тест зелёные), потом новым делом Правка 1 + 2 по TDD",
"turns": [
15
]
},
{
"text": "Добавить флажок по сессии: secretary-mode-<session>.json",
"turns": [
16
]
},
{
"text": "Структурировать протокол по сессии: docs/secretary/<session>/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:<type>:<name> в начало ответа при вызове 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-<session>.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:<name> или coverage: direct:<role>",
"turns": [
5
]
},
{
"oldText": "coverage: direct:secretary-index-design",
"newText": "Требуется выбрать вариант решения: 1) выполнить в терминале, 2) уступить наставнику, 3) предложить своё",
"turns": [
6
]
},
{
"oldText": "Правки в 5 файлах кода/тестов (содержание.md остаётся markdown)",
"newText": "Ожидание выбора: откатить все правки ИЛИ оставить правки кода",
"turns": [
10
]
}
]
}