--- description: Run vision extraction on a single TradeStation screenshot, then append to jurnal CSV + regenerate MD. argument-hint: " [--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/` apoi `screenshots/processed/`. 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: screenshot_file: ``` Agentul scrie `data/extractions/.json` + `.log` și returnează status-line scurt. 3. **Verifică output-ul**: - Dacă fișierul `data/extractions/.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/.json'), source=''); print(json.dumps(r, default=str))" ``` `` = `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/` 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 → trade # adăugat (source=, set=, pl_marius=, confidence=). Regenerat data/jurnal.md ( rânduri). ``` Dacă screenshot-ul a fost mutat la `needs_review`: ``` /backtest → NEEDS REVIEW: . Mutat la screenshots/needs_review/. ``` ## 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/.