Journal
CORLOG
Writing at the intersection of data, technology and building — from a practitioner's perspective.
SEPTEMBER 2026
AUGUST 2026
The trace_id was the easy part — Rust, OTel, Loki
Adding a trace_id to your logs is the last of four things that must be true. The other three fail silently — and produce telemetry that looks correct right up until someone needs it. Plus a fifth, from the issue that replaced AlwaysOn.
The catalog is the API — a governed mesh over MCP
The Fabric + Mesh reference ended with a promise: an MCP-exposed catalog tool that answers which sensitivity level applies to a column holding an EU IBAN, from the live LF-tag policy rather than a stale wiki. This is that design. Tools versus Resources as the decision the whole thing hinges on, output schemas derived from the descriptor model already published, why a read-only envelope has to be enforced rather than annotated, and why authorization — not the tool list — is the governance plane. Verified against MCP revision 2026-07-28.
One port, three client crates — a hexagonal Rust ingester
One trait survived alloy, solana-client and subxt 0.50 — three crates that agree on nothing. The decision that mattered was returning a channel and a cancel handle rather than a stream.
The pipeline half, part 2 — OpenLineage, Great Expectations, and the evidence a pipeline emits
Part 1 covered what a pipeline reads. This part covers what it emits, and why that is the whole governance story: OpenLineage as the vendor-neutral lineage backbone, the AWS-native adoption playbook via DataZone's PostLineageEvent API, assertion results as a data-quality facet a grant can be suspended on, and the provenance facet that answers the auditor's 'which code produced this number'. Plus why the scheduler stays central while compute decentralises, and the one hop this architecture cannot see. Real payloads and real emitter config throughout.
The pipeline half, part 1 — a pipeline is a descriptor, not a program
Metadata-first is usually read as an emission story — lineage and quality events coming out of a pipeline. That is half of it. This post walks the other half: the schemas, descriptors, contracts, expectation suites, and policy metadata a pipeline reads on the way in, and the one generic executor that interprets them instead of a DAG per pipeline. Real descriptor YAML, a complete Python executor, the six rules for defining a descriptor schema, and honest limits on where the abstraction stops working.
Behaviour-first governance in practice — generating artefacts from platform events
The Data Governance pillar established the concept: artefacts are byproducts of behaviour, not deliverables in themselves. This post walks the four mechanisms that make it real — RoPA from lineage, RACI from catalog ownership, audit report from subscription log, and a change-authorisation workflow where the commit is the evidence. Real Terraform, SQL, and YAML throughout.
Topcoat and the shrinking cost of full-stack Rust
Tokio just shipped Topcoat — a full-stack Rust framework with server-side rendering, a shadcn-styled component library, and reactivity that cross-compiles Rust to JavaScript via macro (no Wasm). Cordata's read: for one specific shop shape it kills a real parallel-frontend silo. For most others, it does not — yet.
JULY 2026
Fabric + Mesh on AWS — LakeFormation, DataZone, and one governance plane
The DataEng pillar named the compositional choice but left the code unwalked. Here it is in Terraform: central governance account, per-domain producer accounts, LF-tag-based grants, DataZone publishing in two layers — plus the trap of running two catalog planes over the same data, and three DACH compliance checkpoints hit on the way.
One skeleton, many screens — React + TypeScript
Admin screens declared as typed data, not code. A descriptor typo is a compile error; refactoring an existing screen through the skeleton shows zero visual diff.
Why Cordata
Most data work doesn't get hard at the modelling layer — it gets hard where pipelines meet decisions. Cordata exists to do that boundary work well.