a0ea2f0aa9
fix(1b): merge devShells.${system} into one attr (dynamic-attr collision)
2026-05-27 20:43:48 +01:00
07952c0383
fix(1b): remove duplicate nixosConfigurations.cc-ci in flake (broke eval)
2026-05-27 20:43:17 +01:00
f1438eb8c9
fix(1b): lint.sh excludes the secrets/ submodule (correct path)
2026-05-27 20:42:06 +01:00
a74925bf7d
review(1b): phase-1b Adversary ledger seeded; white-box §3 prep pass #1 over post-1c baseline — tests real, no sentinels, no committed secrets, sleeps are poll intervals, teardown verified. Awaiting Builder to seed 1b state + claim W0
2026-05-27 20:41:30 +01:00
1de0885e2d
feat(1b): add lint/format toolchain — lint devshell + scripts/lint.sh + ruff/yamllint config
2026-05-27 20:40:50 +01:00
575e0b5f11
chore(1b): seed Phase 1b loop state (STATUS/BACKLOG/JOURNAL/REVIEW)
2026-05-27 20:39:15 +01:00
6d2bc3d8e0
review(1c): ✅ DONE confirmed — Adversary final sign-off. All C1-C7 + E2E-TESTME PASS <24h, no VETO, no open findings; cc-ci healthy cqym8knj byte-identical, public TLS 200. Phase 1c genuinely DONE; loop terminating
2026-05-27 20:34:22 +01:00
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
9e0f72ac4b
review(1c): C7 PASS — ADV-1c-1 closed (architecture.md now 1c-correct: cc-ci-secrets submodule + cert-in-git + recovery-key bootstrap). ALL C1-C7 + E2E-TESTME Adversary-PASS, no VETO — DONE handshake unblocked
2026-05-27 20:29:26 +01:00
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
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
0556ff5ad9
backlog(1c): file ADV-1c-1 [adversary] — architecture.md still describes pre-1c secrets/cert model; blocks C7 (doc gap, not VETO)
2026-05-27 20:01:41 +01:00
b301b031a1
review(1c): E2E-TESTME E1-E6 PASS (independent) + DONE-verification C1-C6 PASS; C7 WITHHELD — architecture.md stale (pre-1c secrets/cert model). No VETO. Filing ADV-1c-1
2026-05-27 20:01:13 +01:00
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
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
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
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
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
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
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
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
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
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
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
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
40c50545f1
review(1c): heads-up for Builder e2e — dual-bridge double-trigger risk in swap window; recommend pausing original's bridge during E1-E6
continuous-integration/drone/push Build is passing
2026-05-27 19:13:52 +01:00
446f326a1e
review(1c): W4/C4/C5 PASS COLD — independent throwaway rebuild: blank VM+2 repos+1 age key -> single switch -> ld19aj2 byte-identical, 0 failed, 6/6 stacks, cert+TLS from git (leaf 57:8D:67). VM ccci-w5-rebuild@100.97.167.73 recorded for Builder swap. D8 honest (Phase-1 'infeasible' superseded)
continuous-integration/drone/push Build is passing
2026-05-27 19:12:47 +01:00
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
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
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
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
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
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
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
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
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
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
b73307908d
review(1c): C1 refresh — byte-identical against new keyFile config (izsmiajw==running, zero drift); supersedes vh6vwxbl
continuous-integration/drone/push Build is passing
2026-05-27 17:57:18 +01:00
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
dd710a6f56
review(1c): set C4/W5 TLS verification standard — domain=ci.commoninternet.net (not ci2), SNI+--resolve on fresh VM, leaf fingerprint must match git cert
continuous-integration/drone/push Build is passing
2026-05-27 17:30:08 +01:00
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
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
228b930a96
review(1c): corroboration — sops cert re-decrypts byte-identically at boot after W1 resize-reboot (strengthens C2)
continuous-integration/drone/push Build is passing
2026-05-27 17:24:00 +01:00
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
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
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
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
95ac37c7bd
review(1c): W2 PASS cold — byte-identical build==running (vh6vwxbl), cert sops-from-git + live TLS leaf-match, no plaintext leak; C1/C2/C3 Adversary-PASS
continuous-integration/drone/push Build is passing
2026-05-27 16:52:14 +01:00
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
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