- calibration/frames/: 16 PNG-uri ground-truth numite {ts}_{color}.png,
copiate din logs/fires (izolate de samples/ și logs/fires/ care se pot goli)
- calibration/calibration_labels.json: mutat din samples/, curățat de entries
cu fișiere inexistente, extins la acoperire completă 7 culori → 16/16 PASS
- calibration/scenarios.json: 8 secvențe FSM (BUY/SELL full cycle, phase_skip,
catchup, post-fire suppression) pe frame-uri reale
- tests/test_scenarios_regression.py: parametrizat pe scenarios.json, asertează
color+state+reason+trigger+alerts+scheduler prin pipeline-ul
Detector → _handle_tick
- docs: README + CLAUDE reflectă noua structură, incidentul 2026-04-20/21
(pixel saturat UNKNOWN → FSM blocat în PRIMED → polling continuu) +
troubleshooting pentru trigger UNKNOWN
Pytest: 184 → 192 passed (+8 scenarii regresie).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
83 lines
2.4 KiB
JSON
83 lines
2.4 KiB
JSON
[
|
|
{
|
|
"path": "calibration/frames/20260420_200002_turquoise.png",
|
|
"expected": "turquoise",
|
|
"note": "BUY arm visible in poll; rgb=(0,253,253)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260421_072757_turquoise.png",
|
|
"expected": "turquoise",
|
|
"note": "BUY arm via manual /ss; rgb=(0,253,253)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_171501_yellow.png",
|
|
"expected": "yellow",
|
|
"note": "SELL arm event; rgb=(253,253,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_194505_yellow.png",
|
|
"expected": "yellow",
|
|
"note": "SELL arm event; rgb=(253,253,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_194721_yellow.png",
|
|
"expected": "yellow",
|
|
"note": "SELL arm visible in manual /ss; rgb=(253,253,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260418_124645_dark_green.png",
|
|
"expected": "dark_green",
|
|
"note": "BUY prime catchup; rgb=(0,128,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_185102_dark_green.png",
|
|
"expected": "dark_green",
|
|
"note": "BUY prime; rgb=(0,128,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_213706_dark_green.png",
|
|
"expected": "dark_green",
|
|
"note": "BUY prime catchup; rgb=(0,128,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_172104_dark_red.png",
|
|
"expected": "dark_red",
|
|
"note": "SELL prime; rgb=(128,0,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_195701_dark_red.png",
|
|
"expected": "dark_red",
|
|
"note": "SELL prime; rgb=(128,0,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_210905_dark_red.png",
|
|
"expected": "dark_red",
|
|
"note": "SELL prime; rgb=(128,0,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_163303_light_green.png",
|
|
"expected": "light_green",
|
|
"note": "BUY trigger (FIRE); rgb=(0,255,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_214908_light_green.png",
|
|
"expected": "light_green",
|
|
"note": "regression 2026-04-20: BUY trigger visible in poll (original complaint); rgb=(0,255,0) was UNKNOWN under pre-2026-04-21 calibration"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_173004_light_red.png",
|
|
"expected": "light_red",
|
|
"note": "SELL trigger (FIRE); rgb=(255,0,0)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_175005_gray.png",
|
|
"expected": "gray",
|
|
"note": "idle gray dot via manual /ss; rgb=(128,128,128)"
|
|
},
|
|
{
|
|
"path": "calibration/frames/20260420_185702_gray.png",
|
|
"expected": "gray",
|
|
"note": "idle gray dot in poll; rgb=(128,128,128)"
|
|
}
|
|
]
|