Cost scales with the table
Changing a hundred rows rewrites the million around them. Every edit gets slower as the dataset grows.
Every data load, correction and approval writes a new immutable file and one entry in an append-only transaction log — nothing is modified in place. Each table version is computed from the log, any earlier version can be rebuilt, and every row traces back to its source. Lakehouse reliability, with a complete audit trail.
Each change commits completely or not at all. Readers never see partial data.
Updates write new files. Existing files are never overwritten or edited.
Rebuild a table exactly as it stood at any version, within the retention period.
Author, reason, lineage and checksum recorded on every change — rejected writes included.
Enterprise data arrives in batches from many systems and teams, is checked and corrected over days, then approved and often sent to an outside party — a regulator, a clearing house, a counterparty. Most storage keeps one copy per table and overwrites it on every change. That fails in four ways.
Changing a hundred rows rewrites the million around them. Every edit gets slower as the dataset grows.
A rewrite that fails halfway leaves a half-written file where the good one used to be.
Two people saving the same table means the last writer silently wins and the other's work disappears.
No trace of who changed what, why, from which file — or what the outside party actually accepted.
The same principles as modern lakehouse formats, with the audit trail made mandatory rather than optional.
One log entry is the commit. New data is invisible until it commits, then fully present.
Schema and file validity are enforced before commit; each data file is added once and removed at most once.
Every reader sees a consistent snapshot. Concurrent edits to the same file are serialised by a lock.
Transactional commits on durable object storage, with a per-file checksum to verify the bytes later.
Files are written once. A change creates a new file; nothing is overwritten.
Every change is a new log entry, in strict order. History is never edited.
Bad data is rejected before it is written, not cleaned up afterwards.
Anything unexpected — an unknown record, a checksum that no longer matches — stops the process. Nothing is guessed.
Readers always see a complete, consistent version — never a half-written one.
Edits to the same data are queued behind a lock. No lost updates, no silent merges.
Only the affected file is rewritten as a new copy. The original stays intact.
Rebuild the data exactly as it stood at any earlier version.
Every file records who, when, why and what it came from — refused attempts too.
Each file’s checksum is recorded at commit, so any change to the bytes is detectable.
Sensitive columns are encrypted before storage and decrypted only for roles allowed to see them.
Each layer’s finalized data is kept as a golden record, separate from work in progress — the trusted input to the next step.
Key management, access control and the audit log of user activity are covered on Security Assurance.
Two layers, as in Delta Lake and Apache Iceberg: data files in object storage, and a transaction log that defines every version of a table.
Every lakehouse log records which files make up a table. Here, the audit metadata is mandatory on every entry — this log is what the rest of the page calls the ledger.
Bronze, Silver and Gold work as in any medallion architecture: raw data, transformed tables, business-ready outputs. Wekalp adds one lifecycle to every layer, on the same transaction log: data is worked on, approved internally and finalized into a golden record before it feeds the next layer. That lets business users correct and own data at every layer, with a complete audit trail.
The ledger replay below walks through the Bronze-layer operations step by step; Silver and Gold tables use exactly the same ones.
Reloads, corrections and removals in Silver and Gold too, each a new version, with no rebuild from raw data.
Internal sign-off and a golden record per layer. The standard pattern has no approval step.
Reason, author and lineage on every change, and external rejections reopen the right layer.
The people who know the data correct and approve it, not only engineers through pipelines.
Standard medallion as described by Databricks, where a wrong value in Silver or Gold is fixed by rebuilding from raw data and rerunning the pipeline.
Superseded files are kept for time travel and audit. Reads only touch current files, so performance does not degrade.
A scheduled job removes files older than your retention period. Every deletion is itself logged.
Files left by a failed write are never visible as data and are removed automatically.
This is the storage beneath Wekalp Regulatory Reporting, where the external party is a supervisor accepting or rejecting records one by one, as in COCREE 2.0 reporting.
One quarter of loan data. Three systems send batches, a duplicate is removed, quality checks flag records, and the fixes are applied. Step through ten moments and watch what the ledger records and what the data looks like after each one. These are Bronze-layer operations; Silver and Gold tables use the same ones.
Analyst 1’s fixes make f12; Analyst 2 then retries on f12 and makes f13. Where both changed a record, the later value stands and the earlier one stays readable.
| # | Event | File | Why | Derived from | By | Rows |
|---|---|---|---|---|---|---|
| 1 | Add | f1 | Ingest | — | System 1 · Core banking | 100,000 |
| 2 | Add | f2 | Ingest | — | System 1 · Core banking | 100,000 |
| 3 | Add | f3 | Ingest | — | System 1 · Core banking | 100,000 |
| 4 | Add | f4 | Ingest | — | System 3 · Branch files | 80,000 |
| 5 | Add | f5 | Ingest | — | System 2 · Loan origination | 120,000 |
| 6 | Remove | f4 | Dropped | — | Data steward | 80,000 |
| 7 | Evidence | f6 | Correction | — | Data steward | 1,500 |
| 8 | Remove | f1 | Correction | — | Data steward | 100,000 |
| 9 | Add | f7 | Correction | f1 + f6 | Data steward | 100,000 |
| 10 | Remove | f3 | Correction | — | Data steward | 100,000 |
| 11 | Add | f8 | Correction | f3 + f6 | Data steward | 100,000 |
| 12 | Evidence | f9 | Correction | — | Analyst 1 | 2,000 |
| 13 | Remove | f9 | Correction rejected | — | Analyst 1 | 2,000 |
| 14 | Evidence | f10 | Correction | — | Analyst 1 | 400 |
| 15 | Evidence | f11 | Correction | — | Analyst 2 | 250 |
| 16 | Remove | f7 | Correction | — | Analyst 1 | 100,000 |
| 17 | Add | f12 | Correction | f7 + f10 | Analyst 1 | 100,000 |
| 18 | Remove | f12 | Correction | — | Analyst 2 | 100,000 |
| 19 | Add | f13 | Correction | f12 + f11 | Analyst 2 | 100,000 |
AI is only as reliable as the data it reads. The same controls that satisfy an auditor give models and agents versioned, traceable and governed data.
Train and evaluate models on an exact data version, rebuilt at any time — not today’s data.
Every AI answer can cite the exact file versions and checksums it was built from.
AI agents write through the same validated, logged path as any other source — nothing in place.
Point agents at the golden record for facts; working data stays separate until it is approved.
Models only use data whose quality checks are current; any change marks old results stale.
Extracts, APIs, database connectors, files and agent output all land through one validated path.
Why this matters beyond the platform: why your next AI failure will be a storage failure, and the four questions every AI answer has to survive.
Delta Lake, Apache Iceberg and Apache Hudi are excellent general-purpose table formats, and Wekalp shares their core guarantees. The difference is audit depth — and, by design, a narrower focus.
| Capability | Wekalp | Delta Lake |
Apache Iceberg |
Apache Hudi |
|---|---|---|---|---|
| Core table guarantees | ||||
| ACID transactions | ✓ | ✓ | ✓ | ✓ |
| Immutable data files | ✓ | ✓ | ✓ | ✓ |
| Schema enforcement on write | ✓ | ✓ | ✓ | ✓ |
| Time travel | ✓ | ✓ | ✓ | ✓ |
| Row-level updates and deletes | ✓ | ✓ | ✓ | ✓ |
| Merge-on-read updates | ✕1 | ✓ | ✓ | ✓ |
| Concurrent writers | ✓ | ✓ | ✓ | ✓ |
| Audit and lineage | ||||
| Commit history (operation, time) | ✓ | ✓ | ✓ | ✓ |
| Author recorded on every change | ✓ | 2 | 3 | 3 |
| Reason recorded on every change | ✓ | 3 | 3 | 3 |
| File-level lineage | ✓ | 4 | 4 | 5 |
| Rejected writes recorded | ✓ | ✕ | ✕ | ✕ |
| Input files retained as evidence | ✓ | ✕ | ✕ | ✕ |
| Per-file content checksum | ✓ | ✕6 | ✕ | ✕ |
| Data lifecycle | ||||
| Approve and freeze a version | ✓ | ✕ | 7 | 8 |
| Golden record per layer (finalized, versioned) | ✓ | ✕ | ✕ | ✕ |
| Audited corrections on transformed tables | ✓ | 3 | 3 | 3 |
| Retention and file cleanup | ✓ | ✓ | ✓ | ✓ |
For architects and auditors. The model rests on transactional commits, immutable object storage, open columnar files and a business key per table. If your review needs more, send it over.
Based on the open-source specifications and documentation of each format as of October 2026; managed platforms built on them may add features.
It is built on the same core idea — immutable data files plus a log of commits — but implemented natively on the application's own transactional database and object storage, rather than by running the open-source Delta Lake package. The log is an append-only table, not a directory of JSON files, and it records more than a lakehouse log does: why each event happened, which files it derived from, the input files themselves, and a golden record of finalized data at every layer.
Because the database already provides transactions and row locks. Creating a table version and committing its first file is one transaction, and the lock that serialises two edits to the same file is an ordinary row lock. Nothing extra has to run to coordinate writers: no catalog service, no lock provider and no Spark runtime.
No. Data files are never modified or deleted in place. Every ingestion, removal and correction writes a new file and appends a new log entry; the previous file stays in storage. Files are only deleted by a scheduled vacuum job after your retention period, and each deletion is itself logged.
The commit to the transaction log is always the last step, after the file is fully written and its checksum recorded. A crash before that step leaves an orphan file that no query will ever see, never partial data. Writes in progress are tracked, so orphan files are found by lookup and cleaned up automatically.
Each data file has a lock. The first edit takes it; the second is told the file is in use and retries. After the first commits, the second re-checks that its file is still current and applies its change to the new version. On a shared record the later correction wins, and the earlier value stays readable in history. Nothing is merged silently.
No. Data can be ingested from a scheduled system extract, an API feed, a database connector, a file drop, or the output of an automated job or AI agent. Each batch passes the same checks, is written once, and gets the same log entry, attribution and lineage.
AI needs data it can be held to. Every answer can be traced to the exact data files and checksums it used; any training or evaluation dataset can be rebuilt as it stood at a given version; AI agents write through the same validated, logged path as any other source; and finalized data sits in a golden record, separate from work in progress.
Superseded files are kept until your retention period expires, then removed by a scheduled vacuum job. Queries only read current files, so history costs storage, not speed. Within the retention period, any earlier version can be rebuilt.
Bring the hardest question your auditors, regulators or risk team ask about your data. We will show you how the platform answers it.