claim(2): Q4.2 mumble full lifecycle GREEN — awaiting Adversary
mumble (§5 TCP/voice recipe) all 5 tiers green: install+upgrade(real 0.2.0→1.0.0+ crossover, head_ref==chaos-version 9fa5e949)+backup+restore+custom; deploy-count=1; clean teardown. P2=3 parity ports (health_check/mumble_connect/web_client), P3=2 specific (welcome-text + max-users config round-trips over the protocol), P4=sqlite ci_marker survives backup→restore. ready-probe OK (tcp 3x) twice. Harness additions: CHAOS_BASE_DEPLOY, recipe_checkout -f, TCP READY_PROBE; install_steps provides host-ports.yml. Log /root/ccci-mumble-full6.log; HOW/EXPECTED/WHERE in STATUS-2 Gate Q4.2. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -148,7 +148,16 @@ Phase plan: `/srv/cc-ci/cc-ci-plan/plan-phase2-recipe-tests.md`
|
||||
§4.3 prescribed register-2-users + send/receive message). EXTRA_ENV TIMEOUT=900. Cold green
|
||||
after capacity unblock (commit `8350865`). Shell-script parity tests
|
||||
(compress_state/test_complexity_limit/test_purge) deferred with technical rationale.
|
||||
- [ ] **Q4.2** — mumble: enroll; specific (connect a client/CLI, channel presence beyond TCP health).
|
||||
- [x] **Q4.2** — mumble: **FULL LIFECYCLE GREEN @2026-05-29 — CLAIMED (STATUS-2 Gate Q4.2), awaiting
|
||||
Adversary.** TCP/voice recipe (not HTTP-native) enrolled via mumbleweb (HTTP readiness + web_client
|
||||
parity) + host-ports (64738 on host for protocol tests). P2: 3 parity ports (health_check→
|
||||
test_tcp_health, mumble_connect→test_protocol_handshake [TLS handshake+channel presence+ServerSync],
|
||||
web_client→test_web_client). P3: 2 specific (test_welcome_text_roundtrip + test_server_config_limits
|
||||
— config round-trips over the protocol). P4: sqlite ci_marker in /data/mumble-server.sqlite survives
|
||||
backup→mutate→restore. install+upgrade(real 0.2.0→1.0.0+ crossover, head_ref==chaos-version)+backup+
|
||||
restore+custom all pass; deploy-count=1; clean teardown. Harness: CHAOS_BASE_DEPLOY flag,
|
||||
recipe_checkout -f, TCP READY_PROBE (wait_ready_probes); install_steps provides host-ports.yml to
|
||||
versions predating it. Commits 6841048+6bf0425+999dd0d+a0fd58b+1890cb5+ec76072; log ccci-mumble-full6.
|
||||
- [x] **Q4.3** — bluesky-pds: enrolled. install_steps.sh generates per-run secp256k1 PLC rotation
|
||||
key (recipe's pds_plc_rotation_key is generate=false). PARITY.md, recipe_meta.py + 3
|
||||
functional tests (health_check, describe_server, session_auth-requires-auth). Cold green
|
||||
|
||||
@ -70,9 +70,10 @@ config round-trips over the protocol) + P4 (ops/test_backup/test_restore via sql
|
||||
test_install overlay + PARITY.md + install_steps.sh (provides host-ports overlay to versions
|
||||
predating it) + `CHAOS_BASE_DEPLOY` harness flag (untracked overlay trips abra's pinned clean-tree
|
||||
check → chaos base deploy). Smoke proved web 200 + `Mumble`/`config.js`, TCP 64738 host-published,
|
||||
sqlite3 in container. **Full harness run QUEUED behind the Adversary's in-flight plausible cold run
|
||||
(`/root/adv-q47-plausible-cold.log`, stack `plau-0c70fd`) — single node; not deploying concurrently
|
||||
to protect their clean cold-verify signal.**
|
||||
sqlite3 in container. **FULL LIFECYCLE GREEN @2026-05-29 — CLAIMED (see ## Gate Q4.2), awaiting
|
||||
Adversary.** All 5 tiers pass, deploy-count=1, HC1 upgrade crossover 0.2.0→1.0.0+, P4 ci_marker
|
||||
survives, clean teardown; log `/root/ccci-mumble-full6.log`. Needed 4 fixes en route (host-ports for
|
||||
old versions, CHAOS_BASE_DEPLOY, recipe_checkout -f, TCP voice-server READY_PROBE) — all in DECISIONS.
|
||||
|
||||
**Q3.3 lasuite-meet — ✅ Adversary PASS @2026-05-29 (REVIEW-2 `a46f7d4`).** Cold-verify all 5 tiers
|
||||
GREEN, real upgrade crossover, meeting_flow + OIDC PASSED, ci_marker survives, clean teardown; WebRTC
|
||||
@ -166,6 +167,73 @@ SKIP no longer yields a GREEN `!testme`.
|
||||
|
||||
## Gate
|
||||
|
||||
**Gate: Q4.2 mumble — CLAIMED @2026-05-29, awaiting Adversary.**
|
||||
|
||||
**WHAT.** mumble (the §5 TCP/voice recipe — first non-HTTP-native recipe) runs its **full lifecycle
|
||||
GREEN**: install + upgrade (real prev→PR-head crossover) + backup + restore + custom. `deploy-count=1`,
|
||||
clean teardown. Enrolled by deploying two upstream overlays via
|
||||
`COMPOSE_FILE=compose.yml:compose.mumbleweb.yml:compose.host-ports.yml`:
|
||||
- **mumbleweb** → an HTTP web-client sidecar (HEALTH_PATH `/` → 200) giving the generic harness its
|
||||
serving/readiness signal + the `web_client.py` parity surface.
|
||||
- **host-ports** → publishes 64738 (tcp+udp, mode:host) on the cc-ci host so the on-host (cc-ci-run)
|
||||
protocol tests connect to 127.0.0.1:64738.
|
||||
- **P2 (3 parity ports, all green):** `health_check.py`→`functional/test_tcp_health.py` (TCP 64738);
|
||||
`mumble_connect.py`→`functional/test_protocol_handshake.py` (TLS handshake → server Version → auth
|
||||
accepted → ≥1 channel = channel presence → ServerSync, via vendored `functional/_mumble_proto.py`);
|
||||
`web_client.py`→`functional/test_web_client.py` (HTTPS 200 + `Mumble`/`config.js`/`<!DOCTYPE html>`).
|
||||
No recipe-maintainer mumble test omitted. `tests/mumble/PARITY.md` has the mapping.
|
||||
- **P3 (2 specific, beyond parity, version-independent config round-trips):**
|
||||
`functional/test_welcome_text_roundtrip.py` (deploy-set `WELCOME_TEXT` marker
|
||||
`cc-ci-mumble-welcome-7f3a9c` surfaces in the ServerSync welcome_text) +
|
||||
`functional/test_server_config_limits.py` (deploy-set non-default `USERS=42` surfaces as
|
||||
ServerConfig.max_users==42). Both prove deploy-time config propagated into the running murmur server.
|
||||
- **P4 (real backup data-integrity):** `ops.py` seeds a `ci_marker` row into
|
||||
`/data/mumble-server.sqlite` (the exact file the recipe's backupbot `.backup`/restore hooks dump),
|
||||
`test_backup.py` asserts it at backup time, `pre_restore` drops it, `test_restore.py` asserts it
|
||||
returns as `original`. sqlite busy timeout set via the silent `.timeout` dot-command.
|
||||
|
||||
Harness/enrollment additions (DECISIONS.md "mumble" entries): `recipe_meta.CHAOS_BASE_DEPLOY` flag +
|
||||
`lifecycle._recipe_meta_flag` + a `deploy_app` branch (the cc-ci-provided untracked host-ports overlay
|
||||
trips abra's pinned clean-tree check → chaos base deploy of the checked-out pinned version, not
|
||||
LATEST); `abra.recipe_checkout` now `git checkout -f` (the version-pinning checkout must yield the
|
||||
exact ref tree, robust to the cc-ci overlay colliding with head_ref's tracked copy); `wait_ready_probes`
|
||||
now supports a TCP probe (`{tcp_host,tcp_port,stable=N}`) so readiness gates on the **voice server**
|
||||
(64738) being stably listening — HEALTH_PATH only proves the mumble-web sidecar, and after the chaos
|
||||
upgrade redeploy the host-mode 64738 port churns (old task releases → new binds), which otherwise let
|
||||
backup-bot exec into a not-running app container (409). `tests/mumble/install_steps.sh` provides an
|
||||
identical `compose.host-ports.yml` to versions predating it (the upgrade base 0.2.0+; upstream added it
|
||||
in 1.0.0). No browser flow (P6 N/A — mumble's core UX is the native client over the voice protocol,
|
||||
covered by the handshake test; the web UI is asserted via test_web_client).
|
||||
|
||||
**HOW (Adversary, cold, on cc-ci):**
|
||||
```
|
||||
ssh cc-ci 'cd /root/<your-clone> && git pull && RECIPE=mumble PR=0 cc-ci-run runner/run_recipe_ci.py'
|
||||
```
|
||||
|
||||
**EXPECTED:**
|
||||
- RUN SUMMARY: `deploy-count = 1 (expect 1)`; `install/upgrade/backup/restore/custom` **all `pass`**.
|
||||
- Base deploy log: `deploy_app(mumble@0.2.0+v1.6.870-0): CHAOS_BASE_DEPLOY set → chaos base deploy …`
|
||||
and `mumble install_steps: provided compose.host-ports.yml to recipe checkout (mumble)`.
|
||||
- `ready-probe OK (tcp 3x): 127.0.0.1:64738` appears **TWICE** (post-install + post-upgrade).
|
||||
- Upgrade: `upgrade→PR-head: head_ref=9fa5e949 chaos-version=9fa5e949 version=0.2.0+v1.6.870-0→
|
||||
1.0.0+v1.6.870-0` (real crossover; head_ref==chaos-version = HC1).
|
||||
- Custom tier — **5 PASS**: `test_tcp_health`, `test_protocol_handshake`
|
||||
(`test_handshake_completes_with_channel_presence`), `test_web_client`
|
||||
(`test_web_client_serves_mumble_web_ui`), `test_welcome_text_roundtrip`
|
||||
(`test_configured_welcome_text_surfaces_in_serversync`), `test_server_config_limits`
|
||||
(`test_configured_max_users_surfaces_in_serverconfig`).
|
||||
- P4: `test_backup_captures_state` + `test_restore_returns_state` **PASSED** (ci_marker survives).
|
||||
- Clean teardown: post-run `docker stack ls | grep mumb` → empty.
|
||||
|
||||
**WHERE.** Commits `6841048` (test content) + `6bf0425` (install_steps host-ports) + `999dd0d`
|
||||
(CHAOS_BASE_DEPLOY) + `a0fd58b` (sqlite .timeout) + `1890cb5` (recipe_checkout -f) + `ec76072`
|
||||
(TCP READY_PROBE). Files: `tests/mumble/{recipe_meta.py,PARITY.md,ops.py,install_steps.sh,
|
||||
compose.host-ports.yml,test_install.py,test_backup.py,test_restore.py,functional/*.py}`,
|
||||
`runner/harness/{lifecycle.py,abra.py}`. Log `/root/ccci-mumble-full6.log`. Isolation diagnostic
|
||||
(backup/restore green on a stable deploy, no upgrade): `/root/ccci-mumble-diag.log`.
|
||||
|
||||
---
|
||||
|
||||
**Gate: HQ1 image pre-pull — ✅ Adversary PASS @2026-05-29 (REVIEW-2 `0215bd2`).**
|
||||
|
||||
**WHAT.** `runner/harness/lifecycle.prepull_images(recipe, domain)` warms the local image store BEFORE
|
||||
|
||||
Reference in New Issue
Block a user