- dstamp: attribute + fix the discourse abra-stamp drift (env change 06-05→ 06-10, harness-neutral, currently pinning discourse at L1); blast-radius sweep; HC1 keeps its teeth - mailu: backupbot v2 labels recipe PR, restore proven on real seeded mail, backup rung earned instead of skipped (operator approved re-entry) - kuma: uptime-kuma first-run wizard + create-a-monitor functional test (Socket.IO or Playwright, real probe evidence, flake-checked) - drone: gitea-dep enrollment, maximal subset per Phase-2 scoping; P0 /etc/timezone host deploy is orchestrator-owned (3bde76f committed)
4.8 KiB
Phase dstamp — investigate & solve the discourse abra-stamp drift
Mission (operator-specified): since ~2026-06-10, discourse's upgrade tier fails its HC1 version-stamp check on EVERY run — on both old and new harness at the same ref, so it is proven harness-neutral env drift, and its mechanism is UNATTRIBUTED. Find the root cause, fix it properly, restore discourse to its true level in real CI, and determine whether the same drift silently affects any other recipe's upgrade tier.
State files: STATUS-dstamp.md, BACKLOG-dstamp.md, REVIEW-dstamp.md,
JOURNAL-dstamp.md. DECISIONS.md shared.
1. Known evidence (rcust M2, 2026-06-11 — start here)
- Baseline: run 184 (2026-06-05) had discourse at L4 with upgrade green.
- Since ~06-10: upgrade-HC1 at ref
7ae7b0fstamps the prev-base tag commit (eb96de94+U) instead of the expected version — IDENTICAL on old pre-rcust harness and new main (A/B at same ref + invocation ⇒ rcust exonerated, branch-tip/tag/abra-pin drift eliminated as causes during M2; what CHANGED in the env between 06-05 and 06-10 was never attributed). - Evidence artifacts:
/var/lib/cc-ci-runs/m2p-discourse/,/var/lib/cc-ci-runs/ab-discourse-7ae7b0f-oldmain/, JOURNAL-rcust 2026-06-11 entries, machine-docs/DEFERRED.md note. - Under the new de-capped semantics a failed upgrade rung blocks at L1 — this drift is actively misrepresenting discourse, which makes it a live quality regression, not cosmetic.
2. Investigation requirements
- Attribute, don't patch. Build a timeline of everything stamp-relevant that changed
on the CI host between 06-05 and 06-10: abra binary version/mtime (
abra --version, ~/.local/bin or wherever it lives), the recipe catalogue state,~/.abra/recipes/ discoursegit state (tags, fetch times, whatgit describe/abra version resolution sees), the discourse mirror's tags/branches (was a tag re-pointed upstream or in the mirror?), and the harness's stash/revert dance aroundabra recipe lint/pinned deploy (runner/harness/abra.py:109-114) — plus how upgrade-HC1 derives its EXPECTED stamp. - Reproduce minimally outside a full run if possible (the abra version-resolution command against the same checkout) so the Adversary can re-run the attribution cheaply.
- Classify the fix target honestly: env state (fix the host state + document how it drifted), harness assumption (fix run_recipe_ci/lifecycle WITHOUT weakening HC1 — the check itself must keep its teeth), or recipe/mirror tag problem (recipe-mirror PR, never merged). If the expected-stamp derivation is what is wrong, the correction must be justified against abra's documented behavior, not against "what makes the test pass".
- Blast-radius sweep: once attributed, check every enrolled recipe's most recent upgrade-tier evidence for the same signature (prev-base tag commit stamped where a version was expected). Any other affected recipe gets fixed by the same root-cause fix and re-proven.
3. Gates
M1 — Attribution. Root cause documented with a reproducible minimal demonstration + the 06-05→06-10 change identified by direct evidence (not inference alone); fix implemented (env/harness/recipe per §2.3); blast-radius sweep complete. Adversary independently reproduces the minimal demonstration and re-derives the attribution.
M2 — Proven in real CI. Discourse full lifecycle green with upgrade-HC1 stamping the
CORRECT value at its true level (expected L4+ / L5 if lint passes); ≥1 run via the drone
!testme path; any other affected recipes re-proven; HC1 demonstrably NOT weakened (the
Adversary must show a wrong stamp still fails — synthesize one if needed). DEFERRED
entry closed with pointers. Fresh Adversary PASS → ## DONE.
4. Guardrails (binding)
- HC1 keeps its teeth — any change that would let a genuinely wrong version stamp pass is an automatic FAIL.
- Recipe mirrors: PR only, never push main, never merge. Shared checkout race: never
git-checkout
~/.abra/recipes/discoursewhile its build runs. Real-CI etiquette: ≤2-3 concurrent deploys, teardown on every exit path, no secrets in logs/commits. - Host-state changes (abra binary, catalogue) beyond reading require a DECISIONS.md entry; if the fix needs an abra version pin/upgrade host-wide, propose it in STATUS-dstamp.md for the orchestrator/operator instead of doing it unilaterally.
- Commit author
autonomic-bot <autonomic-bot@noreply.git.autonomic.zone>; push every commit. CI host has no python3 on default PATH — use shell orcc-ci-run.
5. Definition of Done
Drift mechanism attributed with reproducible evidence; fixed at the true root; discourse back at its real level in real CI (drone path included); no other recipe silently affected; HC1 unweakened and adversarially re-proven; DEFERRED closed; M1+M2 fresh PASSes.