docs: morning status — enforce-hard-rules 10 правил DONE+pushed, checklist для review
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
# Утренний статус — 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-<sid>`).
|
||||
- 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-<sid>`. Можно автоматизировать через 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 — твой клапан.
|
||||
Reference in New Issue
Block a user