Skip to content

v0.0.3: Keep measurements clean, and stop losing them

Choose a tag to compare

@jdx jdx released this 26 Jul 00:33
Immutable release. Only release title and notes can be modified.
cc4950e

This release scrubs forge tokens from measured commands, fixes a bug where a push could erase the remote's entire measurement history, and adds a settings registry to configure it. It also repairs the Docker build.

Added

  • A settings registry driven by settings.toml, with build.rs generating the Settings struct, defaults, and introspection metadata. A new tak settings subcommand prints resolved values, their sources, and the computed scrub list; tak settings --docs adds descriptions and examples. The first two settings are env_deny (variables removed from measured commands) and env_allow (variables kept even though env_deny lists them, subtracting from the deny list). Resolution precedence is CLI > environment > tak.toml > default, exposed as --env-deny / --env-allow flags, TAK_ENV_DENY / TAK_ENV_ALLOW, and an [env] section in tak.toml. By @jdx in #18.

Fixed

  • Forge tokens (GITHUB_TOKEN, GH_TOKEN by default) are now removed from the environment of every command tak measures, on both the wall-clock and cachegrind paths. A CLI that finds a token often does more work with it — authenticating, fetching, checking rate limits — which lands in the series as an unexplained step change. It also keeps a repository-write token out of scope for the downloaded binaries that tak backfill executes. Projects measuring a CLI that genuinely cannot start unauthenticated can opt a variable back in via tak.toml. By @jdx in #17.

    # tak.toml
    [env]
    allow = ["GITHUB_TOKEN"]
  • A push no longer erases the remote's measurements. One forced refspec served both fetch and push, so the retry-and-merge loop beneath it never ran and any writer with a stale or empty local notes ref replaced the whole remote history — which is exactly what a fresh CI checkout is, since actions/checkout does not fetch notes. Push now uses a non-forced refspec so a non-fast-forward is rejected and the merge path runs; fetch lands on a scratch ref and is merged into the local one with cat_sort_uniq. Reading (tak history) between recording and pushing no longer discards the unpushed local record. By @jdx in #19.

  • The Docker build works again. The build stage was missing crates/ from its context, so cargo failed at manifest resolution — a regression from when asset-picker was extracted into the workspace. By @jdx in #16.

Full Changelog: v0.0.2...v0.0.3