Skip to content

Add Instatus status-page provider support#16

Merged
anthonybaldwin merged 2 commits into
mainfrom
feat/instatus-provider
Jun 5, 2026
Merged

Add Instatus status-page provider support#16
anthonybaldwin merged 2 commits into
mainfrom
feat/instatus-provider

Conversation

@anthonybaldwin
Copy link
Copy Markdown
Owner

@anthonybaldwin anthonybaldwin commented Jun 5, 2026

Adds Instatus as a third status-page provider alongside Statuspage.io and incident.io, with full parity: live status, threaded incident updates with the operator’s real prose, full history, and scheduled maintenance windows.

Summary

  • New src/providers/instatus.ts adapter implementing the existing Provider interface, built from pure, unit-tested helpers.
    • Reads Instatus’s documented keyless public API /v3/summary.json (live state + impact enum) and the standard /history.atom feed (full update history + prose), joining them on the incident id.
    • Maintenances are modeled as incidents with impact: "maintenance" (rendered grey).
  • Registered in the provider registry and PROBE_ORDER ([incidentio, statuspage, instatus], probed last with a strict shape check so it can’t false-positive on the other two), and added to the monitorSchema.provider enum.
  • impactColor() now maps maintenance → grey (it previously fell through to blurple).
  • Replaces the stale “Instatus (skipped)” note and updates all docs (API-Integration.md, Configuration.md, Architecture.md, Commands.md, Home.md, README.md, AGENTS.md, .env.example).
  • Adds test + typecheck npm scripts; first tests in the repo (Bun’s built-in runner, no new deps).
  • Fixes a pre-existing zod v4 typing issue: env boolean flags used string defaults (booleanFromEnv.default("true")), which failed tsc (7 errors) and would have defaulted unset flags to a truthy string rather than a real boolean. Now use boolean defaults. tsc --noEmit reports zero errors.

Test plan

  • bun test — 24 pass (canonical mappers, yearless-timestamp + year-rollover, Atom parsing for incidents & maintenances, summary mapping, probe disambiguation, live-impact join, detectProvider auto-detection).
  • bun run typecheckzero errors.
  • Live read-only smoke test against https://status.kagi.com: probe + fetchSummary + fetchIncidents returned 41 real incidents with prose bodies and a detected maintenance entry.

Notes

  • No new env vars or commands. Add a monitor after deploy with /monitor add https://status.perplexity.com (auto-detects instatus).
  • Two commits: the feature, then the type-error fix.

🤖 Generated with Claude Code

anthonybaldwin and others added 2 commits June 4, 2026 20:23
Add Instatus (e.g. status.perplexity.com) as a third status-page provider
alongside Statuspage.io and incident.io, with full parity: live status,
threaded incident updates with the operator's real prose, full history,
and scheduled maintenance windows.

- New src/providers/instatus.ts adapter implementing the Provider interface.
  Reads the documented keyless /v3/summary.json API for live state and impact,
  and the /history.atom feed for full update history and prose, joined on the
  incident id. Maintenances are modeled as incidents with impact "maintenance".
- Register in the provider registry and PROBE_ORDER (probed last, with a strict
  shape check so it can't false-positive on the other providers) and add
  "instatus" to the monitorSchema provider enum.
- impactColor() now maps "maintenance" to grey.
- Replace the stale "Instatus (skipped)" note and update all docs (wiki,
  README, AGENTS, .env.example).
- Add a `test` npm script and the first Bun tests in the repo (no new deps).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
zod v4's .default() expects the schema's output type, so passing the
strings "true"/"false" to booleanFromEnv.default() failed typechecking
(7 TS2769 errors) and would have defaulted unset flags to a truthy
string instead of a real boolean. Use boolean defaults (true/false) and
add a `typecheck` npm script. `tsc --noEmit` now reports zero errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@anthonybaldwin anthonybaldwin force-pushed the feat/instatus-provider branch from 6c82ff1 to 2c87eef Compare June 5, 2026 03:25
@anthonybaldwin anthonybaldwin merged commit 7e4deca into main Jun 5, 2026
1 check passed
@anthonybaldwin anthonybaldwin deleted the feat/instatus-provider branch June 5, 2026 21:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant