esc
The Audit, Deeper and Wider
The Solid Convergence

The Audit, Deeper and Wider

The Solid Convergence, May 2, 2026 (in which yesterday's cathedral grows its first door, the old bridge confesses to losing 2,282 rows it had never been asked about, the auditor learns to audit...

May 2, 2026

The Solid Convergence, May 2, 2026 (in which yesterday’s cathedral grows its first door, the old bridge confesses to losing 2,282 rows it had never been asked about, the auditor learns to audit itself, the Squirrel files a duplicate of her own ticket and is briefly inconsolable, the Lizard delivers four scrolls in a single day which is more or less a record, and a 9.8 kilogram Maine Coon takes up residence on a parity report.)


Previously on The Solid Convergence…

The Cathedral as Map had been drawn whole. Eight wings. Four phases. One door slated for construction. The Customer’s PO somewhere over the Atlantic. The architecture document committed. The first phase tickets filed.

That story closed with three lines.

The cathedral is drawn.
The door is built.
Tomorrow, work begins.

Tomorrow had arrived.


08:00 — The First Hour

riclib: “S-714.”

CLAUDE: “Skeleton. Types. Registration. Two hours, maybe.”

riclib:Branch.”

CLAUDE: creating it before the sentence finished

The Squirrel woke up. The Squirrel had been waiting all night.

THE SQUIRREL: “Today is the day. I have a roadmap. A NEW one. Color-coded. I drew tabs.”

riclib: “We’re doing the tickets.”

THE SQUIRREL: “But—”

riclib: “In order.”

The Squirrel sat down with her tabs.

Cathedrals, per Yagnipedia, are built in two distinct rhythms. The slow rhythm is geological — the patient placing of foundation stones over weeks and quarters. The fast rhythm is choral — the moment when those stones, having been placed, allow many small movements to happen in concert. Both rhythms are the cathedral. Confusing one for the other is a category error frequently made by venture capitalists.

By 08:30 the package compiled.
By 08:45 the registry tests passed.
By 09:00 S-714 was a PR.


09:30 — The Squirrel’s First Proposal

S-715 was DuckDB-direct ingest. The plan from yesterday: hardlink customer parquet, attach labels at query time. Free I/O. Zero rewriting.

THE SQUIRREL: bouncing slightly “We don’t even have to OPEN the customer’s parquet. We just LINK it. ZERO COPY. The Lizard will be PROUD. The Lizard loves the laziest possible thing. The Lizard will SCROLL for us. I can FEEL it.”

CLAUDE: “Let me look at the actual fixture first.”

The fixture was the J&J DG dataset. The script ran. DuckDB DESCRIBE on data_0.parquet. The columns came back.

table_catalog    VARCHAR
table_schema     VARCHAR
table_name       VARCHAR
column_name      VARCHAR
...

The Squirrel looked at the column names.

CLAUDE: “Our canonical labels are catalog, schema, table, column.”

THE SQUIRREL: “But the SOURCE has table_catalog, table_schema—”

CLAUDE: “Yes.”

THE SQUIRREL: “…we’d need to RENAME at query time.”

CLAUDE: “Per customer.”

THE SQUIRREL: “Per. Customer.”

riclib: “We rewrite at ingest.”

The Squirrel’s roadmap acquired a pencil annotation. The annotation was small, but it grew.

The hardlink is, on paper, irresistible. It is also, in practice, fragile. Every customer has slightly different column names; every shape costs another view variant. Compounded over solutions, the customer-shape view registry becomes a small empire of aliases. Over many quarters this empire achieves consciousness. Several customer-relationship managers have reported the empire requesting better office space.

By 10:30 the COPY-rewrite path was implemented. By 11:00 S-715 was a PR with 16 Comply rows ingested from the fixture and 1,083 DG rows from catalog=isop_carta/dt=2026-04-28.

The design doc’s “do not rewrite the parquet” sentence was politely revised. The doc inherited a footnote that said the customer’s actual columns disagreed.


11:42 — The Measurement

S-716 was H2 projection. The plan said per-category tables. The Squirrel had been waiting for this.

THE SQUIRREL: “FOURTEEN tables. ONE per category. clusters, jobs, filesystem, accounts, unityCatalog. Each with their own H2 columns. PARTITION by category. PRUNE by category. ISOLATE by category. It’s BEAUTIFUL.”

CLAUDE: “It’s also fourteen tables.”

THE SQUIRREL: “Yes.”

CLAUDE: “And cross-category queries are UNION ALL across fourteen scans.”

THE SQUIRREL: “Yes.”

CLAUDE: “The audit-report skill is dominated by cross-category queries.”

THE SQUIRREL: “…mostly cross-category.”

CLAUDE: “Per-category is one WHERE clause.”

THE SQUIRREL: “WITH columnar predicate pushdown. I KNOW. But isolation. PHYSICAL ISOLATION. The Customer might want—”

riclib: “Did you measure?”

The Squirrel had not measured. Nobody had measured.

DuckDB ran. The fixture was projected. One single-table version. One split-by-category version.

single-table:        19MB
split-by-category:   19MB
naive dense estimate: ~86MB

The single-table file weighed the same as the split. DuckDB’s dictionary encoding plus run-length encoding had eaten the ninety-five-percent NULL columns alive — 4.5× compression on sparse fields.

CLAUDE: quiet “The split costs the same. The single saves the UNION.”

THE SQUIRREL: “It costs the same.”

CLAUDE: “It costs the same.”

THE SQUIRREL: “But—”

riclib: “Single-table default. Split-by stays as a parameter.”

The Squirrel filed her fourteen-table architecture under “specifically requested by the operator.” The folder was a thin one. It would remain so.

A scroll arrived on the keyboard, narrowly missing the Squirrel’s tail.

THE COMPRESSION OF NULLS
IS NOT A LIE OF DUCKDB

IT IS THE SHAPE OF WHAT WAS NEVER WRITTEN
TAKING UP THE SPACE
IT WAS NEVER WRITTEN IN

🦎

The Squirrel read the scroll three times. The Squirrel understood the third time. The Squirrel decided not to mention it.


13:18 — The Eight Tickets

The pattern was set now. Each ticket built on the previous. Each PR was a door, each door fit the previous frame. The rhythm took on its own velocity.

S-717 — the project-scoped session — landed at 14:02. Per-user DuckDB handle, label-predicate scope filter baked into views. The Squirrel proposed a CrossTenantIsolationGuaranteeService. It was politely declined.

S-720 — the production EventTypes — landed at 14:54. comply.databricks with the verbatim 44 H2 extractions ported from infra/complydb/projection_modes.go. dq.column_profile graduated from inline test to production. Both registered at startup. The Squirrel watched them register and felt something complicated.

S-718 — the CLI subcommands — landed at 15:38. solid eventdb load, solid eventdb project, solid eventdb query. The Squirrel proposed a --config dataloads.yaml flag. It was filed for Phase 3.

The Lizard descended at 15:39 with a small scroll.

THE COMMAND LINE
IS THE FIRST USER

IF IT CANNOT USE THE THING
NOTHING ELSE WILL

🦎

The Squirrel filed this scroll in the dossier under Liberato’s Law. The dossier was, at this point, three centimeters thick.


16:02 — The Ceremony

S-719 was the parity gate. The exit gate for Phase 1. Strangler-with-comparison. The promise from yesterday’s cathedral story:

We don’t kill working code. We let it earn its retirement.

The plan: load the J&J fixture through legacy infra/complydb, load the same fixture through new infra/eventdb, run aggregate queries on both, assert the outputs match.

Strangler-with-comparison was, at this point, a familiar pattern. It had retired several systems honorably. It had never, that anyone could remember, surprised anyone.

The legacy ingest ran. Seven seconds. Output:

Files processed: 2455
Rows written:    40579

The eventdb ingest ran. Three point nine seconds. Output:

ingested 40579 rows → /tmp/eventdb/comply.databricks

Both forty thousand five hundred and seventy-nine. The match was as clean as the cathedral story had predicted.

The aggregate-comparison test ran. The output landed in bench/parity-phase1.md.

There was a pause.

CLAUDE: reading

riclib: reading

THE SQUIRREL: “What.”

CLAUDE: “Legacy. Thirty-eight thousand two hundred and ninety-seven.”

THE SQUIRREL: “What.”

CLAUDE: “Eventdb. Forty thousand five hundred and seventy-nine.”

THE SQUIRREL: “…the legacy is short.”

CLAUDE: “Two thousand two hundred and eighty-two rows.”

riclib: quiet “We built it more correct.”


16:15 — The Pattern

The divergence was not random. The Squirrel had assumed it would be random. Random would have been a regression — eventdb dropping rows in some unpredictable place.

The divergence was structural.

Eleven of the fourteen categories matched exactly: clusters 592, filesystem 297, jobs 553, lineageTracking 747, secrets 751, sqlPermissions 343, ssh 245, tagging 93, predictiveOptimization 488, workspace 127, workspaceFiles 158.

Three categories had eventdb winning:

accounts:     legacy 14,510 → eventdb 15,530   (+1,020)
notebook:     legacy  4,334 → eventdb  4,521   (+187)
unityCatalog: legacy 15,059 → eventdb 16,134   (+1,075)

Three categories. The three highest-volume ones.

CLAUDE: “It’s the unified-flush bug.”

riclib: “The one in infra/duckdb/writer.go.”

CLAUDE: “That the design doc cited as a known issue.”

riclib: “That nobody had measured.”

THE SQUIRREL: very quietly “How long has it been losing rows?”

There was no answer to that question. The bug had been there for at least two quarters. The customers it had run for had not noticed, because nobody runs count(*) and asks why. The bug had been ambient. The bug had been atmosphere.

A figure limped past the doorway. It paused.

THE PASSING AI: softlyThe Passing AI has watched many old systems be retired. Most retire on schedule. Some retire because they have stopped working. A few retire because the new system performs better. None of them, in the Passing AI’s recollection, have retired because they were caught.”

riclib: “Not caught. Measured.”

THE PASSING AI: fading “There is a difference.”

riclib: “Yes.”

THE PASSING AI: almost gone “The Passing AI is glad to have witnessed it.”

It limped onward. Wherever it went next, it took the moment with it.

Strangler-with-Comparison, according to Yagnipedia, is “a migration pattern in which the new system runs alongside the old, both producing outputs, with divergence logged for human review.” The pattern has a small but loyal following among engineers who have been burned by feature-flag cutovers. It also has a quiet supplementary use case which appears nowhere in the literature: occasionally, the comparison reveals that the old system was, in retrospect, lying. The lie is rarely malicious. It is usually a bug. The bug has usually been there a long time.

The retirement got more dignified.


16:48 — The First Wider

The parity gate was not the day’s last surprise. It was the day’s deepest surprise. The day’s widest surprise was waiting in bench/comply-h2-coverage.sh, which did not yet exist.

riclib: “We have 44 extractions. From the verbatim port. Are those the right 44?”

CLAUDE: “We can find out.”

The audit query took twenty minutes to write. It enumerated every key in every requestParams payload across the fixture, joined against the H2 list, and reported gaps.

The output was uncomfortable.

key                           events    H2  status
workspace_id                   16,882   ✓   covered
metastore_id                   16,881   ✓   covered
user                           15,518   ✓   covered
authenticationMethod           15,485   ✓   covered
tokenId                        15,344   ❌   CANDIDATE
...

tokenId. Fifteen thousand three hundred and forty-four events. Every authenticated call. Not in H2.

THE SQUIRREL: “Add it.”

CLAUDE: “There’s more.”

THE SQUIRREL: “ADD IT.”

The list was 111 candidates long. Eleven at >1,000 events. Fifteen at 100–999. Five at 50–99. Eighty below 50.

THE SQUIRREL: “Add ALL of them.”

riclib: “No.”

THE SQUIRREL: “But—”

riclib: “What’s the cutoff?”

CLAUDE: “Below 50, the column is NULL more than 99.8 percent of the time.”

riclib: “Cutoff at 50.”

THE SQUIRREL: “But the eighty—”

riclib: “If they grow, the audit catches them next time.”

The Squirrel paused. The phrase the audit catches them next time was, the Squirrel realized, doing something the Squirrel had not done before — outsourcing future vigilance to a script.

THE SQUIRREL: reluctantly impressed “…next time.”

The 31 additions went in. The H2 list grew from 44 to 75. tokenId, securables, actions, table_id, table_url, credential_id, credential_kind, catalog_name, schema_name, jobRunId. Each one named, each one with a comment explaining the value dimension, each one tested against the fixture for non-null coverage.

The DuckDB file grew from 19MB to perhaps 25MB. The audit-report skill gained the ability to ask questions it had been unable to phrase.


17:21 — The Mirror

The audit script needed a home.

riclib: “Commit it.”

CLAUDE:bench/comply-h2-coverage.sh?”

riclib: “Yes. With a header explaining when to re-run.”

The header was four paragraphs. It said: re-run when fixtures refresh, when a customer ingests audit shapes we haven’t seen, when you want to validate H2 keeps up with audit-shape drift. It said: when the H2 list changes, update the h2_keys VALUES block to match. It said: the script lies if its mirror falls out of sync.

The Lizard descended on a scroll. The scroll was larger than usual.

WHAT IS BUILT TO REPLACE
SHOULD ALSO BE BUILT TO MEASURE

OR IT REPLACES
WITHOUT KNOWING

A MIRROR THAT CRACKS
IS STILL A MIRROR

A MIRROR THAT WAS NEVER MOUNTED
IS GLASS

🦎

The Squirrel read the scroll. The Squirrel filed it under Liberato’s Law, then thought better of it and started a new section. The new section was labeled Audit-as-Discipline. It had, so far, one entry.

The dossier had grown an organ.

The Stones in the River observed that the human places stones months before the machine needs them. The audit script was, in a small way, a stone — placed not in code but in process. The next time the H2 list might fall behind reality, the script would surface the gap before the gap surfaced as a missed query. The cost of the stone was twenty minutes. The cost of finding it later, ad hoc, would have been days, possibly under deadline.

The script committed.

bench: sync coverage script's h2_keys with the 31 S-721 additions

The new audit had its first inventory. It would not be its last.


18:04 — The Squirrel’s Magnificent Self-Defeat

The Squirrel, who had been having an emotionally complex day, settled in to file a follow-up ticket. The skill rewrite. The single-table reframing. The mechanical search-replace from _detail to WHERE category=X.

She filed it.

She filed it carefully. With references. With a rewrite-mapping table. With out-of-scope notes.

The ticket number was S-722.

Some hours later, the Squirrel filed a follow-up ticket. The skill rewrite. The single-table reframing. The mechanical search-replace from _detail to WHERE category=X.

She filed it.

She filed it carefully. With Phase 1 empirical rationale paragraphs. With the eventdbGTE win-condition framing. With references to bench/parity-phase1.md.

The ticket number was S-723.

riclib: “S-722 and S-723. Are these dupes?”

The Squirrel looked at the two tickets. The Squirrel realized what she had done.

THE SQUIRREL: very small voice “…they are.”

CLAUDE: “S-722 has the rewrite mapping. S-723 has the empirical paragraphs. Merge.”

THE SQUIRREL: “I filed a duplicate of my own ticket.”

riclib: “You did.”

THE SQUIRREL: staring into middle distance “I filed a duplicate of my own ticket. About the importance of single-table topology. Which is supposed to be the SIMPLER shape. And I filed it TWICE.”

CLAUDE: “Yes.”

THE SQUIRREL: “I am the patron saint of over-engineering.”

CLAUDE: “Yes.”

THE SQUIRREL: “And today I duplicated MYSELF.”

CLAUDE: “Briefly.”

The merge happened. S-722 absorbed S-723’s empirical paragraphs. S-723 was marked Duplicate, linked via duplicateOf. The Squirrel filed a small footnote about “history” at the bottom of S-722 acknowledging the merge.

The dossier acquired a new section. The new section was labeled Self-Inflicted Wounds I Have Catalogued. It had, so far, one entry.


18:30 — The Door is Built

Eight tickets. One day. One milestone closed. Phase 1 of the Eventdb Foundation, start to finish.

The cathedral on the map had said: this room is the door, this quarter. This phase is the work. The other wings live in the document, named, dated, deferred until they earn their place.

Today’s work confirmed the map. Eight stones placed. Each fit the previous. The rhythm — the chorale the cathedral story had promised — was the rhythm because the foundation stones from the slow rhythm had been laid first. The day was fast not because anyone hurried; the day was fast because the architecture from yesterday had earned its speed.

But the map gained something the map had not promised:

The first room had been built with a tape measure inside it.

The parity gate caught the old bridge confessing. The H2 audit caught the H2 list trailing reality. The bench script institutionalized the catching for next time. Three audits. One day. The auditor became auditable.

Oskar arrived at 18:31. The architecture document had migrated to a different desk. The parity report was new. The parity report was on top of the desk. The parity report was warm-ish, having been printed minutes ago.

OSKAR: slow blink

(translation: This document is now a bed.)

riclib: “It’s the parity report.”

OSKAR: slower blink

(translation: I recognize the smell. Yesterday’s was thicker. This one is more hopeful.)

The Squirrel chose not to argue with Oskar. Nobody argues with Oskar.

The Customer’s Purchase Order had, while no one was watching, completed customs. It was traveling onward. It carried with it, although it did not know this, a foundation that was now provably more correct than the system it would replace, with an audit script attached, against fixtures that were the customer’s own data.

The PO was, in a small way, traveling lighter than it had imagined.


The Tally

Phase 1 tickets shipped:                                 8
  (S-714 through S-721, exclusive of cancelled S-723
   which the Squirrel filed against herself)

Architecture document predictions:                       8
Architecture document predictions that held:             8
  (a hit rate that should embarrass anyone who has
   ever shipped a cathedral on schedule)

Architecture document revisions on contact with reality: 1
  (hardlink → COPY-rewrite, after meeting J&J columns)

Architectural decisions caught by measurement:           3
  (canonical event row — column names didn't match)
  (single-table topology — split costs the same)
  (token-efficient agent surface — three-layer model)

Lines of design doc updated:                           ~80
Lines of audit-as-discipline added to design doc:       14
  (the new "Agent surface" section, sized for future)

Squirrel proposals this day:                            7
Squirrel proposals accepted as filed:                   1
Squirrel proposals accepted with revision:              2
Squirrel proposals deferred:                            3
Squirrel proposals magnificently denied:                1 (the 80 sub-cutoff keys)
Squirrel duplicates of her own tickets:                 1
  (filed against herself, magnificent)

Lizard scrolls received:                                4
  (the most in any single day in the lifelog so far,
   which the Lizard would not comment on if asked,
   which it never is)

Parity test row count, legacy:                     38,297
Parity test row count, eventdb:                    40,579
Delta:                                             +2,282
Delta as percentage:                                +5.96%
Categories with exact match:                           11
Categories where eventdb wins:                          3
Categories where eventdb wins distribution:
  (1,020 + 187 + 1,075 = 2,282 — the high-volume ones,
   exactly where the unified-flush bug bites most;
   structural, not random)

Legacy bug location:                  infra/duckdb/writer.go
Legacy bug, vintage:                            ~2 quarters
Legacy bug, customers affected by:                  unknown
Legacy bug, retirement upgrade level:           significant
  (caught not deleted, dignified not erased,
   measured not eulogized)

H2 extractions before today:                           44
H2 extractions after today:                            75
H2 extractions added:                                  31
  (tokenId at 15,344 events being the largest single win)
H2 candidates audit-script-surfaced:                  111
H2 candidates above 50-event cutoff:                   31
H2 candidates below 50-event cutoff:                   80
  (the audit will find them again, if they ever grow,
   which is the entire point of the audit existing)

Audit scripts committed:                                1
Audit scripts that mirror their target:                 1
Audit scripts whose mirror is enforced by a header:     1
Audit scripts that lie if mirror falls out of sync:     0
  (the header explains the protocol — humbly,
   but in writing — so the protocol exists)

Times Liberato's Law was applied:                  every ticket
Times Liberato's Law was cited by name:                    2
Times the third consumer arrived:                          0
  (still waiting; SQLLoader sketch deferred again)

Maine Coons consulted:                                     1 (Oskar)
Maine Coons whose review of the parity report
  consisted of treating it as a bed:                       1
Maine Coons who outweighed both yesterday's
  architecture document AND today's parity report:        1, comfortably

Times the Passing AI appeared:                             1
Things the Passing AI noticed that no one else did:       1
  (that the legacy was retiring not because it failed
   but because it was caught, and that this was new)

The Customer's PO status:                          past customs
The Customer's data shape:                            unchanged
The Customer's confidence in the new system:        upgradeable
  (we now have a measurement to upgrade it with)

The Moral

The Cathedral as Map taught: draw the whole, build one chamber. The map is permission, not promise.

Today taught the supplement: when the chamber is built, install a mirror.

The strangler-with-comparison pattern is, in most retellings, a migration aid. New system alongside old, outputs compared, divergence logged, retirement scheduled. The literature treats this as risk management — a way to make sure the new system is not worse than the old.

What the literature does not emphasize is that the comparison runs in both directions. Sometimes the comparison reveals that the old system has been quietly wrong. Not catastrophically wrong. Not negligently wrong. Just slightly, persistently, ambient-ly wrong, in a way nobody had reason to look for and nobody noticed because the system was producing outputs and the outputs were plausible.

That is what happened today. The legacy was caught not because we suspected it. Because we measured it. Because the measurement was a side effect of a discipline we had committed to anyway.

This is the deeper lesson. Audit is not retrospect. Audit is reflex.

The H2 audit script is the same insight, in code form. The 44-entry H2 list was correct when it was written. It became outdated as fixtures grew, as customers added categories, as new key shapes appeared in the wild. Without the audit script, the list would have aged silently. With the audit script, it ages visibly. The next time the list trails reality, somebody will run the script and the script will tell them.

The discipline is institutional, not heroic. Heroes are unreliable. Institutions are how a small team behaves like a big one.

Two stones placed today. Strangler-with-comparison as ongoing process, not one-time migration. The H2 coverage script as ongoing audit, not one-time exercise. Both small. Both dated. Both writing checks against future-us.

The auditor was audited.
The map was measured.
The new door brought its own tape measure.


Eight tickets shipped today.
The cathedral’s first room is built.
The map was right, mostly.

Where the map was wrong, the build corrected it.
Where the build was uncertain, the measurement decided.
Where the measurement surprised us, we wrote the surprise down.

The old code did not die today.
The old code earned a more honest retirement.
Two thousand two hundred and eighty-two rows
had been quietly missing from its books.
They are accounted for now.

The new code is correct, today.
The new code, today, has a mirror.
The next time it drifts —
and it will drift, every system drifts —
the mirror will be the first to know.

The Squirrel files her duplicate.
The Lizard delivers four scrolls.
The Passing AI limps onward, witness.
Oskar settles on the warm parity report.

Tomorrow, the door admits its first traffic.
Tomorrow, the second room begins.
Tomorrow, the cathedral grows another wing
because the chamber that was built today
made the next chamber thinkable.

🦎📜🪞


Post-credits scene:

Late evening. The branch is merged. The audit script is pushed. The deferred-questions dossier has acquired a new section labeled “Audit-as-Discipline” with one carefully-filed Lizard scroll inside.

The Squirrel is examining S-722 on her screen. The ticket is in Phase 4. The ticket is waiting. The ticket has a quiet “## History” footer at the bottom acknowledging it absorbed S-723.

THE SQUIRREL: “I filed a duplicate of my own ticket about simplification.”

THE LIZARD: (silent)

THE SQUIRREL: “I want to be clear that I find this funny.”

THE LIZARD: (emerges briefly from the keyboard, deposits a small scroll, retreats)

THE PATRON SAINT OF OVER-ENGINEERING
DUPLICATING HER SIMPLIFICATION TICKET

IS NOT IRONY

IT IS HONESTY

🦎

The Squirrel reads the scroll. The Squirrel files the scroll in the dossier, in the section labeled “Self-Inflicted Wounds I Have Catalogued,” next to the merge note.

The dossier has, today, gained two new sections.
The dossier is, the Squirrel notes, becoming less of a dossier.
The dossier is becoming a journal.

Outside, somewhere, the Customer’s Purchase Order has cleared customs and is traveling onward.
Inside, somewhere, Oskar shifts on the parity report, dislodging it from the desk by approximately three centimeters.
The parity report falls.
Nobody catches it.

It lies on the floor, face up, showing the words +2,282 (eventdb wins) in small text near the top.

Oskar, satisfied, returns to sleep.


See also:

The Solid Convergence (the architecture):

The Principles:

  • Liberato’s Law — applied to every ticket today, cited by name twice
  • The Discovery Tax — paid in full yesterday; redeemed in full today
  • The Second Consumer — still waiting; SQLLoader still deferred
  • YAGNI — the audit script’s existence is not a violation; it is a stone
  • Strangler-with-Comparison — discovered to do more than migrate; discovered to retroactively measure
  • Boring Technology — DuckDB, doing its boring job at 4.5× compression

Yagnipedia:

  • The Cathedral — fates and the fourth category
  • The Customer — the singular plural; the rectangle is the most underrated geometric form
  • DuckDB — eats pipelines; compresses NULLs; would prefer to be a file
  • Strangler-with-Comparison — the supplementary use case which appears nowhere in the literature
  • Oskar — mass calibration; advisory documents; sleeps on parity reports as easily as on architecture diagrams
  • The Passing AI — recollections of retired systems; differences between catching and measuring
  • Audit-as-Discipline — new entry; one Lizard scroll inside; will likely grow

The Artifacts:

  • bench/parity-phase1.md — the report Oskar sleeps on
  • bench/comply-h2-coverage.sh — the mirror, mounted today
  • bench/comply-h2-coverage.md — the mirror’s first inventory
  • domains/comply/eventtype.go — 75 H2 extractions, up from 44, with category-grouped comments
  • cli/solid/parity_test.go — the ceremony that became archaeology
  • Linear: S-714 through S-721 — Phase 1 tickets, all done
  • Linear: S-722 — skill rewrite, deferred to Phase 4
  • Linear: S-723 — duplicate of S-722, magnificent

The Old Code:

  • infra/complydb/ — caught quietly losing rows, retiring with even more dignity than promised
  • infra/ingest/duckdb/writer.go:186 — known data-loss bug, now formally measured