lbreeze
Software

Standby

**865 features shipped** — including `Email + password login (argon2id) — `oncall/src/routes/auth.js``, `Account lockout (5 strikes / 15 min) — `oncall/src/routes/auth.js``, `TOTP 2FA — `oncall/src/lib/totp.js``.

latest v0.9.543

Read the docs

Features

Features

  • Email + password login (argon2id) — `oncall/src/routes/auth.js`
  • Account lockout (5 strikes / 15 min) — `oncall/src/routes/auth.js`
  • TOTP 2FA — `oncall/src/lib/totp.js`
  • Email MFA codes — `mfa_email_codes` table
  • Magic-link login — `magic_link_tokens` table + `lib/emails.js`
  • WebAuthn / passkeys — `oncall/src/routes/webauthn.js`
  • OIDC SSO — `oncall/src/routes/oidc.js` + `oidc_providers`/`oidc_links`
  • SCIM 2.0 provisioning — `oncall/src/routes/scim.js`
  • Service accounts / API tokens — `oncall/src/routes/service-accounts.js`
  • RBAC roles + permissions — `lib/rbac.js`
  • Per-user IP allowlist — `lib/ip-allow.js`
  • User invitations — `user_invitations` table + `/invite` UI
  • User avatars — migration `user_avatar`
  • CSRF protection — `oncall/src/plugins/csrf.js`
  • Security headers (helmet-style CSP/HSTS/COOP/CORP) — `plugins/security-headers.js`
  • Audit log with hash chain — `lib/audit.js`
  • Encryption-at-rest helpers — `lib/crypto-at-rest.js`

Features

  • **Change management depth (v0.9.202)** — change calendar + conflict detection (vs maintenance windows + coverage gaps),
  • **Public-status monitoring soak + honest public state (v0.9.275/277)** — resolving an incident published "Resolved" inst
  • Service Desk / ITSM (tickets) — INTERNAL staff queue (status/priority/assign/comments); public submit removed — `routes/
  • Service Request Catalog (ITSM) — request types + form schema → opens a ticket — `routes/catalog.js` + `request_catalog`
  • Service Portfolio (ISO 20000 §8.2.1/8.2.2) — every service across its lifecycle (proposed→catalogue→retired), owner/crit
  • Supplier Management (ISO 20000 §8.2.3/8.3.4) — supplier register (auto-seeded from cloud/dns/ai providers), underpinning
  • Service Catalogue (ISO 20000 §8.2.4) — published, consumable slice of the portfolio with resolved SLAs/suppliers/request
  • Problem Management (ITIL) — root-cause records linking incidents/tickets → known-error/workaround/fix — `routes/problems
  • SLA policies — response/resolution targets per priority; breach flag on tickets — `routes/sla.js` + `sla_policies` migra
  • Internal Knowledge Base — engineer runbooks/how-tos; **rendered markdown** (GFM tables/code via `components/Markdown.jsx
  • **Getting-started onboarding (launch prep)** — dashboard getting-started checklist (`GET /api/setup/checklist` computes
  • **Admin-editable help tips (white-label)** — DB-backed per-page guidance callouts managed from **Settings → Help tips**
  • **Desktop multi-window** — Tauri client (`desktop/`, v0.3.10) `open_new_window` command opens a second window on the sam
  • **Sidebar rebalance (v0.9.101)** — the 23-page Security group split into **Security ops** (overview / auto-remediation /
  • **DCIM power & environmental telemetry (DCOM)** — live PDU power draw + temperature / humidity / smoke / fire / water /
  • **License feature packages (entitlement gating)** — the Zephyr-issued license's `features` array now actually gates capa
  • **Meetings system** — a dedicated Operate → Meetings hub: start ad-hoc meetings (subject + type), see all live + recent
  • **Content-width toggle** — a persisted top-bar toggle (next to the theme toggle) switches all pages between a comfortabl
  • **War-room visibility** — the incidents list flags incidents with an open video war room (badge + one-click "Join"); the
  • **White-label meet branding** — meet servers auto-brand with the platform logo + brand colour (Branding tab) + admin-upl
  • **Shared meet rooms — Zephyr integration (CROSS_PROJECT_CONTRACT §13 / Zephyr §J)** — `POST /api/admin/meet/rooms` mints
  • **CVE bulk-fix deduped** — `POST /api/cve-findings/bulk-fix` collapses N CVEs against the same (host, package) into ONE
  • **Mint a meet server (self-hosted Jitsi for the war-room)** — one-click provision of a Jitsi video server on an enrolled
  • **Starter operational content auto-seeds on boot** so a fresh install isn't empty — 7 runbooks + 3 runbook-routes + 6 in
  • Incidents CRUD + lifecycle — `routes/incidents.js`
  • Incident notes — `incident_notes` table
  • Incident tags — `routes/tags.js`
  • Per-incident counters — `incident_counters` table
  • Client-side silence — `incident_client_silence` migration
  • Postmortems — `routes/postmortems.js` + `services/postmortem.js`
  • Handoff page — `routes/handoff.js` + `/handoff` UI
  • Per-incident chat — `routes/chat.js` (`chat_channels`/`chat_messages`/`chat_memberships`)
  • Standby Comms (SSE, markdown, mentions, threads, reactions, attachments, DMs, presence, search, slash commands, webhooks
  • **Incident bulk actions (v0.9.232)** — row checkboxes + select-all + Ack / Resolve / Mark false-positive / Delete (super
  • **Incident recycle guard (v0.9.237)** — `createIncidentFromAlert()` was an unconditional INSERT, so a re-breach minted a
  • **"One investigation" report (v0.9.242)** — assembles what fired, what CHANGED (deployments), autopilot findings, RCA, a
  • **Change/deploy correlation (v0.9.238/243)** — `deployments` table + dual-authed ingest (signed HMAC webhook or token),
  • Response templates — `routes/response-templates.js`
  • Saved views — `routes/saved-views.js`
  • Incident Observability v2 (default) — per-incident scope endpoint, per-source lead panels (anomaly baseline band, backup
  • Cross-host incident storm rollup — one grouped incident per shared-cause event ("N hosts affected"), page-once, per-host

Features

  • Escalation chains — `routes/chains.js`
  • Escalation steps + worker — `workers/escalation.js`
  • Label-based chain routes — `routes/chain-routes.js`
  • Integration overrides — `routes/overrides.js`
  • Alert silences — `alert_silences` table
  • Severity chain routing — `services/severity-chain.js`
  • Pager intelligence UI — `/pager-intelligence`
  • **Heartbeats / inbound liveness monitors (v0.9.327)** — the inverse of a probe: notices when something STOPS reporting (
  • **Multi-target escalation steps + paging strategies (v0.9.327)** — a step could name exactly ONE target, so "wake the wh
  • **Repeat-until-answered (v0.9.327)** — a chain whose last step went unanswered simply ended, in silence. `escalation_cha

Features

  • Schedules CRUD — `routes/schedules.js`
  • Schedule members + shifts — `services/schedule.js`
  • Swap requests — `routes/swaps.js`
  • iCal export — `routes/ical.js` + `lib/ical.js`
  • Override coverage — `routes/overrides.js`
  • Compensation tracking — `services/compensation.js`
  • **Solo-operator coverage (v0.9.131–133)** — per-role staffing expectation (`coverage_roles.expected_coverage` none|24x7)
  • **Unified coverage system (v0.9.111)** — one `coverage` model + role-lane board for ALL DC-ops personnel (on-site NOC/sm

Features

  • Workflow automation (event→condition→action rules over the notify() stream; actions: webhook / create_ticket / notify) —
  • **External alerts actually page on-call (v0.9.423)** — `ingestExternalAlert` opened the incident, the chat channel, the
  • Alerts table + dispatch — `channels/dispatch.js`
  • Native alert rules engine — `routes/alert-rules.js` + `workers/native-alert-eval.js`
  • **Anomaly-mode alert rules (v0.9.171)** — per-rule `mode` threshold|anomaly: rolling robust-z of the recent window vs a
  • **Alert-rules console (v0.9.225)** — writable `labels` (the column existed since Wave D but no route ever accepted it, s
  • **First-class `host_cpu_busy_pct` metric (v0.9.232)** — synthetic percentage metric (100×(1−idle/total)) so a CPU rule r
  • **Alert-fatigue closed loop / `/alert-health` (v0.9.241)** — rules ranked worst-noise-first (pages 7d, ack + suppressed
  • Generic webhook integrations — `routes/integrations.js`
  • Push subscriptions (web push) — `push_subscriptions` table
  • Flood control — `services/flood.js`

Features

  • **⛔ A PAGER THAT COULD NOT PAGE, AND NEVER SAID SO (v0.9.484)** — INC-2026-0684 was a CRITICAL telemetry blackout on `up
  • **Repeat notifications actually collapse now (v0.9.365)** — `notify()`'s `group_key` deduplicated nothing: it only colla
  • **No worker registers a clock-derived jobId (v0.9.365)** — `jobId: boot-${Date.now()}` makes every restart a *new* job,
  • Email channel — `channels/email.js`
  • SMS channel — `channels/sms.js` (via MessageBird)
  • Voice channel — `channels/voice.js` (via MessageBird)
  • MessageBird/Bird.com client + webhooks — `channels/messagebird-client.js`
  • Admin SMTP config — `routes/admin-smtp.js`
  • HTML email templates — `lib/email-template.js` + `lib/emails.js`
  • Unified notification log — `routes/notification-log.js`
  • Per-user notification preferences — `routes/notification-prefs.js`
  • In-app notifications (bell + /notifications page) — `services/notifications.js` + `routes/notifications.js` + `component
  • Agent self-update notification — heartbeat detects an `agent_version` change (autonomous self-update / dispatched update

Features

  • Morning + ad-hoc digest — `services/digest.js` + queue `digest-mail`
  • Extras digest pipeline — `services/digests-extra.js`

Features

  • **25 white-label starter runbooks (v0.9.239)** — 8 existing slugs rewritten + 17 new, seeded edit-safely via the shared
  • **Runbook governance fields (v0.9.242)** — owner, status, last_reviewed_at, review_interval_days, service, severity, tag
  • Automated IT documentation — living PDFs auto-generated from live data (infrastructure register, 90-day change log, vend
  • Runbooks CRUD — `routes/runbooks.js`
  • Runbook versions — `runbook_versions` table
  • Runbook runs + step runs — `services/runbook-orchestrator.js`
  • Runbook routing rules — `services/runbook-routes.js`
  • Runbook automation hooks — `routes/runbook-automation.js`
  • Markdown / content-type support — `runbook_content_type` migration
  • Evidence pack generation — `services/evidence-pack.js`
  • Control-linked evidence — `routes/compliance-evidence.js` + `control_evidence`
  • Evidence live-link tokens — `evidence_live_link` migration

Features

  • **Reporting / BI egress (v0.9.202)** — `reporting` schema (9 stable views) + read-only Postgres role (`scripts/create-re
  • SLOs — `routes/slos.js` + `/slos` UI
  • System status / health page — `routes/admin-system-status.js` + `/system-status`. Install-type aware (VPS / Edge-managed
  • Admin queue inspection — `routes/admin-queues.js`

Features

  • **Compliance evidence must be operation, not design (v0.9.528)** — `monitoringConfigured()` counted enabled alert rules
  • **Privileged sessions scored from the recording that already existed (v0.9.529)** — the brokered terminal has written an
  • **A gate that never ran, hiding a break that had been real since May (v0.9.512)** — of 41 `check:*`/`verify:*` scripts,
  • **A blank Metrics tab reads as a quiet host, not a dark one (v0.9.512)** — the empty state was gated on `!data`, a FALSY
  • **An upstream error code is not an explanation (v0.9.512)** — the Logs tab rendered the whole failure as the word `click
  • **Billable-device metering — the number Zephyr bills from (v0.9.512)** — pricing is per-device and nothing could count.
  • **Allow rules were swept by NOTHING, so a whitelist target failed forever (v0.9.509)** — `retireSupersededTargets()` ret
  • **⛔ The IP-control retry loop and hard-failure sweep were block-only too (v0.9.519)** — the same `list_type = 'block'` f
  • **Engine stderr was deciding dedupe identity (v0.9.509)** — the raw `last_error` from a firewall engine was interpolated
  • **Agent failures were cut at 56 characters, losing the half that names the fix (v0.9.509)** — two of the four live IP-en
  • **agentd 0.121.0 — Windows has its own `sudo.exe`, and IP Control called it (v0.9.509)** — `handlers/ipcontrol.rs` ran `
  • **EU AI Act as the 16th framework — the regime we could not put a number against (v0.9.508)** — Standby measured AI gove
  • **Art. 4 AI literacy is the duty already live, so it is the one measured hardest (v0.9.508)** — in force since **2 Feb 2
  • **AI conversation retention shipped 90 days under a 180-day statutory floor (v0.9.508)** — EU AI Act Art. 26(6) requires
  • **Art. 73 is one report with three possible deadlines, not three reports (v0.9.508)** — the first regime in the reportin
  • **The model card the provider owes you had nowhere to live (v0.9.508)** — Art. 53(1)(b) and the GPAI Code of Practice pu
  • **A.5 scored zero on every fresh install, and seeding it would have been worse (v0.9.508)** — the impact register derive
  • **An ISO 42001 control scored `met` off a table that has never existed** — `aiPolicyCurrent` queried `policy_acknowledge
  • **The installer runs on Alpine — all nineteen phases, proved by running it (v0.9.504)** — `scripts/lib/platform.sh` dete
  • **⛔⛔ A runlevel guard whose verdict depended on ALPHABETICAL ORDER (v0.9.504)** — `svc_enable` verified membership with
  • **⛔ The OpenRC launcher would have started Node with no configuration (v0.9.504)** — the first translation of systemd's
  • **`oncall/src/lib/service-control.js` — and the vendor updater that SUCCEEDED, emptily (v0.9.504)** — eleven bare `syste
  • **`check:heredocs` — a comment that executed itself as root (v0.9.504)** — the nginx site body is written with an *unquo
  • **`check:install-e2e` — the installer, run to completion, then interrogated (v0.9.504)** — `check:install-matrix` grades
  • **⛔⛔ A fail2ban jail naming a filter that exists on NEITHER platform (v0.9.504)** — found on Alpine, where `nginx-noscri
  • **⛔ VAPID pre-generation ran BEFORE the migrations, so it failed on every fresh install (v0.9.504)** — "phase 7c" needed
  • **⛔⛔ The host Overview panel read the capability NAME as the answer and bypassed the platform matrix (v0.9.504)** — it s
  • **⛔⛔ `installedVersion()` answered differently depending on the working directory (v0.9.504)** — step 2 read `path.resol
  • **⛔⛔ The Vector upload form could never store the row Alpine asks for (v0.9.505)** — `musl` is a contract across THREE l
  • **⛔⛔ The Vector config template was Debian-shaped, so Alpine could never ship telemetry (agentd 0.118.0)** — with the mu
  • **⛔⛔ The tarball wrapper validated its staged config as TOML, so a musl host could NEVER install Vector (agentd 0.119.0)
  • **⛔⛔ The OpenRC self-update cron was written and never scheduled (agentd 0.119.0)** — `openrc.rs` writes `/etc/periodic/
  • **⛔⛔ `check:vector-config` was WEAKER than the check the host already runs (v0.9.506)** — it validated with `--no-enviro
  • **`check:install-matrix` — the reboot failure a running box cannot show you** — runs the real `platform.sh` inside a rea
  • **`check:crlf` — no committed script may carry a carriage return** — a CRLF shell script does **not run on Linux at all*
  • **Node 26 — targeted AND verified (v0.9.502)** — `.nvmrc` 26, installer default `NODE_MAJOR=26`, and CI runs a `[24, 26]
  • **Dependency modernisation — 8 advisories (6 high) → 0 (v0.9.502)** — fastify 5.12, knex 3.3, pg 8.23, react 19.2.8, und
  • **A succeeded package upgrade was rendering as a warning (v0.9.502)** — `UpgradeRow` had two `if/else` chains setting th
  • **`check:icons` — the failure a build cannot see (v0.9.502)** — a named import a package does not export is NOT a build
  • **RepoMade compliance connector — pairing + signed signal pull (built 23/08/26, unreleased)** — RepoMade had been comput
  • **A.8.20 firewall evidence names the engine the host actually runs (v0.9.444)** — a **true verdict with false evidence**
  • **Control crosswalk — one canonical check, many frameworks (v0.9.367)** — `canonicalId`/`crosswalkRows`/`expandFramework
  • **NIST SP 800-171 Rev 2 (v0.9.368–370)** — the eleventh framework. All **110** practices across 14 families, `nist800171
  • **NIST CSF 2.0 (v0.9.369)** — the twelfth framework. **106** subcategories across the 6 functions (GV/ID/PR/DE/RS/RC), 2
  • **NCSC Cyber Assessment Framework 4.0 (v0.9.370)** — the thirteenth framework. 4 objectives / 14 principles / **41** out
  • **CMMC 2.0 Level 2 (v0.9.370)** — the fourteenth framework. All **110** practices, `CMMC id → 800-171 practice` twins so
  • **Def Stan 05-138 Issue 4 — UK defence suppliers (v0.9.372)** — the fifteenth framework, the control set behind **DEFCON
  • **Framework scores disclose what they are a percentage OF (v0.9.370–371)** — `not_assessed` controls are excluded from t
  • **Audit-ready exports cover every framework automatically (v0.9.371)** — the SoA / signed evidence-pack card carried a *
  • **Attested controls have a re-attestation cadence (v0.9.371)** — 26 attested/questionnaire controls had no `re_attest_da
  • **Training question banks — sampled, shuffled, server-scored (v0.9.365)** — modules can hold a bank larger than the quiz
  • **ISO/IEC 42001 AI Management System (v0.9.328)** — the tenth framework. 49 control rows (11 Annex SL clauses + all 38 A
  • **AI governance register + derived AI system inventory (v0.9.328)** — ISO 42001 A.5. The inventory is DERIVED from `ai_u
  • **AI Use Policy + AIMS Scope Statement (v0.9.328)** — two seeded documents (policy library 35 → 37). The scope statement
  • **Vendor trust dossier (v0.9.202)** — `TRUST.md` + `docs/trust/*` (architecture, supply chain, agent security, tokens, d
  • Secrets vault — store/retrieve scoped secrets encrypted at rest, reveal-audited, access-counted — `routes/vault.js` + `v
  • Compliance controls + state machine — `routes/compliance.js`
  • SOC 2 framework — `compliance_framework_soc2` migration
  • PCI DSS framework — `compliance_framework_pci` migration
  • ISO 27001 / CE+ / NIS2 / DORA / GDPR seeded controls — `services/compliance-controls.js`
  • ISO/IEC 20000-1:2018 (service management) framework — SMS clauses wired to the ITSM surfaces (service catalogue, SLAs, i
  • Per-control overrides + rationale templates — `routes/compliance-overrides.js`
  • Compliance evidence exports — `routes/compliance-exports.js`
  • **Certification marks on the trust page (v0.9.475)** — the badge an auditor issues, shown publicly with issuer, scheme,
  • **Company document store (v0.9.475)** — legal, insurance, certificate, contract and policy documents, versioned (so "the
  • **Physical access control is measured (v0.9.476)** — the Physical family was 45 controls and ONE automated check (2%). `
  • **Asset classification — owner, criticality, environment, data class (v0.9.478)** — `fleetAssetInventory` backed **14 co
  • **Training is a course, not a five-question quiz (v0.9.481–483)** — `trainingCompliance` carries **41 controls across 13
  • **Training certificates are actually verifiable (v0.9.482)** — the PDF printed `sha256(email|module|date|v1)` under the
  • **Resumable training modules (v0.9.482)** — section position lived in React state alone, so a refresh returned a learner
  • Auditor evidence-pack handoff (CFE partnership) — `routes/auditor-pack.js` + migration `20260820100000_auditor_pack_toke
  • `auditor` RBAC role (external, read-only) — `lib/rbac.js`. Narrower than `observer`: audit/status/host/security-event re
  • Compliance check engine — `services/compliance-checks.js` + `workers/compliance-worker.js`
  • Compliance questionnaire — `compliance_questionnaire` migration
  • OpenSCAP host scans — `routes/oscap.js` + `workers/oscap-scheduler.js`
  • OSCAP AI explainer — `routes/oscap-ai.js`
  • OSCAP profile overrides + skip rules — migrations `oscap_profile_override`/`oscap_skip_rules`
  • OSCAP remediation auto re-scan (partial scan flag + full follow-up dispatch) — migration `20260521140000_oscap_remediati
  • OSCAP per-rule re-check after remediation (immediate pass/fail overlay from the `--remediate` partial result, before the
  • OSCAP failing-rules filter pills + live remediation progress card + per-rule re-check badges — `ui/app/compliance/oscap/
  • GDPR subject-rights requests — `services/subject-rights.js`
  • Breach incidents (72h tracker + art. 33 report) — `routes/breach.js`
  • Retention policies + nightly purge — `workers/retention-worker.js` + `workers/data-retention.js`
  • Subprocessor registry — `routes/subprocessors.js`
  • Vendor risk register — `routes/vendor-risk.js`
  • Vendor feedback — `routes/vendor-feedback.js`
  • DPA management — `routes/dpa.js`
  • Legal & privacy surface — `routes/legal-privacy.js`
  • Public trust data — `routes/trust.js`
  • Penetration tests + findings + PDF reports — `services/pentest/*`
  • Training catalog + assignments + completions + attempts — `services/training.js`
  • Deployment records — `routes/deployment-records.js`
  • Risk register — `routes/risks.js`
  • Asset register with cost — `routes/assets.js`
  • Change records — `routes/change-records.js`
  • Approved software baselines — `routes/approved-software.js`
  • Default-password findings — `default_pwd_findings` table
  • Policies + versions + user acks — `routes/policies.js`
  • SBOM — `routes/sbom.js` + `scripts/gen-sbom.js`
  • Mitigation plans — `services/mitigation-plan.js`
  • CRA (Cyber Resilience Act) framework — 28 controls incl. automated `sbomCurrent`/`signedUpdatesConfigured`/`cvdPublished
  • Signed conformity packs (CRA vendor pack; pluggable regime cover for SSDF) — token-gated public HTML/JSON/PDF, admin min
  • Regulator reporting clocks — NIS2/DORA/GDPR/CRA qualifying wizard on incidents, armed deadline countdowns w/ T-50/T-90 r
  • Reporting-clock Arc 2 leftovers — NIS2 Art.23/DORA Art.19 controls score off real clock cadence (`reportingClockCadence`
  • SBOM shipped inside release artifacts (CycloneDX) + `/api/v1/sbom` — `scripts/gen-sbom.js` fail-open in release pipeline
  • RFC 9116 security.txt (oncall + status) + seeded CVD policy — `routes/security-txt.js`-style handlers + policy library (
  • AI compliance gap-fill drafts — per-framework "Fill gaps with AI", structural draft-kind matrix (attestation never on au
  • compliance_manager role (full GRC write, zero fleet/security mutations) — `lib/rbac.js` (v0.9.174)
  • Trainings engine correctness — lifecycle worker (annual re-assign + T-30/T-7 reminders), honest role-bound compliance ch
  • Phishing awareness content pack (8 modules w/ quizzes) + report-phishing intake/triage loop feeding security_events — `r

Features

  • **⛔ Every log line carried the time we READ it, not the time it happened (v0.9.491 / agentd 0.110.0)** — `logs_shape` se
  • **⛔⛔ `vector validate --no-environment` does not compile VRL (v0.9.491)** — Vector's own help says that flag disables en
  • **Rows stored before v0.9.491 keep their wrong timestamps.** The fix corrects ingest, not history. A backfill-repair wou

Features

  • **⛔ Why `/cve` read zero, and it was never about VIR (v0.9.488 / agentd 0.107.0)** — the only live detection path was *"
  • **Findings can only be closed by the pass that found them (migration `20270314100000`)** — `cve_findings.detected_by`. E
  • **A stale package inventory is refused, not matched (agentd 0.107.0)** — `dpkg_inventory_at` rides beside the array as a
  • **A fleet-wide zero is a failed run, not a clean fleet** — plus `POST /api/cve/vir-ecosystem-probe`, which asks the live
  • **CVEs for RHEL, SUSE and Windows (v0.9.489 / agentd 0.108.0)** — PASS 1 has always read `meta.updates.packages[].cves`
  • **Windows reports the KB, because it cannot report a CVE (agentd 0.108.0)** — measured on `DESKTOP-A7V81S2`: the local W
  • **Findings with no CVE id are counted, not hidden (v0.9.489)** — `COUNT(DISTINCT advisory_id)` **skips NULL**, so every
  • **Ubuntu CVE breadth still depends on one operator action.** The correlate path is built, guarded and probeable, but dis
  • **A KB→CVE mapping for Windows.** The join key now ships; the mapping does not. MSRC is the source and it is off-host, s
  • CVE findings store — `routes/cve.js`
  • CVE AI explainer — `routes/cve-ai.js`
  • CVE agent-verify workflow — `routes/cve-agent-workflow.js`
  • CVE workaround tracking — `cve_workaround` migration
  • CVE → mitigation linkage — `cve_mitigation` migration
  • CVE regression detection — `cve_regressions` migration
  • CVE vendor data enrichment — `cve_vendor_data` migration
  • VIR ingest (single CVE source: NVD + USN + CISA KEV + Ubuntu Tracker + GHSA normalised by VIR) — `workers/vir-ingest-wor
  • **VIR CVE sync/correlate — advisory→host correlation (`CROSS_PROJECT_CONTRACT.md` §11) NOT BUILT** (real open gap, code-
  • Per-host package security — `workers/host-pkg-security-worker.js`
  • Managed packages tracking — `host_managed_packages` table
  • npm dependency upgrade orchestrator — `workers/npm-upgrade-worker.js` + `services/upgrade-runner.js`
  • Feed ingest progress tracking — `feed_ingest_log`/`feed_ingest_progress`
  • GreyNoise IP enrichment — `routes/greynoise.js` + `greynoise_ip_cache`
  • In-UI CVE data-source config (VIR) — DB-backed source (base_url/token/Ed25519 pin) + Test, replaces env-only; 402/403 →
  • **CVE exploit-attempt detection — "Attempt Intelligence" (v0.9.142, E0–E7)** — detect exploit *attempts* against CVEs (e
  • **Attempt Intelligence — UI loop closed (v0.9.150)** — signatures management surface (`routes/exploit-signatures.js` + S

Features

  • **A Windows endpoint named an AV product removed years ago (v0.9.503)** — the endpoints overview showed a long-uninstall
  • **`check:platform-caps` — what each platform actually gets, and where a tool is a dead end (v0.9.503)** — capability adv
  • **agentd 0.117.0** — carries the OpenRC reconcile fix; all three targets rebuilt, and the musl binary self-verifies on *
  • **✅ A Windows endpoint ships metrics AND logs — the first telemetry of any kind from Windows in this product (agentd 0.8
  • **Metrics and logs surfaces enabled for Windows — after they were proven, not before (v0.9.445)** — `platform-matrix.js`
  • **Windows out-of-binary state is reconciled, so a fix reaches the hosts that already exist (agentd 0.87.0 / v0.9.444)**
  • **Vector's service teardown can remove a wedged service, and says what it did (agentd 0.87.0 / v0.9.444)** — 0.85.0 got
  • **Remote Desktop on a Windows endpoint — one button (agentd 0.86.0 / v0.9.443)** — a server is supported through a shell
  • **Windows backup actually completes — the repo was never created (agentd 0.82.0 + 0.84.0)** — the 0.53.0 entry below shi
  • **The platform scope is enforced at dispatch, not only at advertisement (agentd 0.83.0)** — registration is unconditiona
  • **cPFence is detectable after all — the gate believed the blind detector (agentd 0.82.0)** — `caps_facts.cpfence` was `f
  • **Endpoints get their own detail surface, and hosts a non-enumerable id (v0.9.437)** — the endpoint/server split was don
  • **Windows agents restart themselves (agentd 0.85.0)** — a Windows agent that died **stayed dead until reboot**: the Linu
  • **Windows self-update applies (agentd 0.79.0)** — it never had. `INSTALL_PATH` is a POSIX const used on both platforms,
  • **Host containment on Windows — isolate an endpoint, and let it back out (agentd 0.54.0)** — all five capabilities again
  • **Backup and restore on Windows — "back up a folder from my desktop" (agentd 0.53.0)** — `backup.run` was advertised on
  • **⛔ A WINDOWS DESKTOP WAS ADVERTISING THE ENTIRE LINUX SERVER SURFACE (agentd 0.52.0)** — live 10/08/26, `DESKTOP-A7V81S
  • **⛔ ENHANCE WENT DARK FOR THREE DAYS — the heartbeat RESPONSE carries config and agentd threw it away (agentd 0.51.0)**
  • **`db_dumps` — databases are in a backup snapshot for the first time on agentd (agentd 0.51.0)** — the preset was recogn
  • **Every root wrapper is now checked to be valid bash (agentd 0.51.0)** — ~2,000 lines of shell live inside Rust string l
  • **All seven capabilities the agentd migration dropped are restored (agentd 0.44.0–0.50.0)** — `svc.config.apply` (Servic
  • **Windows endpoints: enrol, report, patch (agentd 0.48.0–0.49.0 / v0.9.401–403)** — a real PowerShell installer behind t
  • **Endpoints — workstations and mobiles as their own surface (v0.9.404)** — own nav group and page, with the posture an a
  • **⛔ FLEET BACKUP OUTAGE — agentd never implemented preset paths (agentd 0.42.0)** — `backup-scheduler.js` splits a polic
  • **IP Control exception counts stop being an artifact of the page size (v0.9.394)** — `/api/ip-control/exceptions` comput
  • **`oscap.pam_repair` — undoing the PAM collision our own remediation wrote (agentd 0.41.0)** — SSG's pwquality rules ins
  • **agentd loop-task parity COMPLETE — the port list is empty (agentd 0.40.0 / v0.9.392)** — all nine of the Python agent'
  • **Support-session audit trail actually reaches the server (agentd 0.37.0 / v0.9.389)** — `shell.session.open` is REFUSED
  • **Suricata alerts read from a cursor, with rule identity (agentd 0.38.0 / v0.9.390)** — replaces `tail -n 500` + server-
  • **Phased-deferred packages render as deferred, not pending (agentd 0.39.0 / v0.9.391)** — the Updates tab gives them the
  • **Batch upgrade falls back to per-package (agentd 0.31.0 / v0.9.383)** — `apt-get install` is all-or-nothing, so one unr
  • **Phased updates no longer report as failures (agentd 0.28.0 / v0.9.380)** — Ubuntu rolls an update to a PERCENTAGE of m
  • **agentd reports whether it can actually act (agentd 0.26.0 / v0.9.377)** — `reconcile_host_state()` WRITES the systemd
  • **agentd ships detached backup results (agentd 0.25.0 / v0.9.376)** — `backup.run` acks a STARTED job and the work detac
  • **Backup scheduler no longer stacks runs on a host with one in flight (v0.9.376)** — an hourly policy over 19 hosts with
  • **Silent-freeze detection reads the right field per agent (agentd 0.24.0 / v0.9.375)** — `updates.checked_at` tracks the
  • **agentd migrate-repair installs all three out-of-binary artifacts (v0.9.366)** — **version parity is not artifact parit
  • **`/hosts/` can no longer render a dead backend as a healthy fleet (v0.9.366)** — a failed fleet API resolved to empty a
  • **Orphaned enrolment placeholders are reaped (v0.9.371)** — a `pending-*` row is created when an enrolment token is mint
  • **Unroutable `last_ip` can no longer reach public DNS (v0.9.371)** — the naming orchestrator would publish a host's `las
  • **Fleet stuck-uninstall lifecycle fix + sdb data-disk visibility (v0.9.205, agent 1.108.0)** — unstick hosts wedged mid-
  • **Correctness sweep — stop surfaces lying green/empty (v0.9.208, commit `03ba489`)** — security-posture false-green fixe
  • RMM fleet automation (script library + run-on-hosts + software install/remove) — agent 1.38.0 caps script.run / pkg.inst
  • Python host agent (16,503 LOC, v1.132.0, stdlib-only) — `oncall/agent/standby-agent.py`
  • **Rust host agent `standby-agentd` (v0.19.0) — the replacement for `standby-agent.py`** — static musl/Windows binary (2.
  • **Rust agent capability slice 1 — `svc.health.probe` + `net.probe`** — the first dispatched capabilities on `standby-age
  • **Service Health custom checks could never fire (fixed)** — `ingestHealthProbeResults` filtered `status='succeeded'`, bu
  • **agentd Linux installer + hardened systemd unit + per-target binary delivery** — `GET /install-agentd.sh` (enrollment-t
  • **agentd config hardening + path separation** — the temp file is now created ALREADY restricted (0600 / protected DACL)
  • **agentd self-update — the prerequisite for replacing the Python agent** — before this, moving an ENROLLED host to a new
  • **agentd self-generated sudoers grant** — the agent renders `/etc/sudoers.d/standby-agentd` from its own handler modules
  • **agentd UFW subsystem (7 capabilities)** — `firewall.ufw.status`/`allow`/`deny`/`delete`/`set_default`/`enable`/`disabl
  • **agentd IP Control (10 capabilities)** — fail2ban `ban`/`ban_many`/`unban`/`reload` and cPFence `block_ip`/`block_many`
  • **`no_apply_path` — a WAF present on a host that cannot remediate it** — an engine reported present with no successful `
  • **agentd ops core — `pkg.*`, host identity/power, `svc.config.read` (10 capabilities)** — apt verify/upgradable/upgrade/
  • **Every agentd exec is bounded by a deadline** — agentd dispatches commands from the same single thread that sends the 6
  • **agentd host containment (5 capabilities)** — `host.contain.{isolate,quarantine,evidence,release,status}`, held back un
  • **Host containment actually contains** — two independent defects meant it had never worked on any host while the UI repo
  • **agentd sshd + kernel-module posture (5 capabilities)** — `secure_config.sshd.{inspect,apply_hardening}` and `kmod.{che
  • **agentd root helper wrappers — the pattern that unblocked ~30 capabilities** — a whole class of capabilities must write
  • **agentd bounded detached execution — oscap, restic and AV scans** — an evaluation or a backup runs for minutes to hours
  • **agentd handlers can reach the agent config** — `caps::Handler` is `fn(&Value) -> Result<String, String>` and carried n
  • **The systemd unit is reconciled on every update, not only at install** — a live 0.18.0 host answered a real dispatched
  • **Gate: `check:agentd-manifest`** — agentd has no release of its own; it rides inside the Standby zip as committed binar
  • **Gate: the agent unit may not forbid the privilege its modules declare** — reads the Rust source for `pub const SUDOERS
  • **FIDO/security keys are visible to the authorized-keys inventory** — the fingerprint parser matched ssh-keygen's type w
  • **Evidence capture produces parseable evidence** — `host.contain.evidence` built ~10 sections of up to 20,000 characters
  • Windows agent config ACL — protected DACL (SYSTEM + Administrators + caller SID) via `SetNamedSecurityInfoW`; `%ProgramD
  • Agent enrollment tokens — `routes/agent-install.js` + `enrollment_tokens`
  • Host agents registry — `routes/agents.js` + `host_agents`
  • Capability registry + advertised caps — `agent_capabilities` table
  • Agent commands queue — `services/agent-commands.js`
  • Agent self-update — caps `agent.update_self` / `agent.refresh_install`
  • Agent code signing — `lib/agent-signing.js`
  • SSH host-key cache — `ssh_hostkey_cache` migration
  • Authorized keys management — `routes/authorized-keys.js`
  • Temporary support SSH access — `routes/support-access.js` + queue `support-access-expiry`
  • Support-vendor keys — `routes/support-vendor-keys.js`
  • Security events ingest — `security_events` table
  • Host bans — `host_bans` table
  • Credential rotation policies + scheduler — `routes/credential-rotations.js` + queue `rotation-scheduler`
  • Phase-4 agent reconcilers — `workers/phase4-reconcilers.js`
  • Fleet compliance evaluator — `workers/fleet-compliance-evaluator.js`
  • Fleet update detector + auto-window — `workers/fleet-update-detector-worker.js`
  • Fleet updates admin UI — `/admin/fleet-updates`
  • Host clusters — `host_cluster` migration
  • Host services tracking — `host_services` table
  • Ubuntu Pro attach/detach + services — agent caps `ubuntu_pro.*`
  • cPFence firewall + AV control — agent caps `firewall.cpfence.*` / `av.cpfence.*`
  • UFW policies + assignments — `routes/ufw.js` + `ufw_policies`/`host_ufw_assignments`
  • UFW drift state — `ufw_drift_state_widen` migration
  • Firewall drift UI — `/firewall-drift`
  • Firewall AI assist — `routes/firewall-ai.js`
  • fail2ban install/control — agent caps `firewall.fail2ban.*`
  • SSHd hardening (inspect + apply) — agent caps `secure_config.sshd.*`
  • ClamAV scans + policies + assignments — `routes/av.js`
  • Per-scan AV path picker — `ui/components/HostAvBlock.jsx` `ScanModal` (presets: agent default / from assigned policy / w
  • EICAR test (host Security tab) — drops the harmless EICAR pattern + scans it to prove the detection path end-to-end into
  • ClamAV scan self-heal — freshclam preflight (bootstraps an empty signature DB), clamd auto-start, `--fdpass` (root-owned
  • Unified AV detections (cross-engine ClamAV + cPFence, cPGuard/SentinelOne plug-in slots) — migration `20260803100000_av_
  • Hostname / timezone set — agent caps `host.hostname.set`/`host.timezone.set`
  • Hosts inventory UI + detail — `/hosts`, `/hosts/detail`; redesigned `/hosts` (v0.9.100): KPI strip (online/agents-curren
  • Approval requests workflow — `routes/approvals.js`; decisions audited + executed-vs-deferred correctly + failures surfac

Features

  • **Logs and Metrics could not show data they already had (v0.9.484)** — three defects, one shape: the store held it, the
  • **Vector running but NOT enabled — green now, gone at the next reboot (v0.9.484)** — `vector.status` has reported `enabl
  • **The host detail page was dead for any Windows host — a missing import (v0.9.446)** — v0.9.443's Remote Desktop confirm
  • **The Logs histogram was returning 502 for every host on the fleet (v0.9.445)** — `toStartOfInterval` returns a **DateTi
  • Vector install/uninstall pipeline — `routes/vector-releases.js`
  • Vector safe auto-heal (v0.9.121, agent 1.97.0) — if Vector is installed+enabled but down, the agent self-recovers each l
  • OSCAP umask-risk detector + runbook (v0.9.120) — CIS `accounts_umask_etc_login_defs` (UMASK 077) is applied by `pam_umas
  • **Log-rule engine actually evaluates + self-watch rules (v0.9.273/274)** — every seeded rule filtered on `standby.logs.l
  • Telemetry install + proxy routes — `routes/telemetry-install.js`, `routes/telemetry-proxy.js`
  • Telemetry versions, templates, rollouts — `telemetry_versions`/`config_templates`/`rollouts`
  • Telemetry sink config on host agents — `telemetry_sink_on_host_agents` migration
  • Metrics query proxy — `routes/metrics-query.js`
  • PromQL helper — `lib/promql.js`
  • Log collection routes + retention — `routes/log-collection.js` + `log_retention_policies`
  • Host log lines ingest — `host_log_lines` table
  • Log buffer lib — `lib/log-buffer.js`
  • Per-host shipping-health detector (v0.9.63) — flags an active host (fresh heartbeat) that stopped shipping metrics to VM
  • Telemetry credentials self-heal (v0.9.68) — one-click "Sync credentials from sink" repairs drifted `app_settings.telemet
  • Telemetry creds AUTO-heal (v0.9.70–71) — the sync now needs no operator action: agent 1.79.0 fixes the `telemetry.sync_c
  • Telemetry / Metrics / Logs UIs — `/telemetry`, `/metrics`, `/logs`
  • Log collection admin UI — `/admin/log-collection`
  • Create incident from a log line (manual) — `POST /api/logs/create-incident` (dedupes by normalized line+host) + Create-i
  • **/logs live tail + saved queries (v0.9.171)** — SSE tail (`GET /api/logs/tail` inside metrics-query.js, canRead-gated;

Features

  • **A Windows backup can finally be proven intact — the third verb had no Windows arm (agentd 0.101.0 / v0.9.483)** — `bac
  • **The backup checking half reaches hosts (v0.9.473–474 · agentd 0.98.0/0.99.0)** — backups worked; everything that CHECK
  • **Cancel actually stops the backup (v0.9.474 · agentd 0.99.0)** — the button set the row to `failed / cancelled by opera
  • **Restore drills resolve a snapshot without a button (v0.9.473)** — the drill read `backup_snapshots`, a cache only the
  • **Restore drills stop starving, and "never proven" says why (v0.9.453)** — `restore_proven: 0, restore_never: 20` on a f
  • **High availability — "mint an HA standby" (v0.9.202)** — Postgres streaming replica via the mint pattern (existing enro
  • **Enterprise ops handbook (v0.9.202)** — `docs/OPERATIONS.md` (architecture, port + egress matrices, air-gap degradation
  • Mint a backup host (restic + REST server) — `routes/backup-install.js` + `scripts/setup-backup-host.sh`
  • Backup policy builder (folder presets + cron) — `routes/backup-install.js` + `backups` migration
  • Backup scheduler worker (cron-match → per-host `rest:` repo → dispatch) — `workers/backup-scheduler.js`
  • Agent detached restic run + kind-aware collector — agent caps `backup.*` (`standby-agent.py`)
  • Snapshots list / restore / verify (DR) — `routes/backup-install.js` + agent `backup.restore`/`backup.verify`
  • **The engine installs itself on policy assignment (v0.9.418)** — being placed in a backup policy is where the operator e
  • **restic installs on Windows without a package manager (agentd 0.61.0)** — `backup.install` shelled out to winget, which
  • Install backup engine on hosts (restic) — `POST /api/admin/backups/install-engine` + "Install engine on hosts" button (t
  • Full restore toolkit — file restore, cross-host migration, and full-server / bare-metal DR via a source+target split (`s
  • **Control-plane self-backup + recovery** — daily `pg_dump` of oncall's OWN DB (the platform backed up customers but not
  • **Dead-man's switch** — `workers/heartbeat-worker.js` pings an external uptime monitor every 5 min (`deadmans.url`) so a
  • **Migration safety** — `npm run check:schema` (static baseline-gap guard, no DB) + `npm run verify:migrations` (proves b
  • Backups admin UI (ECharts) — `/backups`: capacity + outcome charts, clickable runs (failure reason + retry/cancel) and b
  • Backup-sink self-diagnostics — **Test connection** (`POST /api/admin/backups/repos/:id/test`: probes the rest-server wit
  • Granular restore — snapshot file browser (`backup.ls`, lazy per-directory) + single-file download (`backup.dump`, base64
  • Backups rock-solid — fail-loud failure alerting (run/dispatch/8h-stuck → deduped incident), staleness alerting (policy-t
  • **Backup-sink capacity verdict (v0.9.526)** — the sink raises its own incident as it fills (WARN 80 / HIGH 90 / CRITICAL
  • Secrets encrypted at rest — `status.bearer` (and the at-rest helper) AES-256-GCM via `lib/crypto-at-rest.js` across all
  • Sidebar "Pulse" widget — bottom-left 14-day incident sparkline + open-count + live on-call — `GET /api/me/pulse` + `comp

Features

  • **Native Network hub (v0.9.126)** — Standby is its own vendor-agnostic network controller; the read-first UniFi/net-cont
  • **Integrations catalog (v0.9.125)** — single registry-driven page under **Platform** (killed the bogus Integrations side
  • CMDB — unified configuration items (hosts/switches/datacenters/IPs) with relationships derived from live inventory + ope
  • Cloud integrations (provider abstraction; **five live adapters: Hetzner Cloud, DigitalOcean, Proxmox VE, OpenStack, AWS
  • Colocation access — operational + capacity (v0.8.16, DC-provider) — gate-controller **ingest webhook** (`POST /api/dc-ac
  • Colocation physical access control (v0.8.15, DC-provider) — `access_persons` (customer staff/vendor/operator + badge) +
  • Colocation customers + space assignment (v0.8.14, DC-provider) — `colo_customers` tenant register (contact, status, powe
  • Data halls / blocks (v0.8.13, Virtual-DC) — `datacenter → block → rack` tier for modular DCs: `dc_blocks` (hall/suite/po
  • Virtual-DC reconciliation + unified machine plane (v0.8.17, Phase 2) — `lib/machine-reconcile.js` auto-fills `server_ass
  • Agent hardware inventory (v0.8.12, Virtual-DC Phase 1) — agent `hw.inventory` cap: `snapshot_hardware()` harvests CPU (l
  • Cloud cost per VPS (v0.8.11) — Hetzner adapter surfaces per-location monthly/hourly pricing (EUR); live instances show c
  • Provisioning host roles + naming + DNS auto-map — auto-derived host roles (web/db/dns/mail/…) from detected services + m
  • Network overview — `/network` (v0.9.117: fixed "0/N hosts reporting" reading from the scale-stripped hosts list → dedica
  • Connectivity-quality anchor pills (UniFi-style) — agent `net.probe` measures RTT + loss to Microsoft/Google/Cloudflare p
  • IPAM (subnets + IPs CRUD) + live reconciliation vs agent-discovered IPs — `routes/ipam.js` + `ipam` migration
  • Agent network discovery (interfaces/IPs in heartbeat meta) — `snapshot_network()` in `standby-agent.py`
  • Multi-provider DNS (Cloudflare / Bunny / PowerDNS / deSEC / Gandi LiveDNS / **Route53** — doc reconciled 2026-06-11, Sig
  • Standby MCP server — `oncall/src/routes/mcp.js` exposes platform tools over the Model Context Protocol for external AI c
  • Hetzner rDNS + IP import + push-rdns — `services/dns/hetzner.js`
  • Edge firewall mint (WireGuard hub + nftables + Suricata) — `routes/edge-install.js` + `scripts/setup-edge-firewall-host.
  • Inline edge WAF (Caddy + Coraza, agent ≥1.76.6) — make the edge a real inline ingress: per-route hostname→origin over th
  • Edge reinstall/update in place (agent ≥1.76.0) — `edge.reconcile` re-applies nftables/Suricata/wg0/proxy without re-keyi
  • WireGuard peer enrollment (overlay-IP allocator + agent hub_add_peer) — `routes/edge-install.js` + agent `wg.*`
  • Suricata IDS alerts (eve.json tail → ingest, sha1 dedup, 30d retention, ECharts timeline) — `routes/agents.js` `/suricat
  • Suricata → ClickHouse long-term retention (mirror to telemetry `standby.logs`) — `lib/clickhouse.js`
  • Edge traffic telemetry (v0.8.91→0.8.98) — agent (≥1.49.0, fixed 1.52.0) ships `/proc` counters (default-route iface thro
  • Edge volumetric DDoS detection + mitigation (v0.8.91) — `workers/edge-ddos-worker.js` baselines conn/s+pps and raises a
  • Edge management — edit/delete edge + manual host-link dropdown (fixes hostname↔agent mismatch) + one-click "migrate all
  • **Edge enterprise UI + honest peer health (v0.9.135–137)** — the single stacked page rebuilt into a fleet **index → per-
  • Suricata alert shipping fix (1.53.0) — read `eve.json` via an allow-listed `sudo tail` (the prior `sudo bash -c` was den
  • Datacenters + physical switches + SNMP polling — `routes/datacenters.js` + agent `snmp.poll`
  • Switch-port ↔ host/IP correlation — agent 1.36.0 `snmp.poll` also walks bridge-MIB FDB (dot1q/dot1d MAC→port) + dot1dBas
  • Per-port VLAN discovery (dot1qPvid) — agent 1.36.0 walks the native/untagged VLAN per port → `switch_ports.vlan`, shown
  • Network topology graph (datacenter → switch → host, force-directed) — `GET /api/admin/network/topology` (links from `swi
  • Unified switch management v1 (port enable/disable) — agent 1.37.0 `snmp.set` (vendor-universal via ifAdminStatus SNMP SE
  • Server locations world map (ECharts geo) — `/datacenters`
  • Server hardware lifecycle (specs/cost/warranty/renewal, ≤90d due alerts) — `routes/datacenters.js` server-assets + `serv
  • Component health → spares → field replace (PLAN_HW_LIFECYCLE.md) — component-agnostic model (`hw_components` + `hw_compo
  • **Procurement / Zephyr ordering (PLAN_HW_LIFECYCLE.md Phase 6, CROSS_PROJECT_CONTRACT §12 / Zephyr §I)** — operator can
  • Uplink / transit provider management — circuits (transit/peering/ix/wave/darkfibre/crossconnect) linked to supplier + da
  • Uplink bandwidth utilization + saturation — live in/out Mbps from switch-port SNMP HC counters, % of capacity, ECharts h
  • Generic network devices (router/firewall/PDU/UPS/LB/console) + manual topology links — appear in the topology graph + ra
  • LLDP/CDP neighbour discovery → auto switch↔switch/device topology links — agent 1.40.0/1.40.1 walks `lldpRemTable` with
  • Passive LAN discovery — agent 1.40.0 `net.scan` reads the kernel ARP table (`ip neigh`); unmanaged devices flagged for a
  • **Persisted machine identity layer (Track A0/K1)** — `machines` + `machine_links` keyed serial→MAC→IP→name unify host_ag
  • **Cloud adopt-to-fleet + scheduled sync (Track A1)** — one-click adopt of a discovered cloud instance (mint enrol token
  • **Fleet enterprise-naming orchestrator (Track A2/K2)** — dry-run diff then apply an enterprise hostname to the whole fle
  • **⛔ Fleet naming can no longer rename a nameserver to `web-*` (v0.9.366)** — the dry-run sitting in the UI read `18/18 c
  • **PowerDNS zone creation (v0.9.371)** — nothing in the codebase could *create* a zone, only records inside an existing o
  • **DCIM commercial layer (Track B)** — DCs linked to their colo **operator + contract** (reuse ISO-20000 `suppliers`); pe
  • **IPAM depth (Track C)** — owned-vs-rented tenure + lessor + lease expiry + cost, parent/child prefix hierarchy + next-f
  • **Transit carrier / circuit / BGP-session model (Track D1)** — `transit_providers` + `circuits` (LOA/demarc/A-Z) + `bgp_
  • **Arista eAPI driver + VLAN/PoE Safe-Ops writes (Track D2)** — server-side eAPI (HTTPS JSON-RPC) implementation of the n
  • **Switch fabric / MLAG / LAG model (Track D3)** — `fabrics` + `fabric_members` (spine/leaf/mlag-peer roles) + `lags` (po
  • **Out-of-band BMC/Redfish power (Track D4)** — power state + on/off/graceful/cycle/reset over the BMC, works with the OS

Features

  • Service config READ (v0.9.118, Phase 0) — agent `svc.config.read` parses NGINX / Apache / LiteSpeed-OLS / MySQL / MariaD
  • Tuning advisor (v0.9.118, Phase 2) — deterministic MySQLTuner/PGTune/Apache-docs-class rules evaluated against the host'
  • Service config APPLY — Safe-Ops (v0.9.118, Phase 3) — agent `svc.config.apply`: per-service key allowlist + value saniti
  • DB deep-dive (v0.9.118, Phase 4) — agent `svc.db.stats` runs FIXED agent-baked queries (no server SQL): pg connections/c
  • Fleet tuning rollouts (v0.9.119, Phase 5) — apply one change-set across many hosts: canary of 1 → waves of `wave_size` →
  • **Per-service engineer console (v0.9.127–129)** — a rich per-`(host,service)` console: Overview (KPIs + ClickHouse trend
  • Service-KPI standing alert rules (v0.9.129) — create a rule from any console KPI (metric/op/threshold/window/severity);
  • nginx stub_status enablement — Enhance-safe (v0.9.129) — `svc.nginx.enable_status` writes a **dedicated localhost:9145 s
  • **Fleet Service Tuning console (v0.9.143, T3)** — `/service-tuning` aggregates every host's advice into "N hosts need X"
  • Tuning Apply value-prefill fix + Enhance-managed gating (v0.9.143, T1/T2) — `advise()` emits an explicit `apply_value` (
  • **Service-console consolidation (v0.9.150)** — the generic `/service-console` reached PowerDNS parity: per-service host
  • OBSERVE trends + per-database workload (v0.9.147–148, T4 + db.perstats) — server-global db-stats persisted with workload
  • Service tuning — effective-runtime READ (SHOW VARIABLES / pg_settings live values vs the current file-level parse) + ano
  • Service tuning APPLY + fleet rollout — real apply/auto-rollback still lab-unverified (dry-run validates); verify single-

Features

  • **Service up/down alerting (v0.9.218)** — debounced (180s, configurable), self-resolving, pages on-call for the critical
  • **Built-in per-family threshold checks (v0.9.218)** — auto-seeded on a service's first detection from already-sampled me
  • **Unified `/service-health` console (v0.9.218)** — per-service cards with live values green/red, inline threshold + seve
  • **ClamAV signature freshness (v0.9.218)** — `clamav.sig_age_hours` powers a freshclam-stale check (agent 1.110.0, read-o
  • **Custom app health probes (v0.9.218)** — operator-defined checks for ANY app: HTTP endpoint (status/body), TCP port, sy
  • ⚠ Agent 1.109.0/1.110.0/1.111.0 need a one-host lab-verify before fleet rollout.

Features

  • **Operational health scorecard `/ops-health` (v0.9.240)** — MTTA/MTTR trend, load per responder, noise ratio, auto-resol
  • **Desk Insights + Today bulletin (v0.9.228/235)** — ECharts incident-volume / MTTA-MTTR / severity-mix panels and a one-
  • Dashboards (rebuilt) — canvas editor (react-grid-layout), quick-start templates, `$host` template variables, timeseries/
  • AI panel builder — natural language → panel (metric/chart/unit) via the AI provider abstraction — `POST /api/dashboards/
  • Dashboard auto-versioning + restore — `dashboard_versions`
  • Dashboard playlists (wall-display rotation) — `dashboard_playlists` + `/dashboards/playlist`

Features

  • **Auto-block announces itself, and can cover the estate (v0.9.457–v0.9.459)** — detection always worked; `notify()` was
  • **Fleet-wide IP intel + `<IpAddress>` hover (v0.9.325)** — hover any IP anywhere and see whether the fleet actually bloc
  • **Enforcement-target retirement (v0.9.325)** — a target on a layer the server no longer selects for that host (UFW after
  • Autonomous infra remediation control plane (v0.9.96) — a unified detect→fix lifecycle over the whole estate: `remediatio
  • CVE-KEV → package-upgrade remediation loop (v0.9.126) — the 2nd flagship detect→fix pair: open KEV findings with a fix r
  • Threat feed SecOps surface — triage (ack/assign/resolve/false-positive + bulk), stat cards, filters/search/pagination, d
  • One-click response actions — block IP / quarantine file / run AV scan (signed agent commands) + open-incident-from-threa
  • Auto-response automation — `ban_ip`/`quarantine`/`av_scan`/`create_incident` actions + `severity_min`/IN-list/`__not` co
  • All threat sources wired to alerting/automation — fail2ban/SQLi/webshell now `notify('security.event')` (high/crit) or f
  • IP Control — managed blocklist/allowlist with per-host, per-layer **on-box confirmation** (cpfence/fail2ban): `managed_i
  • IP Control — security control plane, single pane for the estate (v0.9.64): surfaces ALL blocks not just operator rules —
  • IP Control — Allowlist as estate-wide allow pane + cluster protection (v0.9.65–67): attacks-over-time chart as adaptive-

Features

  • **⛔ A glob IS an include — the drift that was never drift (v0.9.472, agentd 0.97.0)** — hosts applied successfully and t
  • **⛔ The fleet was blocking 1,006 attacks a week and every counter read 0 (v0.9.467)** — the Python agent wrote `waf_bloc
  • **A WAF apply can no longer start a webserver (v0.9.469, agentd 0.95.0)** — the apache reload chain ended in `apachectl
  • **`waf.apply` is advertised only where the adapter can actually run (v0.9.468/v0.9.470, agentd 0.94.0/0.96.0)** — the ga
  • **The threat feed stopped counting our own monitoring as attacks (v0.9.467)** — 280,374 of 290,179 WAF events in 7 days
  • **Fleet apply — the button the remediation linked to but did not exist (v0.9.452)** — `apply-fleet` had shipped months e
  • **WAF coverage is pushed, not just rendered (v0.9.451)** — `security-queue.js` computed `waf_never_applied` correctly an
  • **cPFence WAF rule exclusions (v0.9.456, agentd 0.91.0)** — cPFence hosts sat under "Standby cannot manage this engine"
  • **cPFence WAF config found where it lives (v0.9.455, agentd 0.90.0)** — `configured` probed `/opt/cpfence/etc/modsec`, a
  • **W1 — "is our policy in effect" is read back, not inferred (v0.9.424, agentd 0.69.0)** — `meta.waf.managed` was HARDCOD
  • **cPFence is detected again, and honestly (agentd 0.64.0–0.65.0)** — Phase 1 gated the ten cpfence capabilities on the C
  • **Root-owned WAF configs are readable (v0.9.330, agent 1.132.0)** — `mode` and `crs_version` were null on 10 of 10 hosts
  • **Drift check searches every engine directory (v0.9.330)** — `_waf_managed_state()` took `candidates[0]`, a LiteSpeed pa
  • **Engine pill tells three states apart (v0.9.330)** — was unconditionally green with `mode` hidden when null, so "module
  • WAF policy library + per-host assignment — named OWASP-CRS policy tiers (mode/paranoia/anomaly/rulesets/exclusions), bui
  • WAF detection (agent ≥1.67) — `snapshot_waf()` detects the existing engine per host (ModSecurity-nginx/apache, LiteSpeed
  • **Detected ≠ configured (v0.9.326, agent 1.131.0)** — the nginx badge fired on `nginx -V` containing "modsecurity" (i.e.
  • WAF tuning / "Managed WAF" standard tier (agent ≥1.69) — `waf.apply` writes a Standby-managed include (SecRuleEngine mod
  • WAF hit ingestion + dashboard (agent ≥1.71) — agent tails modsec/litespeed audit logs → `security_events` (`modsec_nginx
  • Coraza default WAF (B1, agent ≥1.73) — install Coraza-as-Caddy on no-WAF hosts (preflight/install/uninstall, detect-firs
  • Campaign-only WAF incidents — WAF blocks page only on a campaign (exploit rule, or one IP hitting ≥3 hosts / ≥200 blocks
  • WAF-typed incident observability — WAF incidents show attacker-IP intel instead of "no host label" — `incidents/detail`
  • IP intel lookup — search any IP → WHOIS/RDAP owner + AbuseIPDB + reverse DNS + 90d in-house events, one-click block; dee
  • **WAF Apache adapter + running-engine selection (v0.9.275/276, agent ≥1.125)** — `modsec-apache` was never wired, and `w
  • **WAF config-drift detection (v0.9.271, agent ≥1.120)** — applying a policy was a one-shot push nothing re-checked, and
  • **WAF two-adapter model — panel API for Enhance hosts (v0.9.271)** — Enhance exposes ModSecurity as a first-class API (`
  • WAF premium tier — Coraza **edge gateway** (B2): one Coraza in front of fleet ingress (offload/consistency/virtual-patch
  • WAF addon commerce — Zephyr entitlement (customer buys + self-manages; Standby enforces) — PLAN_WAF.md

Features

  • **Colleagues directory + one-tap call (v0.9.237)** — ops roster with role + live on-call dot and a "Call" that mints a m
  • **Presence (v0.9.240)** — 60s shell heartbeat (`POST /api/me/heartbeat`) + online/idle dots derived from `users.last_act
  • **Start a team meeting from a task (v0.9.236)** — `POST /api/staff-tasks/:id/meeting` mints a room named after the task
  • **Shift-handover pack (v0.9.243)** — `GET /api/handoff/pack?hours=12`: coverage, open incidents with holders, what chang
  • Staff task management — assign remote/physical-DC/onboarding/hygiene tasks (location + host link + checklist), worker "m
  • IT-hygiene task templates — 7 seeded recurring practices (daily alerts/backups, weekly patch/capacity/access, monthly DR
  • Daily/weekly operational digest — per-worker email + bell of open/overdue tasks + hygiene checklist — `services/staff-di
  • Staff shifts + roster — weekly grid, copy-week, templates, PTO, hours/CSV, on-call reconciliation, per-skill coverage ru
  • DC physical-staff shifts (site + department) — staff/shifts/coverage-rules scoped by datacenter + department (security/f
  • **People/Workforce suite on the coverage spine (v0.9.112)** — everything hangs off `staff_members` (+ optional login lin

Features

  • Brokered web terminal — browser ↔ oncall ↔ agent PTY (no inbound SSH); xterm.js multi-host tabs + Termius-style snippets
  • Session recording (compliance evidence) — every byte recorded to `terminal_chunks`, replayable session log — `terminal_s
  • **Privileged-session governance (v0.9.529)** — the recording is now a *control*: mandatory justification to open a root

Features

  • Multi-provider AI layer — `services/ai/index.js`
  • Anthropic provider (with prompt caching) — `services/ai/anthropic.js`
  • OpenAI provider — `services/ai/openai.js`
  • Llama / Ollama provider — `services/ai/llama.js`
  • AI providers admin — `routes/ai-providers.js` + `/ai-providers` UI
  • AI conversations + messages — `services/ai/conversations.js`
  • Per-user AI budget enforcement — `services/ai/budget.js`
  • AI usage logging — `ai_usage_log` table
  • AI chat (streaming) — `routes/ai-chat.js`
  • AI write-assist — `routes/ai-write-assist.js`
  • Agentic loop with tool dispatcher — `services/ai/agentic-loop.js`
  • AI tool registry + implementations — `services/ai/tools.js` + `tool-impls.js`
  • PII redaction layer — `services/ai/redact.js`
  • AI conversation retention — `workers/ai-retention-worker.js`
  • AI spend admin — `/admin/ai-spend`
  • On-call AI hook — `routes/oncall-hook-ai.js`
  • AI features metadata + `/ai-tools` UI — `routes/ai-features.js`
  • AI persistent memory (user / team / global scope, importance, auto-summary) — `services/ai/memory.js` + `routes/ai-memor
  • AI embeddings (semantic search foundation, in-process cosine) — `services/ai/embeddings.js` + `ai_embeddings` table
  • Per-conversation cost ceiling — `services/ai/budget.js` (`ai.per_conversation_usd_cap`)
  • AI provider failover (5xx/429/timeout → next enabled) — `services/ai/index.js`
  • Tool-result PII redaction — `redactValue()` in `services/ai/redact.js`
  • Conversation export for SOC2 evidence — `/api/ai/conversations/:id/export`
  • Alert-noise classifier (6h cron, scored fingerprints + cached explanations) — `workers/ai-noise-classifier.js` + `alert_
  • Runbook freshness reviewer (weekly cron) — `workers/ai-runbook-freshness.js` + `runbook_freshness`
  • Post-incident learning loop (action items + candidate rules + lessons → memory) — `services/ai/postmortem-learning.js` +
  • Incident co-pilot panel (similar incidents, postmortems, CVEs, on-call) — `routes/ai-incidents.js` (`/api/incidents/:id/
  • "Why is this firing?" agentic RCA — `routes/ai-incidents.js` (`/api/incidents/:id/why`)
  • Pager voice → structured incident extraction — `services/ai/pager-voice.js` + `/api/ai/pager-voice/extract`
  • Compliance Q&A with citations — `routes/ai-features.js` (`/api/ai/compliance/ask`); UI: "Explain this control" card in t
  • `diff_against_canonical_schema` diagnostic tool — introspects a table's live columns to catch schema drift / partially-a
  • Vision: screenshot → alert rule / incident — `routes/ai-vision.js`
  • Slash commands in chat composer (/incident /host /runbook /cve) — `ui/components/AssistantDrawer.jsx`
  • Streaming write-assist (SSE) — `routes/ai-write-assist.js` (`/api/ai/write-assist/stream`)
  • AI-originated approvals filter (`?via=ai`) — `routes/approvals.js` + payload tag in `tool-impls.js`
  • Confirm-first AI action tools — `propose_action` tool returns a proposal (RBAC-checked, not executed); operator confirms
  • AI Staff "talk to a colleague" — Assistant drawer defaults to a named engineer (General Assistant + SRE/Security/Network
  • Central PII redaction + budget metering for ALL features (not just the co-pilot); no-user worker traffic capped via a sh
  • CVE "Discuss with AI" — multi-turn Q&A grounded in the CVE context payload — `routes/cve-ai.js` (`/api/cve/:id/ai-mitiga
  • "Ask the colleague" shims — incident→SRE, CVE/OSCAP→Security, firewall→Network, compliance→Compliance route into the AI
  • AI Staff delegation everywhere (v0.9.72–74) — the "delegate a task" verb on every surface: a **delegate box** on `/ai-st
  • AI Staff cross-device continuity (v0.9.75) — colleague conversations (`/converse`) are now PERSISTED (was ephemeral/clie
  • Log-rule engine — classify recurring log errors into incidents (rate spike) / problems (known-error) / ignore; reads Cli
  • Capacity & anomaly forecasting — linear-regress disk/inode/mem fill ETAs + robust-z load anomalies from the ClickHouse r
  • AI incident autopilot — background investigations (read-only signed diagnostics + log search, budgets), AI fix proposals
  • Prompt-injection fence on all AI surfaces — `sanitizeUntrustedForPrompt`/`sanitizeDeep` + `[untrusted]` framing — `servi
  • AI security-event triage — deterministic clustering → campaign verdicts/narratives, /threats "Triaged (AI)" lens, approv
  • "AI-generated, human-reviewed" provenance labels on every AI surface + auditor/evidence exports (EU AI Act Art. 50) — `c

Features

  • **Scheduled-meeting shadow copy (v0.9.242)** — idempotent `PUT /api/admin/meet/scheduled/:zephyr_meeting_id` (§17.2) beh
  • **Directory federation (v0.9.243)** — `GET /api/admin/directory` serves the ops roster to Zephyr (§17.4), backed by a sh
  • **Zephyr-side blocker:** their inbound `IntegrationHmacGuard` verifies a bodyless GET over `"{}"` instead of `""`, so St
  • **Payroll source feed (§A producer side)** — Zephyr's payroll import calls a Standby payroll-source endpoint that was ne

Features

  • **Enhance collection is dispatched now that the agent no longer self-schedules (v0.9.366)** — "0 healthy clusters" was n
  • **Enhance 12.25 catch-up (v0.9.203)** — vendored orchd **12.25.0** spec (full client re-verify = zero drift); phpMyAdmin
  • **Enhance DNS-hook integration — inbound event-driven zone sync (v0.9.203–204)** — Enhance pushes zone changes to a **pu
  • **Enhance API coverage → 88.7% of the core operator surface (v0.9.270–277)** — 73 → 346 of 482 operations (346/450 in sc
  • Enhance clusters + servers + websites + mailboxes + DBs — schema in `enhance_*` tables
  • Enhance API client — `services/enhance-api.js`
  • **Enhance panel SSO (v0.9.130)** — "Open panel" on the Enhance desk mints a one-time login URL (`POST /orgs/{org}/member
  • Admin enhance-clusters — `routes/admin-enhance-clusters.js`
  • **Enhance per-server component-health KPI (v0.9.143)** — `/enhance/servers` shows each daemon (appcd / orchd / panel / b
  • **Enhance per-entity detail consoles (v0.9.146)** — unified mailbox / database / website / domain drill-in consoles on o
  • **Enhance entity consoles — full approved mockup + sites merge (v0.9.150)** — the four consoles rebuilt to the complete
  • **Per-mailbox mail activity (mail.stats, v0.9.148)** — agent parses postfix/dovecot/rspamd logs per address → sent / rec
  • Enhance identity grant — already-org-member fix (v0.9.145) — granting Enhance access to a login already in the org (e.g.
  • Per-site cgroup metrics (agent capability) — `enhance.collect`
  • Enhance Operator Desk (v0.8.0) — own sidebar group split into sub-pages (Overview / Clusters / Servers / Websites / Mail
  • Per-cluster trend graphs (v0.8.0) — `enhance_metrics` rollup written on every agent enhance-report (`routes/agents.js`);
  • Enhance websites + sites UI — `/enhance`, `/enhance/sites`
  • Enhance health monitoring + auto-scale (v0.8.19) — `lib/enhance-health.js` evaluated per cluster on each enhance-report:
  • Enhance auto-deploy server (v0.8.18) — `POST /api/enhance/actions/deploy-server`: pulls the cluster's Enhance `install-c
  • Enhance operate layer (v0.8.2) — Phase 3 reversible write actions against the live panel, verified against the Enhance O
  • Enhance operate — destructive actions (v0.8.4) — soft-delete website, delete mailbox, delete MySQL DB, behind type-to-co
  • Enhance per-cluster DNS (v0.8.5, Phase 4 slice 1) — `enhance_clusters.dns_mode` (`none`/`powerdns`/`external`) + `dns_pr
  • Enhance DNS zone/record browser (v0.8.6, Phase 4 slice 2) — built-in PowerDNS records for a website's primary domain: `G
  • Enhance Phase 2 — pg case-sensitivity fix (v0.8.7): control-panel-host binding lookups in `admin-enhance-clusters.js` us
  • Enhance AI co-pilot — advisory reads (v0.8.7, Phase 5 slice 1): assistant tools `query_enhance_clusters` / `query_enhanc
  • Enhance external-DNS bridge (v0.8.20, item #3) — for clusters with `dns_mode = external`, the desk's DNS records page re
  • Enhance bulk migration / importer (v0.8.20, item #4) — pull cPanel/Plesk accounts onto a cluster from the desk: scan dro
  • Enhance backup-staleness watcher (v0.9.116, ROADMAP v2 R1) — hourly server-side worker polls per-website backup listings
  • **Hosting/Enhance audit + P0 correctness (v0.9.191)** — three-audit sweep against the newly vendored OAS3 spec (`docs/en
  • **Track M slice 1 — management surface (v0.9.192)** — Standby now manages the panel, not just watches it: **website crea
  • **Suspension-enforcement detector (v0.9.192)** — a site suspended in the panel that still serves means the customer keep
  • **DNSSEC + DANE/TLSA (Track D — backend; released v0.9.195, migration ran with 193/194)** — answers the long-unanswered
  • **DNSSEC + DANE UI (v0.9.195)** — the Track D backend shipped with zero pixels; this is the surface. **DNSSEC card** on
  • Enhance Operator Desk — Phase 5 slice 2: expose write actions (suspend/SSL/DNS/etc.) as approval-gated AI tools — `PLAN_
  • **Customers console (operator UI) — NOT BUILT** (confirmed open gap @ v0.9.208; the missing half of §16 hosting-provisio
  • **Zephyr → Standby hosting provisioning (v0.9.193, `CROSS_PROJECT_CONTRACT.md` §16)** — Zephyr sells the hosting account
  • **kstack registers as a hosting cluster and Standby watches it (v0.9.515, `CROSS_PROJECT_CONTRACT.md` §20)** — kstack is
  • **§16 provisioning executor, kstack backend (v0.9.515, §20)** — the same Zephyr request provisions on kstack when `plan.
  • **Enhance → kstack migration: Standby is the extractor (v0.9.516, §20; kstack plan #61's missing half)** — kstack has ha
  • **kstack's measured controls as evidence, not a 17th framework (v0.9.516, §20)** — the poller pulls `GET /v1/accounts/{i
  • **Peer pairing knows two kinds — a kstack pairing IS registration (v0.9.517, `CROSS_PROJECT_CONTRACT.md` §20.1/§20.4/§20
  • **The kstack overview, one call, shape pinned on both sides (v0.9.518, §20.3)** — kstack v1.59.1 serves `GET /v1/partner
  • **kstack's nameservers become masters on Standby's DNS secondaries (v0.9.519, §20.4 the other direction)** — Standby's m
  • **kstack is its own connector on /integrations/ (v0.9.520)** — Kosta opened Integrations and asked where kstack was: it
  • **⛔ THE FIRST LIVE POLL OF testing.lbreeze.net WENT RED FOR THE WRONG REASONS (v0.9.521)** — Kosta paired it (05/09/26 0
  • **⛔ …and the whoami I blamed was never kstack's (v0.9.522)** — the kstack session confirmed `/v1/whoami` is deliberately
  • **A paired peer may read the CVE inventory; a person still needs the role (v0.9.523, contract §20.3.1)** — kstack v1.61.
  • **Per-site traffic history (v0.9.196)** — the website console's Bandwidth/Hits charts were blank and month-to-date read
  • **WAF coverage gaps surfaced, not rendered as zero (v0.9.199)** — a bare "0 blocks" reads as "nothing got through" when

Features

  • **The uptime commitment became verifiable in both directions (v0.9.484 · Zephyr v1.213.0)** — Zephyr publishes `legal.up
  • **`announced_at` — the field the whole notice check rests on (v0.9.484)** — Zephyr computes hours of notice as `starts_a
  • **Not yet reachable by Zephyr** — `PAIR_SCOPES` gained `sla.read` but that constant is read at MINT time, so the existin

Features

  • **⛔ One stale capability gate cost four platforms their metrics (v0.9.490 / agentd 0.109.0)** — `caps.rs` carried `("vec
  • **An unknown distribution is refused, not handed a `.deb` (agentd 0.109.0)** — the fallthrough returned `deb`, so openSU
  • **Four families, one product — the multi-distro program (agentd 0.102.0–0.105.0 / v0.9.486)** — Standby managed one dist
  • **⛔ `dnf check-update` exits 100 when updates are available (agentd 0.103.0)** — zero means none pending, 100 means upda
  • **⛔ apk cannot classify security updates, and says so (agentd 0.104.0)** — Debian answers "is this a security update" fr
  • **⛔ A.8.8 graded a host "Fully patched" from data it did not have (v0.9.485)** — `ok: upd ? (upd.security || 0) === 0 :
  • **The Firewall tab knew about two engines and there are three (v0.9.486)** — the renderer was a two-way branch: `windows
  • **Windows could be watched and it could be locked down; it could not be given a rule (agentd 0.105.0)** — `winposture` m
  • **Vector reaches Alpine — the musl tarball, under OpenRC (agentd 0.105.0)** — `resolve_pkg_target()` returned `apk` and
  • **Alpine's firewall — built, and the safety is the feature (agentd 0.106.0 / v0.9.487)** — Debian had ufw, RHEL had fire
  • **⛔ Executing the wrapper found two defects that reading it could not (v0.9.487)** — the nftables wrapper was run agains
  • **⛔ `firewall.win.open_port` / `close_port` had a 0% success rate (agentd 0.106.0)** — shipped in 0.105.0, never dispatc
  • **The Windows firewall feature had no way in (v0.9.487)** — three agent verbs, three server routes, and **not one button
  • **All five package managers, and two traps that reading the manual would have got wrong (agentd 0.106.0)** — zypper and
  • **⛔ An unprivileged `zypper list-updates` reports ZERO on a host with 22 pending (v0.9.487)** — it does not warn and it
  • **⛔ `Fact::JobRunner` — nine wrapper branches exec `systemd-run` and one checks for it (agentd 0.106.0)** — `backup.run|
  • **The 4,446-line wrapper audit, gated (v0.9.487)** — `every_wrapper_parses.rs` only proves the bash parses. `wrapper_por
  • **An OpenRC host can back up, and containment there has a dead man's handle (agentd 0.113.0 / v0.9.494)** — `Fact::JobRu
  • **`check:job-detach` — the detach path is RUN, not read (v0.9.494)** — the fallback is bash, it is copied into three wra
  • **`Fact::Systemd` — the verbs whose requirement was never "detach a job" (agentd 0.113.0)** — widening `Fact::JobRunner`
  • **A source-scanning guard matched its own prose again, and the fix was the sibling test's (v0.9.494)** — `every_systemd_
  • **`surfaceMatrix` has a third state: "applies but is not built" (v0.9.493)** — `applies` was doing double duty as *shoul
  • ~~**`surfaceMatrix` needs a third state: "applies but is not built".**~~ Two Windows Server surfaces are named and empty
  • **⛔ `check:agentd-meta-parity` — three keys in three days, all found by accident (v0.9.493)** — a heartbeat `meta` key t
  • **The last four frozen meta keys, and `KNOWN_MISSING` is empty (agentd 0.114.0 / v0.9.495)** — `network` (11 readers — t
  • **A successful upgrade left its packages on screen as pending (agentd 0.115.0 / v0.9.497)** — live on `lbreeze.cloud` 21
  • **The auto-block dedupe was applied to one arm of the `if` and not the other (v0.9.498)** — found auditing the live noti
  • **Two `partial` inputs produced `not_met` — seven controls, five frameworks, one briefly-unreachable host (v0.9.499)** —
  • **The white page on first load — a stale build, and nothing in the app could recover (v0.9.500 / agentd 0.116.0)** — rep
  • **58 tables could not scroll on a phone, and the first count was wrong by 3× (v0.9.500)** — a `<table>` with no scroll c
  • **A firewalld host reported no firewall at all, capping 15 controls across 5 frameworks (agentd 0.116.0)** — `fleetFirew
  • **Settings: 13 tabs in declaration order, and a mobile wall (v0.9.500)** — grouped into Appearance / Delivery / Security
  • **`check:swallowed-errors` — a ratchet, not a ban (v0.9.500)** — most of the empty catch handlers are deliberate and doc
  • **A cross-host roll-up no longer titles itself with one host (v0.9.499)** — `notify()` refreshes a collapsed row's title
  • **`"signed": false` was in the manifest for eleven releases and nothing read it (v0.9.496)** — `publish.sh` records an u
  • **Boards lie, and an asset register believes them (agentd 0.114.0)** — "To Be Filled By O.E.M.", "System Serial Number",
  • **The pure decision helpers are deliberately not `cfg`-gated (agentd 0.114.0)** — this project builds Linux with `cargo
  • **⛔ `meta.ubuntu_pro` — the product could drive Ubuntu Pro against months-stale posture, and the sudo grant was never th
  • **⛔ Four verbs dispatched to every host that could never run there — 15% of all fleet command traffic, failing daily (ag
  • **⛔ Un-banning an IP had never worked on ufw (agentd 0.111.0)** — the wrappers `delete` branch accepted a rule **number*

Features

  • **Alpine host enrolment: sudo, the community repo, and the OpenRC reconcile** — found on a real Alpine 3.22 box. Enrolme
  • **The Vector codename fallback no longer crosses the musl/glibc boundary** — `resolve_pkg_target` uses the codename slot
  • **Alpine is a supported platform — an agent that installs, supervises and updates itself under OpenRC (agentd 0.102.0 /
  • **`Fact::Apt` — the third axis of the capability scope (agentd 0.102.0)** — the OS axis (`WINDOWS_CAPABILITIES`) separat
  • **`check:alpine-install` — the Alpine path is executed, not reasoned about (v0.9.485)** — the port was reasoned through
  • **~~Still Debian-only on Alpine~~ — closed, and most of it was already stale (v0.9.494)** — this entry named four blocke

Features

  • Maintenance windows CRUD — `routes/maintenance-windows.js`
  • Maintenance check service + scheduler — `services/maintenance-check.js` + `lib/maintenance-window-scheduler.js`
  • Maintenance runner worker — `workers/maintenance-runner-worker.js`
  • Maintenance hook — `routes/maintenance-hook.js`
  • Admin maintenance UI — `/admin/maintenance-windows`

Features

  • **⚠ The 17-day maintenance latch, and kernel versions on a public page (v0.9.365)** — audited live on status.lbreeze.com
  • **A component with zero monitors still renders** — auto-provisioned host components (one per host, every 15 min) occupy
  • **Mobile header (status 0.3.46)** — logo, theme toggle and Subscribe stay on one line at every width; below 640px the pa
  • **Public-status accessibility — WCAG 2.1 AA pass (v0.9.202)** — skip link, nav/main landmarks, visible focus rings, `pre
  • Core status schema — `status/migrations/20260422100000_status_core.js`
  • Public status JSON + HTML — `status/src/routes/public.js`
  • RSS feed — `status/src/routes/feed.js`
  • Subscribe endpoint (double opt-in) — `routes/subscribe.js`
  • Subscriber category prefs — `subscriber_category_prefs` migration
  • Audience-scoped components — `components_audience` migration
  • Auto-detected incidents — `services/incident-detector.js`
  • Component SLAs — `component_sla` migration
  • Component roll-up engine — `services/component-roll-up.js`
  • Component dependencies (fixed-point propagator) — `services/dependencies.js`
  • Component metadata — `routes/admin-component-meta.js`
  • Monitor geolocation — `lib/geo-lookup.js`
  • Monitor admin + detail — `routes/admin-monitors.js`, `routes/monitor-detail.js`
  • Probe-protocol endpoint — `routes/probe-protocol.js` + `lib/probes.js`
  • Probe node management — `routes/admin-probe-nodes.js`
  • Multi-region voting — `services/multi-region.js`
  • External-feed polling (Statuspage/AWS/generic) — `services/external-feeds.js` + `workers/external-poller.js`
  • Admin: incidents / maintenance / components / subscribers / SMTP / branding / ping
  • Self-update endpoint — `routes/self-update.js`
  • **Pre-maintenance reminder emails (v0.9.161 / status 0.3.34)** — subscribers now get an "upcoming" heads-up (1h–24h befo
  • **Subscribe + live auto-refresh on all themes (v0.9.161)** — the subscribe modal/button + SSE live-refresh were aurora-o
  • **Staleness banner + honest "unknown" state (v0.9.161)** — public page shows an amber "may be out of date" bar when the
  • **T2 status-system enterprise hardening (v0.9.161–164)** — full 3-audit security/correctness pass: stored-XSS serializer
  • **Admin default light/dark mode + lockable toggle (v0.9.169 / status 0.3.42)** — operators pick the public page's defaul
  • **Enterprise rack/node accent — public page (v0.9.169)** — a rack-server brand-mark (no-logo fallback) + a static node-r
  • **Status Page admin consistency + rack/node accent (v0.9.170)** — the 14 STATUS PAGE admin pages (`oncall/ui/app/status-
  • **HTTP assertion checks (v0.9.171 / status 0.3.43)** — http monitors gain AND-combined assertions on top of expected_sta
  • **Multi-step transaction monitors (v0.9.171 / status 0.3.43)** — new `transaction` kind for black-box application testin
  • Themes — `services/themes.js` (standby · aurora · operational · minimal · hero · dark · radial)
  • "Standby" theme as default (status v0.3.11) — the public page in the product's own admin-desk look: `#0b0d14` canvas, `#
  • Monitor detail: latency min/avg/p95/max chips on Recent probes (status v0.3.11) — stats strip over the table's OK probes
  • SSE live updates — `services/sse.js`
  • Snapshot worker — `workers/snapshot-worker.js`
  • Email worker — `workers/email-worker.js`
  • Monitor worker — `workers/monitor-worker.js`
  • Probe-stall self-alert (status v0.3.14 / oncall v0.8.31) — process-local watcher (independent of BullMQ's failure domain
  • War-room automation (v0.8.43) — per-incident self-hosted Jitsi rooms grew an auto-start policy (`video.warroom_auto`: of
  • License packaging tiers (v0.8.45, hosting arc #1) — zlic licenses may carry `tier` (enterprise/pro/solo) + `limits` (hos
  • Fleet overview + version drift (v0.8.46, hosting arc #2) — `/fleet/` landing page: hosts online/stale KPIs, agent-versio
  • Cluster-wide DNS zones + global record templates (v0.8.47, hosting arc #3) — `/enhance/dns/zones/`: every zone in the cl
  • Mail delivery telemetry (v0.8.48 + agent 1.44.0, hosting arc #4) — Delivery section on /email-security: Postfix sent/def
  • Cross-cluster Enhance migration — Phase 1 single-site workflow (v0.8.49 + agent 1.45.0, hosting arc #5 flagship) — `/enh
  • Pen-test sudoers-audit accuracy fix (v0.8.50 + agent 1.45.1) — the audit substring-matched shell binaries and flagged th
  • Security overview + AbuseIPDB enrichment (v0.8.51, hosting arc #6) — `/security/`: one org-wide posture dashboard compos
  • DNS SOA-serial drift monitoring (v0.8.52, hosting arc #7) — the "Standby watches all 4 nameservers" half of the 4-NS top
  • Service → logs deep-linking (v0.8.53, hosting arc #8 Tier 1) — each service row on /services/ links its log files straig
  • DNS secondaries minting — 4-NS topology (v0.8.54, hosting arc #7b) — `/enhance/dns/secondaries/`: Standby mints ns2-ns4
  • External DNS secondaries — CentralNIC/third-party AXFR providers (v0.8.58) — register a managed-AXFR provider (NS hostna
  • DNS BIND zone import/export (v0.8.59, hosting arc #7c) — Export any built-in-PowerDNS zone as an RFC 1035 master file; I
  • Service detail dashboards (v0.8.59, hosting arc #8) — clickable service in the portfolio → health rollup (healthy/degrad
  • IP commerce — floating IPs (v0.8.59, hosting arc #10 Phase 1) — buy/assign/unassign/release routable floating IPs on IP-
  • Service-centric status page (v0.8.73 / status 0.3.25) — the default public status page is now a proper, industry-standar
  • Revert status-app host-once rework — restore the original status page (v0.8.72 / status 0.3.24) — the v0.8.66 "host-once
  • Per-host detail: one combined graph, SSL as cert-expiry (v0.8.71 / status 0.3.23) — the `/component/:slug` page was 5 se
  • Fix Hot sites Memory/vCPU column alignment (v0.8.70) — the metric cell used `inline-flex justify-end` with a fixed-width
  • IPDB / Network / DNS auto-population (v0.8.69) — three empty pages filled from data the agents/APIs already collect. **I
  • Enhance Hot sites: both Memory+vCPU columns + real Disk (v0.8.68) — `top-websites` now returns BOTH memory and vCPU per
  • Enhance Hot sites table rework + SSL tracking (v0.8.67) — the Overview "Hot sites" table dropped the always-empty Cap/%-
  • Status app: host-once listing + per-host detail with per-check graphs (v0.8.66 / status 0.3.22) — the public status page
  • Hosts table: Kernel column + reboot-needed signal (v0.8.65) — new `Kernel` column on `/hosts` shows the running kernel (
  • Internal status board + live host status button (v0.8.64) — (1) `/status-admin/board/` — engineer-facing live board pull
  • Status probes: IPv4-first with IPv6 fallback (v0.8.63 / status 0.3.21) — `status/src/lib/probes.js` now resolves every t
  • Zephyr ↔ Standby peer pairing — Standby (receiving) side (v0.8.62, CROSS_PROJECT_CONTRACT §H) — Settings → Integrations
  • Hotfix: BOM-free oncall/package.json (v0.8.61) — v0.8.60's version bump was written by PowerShell `Set-Content -Encoding
  • Provisioning SSH keys + audit fixes (v0.8.60) — cloud providers carry default `ssh_keys` (comma-separated names/IDs) att
  • Cloud-aware Network page — Hetzner Cloud Firewalls (v0.8.55, hosting arc #9) — on VPS fleets the switch/LLDP topology is
  • Email security auto-onboard — agent-proxied Rspamd (v0.8.56 + agent 1.46.0, email Phase 2) — "Detect from fleet" on /ema
  • Heartbeat (push) monitors (status v0.3.15 / oncall v0.8.32) — new monitor kind `heartbeat`: the watched job (cron/backup

Features

  • **⛔ Endpoints can never reach the public status page (v0.9.471)** — status.lbreeze.com was publishing `BOOK-L5DV4ES278`
  • Status-page push from oncall — `oncall/src/services/status-page-push.js`
  • Status admin proxy — `routes/status-admin-proxy.js`
  • Status connection settings — `routes/status-connection.js`
  • Status release publisher — `lib/status-release-publisher.js` + `routes/status-release.js`
  • Components shared between oncall + status — `status_page_component_id` + `status_page_groups_monitors` migrations
  • Status maintenance bridge — `services/status-maintenance.js`

Features

  • HTTP probe — `probe/src/checks.js`
  • TCP probe — `probe/src/checks.js`
  • ICMP probe — `probe/src/checks.js`
  • TLS / SSL certificate probe (with min-days-left) — `probe/src/checks.js`
  • DNS probe — `probe/src/checks.js`
  • Probe runner — `probe/src/index.js`

Features

  • Multi-tenant instance switching — `desktop/src/main.rs`
  • Tray icon + menu — `desktop/src/main.rs`
  • Custom audio alert pipeline (rodio) — `desktop/src/main.rs`
  • Bundled WAVs (critical / high / warn / info / ack / mention / dm) — embedded via `include_bytes!`, see `desktop/sounds/g
  • User sound overrides at `%APPDATA%/sounds/`
  • play_alert / play_kind / play_sound / stop_alert / list_sounds commands — `desktop/src/main.rs`
  • Cross-platform autostart — `tauri-plugin-autostart`
  • Taskbar flash command
  • Windows taskbar overlay badge with unread count — `set_unread_badge()` in `desktop/src/main.rs` + `desktop/icons/badge-d
  • Rust-side notification-action forwarding — `forward_notification_action()` re-emits OS toast clicks as Tauri events
  • On-demand updater — `/api/desktop/update` endpoint
  • SHA-256-verified in-app self-update — `download_and_verify_update` / `launch_installer` in `desktop/src/main.rs` (downlo
  • First-run instance probe via Rust reqwest (no CORS) — `probe_instance` in `desktop/src/main.rs`
  • Start minimized to tray on OS-login autostart (`--autostart`) — `desktop/src/main.rs`
  • Admin upload of desktop installers (.exe/.msi) — `routes/desktop.js` `/api/admin/desktop/releases` + `ui/app/downloads`
  • Deep-link `standby://<host>` — `tauri-plugin-deep-link`
  • First-launch onboarding — `desktop/dist-frontend/welcome.html`
  • App-version exposure
  • Ed25519 updater signing — `desktop/standby-updater.key.pub`
  • Server-side `/api/desktop` route — `oncall/src/routes/desktop.js`

Features

  • **`check:control-catalog` verifies a framework is STORABLE and NAMEABLE (v0.9.329)** — `compliance_controls.framework` i
  • **`check:columns` strict (v0.9.328)** — previously failed only on a column absent from the WHOLE schema and downgraded "
  • **Fail-closed release-signature verification + TOFU trust anchor (v0.9.106–108)** — self-update REFUSES to apply an unsi
  • **Verified manual `standby-update` (v0.9.109)** — `deploy/install.sh` replaces the legacy unverified `curl … /install/st
  • Auto-prune old release dirs after a healthy self-update (keep last 3) — `prune_old_releases()` in `scripts/standby-vendo
  • Desktop release runbook (RepoMade source release + local build) — `desktop/RELEASE.md`
  • Release build script — `scripts/build-deploy-zips.js` + `oncall/scripts/build-release.js`
  • Release signing keygen — `oncall/scripts/gen-release-key.js`
  • SBOM generator — `oncall/scripts/gen-sbom.js`
  • CVE scan script — `oncall/scripts/cve-scan.js`
  • Smoke test — `oncall/scripts/smoke-test.js`
  • Bootstrap / provision / setup-server — `oncall/scripts/bootstrap.js`, `provision.js`, `setup-server.js`
  • Admin CLI — `oncall/scripts/admin-cli.js`
  • MFA coverage diagnostic — `oncall/scripts/diag-mfa-coverage.js`
  • Fire test alert — `oncall/scripts/fire-test-alert.js`
  • Telemetry host setup — `scripts/setup-telemetry-host.sh` (VictoriaMetrics + ClickHouse + nginx + LetsEncrypt; Ubuntu 22.
  • **Production VPS installer (Ubuntu 22/24/26 + Debian 12/13)** — `scripts/install-standby-production.sh` + `VPS_INSTALL.m
  • **CLI admin seed (unattended)** — `oncall/scripts/seed-admin.js` + `npm run seed-admin`
  • **Curl-installable bootstrap** — `oncall/src/routes/production-install.js` serves `/install-standby-production.sh` (with
  • **Headless workers entrypoint** — `oncall/scripts/workers.js` + `oncall/src/workers/index.js`. Set `WORKERS_DISABLED=1`
  • **In-app auto-update from RepoMade** — `oncall/src/workers/release-poller.js` polls `<your-repomade>/api/v1/repos/standb
  • **Smart install (auto-detect extracted source)** — `scripts/install-standby-production.sh` v0.3.1+ checks if it's runnin
  • **`.repomadeignore`** — whitelists operator-facing docs (`VPS_INSTALL.md`, `CROSS_PROJECT_CONTRACT.md`, `PLAN_LICENSING_
  • **CROSS_PROJECT_CONTRACT.md** — binding spec for the Standby ↔ RepoMade ↔ Zephyr integration (Zephyr=licensing authority
  • **Pager noise guardrails (v0.3.2)** — `pager_source_config.min_severity_to_page` floor (default 'high') prevents warning
  • **Voice-then-context-SMS workflow (v0.3.3)** — for chain steps with both voice+sms channels, voice fires first, SMS foll
  • **Role-based package auto-update policies (v0.3.4)** — operator enables seeded built-in policies (PowerDNS, BIND9, nginx
  • **Canary safety gate for auto-update (v0.3.5)** — `oncall/src/workers/maintenance-runner-worker.js#firePolicyWindow` det
  • **`service.healthcheck` agent capability (agent 1.21.0)** — composite probes (`systemctl_active`, `tcp`, `http`, `dig`,
  • **Edge-installer hook + curl one-liner (v0.3.8)** — `deploy/install.sh` is the contract RepoMade's edge installer (`<you
  • **Zephyr license + edge auto-update (v0.3.7)** — full cutover from the legacy `rmt_` push-token flow to the production l
  • **Self-contained self-update subsystem (Zephyr-style, polkit-dispatched, fully autonomous as of v0.6.20)** — `scripts/st
  • **Permissions-Policy header** (helmet onSend hook; configurable) — `oncall/src/plugins/security-headers.js`
  • **BullMQ Redis socket fix** — `oncall/src/queue.js` + `status/src/{queue,redis}.js` now spread the full `config.redis` s
  • **Node 24 LTS verified live** — `upgrade-node.sh` handles deb822 `nodesource.sources` (Ubuntu 24.04+/26.04); ran clean o
  • **One-shot Node-24 + dependency upgrade scripts** (snapshot + auto-rollback, per-app reinstall, `npm rebuild argon2` for
  • **Hardened `.npmrc`** (audit-level=moderate, save-exact, strict package-lock, fetch retries) — `.npmrc`
  • **Node 24 LTS target** (engines widened to `>=22`, `.nvmrc`→24, installer `NODE_MAJOR=24`) — `package.json` engines + `.
  • **Platform license encrypted at rest** (AES-256-GCM, decrypt on read; legacy plaintext passthrough) — `routes/admin-rele
  • **Platform-update audit** (signature-verification gap, edge trust, contract drift; ranked findings) — `AUDIT_PLATFORM_UP

Features

  • [x] **291 confirmation/alert/prompt gates fixed for the desktop client (v0.9.374)** — `window.confirm/alert/prompt` are
  • **Per-page browser tab titles (v0.9.331)** — all 206 admin pages shipped the *same* title: the root layout's static `On-
  • `/`, `/activity`, `/incidents`, `/incidents/detail`, `/alerts`, `/alert-rules`, `/notification-log`
  • `/chains`, `/chat`, `/handoff`, `/pager-intelligence`, `/swaps`, `/schedules`, `/schedules/detail`
  • `/runbook`, `/runbook/edit`, `/runbook/run`, `/runbooks`, `/runbook-routes`, `/response-templates`
  • `/hosts`, `/hosts/detail`, `/approvals`, `/credentials`, `/services`, `/changes`
  • `/compliance`, `/compliance/drilldown`, `/compliance/oscap`, `/compliance/templates`
  • `/cve`, `/cve/detail`, `/cve/latest`, `/threats`
  • `/av-policies`, `/firewall-policies`, `/firewall-drift`
  • `/mitigations`, `/mitigations/plan`, `/pen-tests`, `/pentest`, `/breach`
  • `/risks`, `/assets`, `/policies`, `/retention`, `/audit`
  • `/subprocessors`, `/training`, `/trainings`, `/trainings/edit`
  • `/telemetry`, `/metrics`, `/logs`, `/slos`, `/system-status`
  • `/admin/log-collection`, `/admin/maintenance-windows`, `/admin/fleet-updates`
  • `/status-admin`, `/status-admin/components`, `/status-admin/component-meta`, `/status-admin/dependencies`
  • `/status-admin/external-sources`, `/status-admin/incidents`, `/status-admin/maintenance`
  • `/status-admin/monitors`, `/status-admin/monitors/detail`, `/status-admin/probe-nodes`
  • `/status-admin/subscribers`, `/status-admin/email`
  • `/integrations`, `/enhance`, `/enhance/sites`
  • `/ai-providers`, `/ai-tools`, `/admin/ai-spend`
  • `/login`, `/profile`, `/invite`, `/users`, `/teams`, `/sso`, `/access-keys`, `/service-accounts`, `/settings`
  • `/compensation`, `/downloads`

Features

  • **PostgreSQL only — MySQL fully dropped** — every runtime/CLI/script/bootstrap is pg-only; the `DB_CLIENT` dual-path was
  • **Portable SQL helpers** — `oncall/src/lib/db-portable.js` exporting `intervalAgo`, `jsonGetText`, `insertIgnore`, `upse
  • Cross-engine migrations — every `MODIFY COLUMN ENUM` widening, FULLTEXT index, and JSON manipulation runs on both MySQL
  • Redis unix-socket support — `REDIS_SOCKET=/var/run/redis/redis-server.sock` env var (`oncall/src/config.js` + `redis.js`

Features

  • 24 BullMQ queues — `oncall/src/queue.js`
  • Redis client — `oncall/src/redis.js`
  • App settings store — `lib/app-settings.js`
  • Fingerprinting — `lib/fingerprint.js`
  • PDF generation — `lib/pdf.js`
  • SHA-256, ULID, reference data, storage abstraction — `lib/`
  • dpkg version comparator — `lib/dpkg-version.js`

Features

  • Zod schemas — `shared/src/schemas.js` (Severity, IncidentStatus, Channel, UserRole, E164)

Features

  • **agentd reaches parity — 132 of 137 capabilities (v0.9.359 / agentd 0.20.0, 07/08/26).** The port list is empty. The fi
  • **Fleet button: migrate all hosts to agentd (v0.9.360–364).** Preview-first: the dialog computes and names the capabilit
  • **agentd is the default agent (v0.9.361).** Enrolling a host installs `standby-agentd`; the Python one-liner moved to `i
  • **Fleet dispatch toasts report the reason the backend actually sent (v0.9.365).** "Dispatched to 0 agents · 18 skipped (
  • [x] **Audit reports live in the repo, excluded from customer archives (v0.9.365).** Dated HTML audit/plan reports go to
  • **Slack / Teams chat integration** — chat is internal-only via `chat_channels`/`chat_messages`. No `slack.js`/`teams-web
  • **PagerDuty / Opsgenie connectors** — no service files.
  • **Grafana poller** — no current `grafana-poll` worker or service. (Was planned earlier; appears to have been replaced by
  • **Twilio integration** — removed. SMS/voice now exclusively via MessageBird.
  • **Wazuh SIEM** — removed in migration `20260512190000_remove_wazuh.js`. Earlier docs claim it's done; it's not.
  • **Mobile app** — only Tauri desktop + web UI exist. No React Native / iOS / Android.
  • **Customer DMARC / deliverability API (`CROSS_PROJECT_CONTRACT.md` §14)** — proposed, NOT built (code-audited 2026-07-21
  • **Combined partner/oncall-overview endpoint (`CROSS_PROJECT_CONTRACT.md` §10)** — optional per the contract; not built.
  • ~~Public API SDK / OpenAPI spec~~ — **DONE** (v0.6.70): OpenAPI 3 spec at `/api/v1/openapi.json` + Redoc docs at `/api/d
  • [x] ~~In-app backup/restore UI~~ — **DONE**: full `/backups` surface (mint host, policy builder, engine installer, sched

Features

  • CVE-fix bumps: postcss → 8.5.14, @fastify/jwt → 10, @fastify/static → 9, nodemailer → 8, fast-xml-parser → 5
  • Tier 2 majors: echarts → 6, @fastify/multipart → 10, pino-pretty → 13, lucide-react → 1.x
  • Tier 3 careful majors: zod → 4 (every route), tailwindcss → 4 (CSS-first @theme), next → 16