Axis / Build System / Recipe
Recipe
A Recipe is an authored declaration of identity, dependencies, initial options and behavior. It owns source provenance and declared values. A Catalog holds declarations and captured code; invocation is supplied as an explicit capability.
Source and concrete API: recipe.go.
Properties
-
Recipe:ID,Name,Kind,Scope, sourceFileandLine, authoredFields, and availableHandlers. -
Catalog: declarations, source files and import records;SourceFSandInvokeare caller-supplied capabilities. -
Call: invocation name, immutable context values, an argument and restricted callbacks for configuration, source inspection or execution.InputandArtifactoptionally resolve bound launch inputs and support files. -
SourceArchive,SourceFileandSourceFetcher: source descriptors, inspection and verified acquisition.
Behavior
Catalog.Find locates a declaration by kind and explicit scope. Catalog.Code captures its module and imports for identity. The catalog does not execute construction merely because it loads a declaration.
ParseSource interprets a source descriptor. SourceFetcher.Fetch acquires verified bytes; SourceFile inspects archive entries without retaining an extracted tree. Local directories and HTTP(S) TAR or gzip-compressed TAR archives are implemented. Git and XZ acquisition fail explicitly.
An archive URL string strips one leading component. An explicit archive descriptor defaults to zero stripped components. Paths must not escape the extraction root. A checksum-less URL is pinned on first acquisition; frozen acquisition requires a matching existing pin. Content mismatches fail before use. Local paths are resolved relative to their declaring module.
ParseRequirement and CheckVersion support =, >, >=, < and <= over dot-separated nonnegative decimal components. Missing trailing components compare as zero. Comma-separated constraints are conjunctive. Opaque labels support exact equality only; absent or opaque versions cannot satisfy ranges. Software version and source checksum are distinct.
Values and boundaries
Names and keys are nonempty UTF-8 strings without NUL or control characters. Names cannot contain path separators or traversal segments; axis: is reserved for supplied declarations. Names are not physical filesystem paths.
Configuration values are booleans, strings, finite numbers, string-keyed dictionaries and dense lists. Cycles, functions, sparse lists and mixed-key tables are invalid. Integers must be exactly representable. Caller-owned capabilities define what a handler can do; this package does not grant ambient filesystem, process or network access. Concurrent callers keep catalog declarations and captured code immutable and supply an Invoke implementation safe for independent invocations.
Language adapter
The Lua adapter owns file loading, registration syntax and handler marshalling. The native API remains usable without that adapter.