Skip to content

ci: stop gating generated specs and SDKs at PR time - #487

Merged
Verdenroz merged 1 commit into
ci/collapse-bot-regenerationfrom
ci/bot-land-sdk-regeneration
Sep 12, 2026
Merged

Verdenroz merged 1 commit into
ci/collapse-bot-regenerationfrom
ci/bot-land-sdk-regeneration

Conversation

@Verdenroz

Copy link
Copy Markdown
Owner

Description

The generator behind openapi.yaml, asyncapi.yaml, mcp-tools.json and the Python SDK reads the hand-authored manifests in server/spec/routes.rs and finance-query-mcp/spec/routes.rs, not the axum router or the #[tool] impls. A route missing from its manifest is missing from both sides of a spec gen --check comparison, so the check passes green on exactly the mistake it looks like it would catch. spec check, which reconciles the manifests against the actual handlers, is the step with teeth there and it stays. Dropping the three --check steps lets the bot land the regenerated files after merge and makes make sdk convenience rather than a required step before opening a PR.

The workflow half of #482 is here. The documentation half cannot be. CLAUDE.md and .claude/** are gitignored (.gitignore:9 and .gitignore:22) and exist only as untracked files in each clone, so no commit can reach them. They still tell the reader that CI gates the generated specs with spec gen --check and sdk gen --check, which stops being true when this merges. The issue stays open until that drift is handled.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that causes existing functionality to change)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement

Changes

  • Removed the spec gen --check and sdk gen --check steps from the Spec & SDK (server) job.
  • Removed the spec gen --check step from the Spec (MCP) job.
  • Kept spec check in both jobs. It reconciles the route and tool manifests against the handlers and is unaffected by this change.
  • Kept spec gate and its --from-committed flag, with a comment recording why the flag is there and what a stale base spec looks like.

Breaking Changes

None. No library, server, or MCP code changes. The generated artifacts are still generated and still must not be hand-edited; only the point at which they get regenerated moves from before the PR to after the merge.

Testing

  • Unit tests added/updated
  • Integration tests added/updated
  • Manual testing performed
  • All tests pass (cargo test)

The change is YAML only, so no cargo gate applies and the boxes above stay unticked. What ran:

  • python3 -c "import yaml; yaml.safe_load(open('.github/workflows/soothfast.yml'))" parses.
  • zizmor --no-online-audits .github/workflows/soothfast.yml reports no findings (10 suppressed).
  • prek run --files .github/workflows/soothfast.yml passes.
  • actionlint did not run. It is not installed on the machine this was written on.

The real verification is post-merge and cannot be performed here. The signal to watch: the first PR that changes a route or a tool without running make sdk should pass CI, and the regenerated openapi.yaml, asyncapi.yaml, mcp-tools.json and sdks/** should then show up in the bot's bot/derived-artifacts PR.

Documentation

  • Code documentation updated (doc comments)
  • README updated (if needed)
  • CHANGELOG.md updated (if releasing)
  • Examples updated (if API changed)

The documentation that needs this change is untracked. See the Description.

Checklist

  • Code compiles without warnings (cargo check)
  • Tests pass (cargo test)
  • Code formatted (cargo fmt)
  • Clippy checks pass (cargo clippy)
  • Documentation builds (cargo doc --no-deps)
  • Commit messages follow Conventional Commits

Related Issues

Refs #482

Stacks on #486. Base is ci/collapse-bot-regeneration and this must merge after it. #486 already routes the generated specs and SDKs through the bot's single land.sh call, which is what makes removing these gates safe.

@github-actions github-actions Bot added the ci Pull requests that update CI configuration label Sep 12, 2026
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 00:46 — with GitHub Actions Active
@soothfast-bot

soothfast-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

soothfast gate

finance-query

ok    finance_query::ticker_quote_then_cached allocs 4 -> 4 (allowed <= 4)
ok    finance_query::ticker_quote_then_cached alloc_bytes 43864 -> 43864 (allowed <= 46057)
ok    finance_query::tickers_batch_quote_then_cached walltime_median_ns 9836.9 -> 9836.9 (+0.0%)
ok    finance_query::tickers_batch_quote_then_cached allocs 16 -> 16 (allowed <= 16)
ok    finance_query::tickers_batch_quote_then_cached alloc_bytes 134810 -> 134810 (allowed <= 141550)
ok    finance_query::translate_dictionary walltime_median_ns 1882.2 -> 1882.2 (+0.0%)
ok    finance_query::translate_dictionary allocs 49 -> 49 (allowed <= 51)
ok    finance_query::translate_dictionary alloc_bytes 2880 -> 2880 (allowed <= 3024)
ok    finance_query::translation_set_backend walltime_median_ns 18.0 -> 18.0 (+0.0%)
ok    finance_query::translation_set_backend allocs 1 -> 1 (allowed <= 1)
ok    finance_query::translation_set_backend alloc_bytes 16 -> 16 (allowed <= 16)
ok    finance_query::translation_translate walltime_median_ns 3561.7 -> 3561.7 (+0.0%)
ok    finance_query::translation_translate allocs 79 -> 79 (allowed <= 82)
ok    finance_query::translation_translate alloc_bytes 6298 -> 6298 (allowed <= 6612)
ok    finance_query::translation_translate_with walltime_median_ns 3468.1 -> 3468.1 (+0.0%)
ok    finance_query::translation_translate_with allocs 77 -> 77 (allowed <= 80)
ok    finance_query::translation_translate_with alloc_bytes 6294 -> 6294 (allowed <= 6608)
ok    finance_query::bt_base_to_htf_index assert complexity: claimed O(n); growth drift x1.21 over sizes [1024, 4096, 16384] (limit x2.5)
ok    finance_query::bt_resample assert complexity: claimed O(n); growth drift x0.95 over sizes [1024, 4096, 16384] (limit x2.5)
ok    finance_query::bt_sma_crossover assert complexity: claimed O(n); growth drift x1.04 over sizes [1024, 4096, 16384] (limit x2.5)
ok    finance_query::capability_name assert alloc: allocs 0 <= 0
ok    finance_query::de_quote assert p99: p99 1018654ns <= 3000000ns
ok    finance_query::dispatch_select assert alloc: allocs 0 <= 0
ok    finance_query::ind_patterns assert complexity: claimed O(n); growth drift x0.95 over sizes [1024, 4096, 16384] (limit x2.5)
ok    finance_query::ind_sma assert alloc: allocs 1 <= 1
ok    finance_query::ind_sma assert p99: p99 384262ns <= 1000000ns
ok    finance_query::ind_sma assert complexity: claimed O(n); growth drift x1.01 over sizes [1000, 10000, 100000] (limit x2.5)
ok    finance_query::risk_beta assert alloc: allocs 0 <= 0
ok    finance_query::risk_beta assert complexity: claimed O(n); growth drift x1.02 over sizes [1024, 4096, 16384] (limit x2.5)
ok    finance_query::risk_calmar assert alloc: allocs 0 <= 0
ok    finance_query::risk_historical_var assert alloc: allocs 2 <= 2
ok    finance_query::risk_historical_var assert complexity: claimed O(n log n); growth drift x1.18 over sizes [1000, 10000, 100000] (limit x2.5)
ok    finance_query::risk_max_drawdown assert alloc: allocs 1 <= 1
ok    finance_query::risk_parametric_var assert alloc: allocs 0 <= 0
ok    finance_query::risk_parametric_var assert complexity: claimed O(n); growth drift x1.01 over sizes [1024, 4096, 16384] (limit x2.5)
ok    finance_query::risk_sharpe assert alloc: allocs 0 <= 0
ok    finance_query::risk_sharpe assert complexity: claimed O(n); growth drift x1.00 over sizes [1024, 4096, 16384] (limit x2.5)
ok    finance_query::risk_sortino assert alloc: allocs 0 <= 0
ok    finance_query::risk_sortino assert complexity: claimed O(n); growth drift x1.01 over sizes [1024, 4096, 16384] (limit x2.5)
gate: passed (180 item(s))

@Verdenroz
Verdenroz added this pull request to stack #490 September 12, 2026 01:05
@Verdenroz Verdenroz mentioned this pull request Sep 12, 2026
20 tasks
- spec check reconciles routes against handlers and is the step with
  teeth; spec gen --check compares generator output to itself
- the bot lands openapi/asyncapi/mcp-tools/sdks after merge
@Verdenroz
Verdenroz force-pushed the ci/bot-land-sdk-regeneration branch from eff8668 to 4cbd2a7 Compare September 12, 2026 01:11
@github-actions github-actions Bot added the refactor Internal improvement, cleanup, or architectural change label Sep 12, 2026
@Verdenroz
Verdenroz deployed to soothfast-bot September 12, 2026 01:11 — with GitHub Actions Active
@Verdenroz
Verdenroz merged commit af130d7 into master Sep 12, 2026
30 checks passed
@Verdenroz
Verdenroz deleted the ci/bot-land-sdk-regeneration branch September 12, 2026 01:31
Verdenroz added a commit that referenced this pull request Sep 12, 2026
## Description

`CHANGELOG.md`'s Unreleased section currently lists `Regenerate
soothfast outputs (#474)` and `Regenerate derived artifacts (#473)`.
Both are soothfast-bot commits that exist only to land generated files,
so two of the changelog's entries describe the changelog regenerating
itself. The cause was upstream and is fixed in v0.3.2, where the
generator reads the author alongside the subject and drops the commits
its own bot wrote. This repo's entire share of the fix is a version pin.

## Type of Change
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that causes existing functionality
to change)
- [ ] Documentation update
- [ ] Refactoring (no functional changes)
- [ ] Performance improvement

## Changes
- Bumped the pinned `Verdenroz/soothfast` action from
`80b18d8831521646b65fec79c6df14d6f763c602` (v0.3.1) to
`69e2e9250414bd1dcaa1f45529f1e3fe12c593dd` (v0.3.2) at all 13 pin sites:
8 in `soothfast.yml`, 2 in `deploy.yml`, 2 in `io-probe.yml`, 1 in
`sdk-publish.yml`.
- Covered both kinds of pin. Eleven are `uses:
Verdenroz/soothfast@<sha>`; the other two are `ref:` on the
`actions/checkout` steps in `deploy.yml` and `io-probe.yml` that
sparse-check-out the action's `action/` directory for `land.sh`. The two
kinds are kept in lockstep. A bump driven by a `uses:` grep alone misses
the `ref:` pins and leaves those workflows running v0.3.1 scripts
against a v0.3.2 CLI.
- Left `soothfast.toml` alone. The generator's default bot author is
`soothfast-bot[bot]`, which is what this repo's bot commits are already
authored by, so a `[changelog] bot-author` key would only be one more
value to drift.
- Left `soothfast.lock`, `Cargo.toml` and `Cargo.lock` alone. 0.3.1 to
0.3.2 is caret-compatible; only the action SHAs are pinned by hand.

## Breaking Changes

None. The composite action and its seven shell scripts are
byte-identical between the two tags, so the bump changes the CLI and
nothing else. No library, server, or MCP code is touched.

## Testing
- [ ] Unit tests added/updated
- [ ] Integration tests added/updated
- [ ] Manual testing performed
- [ ] All tests pass (`cargo test`)

The change is YAML only, so no cargo gate applies and the boxes above
stay unticked. What ran, on all four changed workflows:

- `python3 -c "import yaml; yaml.safe_load(open(f))"` parses each of
`soothfast.yml`, `deploy.yml`, `sdk-publish.yml`, `io-probe.yml`.
- `zizmor --no-online-audits` over the four reports no findings (27
suppressed).
- `prek run --files` over the four passes.
- `grep -rn '80b18d8831521646b65fec79c6df14d6f763c602' .github/` returns
nothing, and `grep -ro '69e2e9250414bd1dcaa1f45529f1e3fe12c593dd'
.github/ | wc -l` returns 13.
- `actionlint` did not run. It is not installed on the machine this was
written on.

The fix itself cannot be verified before merge, since it only shows up
when the bot next regenerates the changelog on `master`. Two things to
check then. The Unreleased section should no longer carry `Regenerate
soothfast outputs` or `Regenerate derived artifacts` under `### 🔧
Internal`. The `### 📦 Dependencies` section must still list its
dependabot entries, `Bump debian from ...` and `Bump rust from ...`. The
filter compares the author string exactly, so `dependabot[bot]` should
survive it; dependabot entries disappearing would mean the filter is
over-matching, which is a worse bug than the one this fixes and is
grounds to revert.

## Documentation
- [ ] Code documentation updated (doc comments)
- [ ] README updated (if needed)
- [ ] CHANGELOG.md updated (if releasing)
- [ ] Examples updated (if API changed)

`CHANGELOG.md` is deliberately not touched here. The Unreleased section
is generated, and the bot rewrites it after merge.

## Checklist
- [ ] Code compiles without warnings (`cargo check`)
- [ ] Tests pass (`cargo test`)
- [ ] Code formatted (`cargo fmt`)
- [ ] Clippy checks pass (`cargo clippy`)
- [ ] Documentation builds (`cargo doc --no-deps`)
- [x] Commit messages follow [Conventional
Commits](https://www.conventionalcommits.org/)

## Related Issues

Closes #480

Third in a stack. Base is `ci/bot-land-sdk-regeneration`, so this stacks
on #487, which stacks on #486, and it merges last. #486 and #487 both
rewrite `soothfast.yml` and `deploy.yml`, which this also touches.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Pull requests that update CI configuration refactor Internal improvement, cleanup, or architectural change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant