The Artificer by Loopit
Architecture Essay

The factory that never deletes — how the model versions every change without destroying anything

By Santiago Coca · 11 min read · Part 10 of 15
Industrial production line in half-light with a history of stacked layers
The factory versions every change without deleting: the past stays queryable inside the model itself.

That Friday in March — the call from the coastal branch

Let’s go back to the Friday that closed the last Pulse.

A small Objectville branch in a coastal town up north. Eighteen tables, two cooks, a manager with a carefully level voice who calls headquarters at nine in the morning. Six weeks ago she signed for a delivery of Pecorino Romano DOP — the cheese on the menu’s star pizza, the one printed on every branch’s menu with the protected designation of origin in big letters. She has just received a notice from the supplier: the lab that issues the certifications sent the wrong document at the end of January. What was labeled Pecorino Romano DOP was ordinary pasture pecorino — no designation of origin. And that batch — batch MZ-2026-PRO-014 — came through the door on February 2, passed that day’s validations, traveled down the chain and was distributed to several branches over six weeks.

How far the error has spread, nobody knows at the moment of the call.

Last week the Mediterranean chef made us refine a rule — V1 to V2, going forward. Today the coastal manager is asking for something different: not to refine — that’s for tomorrow — but to rebuild the past under the rule in force back then, knowing what we know today. Two questions the same machinery has to hold up, on two different days, for two different branches. The first one was covered by the validator robot. The second is covered by what I’m about to tell you today.

And this is where the real trouble starts.

First — which pizzas were served with that batch? This isn’t a philosophical question. It’s an operational one: how many, at which branches, during what window, to which customers. The answer has to be ready before Monday, because the industry association for designations of origin can demand documented traceability for the batch — the DOP seal isn’t marketing, it’s legal protection for a farm product, and serving non-DOP cheese under a DOP label is civil liability. If the chain can’t reconstruct what it served, the chain has a bigger problem than the cheese.

Second — was the validation rule that let the cheese through on February 2 right or wrong? The rule said something like “if the batch arrives with a DOP certificate signed by an accredited lab, and the visual seal matches the official format, it goes in as DOP.” That rule passed batch MZ-2026-PRO-014 on February 2. At the time it was a correct rule — there was no information to reject it. Today the information has changed: we know that certificate was wrong. Do we reprocess with today’s rule or with the February 2 rule? The two questions have different answers, and the right answer matters.

Third — and this is the one that sinks most chains — can we prove all of it without destroying anything already in the model? Because when an independent auditor shows up six months from now asking, “rebuild for me the menu served at the North Coast branch on March 14, against the information headquarters had on that same March 14,” the answer can’t be “today we have it as NON-DOP, so it was that day too.” That day it was DOP — the model said so and the chain acted accordingly. Today it isn’t. Both things are true, and the factory has to hold both at once.

The conversation with the coastal branch manager lasts four minutes and ends with the sentence any operations lead recognizes instantly:

— “We need to know how far, how many branches, which customers — before Monday.”

The question is: can it be done?

The answer is yes — exactly, and without destroying anything — and it lives in how the factory is built on the inside. Today I’m tackling the first two questions — the mechanics of the model that sustain that property. The two doctrines that come out of those mechanics — reproduce, don’t recalculate + the full case of the batch spread across five branches, with its Monday query — wrap up next week.

Axis 1 — The factory that never deletes: Insert-Only + Audit-Only-Never-Delete

There’s an architectural decision that the chains that survive their first serious audit make, and that the chains that don’t make it pay dearly for. The decision is this: in the factory, nothing gets deleted and nothing gets overwritten. Ever. Under no normal operating circumstance.

When a piece of information about batch MZ-2026-PRO-014 changes — because the supplier’s lab corrects a wrong certification, because a branch updates the weight of the cheese on receipt, because the supplier’s farm changes in the contract — the old row is not overwritten. A new row is inserted with the updated information and a precise timestamp. The old row stays exactly where it was, with its original timestamp, as a record of what the model said at that moment.

This has two technical names in the data field, and both come from the work of Dan Linstedt — the canonical author of Data Vault 2.0, the methodology the chain’s factory is built on (we introduced it as technical machinery the week of the central warehouse).

The first name is Insert-Only. It means exactly what it says — rows are only inserted, existing rows are never updated. The UPDATE operation is off the chain’s normal menu on the machinery side. When a branch or a supplier reports a change, the change comes in as a new insert. The immediate consequence is that the machinery doesn’t have a “current state” and a “deleted past state” — it has an ordered sequence of rows covering the whole history, where each row has its own validity window and the last one in the sequence is the one in force today.

The second name is Audit-Only-Never-Delete. It’s the operational corollary of the first: nothing is deleted. Ever. The DELETE operation is off the normal menu too. When a piece of data stops being relevant, its validity window is closed — but the row isn’t removed from the model. The record stays. When a piece of data is corrected, it isn’t replaced — the correction is inserted and the wrong version stays visible in its original window. When a customer exercises a right to be forgotten (which will come up in the regulatory block), that right is exercised by leaving a verifiable record that it was exercised, not by destroying the record that the data existed. Those are two different things.

Why is this decision so important that it almost sounds dogmatic? Because when a call like the coastal branch’s comes in on a Friday in March, the only thing standing between an operational answer before Monday and a five-week internal project is exactly this property.

If the machinery overwrites — and traditional machinery overwrites by default, because the Kimball-style dimensional model and most operational implementations allow it — then when the certificate for batch MZ-2026-PRO-014 is updated today from DOP to NON-DOP, the old row disappears. Today the model knows the batch isn’t DOP. But the model has lost the information that for six weeks it believed it was. That means when the coastal branch asks “which pizzas did we serve with that batch in that window?”, the model can’t say anything about the window — only about the present. The traceability of the spread error has evaporated with the overwrite. To rebuild it you have to go back to operational logs, backup files, monthly cold copies. That’s a project, not a query.

If the machinery is Insert-Only and Audit-Only-Never-Delete — and the factory is, by construction — then the old row for batch MZ-2026-PRO-014 is still where it was. With its VALID_FROM of February 2, its DOP certificate, and a new VALID_TO that now reads March 18 (the day the lab sent the correction). Right after it, in the same structure, another row for the same batch, with VALID_FROM of March 18, a NON-DOP certificate, and an open VALID_TO. The two rows live side by side. The model holds both truths at the same time, separated by a precise time window. And now the coastal branch’s question has an operational answer — exact, reconstructed, provable — without opening a project.

And this closes a loop we left open last week. The rule catalog of the validator robot — the living documentation — works thanks to the same property. When the Mediterranean chef forced V2 of the San Marzano Tomato DOP rule at 7:47 p.m. on March 18, V1 wasn’t deleted. It was closed with its VALID_TO. V2 came in with its VALID_FROM. Both versions of the rule live side by side in the catalog, separated by a precise time window. That’s why the question “which rule was live on March 14?” has an operational answer.

Rules are data. Data lives in the machinery’s structures. The machinery is Insert-Only by construction. The factory’s memory isn’t just the memory of the batches — it’s also the memory of the rules we validated each batch against. Same structure, same property, same machinery. That’s what makes the phrase “reproduce the past against the rule of the moment” operationally meaningful and not just rhetoric — and that’s what we land in full next week.

That’s the first layer of the factory’s memory. The second layer comes from the details of versioning.

Axis 2 — How the factory versions a change: HASH_DIFF, time windows and the order of versions

When a row of information changes in the machinery, the factory has to answer three concrete questions — no extra work, automatically, in the same insert step:

Factory logbook with two rows for the same batch chained together by time windows and HASH_DIFF
Two versions of the same batch coexist: on day X, you query the row that was in force then.

Is it really a change, or is it the same information we already had?

Which is the new version and which is the old one?

When did the previous one stop being valid, and when did the new one start?

All three questions are answered by three mechanisms that live inside every satellite — the piece of the machinery that records the changing information of each thing with an identity (see Week 7) — from the very origin of the model.

The change fingerprint (HASH_DIFF) answers the first. Every row that arrives at the machinery carries a short code: a digital fingerprint of its content. If the new row’s fingerprint matches that of the most recent row for the same batch, nothing has changed and nothing is inserted. If it doesn’t match, it’s a new version and it goes in. No field-by-field comparison. No coordination. One fingerprint comparison.

The version order (COD_VERSION in this example) answers the second. Each new version of the same batch carries its own sequence number: the first row for MZ-2026-PRO-014 is version 1; the lab’s March 18 correction opens version 2. Each batch keeps its own count, independent of the rest. The exact name of that counter depends on the team and the engine — timestamps, partitions, effectivity pointers —; here I use COD_VERSION because it’s the most readable way to walk through the example.

The time windows (VALID_FROM and VALID_TO) answer the third. Every satellite row carries two stamps: when it became valid and until when it was valid. The row in force has an open VALID_TO — by convention 31-Dec-9999, still true until someone inserts something new. When a new version comes in, the old row’s content isn’t touched — it stays exactly where it was, as a record of the past — but its VALID_TO gets closed. The end of one version marks the start of the next, keeping the timeline continuous, with no gaps and no overlaps.

Three mechanisms, one property: the fingerprint detects whether something changed, the order tells you in what sequence, the windows tell you when it was true. Together they answer the three questions the coastal manager put on the table on Friday. The following Monday, batch MZ-2026-PRO-014 looks like this in the machinery — no technical syntax, just the human reading:

  • COD_VERSION = 1 — VALID_FROM 02-Feb-2026 09:14:08 · VALID_TO 18-Mar-2026 11:42:33 · certificate DOP — Pecorino Romano · inserted by loading dock operations, North Coast branch.
  • COD_VERSION = 2 — VALID_FROM 18-Mar-2026 11:42:33 · VALID_TO 31-Dec-9999 (open) · certificate NON-DOP — pasture pecorino · inserted by automatic load from the lab.

And now Friday’s question has a frictionless answer.

What did the model believe on March 14? The row in force that day: version 1, DOP certificate. What does it believe today? Version 2, NON-DOP. Both answers are true within their window, and both come from the same model, without touching anything, without replaying logs, without rebuilding from backups. The same query — only the time filter changes.

What makes this pattern special is that versioning lives inside the model, not on top of it. There’s no external tool logging what happened when. The machinery’s structure is the log. Memory is a structural property, not a procedural one. And structural properties survive staff turnover, supplier changes, team reorganizations. Procedures get forgotten; structure doesn’t.

But native versioning is only half the story. The other half — the one that closes out the Federated Computational Governance pillar entirely — lives in how this memory gets used when you have to go back to the past. And that wraps up next Tuesday.

What’s next

That’s the structural property. What’s missing — and what closes the pillar — is the doctrine that comes out of it: what it means to reproduce the past against the rule of the moment, and how the factory proves it didn’t know what it couldn’t have known.

Next Tuesday: five branches, 371 pizzas, 70 customers with named invoices. One query. No project. And at the back of the central kitchen, Monday’s nine o’clock whiteboard with the batch list and, written underneath in chalk, a sentence that anyone in the trade — no technical background, without having read a single earlier Pulse — would understand instantly.

See you Tuesday.