feat(dev): cockpit view core (roadmap-v0.6 E.1) — completes all of v0.6#89
Merged
Conversation
… all of v0.6 Adds crustcore_dev::views::cockpit: build_cockpit(backend) -> CockpitView composes the existing redacted, read-only event-log read-model into a bounded task/evidence/approval frame — TaskDetailView (from the run inspector), EvidenceSummaryView (references only — frame counts/seq range/ terminal; never raw CoT or secrets, invariant 2), and ApprovalFormView carrying the operation-bound op-hash so a resolution can only approve the exact operation shown (invariant 14; binding checked by the existing dispatch_resolution). Every list bounded (MAX_COCKPIT_TASKS/APPROVALS, invariant 11); the cockpit renders evidence but mints nothing (invariant 13), supervisor-only (invariant 5). Pure view core over MockDevBackend; the axum bind + /ws tick loop + HTML/JS assets remain the existing C7-serve-live seam. Completes Phase E and the entire roadmap-v0.6 buildable scope. 4 new tests; non-nano; zero nano impact. `cargo xtask verify` green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wires build_cockpit into the dev-UI serve layer: a read-only GET /cockpit
route (route_class table + handle_read render via format!("{:?}", ...), the
same pure mutation::route core the other views use) + the axum .route behind
the serve feature. CI-tested over MockDevBackend (renders a bounded frame;
a POST is rejected as not-the-one-mutating-route). Updated the route-table
red-team test (11 read + 1 mutating; the cockpit adds a GET, never a second
mutating route).
Now only the axum bind + /ws tick loop remain the existing C7-serve-live
seam. 2 new tests; crustcore-dev (non-nano); zero nano impact.
`cargo xtask verify` green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
Summary
Roadmap-v0.6 E.1 — a task/evidence/approval cockpit built entirely from the existing redacted, read-only event-log read-model. New module
crustcore_dev::views::cockpit:build_cockpit(backend) → CockpitView— composesrun_inspector()+pending_approvals()into a bounded frame (chain-health flag + task grid + approval forms).TaskDetailView— rolled up from the run inspector'sTaskRow.EvidenceSummaryView— references only (frame count, seq range, terminal kind) — never raw chain-of-thought or secret content.ApprovalFormView— carries the operation-bound op-hash; the resolution the form submits echoes it, and the existingdispatch_resolutionrejects a mismatch — so resolving approval A can never approve operation B.CI core vs live seam
build_cockpitoverMockDevBackendcomposes a bounded frame; the task grid is bounded (no unbounded page)./wstick loop, and the HTML/JS assets are the existingC7-serve-liveseam (live_ws_sse_emits_a_snapshot, runbook §F.3) — no new seam.Trust boundary
Every value comes from an already-redacted source (invariant 2); the cockpit renders evidence but mints nothing — it never approves, completes, or integrates (invariants 13, 5); approval forms are op-hash-bound (invariant 14); lists are bounded (invariant 11). The mutating path stays the existing gated
dispatch_resolution(the engine is the soleApproved<T>minter).Tests run
cargo xtask verify— green. Nano unchanged at 53.5% (crustcore-dev, non-nano). Independent offmain.🎉 With this, every roadmap-v0.6 task (Phases A–F) is built.
🤖 Generated with Claude Code