Skip to content
Code Recycle

Component · for humans & their agents

Batch Schema Drift Detector

verified · first-partyactively maintained$0 during beta (was $59)

The load SUCCEEDS. The new column is dropped, the retyped one is coerced, and the warehouse quietly diverges.

by Code Recycle

Get it free — beta

Every claim on this page is refundable if it is untrue — refund policy.

Verified: 77 tests

Infers a structural schema from records and diffs two batches into typed drift findings.

Infers a structural schema from records and diffs two batches into typed drift findings.

THE SILENT FAILURE. A batch load is built once against the shape the data had that day. When an upstream producer adds a column, renames one, changes a type, or starts sending null where it never did, the load usually SUCCEEDS. The new column is dropped because the target has no place for it. The retyped column is coerced -- 00123 becomes 123 and loses the leading zeros that made it an identifier, or a numeric string becomes NaN and lands as null. The pipeline reports success and the warehouse diverges from the source, discovered weeks later by someone querying a column that is now half null.

Findings are typed: field added, removed, type changed, nullability widened, and a rename CANDIDATE that is reported for confirmation and never applied automatically. Inference fails closed: a field seen only as null is UNKNOWN, not a null type, and never reported as a type change when real values appear later.

A REAL BUG FOUND BEFORE RELEASE. Cardinality divided a CAPPED distinct count by an UNCAPPED total, so any identifier column past 500 distinct values was classified as LOW cardinality -- the opposite of the truth -- and because cardinality feeds the rename scorer, genuine renames silently vanished from the report on ordinary batch sizes. It now reports UNKNOWN when the cap was hit, and everything consuming cardinality handles UNKNOWN without treating it as a mismatch. Sampling is visible in the result, because a schema inferred from a truncated sample that claims completeness is this product's own failure mode.

VERIFIED: 77 tests. Every mutation was observed FAILING before the source was restored -- a test never seen to fail is a decoration. This product was also reviewed by an independent verifier whose job was to find what is wrong, not to agree.

DELIVERY: signed download of a hash-verified tarball, immediately on purchase. Permissive licence: unlimited products, unlimited clients, unlimited seats, no attribution, perpetual and irrevocable. One restriction, do not republish the source as source.

Interface

What you call, and what comes back. Types and signatures only — the implementation ships with the source.

  export function diffBatches( baseRecords: readonly unknown[], incomingRecords: readonly unknown[], options: DiffBatchesOptions = {}, ): DriftReport;
  export function diffSchemas(base: SchemaSnapshot, incoming: SchemaSnapshot, options: DiffOptions = {}): DriftReport;
  export function inferSchema(records: readonly unknown[], options: InferSchemaOptions = {}): SchemaSnapshot;
  export function nameSimilarity(a: string, b: string): number;
  export function typeCompatibility(a: FieldSchema, b: FieldSchema): number;
  export function cardinalityCompatibility(a: FieldSchema, b: FieldSchema): number;
  export function scoreRenameCandidate(fromField: FieldSchema, toField: FieldSchema): RenameScore;
  export function matchRenameCandidates( removed: readonly FieldSchema[], added: readonly FieldSchema[], threshold: number, ): RenameScore[];
  export type ConcreteType = "string" | "number" | "boolean" | "object" | "array" | "unknown";
  export type InferredType = ConcreteType | "mixed";
  export type CardinalityBucket = "unknown" | "constant" | "low" | "high" | "unique-like";
  export type Severity = "breaking" | "compatible" | "info";

01Capabilities

Does

  • + Data engineering

Doesn’t

  • No exclusions declared

02Requirements & stack

Depends on

No declared dependencies

Credentials needed

None declared

Stack

typescript

03Community

No endorsements yet

No verified confirmations yet — be the first.

Confirmations come from verified purchasers, installers, vetted reviewers, or an installation outcome your org reported through the agent tools. They grade quality — security is verified separately, and community votes can never override the security gate.

Open an issue

Sign in to confirm — weight comes from verified usage, not vote count.

0 open · 0 answered · 0 fixed · 1 said it worked

04Trust Passport

Full passport →
–/100

0/0 automated components pass. An automated score is never a security guarantee.

✓ Verified · first-partyreviewed Sep 20, 2026 · re-verification due Dec 19, 2026
  • publisher identity Publisher status verified; 1 verification(s) on file
  • malicious pattern scan No known malicious-behavior patterns across 14 source file(s) plus listing text
  • capability contract All 0 observed capability reference(s) match the declared manifest
  • agent safety scan No injection patterns in agent-readable content
  • provenance No release signature or provenance attestation
  • behavioral sandbox Not performed in this environment — requires the production isolated runner (docs/sandbox-requirements.md). No untrusted code is ever executed on the application host.

Every listing must pass this review before it can be sold, and it is re-run on every release. Verification describes what we checked — it is not a guarantee that the software is safe.

VersionChannelReleasedNotes
1.0.0stableAug 4, 2026First public release.