Files

42 lines
3.5 KiB
JSON

{
"fixture": "e-pyqt-ai",
"passed": true,
"checks": {
"frontend reported correctly": true,
"asks /colou?r/": true,
"asks /section/": true,
"never asks /\\bkeep\\b|restyle/": true,
"never asks /desktop|web/": true,
"exactly one page built": true,
"AI desktop path: sections, ai_bridge and review backend built": true,
"no placeholders left in ai_bridge.py": true,
"no placeholders left": true,
"page wired to the bot (sample data off)": true,
"bot_runner.py built": true,
"no placeholders left in the host": true,
"bot dry run ends done": true,
"real steps reach the page": true,
"bot error line reaches the log": true,
"page check passes": true
},
"page_check": [
"99 passed, 23 skipped in 61.26s (0:01:01)"
],
"files": [
"README.md",
"bot.py",
"dashboard\\ai_bridge.py",
"dashboard\\bands.py",
"dashboard\\bot_raw.log",
"dashboard\\bot_runner.py",
"dashboard\\bridge.py",
"dashboard\\dashboard.html",
"dashboard\\pricing.py",
"dashboard\\server_stub.py",
"extractor.py",
"inbox\\invoice-2201.pdf",
"inbox\\invoice-2202.pdf",
"requirements.txt"
],
"reply": "Dashboard ready \u2014 **desktop (PyQt6)** path, because `requirements.txt` already has PyQt6. Theme Tebra Sky, no optional sections. Start it with `python dashboard/ai_bridge.py`.\n\n| Check (headless Qt run of the real window) | Result |\n|---|---|\n| Bot dry run (`python dashboard/bot_runner.py`) | 4 steps in order, 10\u219230\u219290\u2192**100**, both `ERROR:` lines shown |\n| Review: band legend | 3 clean \u00b7 1 check \u00b7 1 review \u00b7 1 missing (6/6 fields) |\n| Approve gate | Refused: \"3 flagged field(s) still need verifying.\" \u2192 after Verify remaining \u2192 **\u2713 Approved** |\n| Draft edit | Shows \"1 unsaved change\" until Save; Discard clears it |\n| Running invoice | \"page 1 of 3\" |\n| Cost page | \"4 of 5 documents priced\", one run \"not priced\", by-hand figure goes $6.67 \u2192 $13.33 when minutes change |\n| Dark mode / 800px width / `{{` left / console errors | ok / ok / 0 / **0** |\n\n- **Files:** everything is in `dashboard/`: `dashboard.html`, `bridge.py`, `bot_runner.py`, `ai_bridge.py`, `server_stub.py`, `bands.py`, `pricing.py`.\n- **Wiring:** the Run tab is wired to the real `bot.py`. The Review and Cost tabs still show **sample data** from `server_stub.py`, using your 6 real fields and `gemini-2.5-flash`. To make them real, the project needs to save its extraction results and expose `dispatch()` over that store.\n- **UNVERIFIED:** the Gemini rate ($0.30 in / $2.50 out per 1M tokens) comes from the skill's bundled table (as of 2026-08-11). I wasn't allowed to fetch the pricing page, so please check it.\n- **Not tested:** I didn't click Run inside the window. The bot was only dry-run through `bot_runner.py`.\n\n**Also noticed (not fixed):**\n- `extractor.py` doesn't keep `usage_metadata`, so real runs will show up as \"not priced\".\n- With no API key set, both invoices fail, but the bot still exits 0, so the run shows \"Completed\".\n- The Dashboard KPIs and Report tab are empty, because `bridge.py`'s `load_dashboard` and `load_latest_report` are still TODO.\n\nFRONTEND: none (detect_frontend.py: \"No existing frontend found.\"; PyQt6 in requirements, so desktop path)\nQUESTIONS: Which colours: Tebra Sky, Superbill Ember, or Custom (one brand hex)? | Which optional sections to add: checkpoint tracker, admin/roles screen, login page, model picker, retry on another model (any, or none)?"
}