Skip to content

ci: move the soothfast jobs onto the generated workflow - #39

Merged
Verdenroz merged 7 commits into
mainfrom
chore/soothfast-ci-config
Nov 13, 2026
Merged

Verdenroz merged 7 commits into
mainfrom
chore/soothfast-ci-config

Conversation

@Verdenroz

@Verdenroz Verdenroz commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner

What changed

The soothfast setup was split across three workflows: the generated soothfast.yml, a hand-written soothfast job in ci.yml that gated and regenerated the changelog, and docs.yml, which measured a baseline, checked the docs, built the site and deployed it. This moves all of it onto the generated workflow.

  • Regenerated .github/workflows/soothfast.yml with cargo soothfast init, with the bot on and the workflow allowed to deploy Pages.
  • Removed the soothfast job from ci.yml. The generated workflow gates, records and lands the changelog.
  • Removed docs.yml. The generated workflow checks the docs, builds the site and deploys it on a push to main.
  • Added [changelog] packages to soothfast.toml, which was the changelog-packages input of the removed job.
  • Added [bot] labels = true and [ci] pages = true to soothfast.toml.

The workflow is pinned to a commit on soothfast's default branch.

Testing

  • cargo soothfast plan --github lists the jobs capture-scry and site and reports site_deploy=true.
  • cargo soothfast init --check reports no drift after the regeneration.
  • This pull request's own run passed every job of the generated workflow, including the site check and the verdict.
  • Not run: the Pages deploy, which only runs on a push to main. The first push after this merges is its first run.

@soothfast-bot

soothfast-bot Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

soothfast verdict

6 projects: 0 regressed, 0 errored, 6 pass

capture-scry

pass | check | 0s

docs capture: 0 checked, 0 stale, 0 skipped (features not enabled)

docs

pass | docs | 0s

baseline merge: 2 file(s) into head: 11 item(s)
baseline merge: not measured (reused-walltime): spliced from the item cache; its walltime is another run's: scry_core::bench_chunk_rust, scry_core::bench_dense_search, scry_core::bench_expand_symbols, scry_core::bench_hash_bytes, scry_core::bench_lexical_search, scry_core::bench_normalize_remote_url, scry_core::bench_search_with_vector
ok    docs/search.md:43 claim `scry_core::bench_hash_bytes.alloc.allocs <= 0` (actual 0.0)
ok    docs/search.md:47 claim `scry_core::bench_normalize_remote_url.alloc.allocs <= 5` (actual 5.0)
ok    docs/search.md:51 claim `scry_core::bench_dense_search.alloc.allocs <= 11` (actual 11.0)
docs check: passed (6 file(s))

python

pass | import | 9s

test_injected_memories     10,153.6060 (>1000.0)  13,873.4320 (328.45)   10,391.5972 (>1000.0)  485.4214 (463.31)   10,321.7330 (>1000.0)  115.7730 (>1000.0)       2;4       96.2316 (0.00)         97           1
test_load_transcript       26,802.5530 (>1000.0)  31,868.9270 (754.49)   27,434.2148 (>1000.0)  877.4663 (837.50)   27,241.2880 (>1000.0)  466.6477 (>1000.0)       2;2       36.4508 (0.00)         35           1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Legend:
  Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile.
  OPS: Operations Per Second, computed as 1 / Mean
============================== 4 passed in 3.57s ===============================
============================= test session starts ==============================
platform linux -- Python 3.14.4, pytest-8.4.2, pluggy-1.7.0
benchmark: 5.3.1 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/runner/work/_temp/soothfast-base-43339669593-1-python/plugin/plugins/scry/hooks
plugins: benchmark-5.3.1, platformdirs-4.14.5, typeguard-4.4.4
collected 4 items

tests/bench_hooks.py ....                                                [100%]
Wrote benchmark data in: bench.json



------------------------------------------------------------------------------------------------ benchmark: 4 tests -----------------------------------------------------------------------------------------------
Name (time in us)                  Min                    Max                   Mean              StdDev                 Median                 IQR            Outliers           OPS            Rounds  Iterations
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_plan_memories              7.8140 (1.0)          58.4470 (1.0)           8.3907 (1.0)        1.5730 (1.0)           8.1660 (1.0)        0.1200 (1.0)      830;1700  119,179.7433 (1.0)       28948           1
test_render_capped            770.6480 (98.62)     1,325.9820 (22.69)       797.4234 (95.04)     21.2865 (13.53)       794.5485 (97.30)     13.9660 (116.38)      70;48    1,254.0389 (0.01)       1136           1
test_injected_memories     10,264.5250 (>1000.0)  16,081.4990 (275.15)   10,584.8166 (>1000.0)  801.6051 (509.61)   10,428.0720 (>1000.0)  152.5060 (>1000.0)       4;7       94.4749 (0.00)         94           1
test_load_transcript       27,047.8830 (>1000.0)  32,034.7480 (548.10)   27,741.5228 (>1000.0)  903.7973 (574.57)   27,441.2830 (>1000.0)  564.9310 (>1000.0)       3;3       36.0470 (0.00)         35           1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Legend:
  Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile.
  OPS: Operations Per Second, computed as 1 / Mean
============================== 4 passed in 3.56s ===============================
gate: build=? noise_floor=0.00% thresholds: instructions +5% ir +5% walltime +10.0% alloc/size +5% polls/wakes +5%
ok    pytest::tests/bench_hooks.py::test_injected_memories walltime_median_ns 10428072.0 -> 10321733.0 (-1.0%)
ok    pytest::tests/bench_hooks.py::test_load_transcript walltime_median_ns 27441283.0 -> 27241288.0 (-0.7%)
ok    pytest::tests/bench_hooks.py::test_plan_memories walltime_median_ns 8166.0 -> 8176.0 (+0.1%)
ok    pytest::tests/bench_hooks.py::test_render_capped walltime_median_ns 794548.5 -> 800515.0 (+0.8%)
gate: passed (4 item(s))
imported 4 benchmark(s): /home/runner/work/_temp/soothfast-baseline/import-python.json

scry-core

pass | rust | 6s | 7/7 items covered, measuring 0

ok    scry_core::bench_chunk_rust walltime_median_ns 5625430.0 -> 5625430.0 (+0.0%)
ok    scry_core::bench_chunk_rust allocs 3628 -> 3628 (allowed <= 3809)
ok    scry_core::bench_chunk_rust alloc_bytes 793931 -> 793931 (allowed <= 833627)
ok    scry_core::bench_dense_search instructions 83037292.0 -> 83037292.0 (+0.0%)
ok    scry_core::bench_dense_search callgrind_ir 83037292.0 -> 83037292.0 (+0.0%)
ok    scry_core::bench_dense_search walltime_median_ns 7442914.0 -> 7442914.0 (+0.0%)
ok    scry_core::bench_dense_search allocs 11 -> 11 (allowed <= 11)
ok    scry_core::bench_dense_search alloc_bytes 16274 -> 16274 (allowed <= 17087)
ok    scry_core::bench_expand_symbols instructions 26803.0 -> 26803.0 (+0.0%)
ok    scry_core::bench_expand_symbols callgrind_ir 26803.0 -> 26803.0 (+0.0%)
ok    scry_core::bench_expand_symbols walltime_median_ns 1705.8 -> 1705.8 (+0.0%)
ok    scry_core::bench_expand_symbols allocs 55 -> 55 (allowed <= 57)
ok    scry_core::bench_expand_symbols alloc_bytes 2366 -> 2366 (allowed <= 2484)
ok    scry_core::bench_hash_bytes instructions 1048705.0 -> 1048705.0 (+0.0%)
ok    scry_core::bench_hash_bytes callgrind_ir 1048705.0 -> 1048705.0 (+0.0%)
ok    scry_core::bench_hash_bytes walltime_median_ns 71803.9 -> 71803.9 (+0.0%)
ok    scry_core::bench_hash_bytes allocs 0 -> 0 (allowed <= 0)
ok    scry_core::bench_hash_bytes alloc_bytes 0 -> 0 (allowed <= 0)
ok    scry_core::bench_lexical_search instructions 150829572.0 -> 150829572.0 (+0.0%)
ok    scry_core::bench_lexical_search callgrind_ir 150829572.0 -> 150829572.0 (+0.0%)
ok    scry_core::bench_lexical_search walltime_median_ns 13152835.0 -> 13152835.0 (+0.0%)
ok    scry_core::bench_lexical_search allocs 34 -> 34 (allowed <= 35)
ok    scry_core::bench_lexical_search alloc_bytes 2467 -> 2467 (allowed <= 2590)
ok    scry_core::bench_normalize_remote_url instructions 2667.0 -> 2667.0 (+0.0%)
ok    scry_core::bench_normalize_remote_url callgrind_ir 2667.0 -> 2667.0 (+0.0%)
ok    scry_core::bench_normalize_remote_url walltime_median_ns 158.8 -> 158.8 (+0.0%)
ok    scry_core::bench_normalize_remote_url allocs 5 -> 5 (allowed <= 5)
ok    scry_core::bench_normalize_remote_url alloc_bytes 116 -> 116 (allowed <= 121)
ok    scry_core::bench_search_with_vector instructions 366370698.0 -> 366370698.0 (+0.0%)
ok    scry_core::bench_search_with_vector callgrind_ir 366370698.0 -> 366370698.0 (+0.0%)
ok    scry_core::bench_search_with_vector walltime_median_ns 33139642.0 -> 33139642.0 (+0.0%)
ok    scry_core::bench_search_with_vector allocs 1286 -> 1286 (allowed <= 1350)
ok    scry_core::bench_search_with_vector alloc_bytes 169014 -> 169014 (allowed <= 177464)
ok    scry_core::bench_chunk_rust assert complexity: claimed O(n); growth drift x1.00 over sizes [64, 256, 1024] (limit x2.5)
ok    scry_core::bench_hash_bytes assert alloc: allocs 0 <= 0
ok    scry_core::bench_hash_bytes assert complexity: claimed O(n); growth drift x0.98 over sizes [4096, 65536, 1048576] (limit x2.5)
ok    scry_core::bench_normalize_remote_url assert alloc: allocs 5 <= 5
baseline saved: /home/runner/work/scry/scry/.soothfast/baselines/head.json
gate: baseline "head" lists 7 item(s) of scry-core as reused-walltime (walltime): spliced from the item cache; its walltime is another run's
gate: passed (7 item(s))

site

pass | check | 0s

docs build: 5 page(s), 6 asset(s) → /home/runner/work/_temp/soothfast-site

test-rust

pass | test | 12s

test: 3 of 3 packages selected, 6 binaries run, 0 skipped (cached), doc tests in 2 packages

@Verdenroz
Verdenroz marked this pull request as ready for review November 12, 2026 01:24
@Verdenroz Verdenroz added soothfast:merge Merge once the required checks pass do-not-merge Cancel any queued merge and removed do-not-merge Cancel any queued merge soothfast:merge Merge once the required checks pass labels Nov 13, 2026
@Verdenroz
Verdenroz merged commit d1decdb into main Nov 13, 2026
15 checks passed
@Verdenroz
Verdenroz deleted the chore/soothfast-ci-config branch November 13, 2026 01:12

This branch was previously deployed

1 inactive deployment
soothfast-bot — 5a9a806a Deployed Nov 13, 2026 by Verdenroz via soothfast / verdict #39
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