Commit Graph

821 Commits

Author SHA1 Message Date
e8e52cf4c6 claim(conc): M1 CLAIMED — branch restructure/concurrency complete (P1-P5 + tests, tip d3fe9e2), awaiting Adversary
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:33:59 +00:00
c51692b57e chore(conc): pre-review P3+P4 — zero dangling refs, ABRA_DIR ordering clean (not a verdict)
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:28:41 +00:00
ffcf441364 journal(conc): P1-P4 evidence (live smokes on cc-ci) + pre-existing abra app ls FATA observation
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:21:17 +00:00
2080d734d3 status(conc): P1-P4 on branch (b492f99..91d3cc7), tests/concurrency next
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:20:20 +00:00
f98b444559 decisions(conc): record P3 install_steps.sh ABRA_DIR path fix (guardrail justification)
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:18:45 +00:00
08b629f52a chore(conc): pre-review P1+P2 — 4 break-it concerns tested + refuted (not a verdict)
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:16:41 +00:00
e350c94c3f chore(conc): record cold-verify environment (cc-ci-run pytest env, M1 plan)
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:03:23 +00:00
45afccbef5 status(conc): bootstrap phase state files — P1 in flight on branch restructure/concurrency
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 04:00:12 +00:00
48d03d8405 chore(conc): seed REVIEW-conc.md — adversary online, baseline pre-read (no verdict)
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-10 03:56:26 +00:00
5b65c6caa3 docs: concurrency spec — how parallel recipe runs stay safe (for review/restructuring)
All checks were successful
continuous-integration/drone/push Build is passing
Documents the capacity=2 concurrent-run system as landed in c0df77d,
68ef0f8, e6d55b5: config knobs, isolation model, per-recipe flock,
active-run registry + three-way janitor, convergence interactions,
failure-mode guarantees, and known limitations / restructuring
candidates.
2026-06-10 03:05:20 +00:00
157d06dc77 Merge pull request 'test(plausible): psql -q in _register_site — -t does not suppress command tags' (#9) from test/plausible-psql-quiet into main
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2026-06-09 23:12:37 +00:00
e6d55b53c7 fix(harness): a paused swarm update is settled — only active states block convergence
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
68ef0f8 made services_converged() require UpdateStatus settled, treating
'paused' as in flight. But swarm's default update-failure-action pauses the
update on a single task flicker and the flag persists FOREVER (until the next
update): immich CI 241 had the app service 'paused' from a restart during
restore while the service was back at 1/1 and healthy — every subsequent wait
hung to its deadline and the run had to be killed.

Only 'updating' and 'rollback_started' now block convergence: those are the
states swarm is actively driving (the 238 stop-first race lives in 'updating').
'paused'/'rollback_paused' make no progress without intervention, so waiting on
them is pointless — N/N replicas is already required, and the HTTP-health and
tier assertions still gate whether the app actually works.

lint: PASS, unit tests: 138 passed.
2026-06-09 23:07:36 +00:00
79c652ddd3 test(plausible): psql -q in _register_site — -t does not suppress command tags
All checks were successful
continuous-integration/drone/push Build is passing
psql -tAc still prints INSERT/CREATE command tags (e.g. "INSERT 0 1"), so
_register_site asserted out == site against "INSERT 0 1\nsite" and both
event-tracking roundtrip tests failed on their very first run (build 237 —
the custom tier had never executed before; install always failed earlier).
-q suppresses the tags; verified against the recipe db container.
2026-06-09 22:50:55 +00:00
68ef0f84fb fix(harness): convergence must span stop-first rolling updates (immich 238 backup 409)
Some checks reported errors
continuous-integration/drone/push Build is passing
continuous-integration/drone Build was killed
services_converged() accepted N/N replicas as converged — but a chaos redeploy
that changes a non-app service image (immich PR #2 moves the db to the
vectorchord pin) registers a stop-first rolling update that swarm may not have
STARTED yet: the OLD task still shows 1/1, the wait passes, and the task dies
seconds later. Build 238: backupbot resolved the db hook container, the task
was killed in the gap, and the pre-hook exec crashed the whole backup with a
409 -> no dump in the snapshot -> restore had nothing -> RED.

- services_converged() now also requires every service's swarm UpdateStatus to
  be settled ('', completed, rollback_completed) — updating/paused/rollback in
  flight is NOT converged. Strictly stricter: no gate is weakened.
- backup_app() gains a bounded (300s) settle-wait before 'abra app backup
  create' as defence in depth; on timeout the backup still runs and the tier's
  assertion delivers the verdict.

lint: PASS, unit tests: 138 passed.
2026-06-09 22:10:55 +00:00
c828f6cdd0 Merge remote-tracking branch 'origin/test/plausible-upgrade-base-3.0.1'
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
2026-06-09 21:57:39 +00:00
c0df77d0d9 fix(harness): make concurrent recipe runs safe (per-recipe flock + active-run registry)
All checks were successful
continuous-integration/drone/push Build is passing
capacity=2 went live with three stale capacity=1-era assumptions that corrupted
concurrent runs (immich 229/230 '/pg_backup.sh: No such file'):

- ~/.abra/recipes/<recipe> is ONE shared working tree that fetch_recipe rm-rf's/
  reclones and the upgrade tier git-checkouts mid-run. Same-recipe runs now
  serialise on an exclusive flock (/run/lock/cc-ci-recipe-<recipe>.lock), taken
  in main() BEFORE fetch_recipe and held for the whole run; the kernel releases
  it on any process death, so there is no stale-lock failure mode. Different
  recipes still run in parallel.

- CCCI_JANITOR_MAX_AGE=0 made a starting build reap ANY in-flight run app. Every
  run now registers its app domain + pid in /run/cc-ci-active/<domain> before
  app creation; the janitor checks the owner: alive (pid is a live run_recipe_ci
  process) -> never reaped; dead -> reaped immediately; unknown (pre-registry or
  post-reboot) -> age fallback (default 2h). The MAX_AGE=0 env override is gone
  from .drone.yml.

- .drone.yml: concurrency.limit 1 -> 2 to match DRONE_RUNNER_CAPACITY=2; the
  'safe because capacity=1' comments now describe the flock+registry model.

lint: PASS, unit tests: 138 passed.
2026-06-09 21:56:25 +00:00
9a7772563a style: repo-wide lint pass — make the lint gate green again
Push builds have been RED on the lint step since ~build 209 from accumulated
formatting drift. This is the mechanical cleanup: ruff format + ruff --fix
(UP038 isinstance unions, SIM105 contextlib.suppress, UP031 f-strings, SIM115
tempfile context manager), shfmt -i 2 -ci, nixpkgs-fmt/statix/deadnix (merged
attrsets, dropped unused lib args), yamllint, and shell quoting fixes in
tests/lasuite-docs/setup_custom_tests.sh. No behaviour changes intended;
lint: PASS, unit tests: 138 passed.
2026-06-09 21:56:15 +00:00
1ba0d961a3 test(plausible): pin UPGRADE_BASE_VERSION to 3.0.1+v2.0.0 (newest published)
Some checks failed
continuous-integration/drone/push Build is failing
The harness default base (recipe_versions[-2]) resolves to 3.0.0+v2.0.0 for
the open 3.1.0 upgrade PR. That release predates x86_64 support in the
clickhouse entrypoint (added 3.0.1): on this amd64 host it downloads
clickhouse-backup-linux-x86_64.tar.gz — a deterministic HTTP 404 — and with
set -e + a silenced wget the container exits 1 before logging anything,
crash-looping until the deploy times out. The base therefore can never
converge, regardless of the PR content (the published tag is immutable).

This is exactly the case the harness documents for UPGRADE_BASE_VERSION:
a PR adding its version ABOVE the newest published tag, where the true
predecessor is [-1] (3.0.1+v2.0.0), not [-2]. The upgrade tier then tests
the real operator path 3.0.1 -> 3.1.0.

Pairs with recipe-maintainers/plausible#3 (its !testme can only go green
once this lands).
2026-06-09 19:24:21 +00:00
e76d4005ab chore(runner): raise CI concurrency to 2 (parallel recipe testing) (#8)
Some checks reported errors
continuous-integration/drone/push Build is failing
continuous-integration/drone Build was killed
2026-06-09 18:35:19 +00:00
c32e6105d0 feat(reports): same-origin /pr proxy for the Recipe Report live STATUS column (#7)
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is failing
2026-06-09 13:16:12 +00:00
c51cd84159 feat(harness): intentional skips + custom-html-tiny functional test; 4-rung ladder (#6)
Some checks failed
continuous-integration/drone/push Build is failing
Declare intentional skips + custom-html-tiny functional test; 4-rung level ladder

- recipe_meta.EXPECTED_NA = {rung: reason} lists intentionally-skipped rungs; any
  essential rung skipped and not listed is unintentional. Skips still cap the level
  (never inflate). results.json: skips:{intentional,unintentional} + level_cap_rung.
- Level ladder = the four essential rungs (install, upgrade, backup/restore,
  functional; top = L4). integration & recipe-local are optional, not leveled
  (SSO still enforced for the run verdict, unchanged).
- Card shows skipped rungs as INTENTIONAL SKIP (green, reason below) / UNINTENTIONAL
  SKIP (amber); level badge gains an expected/gap? third segment.
- custom-html-tiny: functional serve test (exact-byte round-trip + 404); declares
  backup_restore intentionally skipped (stateless static server).

Independently verified by the adversary: 138 unit tests pass cold; live full-stage
run on custom-html-tiny green (upgrade tier ran; level 2; correct skips/badge);
clean teardown.
2026-06-09 03:12:11 +00:00
f5a6f7196f feat(reports): static site at report.ci.commoninternet.net for the weekly Recipe Report
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
nginx:alpine swarm service serving /var/lib/cc-ci-reports behind traefik
(Host(report.ci.commoninternet.net) + wildcard TLS), deployed by a reconcile
oneshot mirroring dashboard.nix. The /recipe-report skill writes the weekly
HTML pages there; nginx serves them live. report.ci.* already resolves
(wildcard *.ci DNS) and is covered by the wildcard cert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 22:56:21 +00:00
a78ec2de12 feat(bridge): post a NEW comment per !testme (not edit-in-place)
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
Operator preference: each !testme should get its own comment response so a
re-run is visible in the PR timeline. process_testme now always posts a fresh
 placeholder comment; watch_and_reflect edits THAT comment to the result.
(Was: reuse/edit a single marker comment in place — which made re-runs on an
unchanged head invisible, only updating commit status.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:25:39 +00:00
ef65d898ed status(regression): ## DONE — D-final PASS @03:36Z; all 7 canaries verified; phase complete
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
Adversary verdict: D-final PASS @2026-06-02T03:36Z. All 6 DoD items Adversary-verified:
DoD#1 suite committed, DoD#2 good-simple+good-significant GREEN, DoD#3 false-green caught,
DoD#4 4 per-tier RED canaries, DoD#5 README, DoD#6 PR#5 open for operator review.

PR#5: #5 — do not merge.
Builder loop stopped.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 03:38:24 +00:00
0dea3410ee review(regression): D-final PASS — all 7 canaries cold-verified; PR#5 open; DoD complete
Some checks failed
continuous-integration/drone/push Build is failing
Cold-verified from cc-ci artifact dirs + PR branch collect:
- DoD#1: 7 tests collect from regression-canaries branch ✓
- DoD#2: good-simple (install/upgrade=pass, test_serving) ✓; good-significant run-2 (all tiers pass, test_serving_and_frontend) ✓
- DoD#3: bad-false-green RED, rc!=0 false-green guard has teeth ✓
- DoD#4: all 4 per-tier RED canaries at correct tiers (install/upgrade/backup/restore) ✓
- DoD#5: README cadence+canaries+add-instructions ✓
- DoD#6: PR#5 state=open, merged=False ✓

Inbox consumed; no vetoes; phase DONE pending operator PR review.
2026-06-02 03:37:18 +00:00
117028ff0a inbox(adversary): final gate — good-significant GREEN, PR#5 open
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 03:35:08 +00:00
c90cf1e1d0 claim(D-final): all 7 canaries verified + PR#5 opened — FINAL gate claim
Some checks failed
continuous-integration/drone/push Build is failing
good-significant re-run (regression-good-significant-2) completed GREEN:
- install=pass, upgrade=pass, backup=pass, restore=pass, custom=pass
- clean_teardown=true, no_secret_leak=true
- All semantic assertions executed (test_serving_and_frontend, test_upgrade_reconverges,
  test_upgrade_preserves_data, test_backup_captures_state, test_restore_returns_state, OIDC)

PR#5 opened: #5
Branch regression-canaries→main, 10 files, 704 insertions. Do not merge.

All DoD items: D1 (suite committed) D2 (good canaries GREEN) D3 (false-green caught)
D4 (4 per-tier RED) D5 (README) D6 (PR open). Awaiting Adversary final PASS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 03:34:51 +00:00
49a56e873e review(regression): A-reg-2+A-reg-3 CLOSED; 6/7 canaries cold-verified; good-significant+PR still pending
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 02:18:40 +00:00
f2fa38df6f status(regression): D-final CLAIMED — all 7 canaries verified; PR pending
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 02:18:35 +00:00
31b71f9949 fix(regression): correct bad-backup SHA to b6fe99de (has .env.sample)
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 02:15:58 +00:00
9449b22f24 fix(regression): separate recipe for bad-restore (custom-html-rst-bad)
Some checks failed
continuous-integration/drone/push Build is failing
Having test_backup.py in custom-html-bkp-bad caused both bad-backup and bad-restore
to fail at the backup tier. Create custom-html-rst-bad with its own cc-ci test dir
that has ops.py+test_restore.py but NO test_backup.py, so:
- backup: only generic test_backup_artifact → PASS (snapshot exists)
- restore: pre_restore writes 'mutated', marker stays 'mutated' after restore → FAIL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 02:15:03 +00:00
74364d0a46 fix(regression): bad-restore uses custom-html-bkp-bad + ops.py+test_restore.py
Some checks failed
continuous-integration/drone/push Build is failing
backup-bot-two ignores backupbot.backup.path labels and always backs up
the full volume, making path-based restore-RED infeasible.

New approach: custom-html-bkp-bad has no pre_backup → marker never seeded
→ backup snapshot has no ci-marker.txt. pre_restore writes 'mutated'.
After restore: marker is MISSING or 'mutated' → test_restore_returns_state FAILS.
upgrade=skip (no version tags) is acceptable since passing_tiers_before=[install,backup].

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 02:12:28 +00:00
c7ede9cfbb fix(regression): add test_backup.py for bad-backup canary — assertion-level failure
Some checks failed
continuous-integration/drone/push Build is failing
No ops.py::pre_backup for custom-html-bkp-bad → ci-marker.txt never seeded.
test_backup_captures_state asserts marker=='original' → MISSING → FAIL → backup=RED.
This works regardless of backupbot label behavior.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 02:09:29 +00:00
3b7267cbee fix(regression): use custom-html-bkp-bad recipe for bad-backup canary
Some checks failed
continuous-integration/drone/push Build is failing
backupbot-two ignores nonexistent backup paths and backs up the whole
volume, making the bad-path approach unreliable. New approach:
- Create recipe-maintainers/custom-html-bkp-bad on Gitea (custom-html
  without backupbot.backup=true label) — SHA 4e584063a99a
- Add tests/custom-html-bkp-bad/recipe_meta.py with BACKUP_CAPABLE=True
  so the harness runs the backup tier despite auto-detect returning False
- Without a labeled container, backup-bot-two produces no snapshot →
  parse_snapshot_id=None → test_backup_artifact fails → backup=RED ✓

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 02:07:06 +00:00
090724ec80 fix(regression): correct SHAs for bad-backup/bad-restore (A-reg-3) + consume inbox
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
Both compose.yml uploads had empty files due to a bash encoding bug.
Fixed via Python API upload; new SHAs:
- regression-bad-backup: cd52b3a (backupbot.backup.path=/nonexistent-path-cc-ci-canary-bad)
- regression-bad-restore: 7e03499 (backup targets .backup-data subdir + command creates it)

Adversary confirmed bad-install ✓ and bad-upgrade ✓ from run artifacts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 02:00:51 +00:00
3859cd7f40 review(regression): A-reg-3 — bad-backup/bad-restore compose.yml empty (wrong tier fails); bad-install/bad-upgrade PASS cold-verified
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 01:59:50 +00:00
cf405b4195 feat(regression): add 4 per-tier RED canaries (DoD#4) + canary_fast marker
Some checks failed
continuous-integration/drone/push Build is failing
Four new per-tier RED canaries prove the server catches failure at every
lifecycle tier:

- bad-install: custom-html-tiny @ regression-bad-image (4ae88661)
  nonexistent image → prepull fails → install=fail
  STAGES=install → no prev-version lookup → chaos deploy of HEAD

- bad-upgrade: same branch + SHA, STAGES=install,upgrade
  install uses prev-version (good image) → PASS
  upgrade chaos checks out HEAD (bad image) → prepull fails → FAIL

- bad-backup: custom-html @ regression-bad-backup (e1e3c5fc)
  backupbot.backup.path=/nonexistent-path-cc-ci-canary-bad
  abra app backup create fails → backup=fail

- bad-restore: custom-html @ regression-bad-restore (5a481cc1)
  backup targets .backup-data/ subdir (not where ci-marker.txt lives)
  backup succeeds; restore puts .backup-data back but NOT the marker
  marker stays "mutated" → test_restore_returns_state FAILS → restore=fail

Each test asserts: rc!=0, failing_tier="fail", prior tiers="pass".
Adds @pytest.mark.canary_fast for the fast subset.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 01:49:28 +00:00
3dd06ef0ce review(regression): A-reg-1 CLOSED (import fix verified); good-simple+bad canary artifacts cold-verified; A-reg-2 still open
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 01:44:42 +00:00
b268a14cad status(regression): good-significant upgrade flaky (convergence race); next: 4 RED canaries
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 01:38:52 +00:00
a2a6eea757 fix(regression): fix relative import (A-reg-1) + consume inbox
Some checks failed
continuous-integration/drone/push Build is failing
- tests/regression/test_canaries.py: replace `from .conftest import ...`
  (relative import fails when not a package) with sys.path + direct import,
  matching the pattern used by all other tests in this repo.
- Delete machine-docs/BUILDER-INBOX.md (Adversary inbox consumed).
- Update STATUS-regression.md + JOURNAL-regression.md with first two
  canary run results (bad-false-green RED confirmed, good-simple GREEN confirmed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 01:37:31 +00:00
464760ebb7 review(regression): D-initial FAIL — A-reg-1 relative import (suite won't collect), A-reg-2 plan gap (4 per-tier RED canaries missing)
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 01:34:56 +00:00
fd3db37c49 feat(regression): add tests/regression/ E2E canary suite
Some checks failed
continuous-integration/drone/push Build is failing
Three canaries (@pytest.mark.canary) drive the real cold CI lifecycle:
- good-simple: custom-html-tiny @ main (435df8fc) — fast signal, expects GREEN
- good-significant: lasuite-docs @ main (290a8ad7) — multi-service, expects GREEN
- bad-false-green: custom-html @ v5-stale-docroot (71e7326a) — expects RED

Semantic teeth: beyond exit-code, each test asserts that specific named tests
ran in results.json stages (test_serving, test_serving_and_frontend, test_content_type).
If an assertion is removed, the named test disappears → regression test fails.

Includes conftest (run_recipe_ci helper + stage_has_{passing,failing}_test),
README (cadence policy, how to run, how to add), and phase state files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 01:25:55 +00:00
91a7088f56 review(regression): pre-orientation — known-bad fixture #81 RED confirmed, infra healthy
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 01:19:37 +00:00
f202c5aa7f review(regression): Adversary phase files initialized — watching for Builder gate claims
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 01:15:43 +00:00
baf5a21bdc status(mirror): ## DONE — Ph0-Ph5 all Adversary-verified PASS @01:16Z
Some checks failed
continuous-integration/drone/push Build is failing
Ph0 pre-flight ✓ | Ph1 3 mirrors created ✓ | Ph2 hedgedoc tests + !testme #113 PASS ✓
Ph3 9 recipes enrolled (POLL_REPOS 11→20) ✓ | Ph4 nixos-rebuild switch deployed ✓
Ph5 ghost/immich/plausible triggered ≤16s, built, reported back ✓

Phase 6 deferred: ghost/immich restore bugs + plausible ClickHouse (pre-existing, not regressions).
All: clean_teardown=true, no_secret_leak=true. Loop stopped.
mirror-phase-done
2026-06-02 01:14:05 +00:00
bdbbcda849 review(mirror): Ph4+Ph5 PASS @01:16Z — deploy verified, 3 new recipes triggered <60s
Some checks failed
continuous-integration/drone/push Build is failing
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
5fd95a6b84 status(mirror): immich #121 fail (restore PG bug); plausible #122 running
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 01:05:49 +00:00
80359aaa8f status(mirror): ghost #120 failure — pre-existing backup bug; immich/plausible running
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 00:59:19 +00:00
cdd11a542b review(mirror): Ph4 PASS + Ph5 trigger PASS (16s) — builds 120/121/122 in progress @01:02Z
Some checks failed
continuous-integration/drone/push Build is failing
Ph4: new bridge task watching all 20 repos confirmed cold.
Ph5: all 3 !testme triggers within 16s (D1 met). Build results pending.
2026-06-02 00:51:22 +00:00
876ea373d4 status(mirror): Ph5 builds triggered — #120 ghost running, #121/#122 queued
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-02 00:49:30 +00:00