Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,43 @@ and this project adheres to pre-1.0 [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [0.8.0] - 2026-02-28

### Added

- `--exact` flag for `piano build` and `piano profile`: exact-match mode for `--fn`, mirroring `cargo test -- --exact` convention (#120)
- `--list-skipped` flag for `piano build` and `piano profile`: list functions that Piano cannot instrument (const, unsafe, extern) with file paths and reasons; prints "no functions skipped" when all functions are instrumentable (#137, #186, #192)
- `piano tag` with no arguments lists all saved tags; `piano tag <name>` saves (#175)
- `piano diff` with no arguments compares the two most recent runs, showing "comparing: X vs Y" with tag names or relative timestamps (#125)
- User labels as diff column headers: tag names, filename stems, or relative timestamps instead of generic "Before"/"After" (#124)
- Auto-detect project root by walking up from cwd to find Cargo.toml, removing the need for `--project` in most cases (#135)
- Structural color in report tables: bold headers, dim separators, full NO_COLOR/CLICOLOR/CLICOLOR_FORCE/TERM=dumb support via anstream (#122)
- Recovery guidance in NoTargetsFound errors: shows similar function names via edit distance, or lists all available functions (#127)
- UX design principles documented in docs/standards/ux.md

### Fixed

- Diff table sorted by absolute self-time delta descending instead of alphabetically (#193)
- Duplicate error message on NoTargetsFound when all matched functions were skipped (#191)
- Missing tag produces "no run found for tag '...'" instead of leaking internal file paths (#198)
- Internal staging/tempdir paths removed from all user-facing error messages (#129)
- Cascading NoRuns error suppressed when profiled program exits non-zero (#139)
- `--fn` substring matching now checks qualified names (Type::method), not just bare names (#185)
- Stale tags produce RunNotFound with recovery guidance instead of generic NoRuns (#160)
- Non-printable characters in tag names displayed safely in error messages (#166)
- Redundant "invalid tag:" prefix removed from tag validation errors (#165)
- Run ID removed from tag confirmation message (#126)
- Concurrency warning simplified to one line per function (#138)
- Invalid tag error defines the valid character set instead of listing what's invalid (#128)
- App name shown in build output instead of internal binary path (#121)
- `--fn` help text harmonized between build and profile commands (#123)

### Changed

- Report columns reordered: Function | Self | Calls | Allocs | Alloc Bytes (self-time leads, Total removed from default view) (#180, #136)
- Runtime exits non-zero on profiling data write failure instead of silently discarding
- Runs directory pre-created before instrumented build to prevent write failures

## [0.7.0] - 2026-02-27

### Added
Expand Down
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = ["piano-runtime"]

[package]
name = "piano"
version = "0.7.0"
version = "0.8.0"
edition = "2024"
rust-version = "1.88"
description = "Automated instrumentation-based profiling for Rust"
Expand Down
4 changes: 2 additions & 2 deletions docs/standards/releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ Batch related changes, release when there's a meaningful set of user-facing chan
6. Bump version in both `Cargo.toml` and `piano-runtime/Cargo.toml`
7. Run `cargo generate-lockfile --ignore-rust-version` (without this flag, cargo constrains all workspace deps to the lowest member MSRV, downgrading shared dependencies like clap)
8. Commit: `chore(cargo): bump version to 0.x.y` -- this commit may only touch `Cargo.toml`, `piano-runtime/Cargo.toml`, and `Cargo.lock` (CI enforces this on `release/*` PRs)
9. Tag: `git tag v0.x.y`
10. Push: `git push && git push --tags`
9. Open a PR (`release/v0.x.y` branch) -- main has branch protection, even version bumps go through a PR
10. After merge, tag the merge commit: `git tag v0.x.y` and `git push --tags`
11. Publish `piano-runtime` first: `cargo publish -p piano-runtime`
12. Wait for crates.io to index, then publish `piano`: `cargo publish -p piano`
13. Close the milestone on GitHub (if applicable)
Expand Down
2 changes: 1 addition & 1 deletion piano-runtime/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "piano-runtime"
version = "0.7.0"
version = "0.8.0"
edition = "2021"
rust-version = "1.59"
description = "Zero-dependency timing and allocation tracking runtime for piano profiler"
Expand Down