Releases: ut-issl/capsula
v0.11.5
Note
v0.11.4 has been skipped. The crates.io publish workflow for v0.11.4 failed partway through, leaving only capsula-api-types published at that version. To ensure all crates are published consistently, the version was bumped to v0.11.5. There are no changes between v0.11.4 and v0.11.5.
New Features
Add tag_head option to the capture-git-repo hook
A new tag_head config option (default false) creates a lightweight Git tag capsula/<run-name> at the HEAD commit when a run is captured. This prevents Git from garbage-collecting the commit after branch deletion or history rewriting (rebase, squash merge, etc.). The created tag name is included in the hook's JSON output as a tag field.
Closes #832.
by @shunichironomura in #852
Documentation
Add missing subcommands to CLI reference
Documents several previously undocumented CLI subcommands (run-start, run-end, show, push, tui, vaults list) and the --vault-path global option in the CLI reference.
by @shunichironomura in #855
Internal Changes
- Add cooldown period to Renovate config (by @shunichironomura in #850)
- Pin dependencies (by @renovate[bot] in #851)
- Add trusted publishing workflow for crates.io (by @shunichironomura in #854)
- Pin GitHub Action versions (by @shunichironomura in #856)
- Update rust-lang/crates-io-auth-action action to v1.0.4 (by @renovate[bot] in #857)
- Bump version to v0.11.4 (by @shunichironomura in #858)
- Bump version to v0.11.5 (by @shunichironomura in #859)
Full Changelog: v0.11.3...v0.11.5
v0.11.3
New Features
Add capsula show <run-name> command
A new subcommand to display detailed information about a specific run, including metadata, command result, and hook summaries. Supports a --json flag for machine-readable output.
capsula show happy-river
capsula show happy-river --jsonby @shunichironomura in #846
Add terminal UI (capsula tui)
A new capsula tui subcommand launches a mouse-clickable terminal interface (built with ratatui) for starting and ending runs. Designed for users who may not be comfortable with the command line.
- Start/end runs with visual feedback and an elapsed timer
- "Instant run" checkbox to execute both pre-run and post-run hooks in one go
- Mouse-clickable buttons and keyboard shortcuts (q, Tab, Enter/Space)
- Status indicators during hook execution and a success message on completion
- Quit confirmation dialog when a run is active
As part of this change, shared config/dotenv/vault-path loading logic was extracted into capsula_orchestration::setup, removing duplicated code from the CLI.
by @shunichironomura in #847
Bug Fixes
Fix capture-command hook to run in project root directory
The capture-command hook now correctly executes commands in the project root directory instead of the current working directory.
by @shunichironomura in #840
Internal Changes
- Update Rust crate toml to v1.1.2 (by @renovate[bot] in #834, #843, #845)
- Update Rust crate askama to v0.15.6 (by @renovate[bot] in #835)
- Update Rust crate sha2 to 0.11 (by @renovate[bot] in #836)
- Update actions/deploy-pages action to v5 (by @renovate[bot] in #837)
- Update actions/configure-pages action to v6 (by @renovate[bot] in #841)
- Update codecov/codecov-action action to v6 (by @renovate[bot] in #839)
- Update crate-ci/typos action to v1.45.0 (by @renovate[bot] in #844)
- Lock file maintenance (by @renovate[bot] in #833, #842)
- Bump version to v0.11.3 (by @shunichironomura in #848)
Full Changelog: v0.11.2...v0.11.3
v0.11.2
New Features
Add run-start and run-end subcommands for manual run lifecycle
Two new subcommands support a manual run lifecycle where pre-run and post-run hooks are invoked separately, without a command execution in between. This is useful when the actual analysis runs independently (e.g., triggered by a GUI) and is not managed by Capsula.
capsula run-start: Creates a new run directory, executes pre-run hooks, and prints the auto-generated run name to stdout.capsula run-end <run-name>: Finds an existing run directory by name, executes post-run hooks, and writespost-run.json. Guards against double-finalization.
Example usage:
# Before analysis
name=$(capsula run-start 2>/dev/null)
# ... external analysis runs independently ...
# After analysis
capsula run-end "$name"by @shunichironomura in #819
Extract CLI logic into capsula-orchestration crate
Reusable orchestration logic has been extracted from capsula-cli into a new capsula-orchestration crate, making the CLI a thin shell. This enables future reuse from other contexts such as a PyO3 Python wrapper.
by @shunichironomura in #830
Security
- Update
aws-lc-rsandaws-lc-systo address CVE-2026-4428 (by @shunichironomura in #829) - Bump
rustls-webpkifrom 0.103.9 to 0.103.10 (by @dependabot in #827)
Internal Changes
- Update Rust crate tracing-subscriber to v0.3.23 (by @renovate[bot] in #822)
- Update Rust crate toml to v1.0.7 (by @renovate[bot] in #824)
- Update Rust crate askama_web to v0.15.2 (by @renovate[bot] in #825)
- Update Rust crate askama to v0.15.5 (by @renovate[bot] in #828)
- Lock file maintenance (by @renovate[bot] in #823)
- Bump version to v0.11.2 (by @shunichironomura in #831)
Full Changelog: v0.11.1...v0.11.2
v0.11.1
Bug Fixes
Fix the command to install from Git
Fixed the install command documented for installing Capsula directly from the Git repository.
by @shunichironomura in #792
Security
- Update dependencies in lockfile to resolve a security issue in
aws-lc-syscrate (by @shunichironomura in #810) - Bump
quinn-protofrom 0.11.13 to 0.11.14 (by @dependabot in #816)
Internal Changes
- Update Rust crate clap to v4.6.0 (by @renovate[bot] in #820)
- Update Rust crate clap to v4.5.60 (by @renovate[bot] in #799)
- Update Rust crate clap to v4.5.59 (by @renovate[bot] in #797)
- Update Rust crate toml to v1.0.6 (by @renovate[bot] in #811)
- Update Rust crate toml to v1.0.4 (by @renovate[bot] in #809)
- Update Rust crate toml to v1.0.3 (by @renovate[bot] in #798)
- Update Rust crate toml to v1.0.2 (by @renovate[bot] in #796)
- Update Rust crate tokio to v1.50.0 (by @renovate[bot] in #808)
- Update Rust crate anyhow to v1.0.102 (by @renovate[bot] in #800)
- Update Rust crate chrono to v0.4.44 (by @renovate[bot] in #803)
- Update Rust crate sysinfo to v0.38.4 (by @renovate[bot] in #815)
- Update Rust crate sysinfo to v0.38.3 (by @renovate[bot] in #807)
- Update Rust crate tempfile to v3.27.0 (by @renovate[bot] in #818)
- Update Rust crate tempfile to v3.26.0 (by @renovate[bot] in #804)
- Update Rust crate assert_cmd to v2.2.0 (by @renovate[bot] in #817)
- Update Rust crate testcontainers-modules to 0.15 (by @renovate[bot] in #801)
- Update crate-ci/typos action to v1.44.0 (by @renovate[bot] in #805)
- Update crate-ci/typos action to v1.43.5 (by @renovate[bot] in #795)
- Lock file maintenance (by @renovate[bot] in #794, #802, #806, #812)
- Bump version to v0.11.1 (by @shunichironomura in #821)
Full Changelog: v0.11.0...v0.11.1
v0.11.0
Breaking Changes
CLI crate renamed from capsula-cli to capsula
The CLI crate has been renamed from capsula-cli to capsula. This affects users who depend on the crate by name (e.g., cargo install capsula-cli). The install command is now:
cargo install capsulaThe capsula-cli workspace dependency entry in the root Cargo.toml has also been removed accordingly.
by @shunichironomura in #790
Internal Changes
- Update Rust crate anyhow to v1.0.101 (by @renovate[bot] in #776)
- Bump time from 0.3.46 to 0.3.47 (by @dependabot in #775)
- Update Rust crate sysinfo to v0.38.1 (by @renovate[bot] in #780)
- Update Rust crate reqwest to v0.13.2 (by @renovate[bot] in #779)
- Update Rust crate tempfile to v3.25.0 (by @renovate[bot] in #783)
- Update Rust crate toml to v1.0.1 (by @renovate[bot] in #787, #788)
- Update Rust crate clap to v4.5.58 (by @renovate[bot] in #785)
- Update Rust crate predicates to v3.1.4 (by @renovate[bot] in #786)
- Update crate-ci/typos action to v1.43.4 (by @renovate[bot] in #777, #778, #782)
- Lock file maintenance (by @renovate[bot] in #781)
- Bump version to v0.11.0 (by @shunichironomura in #791)
Full Changelog: v0.10.0...v0.11.0
v0.10.0
Breaking Changes
MSRV bumped to 1.91
The minimum supported Rust version is now 1.91.
by @shunichironomura in #748
New Features
require_pushed option for capture-git-repo hook
Added require_pushed and remote config options to the capture-git-repo hook. When require_pushed = true, the hook verifies that the HEAD commit is reachable from the configured remote, aborting the run if it is not. This ensures that others can access the exact commit used for an experiment.
A new is_pushed boolean field is added to the hook's JSON output, always populated regardless of the require_pushed setting.
[[pre-run.hooks]]
id = "capture-git-repo"
name = "my-project"
path = "."
allow_dirty = false
require_pushed = true
remote = "origin" # defaultby @shunichironomura in #764
run-dir command
Added capsula run-dir subcommand to print the run directory for a given run name. When duplicate names exist, the newest run is preferred.
capsula run-dir jaded-cat
# /path/to/.capsula/my-vault/2026-01-30/123456-jaded-catby @shunichironomura in #771
Run Query API with JSONPath filters (server)
Added a new POST /api/v1/runs/search endpoint that enables querying runs by hook output values using SQL/JSON path expressions. This allows consumers to find runs matching specific criteria (e.g., git commit, parameter values, file hashes) without needing a Capsula workspace.
{
"vault": "my-project",
"hook_filters": [
{
"hook_id": "capture-git-repo",
"output_filter": "$.sha ? (@ starts with \"abc123\")"
}
],
"order": "latest_first",
"limit": 10
}by @shunichironomura in #758
Environment variables from dotenv files for vault path and server URL
Fixed the timing issue where environment variables specified in dotenv files were not being used for vault.path and server configuration options. Added --vault-path global CLI option and manual environment variable resolution after dotenv loading.
Priority order: CLI argument > environment variable (after dotenv) > config file.
by @shunichironomura in #751
Bug Fixes
Log messages printed to stderr
Log messages from tracing_subscriber are now printed to stderr instead of stdout, following the standard Unix convention. This fixes issues where log output was mixed with program data (e.g., capsula run-dir output).
by @shunichironomura in #772
Documentation
- Document
namefield forcapture-git-repohook (by @shunichironomura in #761)
Internal Changes
- Make some Clippy config explicit in Cargo.toml (by @shunichironomura in #749)
- Use stable Rust version in dev, check with MSRV in CI (by @shunichironomura in #757)
- Bump bytes from 1.11.0 to 1.11.1 (by @dependabot in #770)
- Update Rust crate clap to v4.5.57 (by @renovate[bot] in #769)
- Update Rust crate clap to v4.5.56 (by @renovate[bot] in #762)
- Update Rust crate clap to v4.5.55 (by @renovate[bot] in #756)
- Update Rust crate git2 to v0.20.4 (by @renovate[bot] in #766)
- Update Rust crate sysinfo to 0.38 (by @renovate[bot] in #750)
- Update Rust crate askama to v0.15.4 (by @renovate[bot] in #759)
- Update Rust crate askama to v0.15.3 (by @renovate[bot] in #754)
- Update Rust crate askama_web to v0.15.1 (by @renovate[bot] in #747)
- Update crate-ci/typos action to v1.43.1 (by @renovate[bot] in #768)
- Update crate-ci/typos action to v1.43.0 (by @renovate[bot] in #767)
- Update crate-ci/typos action to v1.42.3 (by @renovate[bot] in #755)
- Update crate-ci/typos action to v1.42.2 (by @renovate[bot] in #753)
- Lock file maintenance (by @renovate[bot] in #765, #752)
- Bump version to v0.10.0 (by @shunichironomura in #774)
Full Changelog: v0.9.5...v0.10.0
v0.9.5
New Features
Configurable upload body size limit for capsula-server
Added --max-body-size CLI option and CAPSULA_MAX_BODY_SIZE environment variable to configure the maximum upload body size for the server. The default is 100MB (104,857,600 bytes).
This resolves an issue where file uploads larger than 2MB were failing due to Axum's default body size limit.
Usage:
# CLI
capsula-server --max-body-size 209715200 # 200MB
# Environment variable
export CAPSULA_MAX_BODY_SIZE="209715200"
capsula-serverby @shunichironomura in #744
Internal Changes
- Add capture-file post-run hook to repository config (by @shunichironomura in #745)
- Update crate-ci/typos action to v1.42.1 (by @renovate[bot] in #741)
- Update Rust crate chrono to v0.4.43 (by @renovate[bot] in #738)
- Update Rust crate thiserror to v2.0.18 (by @renovate[bot] in #739)
- Lock file maintenance (by @renovate[bot] in #735, #740)
- Bump version to 0.9.5 (by @shunichironomura in #746)
Full Changelog: v0.9.4...v0.9.5
v0.9.4
New Features
Capsula Server
This releases adds a Capsula server. Users can push the local run data to it, and it displays the runs in a Web UI.
Related PRs:
- Add Capsula server by @shunichironomura in #719
- capsula-server-cli by @shunichironomura in #729
- Containerize Capsula server by @shunichironomura in #730
- Use latest Rust version in container by @shunichironomura in #732
- Use port 8500 by @shunichironomura in #733
Behavior of capsula --version
When Capsula is installed from GitHub, capsula --version displays the Git commit SHA in addition to its version.
Related PRs:
- Add commit hash to the output of
capsula --versionby @shunichironomura in #716 - Hide (commit: unknown) if Git commit is unknown by @shunichironomura in #717
Internal
- Change deny rules to warn and allow multiple_crate_versions by @shunichironomura in #711
- Add coverage report and refactor code by @shunichironomura in #725
- Make the next version bump a patch, not a minor by @shunichironomura in #734
Documentation
- Setup preliminary docs by @shunichironomura in #707
- Refine docs by @shunichironomura in #726
Dependencies
- Update actions/checkout action to v6 by @renovate[bot] in #708
- Update actions/setup-python action to v6 by @renovate[bot] in #709
- Update Rust crate reqwest to 0.13 by @renovate[bot] in #710
- Update crate-ci/typos action to v1.41.0 by @renovate[bot] in #712
- Update Rust crate clap to v4.5.54 by @renovate[bot] in #713
- Lock file maintenance by @renovate[bot] in #714
- Update Rust crate serde_json to v1.0.149 by @renovate[bot] in #715
- Update crate-ci/typos action to v1.42.0 by @renovate[bot] in #718
- Update postgres Docker tag to v18 by @renovate[bot] in #723
- Update Rust crate testcontainers-modules to 0.14 by @renovate[bot] in #722
- Update Askama to v0.15 by @shunichironomura in #724
- Update Rust crate toml to v0.9.11 by @renovate[bot] in #728
- Update Rust crate assert_cmd to v2.1.2 by @renovate[bot] in #727
Full Changelog: v0.9.3...v0.9.4
v0.9.3
New Features
- Support Slack attachment in
notify-slackhook by @shunichironomura in #702 - Add
dotenvconfig to load environment variables from a dotenv file by @shunichironomura in #705
Documentation
- Fix Slack bot set-up instructions by @shunichironomura in #704
Internal
- Set up dev tools and improve logging by @shunichironomura in #701
- Add debug logging to hooks by @shunichironomura in #703
- Bump version to 0.9.3 by @shunichironomura in #706
Dependency Updates
Full Changelog: v0.9.2...v0.9.3
v0.9.2
New Features
- Support reading Slack bot token from
SLACK_BOT_TOKENenvironment variable by @shunichironomura in #697
Bug Fixes
- Fix handling of glob in subdirectories in
capture-filehook by @shunichironomura in #688
Documentation
- Update README with a section on
notify-slackhook by @shunichironomura in #698
Internal
- Make clippy more strict by @shunichironomura in #679
- Change the type of
total_memoryfield ofMachineCapturedstruct from usize to u64 by @shunichironomura in #680 - Enable Clippy nursery lints and some of the restricted lints by @shunichironomura in #681
- Move glob crate to workspace dependencies by @shunichironomura in #695
- Add tracing by @shunichironomura in #694
- Bump MSRV to 1.90 by @shunichironomura in #696
- Bump version to 0.9.2 by @shunichironomura in #699
Dependency Updates
- Update Rust crate git2 to v0.20.3 by @renovate[bot] in #677
- Lock file maintenance by @renovate[bot] in #678
- Update Rust crate reqwest to v0.12.25 by @renovate[bot] in #682
- Lock file maintenance by @renovate[bot] in #684
- Update Rust crate reqwest to v0.12.26 by @renovate[bot] in #685
- Update Rust crate toml to v0.9.9 by @renovate[bot] in #686
- Update Rust crate toml to v0.9.10 by @renovate[bot] in #687
- Lock file maintenance by @renovate[bot] in #689
- Update Rust crate serde_json to v1.0.146 by @renovate[bot] in #690
- Update Rust crate reqwest to v0.12.28 by @renovate[bot] in #691
- Update Rust crate serde_json to v1.0.147 by @renovate[bot] in #692
- Update Rust crate serde_json to v1.0.148 by @renovate[bot] in #693
Full Changelog: v0.9.1...v0.9.2