Initial commit: plan, spec, tickets and dashboard skill templates
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
49f8f49b65
39 files changed
+10736
No files matched your search
@@ -0,0 +1,30 @@
|
||||
# 01: No-AI skill, first full path: empty project → working dashboard with sample data
|
||||
|
||||
Part of: ../spec.md
|
||||
|
||||
**What to build:** A developer runs the no-AI skill in an empty project. The skill:
|
||||
- scans the project and finds no frontend and no bot,
|
||||
- asks for colours (Tebra Sky, Superbill Ember, or a custom brand hex),
|
||||
- asks desktop or web, and which optional sections to build,
|
||||
- produces a working dashboard page with the shell, KPI cards, status donut, run panel and report table, running on sample data.
|
||||
|
||||
An automated page check proves the page renders the standard data contract correctly. Before any of that, fix the desktop host template so it stays valid Python until its placeholders are filled.
|
||||
|
||||
**Blocked by:** None (can start immediately)
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
- [ ] The desktop host template passes the lint hook unfilled. Its placeholders go inside string literals.
|
||||
- [ ] The no-AI skill file exists with a trigger description ("RPA dashboard", "automation dashboard", "bot dashboard", "without AI") and the workflow in spec order: scan → report/keep-or-restyle → colours → stack → optional sections → build → wire → verify.
|
||||
- [ ] The theme presets file exists with Tebra Sky and Superbill Ember, light and dark tokens for each.
|
||||
- [ ] Custom palette: given one brand hex, the skill derives the rest of the palette and checks text contrast in light and dark.
|
||||
- [ ] With no bot present, the generated page uses sample data and renders on first open.
|
||||
- [ ] A headless-browser page check (Seam 1) pushes contract envelopes through the page's public entry point and asserts visible results:
|
||||
- KPI counts match batch states;
|
||||
- donut and legend counts match;
|
||||
- the step list follows the step label;
|
||||
- log lines appear with their type;
|
||||
- report search filters rows and shows the correct bucket pill;
|
||||
- the dark toggle flips the theme.
|
||||
- [ ] The page check runs in light, dark and narrow width (≤820px).
|
||||
- [ ] Skill eval on test project (a), an empty project: the skill asks colours, stack and sections, never reports a frontend, and its output passes the page check.
|
||||
@@ -0,0 +1,22 @@
|
||||
# 02: No-AI desktop path: PyQt bot connected to the page
|
||||
|
||||
Part of: ../spec.md
|
||||
|
||||
**What to build:** A developer runs the no-AI skill in a PyQt project that already has a bot printing step markers. The skill chooses the desktop path and connects the bot to the dashboard:
|
||||
- The bot runs as its own child process, and its output is read line by line.
|
||||
- Specific step markers move the progress bar and step list.
|
||||
- A friendly-rules table turns raw output lines into plain-English log lines.
|
||||
- Error lines always appear, even when no rule matches.
|
||||
- Dark mode is remembered between launches.
|
||||
|
||||
**Blocked by:** 01
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
- [ ] The skill detects the PyQt project and the bot entry point, and fills in the host template's bot command, steps, step markers and friendly rules from the bot's real output.
|
||||
- [ ] Clicking Run starts the bot in a separate process. The Run button disables itself while running, and the status dot goes ready → running → done/error.
|
||||
- [ ] Step markers match on specific substrings and the first match wins. An unrelated line containing a common word does not move progress.
|
||||
- [ ] Unmatched error lines are always shown. Unmatched non-error lines are hidden.
|
||||
- [ ] The dark-mode choice persists across app restarts.
|
||||
- [ ] A Python assert-based self-check covers line classification, step-marker matching and friendly-rule matching, including the "never hide an error" case.
|
||||
- [ ] Skill eval on test project (b), a PyQt project with a step-marker bot: the skill doesn't ask the stack question, and the running page shows real steps and log lines.
|
||||
@@ -0,0 +1,15 @@
|
||||
# 03: Existing frontend: report, then keep or restyle
|
||||
|
||||
Part of: ../spec.md
|
||||
|
||||
**What to build:** A developer runs the no-AI skill in a web project that already has a frontend with its own colours. Before changing anything, the skill reports where the frontend is, what stack it uses and what colours it uses, then asks: keep the existing look or restyle. "Keep" adds the dashboard page in the existing tokens, fonts and components. "Restyle" asks for a preset or custom colour and swaps only the theme tokens; layout and logic stay untouched.
|
||||
|
||||
**Blocked by:** 01
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
- [ ] Detection covers plain HTML, React/Vue projects and an embedded PyQt web view, and reports location, stack and the main colour tokens.
|
||||
- [ ] "Keep": the new dashboard page uses the project's existing tokens and fonts. No existing styles are changed.
|
||||
- [ ] "Restyle": only token blocks change. A diff shows no layout or logic edits.
|
||||
- [ ] The colour question is skipped when the user keeps the existing look. The stack question is skipped whenever a frontend exists.
|
||||
- [ ] Skill eval on test project (c), a web project with an existing frontend and its own colours: the skill reports the frontend correctly. Both branches produce a page that passes the page check.
|
||||
@@ -0,0 +1,20 @@
|
||||
# 04: Optional sections: checkpoint tracker, admin/roles, login page
|
||||
|
||||
Part of: ../spec.md
|
||||
|
||||
**What to build:** The skill asks which optional sections to build and builds only those:
|
||||
- **Checkpoint tracker:** numbered boxes that go pending → active → done, or stuck.
|
||||
- **Admin/roles screen:** admin or operator. The admin nav item is hidden from operators.
|
||||
- **Login page:** UI only. It calls whatever auth the project already has.
|
||||
|
||||
Sections that aren't picked leave no code behind.
|
||||
|
||||
**Blocked by:** 01
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
- [ ] The skill asks for the optional sections with a multi-select and builds only the chosen ones.
|
||||
- [ ] Checkpoint tracker: the page check pushes checkpoint-state events and asserts each box shows pending, active, done or stuck.
|
||||
- [ ] Admin/roles: the page check asserts the admin nav and screen appear for the admin role and are hidden for operators.
|
||||
- [ ] Login page: renders in the chosen theme, light and dark, and hands off to the project's auth or a stub.
|
||||
- [ ] With no optional sections picked, the output contains no leftover markup, scripts or styles for them.
|
||||
@@ -0,0 +1,27 @@
|
||||
# 05: AI skill, first full path: confidence bands + review and approval (web, sample data)
|
||||
|
||||
Part of: ../spec.md
|
||||
|
||||
**What to build:** A developer runs the AI skill in a web project that has an LLM extraction call but no frontend. The skill follows the same question flow as the no-AI skill and builds a React + Vite + Tailwind dashboard with everything from the no-AI page, plus:
|
||||
- **Confidence bands:** green ≥0.95, amber 0.90–0.95, red <0.90. A field takes its worst word score, and a blank mandatory field is always flagged. The legend shows the caveat text.
|
||||
- **Review split pane:** the source document next to the extracted fields. Fields can be filtered by band. Edits stay drafts until Save, and leaving with unsaved edits asks first. Each field has Verify, and there's a "verify remaining" action.
|
||||
- **Approve gate:** the server refuses approval while any required field is unverified.
|
||||
|
||||
**Blocked by:** 01
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
- [ ] The AI skill file exists with a trigger description ("AI RPA dashboard", "extraction dashboard", "LLM/OCR review dashboard") and the shared workflow.
|
||||
- [ ] An AI contract extends the no-AI contract. These shapes came from the Superbill prototype:
|
||||
`Run{job_id,status:pending|queued|running|done|failed,model,pages_done,pages_total,summary:{green,amber,red,unscored}}`
|
||||
`ReviewRow{row_id,field,value,band:green|amber|red|blank|unscored,score,reason,verified,corrected_value}`.
|
||||
Actions: patch a review row, approve a run (server gate). A busy run is polled every ≈1.5s.
|
||||
- [ ] Reference code: Superbill-only names (ECW/Tebra project split, table prefixes, patient/ticket wording) are stripped or marked as examples. A scan finds no patient data, internal IPs, credentials or keys.
|
||||
- [ ] A band self-check asserts the thresholds, the worst-word rule and the blank-mandatory flag.
|
||||
- [ ] Page check, AI cases:
|
||||
- band counts and legend match;
|
||||
- band filters show the right rows;
|
||||
- a draft edit isn't saved until Save;
|
||||
- approve stays blocked while rows are unverified (the server stub refuses);
|
||||
- "page X of Y" updates while running.
|
||||
- [ ] Skill eval on test project (d), a project with an LLM extraction call: the skill picks the AI path, asks the shared questions, and its output passes the page check with sample data.
|
||||
@@ -0,0 +1,22 @@
|
||||
# 06: AI cost page: tokens, cost, monthly spend, model choice
|
||||
|
||||
Part of: ../spec.md
|
||||
|
||||
**What to build:** The AI dashboard gets a cost/ROI page. It shows:
|
||||
- input, output and thinking tokens and cost per run;
|
||||
- total spend and this month's spend, with a month-by-month breakdown;
|
||||
- a coverage pill ("N of M documents priced");
|
||||
- an "against doing it by hand" panel with editable assumptions, clearly labelled as assumptions.
|
||||
|
||||
Cost comes from a pricing table that records its source and its as-of date. Optionally, the skill also adds a model picker for each batch and retry-on-another-model for failed runs.
|
||||
|
||||
**Blocked by:** 05
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
- [ ] Cost per call = input tokens × input rate + (output + thinking tokens) × output rate, per million tokens. Long-context rates apply above the threshold.
|
||||
- [ ] An unknown model raises an error that names the known models. Cost never silently defaults to zero.
|
||||
- [ ] A Python self-check covers normal, long-context, thinking-token and unknown-model cases.
|
||||
- [ ] Contract: `RoiRun{model,input_tokens,output_tokens,thinking_tokens,total_cost}` and a fetch-ROI action. (Shape from the Superbill prototype.)
|
||||
- [ ] The page check asserts that the spend tiles sum the runs, the coverage pill counts priced vs. total documents, and the month breakdown groups runs correctly.
|
||||
- [ ] The model picker and retry-on-other-model are offered as optional sections and built only when chosen.
|
||||
@@ -0,0 +1,15 @@
|
||||
# 07: AI desktop path: AI sections in plain HTML on the no-AI page
|
||||
|
||||
Part of: ../spec.md
|
||||
|
||||
**What to build:** A developer runs the AI skill in a PyQt project. The skill builds the Tebra-style no-AI page and adds plain-HTML versions of the AI sections: band legend, review split pane with drafts, Verify and approve gate, and the cost tiles. They're connected through the same Python bridge as the no-AI desktop path, so a desktop AI bot gets the full AI dashboard with no web server.
|
||||
|
||||
**Blocked by:** 02, 05
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
- [ ] Plain-HTML AI sections exist, use the shared theme tokens, and render in light, dark and narrow width.
|
||||
- [ ] The AI events and actions travel over the desktop bridge using the same envelope as the no-AI path.
|
||||
- [ ] Approval is still enforced in Python on the bridge side. Changing the page cannot bypass it.
|
||||
- [ ] The page check runs the AI cases from tickets 05 and 06 against the desktop page and they pass.
|
||||
- [ ] Skill eval on a PyQt test project with an LLM extraction call: the skill picks the desktop AI path, and its output passes the page check.
|
||||
Reference in new issue
Block a user