The receipt room · live trace
Parity receipt
The easy-mode baseline — a standard mainframe account record. If a translator cannot pass this clean, it has no business attempting AL3.
Verdict
PASS
Records
1
Elementary fields
12
REDEFINES
0
OCCURS
0
Five quality gates
| 01 | PARSER | PASS | Deterministic AST extraction yields a non-empty, field-bearing record set. No LLM involved. | 1 records · 12 elementary fields |
| 02 | SCHEMA_SANITY | PASS | Candidate schema parses as valid Zod — balanced delimiters, no markdown fences, no prose. | valid Zod module |
| 03 | FIELD_PARITY | PASS | len(COBOL elementary fields) === len(emitted schema leaves). Off by one and the build fails. | COBOL 12 ⇄ schema 12 |
| 04 | DARK_CORNER | PASS | Every REDEFINES overlay compiles to a union (discriminated where a record-type byte exists); every OCCURS to a dynamic array. | 0/0 overlays · 0/0 arrays |
| 05 | MOCK_STRUCTURE | PASS | A mock document generated from the schema re-validates against it — the schema is internally consistent. | 13 nodes round-tripped |
Field-for-field mapping · 12 elementary fields
| COBOL field | PIC | Storage | Schema path | Type |
|---|---|---|---|---|
| ACCT-ID | X(10) | alphanumeric (10 chars) | acctRecord.acctId | z.string().max(10) |
| ACCT-NAME | X(50) | alphanumeric (50 chars) | acctRecord.acctName | z.string().max(50) |
| ACCT-BALANCE | S9(9)V99 COMP-3 | packed decimal (COMP-3, signed, scaled) | acctRecord.acctBalance | z.number() |
| ACCT-STATUS | X(1) | alphanumeric (1 chars) | acctRecord.acctStatus | z.string().max(1) |
| ACCT-OPEN-DATE | X(8) | alphanumeric (8 chars) | acctRecord.acctOpenDate | z.string().max(8) |
| ACCT-LAST-ACTIVITY | X(8) | alphanumeric (8 chars) | acctRecord.acctLastActivity | z.string().max(8) |
| ACCT-TYPE | X(3) | alphanumeric (3 chars) | acctRecord.acctType | z.string().max(3) |
| ACCT-INTEREST-RATE | S9V999 | display numeric, signed, implied decimal (4 digits) | acctRecord.acctInterestRate | z.string() |
| ACCT-OVERDRAFT-LIMIT | S9(7)V99 | display numeric, signed, implied decimal (9 digits) | acctRecord.acctOverdraftLimit | z.string() |
| ACCT-CURRENCY | X(3) | alphanumeric (3 chars) | acctRecord.acctCurrency | z.string().max(3) |
| ACCT-PIN | X(4) | alphanumeric (4 chars) | acctRecord.acctPin | z.string().max(4) |
| ACCT-CREATED-TIME | X(26) | alphanumeric (26 chars) | acctRecord.acctCreatedTime | z.string().max(26) |
Emitted schema · TypeScript + Zod
import { z } from "zod";
export const RecordSchema = z.object({
acctRecord: z.object({
acctId: z.string().max(10),
acctName: z.string().max(50),
acctBalance: z.number(),
acctStatus: z.string().max(1),
acctOpenDate: z.string().max(8),
acctLastActivity: z.string().max(8),
acctType: z.string().max(3),
acctInterestRate: z.string(),
acctOverdraftLimit: z.string(),
acctCurrency: z.string().max(3),
acctPin: z.string().max(4),
acctCreatedTime: z.string().max(26),
}),
});
export type Record = z.infer<typeof RecordSchema>;
Source copybook
Show ACCTREC.CPY
01 ACCT-RECORD.
05 ACCT-ID PIC X(10).
05 ACCT-NAME PIC X(50).
05 ACCT-BALANCE PIC S9(9)V99 COMP-3.
05 ACCT-STATUS PIC X(1).
05 ACCT-OPEN-DATE PIC X(8).
05 ACCT-LAST-ACTIVITY PIC X(8).
05 ACCT-TYPE PIC X(3).
05 ACCT-INTEREST-RATE PIC S9V999.
05 ACCT-OVERDRAFT-LIMIT PIC S9(7)V99.
05 ACCT-CURRENCY PIC X(3).
05 ACCT-PIN PIC X(4).
05 ACCT-CREATED-TIME PIC X(26).Provenance
copybookACCTREC.CPY
input SHA-2561a3861a36382ff20b0e2da7c5af7063ee696896fb139b0a8f1359edf95e2b990
output SHA-2563e9315f18f0a8c82f1d2ca420611b6453a94378c1224b1eb5144cd12d8f14a70
determinismsame input → identical output hash, every run
machine-readable/receipt.json?cb=acct