[package] name = "jouleclaw-batch-invariant" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true authors.workspace = true description = "Pinned batch-invariant kernel registry + verification gate. Closes JouleClaw's determinism story at the physics layer: a backend that claims batch-invariant inference must commit to a *known* kernel set (SGLang deterministic-inference Sept 2025; Thinking Machines batch-invariant ops; future Rust ports). KernelSetRegistry holds the canonical descriptors; BatchInvarianceGate validates an InferencePin's kernel_versions against the registry and refuses if any operator drifts. Pure types + gate — no GPU code, no FFI; the actual invariant kernels live in production backends, and a Rust port lands as a follow-on." [dependencies] jouleclaw-pin = { path = "../jouleclaw-pin" } serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } blake3 = { workspace = true }