Протокол закрытия дня (Day Close). Алиас для /run-protocol close day — симметрия с /day-open.
Installation
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Протокол закрытия дня (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 за сегодня совпадает — при расхождении просто пометить «данные тайминга за сегодня не заслуживают доверия», не чинить постфактум
Все ✅ (кроме тайминга шагов — этот пункт информативный, не блокирует) → «День закрыт.» Иначе — указать что осталось.