All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.4.1] - 2026-07-30
Fixed
- Fixed staged execution so the aggregate in-flight command count never
exceeds the largest stage
max_concurrency. In 0.4.0, each stage enforced its limit independently, so pipelined stages could exceed-j Nin aggregate and-j 1was not actually serial. - Fixed
parallelism.overridesso a task-specific value can lowerparallelism.max_concurrency. The workspace value is now a ceiling and the default for tasks without a task-specific limit; explicit CLI-jremains the highest-precedence pin.
[0.4.0] - 2026-07-30
Added
- Added
parallelism.max_concurrencyas a supported workspace configuration key that explicitly pins the effective concurrency of every workspace task. Effective concurrency now resolves as CLI-j/--max-concurrency, thenparallelism.max_concurrency, thenparallelism.overrides, thenround(base * multiplier), then1. - Added
Blitz.run_stages/2andBlitz.run_stages!/2: staged command execution without barriers between stages. Commands form per-id pipelines — a later-stage command starts once every same-id command in earlier stages succeeded — while each stage keeps its ownmax_concurrencybound. A failure blocks same-id downstream commands and stops new launches.
Changed
- Changed
Blitz.MixWorkspace.run!/3and the impact runners (Blitz.MixWorkspace.Impact.run!/4andrun_many!/3) to execute their planned stages throughBlitz.run_stages, so task families overlap per project instead of forming workspace-wide barriers. A project'stestcan start as soon as that project'scompilesucceeded while other projects are still compiling; result persistence, summaries, and failure semantics are unchanged. - Changed workspace configuration validation to reject unknown keys in
blitz_workspace,parallelism,isolation, and per-task configs with an error listing the supported keys. Previously a misspelled key (for exampleparallelism.max_concurency) was silently ignored and could degrade the workspace to concurrency 1.
Removed
- Removed
parallelism.env. Configuring it now raises with a migration message pointing at-j/--max-concurrencyorparallelism.max_concurrency.
Fixed
- Fixed the
Blitz.MixWorkspacemoduledoc to state the real concurrency resolution order; it previously claimed per-task overrides took precedence over the workspacemax_concurrencypin.
[0.3.0] - 2026-05-05
Added
- Added impact-aware
Blitz.MixWorkspace.Impactplanning and execution for task-state based workspace CI. - Added
.blitz/test_state_v1persistence with a compact exact task-state index for passed-result reuse. - Added deterministic project, dependency, command, environment, and workspace hashing for Mix workspace tasks.
- Added
mix blitz.workspace.impactfor dry-runs, forced runs, and base/head change planning. - Added
mix blitz.test_state.prunefor manual compact-store cleanup. - Added clean-commit pipeline manifests for fast
run_many!skips when an identical clean workspace CI pipeline has already passed. - Added clean-baseline ledgers for baseline-aware dirty workspace planning.
- Added machine-readable decision coverage sources for exact task-state, clean-baseline, impacted, forced, and missing-baseline outcomes.
- Added unlocked Git dependency safeguards so unpinned Git dependencies without lockfile entries do not receive reusable deterministic skip evidence.
- Added guides for impact CI, persisted test state, and downstream integration.
Changed
- Expanded HexDocs extras and package files to include the new guides.
- Changed default test-state retention from audit-style append streams to a
compact local cache. Append-only
results.ndjsonand per-commit streams are now opt-in withBLITZ_TEST_STATE_RETENTION=audit. - Changed
Blitz.MixWorkspace.Impact.run_many!/3to snapshot workspace state once for the whole task list instead of replanning each task independently. - Changed dirty-worktree planning to skip unimpacted project/task states when the current task state is covered by the latest clean baseline.
- Changed project dependency snapshots to include parsed
mix.lockentries where available while still treating local path dependencies as source fingerprints. - Changed
deps_gettask-state hashing to use dependency declaration state instead of dependency execution state, so local path dependency source edits do not force dependency fetches for reverse dependents. - Changed dry-run baseline skip text to distinguish clean-baseline coverage from exact dirty-state memoization, including the coverage source and baseline availability for each decision.
Fixed
- Ignored
.blitz/**in git dirty-state, changed-file, and repo-file discovery so the test-state store cannot make itself look like impacted source input. - Fixed
mix.lockchanges so lockfile output churn does not automatically selectdeps_get; dependency-sensitive tasks still rerun for the owning project and reverse local dependents. - Fixed source-change impact planning so
deps_getstays skipped unless a dependency declaration or projectmix.exschanges. - Fixed first dirty-run coverage for child README and source edits with root test splitting, including root projects that depend on child path packages.
- Fixed workspace invalidator handling so files such as
build_support/dependency_resolver.exsandbuild_support/workspace_contract.exsare fingerprinted into the workspace task state and cannot be hidden by previously covered exact task states.
[0.2.0] - 2026-04-07
Changed
- Enriched
Blitz.Resultwith boundedoutput_tail, explicitfailure_kind, and structured failure metadata used byBlitz.Error. - Reworked
Blitz.Errorto render actionable failure summaries with command, cwd, duration, reason, and a bounded output excerpt. - Changed timeout handling to return structured timeout failures instead of exiting the caller process.
Fixed
- Preserved the last output lines for failing commands so callers do not need a second repro to inspect the likely root cause.
- Reported worker crashes distinctly from normal non-zero command exits.
[0.1.0] - 2026-03-19
Added
- Initial release.