Each directory here is an ordinary .ikproj IronKernel package: ik test
runs its tests, ik pack builds the .nupkg. They are the batteries the
language ships with, grown deliberately — small surfaces, report-consistent
conventions, tests that can fail for the right reason.
| Package | Provides |
|---|---|
IronKernel.Test |
Testing DSL: checks as operatives that report the failing source form, error assertions, suites, a tally that fails ik test when a check does |
IronKernel.Collections |
Folds, slicing, stable sort, sets over equal?, alist editing, the vector/list bridge — pure Kernel |
IronKernel.Strings |
Search, split/join, case, trimming, padding, characters, invariant number conversion, variadic format — ordinal semantics throughout |
IronKernel.Json |
Grammar-enforcing JSON reader with offsets in its errors, a writer that refuses what JSON cannot carry, pretty-printing, path traversal |
IronKernel.Math |
Statistics, combinatorics, number theory — exact wherever the mathematics allows: means as ratios, isqrt and factorial at any size, primes, factorizations, totients |
IronKernel.Time |
Dates and durations over System.DateTime/System.TimeSpan: UTC-disciplined instants the arithmetic tower adds and subtracts, calendar operations, unix time, invariant ISO 8601 formatting and parsing |
IronKernel.Amb |
Nondeterministic search: amb, require, bracketed choice, pluggable search strategies over multi-shot delimited continuations |
Packages test with IronKernel.Test through a test-scoped reference
(IronKernelScope="test", written by ik add <id> <ver> --test): it loads
for ik test only and never appears in a published package's dependencies.
IronKernel.Json additionally depends on IronKernel.Strings at runtime,
and IronKernel.Math on IronKernel.Collections.
Until these are published to NuGet.org, siblings resolve through the local
folder feeds in NuGet.config. Seed them once per checkout:
cd IronKernel.Test && ik pack
cd ../IronKernel.Strings && ik pack
cd ../IronKernel.Collections && ik packPackages that consume a locally packed sibling do not commit
packages.lock.json — a local .nupkg has no stable content hash, so a
committed lock would fail locked restore everywhere else. Once a dependency
is on NuGet.org the lock can return.
NuGet caches by id and version: after changing a dependency without bumping
its version, delete ~/.nuget/packages/<id>/<version> (and the consumer's
obj/) so the repacked copy is picked up.
- Ports/IO — structured file and path helpers over the capability-gated port primitives.
- A conformance-style docs page per package, generated from its tests,
the way
docs/kernel-conformance.mdis generated from the suite.