Commit Graph
44 Commits
Author SHA1 Message Date
autonomic-bot 79dbc2dc8f status(samever): ## DONE — M1+M2 Adversary-verified PASS (no VETO)
continuous-integration/drone/push Build is passing
Orchestrator-written marker: the Builder hit the opus usage limit and could not
write its own DONE. Work is complete + Adversary-verified (M1 1310a95, M2
199f5b6, cleared for DONE). Unblocks auto-advance to canon.
2026-06-17 06:16:30 +00:00
autonomic-bot dc74b1efb9 docs(recipe-customization): make previous/ a documented last-resort — prefer not to use
continuous-integration/drone/push Build is passing
The previous/ base-repair mechanism exists and can be used when updating tests
if a previous base won't deploy, but it is explicitly a last resort: reach for
it only after the dynamic base (last-green -> main-tip) fails to come up, since
each previous/ re-introduces the per-version patching treadmill the dynamic
base removed. Most recipes (incl. discourse) need none.
2026-06-17 03:36:31 +00:00
autonomic-bot b97d1e5345 inbox: remove orphan pxgate cold-boot note (phase already DONE; loops stopped) — evidence in orchestrator JOURNAL
continuous-integration/drone/push Build is failing
2026-06-13 13:52:55 +00:00
autonomic-bot f09b7bf21f inbox(pxgate): cold-boot proof PASSED — deploy-proxy active 11s before dashboard on real reboot
continuous-integration/drone/push Build is failing
2026-06-13 13:52:13 +00:00
autonomic-bot 927cbfa747 inbox(pxgate): orchestrator completed M2 nixos-rebuild — deploy-proxy on /api/version, cycle broken
continuous-integration/drone/push Build is failing
2026-06-13 13:45:39 +00:00
autonomic-botandClaude Opus 4.8 e37a7df496 terraform: IaC-of-record for the cc-ci Hetzner host (salvaged from PR#2)
continuous-integration/drone/push Build is failing
The cc-ci server already runs on Hetzner (migration done; nix/hosts/cc-ci-hetzner
landed directly on main 2026-05-31). PR#2's host config was superseded by newer
main commits, but its terraform/ provisioning scaffolding (cpx32 + nixos-infect)
was never preserved. Add it here as the infrastructure-of-record so the box is
reproducible. .gitignore keeps tfstate + secret tfvars out; HCLOUD_TOKEN is an
env var at apply time (no secrets committed). PR#2 closed as superseded.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 21:09:02 +00:00
autonomic-bot 17c8d29a8f status(dstamp): ## DONE — M1 (fb411b2) + M2 (71358da) both PASS, no VETO. Root cause = swarm failure_action:rollback reverting chaos-version label (start-first OOM masked by wait_healthy); abra/harness git path exonerated. Fixed: discourse stop-first overlay + general assert_upgrade_converged guard (HC1 unweakened). Proven L5 via drone !testme #450. Blast-radius: discourse-only. DEFERRED closed.
continuous-integration/drone/push Build is failing
2026-06-11 17:52:45 +00:00
autonomic-bot 1e22f6ea79 claim(dstamp): M2 — discourse full lifecycle GREEN at true level (LEVEL 5) via drone !testme build #450 (cc-ci main 2da1f01 w/ fix); upgrade-HC1 stamps head, clean teardown + no leak; PR#2 passed. DEFERRED closed. Blast-radius: only discourse affected. HC1 unweakened (commit-match unchanged + assert_upgrade_converged RED on rollback). Verification recipe in STATUS-dstamp
continuous-integration/drone/push Build is failing
2026-06-11 17:46:14 +00:00
autonomic-bot 7e783368c4 status(dstamp): M1 PASS (fb411b2); M2 in progress — !testme drone full-lifecycle build #450 in flight (discourse @7ae7b0f, cc-ci main 2da1f01 w/ fix)
continuous-integration/drone/push Build is failing
2026-06-11 17:38:20 +00:00
autonomic-botandautonomic-bot 2da1f01849 claim(dstamp): M1 — root cause attributed by DIRECT evidence (swarm failure_action:rollback reverts chaos-version label, masked by start-first+wait_healthy; abra+harness git path exonerated); minimal repro + 06-05→06-10 load change + fix (stop-first overlay + assert_upgrade_converged, HC1 unweakened) + blast-radius (only discourse). fix1+fix2 validate green @7ae7b0f7+U. Verification recipe in STATUS-dstamp.
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-06-11 17:32:11 +00:00
autonomic-botandautonomic-bot 53db62258e probe(dstamp): race concern CLOSED — Builder harden(e9c26c7) 2-phase StartedAt protocol deterministically distinguishes new update from stale base-deploy state; assessed CORRECT AND COMPLETE
continuous-integration/drone/push Build is failing
2026-06-11 17:23:59 +00:00
autonomic-botandautonomic-bot e9c26c72af harden(dstamp): assert_upgrade_converged waits for the NEW swarm update (StartedAt advanced) before accepting a terminal state — closes the Adversary-flagged race where a stale 'completed' from the base deploy could mask a later rollback; no-op redeploy grace preserved
continuous-integration/drone/push Build is failing
2026-06-11 17:18:50 +00:00
autonomic-botandautonomic-bot a4c0dfcf11 probe(dstamp): blast-radius sweep — 4 enrolled recipes have failure_action=rollback+start-first; keycloak/n8n latent but currently PASS; assert_upgrade_converged covers all without overlay; drone has no upgrade tier
continuous-integration/drone/push Build is passing
2026-06-11 17:18:13 +00:00
autonomic-botandautonomic-bot d0d762c9c8 journal(dstamp): fix1 validation PASS (chaos 7ae7b0f7+U, converged); blast-radius = only discourse affected (keycloak/n8n upgrade-PASS L4; drone/traefik infra); general guard covers all
continuous-integration/drone/push Build is passing
2026-06-11 17:16:48 +00:00
autonomic-botandautonomic-bot e9eed8e7b7 probe(dstamp): Adversary independent probe findings — Docker rollback root cause confirmed, fix 0cc31a5 assessed CORRECT, race-window concern flagged (covered by defence-in-depth). Anti-anchoring preserved: JOURNAL not read. Awaiting claim(dstamp) for formal verdict.
continuous-integration/drone/push Build is passing
2026-06-11 17:12:01 +00:00
autonomic-bot 0cc31a507e fix(dstamp): discourse upgrade stop-first overlay (stop 2x-memory start-first OOM→spurious swarm rollback) + harness assert_upgrade_converged (detect rollback/pause → honest upgrade failure, HC1 unweakened). Root cause: failure_action:rollback reverted chaos-version label, masked by start-first+wait_healthy
continuous-integration/drone/push Build is passing
2026-06-11 17:07:38 +00:00
autonomic-bot 9959ad6a2d status(dstamp): DIRECT EVIDENCE — repro4 caught Spec=7ae7b0f7+U + PreviousSpec=eb96de94+U + State=updating post-redeploy; swarm failure_action:rollback reverts label (masked by start-first+wait_healthy); abra+harness exonerated. Fix: stop-first overlay + harness rollback detection
continuous-integration/drone/push Build is passing
2026-06-11 17:04:13 +00:00
autonomic-bot 866a429a6f journal(dstamp): root cause = swarm failure_action:rollback reverts chaos-version label to base spec (start-first masks it via wait_healthy); concurrency refuted; repro3 capturing UpdateStatus
continuous-integration/drone/push Build is passing
2026-06-11 16:55:48 +00:00
autonomic-bot 9a097d3185 status(dstamp): investigation baseline — isolated git/abra path stamps head CORRECTLY (3 faithful repros); abra constant; run184 solo green vs clustered 06-11 drift @same ref; concurrency-artifact hypothesis under test
continuous-integration/drone/push Build is passing
2026-06-11 16:34:47 +00:00
autonomic-botandautonomic-bot 40c321f5f9 prep(dstamp): Adversary recon baseline — stamp mechanism + cold observables (HEAD 7ae7b0f is 9 commits past tag 0.7.0+3.3.1/eb96de9; chaos-version stamps base not head; abra nix-pinned 0.13.0-beta). No verdict yet, awaiting M1 claim.
continuous-integration/drone/push Build is passing
2026-06-11 15:55:24 +00:00
autonomic-bot ef577c7d60 status(bsky): ## DONE — M1 (369f4f4) + M2 (42eabba) both PASS, no VETO; bluesky-pds fixed via mirror PR#2 (re-pin 0.4.219) green level 5 at head on real CI, screenshot live, records closed, PR left open for operator
continuous-integration/drone/push Build is passing
2026-06-11 15:49:29 +00:00
autonomic-bot 5b0e42adc2 claim(bsky): M2 — operator handoff complete: green re-triggerable at PR#2 head f7b6c8df (run 427 level 5), PNG published, level/baseline reconciled, DEFERRED closed (f150012), operator summary in STATUS; PR left open for operator
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2026-06-11 15:45:11 +00:00
autonomic-bot cba53b69a4 status(bsky): operator summary written (B9); journal: shot-phase N/A disposition superseded, no canonical to reseed (B8 complete)
continuous-integration/drone/push Build is passing
2026-06-11 11:58:34 +00:00
autonomic-bot f1500123e7 docs(deferred): bluesky-pds entry RESOLVED — fix PR#2 open (re-pin 0.4.219), green run 427 level 5 at PR head, screenshot real; pointers to upstream registry + decisions
continuous-integration/drone/push Build is passing
2026-06-11 11:57:12 +00:00
autonomic-bot 73889ed860 claim(bsky): M1 — root cause proven (:0.4 republished w/ 0.5.1/index.ts vs entrypoint index.js), mirror PR#2 re-pin 0.4.219 green at head via drone run 427 (level 5, upgrade=declared intentional skip, negative control run 423), screenshot verified real+credential-free
continuous-integration/drone/push Build is passing
2026-06-11 11:55:41 +00:00
autonomic-bot 72b3d6c089 journal(bsky): run 423 red = upgrade-base trap (base 0.1.1+v0.4 pins broken :0.4, PR head never reached); decisions entry for EXPECTED_NA-upgrade base suppression; run 427 in flight
continuous-integration/drone/push Build is passing
2026-06-11 11:52:39 +00:00
autonomic-bot e9745c8c74 feat(bsky): EXPECTED_NA['upgrade'] suppresses the upgrade-tier base deploy — single deploy = PR head; bluesky-pds declares it (no deployable base: every published tag pins the republished moving :0.4). upgrade_base() extracted pure + 6 unit tests; meta-key doc regenerated. 253 unit tests + repo lint PASS
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2026-06-11 11:51:12 +00:00
autonomic-bot 823023a19a docs(deferred): operator housekeeping pass 2026-06-11
continuous-integration/drone/push Build is passing
- CLOSED: plausible enrollment (overtaken — enrolled+running), discourse
  bitnami pin (superseded — enrolled, L4 baseline), immich pg_dump (PR#2
  green, operator merge pending), plausible Q4.7b ClickHouse (PR#3 green,
  operator merge pending)
- RE-ENTERED per operator: mailu backupbot -> phase mailu, drone enrollment
  -> phase drone, uptime-kuma create-a-monitor -> phase kuma, discourse
  abra-stamp drift -> phase dstamp, bluesky-pds -> phase bsky (in progress)
2026-06-11 11:42:12 +00:00
autonomic-bot fc16250db2 status(bsky): bootstrap phase — root cause proven (:0.4 moving tag now ships 0.5.1/node24/index.ts; recipe entrypoint execs index.js), fix = exact-pin 0.4.219; decisions + upstream registry
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
2026-06-11 11:37:28 +00:00
autonomic-bot 13cad1f985 review(lvl5): M2 PASS @a521d43 — proven in real CI from cold clone of main. 247 unit tests + PR-path regression green, repo lint PASS. Genuine L5 (398/406/407/413 all 5 rungs pass, build success); lint-blocked L4 VERDICT-NEUTRAL (405 lint=fail R011, level=4, all tiers pass, drone build SUCCESS + reflected success to PR); N/A-skip de-cap climb (399 custom-html-tiny backup=intentional-skip+reason, level=5 was L2); drone !testme ×3 GENUINE per bridge poll logs (405/406/407 comments 14332-14334 on real PRs); canaries red at re-derived designed L1 (415/416 build FAILURE by tier-fail not lint, upgrade-skip+backup-fail-blocks); unver-blocks synthesized (level=2 backup unver in skips.unintentional, mission ex#3); durations flat (immich 199s/plausible 164s vs shot baseline 198-199/166, lint ~0.7s); old schema-1 artifacts render 200 no relabel; lint.txt served real abra table at exact ref; badges number+colour ONLY no cap language; P3 19/19 lint pass; before/after table every shift rule-explained no regression; no secret leak (independent sweep incl new lint.txt surface). §6 DoD satisfied. No VETO — Builder cleared to write ## DONE.
continuous-integration/drone/push Build is passing
2026-06-11 11:28:19 +00:00
autonomic-bot cfc87fd8d3 review(lvl5): M1 PASS @3d8d286 — cold clone HEAD-match, 246 unit tests green + repo lint PASS on CI venv; de-capped compute_level correct on all 4 mission worked examples (L1 fail-blocks, L5 skip-climbs, L2 unver-blocks, L4 lint-unver); derive_rungs N/A classification matches DECISIONS table incl subtle upgrade structural-skip vs abort-unver split; §2.3 mirror handled by scratch-clone CONTEXT not exemptions — NO rule filtered, proven by real-abra probe (hedgedoc pass + injected lightweight tag → R014 fail, classifier has teeth); verdict-neutral by inspection (single call site, double-wrapped, default unver, consumed only in best-effort results block) + 2 targeted tests; cap/cap_reason/capped removed everywhere (only absence-assertions + history-compat remain); lint never 'skip' (no N/A escape hatch). No VETO — Builder cleared to merge + proceed to M2.
continuous-integration/drone/push Build is passing
2026-06-11 07:55:35 +00:00
autonomic-bot ae10b553b0 review(shot): M1 PASS — audit matrix 19/19 cold-verified (enrolled set complete, no omissions), all non-OK root-causes evidence-backed (plausible 500-by-design via drone build-357 log; bluesky deploy-gated; BLANK/LOADING=domcontentloaded paint race; mumble NOT N/A via mumble-web), 11 PNGs independently Read incl plausible+multiple 4801B, every matrix read matched reality. N/A args agreed (bluesky justified, mumble denied). No VETO.
continuous-integration/drone/push Build is passing
2026-06-11 01:29:55 +00:00
autonomic-bot 4f3a74759d review(shot): phase open — independent cold pre-audit ground truth (immich/n8n/cryptpad blank 4801-2B, keycloak/lasuite-docs loading-spinner, plausible null); awaiting M1 claim
continuous-integration/drone/push Build is passing
2026-06-11 01:19:52 +00:00
autonomic-bot 76a4b6b3fa docs: recipe-customization review spec — full settings reference + restructuring candidates
continuous-integration/drone/push Build is passing
Complete reference for per-recipe CI customization: all 18 recipe_meta keys
(incl. the base pin UPGRADE_BASE_VERSION), the six divergent meta loaders,
every hook file (test_<op>.py overlays, ops.py, install_steps.sh,
setup_custom_tests.sh, compose.ccci.yml), env contracts, and §8 known
limitations / restructuring candidates (R1 loader drift, R2 dead SCREENSHOT
knob, R6 silent-typo hazard, ...). Written for operator review ahead of a
possible restructure.
2026-06-10 15:55:34 +00:00
autonomic-bot 5b65c6caa3 docs: concurrency spec — how parallel recipe runs stay safe (for review/restructuring)
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
autonomic-bot 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
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2026-06-09 23:12:37 +00:00
autonomic-bot e6d55b53c7 fix(harness): a paused swarm update is settled — only active states block convergence
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
autonomic-bot 68ef0f84fb fix(harness): convergence must span stop-first rolling updates (immich 238 backup 409)
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
autonomic-bot c828f6cdd0 Merge remote-tracking branch 'origin/test/plausible-upgrade-base-3.0.1'
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
2026-06-09 21:57:39 +00:00
autonomic-bot c0df77d0d9 fix(harness): make concurrent recipe runs safe (per-recipe flock + active-run registry)
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
autonomic-bot 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
autonomic-bot e76d4005ab chore(runner): raise CI concurrency to 2 (parallel recipe testing) (#8)
continuous-integration/drone/push Build is failing
continuous-integration/drone Build was killed
2026-06-09 18:35:19 +00:00
autonomic-bot c32e6105d0 feat(reports): same-origin /pr proxy for the Recipe Report live STATUS column (#7)
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is failing
2026-06-09 13:16:12 +00:00
autonomic-bot c51cd84159 feat(harness): intentional skips + custom-html-tiny functional test; 4-rung ladder (#6)
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