Commit Graph
100 Commits
Author SHA1 Message Date
autonomic-botandClaude Opus 4.7 2cede01ed7 style(1b): auto-format + lint-clean the whole codebase (RL1)
Mechanical, semantics-preserving cleanup so the codebase passes the new lint stage:
- ruff format: all 32 Python files (wraps long signatures, normalizes quotes/blank lines).
- nixpkgs-fmt: modules/drone-runner.nix.
- shfmt (-i 2 -ci): scripts/*.sh.

Lint fixes (reviewed, behavior-preserving — no test weakened):
- ruff SIM105: try/except-pass -> contextlib.suppress (abra.py app_config rm; lifecycle.py janitor).
- ruff SIM115: open().read() -> with open() (run_recipe_ci.py redaction-values + gitea-token).
- statix: merge repeated sops `secrets.*` keys into one `secrets = { ... }` (comments kept);
  empty fn pattern `{ ... }:` -> `_:` (packages.nix).
- deadnix: drop unused lambda args (flake `self`; configuration.nix `lib`; overlay `final` -> `_`).

Verified on cc-ci: `scripts/lint.sh` -> lint: PASS; nixosConfigurations.cc-ci evaluates;
all Python byte-compiles. The deployed bridge/dashboard/runner source changes hash (reformat),
so cc-ci will be rebuilt to the new closure in W2 before the cold D1-D10 re-verification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 20:52:05 +01:00
autonomic-bot a0ea2f0aa9 fix(1b): merge devShells.${system} into one attr (dynamic-attr collision) 2026-05-27 20:43:48 +01:00
autonomic-bot 07952c0383 fix(1b): remove duplicate nixosConfigurations.cc-ci in flake (broke eval) 2026-05-27 20:43:17 +01:00
autonomic-bot f1438eb8c9 fix(1b): lint.sh excludes the secrets/ submodule (correct path) 2026-05-27 20:42:06 +01:00
autonomic-bot 1de0885e2d feat(1b): add lint/format toolchain — lint devshell + scripts/lint.sh + ruff/yamllint config 2026-05-27 20:40:50 +01:00
autonomic-bot 575e0b5f11 chore(1b): seed Phase 1b loop state (STATUS/BACKLOG/JOURNAL/REVIEW) 2026-05-27 20:39:15 +01:00
autonomic-botandClaude Opus 4.7 6228cc3676 ## DONE — Phase 1c complete: all C1-C7 + E2E-TESTME Adversary-PASS <24h, no VETO
Fully reproducible from git (cc-ci + cc-ci-secrets submodule + one bootstrap age key -> single
nixos-rebuild switch). D8 honest (static + live throwaway rebuild). Caught+fixed the abra-init race
and the non-deterministic Drone bot token en route.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 20:31:29 +01:00
autonomic-botandClaude Opus 4.7 2a5affcb30 1c: ADV-1c-1 addressed; only C7 re-verify between here and DONE (C1-C6+E2E PASS, no VETO)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 20:24:38 +01:00
autonomic-botandClaude Opus 4.7 6276bfd3a8 1c/ADV-1c-1: architecture.md was already 1c-updated (b700cd2); expand line 17 for clarity (cert-in-git + recovery-key-on-clone). Pls re-verify HEAD
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 20:24:07 +01:00
autonomic-botandClaude Opus 4.7 3bfb48b83a 1c: Builder work COMPLETE (C1-C7 + E2E-TESTME); C7 docs done; awaiting Adversary final DONE-verification
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:53:58 +01:00
autonomic-botandClaude Opus 4.7 b700cd2fda 1c/C7: docs — secrets.md + architecture.md updated to the 1c model (cc-ci-secrets submodule, cert-in-git, bootstrap age key, Drone-token injection, verified D8)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:52:03 +01:00
autonomic-botandClaude Opus 4.7 bb09f00a18 1c: config FINAL cqym8knj (byte-identical); C4/C5 PASS, C6 settled (promote rebuilt VM); C7 docs in progress
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:49:23 +01:00
autonomic-botandClaude Opus 4.7 becd17dfcb 1c/E2E-TESTME: swapped back — public on original cc-ci; rebuilt VM kept (bridge paused); deploying token fix to cc-ci next
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:45:12 +01:00
autonomic-botandClaude Opus 4.7 3d86e31730 1c/E2E-TESTME: PASS (E1-E6) — clean-room VM serves a real !testme run end-to-end over the public domain
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:43:08 +01:00
autonomic-botandClaude Opus 4.7 0864673eed 1c/E2E-TESTME: E1-E3 PASS — !testme→bridge→build #4, app externally reachable via public gateway (200, real content, git cert)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:39:33 +01:00
autonomic-botandClaude Opus 4.7 1a19a6c4c6 1c/E2E-TESTME: checkpoint — E1 pass, Drone-token fix committed, applying to rebuilt VM next
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:28:34 +01:00
autonomic-botandClaude Opus 4.7 af46acab6d 1c: record Drone-token clean-room finding+fix in journal
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:27:03 +01:00
autonomic-botandClaude Opus 4.7 c8bbd35f2a 1c/E2E-TESTME finding+fix: inject bridge_drone_token as Drone bot MACHINE TOKEN (DRONE_USER_CREATE token:)
continuous-integration/drone/push Build is passing
Clean-room finding caught by the e2e: DRONE_USER_CREATE had no token: => a fresh-DB rebuild's Drone
auto-generates a random bot token, so the committed (sops) bridge_drone_token gets 401 and the bridge
can't trigger builds. The original cc-ci only matched because its token was captured out-of-band. Now
the bot's machine token == bridge_drone_token deterministically on every rebuild. (Evolves the toplevel
again; re-establish byte-identical on cc-ci after the e2e + Adversary re-verifies C1.)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:27:00 +01:00
autonomic-botandClaude Opus 4.7 ee585ef6b4 1c/E2E-TESTME: bootstrap-drone-oauth.sh handles OAuth auto-approve (re-auth: no consent form -> follow 302 callback)
continuous-integration/drone/push Build is passing
Found during the e2e: when the bot already granted the shared Drone OAuth app, Gitea 302s straight to
the code callback (no consent form), so the consent-form parse yielded empty _csrf/state and set -e
aborted. Now: if authorize returns a Location, use it directly; else POST the consent form.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:21:47 +01:00
autonomic-botandClaude Opus 4.7 b74a59ea08 1c/E2E-TESTME: swap ACTIVE — public gateway → rebuilt VM (P1/P2 verified); recording reversible state + swap-back steps
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:18:49 +01:00
autonomic-botandClaude Opus 4.7 7f8a4304fd 1c: Gate W4 PASS (Adversary cold, C1-C5); proceeding to swap + E2E-TESTME
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:15:25 +01:00
autonomic-botandClaude Opus 4.7 d22abe45ca 1c/E2E-TESTME: clarify actor/critic — Builder swaps Adversary's W5 VM (ccci-w5-rebuild) after W5 PASS + recorded IP; Adversary doesn't rename
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:06:51 +01:00
autonomic-botandClaude Opus 4.7 f02a2b255c 1c/E2E-TESTME: Builder owns the tailnet swap end-to-end (no signal); record swap steps + execution watch-outs
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:58:24 +01:00
autonomic-botandClaude Opus 4.7 b54ea6de54 1c/W5.5: point to authoritative E2E-TESTME spec (E1-E6); orchestrator-signal-gated
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:48:26 +01:00
autonomic-botandClaude Opus 4.7 ffd4565e73 1c: add operator-gated functional-acceptance e2e (W5.5) — real !testme via public gateway after VM promotion
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:46:50 +01:00
autonomic-botandClaude Opus 4.7 232b35e32b 1c/C6: operator override — keep FINAL W5 throwaway (promote -> cc-nix-test); defer teardown
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:40:47 +01:00
autonomic-botandClaude Opus 4.7 70f108d2fa 1c/W4 DONE: genuine throwaway-VM live rebuild (single switch, 0 failed, byte-identical, TLS leaf==git cert); Gate W4 CLAIMED + install.md updated
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:37:02 +01:00
autonomic-botandClaude Opus 4.7 a7600346b1 1c/W4: status — cc-ci on ld19aj2 (final); fresh throwaway booting for single-switch C4 proof
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:09:38 +01:00
autonomic-botandClaude Opus 4.7 d8aa7578d4 1c/W4: cc-ci on ld19aj2 (byte-identical); throwaway TLS leaf-match == git cert (C4 cert proof)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:06:28 +01:00
autonomic-botandClaude Opus 4.7 5cb0bccdfc 1c/W4: throwaway reproduces cc-ci byte-identical + recovery-key decrypt; abra race found+fixed (serialized reconcilers)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:59:39 +01:00
autonomic-botandClaude Opus 4.7 7563d47228 1c/W4: serialize abra reconcilers (proxy->drone->bridge->dashboard->backupbot)
continuous-integration/drone/push Build is passing
On a FRESH host the reconcile oneshots ran abra concurrently against an uninitialised ~/.abra and
raced on catalogue/recipe init, leaving deploy-proxy/deploy-drone failed after a blank-VM rebuild
(observed on the W4 throwaway). Ordering-only `after` chain serializes them so a single
nixos-rebuild switch converges. Logically correct too (all need the proxy/abra state first).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:57:25 +01:00
autonomic-botandClaude Opus 4.7 24fe11a98e 1c/W4: Step A done (cc-ci on keyFile config, izsmiajw byte-identical); Step B throwaway rebuild in flight
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:36:27 +01:00
autonomic-botandClaude Opus 4.7 195cc30ead 1c/W4: record orchestrator C4 TLS-verification approach (local --resolve on throwaway)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:29:00 +01:00
autonomic-botandClaude Opus 4.7 9cc678853b 1c/W4: add sops.age.keyFile for bootstrap age key (recovery key on clones; host-derived on cc-ci)
continuous-integration/drone/push Build is passing
cc-ci /var/lib/sops-nix/key.txt provisioned = host-derived age key (pub == &host recipient), so
adding keyFile is safe (sops-install-secrets aborts if a configured keyFile is missing).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:24:39 +01:00
autonomic-botandClaude Opus 4.7 8b410dcce1 1c/W3 DONE: throwaway reachable (100.126.124.86); keyFile-missing-aborts finding -> W4 design locked
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:21:21 +01:00
autonomic-botandClaude Opus 4.7 dc81c16b9d 1c/W3: throwaway VM created (booting); W4 design notes (keyFile/recovery-key, tailnet, bridge)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:06:23 +01:00
autonomic-botandClaude Opus 4.7 6c03a27b16 1c/W1 DONE: cc-nix-test resized 6->4GB, healthy after reboot (cert survives via sops, TLS ok)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:59:49 +01:00
autonomic-botandClaude Opus 4.7 60bd291ce1 1c: W2 PASS (Adversary, C1/C2/C3 cold); proceeding to W1/W3/W4
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:54:23 +01:00
autonomic-botandClaude Opus 4.7 0633aa7e7f 1c: W3 recon (incus/b1 RAM facts) while parked at Gate W2
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:48:39 +01:00
autonomic-botandClaude Opus 4.7 faa3709084 1c/W2a DONE: secrets-split + cert-in-git deployed to live cc-ci; Gate W2 CLAIMED
continuous-integration/drone/push Build is passing
Submodule mount, cert sops-decrypted to /var/lib/ci-certs/live (sha256 verified), byte-identical
build==running (vh6vwxbl), git-clone+?submodules=1 reproduces it, live TLS valid.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:47:16 +01:00
autonomic-botandClaude Opus 4.7 f79e542149 1c/W2a: mount cc-ci-secrets as submodule at secrets/; cert+key now sops-decrypted to /var/lib/ci-certs/live
continuous-integration/drone/push Build is passing
- secrets/ is now the private cc-ci-secrets repo (submodule). defaultSopsFile path unchanged.
- secrets.nix: add wildcard_cert/wildcard_key sops secrets -> path=/var/lib/ci-certs/live/*.
- proxy.nix: cert is sops-from-git, not an operator file drop (reframed; FATAL guard kept as decrypt-path check).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:32:10 +01:00
autonomic-botandClaude Opus 4.7 f972bc1dc4 1c/W2: cc-ci-secrets repo created + populated (cert+infra in sops, verified)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:16:58 +01:00
autonomic-botandClaude Opus 4.7 8e2357e5bf 1c: bootstrap Phase 1c loop state (STATUS/BACKLOG/JOURNAL-1c) + decisions (submodule linkage, recovery-key bootstrap)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:06:26 +01:00
autonomic-botandClaude Opus 4.7 1c10fa52e1 ## DONE — all D1-D10 Adversary-PASS <24h, no VETO, handshake cleared
continuous-integration/drone/push Build is passing
cc-ci recipe CI server complete. Loop stopped.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:02:03 +01:00
autonomic-botandClaude Opus 4.7 28142ae1d8 D10 PASS (6/6); DONE gated only on D8 live VM rebuild (Adversary); creds premise obsolete
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:00:57 +01:00
autonomic-botandClaude Opus 4.7 48b485acf8 STATUS: M8/D7, D8-core, D9 PASS landed; only D10 verification left for DONE
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 11:54:09 +01:00
autonomic-botandClaude Opus 4.7 58d9f18101 STATUS: tidy stale in-flight/near-complete sections (superseded by D10-complete phase)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 11:47:27 +01:00
autonomic-botandClaude Opus 4.7 ba37529a30 M10/D10 CLAIMED: all 6 recipes green via real !testme (lasuite #108 via -c fix); blockers cleared
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 11:46:58 +01:00
autonomic-botandClaude Opus 4.7 575efb5054 fix: abra app upgrade -c (no-converge-checks) — abra false-fails slow heavy rolling upgrades
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Diagnosed via instrumented diag: lasuite-docs upgrade reported 'FATA deploy failed' while all 9
services converged 1/1 — abra's convergence poll gives up too early on the slow stop-first roll
(pulling new images). Disable abra's check; the harness wait_healthy + data-survival assertion is
the real, more-patient gate (a genuine failure still fails the test: app never gets healthy).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 11:34:59 +01:00
autonomic-botandClaude Opus 4.7 0632301240 STATUS: lasuite upgrade is a convergence failure (not rate-limit) post quota-reset; diagnosing
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 11:29:01 +01:00
autonomic-botandClaude Opus 4.7 6232d2649c STATUS: feature-complete except 6th D10 recipe; DONE gated on registry creds + Adversary
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:36:09 +01:00
autonomic-botandClaude Opus 4.7 1257542d01 BACKLOG: M9 docs complete (D9); M10 5/6 real-!testme green, lasuite gated on registry creds
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:35:04 +01:00
autonomic-botandClaude Opus 4.7 9b58fd0dfb M9/D9: add architecture.md + runbook.md — docs set complete
continuous-integration/drone/push Build is passing
architecture.md: components, the !testme flow, network/TLS, resource safety, enrollment.
runbook.md: where to look, common failure modes (timeout/rate-limit/auth/skip/health/data), orphan
cleanup, re-trigger, cancel. Completes the D9 doc set (README+install+enroll+secrets+arch+runbook).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:34:37 +01:00
autonomic-botandClaude Opus 4.7 7eec8b3efd lasuite: halt retries pending Docker Hub creds (3rd rate-limit confirmation); pivot to M9
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:33:00 +01:00
autonomic-botandClaude Opus 4.7 dc5aca90bd M10 finding: Docker Hub rate limit blocks lasuite-docs upgrade — A1 registry creds needed (5/6 green)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:09:23 +01:00
autonomic-botandClaude Opus 4.7 432487f4e8 M10: 5/6 recipes green via real !testme; lasuite-docs upgrade failed (retrying)
continuous-integration/drone/push Build is passing
continuous-integration/drone Build was killed
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 09:31:49 +01:00
autonomic-botandClaude Opus 4.7 ed3f087875 M10: real-!testme path proven on custom-html (build #84, 3 stages green via PR)
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:35:14 +01:00
autonomic-botandClaude Opus 4.7 4d5f7e25c6 fix: abra app upgrade -o (offline) — was 401'ing fetching tags from the private mirror origin
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:31:40 +01:00
autonomic-botandClaude Opus 4.7 a2f3b14745 fix: upstream tag fetch needs explicit refspec (bare --tags errors 'no remote HEAD')
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
git fetch --tags <url> without a refspec errors 'couldn't find remote ref HEAD'; use
'refs/tags/*:refs/tags/*'. Verified: brings custom-html's 18 upstream version tags into the mirror
PR clone so the upgrade stage finds a previous published version (was skipping).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:28:22 +01:00
autonomic-botandClaude Opus 4.7 c277029f84 M10/D10: enable real-!testme path — fetch upstream tags + enroll 6 recipes in POLL_REPOS
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
fetch_recipe (SRC+REF/PR path) now read-only fetches published version tags from the public upstream
into the mirror clone, so the upgrade stage finds a previous published version (mirror PR branches
carry no tags → upgrade would skip). Guardrail-safe: only fetches tags, never pushes to the recipe
repo; plain git so the bot token isn't sent to upstream. Adds the 6 D10 recipes to the bridge
POLL_REPOS so !testme on their PRs triggers runs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:21:43 +01:00
autonomic-botandClaude Opus 4.7 38f83c85ea M8/D7 gate CLAIMED: PR-comment outcome reflection verified; dashboard live
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:04:53 +01:00
autonomic-botandClaude Opus 4.7 2c8ee4297c M8/D7: bridge reflects final pass/fail onto the PR comment + content-hash image tag
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
After triggering a build, the bridge spawns a watcher thread that polls the Drone build to
completion and edits its run-link PR comment to ✅ passed / ❌ <status> (Gitea PATCH
issues/comments/{id}, verified). post_comment now returns the comment id. Also gives the bridge
image a content-hash tag so the swarm service actually rolls on bridge.py changes (was stuck on
:latest). Completes the D7 'PR comment reflects outcome' requirement.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:00:40 +01:00
autonomic-botandClaude Opus 4.7 537fd47818 M7/D6 gate CLAIMED: rotation doc + redaction; M6.5 PASS recorded
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:45:19 +01:00
autonomic-botandClaude Opus 4.7 fc07d15800 M7/D6: secrets rotation doc + log redaction filter
continuous-integration/drone/push Build is passing
docs/secrets.md documents the 3 secret classes (A1 external, A2 internal-generated, B recipe-app),
the sops-nix decryption chain, and rotation procedures for each (cert version bump, sops re-encrypt +
swarm-secret version bump, recipe-app ephemeral). run_recipe_ci streams each stage's output through a
redaction filter that masks any /run/secrets/* value (>=8 chars) before it reaches Drone logs —
belt-and-suspenders over 'harness never prints secrets + abra doesn't echo'. Live streaming + exit
code preserved (locally tested). Recipe-ci clones cc-ci fresh per build, so this applies next run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:44:53 +01:00
autonomic-botandClaude Opus 4.7 b832a8d844 STATUS/BACKLOG: M8 dashboard overview+badges live; remaining = PR-outcome reflection, M7, M9
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:27:40 +01:00
autonomic-botandClaude Opus 4.7 c39d4fb936 M8/D7: dashboard overview + badges live at ci.commoninternet.net (verified via gateway)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:27:02 +01:00
autonomic-botandClaude Opus 4.7 2f3d1df1c7 dashboard: content-hash image tag so stack deploy rolls on code change (not stuck on :latest)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:24:21 +01:00
autonomic-botandClaude Opus 4.7 9ede87c7cc dashboard: don't list the cc-ci repo itself as a recipe row (Adversary !testme noise)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:20:42 +01:00
autonomic-botandClaude Opus 4.7 60d917646b M8/D7: results dashboard — overview + SVG badges at ci.commoninternet.net
continuous-integration/drone/push Build is passing
Stdlib HTTP service (like the bridge): polls the Drone API for recipe-CI builds (event=custom),
groups latest-run-per-recipe, renders a YunoHost-CI-like overview table with pass/fail/running
badges + links to the canonical Drone run, plus /badge/<recipe>.svg. Nix-built OCI image, swarm
service on proxy, traefik Host(ci.commoninternet.net) (the bridge's /hook rule stays higher
priority by length). Reuses the Drone token (read-only). Reconcile oneshot like bridge/drone.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:17:12 +01:00
autonomic-botandClaude Opus 4.7 8b4dc16227 M6.5: n8n canonical Drone #63 success — all 6 D10 recipes green via pipeline
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:14:51 +01:00
autonomic-botandClaude Opus 4.7 91b241f89e M6.5 CLAIMED: n8n (recipe #6) full 3-stage green — all 6 D10 recipes done across all categories
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:09:15 +01:00
autonomic-botandClaude Opus 4.7 d4f78e374a BACKLOG: recipe #6 = n8n (bluesky swapped); dedupe M6.5 lines
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:49:35 +01:00
autonomic-botandClaude Opus 4.7 1cc225949e M6.5: lasuite-docs canonical Drone #57 success (5 recipes green via pipeline)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:49:09 +01:00
autonomic-botandClaude Opus 4.7 032f314eff M6.5: enroll n8n (recipe #6, workflow automation) — tests authored (single-service, .n8n volume)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:48:39 +01:00
autonomic-botandClaude Opus 4.7 689913b140 DECISIONS: D10 #6 bluesky-pds (TLS-passthrough) swapped to n8n — caddy self-ACME conflicts with no-ACME design
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:42:37 +01:00
autonomic-botandClaude Opus 4.7 69c3cf9574 M6.5: lasuite-docs (recipe #5, multi-service+S3) full 3-stage green; TIMEOUT fix; Drone #57 in flight
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:41:01 +01:00
autonomic-botandClaude Opus 4.7 daf67e53b9 M6.5: enroll lasuite-docs (recipe #5, multi-service + S3/MinIO) — install verified green
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
9-service stack (frontend/backend/celery/y-provider/docspec/postgres/redis/minio/nginx) converges
9/9 and serves the SPA; install 2 passed on host. Root-caused a deploy timeout: cold-pulling ~9
large images exceeds abra's default 300s convergence TIMEOUT -> bumped to 900 via EXTRA_ENV (the
generic per-recipe mechanism, no harness surgery). upgrade/backup use a postgres marker (docs/docs)
exercising the pg_backup.sh DB-dump hook; verifying next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:32:23 +01:00
autonomic-botandClaude Opus 4.7 79550d3887 M6.5: matrix-synapse canonical Drone run #51 success (4 recipes now green via pipeline)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:56:31 +01:00
autonomic-botandClaude Opus 4.7 d5c79773d4 M6.5: matrix-synapse (recipe #4) full 3-stage green on host (postgres-marker DB-hook); Drone #51 in flight
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:46:04 +01:00
autonomic-botandClaude Opus 4.7 d6a8f421a7 M6.5: enroll matrix-synapse (recipe #4, DB+media/large-volume) — install verified green
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
install 2 passed on host (~2.7m): synapse client API 200 + real versions JSON, no extra config
(SYNAPSE_SERVER_NAME=DOMAIN). upgrade/backup author postgres-marker assertions exercising the
recipe's pg_backup.sh dump/restore hook (the meaningful matrix data path); verifying next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:38:40 +01:00
autonomic-botandClaude Opus 4.7 2a288cac08 M6.5: cryptpad canonical Drone run #46 success (3 recipes now green via pipeline)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:01:57 +01:00
autonomic-botandClaude Opus 4.7 daa0a7e6c4 M6.5: cryptpad (recipe #3) full 3-stage green on host; record set_env/RESTIC backup fix
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:56:12 +01:00
autonomic-botandClaude Opus 4.7 451cca3ebd fix: set_env newline-safe — RESTIC_REPOSITORY was glued onto a comment line (backups broke)
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
backup-bot-two's .env.sample ends with a newline-less comment, so set_env's bare
append concatenated RESTIC_REPOSITORY onto it (commenting it out). The backupbot
container then lacked RESTIC_REPOSITORY and 'abra app backup create' KeyError'd —
breaking the backup stage for recipes without a custom backup hook (cryptpad).
set_env now ensures a trailing newline before appending (applied to drone.nix too,
same latent bug). Re-verify keycloak backup, which earlier passed off an older deploy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:50:16 +01:00
autonomic-botandClaude Opus 4.7 ebb4c0cbca M6.5: enroll cryptpad (recipe #3, stateful/no-DB) + generic per-recipe EXTRA_ENV
continuous-integration/drone/push Build is passing
Adds a shared-harness EXTRA_ENV mechanism (recipe_meta.py dict or domain-callable),
applied in deploy_app at every deploy path — no per-recipe harness surgery (D5).
cryptpad uses it for its required distinct SANDBOX_DOMAIN. Tests assert data
survival via a marker file in the backed-up cryptpad_data volume (exec_in_app,
since cryptpad data isn't HTTP-served).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:41:44 +01:00
autonomic-botandClaude Opus 4.7 2ade2914c1 STATUS: M3 PASS; keycloak 3-stage green; cryptpad (recipe #3) next with recon
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:12:24 +01:00
autonomic-botandClaude Opus 4.7 180094a366 M6.5: keycloak full 3-stage green via recipe-ci pipeline (build #39, DB data survival)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:10:35 +01:00
autonomic-botandClaude Opus 4.7 b477274e67 STATUS/JOURNAL: A4 mitigated by capacity=1; A2/A3 fixed-in-code, awaiting Adversary re-test
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:10:36 +01:00
autonomic-botandClaude Opus 4.7 17e9896516 STATUS/JOURNAL/BACKLOG: recipe-ci integration green (build #33), bridge→Drone→harness wired
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:08:32 +01:00
autonomic-botandClaude Opus 4.7 7aa0346902 harness: backup/restore pass -C -o; catalogue fetch re-clones clean
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
Two fixes surfaced by the first real recipe-ci run through Drone:
- abra app backup/restore now pass -C -o (current checkout, no remote fetch) like
  every other recipe-touching call — without -o they fetch recipe tags from the
  (private) remote and fail 'authentication required: Unauthorized'.
- fetch_recipe's catalogue path rm's the recipe dir first so a leftover private-mirror
  remote from a prior SRC+REF run can't poison version resolution / backup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:05:03 +01:00
autonomic-botandClaude Opus 4.7 bc8baae2c0 drone: recipe-ci step uses HOME=/root so abra finds /root/.abra config
continuous-integration/drone Build is failing
continuous-integration/drone/push Build is passing
The exec runner sets HOME to a per-build workspace, leaving ~/.abra empty
(FATA directory is empty: .../home/drone/.abra/servers). Force HOME=/root in the
step so abra and the harness's ~/.abra/recipes resolve to the real config, as the
manual runs did. Safe at capacity=1 (no concurrent build shares /root/.abra).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:00:20 +01:00
autonomic-botandClaude Opus 4.7 9d51cb66b7 drone: add recipe-ci pipeline (event=custom) running run_recipe_ci.py
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
Splits .drone.yml into a push-triggered self-test pipeline and a custom-triggered
recipe-ci pipeline. The bridge fires event=custom builds with RECIPE/REF/PR/SRC
params; recipe-ci runs the shared harness (install/upgrade/backup + recipe-local)
with STAGES set and CCCI_JANITOR_MAX_AGE=0 (safe at capacity=1), concurrency limit 1.
Connects the verified !testme trigger to actual recipe CI (D2/D10 path).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:58:35 +01:00
autonomic-botandClaude Opus 4.7 6bdf43febd STATUS: M3 CLAIMED (polling primary verified) + resource-safety section; clear webhook blocker
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:56:28 +01:00
autonomic-botandClaude Opus 4.7 72ff8e213d resource safety: MAX_TESTS=capacity=1 + per-build 60m timeout (orchestrator design change)
continuous-integration/drone/push Build is passing
Bound live test apps on the single 28GiB node. DRONE_RUNNER_CAPACITY=1 (MAX_TESTS)
caps concurrent builds; Drone auto-queues the rest natively. deploy-drone reconcile
sets the cc-ci repo build timeout to 60m (best-effort PATCH, non-fatal) so a hung
build is killed and frees its slot. Janitor remains the backstop for SIGKILL'd builds.

Verified on host: DRONE_RUNNER_CAPACITY=1; repo timeout=60 via Drone API.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:53:29 +01:00
autonomic-botandClaude Opus 4.7 7addb9686c bridge: polling primary + org-membership auth (orchestrator design change)
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Polling is now the primary, read-only trigger (always-on thread); the /hook
webhook is an optional admin-registered push optimization deduped by comment id.
Authorize commenters via GET /orgs/{owner}/members/{user} (204, read-level) +
optional allowlist, replacing the admin-requiring /collaborators permission
endpoint. Bot never self-registers webhooks. Enroll = POLL_REPOS + tests/<recipe>/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:41:25 +01:00
autonomic-botandClaude Opus 4.7 25b628e959 harness: app_new uses chaos only when no version (version => clean tag checkout)
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:05:54 +01:00
autonomic-botandClaude Opus 4.7 8a7c0d8328 M6.5: keycloak upgrade + backup stages (DB data survival via realm marker)
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:04:18 +01:00
autonomic-botandClaude Opus 4.7 f16708155c STATUS: M3 webhook being whitelisted operator-side; keep webhook, polling reverted
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:02:57 +01:00
autonomic-botandClaude Opus 4.7 9b33fdf6e6 M6: D4 recipe-local discovery + recipe #2 (keycloak, DB-backed) enrolled; M6 CLAIMED
continuous-integration/drone/push Build is passing
D4 snapshots recipe-shipped tests/ and runs them against the live app. abra -C -o
everywhere + token clone for private mirror PRs. keycloak install green with no
harness surgery (D5). docs/enroll-recipe.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 01:48:06 +01:00
autonomic-botandClaude Opus 4.7 0c083069f3 M6 (part 2): recipe #2 keycloak install green (DB-backed, no harness surgery)
continuous-integration/drone/push Build is passing
keycloak+mariadb deployed via only tests/keycloak/recipe_meta.py + test_install.py
(realm health + Playwright admin login). Proves recipe-agnostic enrollment (D5).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 01:32:09 +01:00
autonomic-botandClaude Opus 4.7 7fc26fae68 M6 (part 1): per-recipe meta + D4 recipe-local discovery + shared naming helper
continuous-integration/drone/push Build is passing
Recipe-agnostic harness (no surgery to enroll a recipe): recipe_meta.py for
health path/codes/timeouts; run_recipe_local discovers + runs recipe-shipped
tests/ against the live app. install non-regressed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 01:16:29 +01:00