Release Fenris 0.5.0 with Chalktone dashboard and dotted activity plots
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
# 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](https://github.com/ntrospect0/glint) for
|
||||
Fenris's terminal dashboard. The selected visual reference is the third README
|
||||
screenshot, using Chalktone, at upstream commit
|
||||
`c1d73d3e8ead2f4069630b2a237306af8f6e69c8`:
|
||||
[reference screenshot](https://github.com/ntrospect0/glint/blob/c1d73d3e8ead2f4069630b2a237306af8f6e69c8/docs/screenshots/glint-demo3.png).
|
||||
|
||||
The source and architectural assessment is recorded in
|
||||
[the research note](../research/glint-dashboard-adoption.md).
|
||||
|
||||
## 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](../adr/0009-mit-license.md). 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](live-drive-activity.md).
|
||||
- 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 `z` to 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](fenris-redesign.md#7-panes-tui) and
|
||||
[dashboard clarity](dashboard-clarity.md): 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](../../assets/dashboard-chalktone.png)
|
||||
uses synthetic observations. No installation or release was performed.
|
||||
Reference in New Issue
Block a user