Skip to content

Architecture

sarr-io edited this page Jun 14, 2026 · 21 revisions

Architecture

Zinc is a small executor over three boundaries:

Circuitry draws the shape.
Packages perform capabilities.
Limbo is the open fragment fabric.
Zinc assembles fragments.

Boundaries

  • Circuitry owns language semantics: takes, uses, does, gives, bindings, composition, diagnostics, and normalization.
  • Packages own adapters, tools, providers, shells, OS behavior, setup/check/remove hooks, and config interpretation.
  • Zinc resolves package refs, loads config, binds current values, forms exact package requests, chooses fragments, and writes assembly fragments.
  • Limbo stores the visible execution surface.

Core fabric

The foundational Limbo shape is only:

packages(package, root)
fragments(fragment, target, request, result, time)
choices(choice, fragment)
config(key, value)

A fragment is completed work:

target + request -> result

Identity is byte identity at the Zinc/package boundary:

choice   = hash(target + request)
fragment = hash(target + request + result)

A choice is current memory. It says which fragment answers a target/request pair now.

Assembly

A substrate or assembly is not a table. It is a fragment:

target  = zinc.assembly
request = source path + run args
result  = assembled output/material

Package work is also a fragment:

target  = package adapter identity
request = exact bytes Zinc handed to the package
result  = exact bytes the package returned

Zinc does not multiply runtime tables around work. Runtime interpretation comes from fragments and choices.

Execution

zn run prepares an assembly fragment and advances it:

prepare(source, args) -> assembly fragment
advance(assembly)     -> advanced(path) | complete(result) | waiting

Repeated equivalent package work uses the existing choice. Changed input or instruction material produces a different choice.

Clone this wiki locally