Skip to content

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:

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.