BenchBox 0.1.3
Added
- Driver version pinning —
--platform-option driver_version=X.Y.Zpins any platform's Python driver; pair withdriver_auto_install=trueto have BenchBox install it automatically viauv. Active driver version is shown in the run announcement line. - Bulk multi-shard table loading — new
load_table_bulk()interface onFileFormatHandleringests multi-shard tables in a single native call. DuckDB (CSV, Parquet) and ClickHouse Native are the first implementations; TPC-DS sharded runs are measurably faster. - Greyscale / no-color ASCII chart fallbacks — all seven ASCII chart types now use fill-pattern and glyph differentiation when color is unavailable (CI logs,
NO_COLOR, piped output). - Five new ASCII chart types — percentile ladder, stacked bar, sparkline table, CDF, rank table, and normalized speedup (log₂-scaled). All registered in the chart registry and accessible via CLI and MCP.
- Post-run summary charts — charts are automatically generated and displayed in the terminal after every benchmark run and included in MCP
run_benchmarkresponses. - Three new chart template bundles —
latency_deep_dive,regression_triage, andexecutive_summary. fabric-dwas a preferred CLI alias for thefabric_dwplatform.
Fixed
- Driver auto-install version switching — stale
sys.modulesand metadata caching could return the wrong driver version afterdriver_auto_installswapped versions; module cache is now invalidated on switch. - DataFrame cache path mismatch — DataFrame and SQL modes now share a flat directory layout, eliminating redundant data generation when switching modes on the same scale factor.
- ClickHouse zstd double-decompression —
ClickHouseNativeHandlerwas applying manual decompression on top of the driver's built-in decompression, corrupting data for compressed bulk loads. - Platform display names — corrected for Amazon Athena, Google Cloud Dataproc, Microsoft Azure platforms, and Databricks SQL.
- CLI warning when a platform option's default value is not in the declared choices list.
- Ranking normalization crash when all metric values are negative finite numbers.
- PySpark SIGINT handler hanging
pytest-xdistworkers. --validation-modeCLI prompt crash whenspec.defaultis not a string.
Changed
- Four platform drivers moved to optional extras — DuckDB (
benchbox[duckdb]), Polars (benchbox[polars]), ClickHouse Connect (benchbox[clickhouse-connect]), and psycopg2 (benchbox[postgresql]) are no longer hard dependencies. Usepip install benchbox[all]to restore the previous behaviour. - All user-facing terminal output in the run pipeline flows through
emit(), making--quietsuppression and output capture in tests consistent. BaseQueryCatalogMixinandTranslatableQueryMixinextracted from duplicate query-catalog implementations.
Full Changelog: https://github.com/joeharris76/BenchBox/blob/main/CHANGELOG.md#0130---2026-02-23