Console case-experience: dashboard → 6-stage case shell → archive deliverables - #10
Merged
anmolg1997 merged 5 commits intoJun 5, 2026
Conversation
…chive deliverables
Reworks the Console per Akhilesh's direction: from "pick Real/Cached then trigger a
run" into a case-management experience (modelled on his Claims Workbench reference).
Dashboard (new landing) → a list of discovery cases; for now one saved, signed-off
case: Opella · Order-to-Cash (run date, 34-min duration, stage, status). Clicking it
opens a 6-stage clickable stepper — navigate to any stage like the reference:
1 Ingestion — the 12 ingested source docs (type-coded, sizes)
2 Domain Analysis — the agent's tool-activity log (live stream on a real run)
3 Discovery Co-pilot — the FROZEN gap-resolution audit trail (SME working record),
iframed from archive/preview/07-copilot-audit-trail.html,
with the gap-gate summary (9 questions · 3 high resolved ·
2 clarifications · 4 carried forward)
4 Transformation Journey — sub-progress: assessment → opportunity ID → use-case
modeling → roadmap
5 Findings Review — the preview suite iframed + Approve / Re-run-with-comments
6 Report Generation — links to the 6 signed-off report deliverables
Behaviour (per the brief): NO mode selector — a run is always live. The saved case is
revisitable instantly and shows Akhilesh's curated archive/ artefacts. "Run live"
triggers the real pipeline (--fresh) for the real time it takes and streams the genuine
activity into Domain Analysis; the displayed deliverable is the signed-off suite.
Backend (server.py): serves the curated demo suite verbatim at /archive/... (path-
traversal guarded, case-insensitive dir resolve so it works on case-sensitive FS too);
GET /api/cases + /api/case/:id; /api/run dropped its `mode` param (always --fresh).
Archive/ (12 inputs + preview suite incl. the copilot audit trail + 6 final reports)
committed as the demo content the UI binds to.
Removed the old ConsolePage (fully replaced by DashboardPage + CasePage).
Verified: tsc + eslint + build clean; Python suite 265 pass / 100% coverage; pyrefly
clean; Playwright walkthrough of dashboard → case → all 6 stages (Ingestion docs,
Co-pilot audit-trail iframe, Findings-Review preview iframe, Report links) all render;
/archive routes serve correct MIME + traversal-guard holds. Live-run trigger is wired
on the proven startRun/SSE path (not re-clicked live to save credits).
…Akhilesh's spec
Three refinements after re-checking against Akhilesh's written expectation
("convincing mock workflow platform; reports viewable AND downloadable; live
execution not the point"):
- Live re-run demoted from a header CTA button to a quiet "↻ Re-run this
discovery live" text link, so the demo reads as a polished, completed platform
first (live stays available but understated).
- Report Generation cards now offer BOTH "Open ↗" (view in tab) and "Download" —
satisfying his "downloadable/viewable" signoff requirement.
- server.py: /archive/<path>?download=1 sets Content-Disposition: attachment, so
download works even cross-origin (the HTML <a download> attribute is ignored
across origins; the app on :5173 fetches archive files from :8742). Verified the
header is present with ?download=1 and absent (inline) without it.
Kept the richer 6-stage flow from the actual call (a superset of the summary's
4-stage list). Gates green: tsc+eslint+build, Python 265/100% cov, pyrefly clean;
report Open + Download both verified in-browser.
…tioned dashboard Addresses the feedback that the dashboard read as a bare table, not an enterprise product. Reworks both pages onto a shared application shell modelled on the Claims-Workbench reference: - AppShell (new): a persistent navy left rail (AuroPro brand, primary nav — Dashboard / Discovery cases — with Settings pinned at the foot, collapsible) + a top app bar (page title + breadcrumb, notification bell, operator avatar). Wraps the dashboard and case pages so the product feels like one platform. - Dashboard: now sectioned inside the shell — a KPI strip (cases / completed / avg discovery time / documents processed) above a proper cases section rendered as cards (domain, status pill, run date, duration, docs, findings, stage, Open-case), not a flat table. - CasePage: rendered inside the same shell; the case title moves to the top bar, the subtle live re-run becomes a top-bar action; the meta panel + 6-stage stepper + stage content sit in the framed content area. Styling stays on the navy/blue identity. Gates: tsc + eslint + build clean; verified in-browser — dashboard (rail + KPIs + case card) and case detail (rail + top bar + stepper + co-pilot audit trail) both read as enterprise-grade.
…distinct identities Three fixes from review feedback: - Report Generation cards no longer overflow: switched from a horizontal row (title + actions side-by-side, which clipped "Download") to a vertical card — id+title on top, an Open/Download button row in a footer. Clean 3-col grid. - Discovery Co-pilot no longer just iframes the preview suite (which made it feel identical to Findings Review). It now renders a NATIVE SME decision console: the "gap gate CLEARED" banner + a decision ledger (each gap = id, severity chip, the question, the SME decision, and what it feeds), driven by a new gap_ledger exposed from /api/case (grounded in the audit-trail content). The full working record is demoted to a "view the full record" expandable. - Findings Review is now a sign-off GATE, not a re-shown report: a "under review for sign-off" checklist (report count, findings, opportunities, blocking gaps resolved) + the prominent Approve/Send-back action; the preview suite drops to a supporting "review the full preview suite" expandable. Backend: OPELLA_GAP_LEDGER (9 rows mirroring the audit trail) added + exposed via /api/case. Gates: tsc+eslint+build clean; Python 266 pass; pyrefly clean; all three stages verified in-browser.
…n indicator
Reframes the dashboard around starting work, per Akhilesh's follow-up. Adds a
dedicated "Initiate a new discovery" section with two paths and a live
in-progress strip:
• Upload your own documents — a real drag-drop/browse file picker. Files are
read in-browser, POSTed to a new /api/ingest (JSON + base64), staged under a
fresh inputs/<slug>/, and a genuinely LIVE pipeline runs on them. A fresh
case has no curated deliverable, so the case shell renders the live run
honestly (kind:"live" → stage placeholders, never the Opella demo content).
• Pre-ingested Opella · O2C — the curated, signed-off reference case; "Run
live" streams a genuine run and shows the archive suite on completion.
• In-progress strip — polls a new /api/runs (active, non-done runs with their
current stage + label); "Resume →" routes back into the running case and
subscribes to that exact run.
Backend (server.py):
• POST /api/ingest — extension/size/count validation, path-traversal-safe
filenames, collision-safe slug; starts the run and returns its run_id.
• GET /api/runs — active-run list for the indicator.
• Run gains .label/.stage/.ok; emit() advances .stage.
• /api/ingest returns the run_id so the UI subscribes to the already-started
run instead of launching a redundant second one.
Fresh ingest dirs (inputs/<slug>/, out/<slug>/) are transient → v1/.gitignore.
Gates: 270 Python tests / 100% cov, pyrefly clean, tsc+eslint+build clean;
full flow (upload → live run → resume) verified in-browser.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Per Akhilesh's direction (demo-prep call + his message + the Claims Workbench reference): reframe the Console from "pick Real/Cached then trigger a run" into a case-management experience.
What
Dashboard (new landing) — a list of discovery cases. For now one saved, signed-off case: Opella · Order-to-Cash (run date, 34-min duration, current stage, status). Click it → a 6-stage clickable stepper (numbered circles, navigate to any stage, like the reference):
archive/preview/07-copilot-audit-trail.html, with the gap-gate summary (9 questions · 3 high resolved · 2 clarifications · 4 carried forward)Behaviour (per the brief): no mode selector — a run is always live. The saved case is revisitable instantly and shows Akhilesh's curated
archive/artefacts. Run live triggers the real pipeline (--fresh) for the real time it takes and streams the genuine activity into Domain Analysis; the displayed deliverable is always the signed-off suite.Backend (
server.py): serves the curated demo suite verbatim at/archive/...(path-traversal guarded; case-insensitive dir resolve so it works on case-sensitive filesystems too — the dir isArchive/);GET /api/cases+/api/case/:id;/api/rundropped itsmodeparam (always--fresh).Archive/(12 inputs + the preview suite incl. the copilot audit trail + the 6 final reports) is committed as the demo content the UI binds to.Removed the old
ConsolePage(fully replaced byDashboardPage+CasePage).Verified
/archiveroutes serve correct MIME + the traversal guard holds.tests/test_server_cases.pyguards the case metadata + asserts every archive artefact the UI points at exists on disk (no iframe 404s).Honest note
The Run live trigger is wired on the already-proven
startRun+ SSE path (same code as the validated live runs in #8/#9); I did not re-click a full live run here to save ~15 min + credits. The displayed deliverable is intentionally always the curated archive suite, regardless of a live trigger.Presentation vs grounded
Report/preview/audit-trail content = Akhilesh's grounded archive artefacts, served as-is. The 34-min duration, "Signed off" status, and the Approve button are clearly demo-framing — no fabricated numbers introduced.