- templates/web/pricing.py: pricing table with source and as-of date; cost_for_call
(input rate + (output + thinking) at output rate, long-context above threshold;
unknown model raises naming the known models).
- Cost tab: coverage pill, total/this-month/tokens tiles, month-by-month table,
per-run tokens and cost ("not priced", never $0), by-hand panel with editable
assumptions labelled as such.
- Contract: RoiRun and GET /roi; optional GET /models and POST /runs/{id}/retry.
- SKILL.md: cost page wiring, model picker and retry-on-other-model as optional sections.
- Tests: test_pricing.py self-check, page_check_ai/test_ai_cost.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- rpa-dashboard-ai/SKILL.md: trigger description and the shared question flow;
points at the no-AI frontend.md, themes and palette instead of copying them.
- templates/contract.md: runs, review rows, endpoints and the server approve gate.
- Superbill extracts: patient names and the client name removed, every file
carries an EXAMPLE ONLY banner. tests/test_reference_scan.py checks both skills
for patient data, internal IPs, credentials and keys.
- tests/fixtures/d-ai-extraction and its eval entry, which runs page_check_ai
on the built folder.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
React + Vite + Tailwind starter with the no-AI shell, band legend, review
split pane with drafts and verify, and a server stub that refuses approval
while flagged fields are unverified. Band self-check and AI page check.
Both page checks share one Chromium via tests/conftest.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- templates/bot_runner.py (new, no Qt): runs the bot as a child process
(unbuffered, UTF-8), tails its output, keeps raw lines in bot_raw.log,
and turns lines into step/log/status events. Step markers and friendly
rules use specific substrings, first match wins; unmatched error lines
are always shown, other unmatched lines hidden. Dry run:
python dashboard/bot_runner.py prints the events the page would get.
- bridge.py: delegates to bot_runner, one run at a time, restores the
saved dark mode on every page load (fixes sample-data mode in PyQt),
adds load_latest_report / download_report slots the page calls.
- SKILL.md: skip the stack question for a PyQt project; desktop wiring
steps from the bot's real output; verify steps for the host.
- tests: assert-based self-check for the line logic and run loop; Seam 1
run replay (status dot, Run button, steps, log) and wired-page mode;
fixture b-pyqt-bot and its Seam 2 eval (all 14 checks pass).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- templates/detect_frontend.py: finds plain HTML, React/Vue/Angular/Svelte apps
and PyQt web views; prints location, stack, main colours, font and every
token block (CSS custom properties, <style> tags, Tailwind config).
- templates/frontend.md: shared report / keep / restyle procedure, written
so rpa-dashboard-ai can point to it.
- SKILL.md steps 1, 2 and 6 point to it.
- tests: detection self-check; fixture c-web-existing-frontend; eval entries
c-keep and c-restyle (new pages only, per-question grading, checks on what
changed in the existing files), both passing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On Windows a multi-line argv prompt is cut at its first newline, which
also dropped the permission flags. The a-empty eval now passes every
check, including the page check on the page the skill built.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- rpa-dashboard-no-ai/SKILL.md: trigger description and the workflow in spec
order (scan, report/keep-or-restyle, colours, stack, sections, build, wire,
verify).
- templates/themes.md: Tebra Sky and Superbill Ember, light and dark blocks.
- templates/palette.py: derives a custom palette from one brand hex and
checks text contrast in light and dark.
- dashboard.html: built-in sample data so a page with no bot works on first
open; cleared batches in the donut; component tokens so Ember is a
token-only swap; accessible names for KPI cards, nav, steps, log, search
and the dark toggle.
- bridge.py: placeholders inside string literals, so it passes the lint hook
unfilled.
- tests/page_check: Seam 1 harness (fake Qt bridge, light/dark/narrow).
- tests/evals: Seam 2 runner and fixture a-empty.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>