Единица разбора — спан: реальный промпт владельца + вся активность ассистента
до следующего реального промпта. Системные ходы (гейт-фидбек, загрузка навыка)
приклеиваются к спану, не считаются отдельными. Разбор отложенный: закрытые
спаны разбираются один раз (курсор в флажке сессии); reconcile и аудитор
получают ПОЛНЫЙ склеенный спан (промпт + все ответы + все действия).
- Слой 1: снят обрез вывода действий (полная картина), защита структурных меток.
- Граница спана — событие UserPromptSubmit (prompt-hook метит realPromptTurns),
фолбэк по sysLabel; выключение через mode:closing (финальный спан добивает Stop).
- Калибровка скрытых вопросов: страж-ноп (не мутировать при неизменном тексте) +
кап показа родословной (~~первая~~ → текущая, данные целы).
- Шаги — по спанам («Ход (промпт) N [вобрал ходы X-Y]»); «висит N промптов».
- Новый модуль secretary-span.mjs (computeSpans/spansToDistill/recordRealPrompt/
parseTurnBlock/assembleSpan).
Свод секретаря зелёный (138 тестов), живой прогон на реальной модели подтвердил:
Шаги по спанам, гейт-шум не плодит скрытые вопросы, находки выживают по одному раз.
Спека/план: docs/superpowers/{specs,plans}/2026-06-23-secretary-span-redesign*.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
secretary-audit.mjs (новый): 9 линз, buildAuditPrompt -> {system,user}, parseAuditResponse,
applyAudit (новые СВ с номером от хука, мутация+родословная, close/тихо/partial, горящие
блоки Л8/Л9), preserveRegistry (реестр СВ изолирован от reconcile).
protocol: поля hidden/acceptance/tails/nextSvId + рендер горящих блоков и раздела
«Скрытые вопросы (фон)». stop-hook: второй проход после reconcile + снимок реестра ДО
reconcile (reconcile не владеет СВ). + дизайн-спека и план.
97 юнит-тестов зелёные. Живьём подтверждены: наполнение, мутация под тем же номером,
routing Л9 в горящий блок. Известно: старый реестр в деле «линза» уже искажён до фикса.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
В сквозной тетради дела между ходами разных сессий рендер вставляет строку
«—— сессия <id> ——» (граница рабочего захода) — навигация по длинному делу.
Не перед первой сессией; только на смене session между соседними шагами. TDD, свод зелёный.
Co-Authored-By: Claude Opus 4.8 <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>