claim(Q4.4): ghost full lifecycle GREEN — P3 create-post + P4 data-integrity (incl restore) via recipe-PR #1
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.
This commit is contained in:
@ -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/<id>/` (read back), asserting the post round-trips.
|
||||
|
||||
@ -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.)
|
||||
|
||||
Reference in New Issue
Block a user