Clean up codebase: rename stdlib layer, strip porting residue, fix tooling

Rename src/jolt -> stdlib (the runtime-loaded layer; jolt-core stays the
seed-baked layer) and update the loader / emit-image / doc paths. Drop dead
code: the spike/ experiments, the duplicate clojuredocs-export.edn (json moves
to tools/), the Janet-era jolt.http binding, and the orphaned
persistent_vector.clj whose ns/path didn't even match.

Strip porting residue from comments and docstrings across host/chez, jolt-core,
stdlib, tests, and docs: internal issue ids, "Phase N" markers, and the "vs
Janet" historical exposition, leaving present-tense descriptions and the real
JVM-Clojure semantic contrasts. Same pass over the corpus suite labels. The seed
is unchanged (docstrings/comments aren't emitted), so the self-host fixpoint and
corpus are untouched.

Port tools/spec_coverage.py off the dead janet probe to bin/joltc and regenerate
coverage.md; drop the dead :host/janet rule from certify.clj and regenerate the
conformance profile. Add docs/host-interop.md (the JVM shims and how to register
your own host class from a library) and a writing-style note in CLAUDE.md.

Stabilize the four racy concurrency corpus cases (future-cancel and agent
send/send-off): give the future a sleeping body and the agent a slow action, so
cancel reliably catches an in-flight future and deref reliably reads the
pre-update snapshot. They certify deterministically now, so drop their :flaky
allowlist entries and the orphaned legend.
This commit is contained in:
Yogthos 2026-06-22 22:18:00 -04:00
parent c18f8087f0
commit 33eff7c7d8
112 changed files with 970 additions and 1621 deletions

View file

@ -1,73 +1,53 @@
{:doc
"Conformance profile for test/chez/corpus.edn, generated by certify.clj. Each entry is a NON-portable case (keyed by [suite label]) and the host feature(s) it requires. Cases NOT listed are portable — they pass on any faithful Clojure. A runtime's conformance LEVEL = portable + the feature families it implements. See SPEC.md.",
:clojure-version "1.12.5",
:portable-count 2674,
:non-portable-count 246,
:portable-count 2735,
:non-portable-count 167,
:feature-counts
{:concurrency/snapshot 5,
:host/arrays 12,
:host/janet 16,
:host/jvm-interop 174,
:impl/representation 1,
:numerics/double-only 17,
{:host/arrays 10,
:host/jvm-interop 149,
:perf/unbounded 1,
:printer/jolt 4,
:reader/jolt 13,
:strictness/jolt 3},
:printer/jolt 2,
:reader/jolt 4,
:strictness/jolt 1},
:entries
[{:suite "*ns* / identity & printing",
:label "tracks in-ns",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.core / futures — predicates",
:label "cancel an in-flight future returns true",
:bucket :divergent,
:features [:concurrency/snapshot]}
{:suite "clojure.core / futures — snapshot (copy) semantics",
:label "captured atom is snapshotted, not shared",
:bucket :divergent,
:features [:concurrency/snapshot]}
{:suite "clojure.core / leaf batch (complement fnil munge etc.)",
:label "bigdec",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "clojure.core / leaf batch (complement fnil munge etc.)",
:label "supers empty set",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.core / pmap family",
:label "snapshot semantics",
:bucket :divergent,
:features [:concurrency/snapshot]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "PI",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "floor",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "pow",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "round",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "signum",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "sqrt",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "tan of 0",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "clojure.math (jolt-h79)",
{:suite "clojure.math",
:label "to-radians",
:bucket :jvm-error,
:features [:host/jvm-interop]}
@ -91,11 +71,6 @@
:label "try multi-body last",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite
"conformance / native-op parity (compile emits janet ops at guarded arities)",
:label "native unary div",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "conformance / try / catch",
:label "ex-data",
:bucket :jvm-error,
@ -108,14 +83,6 @@
:label "try catch",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "core / extenders",
:label "lists extended type",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "core / extenders",
:label "seq of tags",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "core / with-open",
:label "binding visible",
:bucket :jvm-error,
@ -124,10 +91,6 @@
:label "body result",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "core / with-open",
:label "close on throw",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "core / with-open",
:label "close runs",
:bucket :jvm-error,
@ -220,22 +183,6 @@
:label "global underive",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "host-interop / bake env scrub",
:label "full snapshot filtered to the allowlist",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "host-interop / bake env scrub",
:label "listed name still reads",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "host-interop / bake env scrub",
:label "unlisted name reads nil under the allowlist",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "host-interop / class tokens & readers",
:label "class name evaluates to canonical string",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "host-interop / class tokens & readers",
:label "dispatch-only class name",
:bucket :jvm-error,
@ -256,10 +203,6 @@
:label "HashMap put + size",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "host-interop / exception + HashMap shims",
:label "getMessage on a thrown string",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "host-interop / migratus class shims",
:label "Timestamp is millis",
:bucket :jvm-error,
@ -332,10 +275,6 @@
:label "String/valueOf nil",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "interop / StringReader & StringBuilder",
:label "line-seq over file reader",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / StringReader & StringBuilder",
:label "mark/reset",
:bucket :jvm-error,
@ -360,30 +299,6 @@
:label "method with args",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "interop / janet bridge",
:label "janet.os/clock is a number",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / janet bridge",
:label "janet.string module fn",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / janet bridge",
:label "jolt vector crosses as a janet table",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / janet bridge",
:label "module fn janet.<mod>/<name>",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / janet bridge",
:label "root builtin janet/<name>",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / janet bridge",
:label "root builtin janet/type",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / java.time shims",
:label "Instant instance",
:bucket :jvm-error,
@ -424,30 +339,6 @@
:label "withLocale chain",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "interop / jolt.interop",
:label "janet-type keyword",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / jolt.interop",
:label "janet-type list",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / jolt.interop",
:label "janet-type number",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / jolt.interop",
:label "janet-type quoted list",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "interop / jolt.interop",
:label "janet-type string",
:bucket :jvm-error,
:features [:host/janet]}
{:suite "io / *in* + with-in-str + read-line",
:label "*in* is bound",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "io / cold tagged types via print-method",
:label "atom override fires nested",
:bucket :divergent,
@ -480,18 +371,6 @@
:label "StringWriter accumulates",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "io / print-method multimethod",
:label "defmethod fires nested in a map",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "io / print-method multimethod",
:label "defmethod fires through prn",
:bucket :divergent,
:features [:printer/jolt]}
{:suite "io / print-method multimethod",
:label "defmethod overrides a record, top level",
:bucket :divergent,
:features [:printer/jolt]}
{:suite "io / print-method multimethod",
:label "direct builtin override",
:bucket :jvm-error,
@ -507,7 +386,7 @@
{:suite "io / slurp, spit, printf, flush (host-classified)",
:label "file-seq finds files",
:bucket :jvm-error,
:features [:host/janet]}
:features [:host/jvm-interop]}
{:suite "macros / core-overlay",
:label "assert message",
:bucket :jvm-error,
@ -520,22 +399,10 @@
:label "condp no match",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "macros / defmacro",
:label "macroexpand-1",
:bucket :divergent,
:features [:impl/representation]}
{:suite "macros / time, with-redefs, macroexpand",
:label "with-redefs restores on throw",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "maps / literal construction",
:label "source order through syntax-quote",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "metadata / def metadata",
:label "^Type tag on var",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "metadata / type hints",
:label "symbol hint -> :tag",
:bucket :divergent,
@ -568,42 +435,6 @@
:label "require :as registers the alias",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "numbers / arithmetic",
:label "divide to fraction",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "numbers / literal syntax",
:label "bigdec int M",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "numbers / literal syntax",
:label "bigdec suffix M",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "numbers / literal syntax",
:label "neg ratio",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "numbers / literal syntax",
:label "ratio -> double",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "numbers / literal syntax",
:label "ratio 3/4",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "numbers / printing of inf & nan",
:label "inf inside coll",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "numbers / printing of inf & nan",
:label "pr-str Infinity",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "predicates / compare, type, any? (stage 3)",
:label "type of record",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "predicates / overlay-migrated",
:label "keyword-identical?",
:bucket :jvm-error,
@ -620,54 +451,14 @@
:label "undefined?",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "predicates / tagged-value (Phase 4)",
{:suite "predicates / tagged-value",
:label "atom? no",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "predicates / tagged-value (Phase 4)",
{:suite "predicates / tagged-value",
:label "atom? yes",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "predicates / tagged-value (Phase 4)",
:label "chunked-seq? always false",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "reader / dispatch & sugar",
:label "reader cond :jolt",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "reader / dispatch & sugar",
:label "reader cond no match",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "reader / dispatch & sugar",
:label "reader cond splice",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "reader / dispatch & sugar",
:label "reader cond splice no match",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "reader / dispatch & sugar",
:label "reader conditional",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "reader / scalar literals",
:label "bigdec suffix M",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "reader / scalar literals",
:label "ratio -> double",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "reader / syntax-quote literal collapse (spec 2.4 S25)",
:label "bool nested",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "reader / syntax-quote literal collapse (spec 2.4 S25)",
:label "nil nested",
:bucket :divergent,
:features [:reader/jolt]}
{:suite "regex / Pattern statics & String regex methods",
:label "Pattern/MULTILINE ^",
:bucket :jvm-error,
@ -708,19 +499,19 @@
:label "re-pattern is regex?",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "set / nil element (jolt-bn2p)",
{:suite "set / nil element",
:label "transient conj! nil",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "set / nil element (jolt-bn2p)",
{:suite "set / nil element",
:label "transient contains? nil",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "set / nil element (jolt-bn2p)",
{:suite "set / nil element",
:label "transient disj! nil cnt",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "set / nil element (jolt-bn2p)",
{:suite "set / nil element",
:label "transient disj! removes",
:bucket :jvm-error,
:features [:host/jvm-interop]}
@ -744,14 +535,6 @@
:label "sorted-set? true",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "state / agents (synchronous shim)",
:label "send applies",
:bucket :divergent,
:features [:concurrency/snapshot]}
{:suite "state / agents (synchronous shim)",
:label "send-off applies",
:bucket :divergent,
:features [:concurrency/snapshot]}
{:suite "state / atoms",
:label "atom? on non-atom",
:bucket :jvm-error,
@ -764,14 +547,6 @@
:label "promise undelivered",
:bucket :timeout,
:features [:perf/unbounded]}
{:suite "transient / assoc! odd args throw",
:label "map dangling key",
:bucket :throws-mismatch,
:features [:strictness/jolt]}
{:suite "transient / assoc! odd args throw",
:label "vector dangling",
:bucket :throws-mismatch,
:features [:strictness/jolt]}
{:suite "transient / set",
:label "conj! dedups",
:bucket :jvm-error,
@ -804,22 +579,6 @@
:label "bean is the map",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
:label "class keyword",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
:label "class number",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
:label "class string",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
:label "definterface defines",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
:label "enumeration-seq",
:bucket :jvm-error,
@ -848,10 +607,6 @@
:label "update-proxy",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "aclone vec",
:bucket :jvm-error,
:features [:host/arrays]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "aset-boolean",
:bucket :jvm-error,
@ -884,58 +639,10 @@
:label "aset-short",
:bucket :jvm-error,
:features [:host/arrays]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "boolean-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "double-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "float-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "int-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "into-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "long-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "make-array",
:bucket :jvm-error,
:features [:host/arrays]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "short-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / array stubs (vectors + host buffers)",
:label "to-array",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / chunk family (eager equivalents) + cat",
:label "chunk round-trip",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / ns + REPL machinery",
:label "*in* bound",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / ns + REPL machinery",
:label "ns-imports empty user",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / primed + division + bit ops",
:label "/ ratio-as-double",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "untested / protocols: extend + extends?",
:label "extend registers",
:bucket :jvm-error,
@ -964,22 +671,6 @@
:label "chars first",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "untested / typed coercion views",
:label "double",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "untested / typed coercion views",
:label "doubles",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "untested / typed coercion views",
:label "float",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "untested / typed coercion views",
:label "floats",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "untested / typed coercion views",
:label "ints",
:bucket :jvm-error,
@ -991,16 +682,4 @@
{:suite "untested / typed coercion views",
:label "shorts",
:bucket :jvm-error,
:features [:host/jvm-interop]}
{:suite "untested / unchecked-* are plain ops",
:label "unchecked-char",
:bucket :divergent,
:features [:host/jvm-interop]}
{:suite "untested / unchecked-* are plain ops",
:label "unchecked-double",
:bucket :divergent,
:features [:numerics/double-only]}
{:suite "untested / unchecked-* are plain ops",
:label "unchecked-float",
:bucket :divergent,
:features [:numerics/double-only]}]}
:features [:host/jvm-interop]}]}