From 109229bd88e6707b1e675443e7b324068473157e Mon Sep 17 00:00:00 2001 From: autonomic-bot Date: Sat, 30 May 2026 07:26:35 +0100 Subject: [PATCH] =?UTF-8?q?claim(Q4.4):=20ghost=20full=20lifecycle=20GREEN?= =?UTF-8?q?=20=E2=80=94=20P3=20create-post=20+=20P4=20data-integrity=20(in?= =?UTF-8?q?cl=20restore)=20via=20recipe-PR=20#1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All 5 tiers + create-post pass, deploy-count=1, upgrade crossover 1.1.1->1.3.0 (chaos-version 6d6227f7+U), P4 restore non-vacuous (catalogue/no-fix negative control RED 'ci_marker doesn't exist'), clean teardown. recipe-maintainers/ghost#1 adds the mysqldump backup+reimport-on-restore hook (was backup-but-no-restore, immich/mattermost class). Healthcheck overlay + +U HC1 fix en route. Closes DEFERRED ghost create-post. Log /root/ccci-ghost-pr1d.log. Awaiting Adversary. --- machine-docs/DEFERRED.md | 6 +++++- machine-docs/STATUS-2.md | 46 +++++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/machine-docs/DEFERRED.md b/machine-docs/DEFERRED.md index 1f1158a..532c502 100644 --- a/machine-docs/DEFERRED.md +++ b/machine-docs/DEFERRED.md @@ -132,7 +132,11 @@ before the build is called done) — but does **not** force closure. that requires Socket.IO client primitives in the harness (whichever comes first). - **Linked IDEA:** `cc-ci-plan/IDEAS.md` — *Optional `--extra` flag for heavy/operational tests*. -### 2026-05-28 — ghost create-a-post round-trip (§4.3 prescribed) +### 2026-05-28 — ghost create-a-post round-trip (§4.3 prescribed) — ✅ RESOLVED @2026-05-30 +- [x] **RESOLVED @2026-05-30 (Builder):** `tests/ghost/functional/test_post_roundtrip.py` (helper + `_ghost.py`) authored + GREEN (`test_create_post_roundtrip PASSED`, full-lifecycle run + `/root/ccci-ghost-pr1d.log`). Owner setup → admin session cookie → POST published post (unique + marker) → GET read-back (title+html). Part of the Q4.4 ghost claim (STATUS-2 ## Gate Q4.4). - [ ] **What:** Add `tests/ghost/functional/test_post_roundtrip.py` exercising Ghost's admin setup + token-auth + POST `/ghost/api/v3/admin/posts/` (create) + GET `/ghost/api/v3/admin/posts//` (read back), asserting the post round-trips. diff --git a/machine-docs/STATUS-2.md b/machine-docs/STATUS-2.md index b08f88a..fd794b6 100644 --- a/machine-docs/STATUS-2.md +++ b/machine-docs/STATUS-2.md @@ -49,10 +49,15 @@ tree must carry: - **Q5** — Completeness + docs; flip `## DONE`. ## In flight -**Q4.4 ghost — P3 create-post GREEN + P4 overlays NON-VACUOUS; restore gap → recipe-PR PENDING; NOT -claimed @2026-05-30.** Full-lifecycle run-4 (`/root/ccci-ghost-4.log`, commit `13da216`+`a7e2af4`) -RESULTS: deploy-count=1; **install PASS, backup PASS, custom PASS**; upgrade FAIL (now fixed, see -below); restore FAIL (real recipe gap, see below). +**Q4.4 ghost — ✅ FULL LIFECYCLE GREEN — CLAIMED @2026-05-30, awaiting Adversary (see ## Gate Q4.4).** +Final run `/root/ccci-ghost-pr1d.log` (`RECIPE=ghost PR=1 REF=6d6227f7 SRC=recipe-maintainers/ghost`): +deploy-count=1; **install/upgrade/backup/restore/custom ALL PASS**; create-post P3 PASSED; P4 restore +`test_restore_returns_state PASSED` (ci_marker survived backup→restore) — non-vacuous (catalogue/no-fix +runs had it RED `ci_marker doesn't exist`); upgrade crossover 1.1.1→1.3.0 (PR head, chaos-version +`6d6227f7+U`); clean teardown. Detail below + ## Gate Q4.4. + +**(history) run-4 (`/root/ccci-ghost-4.log`, `13da216`+`a7e2af4`):** deploy-count=1; install/backup/ +custom PASS; upgrade FAIL (then-fixed `+U`); restore FAIL (then-fixed via recipe-PR #1). - **P3 create-post — GREEN:** `tests/ghost/functional/test_post_roundtrip.py::test_create_post_roundtrip PASSED (22s)` — owner setup → admin session (cookie) → POST published post (unique marker) → GET read-back, title+html asserted. Closes the DEFERRED ghost create-post item. Helper `_ghost.py`. @@ -263,7 +268,38 @@ SKIP no longer yields a GREEN `!testme`. ## Gate -**Gate: Q4.3 bluesky-pds — ✅ Adversary PASS @2026-05-30 (REVIEW-2 `e45e0ee`).** Cold full lifecycle +**Gate: Q4.4 ghost — CLAIMED @2026-05-30, awaiting Adversary.** Full lifecycle GREEN with recipe-PR; +P3 create-post + P4 data-integrity (incl. restore) real & non-vacuous. + +- **WHAT:** Q4.4 ghost — P1 coverage (full green install+upgrade+backup-restore), P3 (§4.3 create-post + round-trip), P4 (MySQL `ci_marker` survives upgrade + backup + **restore**), P2 N/A (no + recipe-maintainer corpus — documented in `tests/ghost/PARITY.md`). Restore made green by recipe-PR + `recipe-maintainers/ghost#1` (adds a mysqldump backup + reimport-on-restore hook; published recipe + had backup-but-no-restore → silent data loss, same class as immich#1 / mattermost-lts#1). +- **HOW (Adversary cold-verify, own clone):** + `RECIPE=ghost PR=1 REF=6d6227f7ba62435256274073c6bd2d2187c994fc SRC=recipe-maintainers/ghost + STAGES=install,upgrade,backup,restore,custom cc-ci-run runner/run_recipe_ci.py` + Negative control (proves P4-restore non-vacuous): run **without** the PR + (`RECIPE=ghost PR=0 SRC=recipe-maintainers/ghost STAGES=install,upgrade,backup,restore,custom`) → + `test_restore_returns_state` FAILS `Table 'ghost.ci_marker' doesn't exist` (catalogue 1.2.0, no + restore hook). create-post: read `tests/ghost/functional/test_post_roundtrip.py` (setup owner → + admin session cookie → POST published post w/ unique marker → GET read-back, title+html asserted). +- **EXPECTED:** RUN SUMMARY `deploy-count = 1`; `install/upgrade/backup/restore/custom` all `pass`; + `tests/ghost/functional/test_post_roundtrip.py::test_create_post_roundtrip PASSED`; + `tests/ghost/test_restore.py::test_restore_returns_state PASSED` (ci_marker='original' read back); + `tests/ghost/test_backup.py::test_backup_captures_state PASSED`; `test_upgrade_preserves_state + PASSED`; upgrade crossover `1.1.1+6-alpine → 1.3.0+6.21.2-alpine`, chaos-version `6d6227f7+U` + (= PR head, the `+U` untracked-overlay marker tolerated by the `a7e2af4` HC1 fix); clean teardown. +- **WHERE:** cc-ci commits — ghost tests `b4d03cc`, healthcheck overlay `13da216`, `+U` HC1 fix + `a7e2af4`. Recipe-PR `git.autonomic.zone/recipe-maintainers/ghost#1` branch `ci/mysql-backup` head + `6d6227f7ba62435256274073c6bd2d2187c994fc`. Builder full-run log on node `/root/ccci-ghost-pr1d.log`. +- **ENV NOTE (non-blocking):** ghost cold-boot needs the cc-ci healthcheck overlay + (`compose.ccci-health.yml`, start_period 900s) or the ~6-9min fresh MySQL migration is killed → + `migrations_lock` deadlock (DECISIONS 2026-05-30). The mysql:8.0 db healthcheck is ALSO flaky on + cold init (one task may exit137 "unhealthy" then recover 1/1; one install timed out once, pr1c) — + **if a cold-verify install flakes, retry** (it converged on retry, pr1d). Round-trip-bound, not CPU. + + GREEN, deploy-count=1, real upgrade crossover 0.1.1+v0.4→0.2.0+v0.4, P4 atproto account-marker survives backup→restore (non-vacuous, in-band delete-assert), 2 distinct P3 functional, clean teardown. No veto. DONE. (Claim detail retained below.)