finalizelisted
Install: claude install-skill Redloft/redplan
# /finalize — stabilize + код-ревью по diff
Сиблинг `plan-panel`. Snapshot + stabilize делает **сессия детерминированно через Bash**
(надёжнее, чем агент на git), панель код-ревью (scope→roles→judge) — Workflow `finalize.js`.
Base dir: `~/.claude/skills/finalize`. Общие `strip-secrets.sh`/`checkpoint.sh` — symlink на `plan-panel/lib`.
## Процедура (что делает Claude при триггере)
### 0. Setup + Snapshot (Bash, детерминированно)
```bash
B=~/.claude/skills/finalize/lib
OUT=$(bash $B/persist.sh "<cwd>" "<session-slug>") # → project_dir|central|ts ; пишет checkpoint(run_type=finalize)
PD=$(echo "$OUT" | cut -d'|' -f1)
GATES=$(bash $B/detect-gates.sh "<cwd>" "<project_slug>") # JSON [{name,cmd}] или []
N=$(bash $B/snapshot.sh "<cwd>" "$PD" working) # git diff → strip → diff.patch+changed_files ; mode: working|staged|since
```
- `mode` из флага: по умолчанию `working`; `--staged` → staged; `--since <ref>` → since.
- **N == 0** → стоп: «нечего финализировать (нет изменений)».
- `diff.patch` уже **secrets-stripped** (snapshot гонит через strip; сырое на диск не пишется).
### 1. Stabilize (Workflow `stabilize.js`, пропустить если `--review-only` или GATES==[])
Автоматизированный fixer-loop (≤3 раунда, regression-guard, deny-list, no-suppression — всё внутри):
```
Workflow({scriptPath: "~/.claude/skills/finalize/workflow/stabilize.js",
args: {cwd, gates: GATES, max_rounds: 3}})
→ stabilize_report = {stable: true|false|"unknown", rounds, remain