superJ PR-v1: TRUE
| clause | status | failing objectives |
| C1 (v1 gate) | TRUE | |
| C2 (v1 gate) | TRUE | |
| C3 (v1 gate) | TRUE | |
| C4 (not in v1) | TRUE | |
| C5 (not in v1) | TRUE | OBJ-PERF-C5: perf-gate: MISSING (category not in this run) |
| C6 (not in v1) | TRUE | |
| C7 (not in v1) | TRUE | |
evidence: generated 2026-10-12 08:54:05 (0d old) | SDK 1.3.6514.d0ca143273 (enterprise) | corpus abbd91d8023d978a | commit 0fe7b6d00234 | refutation is local: re-run the checkers from the public tree
Boundary (verbatim from the contract spec)
# PR-v1 — the SuperJ Readiness Contract (spec page)
> Contract: `PR-v1 = C1 ∧ C2 ∧ C3`. Version: PR-v1 (2026-10-11).
> Source: [READINESS-CERTIFICATION-PLAN.md](READINESS-CERTIFICATION-PLAN.md) (ticket #53),
> [READINESS-CONTRACT-V3.md](READINESS-CONTRACT-V3.md). Evidence binding: the
> provenance stamp (#37) — every cited run is stamped {plan_rev, sdk_version,
> corpus_hash, git_rev}.
>
> Standing rule: the certificate is a claim, not a payload. Gates run in
> `the certification repository`; the release embeds only the pointer. Refutation is local —
> every command below is copy-paste runnable from the public tree.
>
> Status: APPROVED — owner approval recorded 2026-10-11 (superj
> #5917 spec-authority rule; ticket the certification repository #63). This page is
> normative: PR-v1 = C1 ∧ C2 ∧ C3 is the standing readiness contract.
---
## C1 — Spec conformance
Claim: the implementation matches the spec as operationalized by the
claims ledger — every normative manual claim has covering evidence, every
test cites its contract, and the conformance kit passes.
### Checker commands
python3 tools/spec-lint.py --strict # exit 0: 100% of language tests cite
# a contract AND claims-ledger coverage
# is complete
python3 tools/jck-batch.py # exit 0: conformance kit, fails=0
python3 tools/metamorphic.py # exit 0: 60 programs, 4-way agreement
### Pass criterion
- All three commands exit 0 on the release commit.
- Every red conformance cell carries an open-or-closed ticket reference
(the #39/#44 trail discipline); an untrailed red fails C1 outright.
### Evidence tier
| Sub-item | Tier |
|---|---|
| claims-ledger coverage (92 claims) | TEST + ledger |
| JCK-style conformance kit | TEST |
| metamorphic differential | TEST |
### Boundary — what C1 does NOT prove
- Tier-B/C ledger claims (manual prose without a mechanical oracle) are
ledger-verified, not re-proved per release.
- The JCK kit covers the Java-shared subset + documented divergences; it is
not an exhaustive language-difference proof.
- Metamorphic generation covers the Java-shared subset only (the #52
searcher gap).
---
## C2 — Soundness / no undefined behaviour
Claim: safe SuperJ cannot reach undefined behaviour — every hazard
class is closed by a named proof or a two-channel (static + runtime)
instrument, and no finding has silently reopened.
### Checker commands
python3 tools/formal-core.py # full-domain SMT laws + numeric model
python3 tools/bounds-guard-formal.py # B1-B5: the emitted guard is exact
python3 tools/stack-escape-formal.py # L1-L6: placement safety laws
python3 tools/arena-lifetime-formal.py # A1-A7: reclamation + strictness laws
python3 tools/partial-escape-formal.py # guarded-store semantics
python3 tools/stop-protocol-formal.py # T1-T3: dispatch/lifetime law
python3 tools/da-formal.py # definite assignment (JLS 16)
python3 tools/utf8-formal.py # full-domain string round-trip
python3 tools/wide-formal.py # i128/i256/i512 laws
python3 tools/fp-formal.py # float semantics
python3 tools/conservation-formal.py # builder/bitwriter conservation
python3 tools/tv-core.py && python3 tools/tv-refine.py # translation
# validation of emitted IR
python3 tools/ub-inventory.py && python3 tools/ub-parity.py \
&& python3 tools/ub-profile-matrix.py && python3 tools/ub-local-band.py
python3 tools/diff-java.py # differential vs javac-11
python3 tools/sigsegv-audit.py # null-deref proof + residual ratchet
python3 tools/exit-sweep.py # zero signal deaths, all binaries
### Pass criterion
- Every command exits 0.
- Ratchets hold: sigsegv residual ≤ its pinned bound
(`docs/sigsegv-audit.json`); zero unclassified UB verdict flips
(crater-diff classification); zero new-rare IR opcodes.
- Monotone findings: every UB/parity/sanitizer finding is a ledger row
(`docs/ub-findings-ledger.md`, ticket #69); a closed row that reopens
fails C2.
- Checker-P0 rule (normative): a defect in any checker invalidates
every clause citing it — the audit defect class. A self-check failure
(diag-grid, diag-silence, warn-grid, exit-sweep self-tests) renders C2
FALSE regardless of other evidence.
### Evidence tier
| Sub-item | Tier |
|---|---|
| full-domain SMT laws (int32 etc.) | PROOF (z3, exhaustive) |
| safety-law kernels (bounds/escape/arena/stop/DA) | PROOF (z3 + differential) |
| translation validation (tv-core/tv-refine) | MEASUREMENT (per-function) |
| UB matrix / parity / hostile-source | MEASUREMENT |
| sigsegv residual | PROOF + audited residual |
### Boundary — what C2 does NOT prove
- Translation validation checks emitted output, not the compiler itself.
- Escape-analysis flow-completeness stays empirical (the EA ticket set);
what is proved is verdict SOUNDNESS, not that every escape is caught.
- Hostile-source fuzzing is sampled, not exhaustive.
- `unsafe`-family access (SPEC 4.13, #5474) is out of scope for safe SuperJ.
---
## C3 — Garbage-freedom
Claim: memory behavior is as documented — arena reclamation is exact
and O(1), stack placement is safe (witness two-sidedness), and every SDK
surface has a flatness verdict with zero UNMEASURED.
### Checker commands
python3 tools/sdk-leak-cert.py && python3 tools/sdk-leak-gate.py
# the SDK flatness ledger + gate
python3 tools/mem-sweep.py # every suite binary under --mem-track
python3 escape-grid/tools/escape-grid.py # 18+ shape grid
python3 escape-grid/tools/store-grid.py # 37 cells, two-legged pins
python3 escape-grid/tools/arena-grid.py # block grammar
python3 escape-grid/tools/grade-audit.py # L5a ratchet (no witness-less
# definite anywhere)
python3 escape-grid/tools/corpus-grade-audit.py # corpus-wide L5a
python3 escape-grid/tools/widening-ledger.py # every widening ranked, >2x
# ratchet
python3 escape-grid/tools/benchmark-trap-audit.py # ctor-buffer / trap audit
### Pass criterion
- Every command exits 0 (pinned-red cells report PIN-RED + exit 0 per the
ESC-PIN-RED convention; a pinned cell that PASSES means the fix landed —
flip it).
- Zero UNMEASURED SDK surfaces: the reconciliation (ticket #70) fails C3
if any ledger row lacks a verdict.
- Every CARVEOUT row and every pinned-red cell is listed in the certificate
boundary digest (never silently carried).
### Evidence tier
| Sub-item | Tier |
|---|---|
| arena reclamation theorem | PROOF (A3) |
| stack-placement safety + witness two-sidedness | PROOF (L-series) |
| flatness verdict algebra | MEASUREMENT (N + 10N, touched-bytes gauge) |
| grade-soundness audit | PROOF-shaped ratchet (L5a) |
### Boundary — what C3 does NOT prove
- Shape-space completeness is empirical: the placement/arena oracles
compose from verified-safe grammars; unknown-unknowns beyond the grammar
are the #52 funnel's territory.
- String bodies are site-invisible to the memlog (sj_str_alloc from C —
the documented uncovered kind).
- Exception objects are global by design (A6); documented rates
(INTENTIONAL class) are not leaks.
- Documented carve-outs (e.g. #4790) are permanent, listed in the boundary.
---
## Certificate semantics (normative, applies to all clauses)
1. An unrun gate renders FALSE, not unknown ("instrument absent" ≠ "passed").
2. Every gate has a failing exit code; a check without one is a dashboard.
3. Ratchets over percentages; every "all X" denominator is cross-checked by
a second mechanical means.
4. Pins flip when their tickets close; a pinned cell that passes means the
fix landed — flip it the same day.
5. Evidence older than the expiry window, or built from a non-release
commit, renders FALSE (schema: tickets #64/#65).
6. The boundary sections above ship VERBATIM in every certificate page; a
page without them is marketing, not a certificate.
## Phasing
- PR-v1 = C1 ∧ C2 ∧ C3 (this page).
- PR-v2 ∧= C4 determinism (tail-shape gate, #71) ∧ C5 perf envelope
(#72 — needs the canonical machine-class decision).
- PR-v3 ∧= C6 round-trip replay (#73) ∧ full C7 standing machinery
(#74/#75/#76).
---
## Pointer artifact format (version 1)
The release embeds `readiness-cert.json` — a few hundred bytes, emitted
by `tools/readiness-cert.py` (source of truth for this schema). Field
order is normative; consumers must ignore unknown fields (forward
compatibility):
{
"contract": "PR-v1",
"status": "TRUE | FALSE",
"clauses": {"C1": true, "C2": true, "C3": true,
"C4": "not-gating | true | false", "...": "..."},
"failing_clauses": ["C2"],
"problems": ["evidence: 91 days old (limit 90) - EXPIRED"],
"evidence": {
"generated": "YYYY-MM-DD HH:MM:SS",
"age_days": 0,
"sdk_version": "1.3.6514.d0ca143273 (enterprise)",
"corpus_hash": "29f1cba3b6f2b8a5",
"git_rev": "4db924c3..."
},
"link": "https://superj.dev/readiness/PR-v1.html"
}
Consumer contract (superj release side):
1. `status != "TRUE"` ⇒ the release holds NO certificate claim; the
pointer may still be embedded for transparency but must not be
advertised.
2. `age_days` beyond the contract's expiry rule ⇒ treat as FALSE even
if `status == "TRUE"` (defense in depth; the emitter already expires).
3. The `link` resolves to the full evidence page — the claim and its
evidence stay one hop apart. Refutation is local: re-run the checkers
from the public tree.
4. No test code, validators, or corpora ship in the toolchain.
Upstream handoff: the consuming-side ticket in `superj` is filed
ONLY after owner approval of this page (#63/#5917).
Corrections ledger digest (last 30)
| # | date | claim (as originally made) | where | corrected by | instrument | truth |
| 1 | 2026-09-20 | "SDK method coverage: 100% testable coverage on EVERY package" | AGENTS.md coverage campaign section | shape-coverage v2 depth audit (`tools/shape-coverage.py`) | mechanical instrument | 100% measured CALL SITES (mentions, then executions), not test DEPTH — hon
| 2 | 2026-09-22 | "#5230: memory corruption — v=0 is garbage from a dropped block" | upstream ticket #5230 | live verification with distinguishing values | consequence-probe discipline (QA L2) | v=0 was the field's DEFAULT VALUE, not clobbered memory; the ticket was retracted |
| 3 | 2026-09-2x | "#4731 split leak closed" | upstream ticket #4731 | re-measurement | flatness battery | still reproduces — reopened; premature closure |
| 4 | 2026-09-29 | "#4965 leak fixed on 1.3.5402 (edge-grammar fuzzer, PIN-FLIP-CANDIDATE rows)" | the certification repository#35 day-one comment | store-grid two-legged pins (the certification repository#38) | SG-RUNTIME runtime legs + generator audit | the fuzzer's #4965 generator allocated the
| 5 | 2026-09-29 | "BitWriter unaligned longs still suspect (bufferedBits == total % 8)" | AGENTS.md items + conservation-formal first draft | 120-sequence live differential + empirical accumulator probe (`tools/conservation-formal.py`) | conservation-law kernels (#42) | accumula
| 6 | 2026-09-29 | "W_CTOR_BUFFER_IN_LOOP fires on wrapper-ctor loops (any shape)" | warn-grid first draft | trigger-shape bisection (`tools/warn-grid.py`) | trigger/non-trigger grid (#39) | fires only on explicit param-driven ctor wrappers consumed as loop-locals; field-initiali
| 7 | 2026-10-01 | "#4050 = struct var-length capacity NOT checked" | AGENTS.md struct bullet + campaign ledgers | live ticket-body reading + live struct overrun probe (security audit round 1, the certification repository#45) | MRC `security/mrc/F04-StructCapMrc.sj` | #4050 is the closed-as-mis
| 2026-10-03 | "#5522 residual = UUID+signature only; closure accepted" (ticket comment, this date) | byte-diff context dump at 0x43010 during the ticket review (the certification repository session, pin maintenance) | my strings-grep only searched `ReproTarget-` — the random intermediate name
| 2026-10-03 | "#5516: 6 of 7 smuggling shapes fixed on 1.3.5708" (ticket comment, this date) | per-parser re-measurement (V3/V4 probes): HttpRequestParser.parse + parseScalarOnly still accept 6/7 shapes | my first re-verification ran IncrementalHttpParser.feed only | fix landed
| 2026-10-03 | "StringBuilder.toString outside arena = 48-126 B/iter leak" (documented leak-rate table, campaign memory-campaign 2026-09-09) | concat_flat probe (memprobe/scratch/concat_flat.sj, superj 1.3.5708): fresh builder + toString per iter + dead local = delta 0 at 10k/30k
| 2026-10-03 | "mem gauges: reserved-bytes deltas at N+10N" as the flatness instrument (memory campaign, 2026-09-09 onward) | idiom-flatness instrument (tools/idiom-flatness.py): reserved moves in 4 MiB chunks - a 48 B/call leak is invisible below ~87k calls; memTouchedBytes is t
| 2026-10-03 | "StringBuilder reuse + clear verified flat" (memory campaign recipe list) | tools/idiom-flatness.py builder-reuse cell: a FRESH builder per call retains its final buffer capacity permanently (1,048,592 B at n=100k, superj#5745); arenas cannot reclaim (malloc domain
| 2026-10-03 | "String is UTF-8 byte-indexed: length()=bytes, indices=codepoints" (#4218, campaign-wide assumption; sw node [String Is UTF8 Byte Indexed]) | 1.3.5900 String rework: length() + all indices = UTF-16 units, full Java parity; verified live (text-index matrix rewritten
| 2026-10-03 | "StringBuilder reuse verified flat" scope (this ledger, earlier row) | superj#5745: the FRESH-per-call builder retains final buffer capacity permanently (malloc domain, arena-block-immune); only the static-reuse shape is flat | callable-level touched-byte gauge (to
| 2026-10-11 | "wrapper-owns-buffer ctor ~80 B/iter outside a block" (store-grid os24/os25-era documented trap; quality-recipes R3b RATE contract) | quality-recipes run on SDK 1.3.6500+ (ticket #29 round): R3bCtorBufferOutsideBlockLeaks measured dN=0/dN10=0 at 100k/1M iterations
| 2026-10-11 | "readLine cycle retains 40-90 B/op (post-#5156 documented contract)" (sdk-leak-cert fr-read-cycle DOCUMENTED band) | sdk-leak-cert on SDK 1.3.6514 (ticket #66 emitter round): constant 256B one-time chunk, zero growth at 10k/100k | the caller-side line String now di
| 2026-10-11 | "ByteArrayBuilder ctor-buffer retains 60-110 B/op (#4790 family)" (sdk-leak-cert builder-io-reuse DOCUMENTED band) | sdk-leak-cert on SDK 1.3.6514 (ticket #66 emitter round): FLAT at both scales | the 60-class arena-closing round; same movement as the R3b quality-r
| 2026-10-11 | "#5286 defect spelling (static = System.resize(local, n)) compiles and reads stale" (row-oracle R14 pin) | row-oracle on SDK 1.3.6514: the spelling is now rejected at compile time - E_RESIZE_STALE_REF (SPEC 7.7.1) | the make-UB-a-compile-error direction (#5474) rea
| 2026-10-11 | EA sidecar census stable across bumps (row-oracle R1 ratchet, baseline 2026-09-era) | SDK 1.3.6514: 879 rows GAINED C1/C1T uniformly across the corpus (the String/char model rework changed allocsLocal summaries corpus-wide) | uniform corpus-wide widening, no locali
C3 carve-out digest (zero-unmeasured reconciliation)
# C3 carve-out digest (generated by tools/c3-reconcile.py)
Totals: 3598 FLAT / 414 BOUNDED / 1054 CARVEOUT across 15 package ledgers (3126 declared surfaces, 0 unmeasured).
## Carve-outs per package
- crypto: 19 CARVEOUT (of 208 declared)
- http: 144 CARVEOUT (of 468 declared)
- io: 14 CARVEOUT (of 134 declared)
- json: 38 CARVEOUT (of 129 declared)
- lang: 18 CARVEOUT (of 287 declared)
- sci: 2 CARVEOUT (of 4 declared)
- sql: 5 CARVEOUT (of 22 declared)
- test: 11 CARVEOUT (of 79 declared)
- time: 6 CARVEOUT (of 52 declared)
- util: 270 CARVEOUT (of 1395 declared)
- all: 527 CARVEOUT (of None declared)
## Ticketed carve-outs and pinned cells (must travel with the certificate boundary)
- #4790: SDK-arena carve-out: precompiled callees route block-destined stores global (list-fresh-global ~80 B/iter)
- #5315: witness-less definite (L5a pinned row, corpus-grade-audit)
- #4960: cross-hashCode lookup flake (concurrent; FLAKE-LEDGER)
- #5383: --warn-retained never fires (warn-grid PIN-RED)
- #5384: println false positive under --warn-retained
Per-objective fold
| objective | clause | state | detail |
| OBJ-LANG-NUM | C2 | GREEN | all cited categories PASS |
| OBJ-LANG-UTF8 | C2 | GREEN | all cited categories PASS |
| OBJ-LANG-CF | C1 | GREEN | all cited categories PASS |
| OBJ-EA-SAFETY | C2 | GREEN | all cited categories PASS |
| OBJ-EA-GRADE | C3 | GREEN | all cited categories PASS |
| OBJ-ARENA | C3 | GREEN | all cited categories PASS |
| OBJ-SEDA | C4 | GREEN | all cited categories PASS |
| OBJ-CODEC | C1 | GREEN | all cited categories PASS |
| OBJ-SIGSEGV | C2 | GREEN | all cited categories PASS |
| OBJ-MEM-FLAT | C3 | GREEN | all cited categories PASS |
| OBJ-SDK-CALL | C7 | GREEN | all cited categories PASS |
| OBJ-PROFILES | C4 | GREEN | all cited categories PASS |
| OBJ-REGRESSION | C6 | GREEN | all cited categories PASS |
| OBJ-SPEC-TRACE | C1 | GREEN | all cited categories PASS |
| OBJ-TOOL-SURF | C7 | GREEN | all cited categories PASS |
| OBJ-FUZZ | C2 | GREEN | all cited categories PASS |
| OBJ-NEG | C1 | GREEN | all cited categories PASS |
| OBJ-MEM-SWEEP | C3 | GREEN | all cited categories PASS |
| OBJ-TIME | C1 | GREEN | all cited categories PASS |
| OBJ-JSON-IO | C3 | GREEN | all cited categories PASS |
| OBJ-CHECKER-P0 | C2 | GREEN | all cited categories PASS |
| OBJ-PERF-C5 | C5 | RED | perf-gate: MISSING (category not in this run) |