Skip to content

feat: feature, package, and custom regeneration inputs - #187

Merged
Verdenroz merged 1 commit into
masterfrom
feat/action-features-passthrough
Sep 6, 2026
Merged

Verdenroz merged 1 commit into
masterfrom
feat/action-features-passthrough

Conversation

@Verdenroz

@Verdenroz Verdenroz commented Sep 6, 2026

Copy link
Copy Markdown
Owner

What changed

The action ran the CLI with no --features, so a bench target that declares required-features could not be gated at all, and a changelog built without a crate's full feature set silently drops every feature-gated public item from its API diff. A crate with no bench target still ships an API the changelog should diff, and derived files outside the built-in regeneration (an sdk gen, a rendered report) had no way to land through the bot. This adds inputs for each.

  • Added features (passed to the gate, the baseline measurement, and spec generation) and changelog-features (passed to report changelog, defaulting to features). They can differ on purpose: gating under a heavy feature set can be too slow while the changelog's API surface needs all of it.
  • Added changelog-packages (defaulting to packages) so the changelog can diff crates the gate does not measure.
  • Added regen-run and regen-paths: a shell snippet run on the default branch after the built-in regeneration, with $SOOTHFAST naming the installed CLI, whose changes under the given pathspecs land in the same bot pull request. regen-run without regen-paths fails the step rather than discarding what it changed.
  • Documented the five inputs in docs/ci.md.

No CLI change: every flag the scripts now pass exists in cargo-soothfast 0.3.0.

Why

The one-step promise only holds if the step can run a repository's benches as they are declared. required-features on a bench target and crates that ship an API without a bench are ordinary Cargo layouts, and sdk gen is this project's own feature. Each was a workaround an adopter would otherwise need, which the mechanism-design rule in CLAUDE.md says to avoid.

How was this tested

  • shellcheck -x on all eight scripts: clean. zizmor 1.29.0 on action.yml: no findings.
  • An empty input passes no flag: the scripts build the --features arguments as arrays, verified under set -u.
  • make check and make gate not run; no Rust changed.

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 6, 2026 13:51 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:51 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:51 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:51 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:51 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:51 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:51 — with GitHub Actions Active
- A bench target with required-features could not be gated at all, and
  a changelog built without the full feature set silently drops every
  gated public item from its API diff.
- Crates without a bench target still ship an API, so the changelog can
  diff a wider package list than the gate measures.
- regen-run lands any derived file through the same bot pull request.
@Verdenroz
Verdenroz force-pushed the feat/action-features-passthrough branch from 93d4c24 to 822e155 Compare September 6, 2026 13:51
@soothfast-bot

soothfast-bot Bot commented Sep 6, 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.14% thresholds: instructions +5% ir +5% walltime +10.0% alloc/size +5% polls/wakes +5%
ok    soothfast_spec::bench_openapi_diff walltime_median_ns 6378510.0 -> 6378510.0 (+0.0%)
ok    soothfast_spec::bench_openapi_diff allocs 77722 -> 77722 (allowed <= 81608)
ok    soothfast_spec::bench_openapi_diff alloc_bytes 10815487 -> 10815487 (allowed <= 11356261)
ok    soothfast_spec::bench_openapi_document walltime_median_ns 2006512.0 -> 2006512.0 (+0.0%)
ok    soothfast_spec::bench_openapi_document allocs 30152 -> 30152 (allowed <= 31659)
ok    soothfast_spec::bench_openapi_document alloc_bytes 4715065 -> 4715065 (allowed <= 4950818)
ok    soothfast_spec::bench_serialize_yaml walltime_median_ns 6600786.0 -> 6600786.0 (+0.0%)
ok    soothfast_spec::bench_serialize_yaml allocs 74277 -> 74277 (allowed <= 77990)
ok    soothfast_spec::bench_serialize_yaml alloc_bytes 8533615 -> 8533615 (allowed <= 8960295)
ok    soothfast_spec::bench_openapi_diff assert complexity: claimed O(n); growth drift x1.73 over sizes [16, 64, 256] (limit x2.5)
ok    soothfast_spec::bench_openapi_document assert complexity: claimed O(n); growth drift x1.50 over sizes [16, 64, 256] (limit x2.5)
ok    soothfast_spec::bench_serialize_yaml assert complexity: claimed O(n); growth drift x1.23 over sizes [16, 64, 256] (limit x2.5)
gate: passed (3 item(s))

@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:52 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:52 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:52 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:52 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:52 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:52 — with GitHub Actions Active
@Verdenroz
Verdenroz deployed to soothfast-bot September 6, 2026 13:52 — with GitHub Actions Active
@Verdenroz
Verdenroz merged commit a5b453a into master Sep 6, 2026
21 checks passed
@Verdenroz
Verdenroz deleted the feat/action-features-passthrough branch September 6, 2026 13:55
@Verdenroz Verdenroz mentioned this pull request Sep 6, 2026
6 tasks
Verdenroz added a commit that referenced this pull request Sep 6, 2026
## What changed

Cuts v0.3.1. The `Unreleased` heading becomes `## 0.3.1 - 2026-09-06`
with Overview and Upgrade notes written, the workspace version and the
eight intra-workspace requirements move from 0.3.0 to 0.3.1, the
lockfile follows, and the README dependency snippet and `soothfast.toml`
site version match. Two wording fixes ride along: the 0.3.0 Overview no
longer compares soothfast to another product, and a `docs/spec.md`
example uses a placeholder crate name instead of a real project's.

## Why

The one-step action in 0.3.0 could not run a bench target that declares
`required-features`, could not diff the changelog over a crate without a
bench, and had no way to land derived files outside its built-in
regeneration. #187 adds inputs for each and #188 hardens the broker's
tag rule against annotated tag objects. Both are action and broker
changes, but the release workflow requires the tag to match the
workspace version, so they ship as a patch release of the crates too.
The frozen section was read against master d5d84f4 after the last
changelog regeneration and lists exactly the two merges since v0.3.0.

## How was this tested

- `make check` on this tree (fmt, clippy `-D warnings`, `cargo test
--workspace --all-features`): exit 0, 25 test binaries green.
- `cargo metadata --offline` refreshed `Cargo.lock`; the diff is ten
version lines and nothing else.
- The tag push runs `release.yml` end to end, including the tag-object
peel now live in the broker.

## Checklist

- [x] `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.

1 participant