Growth-Experiment Backlog Source-of-Truth Automation: The Table With Zero Rows That Wasn't a Bug

A schema can describe two different structures for the same idea, and only one of them is actually in use
A relational database table named `experiments` reads as an obvious, confident answer to "where do growth experiments live" — right up until someone queries it and finds nothing at all, on any client, ever. Whether that means the feature genuinely has no data yet or means the real data lives somewhere else, under a name that doesn't say so, is invisible from the empty result alone. Only reading the system's own internal documentation, or the code that actually writes experiment data, reveals which one it is.
How the underlying problem shows up before you fix it
A dedicated, purpose-named database table returns zero rows across the entire database, and nothing about that emptiness on its own indicates whether the feature is unused or simply stores its real data somewhere else.
A feature's actual records live inside a JSON column on a more general-purpose, differently-named table, addressed by a `module_type` or category value rather than by a table of its own.
An AI agent (or a person doing a one-off data check) queries the obviously-named table first, finds nothing, and reasonably — but incorrectly — concludes the feature has no data at all.
A write path for creating a new record needs to append to an existing JSON array atomically, rather than simply inserting a new row, raising a real risk of overwriting a concurrent write if done carelessly.
A record type that should never disappear (an experiment, a decision, a hypothesis) has no delete operation exposed anywhere, with a status value doing the job a deletion would normally do.
Why the real backlog ended up inside a JSON array instead of its own table
Centriu Vesper's growth-strategy work is organized around a client's active strategy project, itself built from a fixed set of modules — an ICP, a value proposition, a growth plan, and, among them, an experiments module. Each module's own content is stored as a single JSON document tied to that project, a design that lets every module type share one storage mechanism regardless of its own internal shape. A dedicated `experiments` table also exists in the schema — but the actual write path used by the product's own interface targets the JSON module instead, leaving the dedicated table permanently empty. The table isn't wrong to exist; it simply isn't where this particular kind of data was ultimately routed to live.
How the new agent tools were built to find the real data, not the empty decoy
The migration's own header comment states the fact plainly, as something the tool-building work needed to respect rather than rediscover by trial and error: the `experiments` table is a facade — zero rows in the entire database — and the real backlog lives in the JSON module. Every read and write tool built for this system targets that JSON array directly: listing experiments reads the array and can filter by status; creating one appends a new entry to the array in a single atomic database update, keyed by a freshly generated identifier, rather than risking a read-modify-write race with a concurrent call; updating one finds the matching entry by that identifier inside the array and merges in only the fields that changed, leaving everything else untouched.
Three guardrails travel with every write. First, a hypothesis has to actually be written out, and has to reach a minimum length (fifteen characters) — nowhere near a guarantee of quality on its own, but enough to reject an empty or single-word placeholder standing in for real strategic thinking. Second, an effort estimate is normalized: whether entered as "baixo," "médio," "alto," or their English equivalents, it is mapped down to exactly one of three canonical values, and anything that doesn't match is rejected outright rather than stored as free text that a later query would have to guess at. Third, an experiment's status is confined to four fixed values, and there is no operation anywhere in the tool suite that deletes an experiment — reaching the end of its useful life is represented by marking it `discarded`, with the reasoning behind that call captured in the same update, so a discarded idea remains part of the project's own history rather than disappearing as though it never existed.
What is actually built today
A read tool that lists a client's growth-experiment backlog directly from the JSON module that actually holds it, optionally filtered by status, never touching the empty dedicated table.
A creation tool that appends a new experiment to that same array in one atomic update, requiring a written hypothesis of at least fifteen characters and an effort estimate normalized to exactly one of three fixed values.
An update tool that finds an experiment by its own identifier inside the array and merges in only the changed fields — status, results, or both — without disturbing the rest of the entry.
No delete operation anywhere in the suite — an experiment that didn't pan out is marked `discarded` with its reasoning recorded, never removed from the record.
A separate panorama tool surfacing, per client project, how many modules are filled in, how many insights are pending, and how many execution tasks are open — a single-glance view before acting on any one of them.
Every create and update call writes its own audit-log entry naming the acting agent, confirmed today via direct inspection to remain part of the current source.
Looking in the wrong table first (illustrative scenario, not a real client)
Someone investigating why a client's growth experiments seem to be missing runs a direct query against the `experiments` table and gets back nothing — for that client, and for every other client in the database. Read in isolation, that looks like conclusive proof the feature has never been used. The actual backlog, dozens of hypotheses deep for an active project, sits one table over, inside a JSON array the query never touched.
What changes operationally
An AI agent can now read and manage a client's real growth-experiment backlog through a dedicated tool suite that targets where the data genuinely lives, enforcing the same hypothesis, effort-scale, and no-deletion rules the product's own interface already depends on — closing the gap between what a schema-first search would assume and what the system actually does.
When this is not the right fit
This tool suite manages the experiments module specifically — it does not fill in or rewrite the other strategic frameworks in a client's project (positioning, branding, personas, and the rest), which remain governed by their own separate, already-existing tools and interfaces, unchanged by this work.
Trusting a table's name vs. confirming where the write path actually points
A table named exactly after the feature it seems to represent is a reasonable place to look first — and an entirely unreliable place to stop, if the product's own write path was built to target something else. Centriu's agent tools were built by tracing that real write path directly, rather than assuming a conveniently-named table was the authoritative answer.
Related systems
Main system: Centriu Vesper. Complementary when relevant: Centriu Axis.
What it does NOT do
- Does not read from or write to the dedicated `experiments` table — it remains an empty, unused structure in the schema; all real reads and writes target the JSON module.
- Does not provide any way to permanently delete an experiment — the only terminal state is `discarded`, always paired with a recorded reason.
- Does not accept a free-text effort value — anything that doesn't map to one of three fixed canonical values is rejected before it is ever stored.
- Does not let an update on one experiment disturb any other entry in the same project's array — the merge is scoped to the single matching identifier.
- Does not fill in or modify a client's other strategy modules (positioning, branding, personas, and the rest) — this tool suite is scoped specifically to the experiments module.
- Does not claim the `experiments` table should be removed from the schema — this page describes the current, confirmed state of where the real data lives, not a recommendation to change the database structure.
Security and governance
Every tool in this suite resolves the requesting agent's own organization before it can read or write anything, and every write is attributed to that agent by name in a permanent audit-log entry. Any client or business 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 does the `experiments` table have zero rows if the feature is actually used?
The real backlog of growth experiments is stored as a JSON array inside a different table (`module_artifacts`, under the module type `experiments`), not inside the dedicated `experiments` table — a documented architectural fact, not a defect.
Can an experiment be created without a hypothesis?
No — the creation tool requires a written hypothesis of at least fifteen characters and rejects anything shorter or blank.
Can an experiment be deleted?
No — there is no delete operation in the tool suite. An experiment that doesn't pan out is marked `discarded`, with the reasoning kept as part of its permanent record.
What happens if the effort level is entered in Portuguese?
It is normalized to one of three fixed canonical values regardless of the input language; any value that doesn't map to one of the three is rejected outright.
Does this tool suite change how a client's other strategy frameworks work?
No — it is scoped specifically to the experiments module; every other framework (positioning, branding, personas, and the rest) is managed by its own separate, unchanged tools.
What does Centriu Vesper cost?
It is sold with tiered levels (Starter/Pro/Max) — exact current values are on the central pricing page.
See how Centriu Vesper tracks a real growth-experiment backlog
Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.