Dokumentace refaktoru a delta-triage skill
- docs/refactor-clean-planner.md: plán Fází 0-4, stav, závazná pravidla (golden gate), návod nasazení v2 (shadow → vyhodnocení → přepnutí) - docs/planning-changelog.md: záznam 2026-06-11 (Fáze 0-3 kompletní) - docs/04-modules/planning.md: sekce Verze enginu v1/v2 + env flagy - docs/audits/*: stav implementace FE fixů - .claude/skills/ems-delta-triage: postup triáže neekonomického chování (realita vs plán vs shadow peer vs oracle, verdikt s Kč) - CLAUDE.md: ukazatele na refaktor, solver_v2 a delta-triage v 'Kde hledat co' Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
62
docs/refactor-clean-planner.md
Normal file
62
docs/refactor-clean-planner.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# Refaktor „Čistý plánovač“ — plán a stav
|
||||
|
||||
Cíl: odstranit příčinu neekonomického provozu — heuristickou vrstvu okolo MILP
|
||||
solveru (pre-solver fáze/okna/kotvy + ~26 ručně laděných penalt v objective),
|
||||
která se vzájemně pere a převažuje reálné peníze. Strategie: **ne big-bang
|
||||
přepis projektu** (predikce, Modbus, telemetrie, audit, DB jsou odladěné),
|
||||
ale řízená náhrada jádra plánovače za regresním harnessem.
|
||||
|
||||
## Diagnóza (měřeno 2026-06-11)
|
||||
|
||||
- `planning_engine.py` (před refaktorem 6 345 ř., 112 funkcí): ~35 % ekonomické
|
||||
logiky v heuristikách PŘED solverem, ~60 % jako měkké penalty v objective
|
||||
s ~20 konstantami natvrdo. Solver = „vykonavatel heuristického plánu“.
|
||||
- Na neg-sell dni Σ penalt 2 119 Kč při cashflow −163 Kč (13×).
|
||||
- GAP actual vs perfect-hindsight oracle, home-01 29 dní: **2 185 Kč ≈ 27 %**
|
||||
(stabilní dny 1–5 %, volatilní/neg-sell 50–160 %).
|
||||
- Den 2026-05-01 (buy −13,26): v1 Infeasible po všech 8 relax krocích.
|
||||
- Penalty audit: **16/26 penalt mrtvých** na 6 reprezentativních fixtures.
|
||||
|
||||
## Fáze a stav
|
||||
|
||||
| Fáze | Obsah | Stav |
|
||||
|------|-------|------|
|
||||
| 0 | Ekonomický harness: golden replay gate, fixtures z reálné DB, economics report (actual vs oracle), penalty audit | ✅ hotovo |
|
||||
| 1 | Dekompozice `planning_engine.py` → `services/planning/` (constants/types/forecast/db_io/heuristics), fasáda, identita chování | ✅ hotovo |
|
||||
| 2 | Penalty audit, stale testy → xfail, rozšíření fixtures (extrémní dny) | ✅ hotovo |
|
||||
| 3 | `solver_v2` (čisté jádro) + router verzí + shadow porovnání | ✅ hotovo (kód); **čeká na shadow data z produkce** |
|
||||
| 4 | Slupka: FE výkon + responsivita | ✅ první vlna (viz `docs/audits/`) |
|
||||
|
||||
## Jak se pracuje (závazná pravidla)
|
||||
|
||||
1. **Golden gate** (`backend/tests/test_golden_replay.py`) musí projít po každé
|
||||
změně plánovače. Snapshoty se regenerují (`GOLDEN_UPDATE=1`) jen při vědomé
|
||||
změně chování, s odůvodněním v commitu a s nezhoršeným GAPem
|
||||
(`scripts/harness/economics_report.py`).
|
||||
2. Ekonomické parametry patří do DB (CLAUDE.md pravidlo 16), ne do Pythonu.
|
||||
3. v2 nikdy neměnit bez `solver_v2_eval.py` (v2 vs v1 na fixtures).
|
||||
|
||||
## Nasazení v2 (návod)
|
||||
|
||||
1. **Shadow**: do prod env `PLANNING_ENGINE_COMPARE_ENABLED=true` → v1 řídí,
|
||||
v2 se počítá paralelně, diff v `planning_run.solver_params.comparison`.
|
||||
2. Po ~týdnu vyhodnotit: `select solver_params->'comparison' from ems.planning_run …`
|
||||
+ `economics_report.py` (trend GAPu).
|
||||
3. **Přepnutí**: `PLANNING_ENGINE_VERSION=v2`; golden snapshoty vědomě
|
||||
zregenerovat; heuristics.py + mrtvé penalty postupně mazat.
|
||||
|
||||
## Klíčové výsledky v2 (fixtures, SoC-fér)
|
||||
|
||||
v2 lepší na všech 5 řešitelných fixtures, **+231,5 Kč ≈ +22 %**; den
|
||||
2026-05-01 v1=INFEASIBLE → v2 řeší (−674,5 Kč). Detail:
|
||||
`scripts/harness/solver_v2_eval.py`, changelog 2026-06-11.
|
||||
|
||||
## Otevřené body
|
||||
|
||||
- v2 výkon na extrémních dnech (10 s time limit) — omezit binárky
|
||||
`y_imp`/`z_exp` jen na sloty, kde dávají smysl.
|
||||
- `fn_plan_current_bundle` 3,8 s (90 % v `fn_forecast_pv_slots_range_canonical_ab`)
|
||||
— viz `docs/audits/frontend-performance-2026-06-11.md`.
|
||||
- Virtualizace Planning tabulky; Recharts Cell mapování.
|
||||
- Po přepnutí na v2: smazat mrtvé heuristiky/penalty, přepsat 4 xfail testy
|
||||
na ekonomické asserty.
|
||||
Reference in New Issue
Block a user