Adds a standing, codified regression test suite (tests/regression/) so we can modify the cc-ci server without silently breaking it. Not a prompt — a deterministic pytest artifact runnable on-demand.
test_canaries.py — 7 parametrized canaries with @pytest.mark.canary / @pytest.mark.canary_fast
README.md — cadence policy, how to run, how to add a canary
tests/custom-html-bkp-bad/ — cc-ci recipe for the backup-tier RED canary (custom-html without backupbot labels → backup yields no artifact → backup=RED)
tests/custom-html-rst-bad/ — cc-ci recipe for the restore-tier RED canary (no pre_backup hook → snapshot has no marker → restore=RED)
Canaries (7 total)
ID
Recipe
Expected
Verified
good-simple
custom-html-tiny @ 435df8fc
GREEN
✓ rc=0, install/upgrade=pass
good-significant
lasuite-docs @ 290a8ad7
GREEN
✓ rc=0, all tiers pass
bad-false-green
custom-html @ 71e7326a (v5-stale-docroot)
RED
✓ rc=1, custom=fail
bad-install
custom-html-tiny @ 4ae88661 (bad image)
RED (install)
✓ rc=1, install=fail
bad-upgrade
custom-html-tiny @ 4ae88661 (bad image)
RED (upgrade)
✓ rc=1, install=pass, upgrade=fail
bad-backup
custom-html-bkp-bad @ b6fe99de
RED (backup)
✓ rc=1, install=pass, backup=fail
bad-restore
custom-html-rst-bad @ 9a73a184
RED (restore)
✓ rc=1, install/backup=pass, restore=fail
How to run
# On cc-ci server (requires abra, Docker, Swarm):
cc-ci-run -m pytest tests/regression/ -m canary -v # full suite
cc-ci-run -m pytest tests/regression/ -m canary_fast -v # fast RED subset (~2-3 min each)
Cadence policy
Do NOT run on every commit. These are slow + resource-heavy (lasuite-docs full lifecycle = 10-20 min). Run deliberately: before server releases, polishing passes, on-demand pre-merge. See tests/regression/README.md.
Do not merge
This PR is for operator review only — loops never merge.
## Summary
Adds a standing, codified regression test suite (`tests/regression/`) so we can modify the cc-ci server without silently breaking it. Not a prompt — a deterministic pytest artifact runnable on-demand.
## What is in this PR
**`tests/regression/`**
- `conftest.py` — `run_recipe_ci()` wrapper + stage assertion helpers (`stage_has_passing_test`, `stage_has_failing_test`)
- `test_canaries.py` — 7 parametrized canaries with `@pytest.mark.canary` / `@pytest.mark.canary_fast`
- `README.md` — cadence policy, how to run, how to add a canary
**`tests/custom-html-bkp-bad/`** — cc-ci recipe for the backup-tier RED canary (custom-html without backupbot labels → backup yields no artifact → backup=RED)
**`tests/custom-html-rst-bad/`** — cc-ci recipe for the restore-tier RED canary (no pre_backup hook → snapshot has no marker → restore=RED)
## Canaries (7 total)
| ID | Recipe | Expected | Verified |
|----|--------|----------|----------|
| good-simple | custom-html-tiny @ 435df8fc | GREEN | ✓ rc=0, install/upgrade=pass |
| good-significant | lasuite-docs @ 290a8ad7 | GREEN | ✓ rc=0, all tiers pass |
| bad-false-green | custom-html @ 71e7326a (v5-stale-docroot) | RED | ✓ rc=1, custom=fail |
| bad-install | custom-html-tiny @ 4ae88661 (bad image) | RED (install) | ✓ rc=1, install=fail |
| bad-upgrade | custom-html-tiny @ 4ae88661 (bad image) | RED (upgrade) | ✓ rc=1, install=pass, upgrade=fail |
| bad-backup | custom-html-bkp-bad @ b6fe99de | RED (backup) | ✓ rc=1, install=pass, backup=fail |
| bad-restore | custom-html-rst-bad @ 9a73a184 | RED (restore) | ✓ rc=1, install/backup=pass, restore=fail |
## How to run
```bash
# On cc-ci server (requires abra, Docker, Swarm):
cc-ci-run -m pytest tests/regression/ -m canary -v # full suite
cc-ci-run -m pytest tests/regression/ -m canary_fast -v # fast RED subset (~2-3 min each)
```
## Cadence policy
**Do NOT run on every commit.** These are slow + resource-heavy (lasuite-docs full lifecycle = 10-20 min). Run deliberately: before server releases, polishing passes, on-demand pre-merge. See `tests/regression/README.md`.
## Do not merge
This PR is for operator review only — loops never merge.
Seven canaries prove both halves of the server's job:
- GREEN: good apps are reported healthy (good-simple + good-significant)
- RED: broken apps are caught at intended tier (false-green guard + 4 per-tier)
Fixtures: custom-html-bkp-bad (backup tier RED) + custom-html-rst-bad (restore tier RED).
All 7 canaries verified on live server (see STATUS-regression.md for artifacts).
Not wired to per-commit CI — run on-demand: pytest -m canary tests/regression/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Closing as superseded. The canary suite (tests/regression/) landed directly on main 2026-06-02 (regression phase, Adversary-verified) — already identical in main. Branch is hundreds of commits behind; merging would revert later work (~12.9k deletions). Not merging.
Closing as **superseded**. The canary suite (tests/regression/) landed directly on main 2026-06-02 (regression phase, Adversary-verified) — already identical in main. Branch is hundreds of commits behind; merging would revert later work (~12.9k deletions). Not merging.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Adds a standing, codified regression test suite (
tests/regression/) so we can modify the cc-ci server without silently breaking it. Not a prompt — a deterministic pytest artifact runnable on-demand.What is in this PR
tests/regression/conftest.py—run_recipe_ci()wrapper + stage assertion helpers (stage_has_passing_test,stage_has_failing_test)test_canaries.py— 7 parametrized canaries with@pytest.mark.canary/@pytest.mark.canary_fastREADME.md— cadence policy, how to run, how to add a canarytests/custom-html-bkp-bad/— cc-ci recipe for the backup-tier RED canary (custom-html without backupbot labels → backup yields no artifact → backup=RED)tests/custom-html-rst-bad/— cc-ci recipe for the restore-tier RED canary (no pre_backup hook → snapshot has no marker → restore=RED)Canaries (7 total)
How to run
Cadence policy
Do NOT run on every commit. These are slow + resource-heavy (lasuite-docs full lifecycle = 10-20 min). Run deliberately: before server releases, polishing passes, on-demand pre-merge. See
tests/regression/README.md.Do not merge
This PR is for operator review only — loops never merge.
Closing as superseded. The canary suite (tests/regression/) landed directly on main 2026-06-02 (regression phase, Adversary-verified) — already identical in main. Branch is hundreds of commits behind; merging would revert later work (~12.9k deletions). Not merging.
Pull request closed