Section 23 of 26
Packs hosts and bodies
One Conduit language for plot, host, body and pack source
The repository has four canonical .conduit document roles:
plot portable semantic meaning
host intended finite Host construction
body intended Body/Part/Host construction and spore binding
pack finite source/shipment/dependency description
They share one tokenizer, declaration/value syntax, spans and diagnostic model. There is no separate public TOML/YAML/JSON authoring language for host or body construction.
Canonical source families include:
program.conduit
machine.host.conduit
house.body.conduit
Current *.host.conduit source lowers into the accepted checked host configuration/profile -> build -> image path.
Current *.body.conduit source composes checked host sources and bounded body/spore construction metadata.
Construction source never makes live runtime truth:
host source
!= HostId / BootId
!= current offers / observations / authority
!= plan / play
body source
!= current membership/presence
!= current lines
!= plan / play
body birth itself consumes checked ordinary plots as the initial workload under the current body lifecycle; there is no privileged Seed semantic identity.
Do not invent another parser or embed TOML/YAML blobs inside .conduit.
The exact existing host/body grammar is implemented. New fields or declaration shapes needed for richer mask/resource/facility composition must be earned as minimal general extensions, not treated as permission to redesign the document roles.
Provenance: #1752, #1780, #2284. Living native/host pressure test: #4117.
Generics
Reusable plots use named type parameters such as item: type, with named
application arguments when inference is insufficient. Native type families
have a separate checked surface, type Pair<T> = ... and Pair<Text>. Both
specialize to finite checked meaning before play. See
Current language surface.
plot identity (
item: type
>> value: item
result: item >>
) {
value >> result
}
name: type is current grammar; explicit application uses ordinary named
arguments where inference is insufficient, for example identity(item = Text).
See #4059 and the complete specialization example.
Native Type families also admit finite U16 Info parameters for checked shapes
and independent sequence capacities. See
value parameters;
#5326 tracks independent stable acceptance.
No implicit any, wildcard zoo, or runtime type erasure requirement.
Provenance: #4059.
Packs, imports, resolution and distribution
Keep these identities distinct:
semantic Kind path
authored Plot/source identity
pack identity + pack version
module/source path
local alias
resolved pack content digest
distribution location
git repository + commit
installed artifact
Back implementation/artifact identity
A slash-separated kind path is not a pack path, module path, URL, git identity or installed artifact.
Canonical ecosystem laws:
- packs explicitly ship their public source surface;
- imports never grant runtime authority;
- build-time pack acquisition is separate from runtime network/line effects;
- pack version is not kind semantic contract identity;
- git commit is provenance/distribution truth, not semantic identity;
- accepted builds resolve a finite exact dependency graph;
- a lock representation pins exact content/versions/commits and contains no credentials or machine-specific absolute paths;
- locked local content permits offline check/build;
- different carriers may provide identical pack content;
- acquired bytes are untrusted until digest/schema/pack validation succeeds;
- no arbitrary install/build scripts by default.
Source import spelling is canonical with syntax:
with audio/plots/tone
with math/geometry/{vector2, matrix2}
with house/sensors/temperature as room-temperature
with ./support/helper as worker
with aliases may be ordinary identifiers or admissible gear glyphs under #4335. Pack authoring uses pack.conduit; generated exact lock truth uses conduit.lock.
Pack versioning may use familiar version syntax for ecosystem convenience, but Conduit's checker decides semantic compatibility; version numbers are not a universal compatibility oracle.
Provenance: #4054–#4058.
A Body construction source
This is the complete checked-in two-host fixture:
body std-line {
schema = 2
id = "body:std-line"
host = {name: "clock", part: "part:clock", configuration: "../../../targets/std/profiles/linux-clock.host.conduit", spore: {join_mode: "prejoined", output: "native-bundle"}}
host = {name: "serial", part: "part:serial", configuration: "../../../targets/std/profiles/linux-serial.host.conduit", spore: {join_mode: "prejoined", output: "native-bundle"}}
}
Relative configuration paths resolve from the source's location. These host and part names are construction facts; they do not establish present membership, authority or a live line. A spore's declared join mode and output describe the construction artifact. Actual provisioning and admission require their own runtime evidence. Host target/resource/Base/Back examples are in Current language surface.