feat(reconciler): event-driven trigger core (ADR 0037 phase 1) #238
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-infra!238
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "feat/reconcile-trigger-core"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
Phase 1 (infra half) of the event-driven reconcile trigger — epic bitborg-docs#54, closes #235. Pairs with bitborg-web#97 (the
triggerReconcileadapter).Puts a prompt trigger in front of the existing reconciler without changing the reconciler: a systemd
.pathunit fires the oneshot when web writes a sentinel, so sign-up / trial / Renovate apply in seconds instead of waiting up to 5 min for the timer. The reconciler container unit + timer are untouched; the timer stays the backstop.Changes
reconcile_trigger_dir/reconcile_trigger_sentinel/reconcile_trigger_min_interval(web creates + mounts the dir since it starts before the reconciler role; the reconciler role installs the units).rw; setRECONCILE_TRIGGER_PATH; addUserNS=keep-id:uid=1000,gid=1000sonode(1000) maps togitborgand the host.path/kick (running asgitborg) can read + delete what web writes — the same trick the reconciler uses for its textfile mount.bitborg-reconcile.path→ debouncedbitborg-reconcile-kick.service→ starts the oneshot. Kick enforces a 30 s min-interval floor (coalesces bursts), removes the sentinel before the run (at-least-once-after-last-write), and never fails the kick on a reconcile error (ReconcilerFailedalready covers that).Validation
ansible-playbook --syntax-check✓ansible-lint(production profile) — 0 failures ✓shellcheckon the rendered kick script ✓⚠️ Operator-verify before apply (via the gated infra-apply flow — NOT applied here)
UserNS=keep-idaddition recreates the web container on apply; confirm web comes back healthy (it's a read-only network app, so keep-id should be inert, but verify).gitborgand confirm the reconciler fires within seconds (journalctl --user -u gitborg-reconcile-kick); confirm bursts coalesce to ~1 run / 30 s.gitborglingering is enabled (already required by the existing reconciler timer).