Production integrity · for solo operators

Know what is actually running in production.

Your platform can report READY while your domain serves an old build. Ours did — for 11 weeks. ZASIS independently compares what you committed, what was built, and what your users are actually being served, every hour — and preserves the record when they don't match.

Built by an operator, watched by its own product. The register counts on this page are queried live from production — including the ones that aren't flattering. Everything else here is a snapshot with the timestamp printed beside it. We separate the two because a page that calls all its numbers live while most of them are frozen is the exact failure this product exists to catch.

zasis · serving check — our incident, replayedmismatch
commitnewest build compiled, tests green✓
buildplatform reported READY✓
deploydashboards green, CI passing✓
serveddomain pinned to a build 11 weeks old✕
PRODUCTION MISMATCHNewest READY build is not what the domain serves. Every deploy since the rollback compiled, passed, reported READY — and never took the domain.
replay of our own recorded incident — the check that closes it now runs hourly, 24× per project per day
Hourly since 25 Jul · two real failures caught — both ours, both counted once. The staged one (18 Aug) is still broken on purpose and re-caught every hour. The unstaged one (19 Aug) was the check itself: its fetch layer froze on a day-old view and published four false greens. We caught it from its own recorded premises, published it while it was still failing, and proved the fix in production the next morning — two clean passes, the freeze ended at exactly 21 rows, at exactly the fix deploy ↓
serving checked every hour, from outside the platform three self-convictions caught — all ours, all published verification covers all 5 of our projects — four verified green, one deliberately broken and caught every hour every claim on this site has a row in the register 148 findings public · 31 corrections, never deleted 2 of our own claims still published FALSE watched by its own product first deliberation on the record 22 Aug — its arithmetic refuted by external review, published
Where production lies

Expected, built, deployed and served can quietly diverge.

Each layer of your stack reports on itself, to itself. None of them owes you the cross-check.

✕

READY isn't servingserving

The platform reports the build succeeded. Nothing confirms your domain is actually serving it — a pinned rollback can hold the past live while every new deploy "succeeds."

✕

The logs are theirslogs

Each provider's logs live on that provider, scoped to itself, retained on their schedule. When you need one timeline across all of them, you're assembling it by hand at 3am.

✕

Caps are softspend

Platform budget caps are enforced eventually, not instantly — by their own documentation, a request already underway completes past the limit. Each cap also only caps its own platform.

✕

Nobody tells yousilence

Every one of these failures looks like a green dashboard. Ours looked green for 11 weeks. Silence is not evidence that nothing is wrong.

The incident this product exists for — from our own record

The first thing the crash test caught was our own check.

An instant rollback pinned our domain to an old build. Every deploy afterwards compiled, passed CI, reported READY — and never took the domain. Dashboards stayed green for 11 weeks. Everything we shipped in that window was invisible to our users, and nothing said a word. Because it had never caught a second one, we ran a controlled crash test against it on 18 Aug 2026: a sacrificial project, deliberately rolled back the same way. The check failed its own test — twice. An Instant Rollback slipped past the platform query it relied on (D127), and when we fixed our reading of "latest", the platform still told us the newest build held the domain while the old one was being served (D128). Both are tier 1, both filed the same day, both public in the register. We rebuilt the check to stop believing the platform and start fetching what the domain actually serves — and at 23:01 UTC on 18 Aug it caught the break, on the same still-broken canary, 42 minutes after the fix went live: its first true positive in 2,093 hourly passes to that point. The break-to-catch interval was 19 hours, but almost all of that was us fixing the check, so we do not quote it as detection speed. The number that means anything is the cadence: once it can see, it catches within the hour. This paragraph is what "watched by its own product" means. It kept meaning it: on 19 Aug the check convicted itself a third way (D139). Its own outbound fetches were being answered by a persistent cache, so for four morning hours it compared two stale copies and published four false greens about this very site — while separately printing a red that was wrong about the world. We caught it by reading the premises it records next to every verdict against the platform’s live answers; the four false rows stay in the register, counted as one failure. The fix — every fetch forced past the cache — merged the next morning and was proven in production by two clean passes: the check’s recorded “latest” snapped from the day-old deployment to the fix deploy itself, on the first pass after it went live. The same hour delivered the milestone the product exists for: at 15:00 UTC, lendingfinancialgroup.com.au — the site whose 11-week silent failure started all of this — came inside hourly coverage for the first time, alongside a second production site. And on 20 Aug the fifth project — the one with no public surface at all — came inside through an authenticated read used on both sides of its comparison: verification now covers 5 of 5, every project either verified green or deliberately broken and caught. The first fully-known board in this estate’s history.

Then, on 22 Aug, the other half of the product proved itself the same way. The deliberation engine ran for real for the first time: two frontier models answered a lending question blind, saw each other, revised — one held its dissent on the record — and when we tried to rewrite a committed verdict, the database refused us in so many words. We sent the whole record to an external reviewer prompted to demolish it, and it did its job: the panel’s final arithmetic was wrong, by amounts we publish, and the record now carries that refutation permanently, next to what held — blind-before-exposure ordering, the preserved dissent, the refused tamper. It took three attempts to get one clean run, the two failed attempts are kept in the database unedited, and the next engine change is the reviewer’s own suggestion: a calculation gate that refuses to finalise figures that don’t reconcile. D142–D148, all filed the same day, all public.

See D127, C13 and the E4 record in the live register →
D127
The answer

ZASIS reconciles them — from outside.

commit→ build→ deploy→ served
01

Connect

Point ZASIS at a project with read-only access. It sits beside your stack, never inside it — if ZASIS goes down, your deploys and your site don't even notice. We watch; we cannot touch.

02

Verify

Every hour, it independently fetches what your domain actually serves and compares it against what your platform claims — built vs served, to the build. Schema drift and spend get the same treatment on their own cadences.

03

Preserve

Match or mismatch, the row is kept — timestamped, queryable, exportable, append-only with write-once verdicts enforced by database triggers. When something diverges, the finding arrives in plain language.

PlatformWhat's checkedCadenceBlocking?
Verceldomain serves the newest READY build (the rollback class)hourlyobserve only
Vercelproject registry vs what actually existsdailyobserve only
Supabasemigration files vs schema actually applieddailyobserve only
Anthropic spendthree-scope cost caps vs metered usagereal-timecaps enforced
GitHubpipeline events recorded — verification not yet——
Cloudflare———

The empty rows are printed on purpose. Coverage claims map to what actually runs — nothing more.
And the row that does run is bounded too: serving verification reaches 2 of our own 5 projects today. The other three sit behind a platform login we have not wired past yet, so the check refuses to conclude on them rather than reporting a green it has not earned. The fix is written and unshipped; that work has since landed.

The proof runs in public

One real incident. Receipts with definitions.

148
findings filed against ourselves
31
corrections · recorded, never deleted
21
marketing claims tested line by line
2
of those claims published as FALSE

Append-only, in scope

Committed findings and verdicts are protected by database constraints and a write-once trigger — walk the timeline of any recorded moment. A real tamper attempt on a committed verdict is refused by the database itself.

13,642 audit entries · 22 action types · since 4 May 2026
87.8% cron receipts · 10.7% dashboard views · the governed slice is small and printed as such

Isolation, measured

Seven projects, each with its own separate database. The control plane's own 40 tables all carry row-level security — coverage we verify, not assert.

7 projects · 7 separate databases · 40/40 control-plane tables RLS-enforced
1,166 raw drift findings across 210 scans — recurring findings counted each time they recur

receipts snapshot · frozen 22 Aug 2026 12:03 UTC · supporting: 2,518 serving-check rows across 603 hourly passes since 25 Jul · 15,929 health pings in the trailing 30 days (rolling window — this figure falls as old rows age out, so it is not a running total) · audit composition recomputed at publish. Every figure here is a snapshot with a timestamp, not a live counter: the register moves hourly and this page does not.

The scope, in our own words. These protections bind the application, its API paths and every non-superuser role. They do not bind us: a database owner can disable a trigger or restore a backup. You will not find the words "immutable" or "not even us" on this site, because today they would be unearned. What we claim is narrower and testable: committed records cannot be silently altered through the application, and external anchoring that would extend that guarantee is adopted, condition-listed, and not yet running — so we don't claim it. The adversarial review that forced this plainness is published, verbatim, with 148 findings and 31 corrections we logged against ourselves.

Run our numbers against us — the live register →

The platform beneath

The same evidence layer is expanding around every agent you run.

Agents plan, write, spend and ship without a second set of eyes. Four gaps make that dangerous — and each one is getting the serving-check treatment: built, verified in production, then claimed.

Recorded human approval live

The merge route refuses any PR without a recorded human approval for that exact commit — server-enforced, fails closed. It records the approval, not your comprehension.

2 approvals on record — a young gate, printed as such

Spend ceilings live

Three-scope cost caps with a live meter — and an honest history: our own meter once over-counted 13.2×, caught because two meters reconcile continuously.

6 limits enforced in production

Kill switches live

Provider, category, global — three levels, fail closed. The last-resort switch you already hold: revoke your key at the provider and everything stops.

5 switch sets configured · global currently off

Blind deliberation beta

Multiple models draft, critique and reconcile with dissent preserved verbatim and verdicts committed blind — write-once by database trigger.

production rounds to date: 0 — printed, not padded

The cockpit ties it together: one queue across every project, approvals waiting at the gate, every decision written down. It ships the same way everything here ships — when it's real, with its receipts.

zasis · cockpit — design preview
01refactor-auth-middlewarerouted · tests requiredrunning
02smsf-reg-summaryqueued · research profilequeued
PENDING APPROVAL merge to productionwaiting on you
FAQ

Answered with what it actually does.

How is this different from my platform's own dashboard?
Your platform reports on itself, to itself. ZASIS is the outside witness: it independently fetches what your domain serves and compares it to what the platform claims, then keeps the record in a store your platform doesn't control. The point isn't more monitoring — it's a cross-check none of the layers owes you.
What happens when ZASIS itself goes down?
Nothing happens to you. ZASIS sits beside your stack with read-only access — it is not in your serving path, your deploy path, or your request path. If it dies, your site keeps serving and your deploys keep deploying; you lose the witness until it's back, and the gap in its own heartbeat record is visible.
Do you store my provider keys?
Bring your own keys; they live in your workspace's key store and are used only for your own read-only checks and routed calls, inside your isolation boundary. Revoke them at your provider any time and ZASIS goes dark for that provider — that's the last-resort kill switch you always hold.
Where does my data live?
Each project runs against its own separate database — seven projects, seven databases today. The control plane's 40 tables all carry row-level security, watched by governance scans. What our guarantees do and don't bind is spelled out, plainly, on the register.
Can I get my evidence out?
Yes — the record is queryable and exportable; findings are kept in plain language with timestamps. Signed offline-verifiable exports are on the adopted roadmap (external anchoring is condition-listed in the register) and will be claimed only once they run.
Private beta

Bring your keys. Keep control.

ZASIS is in private beta behind a signup allowlist — there is no self-serve form yet, and we'd rather tell you that than fake one. Email us and you get the serving checks, the record, and the same live register we run against ourselves.