SignalOps
Every number carries its trust state, its source run and its definition.
- Role
- Solo — from my written product spec (SIG-PRD-001); built with AI coding agents under my direction
- Stack
- FastAPI, PostgreSQL, Celery + Redis, S3-compatible storage, Keycloak (OIDC), Next.js, OpenTelemetry
- Timeline
- November 2026
- Status
- Built · tested locally · not deployed · no public repo

A dashboard that is wrong looks the same as one that is right.
In a telecom-style business, a broken payments schema or a batch sent twice quietly makes revenue wrong. The dashboard does not say so.
SignalOps treats trust as a state the data has to earn: detect → validate → investigate → resolve → verify → publish.
Four rules the data has to pass.
CSV or REST source → raw evidence → validation → reconciliation → publication gate.
- 01
Keep the raw file, then check it
Each batch is stored with its SHA-256 before parsing. Invalid rows are quarantined with a reason, never trusted or silently corrected.
- 02
A replay cannot move a KPI
Idempotency keys and unique source IDs make a resent batch add nothing; a changed event needs a higher version or is rejected.
- 03
Blocked is not zero
A failed critical check stops the new snapshot and keeps the last good one. KPIs read Verified, Warning, Stale, Blocked, Processing or Unavailable — never 0 for missing data.
- 04
Close incidents on evidence
Closing needs a reason plus a passing check from a run published after the failure. A note is not enough.
Sources, metrics, incidents.
Keycloak sign-in, server-side role and tenant checks on every request, and background workers for ingestion and exports.



Tested on one laptop. Not production.
| Check | Result |
|---|---|
| Backend: unit, integration, API contract | 83 passing · 13 Nov 2026 |
| Frontend unit tests | 21 passing · 13 Nov 2026 |
| Browser journeys, sign-in to incident close | 12 / 12 · 11 Nov 2026 |
| Encrypted backup and restore drill | Round trip passed locally |
- Not yet: a deployment, a load test (200 users and 10 million rows are spec targets, not results), TLS, managed secrets, external alert routing, or a full accessibility audit.
- Some integration tests stub storage and the message broker; a worker crash under load is untested.
- Built with AI coding agents under my direction; the repository is not public yet.
Journey and drill detail
Backend tests include PostgreSQL integration tests. The 12 journeys: sign-in, CSV and REST ingestion, the publication gate, tenancy, offline behaviour, and detect-to-close for an incident. The encrypted backup and restore drill covers the database, identity and files.