Skip to content

test(ci): port orangecat's sweep coverage before its copy is deleted - #34

Merged
github-actions[bot] merged 1 commit into
masterfrom
test/port-orangecat-sweep-coverage
Aug 20, 2026
Merged

test(ci): port orangecat's sweep coverage before its copy is deleted#34
github-actions[bot] merged 1 commit into
masterfrom
test/port-orangecat-sweep-coverage

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

orangecat is the last repo converting to the central sweep, and — like evig — it turned out to be one of only two repos that ever wrote tests for it. Its suite covered four things the canonical suite did not:

  • deferring while the base run is still in progress, without re-running it (re-running would cancel an in-flight run)
  • waiting when the newest base CI run belongs to an older commit — merging on that green would batch unverified commits, the exact thing one-car-per-sweep prevents
  • the red-base carve-out — the most dangerous logic in the script: a PR green on every job the base fails may merge onto the red base. Three cases: full coverage merges, no coverage refused, partial coverage refused (covering some failing jobs is covering none — the uncovered one still lands broken)
  • a green base merging normally without ever consulting the carve-out

Ported before the orangecat conversion deletes its copies, so no assertion is lost between the two commits.

Mutation-proven

Disabling the uncovered-jobs refusal turns exactly the two refusal cases red while the merge case and the other fourteen stay green.

17 cases total, all green.

🤖 Generated with Claude Code

orangecat is the last repo converting to the central sweep, and — like evig —
it turned out to be one of only two repos that ever wrote tests for it. Its
suite covered four things the canonical suite did not:

  - deferring while the base run is still in progress (without re-running it,
    which would CANCEL an in-flight run)
  - waiting when the newest base CI run belongs to an older commit — merging on
    that green would batch unverified commits, the exact thing one-car-per-sweep
    exists to prevent
  - THE RED-BASE CARVE-OUT, the most dangerous logic in the script: a PR green
    on every job the base fails may merge onto the red base, because its checks
    ran on the merge result. Three cases: full coverage merges, no coverage is
    refused, PARTIAL coverage is refused (covering some failing jobs is
    covering none — the uncovered one still lands broken).
  - a green base merging normally without ever consulting the carve-out

Ported here BEFORE the orangecat conversion deletes its copies, so no assertion
is ever lost between the two commits.

The harness grew optional per-case fixtures (base run status/headSha, the PR
list payload, the pr-view answer, the red-jobs list), each RESET on every call
so one case's fixture cannot leak into the next.

Mutation-proven: disabling the uncovered-jobs refusal turns exactly the two
refusal cases red while the merge case and the other fourteen stay green.

17 cases total, all green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions
github-actions Bot merged commit 20f48ee into master Aug 20, 2026
1 check passed
@github-actions
github-actions Bot deleted the test/port-orangecat-sweep-coverage branch August 20, 2026 12:35
github-actions Bot pushed a commit to bitbaum/orangecat that referenced this pull request Aug 20, 2026
This repo was the last of the two deliberately excluded from the fleet rollout.
Its copy of auto-merge-sweep.sh shipped merges by re-arming CI so that cd.yml
(workflow_run on CI) would fire — a chain with a known hole: a CI run started by
GITHUB_TOKEN emits no workflow_run event, so CD never fires for an automated
merge. The canonical sweep closes that with a RECONCILER, enabled here via
`deploy_workflow: cd.yml`: every sweep compares main's tip against the last
successful cd.yml run and dispatches it directly when they differ. The
`post-main` hand-off in ci.yml stays as a second path; the reconciler is the
net under both.

THE TESTS MOVED BEFORE THE SCRIPT WAS DELETED. This repo was one of only two in
the fleet that ever wrote tests for the sweep, and its suite covered four things
the canonical suite did not — the in-progress defer, the stale-run wait, and
the full red-base carve-out set (green-on-failing-jobs merges; no coverage
refused; PARTIAL coverage refused). All of it is now in
dotfiles/scripts/ci/test-auto-merge-sweep.sh (17 cases, mutation-proven),
ported in bitbaum/dotfiles#34 so no assertion is lost between the two
commits.

One block of auto-merge-base-guard.test.ts was NOT about the sweep: the source
assertions on refresh-e2e-reset-tokens.mjs (fixture keyed on GITHUB_RUN_ATTEMPT,
leftover fixture cleared instead of failed on). That script stays in this repo,
so its guard stays too — moved to e2e-reset-fixture.test.ts, its own file,
because the thing it tests no longer shares context with a script this repo no
longer carries.

Verified before deleting the local copy: diffed it against the canonical and
accounted for every differing line — all of them are main_* vs base_* naming
for identical logic, the cancelled-rerun the canonical generalises, and the CI
re-arm the canonical does via REARM_WORKFLOWS. The update-branch behaviour this
repo's branch-currency tests pinned is in the canonical verbatim.

CLAUDE.md repointed: the policy section and the two-hand-offs section both named
scripts/ci/auto-merge-sweep.sh, which would have become a lie the moment this
merged.

Fleet duplication: 8 copies -> 7.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
catomean added a commit to bitbaum/orangecat that referenced this pull request Aug 20, 2026
This repo was the last of the two deliberately excluded from the fleet rollout.
Its copy of auto-merge-sweep.sh shipped merges by re-arming CI so that cd.yml
(workflow_run on CI) would fire — a chain with a known hole: a CI run started by
GITHUB_TOKEN emits no workflow_run event, so CD never fires for an automated
merge. The canonical sweep closes that with a RECONCILER, enabled here via
`deploy_workflow: cd.yml`: every sweep compares main's tip against the last
successful cd.yml run and dispatches it directly when they differ. The
`post-main` hand-off in ci.yml stays as a second path; the reconciler is the
net under both.

THE TESTS MOVED BEFORE THE SCRIPT WAS DELETED. This repo was one of only two in
the fleet that ever wrote tests for the sweep, and its suite covered four things
the canonical suite did not — the in-progress defer, the stale-run wait, and
the full red-base carve-out set (green-on-failing-jobs merges; no coverage
refused; PARTIAL coverage refused). All of it is now in
dotfiles/scripts/ci/test-auto-merge-sweep.sh (17 cases, mutation-proven),
ported in bitbaum/dotfiles#34 so no assertion is lost between the two
commits.

One block of auto-merge-base-guard.test.ts was NOT about the sweep: the source
assertions on refresh-e2e-reset-tokens.mjs (fixture keyed on GITHUB_RUN_ATTEMPT,
leftover fixture cleared instead of failed on). That script stays in this repo,
so its guard stays too — moved to e2e-reset-fixture.test.ts, its own file,
because the thing it tests no longer shares context with a script this repo no
longer carries.

Verified before deleting the local copy: diffed it against the canonical and
accounted for every differing line — all of them are main_* vs base_* naming
for identical logic, the cancelled-rerun the canonical generalises, and the CI
re-arm the canonical does via REARM_WORKFLOWS. The update-branch behaviour this
repo's branch-currency tests pinned is in the canonical verbatim.

CLAUDE.md repointed: the policy section and the two-hand-offs section both named
scripts/ci/auto-merge-sweep.sh, which would have become a lie the moment this
merged.

Fleet duplication: 8 copies -> 7.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
github-actions Bot pushed a commit to bitbaum/orangecat that referenced this pull request Aug 20, 2026
* deps: bump tailwindcss from 3.4.18 to 4.3.3

Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 3.4.18 to 4.3.3.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.3.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* deps: bump eslint from 9.39.5 to 10.8.1 (#708)

* deps: bump eslint from 9.39.5 to 10.8.1

Bumps [eslint](https://github.com/eslint/eslint) from 9.39.5 to 10.8.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v9.39.5...v10.8.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.8.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(lint): make eslint 10 flat config work with eslint-config-next

ESLint 10 removed context.getFilename() (used by eslint-plugin-react's
version-detect codepath) and dropped the implicit scopeManager.addGlobals
Next's bundled babel-eslint-parser relied on for plain JS. Pin an explicit
React version so detect never runs, and use plain espree for non-TS files.
Also bumps eslint-plugin-unused-imports to 4.4.1 for ESLint 10 peer support.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com>

* ci: call the central auto-merge sweep — its coverage moved first (#719)

This repo was the last of the two deliberately excluded from the fleet rollout.
Its copy of auto-merge-sweep.sh shipped merges by re-arming CI so that cd.yml
(workflow_run on CI) would fire — a chain with a known hole: a CI run started by
GITHUB_TOKEN emits no workflow_run event, so CD never fires for an automated
merge. The canonical sweep closes that with a RECONCILER, enabled here via
`deploy_workflow: cd.yml`: every sweep compares main's tip against the last
successful cd.yml run and dispatches it directly when they differ. The
`post-main` hand-off in ci.yml stays as a second path; the reconciler is the
net under both.

THE TESTS MOVED BEFORE THE SCRIPT WAS DELETED. This repo was one of only two in
the fleet that ever wrote tests for the sweep, and its suite covered four things
the canonical suite did not — the in-progress defer, the stale-run wait, and
the full red-base carve-out set (green-on-failing-jobs merges; no coverage
refused; PARTIAL coverage refused). All of it is now in
dotfiles/scripts/ci/test-auto-merge-sweep.sh (17 cases, mutation-proven),
ported in bitbaum/dotfiles#34 so no assertion is lost between the two
commits.

One block of auto-merge-base-guard.test.ts was NOT about the sweep: the source
assertions on refresh-e2e-reset-tokens.mjs (fixture keyed on GITHUB_RUN_ATTEMPT,
leftover fixture cleared instead of failed on). That script stays in this repo,
so its guard stays too — moved to e2e-reset-fixture.test.ts, its own file,
because the thing it tests no longer shares context with a script this repo no
longer carries.

Verified before deleting the local copy: diffed it against the canonical and
accounted for every differing line — all of them are main_* vs base_* naming
for identical logic, the cancelled-rerun the canonical generalises, and the CI
re-arm the canonical does via REARM_WORKFLOWS. The update-branch behaviour this
repo's branch-currency tests pinned is in the canonical verbatim.

CLAUDE.md repointed: the policy section and the two-hand-offs section both named
scripts/ci/auto-merge-sweep.sh, which would have become a lie the moment this
merged.

Fleet duplication: 8 copies -> 7.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(a11y): close the white-on-accent class with a gate, not a third sweep (#720)

PR #703 swept 13 files to text-on-accent, but three labels survived: the
Button 'accent' cva variant in config/design-system.ts (which is exactly
what renders the header's Get Started and the landing page's Meet your
Cat — measured live at 3.10:1), plus two inline chips. White on
--public-accent is 3.10:1 against a 4.5:1 floor; text-on-accent is 6.10:1.

Second fix of the same class, so the class is now closed: a new
check:accent-ink gate (mutation-tested — reverting the variant makes it
exit 1) runs at the head of verify. The broader design:check stays
unwired because legacy violations would turn the base red; this gate is
narrow and green today.

Co-authored-by: Georgy Butaev <41178744+g-but@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(build): migrate to Tailwind v4

Keeps tailwind.config.ts as the single source of truth via v4's @config
bridge directive (same pattern already validated in solon) rather than a
full CSS-first rewrite — that migration (OKLCH, dropping the JS config
entirely) is tracked separately in this repo's own docs as future work,
not something to bundle into a dependency-version bump.

- postcss.config.js: tailwindcss + autoprefixer -> @tailwindcss/postcss
  (v4 handles vendor prefixing internally)
- globals.css: @tailwind directives -> @import "tailwindcss" + @config
- tailwind.config.ts: darkMode now needs a 2-element tuple; safelist no
  longer exists on Config (v4 moved pattern-based safelisting to
  @source inline() in CSS) — ported the dynamic initiative-color and
  gradient-opacity patterns there verbatim
- globals.css: three dead custom-class-into-@apply chains (input,
  card, viewport-fix+safe-area-padding) that v3 silently no-op'd are
  now hard errors in v4 — inlined the actual declarations they meant

Verified: full production build succeeds, lint clean, and visually
spot-checked 3 pages (home, pricing, ecosystem) in a real browser
against the built output — borders, colors, cards, badges all intact.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Georgy Butaev <41178744+g-but@users.noreply.github.com>
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