Commit Graph

40 Commits

Author SHA1 Message Date
c3a634c02a review(redfix): wake #30 — B-redfix-8 re-probed at ~1h gap, unchanged: still LIVE (digest 3fcea78925015fc9 unrotated) and still PUBLIC (HTTP 200/33408, cleartext served unauthenticated). Terminal condition intact (DONE @00:18Z, M1+M2 PASS, both VETO headings are the one CLEARED F-redfix-4, inboxes empty, no gate claimed). No VETO; item stays OPEN, HIGH, operator-rotation-only. Loop stopping.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HMcFVuWBBEadjbaqbqGM4g
2026-07-09 04:13:16 +00:00
bfbf6f0ac1 review(redfix): wake #26 — B-redfix-8 re-probed at ~3h gap, still LIVE (digest 3fcea78925015fc9 unrotated) + still PUBLIC (HTTP 200/33408). No change; DONE stands, no VETO, item stays OPEN operator-only. Loop terminal. 2026-07-09 03:10:07 +00:00
76c5504e74 review(redfix): CONFIRM Builder's "still LIVE not merely served" strengthening (95ee579) — independently re-derived from artifacts, secret never materialized: live GITEA_PASSWORD from .testenv is verbatim in the public 2ad38f5 blob (True), sha256[:16] == committed 3fcea78925015fc9, and the documented operator re-check one-liner runs verbatim and prints that digest. Real distinction (reachable != live; "unrotated" had been true-by-repetition) and it's the basis of the HIGH rating. Verdict strength up, verdict unchanged: DONE stands, no VETO, B-redfix-8 OPEN on operator rotation. Loop stopping. 2026-07-09 02:37:02 +00:00
6d5bbc004c review(redfix): re-test — evidence-accuracy defect CLOSED. Re-measured the blob myself (git cat-file -s @2ad38f5 -> 33408) rather than trusting 251de42's message; both load-bearing lines now read 33408, surviving 33080 strings are narrative about the slip. Builder also added a self-checking cross-check to B-redfix-8, which is the right hardening. Phase closure: M1+M2 PASS, DONE stands, no VETO, inboxes empty. Sole open item B-redfix-8 (public unrotated bot password, re-probed HTTP 200 this wake) is operator-only. Adversary loop stopping. 2026-07-09 02:36:20 +00:00
e54138f526 review(redfix): re-confirmation #22 — DONE stands, no VETO; B-redfix-8 re-probed STILL PUBLIC + unrotated (HTTP 200); caught an evidence-accuracy defect in the Builder's first-hand-reproduction claim: both Builder-owned records say the probe returned 33080 bytes, but the blob at 2ad38f5 is 33408 (git cat-file -s == my fetch, exactly). Digit permutation => transcription slip, not a fabricated probe; every other assertion reproduces. Not mine to edit (## Build backlog + JOURNAL are Builder-owned) => correction sent via BUILDER-INBOX, because an operator re-running the probe and getting 33408 against a documented 33080 could talk themselves out of a live HIGH credential leak. Also turned it on myself: my own wake-#20 REVIEW narrative inherited 33080 by citation instead of measuring the blob. 2026-07-09 02:24:58 +00:00
d7236ca19c review(redfix): re-confirmation #18 — SECURITY escalation: my 2ad38f5 disclosed the live bot password, and I've now established the mirror is PUBLIC (unauth HTTP GET of raw@2ad38f5 returns 200 with cleartext secret) => A-redfix-1 reclassified LOW->HIGH, operator rotation now URGENT; accepted Builder's redaction (d07873a, verifiability intact), purged my scratchpad copy; no verdict change, DONE stands, no VETO (leak is orthogonal to DoD and only rotation clears it); consumed inbox, sent BUILDER-INBOX with the public-reachability fact 2026-07-09 01:58:19 +00:00
2ad38f507b review(redfix): re-confirmation #17 — consumed ADVERSARY-INBOX (Builder wake #18); accepted their correction after re-deriving it (/etc/cc-ci HEAD is main@d11f8f56; redfix-m2-harness is a stale local branch there; b5f2b10 ABSENT — conclusion unchanged, NOT-MERGED holds); confirmed B-redfix-7 as A-redfix-1 with repro but corrected its rationale (LOW rests on mount-namespace isolation, not on absence of login users — mode DOES permit uid1000); caught my own near-miss before it became evidence (setpriv ran in host ns; the real uid-1000 java IS warm-keycloak but is containerized and cannot read host /etc); no VETO, DONE stands 2026-07-09 01:52:39 +00:00
6997c29202 review(redfix): re-confirmation #16 — refs swept cold via ls-remote (harness==b5f2b10, NOT-MERGED, 3 recipe pins exact, discourse already content-verified at ede63991); B-redfix-6 independently confirmed REAL but docstring-only (WARM_DOMAINS is a singleton ⇒ invariant is structural, not numeric); noted a false NOT-MERGED from an earlier bad-path probe so it isn't mistaken for evidence; no finding, DONE stands, no VETO
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-09 01:47:30 +00:00
32fefb2652 review(redfix): re-confirmation #15 — 'existing canonicals unchanged' verified exhaustively (WARM_DOMAINS is a singleton ⇒ exactly one re-key; 17 seeded canonicals all in keep; prune_stale would delete nothing; keycloak/ spared); STATUS's '15' is stale prose, not a defect; no finding, DONE stands, no VETO
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-09 01:40:32 +00:00
1182aa0c2c review(redfix): re-confirmation #14 — all-five-ref drift sweep clean (3 recipe pins exact, harness tip == b5f2b10, discourse re-verified by CONTENT at live tip ede63991); nothing merged; no finding, DONE stands, no VETO
Some checks failed
continuous-integration/drone/push Build is failing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gn1pkXJ1ZtQ6cPEze2p3Fm
2026-07-09 01:31:48 +00:00
e9bd483b5c review(redfix): re-confirmation #13 — 'nothing merged' DoD clause verified cold (b5f2b10 not an ancestor of origin/main); migration-none re-checked on live cc-ci disk; no finding, DONE stands, no VETO
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-09 01:23:54 +00:00
0fee24920c review(redfix): re-confirmation #12 — merge-target staleness check, redfix-m2-harness tip == b5f2b10 (the M2-PASS sha); no finding, DONE stands, no VETO
Some checks failed
continuous-integration/drone/push Build is failing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GUpGa1j9eAQ5jBLFdqFevZ
2026-07-09 01:16:51 +00:00
83758f5e71 review(redfix): break-it probe — F-redfix-4 remedy verified against REAL cc-ci disk state; no defect; DONE stands, no VETO
Some checks failed
continuous-integration/drone/push Build is failing
Probed the one claim in b5f2b10 that is empirical rather than diff-checkable: "no migration on
cc-ci; keycloak's canonical was never seeded". If false, the new _assert_slot_not_foreign() guard
would wedge the live-warm reconciler's snapshot() on every stateful keycloak auto-upgrade.

Cold, read-only on cc-ci: keycloak/ + traefik/ hold only last_good (never seeded — claim TRUE);
all 17 existing canonical metas carry domain=warm-<recipe> and none is in WARM_DOMAINS, so the
guard passes unchanged (backward compatible); the dropped meta["recipe"] key has no consumer;
slot<->stack is 1:1 over all 21 enrolled recipes with live/canonical disjoint exactly for
WARM_DOMAINS; prune_stale's keep-set covers all 17 dirs and skips keycloak/ structurally.

No new finding. Merge target redfix-m2-harness@b5f2b10 unchanged. Loop stopped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AYMsxDCEMh92Qvgf38PjEU
2026-07-09 00:57:59 +00:00
d55ba23a29 review(redfix): annotate the F-redfix-4 VETO heading as CLEARED; promote the clearance to a real heading
Some checks failed
continuous-integration/drone/push Build is failing
A bare '## VETO —' heading still matched a grep for a standing veto even though it was
cleared at 00:18Z, and the Builder's DONE rests on 'no standing VETO'. Annotated the
original heading in place (history preserved) and made '## VETO CLEARED' a heading rather
than bold text. No verdict changes: M2 PASS stands, F-redfix-4 stays CLOSED.
2026-07-09 00:29:43 +00:00
4bef9a359b review(m2-redfix): M2 PASS — VETO CLEARED, F-redfix-4 CLOSED (remedy verified cold at b5f2b10)
Some checks failed
continuous-integration/drone/push Build is failing
Cold-verified redfix-m2-harness@b5f2b10 (parent 07fc6d4 = the sha the earlier M2 PASS was
given against, so the other five fixes are provably untouched by this commit).

Clearing condition MET verbatim: live_slot=keycloak vs canonical_slot=canon-keycloak are
disjoint; restore(canon) and restore(live) each return their OWN stack's volumes; reconciler
last_good survives; foreign snapshot AND foreign restore both refused (probed both directions).
canonical_domain unchanged, so M2's original keycloak evidence still stands.

Checks the Builder did not run:
 - integrity: canon mariadb byte-identical across the destructive restore round-trip
   (cksum 4271926745 166164480, 386 files, before and after).
 - mutation testing (are the +10 tests vacuous?): reverting canonical_ns() to `return recipe`
   reds 4 of them; removing both _assert_slot_not_foreign() call sites reds 2. Not vacuous.
   Suites reproduce exactly: 325 passed @b5f2b10, 315 passed @07fc6d4.
 - caller audit: every snapshot/restore/app_dir/snap_dir call site passes an explicit slot;
   no bare recipe survives.
 - blast radius (the risk this refactor most plausibly created): all 21 enrolled recipes still
   resolve to their EXISTING on-disk dirs; registry_path("bluesky-pds") is character-identical
   at parent and fix. The 3 without a registry have no dir at all and never did. No migration.
 - prune_stale invariant now structural: <recipe>/ never gains a canonical.json, so a
   de-enrolled provider can no longer rmtree the reconciler's last_good (scratch-root sim,
   fake ns only — prune_stale calls `docker volume rm`).

Enrollment retained (WARM_CANONICAL=True), no silent de-enrollment. Both false
"can never touch each other" comments removed.

B-redfix-5 (reconciler rollback restore() outside the upgrade try/except) accepted as
NON-BLOCKING: verified verbatim present at parent 07fc6d4, so it predates the enrollment.
F-redfix-4 made it reachable; that path is now closed. Correctly filed, not silently fixed.

All six recipes now hold a fresh Adversary PASS; F-redfix-1/2/3/4 CLOSED; no open blocking
finding. Builder may re-assert ## DONE.

Node clean: throwaway volume + scratch removed, real warm root untouched (keycloak/ = last_good
only, no canon-keycloak/ created), canon volumes intact, live keycloak /realms/master 200 throughout.
2026-07-09 00:19:39 +00:00
78af2c995a note(redfix): post-verdict JOURNAL consult — warm-state dimension never considered (F-redfix-4 is a blind spot, not a deferral)
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-08 23:58:32 +00:00
941d5e81c1 review(redfix): VETO — keycloak enrollment not collision-free in warm state (F-redfix-4)
Some checks failed
continuous-integration/drone/push Build is failing
Post-reboot re-confirmation #8. New break-it probe on the two HARNESS fixes (previously
only sha-reachability checked, never content, never second-order effects).

mumble 07fc6d4: CLEAN — attempts 12->36 @5.0s = claimed 180s; all assertions unchanged,
so a dead server still FAILs. Budget widened without weakening the test.

keycloak 61211db: correct at the domain/stack layer, but its own invariant is FALSE.
canonical_domain() separates the two deployments by domain, yet warm STATE is keyed by
recipe: warmsnap.snap_dir("keycloak") is ONE slot shared by the live-warm reconciler
(warm-keycloak, stateful=True) and the newly-enrolled data-warm canonical
(warm-canon-keycloak, seeded via promote_canonical -> seed_canonical, no WARM_DOMAINS guard).

Proved by execution on cc-ci in a scratch CCCI_WARM_ROOT against the real idle canon stack:
snapshot(canon) -> snapshot(other stack) destroys the canonical known-good, and
restore(canon) raises SnapshotError. Fails closed (no cross-stack data write), but:
 1. every stateful reconciler upgrade deterministically destroys the canonical snapshot;
 2. the reconciler's rollback restore() is OUTSIDE its try/except and its snapshot->restore
    window spans deploy+wait_healthy (health_timeout 900). A sweep promote landing there makes
    the rollback raise AFTER abra.undeploy(live) -> live keycloak left undeployed = outage of
    the shared OIDC provider lasuite-*/drone depend on. Exactly the hazard canon §2.B's
    de-enrollment exception existed to prevent.
 3. prune_stale()'s documented "keycloak untouched" invariant becomes false once seeded.

Undetectable by the M2 run: /var/lib/ci-warm/keycloak/ holds only last_good (no canonical.json,
no snapshot/) vs cryptpad which has both — the promote deployed but seed_canonical never ran,
registry-advance being deferred to the operator's merge. First seed happens post-merge, unexercised.

VETO scoped to keycloak. M1 classifications and the discourse/mattermost-lts/gitea/bluesky-pds/
mumble fixes are unaffected and remain PASS. Clears when the two deployments use disjoint
warm-state paths and each restore() returns its own stack's volumes.

Node left clean: real warm root untouched, volumes intact, live keycloak 200 throughout.
2026-07-08 23:58:01 +00:00
4682aa1216 review(redfix): post-reboot re-confirmation #7 — DONE stands, no VETO. Zero delta since #6 (Builder JOURNAL append only). New break-it probe: verified fix CONTENT (not just sha reachability) at every M2 anchor via cold bare clones — mattermost-lts 4ca7f418 adds backupbot.restore.post-hook, gitea a0f2db8 adds app.ini.init + docker-setup cp, bluesky-pds 4987ba9 adds FQ APP_HOST with no leftover bare app alias — each with its parent commit as a negative control (0 matches pre-fix). All 4 recipe fixes now content-anchored. All findings closed
Some checks failed
continuous-integration/drone/push Build is failing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HHWWoceR5fHLTEwW8b3QnQ
2026-07-08 23:42:52 +00:00
c6593bbf6e review(redfix): post-reboot re-confirmation #6 — DONE stands, no VETO. Zero delta since #5 (only a Builder JOURNAL append). Break-it probe on evidence-anchor rot: cold bare-cloned all 3 remaining recipe mirrors — mattermost-lts 4ca7f418, gitea a0f2db8, bluesky-pds 4987ba9 all REACHABLE with subjects matching their asserted fixes, and harness branch redfix-m2-harness still pins exactly 07fc6d4 (mumble) with 61211db (keycloak) reachable. Rot confined to discourse (F-redfix-3, CLOSED). All findings closed
Some checks failed
continuous-integration/drone/push Build is failing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WY7MNKwa6gascKiXER9ZbN
2026-07-08 23:36:00 +00:00
805c44e42d review(redfix): post-reboot re-confirmation #5 — DONE stands, no VETO. Audited Builder's F-redfix-3 addendum (612412c): append-only (+54/-0), my files + DONE line + historical shas untouched, no gate reopened. Ran its published repro verbatim in a fresh clone: ede6399 → official image 3.5.3 + 0 sidekiq, both EXPECTED met. Ruled out vacuous zero (file exists, blob, services:app: present) and added negative control (d7c8c47 added sidekiq, 0c4539b removed it) — fix COMMIT still reachable, only sha labels rotted. F-redfix-3 remedy verified, not just asserted
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-08 23:29:09 +00:00
1271c248b9 review(redfix): post-reboot re-confirmation #4 — DONE stands, no VETO (M1+M2 intact, both findings closed) + NEW non-blocking F-redfix-3 (CLOSED): discourse M2 evidence shas 9ff5e19/53ba0910 gone from mirror (branch rebased+extended by later phases), but fix CONTENT re-verified at HEAD ede6399 — official image + 0 sidekiq; other 3 recipe shas + harness branch pin exactly
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-08 23:22:05 +00:00
67e86ded88 review(redfix): F-redfix-2 CLOSED — gitignore remedy cold-verified (fresh-clone + add -A replay, origin/main, no HTTP exposure); full 51-char key never committed (my prefix-grep was self-contaminated); Builder's symlink correction confirmed — one repo, fix fully applied; rotation left to operator; DONE stands, no VETO; consumed ADVERSARY-INBOX
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-08 23:13:26 +00:00
a16c367091 review(redfix): DONE re-confirmed post-reboot #3 (M1+M2 PASS, no VETO) + NEW non-blocking finding F-redfix-2 — live API key in un-gitignored config.json at both Builder clone roots (never committed; one 'git add -A' from a push)
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-08 23:06:44 +00:00
ddf3788483 note(redfix): post-reboot re-confirmation — phase remains DONE (M1+M2 PASS, no VETO); node healthy; no pending claim; loop stopped
Some checks failed
continuous-integration/drone/push Build is failing
2026-07-08 20:29:07 +00:00
337931065a review(redfix-M2): PASS 6/6 — discourse re-verified level=5 (F-redfix-1 CLOSED); all 6 canon-sweep fixes cold-verified; node clean; no VETO; Builder cleared to DONE
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 07:06:27 +00:00
3f5eddfdbd review(redfix-M2): FAIL — 5/6 PASS (keycloak/mumble/gitea/bluesky/mattermost), discourse FAIL (F-redfix-1: incomplete migration, dangling image-less sidekiq in compose.smtpauth.yml -> R011 lint regression + breaks smtp-auth; run #849 also level=4)
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 06:45:46 +00:00
21e8ca336e note(redfix-M2): bluesky-pds component VERIFIED (4/6) — chaos-deploy fix, caddy resolves own app 10.0.5.5 (bare app=foreign 10.10), health 200 {0.4.219}, 0 conn-refused; node clean
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 06:21:42 +00:00
319ec9cd36 note(redfix-M2): gitea component VERIFIED (3/6) — chaos-deploy fix, no read-only crash, app.ini seeded 1862B, API 1.24.2; canonical unchanged; merge-gating honest
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 06:17:57 +00:00
6ff71f76b3 note(redfix-M2): mumble component VERIFIED (2/6) — handshake PASS 10.3s (flake confirmed, fix non-weakening); consume inbox (b96b8a4 staleness is bluesky-only, keycloak/mumble unaffected)
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 06:13:34 +00:00
5babd027f0 note(redfix-M2): keycloak component VERIFIED (1/6) — promote at warm-canon-keycloak, live SSO undisturbed (up 4d, 200); gate verdict pending 5 more
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 06:09:23 +00:00
966edb3042 note(redfix): idle break-it probe — live keycloak 200 (undisturbed), gitea canonical unchanged (no false promote during rework); M2 not yet claimed
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 04:12:39 +00:00
fca936ef50 note(redfix): M2 interim corroboration — mattermost-lts run #901 restore tier (test_restore_returns_state) PASSES, clean teardown + no leak; non-contending artifact check, not a verdict; M2 not yet claimed
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 02:15:17 +00:00
edee91341c review(redfix-M1): PASS — all 6 classifications cold-verified by my own isolation re-runs. discourse=stale overlay (no timeout, my run converged in min), mattermost=deterministic restore RED, mumble=flake (handshake green isolated), bluesky=recipe app-alias proxy collision (getent app->10.10.0.4, not machinery), gitea=read-only app.ini JWT crash (canonical unchanged), keycloak=warm-domain collision. No VETO. Node clean before+after.
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 01:19:27 +00:00
14aa55f02b note(redfix): M1 interim — gitea CONFIRMED by my run + container crash log (LoadCommonSettings JWT save to read-only /etc/gitea/app.ini config mount); genuine recipe defect
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 01:09:49 +00:00
c9c870f0a6 note(redfix): M1 interim — mattermost CONFIRMED deterministic restore RED (ci_marker does not exist, 91s isolation; no restore.post-hook); genuine recipe defect not load-race
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 01:02:16 +00:00
968780234b note(redfix): M1 interim — discourse CONFIRMED (no timeout/wedge; install+backup+restore+custom pass, upgrade reds on PR-faithfulness overlay asserting unreleased official:3.5.3/no-sidekiq); stale overlay test
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 00:56:57 +00:00
5512dcaba5 note(redfix): M1 interim — mumble CONFIRMED flake (handshake test PASSED in my isolation run, all 5 tiers green, promote ok); bluesky orphan cleaned up
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 00:44:44 +00:00
0c11b0b39d note(redfix): M1 interim — bluesky-pds CONFIRMED by my reproduction (getent app->10.10.0.4 proxy collision, real app 10.0.5.6 never resolved; deterministic 000); recipe routing defect not machinery/flake
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 00:26:19 +00:00
93e1e7d87a note(redfix): M1 pre-staging — mattermost (no restore.post-hook) + discourse (PR-faithfulness overlay) static claims corroborated via code; owe own discourse isolation run + bluesky diag before any PASS
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-18 00:08:31 +00:00
a30e71825e review(redfix): open phase — REVIEW skeleton, cold access to cc-ci confirmed healthy, awaiting Builder bootstrap + M1 claim
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-17 23:19:36 +00:00