feat(dashboard): visual revamp to reference bar (adversarial-gated)#780
feat(dashboard): visual revamp to reference bar (adversarial-gated)#780rickylabs wants to merge 14 commits into
Conversation
Baseline references, design-language + rollout doctrine, Home spec, DS-uplift ledger, and per-pass reports (V2b Home, V3 investigation spine, V4 consoles). Prototype source + per-pass snapshots land as each visual pass completes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Sagas (V4b) — n8n node-canvas redesignThe rejected 3-column console template is replaced by a canvas-dominant node graph: a forward-path lane + a distinct compensation/rollback lane, wired by JS-measured bezier connectors (no SVG Adversarial gate — Kimi K2.6 (vision, native OpenCode), reading the shots against the n8n flow-builder + Kafka-console references: Gate-directed fix pass now in flight:
Source snapshot + refreshed screenshots land after the fix pass. Report: |
Sagas capability screen rebuilt as a canvas-dominant n8n-style node graph (forward + compensation lanes, JS-measured bezier connectors, click-to-open tabbed inspector, mobile bottom sheet, fully data-driven), then density-fixed and every section made bespoke: - canvas coverage 29%→47%: definition mini-map, per-lane compensation-health stat strips, E_TIMEOUT edge badges, step-execution rail, ghost-node outlines - 4 plain metric cards → saga-health band (comp-rate donut, in-flight/terminal split, instances-by-state channel bar, forward/rollback edge ratio) - airy step list → dense sortable step-history table; transitions → typed transition stream (advance→ / compensate↩ / terminal◼), grouped by instance Adversarial vision gate (Kimi K2.6, native OpenCode) across the n8n + dev-console + pm-dashboard references: ACCEPT-WITH-FIXES, bespoke 82/100, canvas density now passing. Residual chrome-polish prescriptions logged for the final sweep. NS One identity only; routes/data/copy unchanged; no SVG holes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Sagas — accepted at bespoke 82/100 (committed
|
…5→62) Triggers capability screen rebuilt with its own composition (distinct from the Sagas node-canvas and Workers registry): - tinted category-health band (Schedule/Webhook/Event/Manual) with per-type sparkbars, armed/silenced pills, click-to-filter - WHEN→DO rule builder (event → condition chip → action) + action-type palette - schedule day-strip (7-day next-fire horizon) + temporal next-fire cards with progress-to-fire bars - dense sortable firing-history table with a wired query toolbar (quick-search, outcome filter, show-limit) and per-row 24h sparklines + inline arm switches - iconified metric strip (shield/flame/alert + micro-sparkline + trend) - dead-letters as a compact mini-table (error snippet, age, retry-count, retry/ inspect) + depth summary - tabbed detail drawer (action-chain / payload / schedule) → mobile bottom sheet Adversarial vision gate (Kimi K2.6, native OpenCode) across n8n / dev-console / pm-dashboard refs: first pass 55 → focused fix pass resolved all five concrete defects → 62, ACCEPT-WITH-FIXES. Residual gate asks (node-graph builder, code- editor test box, segmented row bars) are subjective/gold-plating and are logged for the final polish sweep. NS One tokens only; routes/data/copy unchanged; no SVG holes; 16-route regression clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Triggers — accepted (committed
|
… 72) Streams rebuilt as a topic console — every section stream-native and distinct from all neighbours: - streams-health composite header (throughput sparkline / consumer lag + back- pressure / partition pips / retention) — not plain number cards - live throughput hero: JS-measured teal area chart + hover crosshair + floating value readout + peak/avg/floor footer + backpressure pill - producer → partitioned-log → consumer topology fan-bus (per-group lag) - partition & offset ledger with inline lag heat-bars - partition × time lag heatmap - consumer-group radial lag gauges (Consumers tab) - live event tail (monospace records) + fan-out delivery drawer (per-consumer attempt/outcome) → mobile bottom sheet - Config tab: KV + line-numbered Avro schema Adversarial vision gate (Kimi K2.6, native OpenCode) vs Kafka-console + finance refs: 72/100 ACCEPT-WITH-FIXES; strong bespoke bones confirmed. Residual polish (throughput time-range pills, live-tail filter bar, denser message panel) logged to visual/_evals/POLISH-SWEEP.md for the final sweep. NS One tokens only; routes/ data/copy unchanged; no SVG holes; 16-route regression clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Streams — accepted at gate 72/100 (committed
|
…xed (gate 68) Config Resolution rebuilt around a novel, signature precedence-waterfall metaphor (distinct from the four consoles): - precedence waterfall: framework → package → env·profile → runtime override on a numbered rail; the winning layer is elevated with the hard press-shadow, shadowed values are struck through with source:line provenance, and non- contributing (not-set / passes-through) layers collapse to slim pips so partial-resolution states carry no dead space (silent-layer space −49%) - effective-config table with namespace filters + winning-layer chips; effective values in DM Mono with type-color (numbers amber / strings teal / booleans copper) - KPI header with supporting micro-viz (namespace ticks, override pips, a shadowed/total meter, precedence diamonds) - framed side-by-side override diff (context lines + pink/green gutter, DM Mono), shown only when a runtime override wins - resolution trail + detail drawer → mobile bottom sheet; fully data-driven per key Adversarial vision gate (Kimi K2.6, native OpenCode) vs code-diff / console / flow refs: 68/100 → focused density fix resolved the concrete hits (collapse not-set layers, denser KPIs, framed diff, mono type-color). Deferred asks (node- graph rail, inline override editor) logged to POLISH-SWEEP.md. NS One tokens only; routes/data/copy unchanged; no SVG holes; 16-route regression clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Config Resolution — accepted (committed
|
…-fixed (gate 62) Migrations rebuilt around a bespoke migration version-chain timeline (distinct from the Config waterfall and the capability consoles): - version-chain timeline: applied spine (v1→v2→v3) → a slim LIVE DB · HEAD drift divider → a dashed-copper pending queue; each node carries an inline metadata row (objects-changed · rows-affected · duration + applied-at) so it earns its height with data, not padding - schema-drift half-ring arc-gauge (n drifted / m-of-k objects in sync) + per- object drift deltas (has → wants, struck-through) - header composite with supporting micro-viz (applied ratio bar, pending/drift pips, relative-time hint) — not plain number cards - "1 migration pending" apply card with a what-will-change preview + CLI - dense migration ledger table; per-migration detail drawer with the DDL diff correctly DEMOTED to a secondary tab → mobile bottom sheet Adversarial vision gate (Kimi K2.6, native OpenCode) vs timeline / console / diff refs: 62/100 → focused density fix (compact nodes w/ metadata, denser header, slim divider). Gold-plating asks (ledger inline-diff, docs-tabs, DDL editor chrome, invented author/step data) declined → POLISH-SWEEP.md. Also front-loaded density defaults into ROLLOUT-DOCTRINE for future first passes. NS One tokens only; routes/data/copy unchanged; no SVG holes; 16-route clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Migrations — accepted (committed
|
…(gate 62, accepted on verified density) DLQ rebuilt as an operational triage console — distinct from every prior screen: - error-signature CLUSTER list (the signature): failures grouped by error mode (E_CONN ×3, E_TIMEOUT ×2 …) with source chips, a death sparkbar, age range, and per-cluster Retry-all / Purge + click-to-filter — not a flat list - triage strip: composite tiles with a by-queue split micro-bar, retry-exhausted pips, and a red arrival sparkbar (no plain number cards) - queue-health fill-meters (redis ELEVATED / postgres LOW / kv CLEAR) with depth- vs-capacity + trend sparkbar + oldest age (horizontal meters kept deliberately distinct from Migrations' arc gauge) - dense failed-message table with retry pips + severity rails + bulk-select sticky bar; message inspector (payload JSON + retry-history timeline + gated reprocess/ purge) → mobile bottom sheet - data-driven: populated, all-clear, and filtered-empty states all render Adversarial vision gate: 62/100. Accepted on verified density (9/10) — the gate's major asks were already present (micro-viz, cluster severity borders), functionally wrong (remove bulk-select checkboxes), or variety-declined (arc gauges). Two trivial residuals (frame payload JSON, connect retry timeline) logged to POLISH-SWEEP.md. NS One tokens only; routes/data/copy unchanged; no SVG holes; 16-route clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Dead-Letter Queues — accepted on verified density (committed
|
…ted on verified quality) Catalog rebuilt as a contract-registry explorer — distinct from every monitoring screen (browse → drill into a contract, not a console): - header composite: by-kind distribution channel-bar (click-to-filter) + describe() coverage ratio meter + REST/RPC/SDK transport-reach tri-meter (no plain cards) - filter toolbar: search + kind/method/coverage chips + reset; live-filters the rail, hides empty groups, has a no-results state - grouped registry rail: kind-grouped, method-tinted selectable contract cards (method chip + mono proc + input→output preview + duality tri-pip + coverage dot) + per-group coverage micro-bar + gated "install crons" affordance - contract detail: version + compat chip, method/transport strip, a line-numbered TYPE-COLORED signature + secondary schema, and a producers→consumers strip - mobile bottom sheet with the full signature/schema/relationships Adversarial vision gate: 62/100. Accepted on verified quality (9/10). The gate over-reached with OFF-DOCTRINE asks — raw-hex green buttons, a centered modal to replace the intentional mobile bottom sheet, converting the bespoke registry rail into a generic table (would echo the consoles), and a schema diff (Config owns that pattern) — all declined and logged to POLISH-SWEEP.md; one valid residual (tighten the stat strip) kept. NS One tokens only; routes/data/copy unchanged; no SVG holes; 16-route regression clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Catalog — accepted on verified quality (committed
|
…ccepted on verified quality) Auth Sessions rebuilt as a session-security console — a live TTL/expiry idiom that appears on no other screen: - header composite: status-distribution channel bar (active/expiring/idle/revoked · click-to-filter) + elevated-scope meter + MFA-coverage meter + an expiry- horizon strip (sessions sorted soonest-to-expire w/ TTL bars) + a pulsing server-clock chip + gated Revoke-all - identity-forward roster cards: avatar + device glyph + provider + geo + MFA + a live TTL countdown bar (hatched when expiring) + scope chips + status + revoke - session detail: a lifespan visualization (issued → TTL → expires, elapsed-hatch vs remaining-fill + now-marker), a KV grid, granted scopes, a lifecycle timeline, gated revoke → mobile bottom sheet - data-driven: active/expiring/idle/revoked + filtered-empty states all render Adversarial vision gate: 64/100. Accepted on verified quality (9/10). The gate over-reached (convert the identity-forward cards into a generic table — would echo the consoles; off-domain provider brand icons; call the micro-viz header "fat cards"). One valid residual — the peripheral Auth event stream is sparse — deferred with two minor items to POLISH-SWEEP.md. On-palette (no off-doctrine green), mobile bottom sheet. NS One tokens only; routes/data/copy unchanged; no SVG holes; 16-route clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Auth Sessions — accepted on verified quality (committed
|
…fixed (gate 58) Extensions rebuilt as a contribution-manifest console (not an app-store grid) — each extension is a provider that mounts contributions into named host surfaces: - header composite: contributions-by-surface channel bar (click-to-filter) + enabled-coverage meter + a compatibility alert (held/quarantined update) - Providers view: provider roster with a per-provider surface-typed contribution micro-bar (copper=panel / teal=command / amber=tool) + surface pips + status, and a sticky manifest (source/version/tier/contract + surface-grouped contributions + "plugs into" mount chips + gated toggle) - Surfaces view: the cross-cut — Panels / Commands / AI-tools lanes, each with a share-meter + mount-summary header and a provider-provenance footer - Available view: install/quarantine cards with a contract-compatibility meter (built-for fill + host "now" marker) - mobile bottom sheet with the full manifest Adversarial vision gate: 58/100 → focused density fix (kept the manifest idiom, declined convert-to-table / avatars / timeline). Provider cards 88→59px, micro-bar 8→4px, CONTRIBUTES rows 64→44px, and the Surfaces-view lower-right whitespace 372→~5px via a 2-column independent-height lane split with lane meters + footers. NS One tokens only; routes/data/copy unchanged; no SVG holes; 16-route clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
Extensions — accepted (committed
|
…T-5.6-sol)
First feature of the design-quality refinement pass. GPT-5.6-sol·medium, grounded
in the repo design skill (+ impeccable anti-slop hygiene), the slop checklist, and
the REAL @netscript/fresh-ui component grammar (card.css/badge.css/etc.):
- colored + rounded card borders → flat Card grammar (--ns-card + --ns-shadow-xs,
zero outer border/radius, hairline --ns-border internal rules)
- decorative glyphs / colored side-rails removed; metadata recast as 4px DM Mono
UPPERCASE tags (not rounded pills)
- 3+ competing accents → ONE chromatic signature (the contributions-by-surface bar);
everything else neutral ink-on-cream (passes the Squint Test)
- one hard-offset 3px 3px 0 press-shadow, on the single Install action (verified)
- marketing copy → factual dev-side ("Installed add-ons and the host surfaces they extend")
All 12 slop-checklist items PASS with computed-style verification (border-radius:0,
one press-shadow, DM Mono tags); 16-route regression clean. (Also carries the prior
Runtime V13 override-store redesign, which is next in line for the same refinement.)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HTiQfrNFCVhjQFqbLKm5xo
…98 (Codex 5.6 high + Kimi loop); bars→ns-data-table records, text facts, one signature
…nt rethink, Kimi-validated (Codex 5.6 high batch, partial)
Catalog, Config Resolution, Dead-Letter Queues, Triggers, Streams, Sagas, Auth Sessions, Home, Live Flow, Run Inspector — component rethink grounded in @netscript/fresh-ui + the design skill (anti-slop + not-lifeless calibration), straight-through (no adversarial loop). Source only; local-render vendoring kept out of the PR.
Dashboard visual revamp — to the reference bar, adversarially gated
Raises the NetScript Dev Dashboard prototype to a premium operator-console quality bar (studied
against real product references), in NS One identity (warm-cream/dark, hard press shadow,
copper/teal/amber,
--ns-*tokens,ns-*markup that round-trips to Fresh). Visual + layout only —no routes/logic/data/copy changes.
What's here (this commit)
DESIGN-LANGUAGE.md,ROLLOUT-DOCTRINE.md,HOME-SPEC.md— the bar andthe per-screen doctrine (each screen bespoke; mine a different reference each pass; no two screens
alike).
DS-UPLIFT-BACKLOG.md— every new component/token/variant/option/mobile pattern the redesignneeds, accumulated per pass. Drives a NS One design-system uplift after the prototype is signed
off, before building the real product.
render/_visual-reports/*.md): V2b Home, V3 investigation spine, V4 consoles.each pass for distinctness + variety-leverage before acceptance (
visual/_evals/).Cadence
The evolving prototype source (
render/prototype.dc.html+assets/*.css) and each new pass's reportare committed here as each visual pass completes (never mid-edit), with a PR comment per slice +
before/after screenshots. Passes so far: Home, spine, Workers (excellent), Sagas (being re-done as an
n8n-style node canvas). Rollout continues: control plane, AI, extensions, final polish.
The prototype is a Claude Design working record; it round-trips to
@netscript/fresh-uisource later.