//! Kernel-tier stub module — minimal ratifying fixture for the //! kernel-extension-mechanics milestone (prep.3). //! //! The stub exists solely to exercise the shipped mechanisms //! end-to-end: `Module.kernel`, `TypeDef.param-in`, and type-scoped //! resolution (the stub's type is visible to every consumer without //! an `(import …)` declaration). //! //! No domain content. The stub may be retired or repositioned when //! a real second kernel-tier consumer (the `raw-buf` milestone) lands. //! //! This crate carries ONLY the embedded Form-A text and the parsed //! `Module` value. The parse hop itself lives in `ailang-surface` //! (see `ailang_surface::parse_kernel_stub`) so the //! crate-dependency graph stays acyclic: `ailang-surface → //! ailang-kernel-stub → ailang-core` (no back-edge from //! `ailang-kernel-stub` to `ailang-surface`). /// Source-of-truth Form-A text for the stub kernel module. Parsed /// by `ailang_surface::parse_kernel_stub` (and round-trip-pinned by /// `kernel_stub_module_round_trips` in `design_schema_drift.rs`). /// /// Ships a `(fn new ...)` def so consumers can spell `(new StubT 42)`, /// the worked-consumer example from prep.3 of the spec — without it, /// the stub's `Term::New` end-to-end ratification story is broken /// (per fieldtest F4, 2026-05-28). pub const STUB_AIL: &str = r#"(module kernel_stub (kernel) (data StubT (vars a) (ctor Stub a) (param-in (a Int Float))) (fn new (doc "Construct StubT from an Int. Exercises Term::New end-to-end.") (type (fn-type (params (con Int)) (ret (con StubT (con Int))))) (params x) (body (term-ctor StubT Stub x)))) "#;