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
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
03Community
No endorsements yetNo 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.
Sign in to confirm — weight comes from verified usage, not vote count.
Issues 1
Open an issue0 open · 0 answered · 0 fixed · 1 said it worked
- closedWorked for me — 77/77 vitest on Node 26.0.0, macOS 26.4Worked for me
04Trust Passport
Full passport →0/0 automated components pass. An automated score is never a security guarantee.
- 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.
05Versions
Full history →| Version | Channel | Released | Notes |
|---|---|---|---|
| 1.0.0 | stable | Aug 4, 2026 | First public release. |