From 8ceb918ed131e5cda5a69a3013d7925178f3d6b4 Mon Sep 17 00:00:00 2001 From: ivndev001 Date: Fri, 21 Aug 2026 08:43:57 +0000 Subject: [PATCH 1/3] docs: fix three docs still claiming CI runs on Blacksmith #430 removed Blacksmith from every executable surface; these three documents still stated it as live fact, and one instructed hard-coding a Blacksmith SKU with a CLAUDE.md citation that now says the opposite. - docs/idea/11-testing-ci.md: CI section now states runner selection via vars.WURK_CI_RUNNER / vars.WURK_BENCH_RUNNER (ubuntu-latest fallback, fork PRs pinned), ruby/setup-ruby, single-run suite per the CI standard. - docs/idea/06-performance.md: benchmark job runs where vars.WURK_BENCH_RUNNER points, not "on Blacksmith". - docs/plans/.../08-bench-gate-verify.md: superseded banner flagging the stale blacksmith-8vcpu instruction and citation; step text preserved as an executed-plan record. Changelog and seed/roadmap mentions left alone (history, correct as written). Closes #431 Co-Authored-By: Claude Fable 5 --- docs/idea/06-performance.md | 2 +- docs/idea/11-testing-ci.md | 12 ++++++------ .../101-faster-than-sidekiq/08-bench-gate-verify.md | 6 ++++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/idea/06-performance.md b/docs/idea/06-performance.md index 0ffb656b..d0b176ba 100644 --- a/docs/idea/06-performance.md +++ b/docs/idea/06-performance.md @@ -55,7 +55,7 @@ Every release must run, and must not regress on: 4. Swarm boot time, Rails-app baseline. 5. Memory per worker post-boot, Rails-app baseline. -The benchmark job runs in CI on Blacksmith. Results uploaded as artifacts. PR comment shows delta vs main. Greater than 5% regression flags the PR. +The benchmark job runs in CI wherever the `vars.WURK_BENCH_RUNNER` repository variable points (`ubuntu-latest` when unset). Results uploaded as artifacts. PR comment shows delta vs main. Greater than 5% regression flags the PR. ## What actually gates a merge diff --git a/docs/idea/11-testing-ci.md b/docs/idea/11-testing-ci.md index 52b3129e..984a0252 100644 --- a/docs/idea/11-testing-ci.md +++ b/docs/idea/11-testing-ci.md @@ -33,24 +33,24 @@ For each public class we implement, the equivalent test from upstream Sidekiq is A dedicated CI job runs the test suites of widely-used Sidekiq ecosystem gems (sidekiq-cron, sidekiq-unique-jobs, sidekiq-scheduler, etc.) against Wurk. See `14-ecosystem-compat.md`. These are the strongest possible drop-in proof. -## CI: GitHub Actions on Blacksmith runners +## CI: GitHub Actions -Blacksmith (https://blacksmith.sh) provides faster runners than stock ubuntu-latest with better caching. We use Blacksmith for: +Runner selection is a repository variable, not a hard-coded label: `vars.WURK_CI_RUNNER` for the test, parity, lint, frontend, and ecosystem jobs, `vars.WURK_BENCH_RUNNER` for the benchmark job. Both fall through to stock `ubuntu-latest` when unset, and fork PRs are pinned to `ubuntu-latest` unconditionally. CI runs: -- Test matrix (Ruby × Redis × Rails versions) +- Test suite (one full run on the newest Ruby + newest Rails, coverage gate folded in — no version matrix) - Ecosystem compat suite - Benchmark suite - Docs site build -The test workflow runs the matrix on a 4-vCPU Blacksmith runner. Each matrix cell: +The test workflow's suite job: - Checks out the repo. -- Sets up Ruby via Blacksmith's setup action with bundler cache. +- Sets up Ruby via `ruby/setup-ruby` with bundler cache. - Boots Redis and Postgres service containers. - Runs the dummy app setup. - Runs the full Minitest suite in parallel mode. -Benchmark job runs on an 8-vCPU Blacksmith runner and uploads results as artifacts. A bot comments deltas vs main on every PR. Regressions greater than 5% flag the PR. +The benchmark job runs wherever `vars.WURK_BENCH_RUNNER` points and uploads results as artifacts. A bot comments deltas vs main on every PR. Regressions greater than 5% flag the PR. ## Coverage diff --git a/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md b/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md index d3aeae67..ae31756f 100644 --- a/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md +++ b/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md @@ -1,5 +1,11 @@ # 08 — Bench harness, CI gate, final verification +> **Superseded (2026-08-21).** This plan step predates #430, which removed hard-coded runner labels +> from CI. Step 1's `blacksmith-8vcpu-ubuntu-2404` instruction and its "Per CI standard (CLAUDE.md)" +> citation are stale: `CLAUDE.md` now states runner selection is a repository variable +> (`vars.WURK_BENCH_RUNNER` for bench, `ubuntu-latest` fallback) — do not hard-code a runner label. +> `bench.yml` already exists on `main`. Kept unedited below as an executed-plan record. + > Part of [`overview.md`](overview.md). Depends on: 02–07 (this is the proof). Do the gate restoration (step 1) FIRST, before any perf commits land, so deltas attribute per commit — it's independent of the other slices. ## Files to change From 703c690e28403b1000f687397c25e307681c9f65 Mon Sep 17 00:00:00 2001 From: ivndev001 Date: Fri, 21 Aug 2026 08:54:35 +0000 Subject: [PATCH 2/3] docs: correct residual CI facts flagged by deep review Both review lenses on PR #443 flagged inherited clauses my rewrite had re-anchored as current fact: - suite job boots only a Redis service container (no Postgres anywhere; dummy app is sqlite3) - bench results go to the job summary + sticky PR comment, not artifacts, and only on PRs matching bench.yml's paths filter, not every PR - release-gate bullets said "matrix" while the section above now (correctly) says no version matrix exists - runner-variable enumeration was missing the detect jobs; noted that release/pages/dependabot stay on ubuntu-latest by design - plan banner retitled "Executed; one instruction superseded" (slice is status: complete in status.yml, not superseded) and the no-hard-coding imperative scoped to the bench job (release/dependabot hard-code ubuntu-latest deliberately for credential containment) Co-Authored-By: Claude Fable 5 --- docs/idea/06-performance.md | 2 +- docs/idea/11-testing-ci.md | 12 ++++++------ .../101-faster-than-sidekiq/08-bench-gate-verify.md | 11 ++++++----- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/idea/06-performance.md b/docs/idea/06-performance.md index d0b176ba..b8608820 100644 --- a/docs/idea/06-performance.md +++ b/docs/idea/06-performance.md @@ -55,7 +55,7 @@ Every release must run, and must not regress on: 4. Swarm boot time, Rails-app baseline. 5. Memory per worker post-boot, Rails-app baseline. -The benchmark job runs in CI wherever the `vars.WURK_BENCH_RUNNER` repository variable points (`ubuntu-latest` when unset). Results uploaded as artifacts. PR comment shows delta vs main. Greater than 5% regression flags the PR. +The benchmark job runs in CI wherever the `vars.WURK_BENCH_RUNNER` repository variable points (`ubuntu-latest` when unset). Results are published to the job summary and a sticky PR comment showing the delta vs main. Greater than 5% regression flags the PR. ## What actually gates a merge diff --git a/docs/idea/11-testing-ci.md b/docs/idea/11-testing-ci.md index 984a0252..1b03d156 100644 --- a/docs/idea/11-testing-ci.md +++ b/docs/idea/11-testing-ci.md @@ -35,22 +35,22 @@ A dedicated CI job runs the test suites of widely-used Sidekiq ecosystem gems (s ## CI: GitHub Actions -Runner selection is a repository variable, not a hard-coded label: `vars.WURK_CI_RUNNER` for the test, parity, lint, frontend, and ecosystem jobs, `vars.WURK_BENCH_RUNNER` for the benchmark job. Both fall through to stock `ubuntu-latest` when unset, and fork PRs are pinned to `ubuntu-latest` unconditionally. CI runs: +Runner selection is a repository variable, not a hard-coded label: `vars.WURK_CI_RUNNER` for the detect, test, parity, lint, frontend, and ecosystem jobs, `vars.WURK_BENCH_RUNNER` for the benchmark job. Both fall through to stock `ubuntu-latest` when unset, and fork PRs are pinned to `ubuntu-latest` unconditionally. Release, pages, and dependabot workflows stay on `ubuntu-latest` by design (credential containment). CI runs: - Test suite (one full run on the newest Ruby + newest Rails, coverage gate folded in — no version matrix) - Ecosystem compat suite - Benchmark suite -- Docs site build +- Docs site build (pages.yml, `ubuntu-latest`) The test workflow's suite job: - Checks out the repo. - Sets up Ruby via `ruby/setup-ruby` with bundler cache. -- Boots Redis and Postgres service containers. +- Boots a Redis service container. - Runs the dummy app setup. - Runs the full Minitest suite in parallel mode. -The benchmark job runs wherever `vars.WURK_BENCH_RUNNER` points and uploads results as artifacts. A bot comments deltas vs main on every PR. Regressions greater than 5% flag the PR. +The benchmark job runs wherever `vars.WURK_BENCH_RUNNER` points and publishes the delta vs main to the job summary and a sticky PR comment, on PRs that touch a bench input (`lib/`, `exe/`, `bench/`, `bin/bench-compare`, the Rakefile, Gemfile/gemspec, or the workflow itself). Regressions greater than 5% flag the PR. ## Coverage @@ -60,8 +60,8 @@ SimpleCov with branch coverage. CI fails when branch coverage on the gem's main Before a tag is cut: -- Full matrix green. -- Ecosystem compat matrix green. +- Test suite green. +- Ecosystem compat suite green. - Benchmark suite reports no regressions vs the previous tag. - Precompiled assets bundle is fresh. - Parity test SHA pin matches the latest Sidekiq main we've reviewed. diff --git a/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md b/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md index ae31756f..dc005cbd 100644 --- a/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md +++ b/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md @@ -1,10 +1,11 @@ # 08 — Bench harness, CI gate, final verification -> **Superseded (2026-08-21).** This plan step predates #430, which removed hard-coded runner labels -> from CI. Step 1's `blacksmith-8vcpu-ubuntu-2404` instruction and its "Per CI standard (CLAUDE.md)" -> citation are stale: `CLAUDE.md` now states runner selection is a repository variable -> (`vars.WURK_BENCH_RUNNER` for bench, `ubuntu-latest` fallback) — do not hard-code a runner label. -> `bench.yml` already exists on `main`. Kept unedited below as an executed-plan record. +> **Executed; one instruction superseded (2026-08-21).** This plan step predates #430, which removed +> hard-coded runner labels from CI. Step 1's `blacksmith-8vcpu-ubuntu-2404` instruction and its +> "Per CI standard (CLAUDE.md)" citation are stale: `CLAUDE.md` now states runner selection is a +> repository variable (`vars.WURK_BENCH_RUNNER` for bench, `ubuntu-latest` fallback) — do not +> hard-code a runner label on the bench job. `bench.yml` already exists on `main`. Kept unedited +> below as an executed-plan record. > Part of [`overview.md`](overview.md). Depends on: 02–07 (this is the proof). Do the gate restoration (step 1) FIRST, before any perf commits land, so deltas attribute per commit — it's independent of the other slices. From 2a9dcd66c0099f358e94d3d86ef5adac76b02494 Mon Sep 17 00:00:00 2001 From: ivndev001 Date: Fri, 21 Aug 2026 09:04:10 +0000 Subject: [PATCH 3/3] docs: name deploy-demo among the by-design ubuntu-latest workflows Round-2 adversarial review: the by-design list omitted deploy-demo.yml, which holds the long-lived DOCR_TOKEN and is the workflow a future self-hosted-runner migration must not move. Also: spec-docs named as the one hard-coded job in test.yml, bench delta is vs the PR's base (not main), 06-performance carries the fork pin + paths-filter condition, and the banner no longer asserts a count of superseded instructions. Co-Authored-By: Claude Fable 5 --- docs/idea/06-performance.md | 2 +- docs/idea/11-testing-ci.md | 4 ++-- .../08/06/101-faster-than-sidekiq/08-bench-gate-verify.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/idea/06-performance.md b/docs/idea/06-performance.md index b8608820..081d99fb 100644 --- a/docs/idea/06-performance.md +++ b/docs/idea/06-performance.md @@ -55,7 +55,7 @@ Every release must run, and must not regress on: 4. Swarm boot time, Rails-app baseline. 5. Memory per worker post-boot, Rails-app baseline. -The benchmark job runs in CI wherever the `vars.WURK_BENCH_RUNNER` repository variable points (`ubuntu-latest` when unset). Results are published to the job summary and a sticky PR comment showing the delta vs main. Greater than 5% regression flags the PR. +The benchmark job runs in CI wherever the `vars.WURK_BENCH_RUNNER` repository variable points (`ubuntu-latest` when unset; fork PRs are pinned to `ubuntu-latest`, and the job only runs when a bench input changed). Results are published to the job summary and a sticky PR comment showing the delta vs the PR's base. Greater than 5% regression flags the PR. ## What actually gates a merge diff --git a/docs/idea/11-testing-ci.md b/docs/idea/11-testing-ci.md index 1b03d156..7f3364f4 100644 --- a/docs/idea/11-testing-ci.md +++ b/docs/idea/11-testing-ci.md @@ -35,7 +35,7 @@ A dedicated CI job runs the test suites of widely-used Sidekiq ecosystem gems (s ## CI: GitHub Actions -Runner selection is a repository variable, not a hard-coded label: `vars.WURK_CI_RUNNER` for the detect, test, parity, lint, frontend, and ecosystem jobs, `vars.WURK_BENCH_RUNNER` for the benchmark job. Both fall through to stock `ubuntu-latest` when unset, and fork PRs are pinned to `ubuntu-latest` unconditionally. Release, pages, and dependabot workflows stay on `ubuntu-latest` by design (credential containment). CI runs: +Runner selection is a repository variable, not a hard-coded label: `vars.WURK_CI_RUNNER` for the detect, test, parity, lint, frontend, and ecosystem jobs, `vars.WURK_BENCH_RUNNER` for the benchmark job. Both fall through to stock `ubuntu-latest` when unset, and fork PRs are pinned to `ubuntu-latest` unconditionally. Release, deploy-demo, pages, and dependabot workflows stay on `ubuntu-latest` by design (credential containment), as does test.yml's `spec-docs` job, which needs neither Ruby nor Redis. The headline suites: - Test suite (one full run on the newest Ruby + newest Rails, coverage gate folded in — no version matrix) - Ecosystem compat suite @@ -50,7 +50,7 @@ The test workflow's suite job: - Runs the dummy app setup. - Runs the full Minitest suite in parallel mode. -The benchmark job runs wherever `vars.WURK_BENCH_RUNNER` points and publishes the delta vs main to the job summary and a sticky PR comment, on PRs that touch a bench input (`lib/`, `exe/`, `bench/`, `bin/bench-compare`, the Rakefile, Gemfile/gemspec, or the workflow itself). Regressions greater than 5% flag the PR. +The benchmark job runs wherever `vars.WURK_BENCH_RUNNER` points and publishes the delta vs the PR's base to the job summary and a sticky PR comment, on PRs that touch a bench input (`lib/`, `exe/`, `bench/`, `bin/bench-compare`, the Rakefile, Gemfile/gemspec, or the workflow itself). Regressions greater than 5% flag the PR. ## Coverage diff --git a/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md b/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md index dc005cbd..8889a01f 100644 --- a/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md +++ b/docs/plans/2026/08/06/101-faster-than-sidekiq/08-bench-gate-verify.md @@ -1,7 +1,7 @@ # 08 — Bench harness, CI gate, final verification -> **Executed; one instruction superseded (2026-08-21).** This plan step predates #430, which removed -> hard-coded runner labels from CI. Step 1's `blacksmith-8vcpu-ubuntu-2404` instruction and its +> **Executed; the runner instruction is superseded (2026-08-21).** This plan step predates #430, which +> removed hard-coded runner labels from CI. Step 1's `blacksmith-8vcpu-ubuntu-2404` instruction and its > "Per CI standard (CLAUDE.md)" citation are stale: `CLAUDE.md` now states runner selection is a > repository variable (`vars.WURK_BENCH_RUNNER` for bench, `ubuntu-latest` fallback) — do not > hard-code a runner label on the bench job. `bench.yml` already exists on `main`. Kept unedited