Skip to content
Centriu
Centriu Flow

Security Posture Score Computation Integrity Automation: A Feature That Had Never Once Computed Anything

Centriu Flow's own security-posture scoring function queried a table by a name that does not exist in the real database as the very FIRST thing it did — every single invocation threw an error at that first step and the function died immediately, before computing a single category score for any workspace. Measured directly: the table meant to store a computed posture score held zero rows, for every workspace, since the feature existed. A closely related defect in the same investigation: automation-driven adjustments to a contact's lead score wrote to a table that also does not exist under the name the code used, meaning no automation-triggered score adjustment had ever been recorded either. Both fixed by correcting the table and column names to match the real, live schema — and both confirmed working by a direct production probe after the fix shipped.
Died on its first query, fixed
Proven live by a real probe
Screen showing scheduled queue routing configuration
A feature that had never once computed anything.

A feature that fails on its first line looks identical, from outside, to a feature that was never built

A function that dies on its very first database call produces the same outward silence as a feature that genuinely has nothing to report yet — a security-posture score of zero categories computed looks, from a dashboard, exactly like a workspace that simply has not been scored recently. The difference between "nothing has happened yet" and "this has never once worked" is invisible from the outside precisely when the failure happens at the earliest possible point, before anything the feature does could leave a partial, diagnosable trace.

How the underlying problem shows up before you fix it

A function's very FIRST database query references a table name that does not exist under that name in the live schema, so the function throws and exits before any of its actual logic runs.

A table meant to store a computed result holds zero rows for every account, indefinitely — a state that is silent and unremarkable on its own, easily mistaken for "nobody has triggered this yet" rather than "this cannot succeed."

A separate, related write path — an automated score adjustment triggered by an automation rule rather than a person — fails the identical way, at a different table, for the identical underlying reason: a name that does not match the real schema.

An upsert operation is written to resolve conflicts on a specific combination of columns, with nothing confirming a matching unique index actually exists in the live database for that exact combination to conflict against.

A feature's failure produces no user-facing error a person would investigate, because the calling code either does not surface the failure or the feature itself has no obvious "did this run" signal on the screen a person checks.

How a function dying on its first query was traced, and what the production probe confirmed afterward

The security-posture scoring function's job is to compute a category-by-category score describing how well a workspace's own security practices measure up, then store that computed score for the dashboard to display. Its very first step — before any of that scoring logic runs — looks up the list of accounts it needs to score. That lookup queried a table by a name that does not exist in the real, live database at all; the real table holding account records lives under a different name entirely. Every single invocation of the function threw an error at that exact first line and terminated immediately, meaning none of the scoring logic beneath it had ever executed, for any workspace, since the feature existed.

Correcting the table name alone surfaced a second, smaller defect in the same code path: the final step, an upsert meant to save a scoring recommendation, specified a combination of columns to resolve conflicts against that had no matching unique index in the live database — meaning even after the table lookup was fixed, this specific write would still have failed with nothing to conflict against. A migration adding the missing index closed that gap in the same pass.

A distinct but closely related defect, found in the same broader investigation into database-write mismatches, lived in a completely different function: an automation rule capable of adjusting a contact's lead score wrote its adjustment to a table name that also does not exist under that name in the real schema — the correct table uses a different name entirely, and stores the point adjustment under a different column name than the code supplied. Every automation-triggered score adjustment failed identically and silently, for the same underlying reason as the posture-scoring defect: a name in the code that had drifted away from the name in the actual, live database.

Both fixes were confirmed, not merely asserted, by a direct production probe run after they shipped: the corrected posture-scoring function was invoked for real and measured writing an actual score — a specific overall number and its underlying category recommendations — for the first time since the feature existed.

What is actually built today

Centriu Flow's security-posture scoring function looks up accounts using the correct, real table name, so its scoring logic actually executes instead of terminating on its first query.

A missing unique index was added specifically so the scoring function's own recommendation-saving upsert has a real conflict target to resolve against, rather than failing at its final step even after the table-name fix.

Automation-driven lead-score adjustments now write to the correct table, under the correct column name for the point adjustment itself, so a rule-triggered score change is actually recorded rather than silently discarded.

A direct production probe, run after both fixes shipped, confirmed the posture-scoring function computes and saves a real overall score with real category-level recommendations.

Both fixes were found through the same schema-comparison discipline applied elsewhere in this investigation: comparing what the code actually writes and reads against a live snapshot of the real database schema, not an assumed one.

Neither fix changes the SCORING LOGIC itself — the categories evaluated and the point calculations were already correctly designed; the defect was entirely in the table and column names the code used to read input and write output.

A dashboard showing nothing, because the function never got past its first line (illustrative framing of the actual measured finding)

A workspace opens its own security-posture dashboard expecting to see a scored breakdown across categories — access control, data handling, and others the feature is designed to evaluate. Before the fix, the underlying computation function has already failed and exited at its very first database call, every time it has ever run, so there is nothing to show and no specific error pointing at why. After the fix, the identical dashboard request triggers a function that successfully looks up the account, computes a real category-by-category score, and saves both the overall number and the specific recommendations behind it — visible for the first time since the feature was built.

What changes operationally

Centriu Flow's security-posture scoring function now executes its full computation rather than terminating on its first database call, and automation-triggered lead-score adjustments are now actually recorded — closing a gap where two related scoring mechanisms had produced zero real output since they existed.

When this is not the right fit

This automation restores the ability of two scoring computations to actually execute and record their results — it does not change what categories a posture score evaluates or how lead-score point values are decided; those design choices were already correct and are unaffected by this fix.

A feature with no output vs. a feature that was never able to run

A dashboard showing no computed score is ambiguous by default — it could mean nobody has triggered the computation yet, or it could mean the computation has never once been capable of succeeding. Centriu's fix was found precisely by refusing to accept that ambiguity: tracing the function's own first line of execution directly, rather than inferring from an empty dashboard that the feature simply hadn't been used.

Related systems

Main system: Centriu Flow.

What it does NOT do

  • Does not change what categories a security-posture score evaluates or how a lead-score point adjustment is calculated — both were already correctly designed; the fix corrects the table and column names the code used to read and write.
  • Does not retroactively compute a posture score or a score adjustment for the period before this fix shipped — the fix restores computation going forward.
  • Does not guarantee every possible scoring or automation-adjustment defect in Flow has been found — this fix closes the two specific, measured table/column-name mismatches found in this investigation.
  • Does not change how a workspace's dashboard displays a posture score once one is computed — the fix is entirely in whether the underlying computation can execute and save its result.
  • Does not add new security-posture categories or new lead-scoring rules — the existing design is unchanged; the fix is that it can now actually run.
  • Does not replace a workspace's own security review — the posture score is a Flow-generated signal, not a substitute for independent assessment.

Security and governance

The posture-scoring function and the automation-adjustment write both resolve and act within the requesting account's own data scope; neither fix changes cross-account access boundaries. Any business or account data referenced 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 did the security-posture score never show anything?

The scoring function's very first database query referenced a table name that does not exist in the real schema, so the function threw an error and terminated before computing any score, for any workspace, since the feature existed.

How was the fix confirmed to actually work?

A direct production probe invoked the corrected function after the fix shipped and measured it saving a real overall score along with real category-level recommendations — the first time this had ever happened.

What was the second, related defect?

A separate function that adjusts a contact's lead score in response to an automation rule wrote to a table name that also does not exist under that name, and to a column name that does not match the real schema — every automation-triggered adjustment failed identically.

Did fixing the table name alone fully resolve the posture-scoring issue?

No — it surfaced a second gap: the function's final upsert had no matching unique index to resolve conflicts against, requiring an additional migration to add the missing index.

Were the scoring categories or point values themselves wrong?

No — the scoring design itself was correct throughout; the defect was entirely in the table and column names the code used to read input and write output.

What does Centriu Flow cost?

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

See how Centriu Flow verifies its own scoring computations actually run and save

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

Sources

  1. Centriu Flow — public product page — Centriu, 2026-07-20 · link(primária)
  2. Centriu Flow — 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