Same Seed. Same Result. Proven.
30 CLI commands for full computational auditability. Run it 5 times, hash every output,
verify stdout + exit status + GC behavior are identical. Automatically.
$ cjcl proof train_model.cjcl --runs 5 --seed 42 --hash-output
[proof] Running 5 iterations with seed 42 (executor: eval)...
eval run 1 sha256: b71890776443ba52ceb9560993d194e59f052185...
eval run 2 sha256: b71890776443ba52ceb9560993d194e59f052185...
eval run 3 sha256: b71890776443ba52ceb9560993d194e59f052185...
eval run 4 sha256: b71890776443ba52ceb9560993d194e59f052185...
eval run 5 sha256: b71890776443ba52ceb9560993d194e59f052185...
┌──────────────────────────┬────────┐
│ stdout identical │ PASS │
│ exit status identical │ PASS │
│ GC collections identical │ PASS │
└──────────────────────────┴────────┘
Verdict: PASS (5 runs, seed=42, executor=eval)
$ cjcl parity train_model.cjcl --seed 42
[parity] eval vs mir-exec (seed=42)
│ stdout match │ PASS │
│ value match │ PASS │
│ GC collections │ eval=0, mir=0 │
Verdict: IDENTICAL
$ cjcl audit train_model.cjcl
[audit] Auditing `train_model.cjcl`...
[WARN] line 5: naive summation: `total` accumulated with `+` in loop
[WARN] line 5: naive summation: `total = total + ...` in loop
│ Warnings │ 2 │
│ Total findings │ 2 │
Fix: use kahan_sum() or cumsum() for compensated accumulation
$ cjcl bench train_model.cjcl --runs 10
┌──────────────┬──────────────────┐
│ Parse time │ 147.0 us │
│ Mean │ 41.2 us │
│ Median │ 37.0 us │
│ Std dev │ 11.5 us │
│ Throughput │ 24,271 runs/sec │
└──────────────┴──────────────────┘
$ cjcl mem train_model.cjcl
│ GC collections (avg) │ 0.00 │
│ GC stable across runs │ true │
│ GC heap objects (max) │ 0 │
$ cjcl emit train_model.cjcl --stage mir
fn __main() -> void:
let data = [0.100000, 0.100000, ...]
let total = 0.000000
while (i < 10):
total = (total + data[i])
← see your code after compiler lowering
30
CLI Commands
SHA-256
Content-Addressed Output
2 Executors
Parity Verified
What You Get vs. Typical ML Stacks
Typical ML Stack
- Logs (unstructured text)
- Tensor dumps (opaque blobs)
- Partial profiling (sampling-based)
- No determinism guarantee
- No compiler visibility
- No numerical hygiene checks
CJC-Lang CLI
- proof — SHA-256 determinism verification
- parity — dual-executor agreement check
- audit — numerical hygiene analysis
- bench — stability + throughput metrics
- emit — AST/HIR/MIR pipeline visibility
- mem — GC behavior + heap profiling