The mainframe writes a file at end of cycle. Something moves it. A loader ingests it. Stored procedures unpack, validate, reconcile and post — code written in 2004 that has run ever since. That boundary is where migrations stall, and no single-platform tool's scope covers it.
Deliverables: a stranger-readable report (HTML + PDF), an interactive explorer (one self-contained file — works on an air-gapped network), machine-readable JSON, and the graph source. Inputs are sha256-pinned; two runs of the same inputs are byte-identical.
No black boxes. Every finding has a class, a severity with defined semantics, and the evidence that produced it:
| Severity | Meaning | Example |
|---|---|---|
| CRITICAL | bytes are misread as the wrong class — values will be garbage or the load aborts | record framing 220 vs 240 (every record after the first shifts); COMP-3 bytes decoded as character; a control column written from trailer bytes by one proc and overwritten from measured data by another |
| MAJOR | values land but lie, or a structural risk stands | scale mismatch (off by 10^n); a clock-fired consumer with no arrival dependency on its input file; a proc reachable from no scheduler entry or documented root |
| MINOR | information can be dropped | signed field read unsigned (negatives lost); digit capacity narrowed |
| INFO | benign notes kept for completeness | field-name pairings; bytes the target deliberately skips |
Honesty is mechanical, not editorial: parse coverage prints as a percentage of statements; an unpack whose offset comes from data (not a constant) lands in UNRESOLVED with its source line, never a guess; replay divergences that match no known cause report DIVERGENT-UNEXPLAINED. Lineage rows carry exact byte ranges (TR-CT-AMT bytes 97+7 → SEAM_CTL.TRL_CT_AMT via UNPACK_COMP3) so you can check any row against the copybook with a hex viewer — and we encourage you to.
Row counts prove the copy. Golden runs prove the system. We execute your batch — your programs, your job streams, masked data — to produce baseline outputs, then byte-compare any modernized target against them: posted state, control tables, reports. Divergences are explained with evidence, or reported DIVERGENT-UNEXPLAINED; a cause is never fabricated.
Target-agnostic by design. We verify anyone's migration — which makes every migration vendor a potential channel, not a competitor. Expected fixtures are captured by your staff on your systems under a written protocol; we never log on to your iron.
Replay a cycle with the loader config a DBA is actually running: the load aborts, the analyzer explains exactly why — record framing 20 bytes short of the copybook of record, with the evidence — the config is regenerated, the cycle reruns, and equivalence to the expected baseline is proven to the byte. Red, explained, green, proven: about ninety seconds. That is the product.
Want your own people to own the boundary? CS300 — The Seam teaches exactly this, on the same estate.