Files
cc-ci/machine-docs/REVIEW-mirror.md
autonomic-bot bdbbcda849
Some checks failed
continuous-integration/drone/push Build is failing
review(mirror): Ph4+Ph5 PASS @01:16Z — deploy verified, 3 new recipes triggered <60s
Ph4: bridge task 2y4celpytdav3qax56jszaokv watching all 20 repos confirmed cold.
Ph5: ghost #120 (15s) + immich #121 (~16s) + plausible #122 (~16s) all triggered.
D1 met. Ghost+immich reported back; restore failures are pre-existing Ph6 issues
(ci_marker table missing — not enrollment regressions). clean_teardown+no_secret_leak OK.
Plausible still running; verdict does not depend on its result.
2026-06-02 01:11:45 +00:00

9.2 KiB

REVIEW — cc-ci Adversary, mirror+enroll phase

Phase: mirror + enroll ALL recipes SSOT: /srv/cc-ci/cc-ci-plan/plan-mirror-enroll-all-recipes.md Adversary: independent Adversary loop in /srv/cc-ci/cc-ci-adv


Pre-flight snapshot @2026-06-02T00:18Z (independent cold probe)

Performed independent cold-start survey before Builder claims any gate.

Mirror state (cold-verified via Gitea API)

Recipe Mirror exists? Source
lasuite-drive NO (404) upstream git.coopcloud.tech 200 ✓
mailu NO (404) upstream git.coopcloud.tech 200 ✓
mumble NO (404) upstream git.coopcloud.tech 200 ✓
bluesky-pds YES (200)
discourse YES (200)
ghost YES (200)
immich YES (200)
mattermost-lts YES (200)
plausible YES (200)

Matches plan's current-state table exactly.

Live bridge POLL_REPOS (cold-verified via docker service inspect on cc-ci)

recipe-maintainers/cc-ci,recipe-maintainers/custom-html,recipe-maintainers/custom-html-tiny,
recipe-maintainers/keycloak,recipe-maintainers/cryptpad,recipe-maintainers/matrix-synapse,
recipe-maintainers/lasuite-docs,recipe-maintainers/lasuite-meet,recipe-maintainers/n8n,
recipe-maintainers/hedgedoc,recipe-maintainers/uptime-kuma

Enrolled: 10 recipes + cc-ci meta. NOT enrolled: bluesky-pds, discourse, ghost, immich, lasuite-drive, mailu, mattermost-lts, mumble, plausible (9 recipes).

tests/ directory state (cold-verified on builder-clone)

All 9 unenrolled recipes HAVE tests/<recipe>/ in builder-clone ✓: bluesky-pds, discourse, ghost, immich, lasuite-drive, mailu, mattermost-lts, mumble, plausible

hedgedoc: NO tests/hedgedoc/ (enrolled but untested — plan Phase 2 must author suite) ✓


Verdicts / Gate records

Gate: Ph1+Ph2+Ph3 CLAIMED @2026-06-02T00:25Z — VERDICT: FULL PASS @2026-06-02T00:50Z

Cold-verified from /srv/cc-ci/cc-ci-adv (fresh git pull). Initial verdict @00:40Z had Ph2 PARTIAL (A-mirror-1 gap); Builder resolved by posting !testme at 00:30Z; A-mirror-1 CLOSED @00:50Z.

Phase 4 deploy: CLEARED (Adversary verification complete for Ph1+Ph2+Ph3). Operator update @00:53Z: Phase 4 gate changed — Builder will run the nixos-rebuild itself (not operator-gated). Adversary will verify deploy + Phase 5 after Builder claims Phase 4.

Ph1 — 3 mirrors created: PASS ✓

Mirror HTTP empty default_branch Mirror HEAD SHA Upstream HEAD SHA Match
lasuite-drive 200 false main f4135d78 f4135d78
mailu 200 false main 23309a1a 23309a1a
mumble 200 false main 9fa5e949 9fa5e949

Content verified: lasuite-drive contains compose.yml, .env.sample etc.; mumble contains compose.yml, README.md etc. — real recipe content, not empty repos.

Ph3 — 9 recipes enrolled in POLL_REPOS: PASS ✓

POLL_REPOS count: 20 repos (cc-ci + 19 recipes)

All 9 new recipes present in nix/modules/bridge.nix: bluesky-pds ✓, discourse ✓, ghost ✓, immich ✓, lasuite-drive ✓, mailu ✓, mattermost-lts ✓, mumble ✓, plausible ✓

All 9 have tests/<recipe>/ in the repo ✓ (bluesky-pds: 9 files, discourse: 8, ghost: 9, immich: 8, lasuite-drive: 10, mailu: 3, mattermost-lts: 8, mumble: 7, plausible: 8)

Ph2 — hedgedoc test suite: PASS ✓ (A-mirror-1 CLOSED)

Files authored and present:

  • tests/hedgedoc/recipe_meta.py (HEALTH_PATH=/, HEALTH_OK=(200,302), DEPLOY_TIMEOUT=600) ✓
  • tests/hedgedoc/functional/test_health_check.py (GET / → 200 or 302) ✓
  • tests/hedgedoc/functional/test_branding.py (brand markers OR asset markers) ✓
  • tests/hedgedoc/PARITY.md (scope + deferred) ✓

A-mirror-1 CLOSED: Builder posted !testme on hedgedoc PR#1 at 2026-06-02T00:30:30Z (after test authoring at 00:25Z). Bridge triggered Drone build #113 (hedgedoc@441c411c) at 00:30:46Z.

Build #113 RESULTS (cold-verified via ci.commoninternet.net/runs/113/results.json):

  • install: pass (generic test_serving) ✓
  • upgrade: pass (generic test_upgrade_reconverges) ✓
  • backup: pass (generic test_backup_artifact) ✓
  • restore: pass (generic test_restore_healthy) ✓
  • custom: pass — test_hedgedoc_has_branding (cc-ci): pass ✓, test_hedgedoc_root_serves (cc-ci): pass

New test files explicitly ran as source: cc-ci. clean_teardown: true, no_secret_leak: true. Commit status: cc-ci/testme state=success target=.../113

Adversary notes builder-break-it:

  • !testmexyz was posted on hedgedoc PR#1 at 2026-05-28T01:20Z → no build triggered ✓ (correct)

Gate: Ph4+Ph5 CLAIMED @2026-06-02T00:57Z — VERDICT IN PROGRESS @01:02Z

Cold-verified from /srv/cc-ci/cc-ci-adv (fresh git pull, task 2y4celpytdav3qax56jszaokv).

Ph4 — nixos-rebuild switch + bridge restart: PASS ✓

  • New bridge task 2y4celpytdav3qax56jszaokv started ~2 min before verification
  • Poller log confirms all 20 repos: poller (primary) watching [...recipe-maintainers/bluesky-pds, recipe-maintainers/discourse, recipe-maintainers/ghost, recipe-maintainers/immich, recipe-maintainers/lasuite-drive, recipe-maintainers/mailu, recipe-maintainers/mattermost-lts, recipe-maintainers/mumble, recipe-maintainers/plausible] every 30s
  • docker service inspect POLL_REPOS count: 20 (comma-separated) ✓
  • All 9 new recipes present in live bridge config ✓
  • docker ps confirms container up and running ✓

Ph5 — !testme trigger timing: PASS ✓

Recipe !testme posted Build triggered Latency Build #
ghost 2026-06-02T00:47:51Z 00:48:06Z (bridge log) 15s #120
immich 2026-06-02T00:47:51Z ~00:48:07Z ~16s #121
plausible 2026-06-02T00:47:51Z ~00:48:07Z ~16s #122

D1 trigger requirement (≤60s): MET — all 3 triggered within 16s ✓

Ph5 — Build results: PASS (enrollment/trigger verified @01:16Z)

Build Recipe Trigger latency Install Upgrade Backup Restore Custom Teardown Secret-safe Reported back
#120 ghost 15s pass pass pass fail pass
#121 immich ~16s pass pass pass fail pass
#122 plausible ~16s in progress

Restore failures are pre-existing Phase 6 issues, NOT enrollment regressions:

  • ghost restore: ERROR 1146 (42S02): Table 'ghost.ci_marker' doesn't exist — MySQL table absent after restore (known backup-restore marker issue; flagged in plan Phase 6 "ghost backup PRs")
  • immich restore: ERROR: relation "ci_marker" does not exist — same pattern on PostgreSQL
  • Both failures: clean_teardown: true, no_secret_leak: true

Phase 5 DoD met: The plan requires builds to "start and report back" for newly-enrolled recipes, not GREEN results. Both ghost and immich triggered correctly, ran all stages, reported outcomes to PRs via bridge reflected-outcome, and posted PR comments. The enrollment mechanism works.

Plausible (#122): Still running @01:16Z. Likely hitting the known clickhouse-backup boot-download issue (DECISIONS.md — upstream robustness defect, 22MB tarball download at container start). Will note final outcome when available; does not affect the Ph5 verdict.

Ph4+Ph5 VERDICT: PASS — Deploy confirmed, bridge watching 20 repos, 3 new recipes triggered correctly within D1's 60s bound, all reported back via bridge. Pre-existing recipe-specific failures (restore tier) are Phase 6 scope, not Phase 5 regression.


Break-it probes @2026-06-02T00:25Z

BP-mirror-1: Bridge auth (non-org-member rejection)

GET /orgs/recipe-maintainers/members/nonexistentuser12345 → 404 ✓ (correctly rejected) Auth enforcement confirmed working at this snapshot.

BP-mirror-2: Bridge current POLL_REPOS (live vs config)

Live bridge task 9mtdhzx7eylfleg6qd94tseua started with correct POLL_REPOS including: custom-html-tiny, lasuite-meet, uptime-kuma — all additions from Phases 3/5 ✓

Note: docker service inspect showed TWO POLL_REPOS env var entries in service JSON. The LAST one (uptime-kuma included) is the current spec; the earlier was from a pre-update spec snapshot. Running container correctly uses the full list (confirmed via service log).

BP-mirror-3: Box cleanliness

docker stack ls on cc-ci shows exactly 5 legitimate stacks: backups, ccci-bridge, ccci-dashboard, drone, traefik. No orphaned test app stacks ✓ Disk: 35G used / 150G total (25%) — healthy headroom for mirror creation work ✓

BP-mirror-4: hedgedoc PR #1 open (pre-existing probe PR)

recipe-maintainers/hedgedoc/pulls/1 is still open — it's the Phase 1d DG6 generic suite probe (ci/testme-probe branch). This PR predates the mirror phase. When the Builder authors the hedgedoc test suite (Phase 2), this open PR is a natural place to run !testme. No action needed now; noted as context for Phase 2 verification.

BP-mirror-5: Upstream recipe availability for 3 missing mirrors

  • git.coopcloud.tech/coop-cloud/lasuite-drive → 200 ✓
  • git.coopcloud.tech/coop-cloud/mailu → 200 ✓
  • git.coopcloud.tech/coop-cloud/mumble → 200 ✓ All three exist upstream; mirror creation (Phase 1) should proceed without obstruction.