status(2): ghost run-4 — P3 create-post GREEN, P4 backup/upgrade GREEN, restore RED (recipe gap→PR), +U upgrade fix committed; not claimed

This commit is contained in:
2026-05-30 05:51:46 +01:00
parent a7e2af444a
commit 1570ccb698

View File

@ -49,22 +49,36 @@ tree must carry:
- **Q5** — Completeness + docs; flip `## DONE`.
## In flight
**Q4.4 ghost — P4 + §4.3 create-post AUTHORED, full-lifecycle run IN FLIGHT (NOT claimed) @2026-05-30
(commit `b4d03cc`).** Closes the open DEFERRED ghost create-post item + adds the missing P4 overlay.
- **WHAT authored:** `tests/ghost/``ops.py` + `test_{upgrade,backup,restore}.py` (P4: seed a
`ci_marker` row into the **MySQL** `ghost` DB via the `mysql` CLI in the `db` service — the recipe
is MySQL not sqlite; stale comment fixed); `functional/_ghost.py` (cookie-aware Ghost Admin API
client, stdlib http.cookiejar, Origin CSRF hdr) + `functional/test_post_roundtrip.py` (§4.3:
setup owner → session → POST published post w/ unique marker → GET read-back, title+html assert).
- **HOW to verify (Adversary, on claim):** `ssh cc-ci 'cd /root/<clone> && git pull && RECIPE=ghost
PR=0 SRC=recipe-maintainers/ghost STAGES=install,upgrade,backup,restore,custom cc-ci-run
runner/run_recipe_ci.py'`.
- **EXPECTED:** install/upgrade/backup/custom GREEN, deploy-count=1; `test_create_post_roundtrip`
PASSED (publishing path). **P4 restore may go RED** — ghost recipe has a `mysqldump --tab` backup
pre-hook but **no `backupbot.restore.*` hook** + the mysql data volume isn't backupbot-labelled, so
the dump is never reimported (same defect class as immich#1 / mattermost-lts#1). If RED →
recipe-PR adding a mysqldump-reimport restore post-hook; NOT a weakened test.
- **WHERE:** commit `b4d03cc`; log on node `/root/ccci-ghost-full.log`. NOT yet claimed — validating.
**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).
- **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`.
- **P4 markers — backup+upgrade GREEN, restore RED (non-vacuous):** `test_upgrade_preserves_state
PASSED` + `test_backup_captures_state PASSED` (MySQL `ci_marker` in the `ghost` DB survives
upgrade + present at backup). `test_restore_returns_state FAILED` — marker did NOT survive restore
(generic `test_restore_healthy` PASSED, so app is up; my overlay caught the data loss). ROOT CAUSE:
recipe has `mysqldump --tab` backup pre-hook but **no `backupbot.restore.*` hook** + mysql data
volume not backupbot-labelled → dump never reimported. Same class as immich#1 / mattermost-lts#1.
**FIX = recipe-PR adding a mysql dump+reimport restore hook (mirror mattermost pg_backup.sh).
Ghost NOT yet mirrored on gitea (404) — must mirror first (plan §0b).**
- **TWO harness/infra fixes en route (NO test weakened):**
(1) `compose.ccci-health.yml` deploy overlay (commit `13da216`): raises app healthcheck
start_period to 900s. Ghost's ~6-9min fresh-DB migration was being killed by the recipe's 1m-grace
healthcheck mid-flight, leaving a stale `migrations_lock` → `MigrationsAreLockedError` deadlock (hit
on BOTH 2- and 4-vCPU; round-trip-bound, not CPU). Overlay validated working: migration ran past
the old kill point, install converged 1/1. Wired via COMPOSE_FILE + install_steps.sh +
CHAOS_BASE_DEPLOY.
(2) `generic.assert_upgraded` (commit `a7e2af4`): strip abra's `+U` untracked-tree marker from
chaos-version before the HC1 commit match. The untracked overlay makes abra stamp
`chaos-version='<commit>+U'`; the commit equals head_ref (HC1 ok) but `+U` broke the exact-prefix
match → spurious upgrade FAIL. Fix preserves HC1. **Needs a re-run to confirm upgrade now PASSES.**
- **NEXT:** (a) re-run to confirm upgrade-tier GREEN with `a7e2af4`; (b) mirror ghost + recipe-PR for
the mysql restore hook; (c) final green full-lifecycle run with the PR (restore→GREEN); then CLAIM.
- **Operator note:** cc-ci VM bumped 2→4 vCPU, sole VM on b1 (mid-session). Heavy ghost migration
still needs the healthcheck overlay regardless (round-trip-bound).
**Q3.5 immich — ✅ Adversary PASS @2026-05-30 (REVIEW-2 `11c5498`).** Cold full lifecycle GREEN,
deploy-count=1, real upgrade crossover, P4 restore `test_restore_returns_state` PASSED (non-vacuous;