Skip to content

Build Layers 1-4 Operator, Intake, Control Plane, and Oversight UI - #99

Merged
d3v07 merged 2 commits into
mainfrom
feature/frex22-layers-1-4-operator-control
Jun 7, 2026
Merged

Build Layers 1-4 Operator, Intake, Control Plane, and Oversight UI#99
d3v07 merged 2 commits into
mainfrom
feature/frex22-layers-1-4-operator-control

Conversation

@Frex22

Copy link
Copy Markdown
Collaborator

Summary

This PR implements the frontend/product surfaces for Layers 1-4 (#91-94):

  • Layer 1: Multipage Operator Console — Overview, Run Review, System Map, History & Compare, Audit & Compliance (left-sidebar nav, mobile hamburger)
  • Layer 2: Intake + API Gateway — intake sources, Run Intake Service, FastAPI routes, read-only run wording
  • Layer 3: Control Plane — six deterministic service cards + run state machine + failure handling (in System Map)
  • Layer 4: Agent Oversight Layer — Orchestrator / Reviewer / Security agent cards + constraints/catches panels (in System Map)

Built to the Layer architecture image spec; diagrams are hand-built CSS (no diagram lib) so they match the console and reflow on mobile.

Safety boundaries preserved

  • UI reads EvidencePack v1 JSON only.
  • No EvidencePack schema changes.
  • No new mutation path.
  • No tool renames.
  • No API expansion (Overview/History use the existing GET /packs; writes still go through the same-origin token proxy to /run + /packs/:id/decision).
  • Agents remain read-only.
  • Mutation remains backend-only after matching hash-bound approval.

Layer 1 specifics

  • Run Review approval CTA reads exactly "Approve this evidence hash", with a short hash preview beside it and the full copyable hash above.
  • Safety authority section present with the five exact lines.
  • Before/After explain-plan diff labels: Before: SORT present / high docs examinedAfter: SORT removed / index-backed query, with After: pending verification and After: verification failed, see trace variants.
  • Pending / approved / verified / rejected / verification-failed render distinctly (shared StatusPill + displayStatus).
  • Audit policy events show the honest empty state: No policy events recorded for this run.

Required screenshots

In demo/screenshots/layers/:

  • overview-desktop, run-review-desktop, system-map-desktop, history-desktop, audit-desktop, intake-desktop
  • run-review-mobile (390), system-map-mobile (390), oversight-mobile (390)

Test results

cd dashboard && npm run lint → ✔ No ESLint warnings or errors
cd dashboard && ./node_modules/.bin/tsc --noEmit → clean (exit 0)
cd dashboard && npm run build → success; 7 routes compile

Note: ESLint wasn't previously configured, so this adds eslint + eslint-config-next + .eslintrc.json to make npm run lint runnable (dashboard CI runs npm run build only).

Manual QA checklist

  • desktop 1440x1100
  • mobile 390x1000
  • no horizontal overflow
  • no clipped hashes
  • no clipped buttons
  • no unreadable trace rows
  • pending approval state renders
  • approved state renders
  • rejected state renders
  • verified happy path renders
  • verification failed trace renders (derived state + diff label + audit trail)

Reviewer

@d3v07 must review this PR before Layers 5-8 begin.

Frex22and others added 2 commits June 6, 2026 20:39
Turns the single-page dashboard into a multipage operator console (#91-94).
Consumes EvidencePack v1 JSON only — no schema changes, no new API endpoints, no
tool renames, no backend mutation. Agents read-only; mutation stays backend-only
after hash-bound approval.
Layer 1 — Operator console (multipage, left sidebar nav):
- Overview: fleet stat cards + run list (from GET /packs)
- Run Review: approval gate with exact "Approve this evidence hash" CTA, short
hash preview beside the CTA + full copyable hash, before/after explain-plan diff
labels (SORT present -> SORT removed / pending verification / verification
failed), Safety authority section, distinct pending/approved/verified/rejected/
verification-failed states
- System Map: hand-built CSS architecture map
- History & Compare: comparison table of past runs + outcomes
- Audit & Compliance: approvals, verification trail, trace, honest "No policy
events recorded" empty state
Layer 2 — Intake & API Gateway: four intake sources (labelled "planned intake
path" honestly), Run Intake Service, real FastAPI routes, exact read-only /run
wording, run-state-after-intake, downstream handoff.
Layer 3 — Control Plane (in System Map): six deterministic service cards, run
state machine (Intake -> ... -> Closed, current state highlighted from pack
fields), failure handling.
Layer 4 — Agent Oversight (in System Map): Main Orchestrator / Reviewer /
Security agent cards, oversight constraints + catches panels, read-only
downstream/sideways handoff, honest empty state.
Visual identity unchanged (JetBrains Mono + IBM Plex Sans, Phosphor, slate/amber/
green palette). QA: npm run lint clean, tsc --noEmit clean, npm run build green;
mobile 390x1000 verified (no horizontal overflow, CTA not clipped). Adds eslint +
eslint-config-next so `npm run lint` runs (CI runs build only). Screenshots in
demo/screenshots/layers/.
…_id], a11y + trace grouping
Review fixes on the Layers 1-4 operator console (#91#92#93#94):
- derive verification-failed from approved+after (matches controller apply_and_verify); never derive VERIFIED client-side
- force-dynamic on all live-data routes; restore /runs/[run_id], repoint list links (keep /run-review alias); sidebar active-state covers /runs
- anchor .gitignore runs/ -> /runs/ so the route ships (was ignored)
- group agent trace into Roles / Tool Calls / Controller / Human with the 3-roles/4-tools legend; failed verify visually distinct
- a11y: closed mobile drawer out of the a11y tree, aria-controls/expanded/current, Escape + focus management, named trace lists
- bind approval CTA to the submitted hash; full evidence hash readable; heading order (Run Review h1 / Approval Gate h2); honest gate copy
- system-map shows derivable run state in fallback (labeled, not live)
- local fixtures for all five operator states (fallback-only) + vitest tests for the safety-derived helpers
@d3v07
d3v07 merged commit 2fa12df into mainJun 7, 2026
4 checks passed
@d3v07
d3v07 deleted the feature/frex22-layers-1-4-operator-control branch June 7, 2026 16:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Frex22@d3v07