0.2.1
Pulse 0.2.0 answers the question every outage starts with: is it us, or is it a provider? The new Dependencies feature puts a provider's officially reported status beside your own endpoint checks, one click, no credentials, no setup. Around that headliner, this release makes the write path exactly-once under retries and crashes, makes a new monitor show real results in its first minutes instead of a blank chart, and rebuilds every cross-cutting rule around a single owner so the API, dashboard, CLI, SQL, and OpenAPI spec can no longer drift apart. It closes with a repo-wide audit pass: 21 verified sources of duplication eliminated, dead code deleted, and one orphaned table dropped.
What's new in 0.2.0
- Dependencies. Add OpenAI, Vercel, Stripe, Clerk, Neon, and 10 more providers in one click and see their official status beside your own checks. 15 providers, 30 curated presets, five feed adapters, a per-minute poller with SSRF-safe allowlisted fetches, and incident overlap surfaced on monitor and incident detail as neutral timing context. Provider status is attribution, not proof, so a failed feed reads Unknown, never Outage. Ships across dashboard, API, and
pulsectl dependencycommands. - Live from the first check. New monitors walk through visible first-run phases and their detail pages update live as results land. Recent Checks now shows real per-check rows, and uptime percentages drop their trailing zeros.
- Exactly-once writes. The idempotency layer survived an adversarial review and came out stricter: completion is persisted atomically with the mutation, completed records are never reclaimed, deterministic errors replay as the same response instead of retrying the work, jsonb parameters bind as text so Postgres cannot double encode them, and Edge Config is written after every abortable statement.
- One owner per rule. Public URL policy, accepted-config reads, Edge Config writes, deterministic UUIDs, client IP extraction, timezone validity, and the storage budget with its retention ladder each live in exactly one module now, enforced identically at every surface. The settings form can no longer accept a URL the checker rejects, and rate limiting keys on the same IP the session records.
- A hardened CLI.
pulsectlshows a braille spinner on stderr while requests are in flight, requests the new dependency scopes, caps admin list responses at 64 MiB against hostile servers, and defers config validation to the server so Go and Zod cannot disagree about what is valid. - Failures that explain themselves. A diagnostic error boundary probes system health when a page breaks and tells you whether the database, the config store, or the app itself is the problem.
- Faster backfill. Gap backfill reads the accepted config snapshot once per range instead of once per minute, and the benchmark harness now measures the exact query shapes production runs.
- Leaner by design. The unused daily_rollups table is dropped by migration, dead notification and status-page code paths are deleted, and the marketing site shares the app's design tokens with new performance trace cards and live monitor-add feedback.
Fixes and improvements in 0.2.1
- Deploys that prove themselves. Every deployment now runs database migrations as a gate before traffic shifts, and a post-deploy canary confirms the cron loops are healthy on the new release. A bad build stops itself before anyone sees it.
- More providers, clearer status. AWS, Auth0, and DigitalOcean join the catalog alongside richer incident-feed support. Every provider row now carries its brand mark, the add flow is faster to scan, and incident-only feeds explain exactly what they cover.
- Alerts that survive a crash. System alert delivery is durable through restarts and retries, and availability numbers now come straight from raw check batches for accuracy at every zoom level.
- A stricter, faster foundation. One toolchain checks the entire repo in about a second, TypeScript now proves every indexed read, and security-sensitive paths fail closed instead of assuming. Dead code across the codebase is gone, verified by test suites at every gate.
- Small touches everywhere. Whole-row click targets, keyboard-reachable tooltips, live-updating dependency detail, and an onboarding flow that asks only for what it needs.