Skip to content

feat: read gate and changelog features from soothfast.toml - #195

Merged
Verdenroz merged 4 commits into
masterfrom
feat/toml-features
Sep 12, 2026
Merged

Verdenroz merged 4 commits into
masterfrom
feat/toml-features

Conversation

@Verdenroz

@Verdenroz Verdenroz commented Sep 11, 2026

Copy link
Copy Markdown
Owner

What changed

  • Added features to the [gate] table of soothfast.toml, applied to gate, measure and spec gen.
  • Added a [changelog] table carrying features and packages, applied to report changelog. features falls back to [gate] features when absent.
  • Called gate_config::apply from spec gen, which read no repository config at all before.
  • Grew changelog_config to return a ChangelogConfig holding the icons alongside the two new keys, instead of Icons alone.
  • Extracted the features precedence into resolve_features in report.rs, so the rule is a pure function with its own tests.
  • Documented both tables in docs/gating.md and docs/reports.md.

Fixes #193

Why

A bench target that declares required-features, or a crate whose public API is mostly feature-gated, needs --features on every gate, measure, spec gen and report changelog run. The action grew features and changelog-features inputs in v0.3.1, so CI can be told once. A developer running the CLI by hand still had to remember the same flags on every invocation. In the changelog case a wrong set fails quietly: feature-gated public items drop out of the API surface diff and nothing says they did. The file now carries the defaults, and an explicit --features or -p on the command line still wins over it.

How was this tested

  • cargo test -p cargo-soothfast: 213 passed, 1 failed. The failure is invoke::tests::a_plain_directory_in_the_repo_is_not_a_worktree_root, which asserts the workspace root is not a git worktree root. This branch does not touch invoke.rs; the test fails because the run happened from inside a linked worktree. Skipping that one test: 213 passed, 0 failed.
  • cargo fmt --all -- --check: clean.
  • cargo clippy --workspace --all-targets -- -D warnings: clean.
  • Seven new unit tests across the two parsers, covering both new keys, their type errors, an unknown key under [changelog], and the [changelog] and [changelog.icons] tables not bleeding into each other.
  • Three new unit tests over resolve_features, one per precedence step: an explicit --features beating both tables, [changelog] features beating [gate] features, and [gate] features filling in when neither of the others does.
  • Manually, against this repository's own soothfast.toml. With [changelog] packages = ["soothfast-report"] added, cargo soothfast report changelog with no -p reached the baseline step instead of erroring. Without it the report changelog needs -p PKG error is unchanged. An unknown key under [changelog] errors with the file and line.
  • make check and make gate BASE=master were not run. No measured function in soothfast-registry, soothfast-measure or soothfast-docs is touched.

Checklist

  • make check passes (fmt, clippy -D warnings, cargo test --workspace)
  • make gate BASE=master passes, or any intentional cost change is explained above
  • Tests added/updated for new behavior (not required for docs/CI-only changes)
  • Public API items have /// doc comments
  • No new dependency, or its justification is included above (see Dependency Policy)
  • Docs (README.md, docs/, soothfast:bind/soothfast:claim markers) updated if behavior changed

@Verdenroz
Verdenroz deployed to soothfast-bot September 11, 2026 23:58 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 11, 2026 23:58 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 11, 2026 23:58 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 11, 2026 23:58 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 11, 2026 23:58 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 11, 2026 23:58 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 11, 2026 23:58 — with GitHub Actions Active
@soothfast-bot

soothfast-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

soothfast gate

gate: measuring merge-base of origin/master in worktree (interleaved rounds)
gate: bench binaries identical (code and data match) — no measurable change possible
gate: gating backend = walltime
gate: build=08f03a noise_floor=0.07% thresholds: instructions +5% ir +5% walltime +10.0% alloc/size +5% polls/wakes +5%
ok    soothfast_sdk::bench_emit_typescript walltime_median_ns 1787959.0 -> 1787959.0 (+0.0%)
ok    soothfast_sdk::bench_emit_typescript allocs 42930 -> 42930 (allowed <= 45076)
ok    soothfast_sdk::bench_emit_typescript alloc_bytes 2938940 -> 2938940 (allowed <= 3085887)
ok    soothfast_sdk::bench_lower walltime_median_ns 1111545.0 -> 1111545.0 (+0.0%)
ok    soothfast_sdk::bench_lower allocs 23907 -> 23907 (allowed <= 25102)
ok    soothfast_sdk::bench_lower alloc_bytes 2064788 -> 2064788 (allowed <= 2168027)
ok    soothfast_sdk::bench_emit_typescript assert complexity: claimed O(n); growth drift x0.98 over sizes [16, 64, 256] (limit x2.5)
ok    soothfast_sdk::bench_lower assert complexity: claimed O(n); growth drift x1.25 over sizes [16, 64, 256] (limit x2.5)
gate: passed (2 item(s))

@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:03 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:03 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:03 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:03 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:03 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:03 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:03 — with GitHub Actions Active
@Verdenroz
Verdenroz merged commit 01e9210 into master Sep 12, 2026
19 checks passed
@Verdenroz
Verdenroz deleted the feat/toml-features branch September 12, 2026 00:18
@Verdenroz Verdenroz mentioned this pull request Sep 12, 2026
6 tasks
Verdenroz added a commit that referenced this pull request Sep 12, 2026
## What changed

- Froze the `## Unreleased` heading in `CHANGELOG.md` to `## 0.3.2 - 2026-09-11` and wrote its Overview and Upgrade notes.
- Bumped `[workspace.package] version` and the eight `[workspace.dependencies]` requirements from `0.3.1` to `0.3.2`.
- Regenerated `Cargo.lock`. Only version lines moved; no dependency was added, removed, or changed.
- Bumped the version strings in `README.md` and `soothfast.toml`.

## Why

0.3.1 gave the action its `features` and regeneration inputs, so CI could be
told once what a repository needs. A developer running the CLI by hand still
repeated the same flags on every invocation, and two defects surfaced once
adopters started bumping across versions. This release carries all three
fixes: `soothfast.toml` holds the feature and package defaults, the gate stops
letting a reference it could not pin decide a verdict quietly, and the
changelog drops the bot's own regeneration commits instead of listing the
paperwork as changes.

Everything here is additive and opt-in. A repository on `soothfast = "0.3"`
picks it up without touching its manifest.

## How was this tested

- `cargo fmt --all -- --check`: clean.
- `cargo clippy --workspace --all-targets -- -D warnings`: clean.
- `cargo test --workspace --no-fail-fast`: 817 passed, 4 ignored, 1 failed. The failure is `invoke::tests::a_plain_directory_in_the_repo_is_not_a_worktree_root`, which asserts the workspace root is not a linked git worktree. It fails from any linked-worktree checkout and passes from a plain one, which is what CI uses. Confirmed by running the same built test binary from both.
- `cargo check --workspace` after the bump: clean, all ten crates resolve at `0.3.2`.
- Read the frozen section against `git log v0.3.1..master`: it lists #195, #196 and #199, and none of the four soothfast-bot regeneration commits. Those exclusions are the filter from #199 running against real history.
- `make gate BASE=master` was not run. This commit changes no measured code.

## Checklist

- [ ] `make check` passes (fmt, clippy `-D warnings`, `cargo test --workspace`)
- [ ] `make gate BASE=master` passes, or any intentional cost change is explained above
- [ ] Tests added/updated for new behavior (not required for docs/CI-only changes)
- [ ] Public API items have `///` doc comments
- [x] No new dependency, or its justification is included above (see [Dependency Policy](../CONTRIBUTING.md#dependency-policy))
- [x] Docs (`README.md`, `docs/`, `soothfast:bind`/`soothfast:claim` markers) updated if behavior changed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read gate and changelog features from soothfast.toml

1 participant