Регистрация косяка агента в системе учёта WP-316 L1. Без LLM — детерминированный скрипт без WP Gate.
日本語の概要は準備中です。原文の説明を表示しています。
Протокол закрытия дня (Day Close). Алиас для /run-protocol close day — симметрия с /day-open.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Роль: R1 Стратег. Бюджет: ~10 мин. Принцип: SKILL.md = L1 платформенный файл. Пользователь не редактирует напрямую — только через
extensions/.
Day Close = протокол. Блокирующее требование — наблюдаемое свойство: ни один шаг не пропущен молча; каждый шаг отмечается ДО перехода к следующему. Шаг 0 — ПЕРВОЕ действие: зафиксировать список шагов прямо сейчас (до любых других действий) — в TodoWrite, а при его недоступности явной нумерацией в ответе. Инструмент по умолчанию — TodoWrite: каждый шаг алгоритма → отдельная задача (pending → in_progress → completed). TodoWrite недоступен (штатная ситуация, зависит от сборки клиента) → сообщить пилоту одной строкой, вести шаги явной нумерацией («Шаг X из Y: <название> — выполнен»), факт замены зафиксировать в отчёте закрытия (issues #561, #563). Переход к следующему — ТОЛЬКО после отметки текущего. Шаг невозможен → blocked (не пропускать молча).
bash .claude/scripts/load-extensions.sh day-close before → exit 0: Read каждый файл из вывода (alphabetic) → выполнить как первые шаги. Exit 1/3 (нет совпадений / нет каталога extensions/ — штатно для новой установки, либо каталог повреждён) → пропустить молча. Поддерживает extensions/day-close.before.md И extensions/day-close.before.<suffix>.md.
. "${IWE_PATHS_FILE:-$HOME/.iwe-paths}" 2>/dev/null; bash "$IWE_SCRIPTS/day-close-prepare.sh" — источник переменных явный (issue #688: верхнеуровневый Bash-вызов не проходит .bashrc/.zshenv/BASH_ENV, $IWE_SCRIPTS может быть пуст без явного .), один вызов вместо ~10 скан-запросов. Пронумерованные секции дайджеста ЗАМЕНЯЮТ скан-команды внутри шагов ниже (сами шаги исполняются — но берут данные из дайджеста, не перезапускают сканы): §1→шаг 1, §2→10b, §3→2d, §4→4б, §5→4в, §6→4, §7→6, §8→6 (prerequisite), §9-10→3, §11→2f. Реагировать только на flagged-пункты; drift-хит, который реально «ждёт X», — не drift. Скрипт отсутствует → legacy: inline-команды шагов.
Субагентное исполнение (рекомендуется при большой сессии дня): родитель выполняет только дайджест → диспетчеризацию → согласование (шаг 8) → верификацию; шаги 1-7 исполняет ОДИН general-purpose субагент (sonnet, context isolation) с дайджестом в промпте, шаги 9-10b — субагент-финализатор с day-close-prepare.sh --verify вместо inline-grep 9a/9b; шаг 11 (R23) диспетчеризует родитель — субагент не может звать субагентов. Fallback: Agent tool недоступен / субагент упал дважды → исполнять inline, всё равно с дайджестом.
Best practice: запускать
/day-closeв свежей сессии, не хвостом рабочей — протоколу нужны файлы на диске, а не разговор за день.
Проверить day_open.strategy_day в day-rhythm-config.yaml (тот же ключ, что читает /day-open, по умолчанию monday) против дня недели сегодня. Симметрично /day-open (SKILL.md шаг 4: «Если strategy_day → DayPlan НЕ создавать»): в стратегический день current/DayPlan <дата>.md не создавался — шаги 1, 2b, 3, 9a неприменимы (не FAIL), см. пометки внутри них. Итоги дня идут только в WeekReport (шаг 9b), как и предписывает § ниже.
Strategy_day (шаг 0в) → неприменимо, пропустить (нет DayPlan, сверять таблицу «На сегодня» не с чем). Иначе: запустить bash-скрипт сбора коммитов за день по всем git-репо в ${IWE_WORKSPACE:-$HOME/IWE}/. Сопоставить с таблицей «На сегодня» из DayPlan → определить статусы.
2a. WeekPlan (current/Plan W{N}...): обновить статусы РП — grep по номеру РП, обновить ВСЕ упоминания.
2b. Strategy_day (шаг 0в) → неприменимо, пропустить (DayPlan не создавался). Иначе: DayPlan current/DayPlan YYYY-MM-DD.md: статусы ВСЕХ строк (РП + ad-hoc). Done → зачеркнуть.
2c. docs/WP-REGISTRY.md: статусы + даты.
2d. inbox/open-sessions.log: удалить строки закрытых сессий.
2e. Новые репо/сервисы за день? → REPOSITORY-REGISTRY, navigation.md, MAP.002.
2f. WeekReport — сначала bash "${IWE_SCRIPTS:-$HOME/IWE/scripts}/week-report-ensure.sh" (issue #886: создаёт парный каркас WeekReport W{N} YYYY-MM-DD.md, если файла ещё нет, и ничего не трогает, если он есть), затем: добавить <details><summary><b>Итоги {День} {Дата}</b></summary> перед предыдущими итогами (обратная хронология).
EXTENSION POINT (checks): bash .claude/scripts/load-extensions.sh day-close checks → exit 0: Read каждый файл → выполнить. Exit 1/3 (нет совпадений / нет каталога extensions/ — штатно для новой установки, либо каталог повреждён) → пропустить молча.
current/ (мусор) — заархивировать в любом случае.git mv current/DayPlan $(date +%Y-%m-%d).md archive/day-plans/.mv inbox/WP-{N}-*.md → archive/wp-contexts/Две независимые проверки (issue #326 — лексическая одна пропускала расхождения статуса без триггерных слов):
. "${IWE_PATHS_FILE:-$HOME/.iwe-paths}" 2>/dev/null; T="${IWE_TEMPLATE:-$HOME/IWE/FMT-exocortex-template}"; PY3="$(bash "$T/.claude/lib/find-python3.sh")" && "$PY3" "$T/.claude/scripts/memory-drift-scan.py" — сверяет колонку «Статус» MEMORY.md с полем status WP-context по номеру РП. Exit 1 → для каждой найденной строки обновить устаревшее.. "${IWE_PATHS_FILE:-$HOME/.iwe-paths}" 2>/dev/null; T="${IWE_TEMPLATE:-$HOME/IWE/FMT-exocortex-template}"; PY3="$(bash "$T/.claude/lib/find-python3.sh")" && "$PY3" "$T/.claude/scripts/check-index-health.py" — для каждого FAIL/WARN: диагностика (дамп vs жанр) → перенести или пометить skip.
Просмотреть «Уроки» в MEMORY.md. Не применялся >1 нед и есть в lessons_*.md → удалить. Новый урок → строка в MEMORY.md + lessons_*.md. Цель: ≤8 уроков.
. "${IWE_PATHS_FILE:-$HOME/.iwe-paths}" 2>/dev/null; "$IWE_SCRIPTS/day-close.sh" — источник переменных явный (issue #688, см. шаг 0б), Linear sync, backup (memory/ + CLAUDE.md), reindex, консолидация сессий дня. Обновление платформы (update.sh) сюда НЕ входит (issue #945): это сетевая операция со своим ритуалом; о доступном обновлении сообщает таблица состояния IWE при Day Open (update.sh --check --fast), применяется отдельно (/iwe-update).
Условный шаг: если
params.yaml → multiplier_enabled: false→ пропустить и при записи итогов выбрать только веткуmultiplier:offиз шаблона. Не добавлять WakaTime, физическое время, формулу или заглушку «мультипликатор не посчитан».
WakaTime CLI (~/.wakatime/wakatime-cli --today (на Windows программа называется wakatime-cli-windows-amd64.exe: искать по маске ~/.wakatime/wakatime-cli*)) или Neon-fallback → Бюджет ПО ФАКТУ / WakaTime = мультипликатор N.Nx. Prerequisite: прочитать sessions/00-index.md (grep сегодня) → список peer-сессий с числом ходов. Sanity check: <1.5x при ≥10 peer-сессий → пересчитать.
Обзор (РП × статус) + Что нового узнал + Похвала + Не забыто (dirty repos, /slot часы, мысли, обещания) + Видео + Draft-list + Задел на завтра + Утренние приоритеты (priorities.yaml).
<!-- Детали: day-close-details.md § Шаг 7 -->Пользователь читает черновик → корректирует → одобряет.
9a. Strategy_day (шаг 0в) → неприменимо, пропустить целиком (DayPlan не создавался — писать «Итоги дня» некуда, postcondition-grep недостижим по конструкции дня, не FAIL). Итоги стратегического дня идут только в 9b/WeekReport, как обычный день — только факты, плановые строки не копировать (day-close-details.md § strategy_day). Иначе: дописать «Итоги дня» в DayPlan (шаблон: memory/templates-dayplan.md, ветка по multiplier_enabled). Валидация: «Завтра начать с» непустое + каждый pending РП с конкретным next action. Postcondition: bash-grep по паттерну Итоги дня|Day summary (оба языка — issue #234: при language: english заголовок DayPlan «Day summary», русский grep всегда FAIL) → 9a OK/FAIL.
При архивации DayPlan (шаг 3) — frontmatter status: active → status: closed:
TODAY_DAYPLAN="${IWE_GOVERNANCE_REPO:-DS-strategy}/archive/day-plans/DayPlan $(date +%Y-%m-%d).md"
[ -f "$TODAY_DAYPLAN" ] && sed -i.bak 's/^status: active$/status: closed/' "$TODAY_DAYPLAN" && rm -f "$TODAY_DAYPLAN.bak"
Не путать с шагом 10c ниже (P1, WP-5 Ubuntu-audit): гард day-open-pipeline.sh проверяет присутствие архивного DayPlan в git, не это поле — status: closed служит только людям/сторонним инструментам, не текущей реализации гарда.
9b. Дописать сводку в WeekReport (<details>, обратная хронология). Fallback на WeekPlan только если week-report-ensure.sh отказал (нет current/ или WeekPlan). Postcondition: bash-grep по паттерну Сводка|Results (оба языка — issue #234) → 9b OK/FAIL.
*a/*b FAIL → НЕ помечать completed, вернуться к записи.
SCRIPT="${IWE_WORKSPACE:-$HOME/IWE}/.claude/scripts/rule-classifier.py"; [ -f "$SCRIPT" ] && python3 "$SCRIPT" || echo "skip: rule-classifier.py требует ручной установки (claude CLI + PACK-agent-rules)" (идемпотентно, kill если >60 сек). ДО коммита — иначе его правки уходят в незакоммиченный хвост (issue #249).
bash .claude/scripts/load-extensions.sh day-close after → exit 0: Read каждый файл из вывода (alphabetic) → выполнить. Exit 1/3 (нет совпадений / нет каталога extensions/ — штатно для новой установки, либо каталог повреждён) → пропустить. Поддерживает extensions/day-close.after.md И extensions/day-close.after.<suffix>.md. Симметрично week-close (шаг 9): вызывается ДО финального коммита (10b), чтобы правки расширений попадали в тот же коммит, не оставались незакоммиченным хвостом (issue #320/#322).
git status --short по КАЖДОМУ репо, который сессия трогала за день — как минимум workspace root (${IWE_WORKSPACE:-$HOME/IWE}/, там физически лежат MEMORY.md и memory/*.md, их правят шаги 4б/4) и ${IWE_GOVERNANCE_REPO:-DS-strategy} (WeekPlan/DayPlan/WP-REGISTRY). Незафиксированное (включая правки шага 10a) стадировать и коммитить только одной fail-closed командой ниже: ненулевой код = СТОП, отдельный git commit после него запрещён. Переходить к шагу 11 только когда git status чист во всех репо.
# issue #1176: helper functions live in day-close-helpers.sh, not inline here,
# so Claude Code skill-arg substitution does not corrupt $1/$2 in function bodies.
# Relative to the workspace root, same convention as step 0's load-extensions.sh call.
source .claude/skills/day-close/day-close-helpers.sh
<!-- issue-511-guard:end -->
The two helper functions (assert_staged_scope_or_stop, stage_and_commit_or_stop) are defined in day-close-helpers.sh in this directory. Source that file before calling them. Their full bodies and postconditions remain unchanged.
Двойной сторож коммита (#511, дважды воспроизведённый класс «git mv + правка → пустой/устаревший дифф»): механизм 21.08 доказан —
git mvуже положил rename в индекс, правка нового пути осталась только в worktree,git addстарого пути упал, но отдельный commit проигнорировал ошибку и зафиксировал прежний staged rename. Функция выше устраняет именно этот путь: commit недостижим после failed add. Механизм 18.08 по имеющейся фактуре всё ещё не установлен, поэтому issue остаётся открытым.
- ПЕРЕД commit: функция сначала запрещает staged-пути вне явного списка, затем сама проверяет код
git add, непустой общий staged diff и непустой staged-контент каждого явно переданного пути (git diff --cached -- <path>).git add -- <явные пути>после этой проверки не может добавить чужой путь; повторная проверка по именам после add дала бы ложный отказ для rename, который Git переклассифицировал в delete+add после изменения содержимого. Не повторять commit вручную после отказа функции. 1a. Послеgit mvв этом же ходе передавать ТОЛЬКО новый (текущий) путь файла — старый путь больше не существует на диске,git addпо нему падает (код 68) и коммит корректно останавливается. Для staged-rename проверка области видимости сверяет обе стороны переименования и принимает новый путь (issue #557, замечание к архивации DayPlan).- ПОСЛЕ commit: сверить, что правки реально в HEAD —
git show HEAD --statсодержит перемещённый файл, иgit diff HEAD -- <файл>пуст (на диске нет незакоммиченных остатков правок).- Любое срабатывание → СТОП + собрать диагностику в отчёт дня:
git status,git diff,git log -1 --stat, точная последовательность выполненных команд — и сообщить пилоту. Индекс намеренно не сбрасывать автоматически: там может быть доказательство инцидента или ранее сделанныйgit mv. После диагностики исправить список путей и повторить единую функцию. Это материал для установления корня #511.
Пишется ПОСЛЕ push шага 10b — DayPlan уже реально закоммичен. day-open-pipeline.sh на следующий день читает этот файл как сигнал «Day Close сделан» (fallback — присутствие архивного DayPlan в git, симметрично day-open):
mkdir -p ~/.claude/state
jq -n \
--arg date "$(date +%Y-%m-%d)" \
--arg commit "$(git -C "${IWE_GOVERNANCE_REPO:-DS-strategy}" rev-parse HEAD)" \
--arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
'{date: $date, commit_hash: $commit, timestamp: $ts, status: "success"}' \
> ~/.claude/state/day-close-last-success.json
Sub-agent Haiku R23 (context isolation): передать чеклист + черновик итогов + список обновлённых файлов. По ❌ — исправить до показа пользователю.
EXTENSION POINT (checks): bash .claude/scripts/load-extensions.sh day-close checks → exit 0: Read каждый файл → выполнить. Exit 1/3 (нет совпадений / нет каталога extensions/ — штатно для новой установки, либо каталог повреждён) → пропустить молча.
current/priorities.yaml → last_updated = день после закрываемого, ИЛИ в отчёте закрытия явно записано «приоритеты не обновлены (пропущено пилотом)». Ни того ни другого → вернуться к шагу 7з и спросить пилота (issue #944)git status -sb в governance-репо (без ahead/behind) + статус sync-скрипта вторичных копий (если настроен, напр. remote-git-sync.sh --status). «Deferred из-за живого семафора» — норма для реально работающей сессии; протухший семафор при запушенном отчёте — аномалия: закрыть семафор до завершения Day Close.archive/day-plans/ (старые DayPlan'ы в current/ тоже) — DayPlan сегодня N/A на strategy_day (шаг 0в), старые — архивировать в любом случаеmv inbox/ → archive/wp-contexts/day-close.sh выполнен[ -f ${IWE_WORKSPACE:-$HOME/IWE}/.claude/scripts/fp-stats.py ] && python3 ${IWE_WORKSPACE:-$HOME/IWE}/.claude/scripts/fp-stats.py --date $(date +%Y-%m-%d) || echo "skip: fp-stats.py требует rule-classifier.py" → если есть ⚠️ REVISE → спросить пилота по факту флага (WP-545 Ф5, 21.08 — заменяет прежний еженедельный R8-вопрос, который спрашивал вслепую по расписанию, не по конкретному сигналу): «правило <X> — это ложные срабатывания детектора, или реальный, но неудобный сигнал?» Ответ → в «Завтра начать с» вместе с решением (переформулировать правило / оставить как есть)<details>, обратная хронология) (postcondition 9b: grep подтверждён)Все ✅ → «День закрыт.» Иначе — указать что осталось.
<!-- USER-SPACE --> <!-- /USER-SPACE -->まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Регистрация косяка агента в системе учёта WP-316 L1. Без LLM — детерминированный скрипт без WP Gate.
日本語の概要は準備中です。原文の説明を表示しています。
Разбор extraction-reports со status pending-review — решение R15 (accept/reject/defer) ЖИВЫМ ПИЛОТОМ, запись в Pack, обновление статуса, коммит. Вызывать при Close при наличии N>0 pending-review отчётов.
日本語の概要は準備中です。原文の説明を表示しています。
Оценка архитектурного решения по 7 характеристикам ЭМОГССБ (v3.1 — фильтр допуска, атрибут-сценарии, совет затронутых сторон; профиль без агрегатного балла, conjunctive screening). Используй когда пользователь предлагает архитектурное решение, новый инструмент или системное изменение.
日本語の概要は準備中です。原文の説明を表示しています。
Classifies raw pilot request → structured JSON {task_type, class, artifact, budget_estimate, confidence, routing_tag, resolution_path, schema_version, result_type, expected_result_kind, result_kind_resolution, hypothesis_relation}. Keyword-fast (<200ms) or Haiku fallback (<60s). Does NOT create WP or call executor.
日本語の概要は準備中です。原文の説明を表示しています。
Audit repository documentation: detect drift between code and docs, report coverage by category. Run manually or on triggered drift critical.
日本語の概要は準備中です。原文の説明を表示しています。
Аудит пользовательской инсталляции IWE. Запускает scripts/iwe-audit.sh + MCP healthcheck + smoke-test ритуала через sentinel-механику (контракт dry-run-contract.md), передаёт отчёт subagent'у в роли VR.R.002 Аудитор (context isolation) → verdict ✅/⚠️/❌ по 6 компонентам (Inventory, L1 drift, DS-strategy, L3 customizations, MCP, ритуал). Используй после restore из бэкапа, после update.sh, или при еженедельной сверке.
日本語の概要は準備中です。原文の説明を表示しています。