commands: m2d-log + backtest + batch + stats slash commands (124 tests pass)
This commit is contained in:
73
.claude/commands/backtest.md
Normal file
73
.claude/commands/backtest.md
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
description: Run vision extraction on a single TradeStation screenshot, then append to jurnal CSV + regenerate MD.
|
||||
argument-hint: "<screenshot_path_or_basename> [--calibration]"
|
||||
---
|
||||
|
||||
# /backtest — single screenshot vision extraction
|
||||
|
||||
Lansează subagentul `m2d-extractor` pe un screenshot, primește JSON-ul, append la `data/jurnal.csv`, regenerează `data/jurnal.md`.
|
||||
|
||||
## Arguments
|
||||
|
||||
- `$1` (obligatoriu) — path la screenshot. Acceptă:
|
||||
- basename (`2026-05-13-dia-1645.png`) — caută în `screenshots/inbox/`, fallback `screenshots/processed/`
|
||||
- path relativ sau absolut explicit
|
||||
- `--calibration` (flag) — `source=vision_calibration` în loc de `source=vision`. Folosit împreună cu `/m2d-log --calibration` pe același screenshot pentru P4 mismatch report.
|
||||
|
||||
## Workflow
|
||||
|
||||
1. **Rezolvă path-ul** screenshot-ului. Dacă `$1` e doar basename, încearcă `screenshots/inbox/<basename>` apoi `screenshots/processed/<basename>`. Dacă nu există nicăieri, raportezi eroare și te oprești.
|
||||
|
||||
2. **Invocă subagentul `m2d-extractor`** (definit în `.claude/agents/m2d-extractor.md`) prin Task tool cu `subagent_type: "m2d-extractor"`. Prompt-ul către agent:
|
||||
|
||||
```
|
||||
screenshot_path: <absolute_path>
|
||||
screenshot_file: <basename>
|
||||
```
|
||||
|
||||
Agentul scrie `data/extractions/<basename_no_ext>.json` + `.log` și returnează status-line scurt.
|
||||
|
||||
3. **Verifică output-ul**:
|
||||
- Dacă fișierul `data/extractions/<basename_no_ext>.json` nu există după ce agentul revine → eroare; raportezi și muți screenshot-ul la `screenshots/needs_review/`.
|
||||
- Citește JSON-ul. Dacă `confidence == "low"` SAU `ambiguities` non-empty cu `image_unreadable` → muți screenshot-ul la `screenshots/needs_review/`, raportezi, nu apelezi append.
|
||||
|
||||
4. **Append la CSV**:
|
||||
|
||||
```bash
|
||||
python -c "from pathlib import Path; from scripts.append_row import append_extraction; import json; r = append_extraction(Path('data/extractions/<basename_no_ext>.json'), source='<source>'); print(json.dumps(r, default=str))"
|
||||
```
|
||||
|
||||
`<source>` = `vision_calibration` dacă `--calibration`, altfel `vision`.
|
||||
|
||||
Parsezi răspunsul. Dacă `status == "rejected"`:
|
||||
- `reason` conține "duplicate" → screenshot deja procesat cu acest source; raportezi și NU îl muți.
|
||||
- `reason` conține "validation error" → JSON-ul agentului a fost respins; muți screenshot la `screenshots/needs_review/` și raportezi.
|
||||
- Alte erori → raportezi și lași screenshot-ul unde e.
|
||||
|
||||
5. **Mută screenshot-ul** la `screenshots/processed/<basename>` dacă append-ul a reușit și fișierul originar a fost în `inbox/`. Dacă era deja în `processed/`, nu-l muta.
|
||||
|
||||
6. **Regenerează MD**:
|
||||
|
||||
```bash
|
||||
python scripts/regenerate_md.py
|
||||
```
|
||||
|
||||
7. **Raport final** (în română):
|
||||
|
||||
```
|
||||
/backtest <basename> → trade #<id> adăugat (source=<source>, set=<set>, pl_marius=<pl>, confidence=<conf>).
|
||||
Regenerat data/jurnal.md (<total> rânduri).
|
||||
```
|
||||
|
||||
Dacă screenshot-ul a fost mutat la `needs_review`:
|
||||
|
||||
```
|
||||
/backtest <basename> → NEEDS REVIEW: <motiv>. Mutat la screenshots/needs_review/<basename>.
|
||||
```
|
||||
|
||||
## Reguli
|
||||
|
||||
- O singură invocare per screenshot. Nu reapelezi agentul dacă output-ul e dubios — îl muți la `needs_review` și raportezi.
|
||||
- NU edita CSV direct.
|
||||
- NU regenera MD dacă append-ul a fost respins.
|
||||
- Path discipline: subagentul scrie doar la `data/extractions/`; tu (slash command) muți screenshot-uri și apelezi scripts/.
|
||||
Reference in New Issue
Block a user