From 1ca7b2328b427f386a150d8d357986507277526b Mon Sep 17 00:00:00 2001 From: autonomic-bot Date: Sat, 30 May 2026 02:11:52 +0100 Subject: [PATCH] =?UTF-8?q?claim(Q4.5):=20mattermost-lts=20full=20lifecycl?= =?UTF-8?q?e=20GREEN=20=E2=80=94=20P4=20restore=20fixed=20via=20recipe-PR?= =?UTF-8?q?=20recipe-maintainers/mattermost-lts#1=20(published=20restore?= =?UTF-8?q?=20was=20a=20no-op);=205=20tiers=20+=204=20custom=20pass,=20dep?= =?UTF-8?q?loy-count=3D1,=20clean=20teardown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- machine-docs/STATUS-2.md | 56 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/machine-docs/STATUS-2.md b/machine-docs/STATUS-2.md index b04c7d8..4b50447 100644 --- a/machine-docs/STATUS-2.md +++ b/machine-docs/STATUS-2.md @@ -62,7 +62,7 @@ deploy-count=1, clean teardown; the retry log proves the transient (POST 500 att attempt 2) and the synapse capture log shows the cause (restore-tier `DROP DATABASE FORCE` closed synapse's DB pool: `psycopg2.InterfaceError: connection already closed`). -**Q4.5 mattermost-lts — recipe-PR `recipe-maintainers/mattermost-lts#1` opened, validation run IN FLIGHT @2026-05-30** (`/root/ccci-mattermost-pr.log`, REF=4ca7f418). The recipe restore was a no-op (no `backupbot.restore.post-hook`); PR adds the coop-cloud `/pg_backup.sh` convention (dump-only backup + terminate/FORCE-drop/recreate/reimport restore). EXPECTED: restore tier `test_restore_returns_state` now GREEN. Original finding: Full run +**Q4.5 mattermost-lts — ✅ FULL LIFECYCLE GREEN @2026-05-30 — CLAIMED (see ## Gate Q4.5), awaiting Adversary.** P4 restore gap (recipe restore was a no-op) fixed via recipe-PR `recipe-maintainers/mattermost-lts#1`; all 5 tiers + 4 custom green, deploy-count=1, clean teardown; log `/root/ccci-mattermost-final.log`. (Original finding below.) Original finding: Full run `/root/ccci-mattermost-full2.log`: install+upgrade+backup+custom GREEN (deploy-count=1; ci_marker survives UPGRADE + captured at backup; 3 functional pass incl. create_message_roundtrip §4.3), but **restore FAILS** — `test_restore_returns_state`: `relation "ci_marker" does not exist` after restore. @@ -215,6 +215,60 @@ SKIP no longer yields a GREEN `!testme`. ## Gate +**Gate: Q4.5 mattermost-lts — CLAIMED @2026-05-30, awaiting Adversary.** + +**WHAT.** mattermost-lts (team-chat; mattermost app + in-stack postgres) runs its **full lifecycle +GREEN** — install + upgrade (real prev→PR-head crossover) + backup + restore + custom — with the P4 +data-integrity gap fixed via recipe-PR `recipe-maintainers/mattermost-lts#1`. +- **P4 (headline):** the *published* recipe's restore was a NO-OP — it dumped the DB on backup + (pg_dump pre-hook) but shipped NO `backupbot.restore.post-hook`, and archived the whole live PGDATA + dir; backupbot's restore extracted files under the running postgres (which never reloads PGDATA + without a restart) → the DB silently kept the un-restored state. Proven by the P4 overlay: + `test_restore_returns_state` was RED (`relation "ci_marker" does not exist` after restore). recipe-PR + #1 switches to the coop-cloud `/pg_backup.sh` convention (dump-only backup + terminate/FORCE-drop/ + recreate/reimport restore). With it the postgres `ci_marker` survives backup→restore: restore PASSES. + ci_marker also survives the upgrade. Non-vacuous (`ops.pre_restore` DROPs the table + asserts). +- **P2 — vacuous:** no `recipe-info/mattermost-lts/tests/` corpus (documented in PARITY.md). +- **P3 (≥2 SEPARATE characteristic functional tests):** `test_create_message.py::test_create_message_roundtrip` + (§4.3: admin → team → channel → POST message → GET back by id, text round-trips) + + `test_multiuser_message.py::test_second_user_reads_first_users_message` (DISTINCT path — the defining + team-chat behaviour: a 2nd user, created via admin + added to team+channel, logs in with its OWN + session and sees user_a's message; cross-user delivery, not a self read-back). Both share one + deterministic admin (`_mm.bootstrap_admin`) since mattermost allows only ONE unauthenticated + first-user creation. (`test_system_ping_ok` + `test_root_serves` are supporting liveness, not counted + to the floor.) +- **P5/P6 N/A:** postgres is in-recipe (no external dep); characteristic behaviour fully exercised via + the REST API (message create/read + multi-user delivery), no browser-only UX owed. + +**HOW (Adversary, cold, on cc-ci):** +``` +ssh cc-ci 'cd /root/ && git pull && RECIPE=mattermost-lts PR=1 \ + REF=4ca7f4182d837b1c73632841cf883fd9c0ba241b SRC=recipe-maintainers/mattermost-lts \ + cc-ci-run runner/run_recipe_ci.py' +``` +(private mirror clone authenticates via `/run/secrets/bridge_gitea_token`.) + +**EXPECTED:** +- RUN SUMMARY: `deploy-count = 1`; `install/upgrade/backup/restore/custom` **all pass**. +- Upgrade: `head_ref=4ca7f418 chaos-version=4ca7f418 version=2.1.9+10.11.15→2.1.10+10.11.18` (HC1). +- Restore: `tests/mattermost-lts/test_restore.py::test_restore_returns_state PASSED` (ci_marker + survives). **Negative control: `RECIPE=mattermost-lts PR=0`** (published recipe, no fix) → restore + tier FAILS `relation "ci_marker" does not exist` — the bug this PR repairs. +- Custom — **4 PASS**: `test_create_message_roundtrip`, `test_second_user_reads_first_users_message`, + `test_system_ping_ok`, `test_root_serves`. +- Clean teardown: post-run no `matt-*` stack/volumes/secrets. + +**WHERE.** recipe-PR `recipe-maintainers/mattermost-lts#1`, branch `ci/pg-restore`, head +`4ca7f4182d837b1c73632841cf883fd9c0ba241b` (mirror synced from upstream coop-cloud/mattermost-lts). +cc-ci tests: `tests/mattermost-lts/{recipe_meta.py,PARITY.md,ops.py,test_install.py,test_upgrade.py, +test_backup.py,test_restore.py,functional/{_mm.py,test_create_message.py,test_multiuser_message.py, +test_health_check.py}}`. cc-ci commits: `012a477` (postgres-service fix), `7672f11` (P3 2nd test + +PARITY/DECISIONS), `e9d1e89` (shared-admin bootstrap). DECISIONS.md "mattermost-lts postgres restore +recipe-PR". Authoritative log `/root/ccci-mattermost-final.log` (5 tiers + 4 custom green, +deploy-count=1, clean teardown). + +--- + **Gate: Q4.1 matrix-synapse — ✅ Adversary PASS @2026-05-30 (REVIEW-2 `c503f7d`).** Cold full lifecycle GREEN; §4.3 register retry reproduced + verified non-vacuous; P4 ci_marker survives; clean teardown. No veto. (Claim detail retained below.)