Repository navigation
UltraLog 3.0.0 — Night Drive redesign, log compare, new export sheet, six fixes - #105
Merged
Merged
Conversation
…heir first characters
…t the first loaded one
… -31M AFR minimums
…overlapping Run buttons
Brand book, component specs and reference renders, tokens (7 themes), the egui theme runtime reference, fonts, logos and the contrast checker.
Generate src/ui/theme/tokens.rs from design/tokens/tokens.json (cargo run --example gen_theme; a drift test fails when they disagree) and port the handoff runtime: intensity blending in OKLab, Color blind and High contrast composition, series/seq/div maps, and the egui Visuals mapping. sync_theme reinstalls the tokens whenever a theme setting changes, pins the dark theme slot, and the panel frames read tokens instead of fixed greys. CI checks every guaranteed contrast pair in every theme.
Settings → Display gains the Ultra intensity control (0-100, default 35, named stops Stealth / Night Drive / Neon / Ultra with a small detent and a "Night Drive · 35" readout) and a High contrast checkbox that locks the slider and says why. Color blind mode now also drives AAA text through the theme. Both new preferences persist; a 2.x settings file opens at Night Drive, not Stealth. Analytics: ultra_intensity_changed (at drag end) and high_contrast_toggled. Strings in all 15 locales.
Outfit (400/500/600), Saira (600, 700 italic, 800 italic) and JetBrains Mono (400/500) as static instances from google/fonts, one egui family per weight, built by scripts/fonts/build_static_fonts.sh. The type scale from tokens.json is installed as text styles with the visuals and follows the font scale preference. Hindi, Bengali, Arabic and Urdu now render: Noto Devanagari, Bengali and Arabic are bundled as fallbacks. Japanese and Chinese load a system CJK font at runtime, and a 3 KB subset keeps the language picker's own names legible in every locale. Tests lay out every locale name and the brand symbols.
Button variants (primary, secondary, ghost, danger, sm, icon) per the component spec; the side panels and analysis cards use them instead of hand-built frames, and export buttons are no longer coloured by file type. Phosphor regular follows each brand face in every font family, with a fill family for transport and the favourite star. The allowed custom painters (redline, glow, floor, focus ring) live in theme::paint; one keyboard focus ring is drawn for every control each frame.
Every tool window goes through components::window: Saira title, the sunset redline on its top edge, space-4 body padding, and Esc closes the topmost window. Notice and status badges carry an icon shape and a word for every status; toasts show the status icon.
The empty Files panel is the DropZone: dashed border, perspective floor that follows Ultra intensity, Saira italic title, one primary "Select a file" and the extensions in mono; it turns cyan while a file is dragged over the window. File cards carry the ECU badge. Settings uses the Night Drive checkbox and segmented font size, and Ultra intensity gets its sunset track. Properties uses the segmented plot mode.
Formulas are coloured by role as you type (channels cyan, numbers gold, functions violet, time shifts orange, operators muted) through a tested tokenizer, and the help window uses the same colouring. Validation reads as icon + word, the preview is mono, and the footer follows the window spec. Library templates carry the magenta ƒ, mono unit and formula, a gold star, a secondary Apply and an overflow menu.
Series take their colour and stroke from the theme: the Night Drive ten, or eight Okabe-Ito colours in Color blind mode and High contrast, repeating dashed then dotted past the palette. Colour slots are no longer capped at ten, so stacked mode never reuses slot 0. The old olive palettes are gone. Both chart views share plot_style: plot_bg canvas, grid from plot tokens, cursor in plot_cursor, bloom at Neon and above, the perspective floor at Ultra, and a custom legend (Cursor row first, mono values, hover to solo; top-left with direct end labels when color-blind safe). Plot-area headers use Phosphor carets and an icon button.
Cards carry the series swatch and a 2px series strip, the name in ink, mono min/max values with their unit, and caret jump buttons. List rows use the Night Drive checkbox, show the unit in mono and the series swatch once the channel is on the chart; group headers are overlines.
Histogram, scatter density and the Lambda Delay / Accel Enrichment tables replace jet and Viridis with the theme's sequential map (diverging around zero for signed table measures). Cell values are mono on the theme's value plate where it has one, empty and filtered cells are hatched, confidence is a badge fill style (filled, outlined, dashed) instead of red/amber/green, and the selected cell gets the cyan ring. Every map shows a ColorScale with its real range; tables add the badge legend. Shared painting lives in ui::heatmap, with a test that cell text reaches contrast on every stop.
The track map colours by the theme's Sequential or Diverging map (the Viridis / Turbo picker and LUTs are gone), draws a 3px trace over a 1px bg_void casing, and marks the current position with a plot_cursor dot in a bg_void ring. ColorSignature now carries theme_generation, so a Color blind or High contrast switch rebuilds the cached colours. Table exports use the Paper map until the export dialog lands.
…ine text for PNG One sheet layout drawn on a Canvas trait with two back ends: PNG through vello_cpu with skrifa glyph outlines, PDF through printpdf with the bundled TTFs embedded so text stays selectable. Redline, lockup, title, mono meta, chart or grids, legend or ColorScale, and the ultralog.co footer, on the Paper and Graphite export tokens.
…raphite remembered per format, Copy image Chart, scatter plots, histogram and tuning tables build sheet models and render through the ExportSheet on the export tokens; the old per-tool PNG and PDF renderers, the jet heat ramp and the built-in Helvetica text are gone. Menu, Tools panel and Cmd+E open the ExportDialog. The chart exports the visible range; the histogram applies the tool's ranges, filters and min-hits blanking. Copy image puts the chart or table alone on the clipboard for pasting.
Regenerated from design/logos/ultralog-app-icon-1024.png by scripts/brand/build_app_icons.sh. macOS keeps Apple's 824 px tile inside the 1024 canvas so the Dock icon matches other apps; Windows and Linux use the tile full-bleed, and windows.ico carries 16-256 px.
Opened from Help → About UltraLog. Shows the dark lockup, version, the AGPL-3.0 licence, links to the website, docs, source, issues and sponsors, and Check for Updates.
Image tints and export flattening move into the theme module, the IPC colour comes from series_style, and layout-only colours read the visuals. CI fails on any Color32/Rgb literal elsewhere, except TRANSPARENT and the PDF/PNG type conversion.
Table generator errors and warnings, update dialog results, computed channel errors, the analysis status and the Settings update notice now lead with the Status icon; the Unicode check mark becomes Phosphor.
Theme contract no longer says in progress; adds the CI colour gate and its exceptions, the theme_generation key for colour caches, chart painting in plot_style.rs, and the Night Drive and About features. The plan is marked implemented.
Replaces the Wong palette and single PNG/PDF export text with Color blind mode, High contrast, the Ultra intensity slider and the Export dialog, and adds screenshots of the chart in Night Drive, Ultra and Color blind mode, a Lambda Delay table and the Export dialog.
- Ultra slider: arrow keys step off a named stop (snap only on pointer input) and hold Left/Right while focused - Esc closes the topmost visible window; toasts sit above windows, take no input and repaint to disappear on time - Chart legend shows the rows that fit plus a +N row instead of vanishing - Heatmaps: plated value text in ink; rich/target/lean labels only for lambda-deviation measures (not PW step); table export uses the same diverging map and the cells' decimals on its scale - Performance: colour map LUT for scatter bins and the track map; no hatch on small cells, one empty fill for dense histograms - Export: legend wraps, system CJK fallback and ? for missing glyphs, histogram range matches the tool, constant channels at mid-height, edge points clipped along their segment, integer-indexed ticks that round before splitting minutes, round PDF joins, filtered lockup - Speeduino/rusEFI badge reads MLG; missing toast key; two comments
Headless egui tests: the focused Ultra slider steps with Left/Right and keeps focus, also on the frame right after it gains focus; Esc closes the newer window before the one it was opened from.
…s, valid Rust in the window example
…icMiniDIY/UltraLog into night-drive-3.0.0 # Conflicts: # docs/index.html # docs/sitemap.xml
… remap in every tab
…nge, A/B legend tags
…B list, tagged cards
…scale, A/B legend
…E.md, README guide
…l keeps plot areas in step
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.
UltraLog 3.0.0 — Night Drive redesign, log compare, new export sheet, six fixes
One major release that bundles six bug fixes and the Night Drive design system
(
design/, plandocs/plans/2026-10-23-night-drive-design-system.md).Fixes
show_scatter_plotwrites to the requested file's tab, not the active oneNight Drive design system
design/tokens/tokens.jsonintosrc/ui/theme/tokens.rs, with a drift test, OKLab blending and a CI contrast check across 7 themessrc/ui/theme/Log compare (closes #98)
remove_filenow remaps every tab, so a log B link survives closing another filedocs/plans/2026-10-25-log-compare.md(skeptical Opus review folded in)Export
Brand
scripts/brand/build_app_icons.sh)Docs and release
Cargo.toml,Cargo.lock, README badge)Review
Three Opus review passes (theme and app state, charts and data views, export). No high findings.
All medium, low-medium and low findings are fixed in
8d7d7e8. Log compare had its own plan review and code review (Opus): no high findings; 3 medium and 4 low fixed inbb6a2e4. Two nits stay open: the Ultragrid floor lags one frame while panning, and the scatter export uses 96 bins (screen: 512).
Testing
cargo fmt --check,cargo clippy --all-targets -D warnings,cargo test(1304 tests), contrast check, colour gatedesign/reference/in Stealth, Night Drive, Ultra, Color blind and High contrast: chart, Lambda Delay table, export dialog, About windowAfter merge
Tag
v3.0.0, add release notes to the GitHub release, push the prepared wiki commit (51f274b).