buildprof 0.2.4

Records every process and file access in a build and shows it as an interactive timeline
# Changelog

All notable changes to Buildprof will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.2.4] - 2026-09-11

### Changed

- The UI no longer probes localhost for a native Trace Processor when it
  starts. Chrome asked for permission to access other apps and services on
  the device for that probe before any trace was opened, and blocking it
  silently broke loading traces from the CLI.
- The CLI explains that Chrome permission prompt while it waits for the
  browser to fetch a trace, and how to recover after blocking it.
- When the UI fetches a trace from this machine, the loading page says to
  allow that prompt. If the fetch fails, the error says whether Chrome is
  blocking the site or nothing answered, and how to recover, instead of the
  generic download error.

## [0.2.3] - 2026-09-09

### Added

- `--no-file-events` records the process timeline without filesystem tracing,
  reducing overhead for builds that open many files. Compiler tracing remains
  independently selectable.
- Recordings carry their collection settings. The UI indicates when file
  events were not recorded and explains why file lists and dependency links
  are unavailable. Older recordings continue to open.

### Changed

- Event names and categories are written once per trace and referenced by id
  from each event, instead of being repeated as strings on every event. Traces
  are smaller and load faster; nothing changes in what the UI shows.

## [0.2.2] - 2026-09-04

### Changed

- The UI no longer calls out a recorder that differs from it only in the
  patch version; patch releases never change the trace format.
- Release notes list the same install options as the README, followed by the
  version's changelog section.

### Fixed

- `.deb` and `.rpm` packages for aarch64 are built on an arm64 runner instead
  of failing the sanity check on x86_64.

## [0.2.1] - 2026-09-04

### Fixed

- The static musl builds compile again; the ptrace request type differs
  between glibc and musl.
- Releases are created as drafts titled `Buildprof <version>` for review.
  Publishing one triggers the UI deploy, the crates.io publish, and the
  Linux packages, which a release published by automation never did.

## [0.2.0] - 2026-09-04

### Added

- `buildprof.version` and `buildprof.trace_format` trace attributes, visible
  in Trace Processor's `metadata` table, so the UI can tell which recorder
  wrote a trace.
- SSH sessions print the `ssh -L` port forward to run from your own machine
  instead of trying to launch a browser on the build host.
- `--wait <SECONDS>` bounds how long Buildprof waits for a browser to fetch a
  trace (default 600; 0 waits forever).
- `buildprof examples` and `buildprof open --example <NAME>` open recordings
  hosted next to the UI.
- Clear messages when ptrace or seccomp is unavailable (Docker without
  `SYS_PTRACE`, Yama `ptrace_scope` 3, gVisor), when the command cannot be
  executed, and when port 9001 is already taken.
- Prebuilt binaries on GitHub Releases for x86_64 and aarch64 Linux (glibc
  2.28 or newer, plus static musl builds) and for macOS, with a shell
  installer, a Homebrew tap, `.deb` and `.rpm` packages, and mise support.
- Every released UI is deployed permanently under
  `https://buildprof.lalitm.com/v<version>/`; the CLI opens the UI matching
  its own version and the UI links to the matching version when a trace was
  recorded by a different release.

### Changed

- Traces are now written as a single zstd stream, typically 9 to 20 times
  smaller than before. The UI detects the compression from the file's magic
  bytes and the `.buildprof` extension is unchanged. Querying a trace directly
  needs a Trace Processor build from July 2026 or later; the `perfetto` Python
  package's bundled build is older, so pass
  `TraceProcessorConfig(fetch_latest_trace_processor=True)` for now.
- Building from source now requires Rust 1.91.

## [0.1.0] - 2026-08-22

### Added

- Linux process-tree recording with command, working-directory, and exit-status
  metadata.
- File-open and rename events for reconstructing artifact flow.
- Perfetto trace output with packed process and file tracks.
- Optional Clang and nightly Rust compiler-internal traces.
- Conformance coverage for Make, CMake with Ninja, Meson with Ninja, Cargo, and
  Go builds.