- Persisted min/max/mean/stddev in a new sample_statistics SQLite table; added StatsCommand and made InstantCommand/StatsCommand use per-metric latest timestamp.
- Fixed lost activity metrics on short runs: ActivityExecutor now triggers a bypass-bucket snapshot before op dispensers detach; SQLite reporter is silent under post-close ticks.
- New stress-report bundled app + dummy_session.yaml workload with two new diag op-tasks (cycledelay, errormodulo); c-stress-shaped per-op output, A/B equivalence mode, comparability warning at the top.
- removed NBCLI's foundational-label re-injection.
Added 9 new benchmark classes in nb-engine-core/.../sysperf/engineflow/ for measuring engine flow performance
(stride context, op flow, space mapping, motor operations, etc.)
JMH documentation: Added devdocs/devguide/jmh_engineflow.md
Testing tags:
POM updates: Added test profiles
CONVENTIONS.md updates around test tags
Test annotations: Added 2-3 lines to ~280 test files
Split tests classes to allow one tag set per class (no mixed methods)
- Fix SQL syntax error in SelectorTransformer: Move LEFT JOINs before WHERE clause
- Support nested {{...}} expressions in TEMPLATE() defaults
- Fix CMD_await to correctly use activity= parameter instead of alias
- Add available activities list to missing activity error messages
- Add getUnit() method to NBMetric interface
- Update all NBMetric implementations (Counter, Timer, Histogram, Meter, Gauge variants) with unit field
- Update MetricsView to use metric.getUnit() instead of extracting from labels
- Fix InstantCommand SQL join order bug (use joinAllLabelsWithSampleName())
- Update NBCreators with default units (nanoseconds, operations, empty)
- Fix test compilation errors in nb-api, nb-mql-api, and nb-engine-core (12 test files)
- Regenerate all test databases with updated metric constructors
- Move grammar files from src/main/antlr4 to src/main/java/.../grammars following conventions in adapter-cqld4 and
virtdata-lang modules
- Update ANTLR generated output to src/main/java/.../generated with explicit package configuration (-package
argument)
- Add imports for generated MetricsQLLexer/Parser classes in 11 parser and test files; all 285 tests passing
- Replace FEATURE_TRADEOFF_ANALYSIS.md with user-focused METRICSQL_DIFFERENCES.md guide (~40% shorter, removes
internal decision-making)
- Add session metadata (nb.version, nb.commandline, nb.hardware) to all 5 test database generators
- Update TEST_DATABASES.md with metadata documentation and correct regeneration instructions from project root
- Add LabelSetTree (canonical layer): Algebraic tree maintaining strict label set containment relationships with support for merging trees
- Add DisplayTree (display layer): Derived tree with three-pass reduction algorithm:
- Differential label rendering (show only labels differing from parent)
- Sibling condensation (merge siblings differing by single label with comma-separated values)
- Identical label set consolidation (combine nodes with same labels)
- Update MetricsCommand: Use canonical→display tree pipeline for --group-by labelset output
- Fix SummaryCommand: Build single shared canonical tree for all metrics instead of per-metric trees, enabling proper consolidation of metrics with identical label sets
- Add LabelSetTreeTest: 10 tests verifying containment relationships, merging, and rendering
- Result: Metrics with identical label sets now properly consolidated under single parent node (e.g., 20+ separate session=oDChioC entries → 1 node with 20+ child metrics)
- BundledApp integration (@Service selector="mql") accessible via nb5 CLI
- 6 output formats (table, csv, tsv, json, jsonl, markdown) with enum-based architecture
- 107 passing tests with self-validating documentation and 5 test databases
- Add sqlite-jdbc to dependency management and nb-mql-api to nb-engine-all
- Add shutdown hook to update symlink mtimes on session end