66000 был на 464 токена выше предела вывода deepseek-v4-flash (65 536)
→ запрос отбивался ошибкой 400. Выставлено ровно 65536 в обоих форматах
запроса; тесты обновлены. Совпадает и с потолком Claude-моделей судьи/
наставника, идущих через тот же транспорт.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
callAnthropicAPI слал max_tokens 15000 — это резало длину ответа всех
LLM-потребителей общего транспорта (роутер/наставник/судья/секретарь),
а не лимит реселлера. Поднято до 66000 в обоих форматах запроса
(legacy-строка и {system,user}); тесты обновлены.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- general: тетрадь сброшена начисто (protocol.json/md удалены, строка убрана из
содержания); сырьё (Слой 1) сохранено, при следующем использовании регенерируется
- содержание: тема дела строительство-секретаря исправлена с ошибочной
«Настройка хука enforce-coverage-verify» на реальную (доработка секретаря)
- тетрадь строительство-секретаря — runtime (untracked), очищена от coverage-шума на диске
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
В сквозной тетради дела между ходами разных сессий рендер вставляет строку
«—— сессия <id> ——» (граница рабочего захода) — навигация по длинному делу.
Не перед первой сессией; только на смене session между соседними шагами. TDD, свод зелёный.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Закрывает открытый вопрос «Атомарная запись протокола» — актуально при параллельных
сессиях (общий содержание.md пишут оба окна).
- writeFileAtomic: пишем во временный файл рядом с целью, затем rename (атомарен в пределах ФС);
параллельная сессия не увидит полузаписанный protocol.json/protocol.md/содержание.md
- стоп-хук пишет три файла протокола/оглавления через writeFileAtomic
- полный свод зелёный
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Причина срыва reconcile подтверждена логом _reconcile.log: guard-lost каждый ход
(слабая модель роняет 2-15 строк при переписывании всего протокола), страж отклонял
весь ход -> тетрадь не обновлялась.
- restoreLostLines: пропавшую старую строку хук дописывает обратно в её исходный раздел
(со struck/why), что модель обновила — сохраняется. Reconcile перестаёт зависеть от
точности модели — работает хоть с Хайку.
- reconcileTurn: один вызов модели + восстановление вместо 2 ретраев и null;
diag сообщает guard-restored (информационно) вместо guard-lost (срыв).
- полный свод зелёный.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- reconcileTurn зовёт callback diag на каждом пути срыва (model-threw / bad-json / guard-lost);
раньше срыв был тихий (fail-quiet) и причина нигде не писалась
- стоп-хук пишет причину в docs/secretary/<дело>/_reconcile.log (+ no-key)
- mergeTurnIntoProtocol: шаг хода пишется ВСЕГДА, даже при срыве reconcile -> нет дыр в «Шагах»;
protocol.json/md/содержание обновляются каждый ход когда секретарь включён
- успешный путь reconcile не тронут, diag опционален (обратная совместимость), полный свод зелёный
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- parseLastExchange привязывает результат инструмента к действию по tool_use_id,
склеивает text-блоки, усекает до 1200 симв.; [ВЫДАЧА] в Слое 1 теперь наполняется
- resolveCaseActivation: похожее имя дела (опечатка/подстрока) -> переспросить,
не заводя дело-двойник; хук secretary-prompt-hook выводит подсказку с кандидатами
- TDD: тесты secretary-transcript/flag/prompt-hook; полный свод зелёный
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Дело о проектировании «умного» секретаря: фоновый аудитор скрытых вопросов
(7 линз, два прохода, жёсткие номера от хука, отслеживание мутации/тихого закрытия).
Собран родным движком (renderProtocol + prepareTurnFiles), 9 ходов сессии.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Секретарь пишет длинный протокол — 30с/попытку мало. Даём один заход на 5 минут
без ×5 повторов (иначе потолок раздувается до 25 мин). Общий 30с-дефолт
router/судьи/наставника не тронут — override только в callModel секретаря.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 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>
- buildStepLine: кратко «спросил -> ответил» (служебные строки экономия/coverage/вердикт отброшены)
- protocol.steps: хук ведёт по строке на КАЖДЫЙ ход; рендер — список + одна ссылка raw в конце
- reconcile (stampProvenance) сохраняет steps (модель их не трогает)
- stop-хук добавляет шаг текущего хода
41 тест green, exit=0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- renderProtocol: шапка «Дело» (статус/дата/хозяин/цель) + Альтернативы + Последствия/цена
+ раздел «Шаги (Слой 1)» (навигация по ходам в raw/<session>.log)
- EMPTY_PROTOCOL: +status, +alternatives, +consequences (аддитивно, старое цело)
- reconcile: parse/prompt/guard/stamp учитывают alternatives и consequences
- стабильная тема: subject держит хук (первая непустая), не уезжает на тему хода
- stop-хук: рендер с шапкой {work, date}
39 тестов green, exit=0. Ничего из прежнего не удалено — только расширение.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- secretary-reconcile.mjs: buildReconcilePrompt (весь протокол+обмен), parseReconcileResponse,
reconcileGuard (ни одна старая строка не пропала), buildGuardRemark (обоснованный возврат),
stampProvenance (turn+session по тексту), reconcileTurn (вызов->сторож->до 2 возвратов)
- stop-хук: вместо applyExtraction вызывает reconcileTurn; мотор инъектируется
- renderProtocol: зачёркивание во ВСЕХ разделах (закрытые вопросы видны ~~struck~~)
- ретайр: applyExtraction/buildExtractionPrompt/parseExtractionResponse (secretary-extract удалён)
- Слой 1, провенанс @session, флажок по сессии, оглавление — без изменений
- спека + план reconcile в docs/superpowers
33 теста green (мотор замокан, без сети). Модель для prod — Sonnet.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- оглавление: реальная тема (поле «тема» в моторе) + дата со временем вместо заглушки (дело)
- флажок по сессии secretary-mode-<session>.json — параллельные сессии не смешиваются
- дедуп при записи (applyExtraction) — не плодим одинаковые пункты
- промпт-дисциплина: игнор служебного шума, «воля» только у [ЮЗЕР], решения не вопросы
- стабильная тема (первая непустая, не уезжает на тему хода)
- провенанс несёт сессию (@<session>) -> навигация в raw/<session>.log; steps/ убраны как дубли
- мёртвый код снят: secretary-slice + computePeriod + buildStepLinks
37 тестов green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Корень бага: в формате Anthropic tool_result — сообщения role:user; parseLastExchange
брал их вместо настоящего промпта, теряя текст юзера и действия. + хук форсит реальный
turn (Хайку его не знает) + work-slug принимает кириллицу.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Мотор stop-hook на отдельном SECRETARY_LLM_KEY. Переходники смоук-проверены (импорт),
поведенческая проверка — после вписки в settings.json + ключа.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Хрупкий guard `test -f ./bin/gitleaks.exe || exit 0` падал exit-127, когда команда test недоступна
в шелле git-хука → шаг pre-push падал вместо чистого пропуска. Новый tools/run-if-exists.mjs (node,
всегда доступен в контексте хука): бинарь отсутствует → skip exit 0; присутствует → запуск с
пробросом кода. lefthook gitleaks-full-history переведён на него. Разведка: bin/gitleaks.exe и
.gitleaks.toml в репо отсутствуют → реальный скан невозможен, наблюдался именно exit-127, не
настоящая находка; .gitleaksignore без бинаря/конфига/отпечатков не составить. gitleaks #1 и lychee
#14 — тот же паттерн, отдельный инфра-долг. Эпик роутер-реестр этап 3, item 6.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
router-prehook (UserPromptSubmit-хук прежнего router-discipline) — мёртвый остаток: не
зарегистрирован в settings.json, его роль поглощена живым швом наставника (classify на этапе плана).
Единственным импортёром был его собственный тест. router-tool-gate читает state-файл (данные), не
модуль — его импорты не затронуты. Полный свод после удаления зелёный (висячих импортов нет).
Удалены: router-prehook.mjs, router-prehook.test.mjs, router-prehook.mjs.bak-noLLM.
Хвост спеки роутера §9 (уборка), эпик роутер-реестр этап 3, item 5.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
buildForgottenSkillCard формирует внятную карточку «ПЛАН ЗАБЫЛ вызвать навык(и) из skills-json:
X → вызови Skill X» вместо общей прозы. decide() возвращает список uncalled; main() отдаёт карточку
в exit-2. callCovers/нормализация/fail-CLOSE — без изменений. Хвост спеки роутера §6 (контроллеру —
имя забытого навыка), эпик роутер-реестр этап 3, item 4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Правка машинерии №3 скила surfacing-open-questions (спека v6, раздел stena3):
isLedgerAppend пускает Write/Edit в карантин open-questions-*.md (префикс/.md/без
вложенности), включена в разрешение разговорной фазы рядом с isAuthoringWrite.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Новый observer-verdicts: читает персистентный verdict-snapshot-<sid>.json и сводит к четырём
звеньям (последний вердикт по ts на звено). Эпизод наблюдателя получил поле verdicts из снимка
текущей сессии → по логам восстановимо, на каком звене план отскочил. Раньше в эпизоде был только
сигнал роутера. Граница не тронута (observer-stop-hook, recommended_chain, цепочки). Хвост спеки
роутера §7 (логирование решающих), эпик роутер-реестр этап 3, item 3.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Правка машинерии №1 скила surfacing-open-questions (спека v6, раздел stena1):
surfacing-open-questions добавлен в SEED_SKILLS — вызов охотника проходит в
разговорной фазе, как brainstorming/discovery-interview. Вызов скила мир не мутирует.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Узел «журнал» скила surfacing-open-questions (спека v6, раздел zhurnal):
formatEventLine/parseEventLine, replay с отбросом битой хвостовой строки,
activeSessionOf (порог протухания 30 мин — одна активная сессия на тему).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Новый router-pin-store: пин совета роутера по (task_id, goalHash) пер-сессионно.
on-plan-write пин-aware: пин-попадание по неизменной цели → совет переиспользуется,
classifyImpl НЕ зовётся; промах/смена цели → classify + сохранение пина. Проводка в
активный наставник-хук инъекцией реального стора с sessionId (инъекция-выкл по умолчанию,
старое поведение/тесты целы). Хвост спеки роутера §4 (пининг по goalHash), эпик роутер-реестр
этап 3, item 2. Граница не тронута (recommended_chain, цепочки, observer-stop-hook, owner-seal).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
extractPlanGoal обрывал многострочную цель на первой строке (multiline $) и при
пустой строке под заголовком падал в фолбэк, хватавший skills-json-блок или Kind-маркер
как цель → роутер классифицировал план по мусору, пининг садился на мусор. Регекс теперь
берёт тело секции целиком до следующего заголовка / fenced-блока / конца текста; фолбэк
исключает заголовки и fenced-блоки; при нескольких секциях берётся первая.
Хвост спеки роутера §4 (вход роутера), эпик роутер-реестр этап 3, item 1.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
owner-seal был мёртв в тупике с наставником: наставник блокировал (exit 2) раньше,
чем оркестратор звал судью (а owner-seal читает только судья). Теперь
decideMentorObjection принимает ownerSealOpen; при открытом терминальном гранте
владельца наставник не блокирует (и на NO-GO, и на degraded) — пропускает к судье,
который печатает через ownerSealOpen. main() вычисляет owner-seal тем же
ownerSealOpenForEvent, что и судья. GO-путь не изменён.
Гайд стены: урок 2026-06-21 — при требовании наставника о церемонии вокруг
разрушительных шагов уступать и добавлять прогон проверки перед каждым; owner-seal
теперь работает и в тупике с наставником.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Снята зависимость парсера транскрипта наблюдателя от машинерии L-цепочек:
- observer-transcript-parser больше не импортирует observer-chain-detector,
не загружает observer-chain-map.json и не пишет primary_rationale.chain_ref;
- KNOWN_NODES больше не черпает имена из карты цепочек (источники: known-nodes.txt,
маркер direct, форменные правила #NN и плагин:навык);
- удалены observer-chain-detector.mjs(+test), observer-chain-map.json,
observer-retrofill-chain-ref.mjs(+test).
Граница не тронута: recommended_chain/recommended_node/chain_progress/chain_completed,
observer-stop-hook, командные цепочки, verifyChain. Полный свод зелёный.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
B2: router-classifier.mjs без buildChainsBlock и блоков «Available chains» (recommended_chain сохранён).
B3: удалены router-stop-gate(+test) и observer-chain-map-checker(+test); status-md-generator без
health-check C6; lefthook.yml без шага observer-chain-map-checker. observer-chain-detector и
observer-chain-map.json — снос отложен в под-этап (живые импортёры transcript-parser/retrofill/stop-hook).
Гайд: восстановлена markdown-разметка урока 2026-06-20. Полный свод зелёный.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Этап 3 эпика «роутер-реестр» (B1): из tools/node-graph.mjs убрана поддержка chains
(в buildNodeGraph) и функция hintLinksOf (живого импортёра нет); тест приведён в
соответствие (без hintLinksOf-блока и литералов chains). twinsOf/conflictsOf/resolveNode/
checkGraphFreshness сохранены. Полный свод зелёный (263 файла, 4414 тестов — прогон в чистом
терминале владельца; под Bash сессии воркеры коллапсируют от контеншна).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Этап 3 эпика «роутер-реестр» (фундамент): убран реестр именованных цепочек L1-L17
из schema.json (required/свойство chains/chain_membership/определение chain), nodes.yaml
(153 строки chain_membership + секция chains), registry-load.mjs (chains/findChainsByNode)
и его теста. recommended_chain и прочие границы D5 не тронуты. Полный свод зелёный
(263 файла, 4412 тестов). node-graph/router-classifier (Этап B) устойчивы к отсутствию chains.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
В конец гайда добавлен раздел «⚠️ Урок 2026-06-19»: NO-GO = свой дефект (читать objection,
не гадать); реальные дефекты (reformat structured / нет отката при RED); печать асинхронна
(не опрашивать runtime, ждать вердикт); не удалять seal-файлы; баннер ≠ вердикт текущего
плана; stop-loss; спека=ЧТО / план=КАК.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Этап 2c (a5d30f3) + 2d (внутри 2c) закрыты; Осталось = этап 3 (снос цепочек L) +
хвосты спеки 4/7 + инфра-долг (gitleaks/lychee bin). Граф жив как замена цепочкам.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8 мест router-mentor-wall-GUIDE.md приведены к коду (reading-discipline.mjs:114 — ДР-1 снят;
criterion-gate.mjs:28 / verify-gate.mjs:38 — escape снимает гейты; supreme-gate actionOf:128 —
PowerShell-op не матчит; readonly-шаг не двигает указатель) + раздел автономности A-E
(нулевое вмешательство владельца на реализации, коммит по церемонии скриптом).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
После починки lefthook (commit 5fb9897) обычный git commit / git push gitea main
проходят без LEFTHOOK=0 при ОТСУТСТВУЮЩИХ инструментах (5 джоб обёрнуты
test -f <tool> || exit 0). LEFTHOOK_EXCLUDE остаётся только для pre-existing-находки
УСТАНОВЛЕННОГО инструмента. Заметка в раздел 5 (коммит/пуш) router-mentor-wall-GUIDE.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ремонт инфра-долга (после сплита ADR-020 не установлены gitleaks/markdownlint/
cspell/lychee → pre-commit жёстко падал, форсил глухой LEFTHOOK=0):
5 джоб pre-commit/pre-push обёрнуты в `if test -f <tool>; then <run>; else echo skip; fi`.
- инструмент отсутствует → джоба ПРОПУСКАЕТСЯ (коммит не срывается);
- инструмент есть и нашёл проблему → по-прежнему БЛОКИРУЕТ (if/then/else, не ||);
- рабочие контролёры (adr-judge/cross-ref/observer/registry) идут на каждом коммите.
Учёт этапа 2b: splitting-inventory +секция статуса (2a/2b DONE, осталось 2c/2d/этап3);
план этапа 2 (vocabulary-graph) + спека/план церемонии фиксации внесены в репозиторий.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>