Adds design/models/kernel-extensions.md as the architectural anchor
for the kernel-extensions arc — a plugin-style mechanism for
domain-specific types that live outside ailang-core and present
themselves to user code as if they were primitives.
The whitepaper articulates a two-tier extension architecture:
- Base extensions ship as a kernel-tier module + Rust codegen
intercepts emitting LLVM IR. They provide primitives that are
not expressible in AILang itself (mutable indexed storage,
hardware/OS interaction, library wrappers). The first base
extension will be RawBuf.
- Library extensions ship as pure AILang code in a kernel-tier
.ail module, wrapping a base extension to provide domain-specific
API. The first library extension will be Series.
Four language-level mechanisms enable this:
1. Type-scoped namespacing — `<TypeName>.<member>` resolves to
the type's home module.
2. The `new` term construct — `(new T args...)` calls the `new`
def in T's home module.
3. Kernel-tier modules — `Module.kernel: bool` flag with
auto-import (generalises the existing hardcoded prelude
auto-injection at loader.rs:98-108 + workspace.rs:308-311,
467, 2655 into a flag-driven mechanism).
4. `param-in` — closed-set type-parameter restriction on TypeDefs.
The full Series-via-SMA worked example serves as the clause-1
feature-acceptance evidence: the .ail program an LLM author
naturally writes when asked to compute a moving average over
streaming float data. Series.push uses ownership-mode threading
(`(own (Series a)) -> (own (Series a))`), not a separate
`Series` effect — mutation discipline is mode-tracked, not
effect-tracked, consistent with AILang's existing memory model.
Coexistence with existing mechanisms (class dispatch, algebraic
effects, RC + uniqueness, heap-Str ABI, term-ctor) is named
explicitly. Migration policy stated: pre-production stage, so
the right design is chosen even where it requires rewriting
existing test fixtures.
STATUS header marks the document as design-accepted, impl in
progress across milestones #6 → #7 → #8. As each closes, the
relevant sections transition from forward-looking to present
state per the honesty-rule.
design/INDEX.md gains a corresponding Models-table entry.
Refs Gitea milestones #6 (kernel-extension-mechanics), #7
(raw-buf), #8 (series). Closes#2 (Flat array/slice primitive)
as duplicate of #7. Closes#4 (Stateful islands) as superseded
by this arc — the streaming-analytics workload class the
stateful-islands design targeted is delivered by kernel-extensions
without re-introducing `mut`/`var`/`assign` (atomically removed
in `remove-mut-var-assign.1`) or adding a `!Mut` effect.