8.4 KiB
Glint-inspired Fenris dashboard
Status: accepted on 2026-09-19. The user confirmed the complete design and additionally requested Glint-style plotted graphs in place of block bars.
Purpose and reference
Adopt the visual approach of Glint for
Fenris's terminal dashboard. The selected visual reference is the third README
screenshot, using Chalktone, at upstream commit
c1d73d3e8ead2f4069630b2a237306af8f6e69c8:
reference screenshot.
The source and architectural assessment is recorded in the research note.
Confirmed user choices
- Adopt panel styling, keyboard focus, and panel zoom. A freely configurable dashboard builder is outside the selected scope.
- Give the live read/write activity chart the largest opening-screen area, with endurance outlook and monitoring state visible alongside it.
- Use the muted Chalktone appearance from Glint's third screenshot as the visual direction.
- Put Live / Day / History views inside one activity panel, keeping both read/write totals and the selected date visible.
- Expand a focused panel within the dashboard while retaining a fixed strip for monitoring state, observation freshness, and essential controls.
- Replace block bars with thin dotted time-series plots resembling Glint's chart. Label volume and time axes, retain exact selected-point readouts, and leave explicit breaks for missing or incompatible evidence. Joining adjacent measured points is visual guidance, not additional observations.
Implementation recommendation
Implement the selected visual and interaction patterns independently in Fenris's existing Python/Textual presentation layer. Retain the collector, observation store, shared status/projection contracts, and authenticated control path. Glint is a Rust/Ratatui application under GPL-3.0-or-later; copying or porting its implementation into Fenris would require a separate licensing decision under ADR 0009. Referencing general panel and navigation patterns does not require adopting its application architecture.
Use thin borders, compact titles, an explicit focused-panel indicator, and restrained cream/earth-tone accents. Preserve readable contrast and semantic state labels; the reference's dim secondary text is not a readability target. Use Fenris content and identity, without Glint's unrelated clock, weather, finance, email, or gallery features.
Existing behavior to preserve
- Activity is measured read/write volume, with both totals accessible and writes selected initially. A visual stock-chart reference must not turn interval volume into speed or imply continuity through unknown evidence.
- Preserve the latest-three-hour opening view, date selection, local-day and timezone labels, available history precision, and historical selection across refresh under live drive activity.
- Preserve the usage-adjusted theoretical lifespan and categorical projection confidence with contributing facts. Navigation and graph selection cannot change the projection evidence window or endurance accounting.
- Preserve explicit zero, gap, incomplete, unallocated, unavailable, paused, stale, collection-failure, and store-fault states.
- Keep boot enablement, runtime activity, collection outcome, and observation freshness distinct. Quit leaves background monitoring running; pause remains a deliberate disable through the existing control path.
- Preserve keyboard and mouse access, constrained-terminal text/reflow, high-contrast availability, reduced motion, help, and disclosures.
Concrete layout and interaction proposal
- A compact identity header above one dashboard workspace.
- A narrow supporting column for the endurance outlook and drive facts; a wide activity panel receives the remaining workspace. On the normal dashboard, confidence and monitoring state remain visible beside activity.
- Live starts with the latest three hours; Day exposes the selected local day's available detail; History exposes the retained longer-term evidence. Reuse existing measurements and ranges rather than introducing a new data model. Show selected date/timezone, read/write totals, measurement, and evidence state wherever applicable.
- Use visible, clickable tabs; Tab/Shift+Tab and mouse clicks move focus.
Use
zto toggle focused-panel zoom and Escape to restore the dashboard when an input/dialog is not consuming Escape. Preserve selection, date, range, measurement, and focus across zoom and refresh. - Keep the bottom status/control area outside the expanding workspace. It may wrap when required: compactness cannot merge the four service facts or hide a fault/pause state. Keep quit distinct from pause in wording and behavior without spending three full rows on a separate heavy quit box.
- Use existing date-navigation and read/write shortcuts, with visible help updated for tabs, focus, and zoom. Text entry must consume its own keys.
- Use Chalktone-inspired styling as the new default while retaining existing selectable themes, High Contrast, and reduced motion. Preserve an explicitly saved theme preference during upgrade.
- Design for 80×24 and larger, with existing text/reflow behavior below that size. Essential facts and actions must remain accessible; the large-screen reference does not require squeezing its entire density into small terminals.
These defaults implement the confirmed choices. Date entry and inspection retain existing evidence precision: hourly/daily UTC evidence is labelled UTC, while local-day totals keep their recorded timezone. This visual redesign does not manufacture finer or local-hour precision from coarse UTC evidence.
Smallest sufficient implementation proof
Render normal and zoomed views at a representative large terminal and 80×24, plus a constrained terminal. Check focus/tab/zoom/date/read-write interactions and selection persistence through refresh. Exercise paused, stale, store-fault, missing-baseline, and incomplete-evidence displays using existing synthetic stores and headless TUI patterns. Verify quit never invokes monitoring control and existing action tests still cover the sanctioned helper. UI fixtures are not evidence of the user's deployed drive state.
Specification reconciliation
This accepted redesign supersedes conflicting presentation requirements in the original Panes specification and dashboard clarity: the full-width headline becomes a supporting endurance panel, the history/live plots share a tabbed activity panel, and a compact fixed control row replaces the heavy standalone quit rail. The block-bar requirement is superseded by dotted volume plots. Their behavioral requirements, including clear quit-versus-pause semantics, remain.
The live-drive-activity specification excludes unrelated redesign from that earlier task. This is a separate design request, not permission to undo its accepted data, date-navigation, evidence, or forecast behavior. Existing design documents and source may differ in implementation status; this assessment is not proof that every earlier acceptance criterion has shipped.
Documentation scope
No new domain term has been resolved: panel, focus, zoom, and theme are general interface concepts and do not belong in the domain glossary. No new ADR is needed for a reversible presentation change that retains the existing stack, license, data model, and privilege boundary. Record any later durable architectural trade-off separately if one emerges.
Implementation validation
Implemented in Fenris's existing presentation layer with Textual 8.2.8. The full suite passed 801 tests; 43 packaging/signing checks were skipped for missing package artifacts or signing tools. After the final incomplete-evidence fixes, all 81 focused dashboard, history, and plot tests passed. New renderer and regression files pass configured Ruff checks; affected production files pass correctness lint and the diff passes whitespace checks. Existing broader lint warnings were not part of this redesign.
Rendered normal and zoomed dashboards at 140×44, plus normal 80×24 and constrained 70×20 views. The saved preview uses synthetic observations. No installation or release was performed.