ArombaDocsChangelogSecurityStatus

Docs

Aromba — When Things Break

The rule: the user’s server keeps taking care of itself no matter what happens to us, to Telegram, or to the AI provider. Chores, watchers, the Warden and the receipt never depend on anything outside the server. Only the chat and the dashboard do.

1. Design that makes this true

2. Failure table

What breaksUser seesKeeps workingRecoveryWe do
aro.mba relay downnothing at first; after 10 min offline the bot can’t deliver, so nothing arrives. Dashboard shows “relay unreachable, last sync HH:MM”.chores, watchers, receipts (queued), terminaldaemon reconnects; queue flushes; one “I was offline 03:10–04:20, here’s what happened” messagestatus page updated within 10 min; second relay instance takes over (phase 3+); post-incident note in the changelog
Telegram Bot API downno messages; relay shows the bot unreachableeverything on the server; dashboard live (phase 4)relay retries; messages delivered in order when Telegram returnsnothing to do but wait; status page notes it
AI provider down or slow“The model is unreachable: …. I’ll keep trying. The chores and the watchers are unaffected.” Then, after half an hour, “still unreachable”; and one line when it answers again. Said once per outage, never once per questioneverything except the assistantthe daemon retries by itself: one small call every minute for 30 min, then hourly, until it answers; user can switch provider with aromba key—
User’s key invalid / out of credit“Your AI key stopped working (provider says: …). aromba key to replace.”everything elseuser replaces the keyModels page explains common provider errors
User’s calendar unreachable, or its address reset (calendar skill)“Calendar work unreachable since 10:15; nothing is held for it until it answers.” Or: “Calendar work: its address stopped working. aromba calendar remove work, then add, on the server.”everything; the last good copy counts for 2 hours, then nothing is held for the calendarthe Worker retries every 15 minutes; the user sets a new address—
A reminder cannot reach the chat (relay or Telegram down)nothing then; the next back-online line counts what expiredthe calendar itself: items, holds and the demo check run on the servera reminder and a demo check carry the moment they stop being worth sending; the queue here and the relay’s both drop them then, instead of sending them latethe relay honours that deadline in its own queue
User’s server offline for days/weekson return: one message “vultr-fra-01 is back after 12 days. Skipped 12 nights; running tonight. 3 alerts while away: …”—night chores run on the next quiet window, not on boot; probation clock pauses while offline—
Server IP changed / rebuilt from snapshotworks: pairing is by server ID and relay token, not IP. A restore from an image with the same ID and a running original → both connect; relay flags a duplicate and asks in the chat which one to keep—user picks; the other gets aromba pairduplicate detection in the relay
Update broke the daemonsystemd counts three failed starts of either service within ten minutes and runs the rollback unit with the previous release’s Warden binary — so a broken new one cannot block its own rollback; a single crash sets nothing off, and on a confirmed release nothing is rolled back or restarted (PLAN D102); the rollback stops both services, the previous release comes back, the Worker sends “Update 0.4.1 failed to start; rolled back to 0.4.0.” A release that ran for five minutes with the Worker talking to the Warden is confirmed and never rolled back by a later crash loop.everything, on the old versionautomatic; the user is told; auto-update pauses until the next releasestaged rollout halts when rollback reports rise (with reports on, a server reports its rollback once, for the version that failed); fix, re-release
Update broke a chorechore fails, retries once, then disables itself: “Docker cleanup failed twice after update; disabled. Undo available for last night.”all other choresuser re-enables after the fix; undo restores if something was changedchore tests in CI per OS; hotfix release
Our release key compromiseddaemons refuse unsigned or wrongly signed updates; remote freeze can’t be forgedeverythingwe publish a key-rotation release signed with the offline backup key; daemons accept the rotation only through that pathrotate, disclose in the changelog and SECURITY.md within 24 h
Relay database lostdashboard history gone (phase 4); pairing intact if the pairing table is restored from backupeverything on the server; chat resumes after pairing table restorerelay restores from the last backup (hourly); if pairing is lost, every user gets “Please re-pair: run aromba pair” oncehourly encrypted backups off-box; restore drill monthly
Warden crashesWorker can’t execute anything privileged; assistant answers read-only; bot: “My guard process restarted; nothing privileged ran for 40 s.”reads, chatsystemd restarts it within seconds; Worker re-handshakescrash report if opted in
Worker crashesa gap in the chat; Warden restarts itscheduled chores already handed to the Warden finish; new ones waitautomatic—
Server’s own disk full (100%)Aromba’s emergency path: journal to a 1 MB reserved ring; disk-95 event fires the emergency cleanup (green only); alert “Disk 100%: freed 2.1 GB from caches; needs you for the rest.”watchers, alertsuser acts on the alert—
Clock badly off on the serverschedules drift; certificates look expired—time-sync fix chore (green) runs; alert if it can’t—
DNS broken on the servercan’t reach relay or providerlocal everythingdaemon tries the relay by IP fallback baked into the binary; alert via terminal only—
Pairing link leaked before usewhoever taps first owns the chat—token is single-use and 15 min; aromba pair from the terminal invalidates it and re-pairs—
Hub or catalog downskills can’t be browsed or installed; installed skills unaffectedeverything installedwaitstatus page
We disappear (project abandoned)nothing changes on the server; chat stops when the relay stopschores, watchers, receipts, terminal, foreveruser runs the open-source relay themselves: aromba relay --self-hosted, then aromba pair against itthe relay is open source from day one for exactly this reason

3. Degraded-mode messages

One message per transition, never repeated:

4. Our side — operations

5. What we test before each release