- dashboard.html: each section sits in OPTIONAL:<name> BEGIN/END blocks in
the style, markup and script, with sample answers so a page with no bot
shows it working. Core change: setUser records the role on <body>, so CSS
hides admin-only parts from operators.
- templates/sections.py keeps the chosen sections and deletes the rest,
markers included; it stops on a broken marker.
- templates/sections.md: what each section needs from the host (events,
actions, desktop slot snippets, the role re-check, the login hand-off).
- SKILL.md step 5 asks one multi-select question and runs sections.py.
- Page check: checkpoint states, admin visibility by role and assign/remove,
login theme and hand-off to auth or the stub. Cases skip on a generated
page without the section; the template must carry all three. The harness
signs in when the page has a login screen.
- tests/test_sections.py: no sections leave no trace, and that page still
passes the page check.
- Eval runner: a-empty-sections variant (all three) and per-section checks.
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>