v0.8.0

Released 2026-03-15

Public status pages

Share a read-only status view with clients without giving them a login.

  • Generate a status token from Settings — creates a short-lived shareable URL
  • The public page at /status/?token=<token> shows overall health, component grid, and active incident timeline
  • Token-gated: revoke a token at any time to invalidate the shared link
  • Cloudflare Turnstile challenge on the contact form prevents spam submissions

Vendor monitoring

Merlonix now watches 11 upstream infrastructure vendors and fans alerts out to tenants whose stack tags overlap with the affected services.

Covered vendors: Stripe, Cloudflare, Anthropic, OpenAI, Vercel, GitHub, Slack, Shopify, Google Cloud, AWS, Azure

  • Polls every 5 minutes via each vendor's status API
  • Content-hashes each response — only re-processes on genuine changes
  • LLM summarises the incident and assigns an impact level (none, minor, major, critical)
  • AWS and Azure RSS feeds are parsed in addition to the Statuspage JSON APIs

Alert channels

Route alert notifications to the destination your team actually monitors.

Supported channel types:

TypeHow it works
emailHTML alert email via Resend
slack_webhookSlack Incoming Webhook JSON POST
generic_webhookHTTPS POST signed with X-Merlonix-Signature: sha256=<hex>

Each channel has a severity filter — configure it so only critical alerts page your on-call rotation while info alerts go to a low-priority email digest.

DLQ observability

When a check-runner job fails after all retries, it is now routed to a dead-letter queue consumer that:

  1. Writes a row to agent_run_failures
  2. Fires a critical operator alert on first failure per asset per day
  3. Deduplicates on dlq:<type>:<asset_id>:<YYYY-MM-DD> so repeat failures don't flood the operator inbox

Other improvements

  • Keyset cursor pagination on /v1/assets and /v1/checks — O(log n) at scale instead of O(n) offset scans
  • Audit log at /v1/audit-log — immutable record of all mutations (asset CRUD, alert acks, billing changes, channel changes)
  • Billing pause/resume — self-serve POST /v1/billing/pause and /v1/billing/resume via Stripe's pause_collection API