diff --git a/docs/morning-enforce-hard-rules-status.md b/docs/morning-enforce-hard-rules-status.md deleted file mode 100644 index 9cf139ee..00000000 --- a/docs/morning-enforce-hard-rules-status.md +++ /dev/null @@ -1,116 +0,0 @@ -# Утренний статус — enforce-hard-rules (25.05.2026 ночь) - -**Эта запись для тебя на утро. Переноси в memory когда удобно** (или скажи мне «memory dump» в первом промпте и я перенесу через хук). - -## TL;DR - -Выполнил автономно. 10 жёстких правил реализованы, протестированы (155+ unit tests GREEN), wired в `.claude/settings.json`, ветка `feat/enforce-hard-rules` запушена на origin. **НЕ влита в main** — для твоего PR review. - -PR URL: https://github.com/CoralMinister/lidpotok/pull/new/feat/enforce-hard-rules - -## Коммиты на feat/enforce-hard-rules (14 commits) - -| # | Commit | Что | -|---|--------|-----| -| 1 | `6f70cca9` | docs: spec + plan эпика | -| 2 | `76cb8253` | T1 helpers + override-vocab (41 unit tests) | -| 3 | `9188e1ce` | T2 Rule #5 memory-sync coverage (8 tests) | -| 4 | `a3e75733` | T3 Rule #7 branch-switch detection (11 tests) | -| 5 | `b6a0938c` | T4 Rule #4 verify-before-push + recorder (16 tests) | -| 6 | `bb41315d` | T5 Rule #2 coverage-verify (8 tests) | -| 7 | `d7fe7ba4` | T6 Rule #1 mandatory injection (7 tests) | -| 8 | `c9f2be37` | T7 Rule #3+#6 TDD-gate + writing-plans (11 tests) | -| 9 | `fe338e09` | T8 Rule #8 classifier-mismatch (9 tests) | -| 10 | `59c3ef41` | T9 Rule #10 rationalization audit (11 tests) | -| 11 | `6cb8be69` | test fix: pre-existing readRuntimeFlag test | -| 12 | `3d5fb86e` | fix: tests_failed=0 → PASS regardless of exit (infra failures don't block) | -| 13 | `97982f85` | **T10 atomic wire-up of 9 enforce-hooks in .claude/settings.json — HOOKS LIVE FROM THIS COMMIT** | -| 14 | `982cd006` | fix: detectFullTestRun false-positive guard (vitest run в commit message не считается test run'ом) | - -## Что закрыто относительно retro-обещаний предыдущей сессии - -| Retro-обещание | Closure | Rule | -|----------------|---------|------| -| Branch-switch до commit (parallel sessions) | ✅ | #7 | -| Verify before commit/push (full test run forced) | ✅ | #4 | -| Memory-sync separate coverage | ✅ | #5 | -| Coverage tag verified vs actual skill invocations | ✅ | #2 | -| Classifier-mismatch enforced | ✅ | #8 | -| Mandatory injection per prompt | ✅ | #1 | -| TDD-gate + writing-plans для feature/bugfix/refactor | ✅ | #3+#6 | -| Rationalization flags visible на next turn | ✅ | #10 | -| Override-vocabulary hard-coded | ✅ | #9 (7 фраз) | -| Sentinel-based fresh verification | ✅ | infrastructure | - -## Что РАБОТАЕТ live прямо сейчас - -Bootstrap проверки в этой сессии: -- Smoke-тест каждого хука на пустом stdin — все 9 exit 0 (fail-quiet OK). -- `enforce-verify-record` написал sentinel после vitest run: `tests_passed: 8092, tests_failed: 0, result: pass`. -- `enforce-verify-before-push` поймал false-positive — "vitest run" в commit message перезаписало sentinel как fail. Hook отработал правильно (block на fail) → заставил меня найти баг и пофиксить (commit `982cd006`). -- `enforce-branch-switch` пропустил push благодаря expected-branch sentinel (`echo feat/enforce-hard-rules > ~/.claude/runtime/expected-branch-`). -- Memory-coverage hook СЕЙЧАС блокирует меня от записи в memory — я designed его так. Поэтому пишу этот документ в docs/, а не memory/. - -## Override vocabulary (запомни эти 7 фраз) - -Substring-match case-insensitive в твоём prompt. Suppress правила для ОДНОГО prompt'а: - -| Phrase | Suppresses | -|--------|-----------| -| `без скилов` | skill-required / coverage-skill-match / classifier-mismatch | -| `direct ok` | то же что выше | -| `срочно` | verify-before-push / verify-before-commit / tdd-gate | -| `быстрый коммит` | tdd-gate / verify / writing-plans | -| `recovery` | branch-switch / git-recovery | -| `memory dump` | memory-sync-coverage / skill-required | -| `ремонт инфраструктуры` | **ВСЕ** правила (full opt-out) | - -Конфиг: [tools/enforce-override-vocab.json](tools/enforce-override-vocab.json) — правь по вкусу. - -## Известные дыры для tuning через 1-2 недели - -1. **Bash heredoc обходит memory-coverage rule.** Хук проверяет только `Edit/Write/MultiEdit`. Если делаю `cat > memory/x.md << EOF`, rule молчит. Fix: добавить parser redirect-targets в PreToolUse Bash. Сам этот документ написан в docs/ потому что без этого фикса единственный путь — переключение coverage в новом ходу. -2. **Single coverage line per response.** Первая `coverage:` строка побеждает. Чтобы сменить активность (TDD → memory-sync) — закрывай turn, открывай новый prompt. -3. **expected-branch sentinel требует bootstrap.** Без файла defaults к `main`. Если стартую на feature branch — нужно либо `BRANCH-SWITCH-CONFIRMED` в response, либо override `recovery`, либо предварительно `echo feat/x > ~/.claude/runtime/expected-branch-`. Можно автоматизировать через SessionStart hook. -4. **classifier-mismatch confidence threshold = 0.7 хардкод.** Tune через брейн-retro после первой недели использования. -5. **TDD-gate false-positive риск.** На каждый prod-edit ждёт preceding test edit + vitest RED. Для typo-fix это overkill — используй `срочно` override. -6. **`detectGitCommandKind` regex может пропустить `git -c …` form.** Простой regex, тривиально обходится. Acceptable v1. - -## Что я бы сделал в моей предыдущей brain factor-analysis 4-passes сессии под этими правилами - -| Активность | До правил | Под правилами | -|------------|-----------|---------------| -| Pass 1 commit | заявил GREEN на узком прогоне | заблокирован → full sweep → нашёл pre-existing failures раньше | -| Pass 2 branch-switch | заметил постфактум, потерял 3 мин на recovery | поймал бы до commit (30 сек на BRANCH-SWITCH-CONFIRMED) | -| Pass 3 vite-config crash | обнаружил на третьей фазе | обнаружил бы на первой | -| Memory sync | single TDD coverage на 6 часов разной работы | принудительно re-announce direct:memory-sync | -| Skill bypasses (4 пропуска) | прошли беспрепятственно | classifier-mismatch + coverage-verify заблокировали бы или потребовали override | - -Net: +10-15% latency. Раннее обнаружение проблем. Параллельные сессии перестают красть время. - -## Утренний checklist - -1. **Создай PR** на GitHub: https://github.com/CoralMinister/lidpotok/pull/new/feat/enforce-hard-rules -2. **Прочитай spec + plan:** - - [docs/superpowers/specs/2026-05-25-enforce-hard-rules-design.md](docs/superpowers/specs/2026-05-25-enforce-hard-rules-design.md) - - [docs/superpowers/plans/2026-05-25-enforce-hard-rules.md](docs/superpowers/plans/2026-05-25-enforce-hard-rules.md) -3. **Решай: merge сразу или в warn-only сначала?** Хуки сейчас в block-mode. Если хочешь подстраховаться — поменяй временно `exit(2)` на `exit(0)` в 1-2 наиболее агрессивных файлах (`enforce-tdd-gate.mjs` / `enforce-verify-before-push.mjs`) и наблюдай неделю через episodes JSONL. -4. **Tuning через 1-2 недели:** - - `~/.claude/runtime/override-usage.jsonl` — какие правила тебе чаще всего приходится обходить? - - `~/.claude/runtime/rationalization-flags-*.jsonl` — какие мои рационализации мозг ловит? -5. **Перенеси этот документ в memory** (или скажи мне «memory dump» в первом промпте, я перенесу через хук). - -## Escape hatches если что-то ломается - -- **User-side:** «ремонт инфраструктуры» в prompt → ВСЕ правила suppressed для одного prompt'а. -- **Roll-back:** `git revert 97982f85` на `feat/enforce-hard-rules` → хуки становятся инертными файлами без enforcement. -- **Партиал rollback:** удали отдельные hook entries из `.claude/settings.json` — оставшиеся работают, удалённые молчат. -- **Полный отказ:** `git push origin :feat/enforce-hard-rules` (удалить branch), `git checkout main` локально. - -## Стоимость - -- **Время реализации:** ~4 часа автономной работы. -- **Размер кода:** 9 hook scripts (~1100 строк) + 9 test files (~600 строк) + helpers (~290 строк) + 1 vocab config + 2 docs. -- **Размер тестов:** 155+ новых unit tests (TDD на каждом шаге). -- **Latency:** ~50-200ms на каждый pre-tool hook (5 хуков на Edit/Write/MultiEdit, 2 на Bash, 2 на Stop). Заметно при rapid-fire операциях. -- **False-positive риск:** средний в первый месяц. Override-vocab — твой клапан.