Протокол закрытия дня (Day Close). Алиас для /run-protocol close day — симметрия с /day-open.
Installation
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Протокол закрытия дня (Day Close). Алиас для /run-protocol close day — симметрия с /day-open.
argument-hint
version
1.0.0
layer
L1
status
active
triggers
{"slash":["/day-close"],"phrases":[]}
routing
{"executor":"haiku","deterministic":false}
agents
single
interaction
multi-step
gates_required
[]
gates_enforced
[]
gates_rationale
операционный скилл; WP Gate применим только при создании нового РП, не для операционных вызовов
Day Close (протокол закрытия дня)
Роль: R1 Стратег. Бюджет: ~10 мин.
Принцип: SKILL.md = L1 платформенный файл. Пользователь не редактирует напрямую — только через extensions/.
When to use
Протокол закрытия дня (Day Close). Алиас для /run-protocol close day — симметрия с /day-open.
БЛОКИРУЮЩЕЕ: пошаговое исполнение
Day Close = протокол. Исполнять ТОЛЬКО пошагово через TodoWrite.
Шаг 0 — ПЕРВОЕ действие: создать список задач прямо сейчас (до любых других действий).
Каждый шаг алгоритма → отдельная задача (pending → in_progress → completed).
Переход к следующему — ТОЛЬКО после отметки текущего. Шаг невозможен → blocked (не пропускать молча).
Algorithm
0. Extensions (before) [[narrative]]
Загрузить: bash .claude/scripts/load-extensions.sh day-close before. Exit 0 → Read каждый файл из вывода (alphabetic) → выполнить как первые шаги. Exit 1 → пропустить. Поддерживает extensions/day-close.before.md И extensions/day-close.before.<suffix>.md.
0.5. Housekeeping-сессия Day Close [[gate]]
Day Close — кросс-РП инфраструктурная операция. Открыть упрощённую housekeeping-сессию, чтобы session-guard не блокировал коммит файлов, к которым нет привязки к открытому РП (например, backup exocortex/ или архивация DayPlan).
bash ~/IWE/scripts/day-close-step-log.sh start 0.5
bash ~/IWE/scripts/session-guard.sh open --housekeeping day-close --agent claude-code
bash ~/IWE/scripts/day-close-step-log.sh end 0.5
Закрыть её — только после п. 10 (после git push). Если сессия прервалась, TTL 30 мин переименует семафор в .stale при следующем запуске.
0.6. Git-lock против гонки двух закрытий (WP-484 Ф2) [[gate]]
Инцидент 17.07: сервер (tsekh-1) и пилот вручную закрыли один день независимо, разъезд обнаружился только на commit+push. Применяется одинаково к обоим путям закрытия — серверный run_claude day-close (диспетчер scheduler.sh) заходит в этот же SKILL.md, отдельно патчить scheduler.sh не нужно.
Exit 0 → лок взят (закоммичен и запушен маркер day-close-start: YYYY-MM-DD), продолжать к шагу 1.
Exit 1 → день уже закрыт сегодня (найден финальный коммит day-close:) — остановиться немедленно, закрыть housekeeping-семафор (bash ~/IWE/scripts/session-guard.sh close --housekeeping day-close --agent claude-code), сообщить пилоту «день уже закрыт», не выполнять шаги 1-10 повторно.
Exit 3 → кто-то закрывает день прямо сейчас (свежий, <30 мин, маркер day-close-start: от другого агента/хоста) — остановиться, закрыть housekeeping-семафор (та же команда), сообщить пилоту кем и когда, предложить подождать или проверить вручную.
Exit 2 → git-операция не удалась (сеть/конфликт) — не считать день закрытым, сообщить пилоту причину, предложить повтор. Housekeeping-семафор не закрывать — повторный acquire пойдёт в рамках той же сессии.
Добавить новый раздел <details><summary><b>Итоги {День} {Дата}</b></summary>передИтоги Пн-Вс (в обратном порядке дат: сегодня → старше)
Содержимое: коммиты по репо, РП-статусы за день, carry-over блокеры
Формат: смотреть существующие разделы в WeekReport (таблицы, метрики, мультипликатор)
Правило ОПТ-5: WeekPlan содержит ТОЛЬКО намерения (план, carry-over на завтра), WeekReport содержит ТОЛЬКО факты (что было, коммиты, результаты)
strategy_day (Пн без DayPlan): Итоги пишутся в WeekReport как обычный день — только факты (РП-результаты, коммиты, мультипликатор). Плановые строки (strategy_day → план живёт в WeekPlan) в WeekReport НЕ копировать. Позиция в обратной хронологии: если Пн — ставить в конец (самый старый день недели).
2g. WP Context Freshness (БЛОКИРУЮЩЕЕ). [[gate]] bash ~/IWE/scripts/day-close-step-log.sh start 2g. 2a-2c обновляют трекеры (WeekPlan/DayPlan/REGISTRY) — статус-строку, не сам контекст-файл РП. Для каждого РП, тронутого хотя бы одной сессией сегодня (grep "$(date +%Y-%m-%d)" sessions/00-index.md + одиночные Quick Close сессии за день): открыть inbox/WP-N/WP-N.mdточечно (grep по номеру/дате сегодняшней сессии → Read с offset вокруг найденной строки, не весь файл целиком — для зонтичных РП полное перечитывание дорого, WP-484 peer-session 2026-07-18-13 находка), свериться с §4/§6 отчётов всех сегодняшних сессий по этому РП — суб-пункты, которые сессия закрыла или нашла уже закрытыми, должны быть отмечены done в контекст-файле, а не только в статус-строке трекера. Несколько сессий трогали один зонтичный РП за день → одно согласованное состояние на конец дня, не разрозненные пере-перезаписи. Source: 2026-07-09-17-close-actualization-gap. bash ~/IWE/scripts/day-close-step-log.sh end 2g
3. Архивация [[gate]]
bash ~/IWE/scripts/day-close-step-log.sh start 3
DayPlan сегодняшнего дня → git mv current/DayPlan $(date +%Y-%m-%d).md archive/day-plans/. Если есть DayPlan'ы прошлых дней в current/ (накопленный мусор) — заархивировать их тоже одной командой.
Done РП → удалить строку из MEMORY.md (они уже в WP-REGISTRY и WeekPlan)
MEMORY.md хранит ТОЛЬКО активные РП (in_progress + pending). Done = удалить.
Архивация DayPlan ОБЯЗАТЕЛЬНА: следующий Day Open читает carry-over из archive/day-plans/DayPlan {вчера}.md и предполагает, что current/ чистый.
bash ~/IWE/scripts/day-close-step-log.sh end 3
4б. Memory Drift Scan [[gate]]
bash ~/IWE/scripts/day-close-step-log.sh start 4b
Страховочная сетка — ловит то, что не обновили в Quick Close сессий за день.
Найти WP-context: ls DS-my-strategy/inbox/WP-{N}-*.md (если заархивирован — archive/wp-contexts/)
Прочитать секцию «Что узнали» / «Осталось» / финальный статус
Если там есть признак закрытия (DONE, РЕШЕНО, ✅, починил, закрыт, снят) рядом с тем же именем/системой → обновить MEMORY.md, анонс: «Memory drift: [факт] устарел → обновлён»
Если WP-context не найден → отметить в итогах: «Memory drift: WP-N — context не найден, проверить вручную»
Анонс при 0 изменениях: «Drift-scan: проверено N паттернов, устаревших фактов не найдено»
Открыть файл, посмотреть конкретные строки/ячейки из отчёта.
Диагностика: это дамп контекста (болезнь) или методологическая таблица (жанр)?
Дамп → перенести контекст в source-of-truth (inbox/WP-NNN-*.md, WeekPlan, отдельный *-changelog.md); в индексе — hook + ссылка.
Жанр (таблица-матрица, каталог доменных сущностей) → пометить в начале файла: <!-- index-health: skip-cells --> или <!-- index-health: skip --> с обоснованием в комментарии.
Если FAIL в Pack-файле — не чистить автоматически, это вопрос к владельцу домена (только пометить skip с обоснованием).
Анонс при 0 WARN/FAIL: «Index-health: N файлов OK, M skip». При наличии — перечислить FAIL/WARN с кратким действием.
Условный шаг: если params.yaml → multiplier_enabled: false → пропустить.
Алгоритм:
WakaTime — физическое время за день:
Сначала CLI: ~/.wakatime/wakatime-cli --today (CLI не в PATH, бинарник в ~/.wakatime/)
Если CLI недоступен → fallback Neon: SELECT payload->>'human_readable', payload->>'total_seconds' FROM learning.public.domain_event WHERE event_type='coding_time' AND account_id='{DT_USER_ID}' AND external_id='wakatime:{DT_USER_ID}:{YYYY-MM-DD}'
Если Neon тоже пуст (данные синхронизируются ночью) → пометить «pending Neon» и пересчитать при следующей сессии
Поле: payload->>'human_readable' (напр. «9 hrs»); total_seconds для мультипликатора
Бюджет закрыт — считать ПО ФАКТУ, не по букве плана (БЛОКИРУЮЩЕЕ, урок 27 мая):
Шаг 2.0 (обязательный prerequisite): открыть <governance-repo>/sessions/00-index.md, отфильтровать строки за сегодня (grep "$(date +%Y-%m-%d)"), составить полный список peer-сессий с числом ходов. Без этого расчёт занижен ×2. Число ходов — не пересчитывать вручную: turns_count уже посчитан в meta.yaml каждой сессии (grep turns_count sessions/2026-MM/DD/2026-MM-DD-*/meta.yaml) — брать оттуда (WP-484 peer-session 2026-07-18-13).
done → полный бюджет (или пропорционально фазам для зонтичных)
partial → % выполнения × бюджет; если сверхплановая работа в плановом РП (например, план Ф1, реализовано Ф1+Ф7) — засчитывать ФАКТ, не плановый бюджет
not started → 0h
ad-hoc peer-сессии (без РП-метки в DayPlan): оценка по числу ходов, НЕ заглушка 0.25h:
2-4 хода → 0.25-0.5h
5-7 ходов → 0.75-1h
8+ ходов → 1-1.5h
Мелкие правки/чистки без peer-сессии (бюджет «—» / merged) → 0.25h
Мультипликатор дня = Бюджет закрыт / WakaTime. Формат: N.Nx
Sanity check (БЛОКИРУЮЩЕЕ): если получившийся мультипликатор <1.5x при дне с ≥10 peer-сессий — пересчитать (вероятен недосчёт ad-hoc или сверхпланового). Показать пилоту 3 метода (буква SKILL / по факту / компромисс) и спросить какой записывать. Урок: lessons_multiplier_peer_sessions_uncounted.md.
б) Что нового узнал: captures в Pack, различения, инсайты.
в) Похвала: что получилось, что было непросто но сделано.
г) Не забыто?
Незакоммиченные изменения: ${IWE_SCRIPTS}/check-dirty-repos.sh (сканирует ВСЕ репо, включая вложенные DS-IT-systems/, DS-MCP/). Если есть грязные → закоммитить и запушить ДО продолжения. [[gate]]
EXTENSION POINT (day-close checks):bash .claude/scripts/load-extensions.sh day-close checks — exit 0 → Read каждый файл из вывода (alphabetic) → выполнить. Exit 1 → пропустить. Поддерживает extensions/day-close.checks.md И extensions/day-close.checks.<suffix>.md.
Часы саморазвития (WP-310 Ф13c): записан ли /slot за сегодня? Если у пользователя есть бот-аккаунт — спросить «Сколько часов саморазвития сегодня?», предложить кнопки 0/0.5/1/2/3/4 или свой ввод. После ответа: подсказать команду /slot N в @aist_pilot_me или @aist_me_bot (handler пишет slot_logged event с source='self_report_daily'). bh.inv обновится при следующем прогоне Аттестатора (04:35 МСК).
Незаписанные мысли? (спросить пользователя)
Обещания кому-то? (спросить пользователя)
д) Видео за день: если video.enabled: true → проверить новые видео. [[narrative]]
Спросить пилота: «Какие 1–3 утренних приоритета на завтра? Укажи WP-ID в порядке важности (первый = самый важный). Если не хочешь задавать — скажи «пропустить».
Если пилот задаёт приоритеты → перезаписать {{HOME_DIR}}/IWE/DS-my-strategy/current/priorities.yaml:
# Утренние приоритеты на сегодня — обновлять вечером или утром# Порядок = убывающий приоритет (первый = самый важный)# Пустой список = fallback на вчерашний перенос в Day Openlast_updated:"YYYY-MM-DD"today:-WP-NNN-WP-MMM
где last_updated = завтрашняя дата (date -v+1d +%Y-%m-%d 2>/dev/null || date -d "tomorrow" +%Y-%m-%d).
Если пилот пропускает → оставить файл без изменений (Day Open покажет stale-предупреждение, если он устарел ≥3 дня).
Добавить файл в список изменений для коммита на шаге 10 (если перезаписывался).
Порядок: свежие итоги СВЕРХУ (обратная хронология). Проверять: вставлять сразу ниже </details> последнего W18-summary, а не в конец файла.
Содержание: таблица коммитов по репо, закрытые РП, продвинутые РП, мультипликатор
Postcondition 9b (машинная проверка — НЕ пропускать):
TODAY=$(date +%Y-%m-%d)
DAY_NUM=$(date +%-d)
# Сначала проверь WeekReport (split ОПТ-5), fallback на WeekPlan
( grep -rl "Итоги.*${DAY_NUM}" ~/IWE/DS-my-strategy/current/WeekReport\ W*.md 2>/dev/null \
|| grep -rl "Итоги.*${DAY_NUM}" ~/IWE/DS-my-strategy/current/WeekPlan\ W*.md 2>/dev/null ) \
| grep -q . && echo"9b OK" || echo"9b FAIL: итоги не найдены ни в WeekReport, ни в WeekPlan"
Результат 9b FAIL → шаг НЕ помечать completed, вернуться к записи.
bash ~/IWE/scripts/day-close-step-log.sh end 9b
10. Закоммитить DS-my-strategy [[gate:AR.005]]
bash ~/IWE/scripts/day-close-step-log.sh start 10
cd {{HOME_DIR}}/IWE/DS-my-strategy
git status --short
# НЕ git add -A/git add ./git add -u — AGENTS.md CRITICAL (может захватить работу других агентов)# Стейджить ТОЛЬКО файлы, изменённые в шагах 2-9 (в массив для pathspec):
DC_FILES=(<каждый файл явным путём: WeekPlan, WeekReport, WP-REGISTRY, archive/day-plans/*, inbox/WP-*.md и т.д.>)
# Если на шаге 7.з обновлялись утренние приоритеты:
DC_FILES+=({{HOME_DIR}}/IWE/DS-my-strategy/current/priorities.yaml)
git add "${DC_FILES[@]}"
git diff --cached --name-only # проверить scope — только day-close файлы# pathspec после `--`: commit ТОЛЬКО свои файлы, не подметаем чужой индекс
git commit -m "day-close: $(TZ=UTC date +%Y-%m-%d)" -- "${DC_FILES[@]}"
git push
# Закрыть housekeeping-сессию Day Close (открыта в п. 0.5)
bash ~/IWE/scripts/session-guard.sh close --housekeeping day-close --agent claude-code
bash ~/IWE/scripts/day-close-step-log.sh end 10
Запускается после коммита. Обогащает журнал ~/logs/rule-engine/YYYY-MM-DD.jsonl → YYYY-MM-DD-classified.jsonl. Exit код игнорировать (launchd тоже запускает раз в час — идемпотентно). Не ждать завершения если >60 сек (kill).
11. Верификация (Haiku R23) [[gate:AR.007]]
bash ~/IWE/scripts/day-close-step-log.sh start 11
Перед запуском R23 — bash .claude/hooks/rule-engine.sh check-trace-satisfaction --protocol .claude/skills/day-close/SKILL.md (WP-481 Ф5.1: удовлетворённость набора gate протокола, не линейность; narrative-пропуски не блокируют). Без --protocol дефолт — memory/protocol-close.md, который содержит гейты Quick Close/Week Close/Exit Protocol, а не Day Close — блок гарантирован на посторонних гейтах. Шаги 0-10 выше размечены [[gate]]/[[narrative]] (WP-481 Ф5.1) — каждый [[gate]] выведен из соответствующей строки «Чеклист Day Close» ниже, не придуман заново. Verdict block → вернуться на незакрытый gate, потом R23.
Проверка целостности тайминга шагов (WP-484 peer-session 2026-07-18-13).day-close-step-log.sh пишет метки в TZ=UTC — дата в проверке ниже ОБЯЗАНА браться тем же поясом (иначе возле полуночи по местному времени пилота проверка ложно найдёт «0 аномалий», просто заглянув не в ту календарную дату — сама метрика тогда врёт молча, ровно то, против чего она построена): grep "$(TZ=UTC date +%Y-%m-%d)" ~/logs/day-close-integrity.log — есть ли аномалии за сегодня (неизвестный step_id, дубль start, end без start, немонотонность)? И grep -c "$(TZ=UTC date +%Y-%m-%d).*start" ~/logs/day-close-steps.log vs grep -c "$(TZ=UTC date +%Y-%m-%d).*end" ~/logs/day-close-steps.log — совпадает число start/end? Не блокирует закрытие дня — только доверие к метрике за сегодня (см. чеклист ниже).
Запустить sub-agent Haiku в роли R23 Верификатор (context isolation).
Передать: (1) чеклист Day Close, (2) черновик итогов, (3) список обновлённых файлов, (4) результат шага 2g (по каждому РП: контекст-файл поправлен или расхождений не было), (5) JSON вердикта trace-satisfaction, (6) результат проверки целостности тайминга шагов (аномалии из day-close-integrity.log + баланс start/end).
По ❌ — исправить до показа пользователю. Исключение: ❌ только по пункту «тайминг шагов» (последний чеклист-пункт ниже) — не исправлять постфактум (дописывать правдоподобный timestamp запрещено, это и есть тихая подмена данных), просто показать пилоту предупреждение «данные тайминга за сегодня не заслуживают доверия» и продолжить закрытие дня.
bash ~/IWE/scripts/day-close-step-log.sh end 11
Чеклист Day Close
Git-lock взят перед началом работы (шаг 0.6, WP-484 Ф2):day-close-lock.sh acquire вернул 0, день не был закрыт/не закрывался параллельно (финальный коммит day-close: YYYY-MM-DD на шаге 10 сам служит завершающей меткой — отдельного снятия лока не требуется)
Все изменения закоммичены и запушены (по всем репо)
Index Health Check (шаг 4в): check-index-health.py — все FAIL/WARN разобраны или помечены skip
WP-REGISTRY.md обновлён: статусы + done-форматирование (done-строки зачёркнуты, ✅ не зачёркнут)
WeekPlan обновлён (grep по номерам РП — ВСЕ упоминания)
DayPlan обновлён (статусы ВСЕХ строк: РП + ad-hoc)
WP Context Freshness (шаг 2g): для каждого РП с сессией сегодня — inbox/WP-N/WP-N.md сверен с §4/§6 сегодняшних отчётов, суб-пункты done отмечены в контекст-файле (не только в трекерах)
open-sessions.log: строки закрытых сессий удалены
Captures за день применены (все Quick Close → KE пройден)
Синхронизация downstream: update.sh выполнен
Linear sync: статусы соответствуют git. Пост-sync чек: кол-во active РП в REGISTRY = кол-во active issues в Linear
Repo CLAUDE.md: feat-коммиты → новые правила?
DayPlan сегодня → archive/day-plans/ (старые DayPlan'ы в current/ тоже)
WakaTime + Мультипликатор: часы / бюджет ПО ФАКТУ (sessions/00-index.md перечислен; ad-hoc peer-сессии оценены по числу ходов; сверхплановая работа в плановом РП — по факту); остаток недели. Sanity check: мультипликатор <1.5x при ≥10 peer-сессий = пересчитать
Итоги дня записаны в DayPlan (postcondition 9a: grep подтверждён)
Handoff-валидация: «Завтра начать с» содержит ВСЕ pending РП с конкретным next action
current/priorities.yaml обновлён на завтра (или пилот явно пропустил шаг)
Тайминг шагов (WP-484, не блокирует закрытие):day-close-integrity.log за сегодня пуст (нет аномалий) И число start/end в day-close-steps.log за сегодня совпадает — при расхождении просто пометить «данные тайминга за сегодня не заслуживают доверия», не чинить постфактум
Все ✅ (кроме тайминга шагов — этот пункт информативный, не блокирует) → «День закрыт.» Иначе — указать что осталось.