Release v2.15.0 — lambda delay and acceleration enrichment table generators - #92
Merged
Merged
Conversation
…tors (#3, #4) (#90) * feat(analysis): add table generators for lambda delay (#4) and accel enrichment (#3) Adds src/analysis/tables/: a sibling TableAnalyzer trait for generators whose output is a 2-D tuning table rather than one value per timestamp, with robust statistics (median/MAD, update instants, effective update interval), edge-list axes with lower-edge-inclusive binning and confidence tiers, channel roles with three-tier auto-suggestion, event primitives (sentinel masking, steadiness gates, sample-and-hold aware crossing interpolation, rate runs), an accumulator that folds several logs into one grid and re-bins per measure, and CSV/clipboard export. Lambda delay: injector pulse-width steps to the first wideband crossing of max(k*sigma, min_delta), gated on steady RPM/load, spacing, fuel cut, clutch, coolant and closed-loop movement; dead time primary, t63 secondary; strict/relaxed profiles; ms, engine cycles or ignition events on export. Accel enrichment: tip-ins from a native throttle-rate channel (scale detected) or a computed TPS/MAP derivative, AFR window shifted by a session lambda-delay cell or an assumed delay, signed excursion depth, duration and area against target or baseline, suggested starting correction clamped, "additional" kind when an ECU AE-activity role is mapped. Synthetic ground-truth tests cover 10-100 Hz logs, 10 Hz sensors inside 100 Hz logs, noise, AFR vs lambda input, every rejection reason, ragged logs, and lambda-delay to AE composition. LoadedFile gains a per-load nonce so accumulated events never key on a file index; the histogram's cell math now shares binning::uniform_bin. Claude-Session: https://claude.ai/code/session_01VFsMnFcGNJfTPz6QBiEEUN * feat(normalize): map injector on-time and throttle-rate channel names Injector 1 On Time, Injection Stage 1 Average Injection Time, Injection Effective/Actual PW, Fuel: Last inj pulse width, Base PW and INJ Duration(ms) now normalize to Pulse Width; TPS DOT, Throttle Position Derivative and TPS Delta to a new TPS Rate canonical, so the table generators' auto-suggestion resolves them outright. Claude-Session: https://claude.ai/code/session_01VFsMnFcGNJfTPz6QBiEEUN * test(analysis): table generator fixtures against MegaSquirt, Haltech, rusEFI logs Auto-suggestion regression on all three, driving-log rejection breakdown and low-rate warning on MegaSquirt, sentinel masking and the strict >= 90 % rejection on the Haltech blip log, tip-in detection checked against Haltech's Transient Throttle Load Derivative and rusEFI's Fuel: TPS AE Active, AE events binned and exported, lambda delay grid feeding AE, and a timing guard on the 88 MB Haltech log when present. Claude-Session: https://claude.ai/code/session_01VFsMnFcGNJfTPz6QBiEEUN * feat(ui): add table generator window with heatmap, inspector and export Tools panel gains a Table Generators section opening a window with setup (auto-suggested channel roles with ambiguity flags, editable axis edges, parameter grid, gating profile), a Viridis heatmap with value text and confidence-coloured count badges, hover tooltips, a per-cell event inspector with jump-to-time, add/remove log, reset, measure selector, CSV export and tab-separated clipboard copy. Strings under table_gen.* in all 15 locales. Claude-Session: https://claude.ai/code/session_01VFsMnFcGNJfTPz6QBiEEUN * docs: describe the table generators and record implementation notes Brings the 2026-07-16 design doc onto main with an implementation-notes section, adds the Table Generators contracts to CLAUDE.md and the feature to the README. Claude-Session: https://claude.ai/code/session_01VFsMnFcGNJfTPz6QBiEEUN --------- Co-authored-by: Claude <noreply@anthropic.com>
…vel tools - ActiveTool gains LambdaDelay and AccelEnrich, plus ALL (switcher, View menu and Cmd+1..5 order) and generator_kind() for the shared match sites - table_generator.rs splits the floating window into a Tool Properties setup panel and a central results view; state stays app-level so the multi-log accumulators survive tab and tool switches - set_active_tool() is the single tool-switch entry point (analytics, selection reset); Jump lands on Log Viewer at the event's time - tools panel section becomes two tool buttons with status lines
- table_export.rs: pure renderers over TableAccumulator sharing tables::export::cell_value with CSV, so all exports blank and convert identically; PDF carries values, counts and axis labels, PNG is cells and grid lines (no font rasterizer in the crate) - wired into Cmd+E, the File > Export submenu and the Tools panel - guards a missing measure list instead of panicking
- last_error is per generator so a failed Lambda Delay run no longer shows under Accel Enrichment - Jump reopens a closed tab via switch_to_file_tab instead of no-op - table PNG/PDF export checks for a table before the save dialog - IPC show_chart / show_scatter_plot go through set_active_tool - PDF axis edges reuse the CSV fmt_edge so both agree - tests: PNG row order pixel probe, exclude_low and unit-conversion paths, measure_index clamp, clear_selection
… site - Cargo.toml, README shield, JSON-LD softwareVersion, hero badge, and releaseNotes tag all move to 2.15.0 - What's New: Lambda Delay Tables and Accel Enrichment Tables cards lead the grid - SEO: meta description, keywords, JSON-LD description and featureList mention the table generators - Sitemap lastmod refreshed
feat(tables): promote lambda delay and accel enrichment to top-level tools, add PNG/PDF export, release 2.15.0
This was referenced Sep 19, 2026
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.
Release PR for v2.15.0: everything on
devsince 2.14.1. Merge #91 intodevfirst; this PR picks it up automatically.Summary
Tuning table generators (#3, #4 — via #90 and #91)
Two new top-level tools beside Log Viewer / Scatter Plots / Histogram (
Cmd+4/Cmd+5):src/analysis/tables/: sample-and-hold update-instant interpolation for CAN widebands, Haltech i32 sentinel masking, ragged-log refusal, per-load-nonce log identity, per-cell median + MAD + confidence tiers, multi-log accumulation with add/remove, axis cap of 64 bins.cell_valuepath so blanking and unit conversion agree.Pulse Width;TPS DOT/Throttle Position Derivative/TPS Delta→ newTPS Rate.Version + docs
Cargo.toml/Cargo.lock/ README shield → 2.15.0softwareVersion/releaseNotes/featureList, hero badge, meta description and keywords, sitemapNot in this release
MCP tools for the generators, on-disk per-ECU mapping presets, cross-correlation mode (all listed under Phase 3 on #4).
Test plan
src/analysis/tables/andsrc/ui/table_*including synthetic ground truth across 10–100 Hz logs and 10 Hz sensors inside 100 Hz logs; 11 fixture tests against rusEFI, Link, Haltech and MegaSquirt logs;ActiveToolshortcut-order contract.cargo fmt --check,cargo clippy --all-targets --all-features -D warnings,cargo test --all-features,cargo doc --no-depsclean.v2.15.0so the release workflow builds the binaries.