The readiness certificate · PR-v1

Production ready is a predicate,
not a badge.

Most “production ready” claims are a sentence in release notes. Ours is a runnable, machine-checkable artifact with a published boundary — decomposed into named clauses, enforced by checkers with failing exit codes, re-run every release cycle. It is true or false, never “green-ish”. And it has already refused to certify this project once, in public, when the evidence turned against it.

TRUE
PR-v1 = C1 ∧ C2 ∧ C3 — all clauses standing
evidence generated 2026-10-12 · SDK 1.3.6514 · corpus abbd91d8023d978a
full evidence page →  ·  pointer JSON →

The claim

Three clauses. Each one checkable. Zero of them negotiable.

“The release is production-ready” is not a mood — it is a logical conjunction, and every clause is backed by named checkers with published pass criteria. If a checker did not run, the clause is FALSE. If the evidence goes stale, the certificate is FALSE. If a checker itself is broken, the certificate is FALSE.

the whole claim
PR-v1 = C1 ∧ C2 ∧ C3

// standing, not a snapshot:
// gates re-run every release cycle · evidence expires after 90 days
// re-issuing rewrites the same public files — an old TRUE can never linger

What stands behind each clause

The clauses, and the evidence underneath them

C1 · gating

Spec conformance

The language behaves the way the specification says.

  • The claims ledger: all 92 numbered claims from the manual, each mapped to covering evidence — a claim without evidence cannot count.
  • Every language test cites its contract (spec, manual, or ticket). spec-lint --strict fails otherwise: 100% cited.
  • A JCK-style conformance kit over the Java-shared subset, exit-code gated.
  • A metamorphic differential: generated programs transformed by semantics-preserving rewrites must produce byte-identical output under SuperJ, under javac, and across transforms — the release gate runs a 60-program four-way agreement batch, with 1,000-program campaign runs verified.
  • Negative conformance: illegal constructs must be rejected with the right diagnostic — each code has a trigger cell and a false-positive guard cell.
C2 · gating

Soundness — no undefined behaviour

Safe SuperJ cannot reach undefined behaviour: no memory-unsafety, no bad dispatch, no unproven escapes, no unchecked arithmetic hazards.

  • Full-domain proofs — exhaustive, not sampled: arithmetic and conversion laws verified by SMT over all 232 int values, plus bounds guards, escape placement, arena reclamation, definite assignment, and the full 1,112,064-codepoint Unicode round-trip.
  • Translation validation: the emitted LLVM IR of the whole corpus is checked per-function — CFG totality, no silent unreachable code, bounds-guard presence.
  • Hostile input: 181 attack cases through parsers and decoders; hostile-source compiler fuzzing; a profile × sanitizer matrix.
  • SIGSEGV audit: every null-dereference site across 184 emitted IR files classified and proven guarded, with a residual ratchet; zero signal deaths across all corpus binaries.
  • A monotone findings ledger — a closed defect class reappearing fails the clause. And the checker-P0 rule: a defect in a checker invalidates every claim citing it. The checkers check themselves, with planted-defect self-tests.
C3 · gating

Garbage-freedom

Memory behaves as documented — arena reclamation is exact and O(1), stack placement is safe, and no SDK surface has unmeasured allocation behavior.

  • The SDK flatness ledger: all 15 package ledgers, 3,598 surfaces measured FLAT, 414 BOUNDED, 1,054 documented carve-outs — and zero surfaces without a verdict. An unmeasured surface fails the clause.
  • The two-scale flatness law: every “free” claim is measured at N and 10N iterations with byte-exact gauges. A rate that grows is a leak; a constant is not.
  • Escape-analysis soundness, formally: the placement theorem (verdict STACK ⇒ no read-after-death) is machine-checked; grade soundness is ratcheted corpus-wide.
  • Carve-outs travel with the certificate: every documented exception, with its ticket, is listed in the boundary — never silently carried.

Four more clauses are built and reported but deliberately not gating in PR-v1. A clause set that implied a completeness it does not have would be the first lie — so the phasing is explicit: PR-v2 adds C4 ∧ C5, PR-v3 adds C6.

C4 · not-gating

Determinism

Built and reported. Gates from PR-v2.

C5 · not-gating

Performance envelope

Versioned constants pinned to a named machine, armed with a >2× regression ratchet. Gates from PR-v2.

C6 · not-gating

Round-trip replay

Corpus replay across releases. Gates from PR-v3.

C7 · not-gating

Standing publication

The machinery that keeps this page honest. Reported, not gating.

The trust question

Why would you trust a certificate the vendor issued about itself?

Fair question — a self-issued certificate is only as good as its incentives. Six properties separate this one from a press release.

Refutation is local

Nothing about the claim requires trusting us. Every command on the evidence page is copy-paste runnable against the public corpus. If the certificate says FLAT and your run says LEAK, you have refuted it — locally, in minutes, without asking anyone. A claim you can refute yourself is a different kind of claim.

It fails closed — and it has

The certificate went TRUE only after going FALSE. When the SDK moved under the corpus — the 1.3.6514 string-model rework — 96 tests contradicted their pins, and the certificate folded, rendering FALSE with the failing clauses named until the migration landed. A gate that has visibly refused its own project is a gate with inspectable incentives.

The evidence is provenance-stamped

Every report run is stamped with {plan revision, SDK version, corpus hash, git commit, tool versions}. The certificate cannot drift from its evidence: stale evidence, or evidence from a different commit, renders FALSE — not “probably fine”.

It has a record of catching itself

The certification campaign audited its own instruments and found five ways certification could lie — gates that never gated, denominators that shrank silently, mention-only coverage, unwired report layers, stale pins. All fixed, and turned into rules the certificate now enforces. Retracted claims are never edited away: there is an append-only corrections ledger. The full story →

The boundary travels with it

Every issued page must carry a what this does not prove section. A contract that only lists passes is marketing; the boundary is what makes it a measurement. If a certificate page has no boundary section, treat it as void.

It is a pointer, not a payload

The release ships a few hundred bytes pointing at the evidence — no test code, no validators, no corpora bundled in the toolchain. Claim and evidence are one hop apart, and the evidence is regenerated per release. Nothing is bundled in a way you cannot inspect.

The honest part

What this does not claim

Every certificate page must carry its boundary, verbatim from the contract. Here is ours.

  • No full formal proof of the compiler. The proofs cover specific laws — arithmetic over the full domain, bounds-guard exactness, escape-placement safety, arena reclamation, CFG totality. The completeness of flow analyses remains empirical: grids, oracles, fuzzing — not theorems.
  • Unsafe access is excluded. SuperJ has an explicit low-level access surface (SPEC 4.13). The no-UB claim covers the safe language.
  • No performance guarantees. PR-v1 measures performance but does not gate it; versioned constants gate from PR-v2.
  • No upgrade-compatibility claim. Round-trip replay against prior releases gates from PR-v3. Today the mechanism is drift-classification.
  • Not zero known defects. At issuance, one upstream defect is known and pinned (MerkleTree.computeTreeNative silent no-op, upstream #6127) — visible as a red row in the report, explained in the boundary rather than hidden. A certificate with zero caveats is the one you should distrust.
  • No unknown-unknowns claim. The escape/arena grammars are verified closed under composition and heavily adversarially sampled; “no unknown unknowns exist” is not a claim anyone can honestly make, and this certificate does not make it.

Refute it

Verify it yourself — without trusting anyone, including us

your terminal
# the 10-second check — is the claim standing right now?
$ curl -s https://superj.dev/readiness/PR-v1.json

# the real check — run every gate yourself (~30 min, provenance-stamped)
$ git clone <certification repository>   # linked from the release notes
$ python3 scripts/test-report.py
$ python3 tools/readiness-cert.py        # exit 0 = the claim holds today

Anything but TRUE in the JSON, or an age_days beyond the expiry rule, means the claim is not standing. If readiness-cert.py exits non-zero it prints the failing clause and the objective that broke — that output is the refutation. File it, cite it: the certificate's own contract says it must yield.

Lifecycle

What happens when things change

EventWhat happens
Gates re-run per release cycleNew evidence, same file names.
A clause turns redThe public page flips to FALSE at the same URL — there is no archiving step to forget.
Evidence ages out (90 days, test/measurement tiers)The certificate renders FALSE until re-issued.
A pinned defect's ticket closesThe pin flips to a fixed-contract assertion; the red row turns green the same day.
The contract grows (PR-v2 = +C4 ∧ C5, PR-v3 = +C6)New contract version, new pointer file; the old one keeps its own status.

The one-paragraph version

It is a standing, machine-checkable predicate — not a badge. Three clauses, published checkers with failing exit codes, a corpus whose every test cites its contract. Provenance-stamped, expiring when stale, failing closed, carrying its boundary and known defects in public. It has refused to certify this project when the evidence turned against it — and it can be refuted by anyone with a terminal in under an hour. That — the refutability, not the green checkmark — is what makes it worth trusting.

View the live certificate → Download SuperJ