Skip to content
Centriu
Centriu TrustOps

Live Verification Cleanup Automation: The Checker Was Creating What It Audits For

Centriu TrustOps runs a dedicated verification script directly against the real, live production Gateway specifically because a test run against a separate staging copy would not actually prove the real pipeline works end to end — the script sends a genuine request, confirms a genuine response, and then deletes everything it created, reporting "test data completely removed." That cleanup step deleted the request record, the response, the usage event, the credential, the model, the price and the vendor rows it had touched — and confirmed each of those was gone. What it never checked was a row it had never directly created at all: every real Gateway response, verification traffic included, automatically triggers a database function that writes a separate financial cost event to the ledger. That cost event's own foreign key pointing back to the original request was configured to be set to null when the request is deleted, rather than to delete the cost event along with it — meaning the request could disappear completely while the cost event it had generated stayed behind, permanently, now pointing at nothing. Measured directly against production: nine of these orphaned cost events had already accumulated, one per verification run, sitting inside a REAL client organization's own financial ledger, each carrying a source type still correctly labeled "gateway request" and a source id referencing a response that no longer existed anywhere. The genuinely uncomfortable detail is that this exact shape — a cost event with a broken link back to its own origin — is precisely what TrustOps's own separate audit reconciliation feature is specifically built to detect and flag as suspicious. The tool meant to verify the system's own integrity had been quietly generating the exact anomaly a DIFFERENT part of the same system exists to catch.
Cleanup missed a side effect
Now deleted in the right order
Financial ledger reconciliation and cost tracking screen
The checker was creating what it audits for.

A foreign key's own delete behavior is a real design decision, not a detail

When one database table refers to a row in another by its identifier, the reference has to specify what happens if the referenced row is later deleted: cascade the deletion to every dependent row, block the deletion outright while any dependent row still exists, or sever the link by setting the dependent row's own reference to null while leaving the dependent row itself standing. Each choice is correct for a real, different situation — setting a reference to null on delete is often exactly right for a genuinely optional relationship, where the dependent row should clearly keep existing and simply lose one specific piece of context. The same choice becomes a liability the moment code elsewhere in the system assumes deleting the REFERENCED row is enough to clean up EVERYTHING connected to it — because the database will not raise any error, will not block anything, and will not warn that a dependent row is still sitting there, now permanently disconnected from the very thing that produced it.

How the underlying problem shows up before you fix it

A cleanup routine deletes a specific, known list of records it directly created, and confirms each one is gone — while a SEPARATE record, generated automatically as a SIDE EFFECT of the activity the cleanup is undoing, is never included in that list at all.

The cleanup routine's own success message (something to the effect of "test data completely removed") is accurate about everything it actually checked, and simply silent about the one category of row it never thought to check for.

The orphaned row does not produce any runtime failure, warning, or unusual log entry — a foreign key configured to set itself to null on delete does exactly what it was told to do, without complaint, on every single run.

The orphaned rows accumulate silently, one per execution of whatever routine is producing them, inside real, live tables that also hold genuine production data — meaning a growing pile of synthetic rows sits mixed directly into real records, indistinguishable at a glance.

A SEPARATE, unrelated part of the system — in this case, an audit or reconciliation feature specifically designed to flag suspicious-looking records — eventually surfaces the exact rows the cleanup routine left behind, but with no obvious link back to the verification script that actually created them, making the finding look like a new, unexplained anomaly rather than a known, self-inflicted one.

Why a script can correctly delete everything it 'knows about' and still leave something behind

A cleanup routine's own mental model of what it needs to remove is built from what it explicitly created and can explicitly name — the specific request, the specific response, the specific set of records it constructed step by step. A database trigger firing automatically in response to that activity, writing a row into a completely different table the cleanup script's own author may not have been thinking about at the moment cleanup logic was written, falls outside that mental model entirely — not because it was forgotten through carelessness, but because a trigger's side effect is, by design, not something the code that caused it necessarily has direct, obvious visibility into. The gap is not a missing DELETE statement so much as a missing AWARENESS that a DELETE statement was ever needed in the first place.

How Centriu TrustOps closed the gap and drew a clean line around what it would and would not clean up

Centriu TrustOps's Gateway verification script runs directly against the live production Gateway, tagging every record it creates with a distinctive, recognizable prefix in its idempotency key specifically so its own later cleanup pass can find and remove exactly those records, and nothing else. The cleanup pass, before this fix, deleted the request, the response, the usage event, the credential, the model, the price and the vendor rows carrying that prefix, in that order, and reported success once every one of those specific deletions was confirmed.

The gap was a row the cleanup pass never directly created at all: a database trigger fires automatically on every Gateway response — verification traffic included — writing a financial cost event into TrustOps's own ledger. That cost event's foreign key back to the originating request was deliberately configured to set itself to null on delete, rather than to cascade the deletion, because for GENUINE production traffic, a cost event should absolutely survive the eventual archival or deletion of its originating request record; the cost itself remains real financial history regardless. That same design choice, applied uniformly, meant the verification script's own synthetic request could be deleted cleanly while the cost event it had triggered stayed behind indefinitely, now pointing at nothing.

The fix adds exactly one additional deletion, placed deliberately FIRST in the cleanup sequence, before the request rows it depends on are removed: deleting every cost event whose gateway-request reference still points to one of the verification script's own tagged, still-identifiable request rows. Ordering matters specifically because of the null-on-delete behavior already in place — once a request row is gone, the one remaining thread connecting an orphaned cost event back to "this came from a verification run" is already severed, and there is no longer any reliable way to distinguish a verifier's own leftover synthetic row from a genuine customer transaction. Removing the cost event while that connection is still intact is the only point at which the distinction can still be made safely.

The nine cost events that had already accumulated in production before this fix were deliberately left untouched by this same commit. Centriu TrustOps's own reasoning, preserved directly in the fix's own commit message, treats deleting an already-existing row in a real client organization's financial ledger as an operational decision that belongs to whoever operates that organization's account — not a decision an auditing or verification script gets to make unilaterally, however confident it might be about which rows are synthetic. Those nine rows were instead left for review through TrustOps's own existing integration-review queue, the same path any other reconciliation finding already goes through.

What is actually built today

Centriu TrustOps's Gateway verification script deletes its own cost events FIRST, before deleting the request rows those events still reference — preserving the only reliable link that distinguishes a verifier's own synthetic data from genuine customer activity at the moment it is still available.

Every record the verification script creates carries a distinctive, greppable idempotency-key prefix, making the full set of rows any single run touched unambiguous and independently auditable.

The fix is confirmed directly against live production: a full verification pass leaves zero orphaned cost events behind, re-checked run after run rather than assumed correct from the code alone.

Nine pre-existing orphaned cost events, already present in a real client ledger before this fix shipped, were deliberately left in place rather than silently deleted by an auditing script — routed instead through TrustOps's own standing integration-review queue for a human operator to resolve.

TrustOps's own audit reconciliation feature — the one that would otherwise have kept flagging these exact rows as unexplained "cost with no origin" findings — now has one fewer source of self-inflicted false signal feeding into it.

A returned rental car that still shows a toll on the account (illustrative framing of the actual measured finding)

Before the fix, returning a rented car and closing out every charge tied to the rental directly — the deposit, the fuel, the mileage — still left one separate, automatically-triggered toll charge sitting on the account indefinitely, because the toll record's own link back to "which specific rental generated this" had already been cleared the moment the rental record itself was closed, with nothing else ever cross-checking for that specific kind of leftover charge. After the fix, the toll charge is settled BEFORE the rental record is closed out — at the one point where it can still be clearly tied back to the rental that generated it — so nothing is left standing once the return is complete.

What changes operationally

Centriu TrustOps's own live-production Gateway verification no longer leaves an orphaned financial ledger row behind after each run, closing a gap where a foreign key's own correct, intentional null-on-delete behavior had been silently outliving the synthetic record it was meant to help clean up — with the fix visible in its own effect: nine pre-existing rows flagged for operator review, zero new ones created by any run since.

When this is not the right fit

This automation covers specifically how Centriu TrustOps's own internal verification tooling cleans up after testing the live Gateway pipeline. It is a distinct concern from this pillar's separate pages on the Gateway pipeline's own runtime cost-tracking and idempotency behavior for genuine customer traffic — this page is about the TEST SCRIPT's own hygiene, not about how a real customer's cost is calculated or recorded in the first place.

Deleting what a script explicitly created vs. deleting everything a script's activity actually produced

Deleting every record a cleanup routine can explicitly name and directly created is the natural, obvious first version of any such script, and it correctly removes the overwhelming majority of what testing against a live system actually leaves behind. It systematically misses anything created as an automatic SIDE EFFECT of that activity rather than as a direct action the script itself performed — a database trigger's own write being the clearest example. Tracing a test run's full footprint by asking "what does this ACTIVITY cause, not just what does this SCRIPT directly do" is the only version of the two that reliably catches both.

Related systems

Main system: Centriu TrustOps.

What it does NOT do

  • Does not change how a genuine customer's own Gateway usage is billed, tracked, or recorded — this fix is scoped entirely to TrustOps's own internal verification script's cleanup behavior.
  • Does not retroactively delete the nine already-existing orphaned cost events found in production — those were deliberately left for a human operator to review and resolve through TrustOps's own existing integration-review queue, not removed unilaterally by an auditing fix.
  • Does not change the underlying foreign key's own null-on-delete behavior — that behavior remains correct and intentional for genuine production traffic; the fix changes only the ORDER in which the verification script's own cleanup operates around it.
  • Does not claim every possible automatically-triggered side effect across every TrustOps verification script was individually audited — this fix closes the one specific, measured gap confirmed in the Gateway verifier.
  • Does not extend this exact fix automatically to any other verification script in TrustOps or elsewhere — each script's own footprint would need its own equivalent review to confirm no similar gap exists.

Security and governance

Centriu TrustOps's own live-production verification tooling no longer leaves an orphaned financial ledger row behind after testing the real Gateway pipeline, closing a gap that had been silently feeding false-looking anomalies into the product's own separate audit reconciliation feature. Any personal or business data referenced in TrustOps's own records remains subject to Brazil's LGPD (Law No. 13,709/2018). Full detail on access control lives at /governanca and /iso.

Pricing and contracting

Available by monthly subscription, with tiered plans. Values and terms come from the official pricing table at /precos (Centriu's central source — never restated here).

Frequently asked questions

Why test against the real, live production Gateway at all, instead of a separate staging copy?

Because a staging copy would not actually confirm the real, live pipeline behaves correctly end to end — the specific value of this verification script is that it exercises the exact system real customers depend on, which is also exactly why its own cleanup discipline matters so much.

Were any real customers affected by the nine orphaned cost events?

The nine rows were synthetic, verifier-generated cost events sitting inside a real organization's ledger — not charges tied to any genuine customer activity. They were flagged for operator review specifically so a human, not an automated script, makes the call on how to resolve pre-existing production data.

Why not just have the fix delete the nine existing orphaned rows automatically?

Because deciding to delete an already-existing row in a real client's financial ledger is an operational decision, not something an auditing or verification script should make unilaterally — even when the script is highly confident about which rows are synthetic. TrustOps routes that kind of decision through its own existing human review queue instead.

Could the same kind of gap exist in other verification scripts?

This specific fix closes the one confirmed gap in the Gateway verifier. Any other script that creates test data against a live system would need its own independent review to confirm it accounts for every automatically-triggered side effect, not only the records it directly creates itself.

What does Centriu TrustOps cost?

It is sold by subscription with a published starting price — exact current values are on the central pricing page.

See how Centriu TrustOps keeps its own live verification clean

Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.

Sources

  1. Centriu TrustOps — public product page — Centriu, 2026-07-20 · link(primária)
  2. Centriu TrustOps — public factsheet (API, JSON) — Centriu, 2026-07-21 · link
  3. Law No. 13,709/2018 — Brazil’s General Data Protection Law (LGPD) — Presidência da República (Brazil), 2018-08-14 · link

Last material update on .

By · AI-assisted production, with human review

We value your privacy

We use cookies to improve your experience, analyze site usage and support our marketing. You can accept all cookies or manage your preferences. To learn more, see our Cookie Policy.