3.6 KiB
Build Artifacts and Deterministic Packing Specification
Status: Draft
Scope: Runtime-facing artifacts and deterministic build behavior
Purpose: Define how the packer emits assets.pa and companion artifacts.
Authority and Precedence
This specification consolidates the initial packer agenda and decision wave into normative form.
Runtime-side reading semantics remain upstream in:
../runtime/docs/runtime/specs/13-cartridge.md../runtime/docs/runtime/specs/15-asset-management.md
Core Rules
assets.pais the authoritative runtime-facing artifact.- Companion JSON files do not replace the internal header as the runtime contract.
- The global asset table order is deterministic by increasing
asset_id. - The runtime-facing
asset_idis the same stableasset_idallocated by the packer registry.
assets.pa Structure
Baseline structure:
[fixed binary prelude]
[canonical JSON header]
[binary payload region]
Prelude Fields
The baseline prelude includes:
magicschema_versionheader_lenpayload_offsetflagsreserved
Rules:
flagsandreservedexist from day 1;flags = 0unless later specified otherwise;reserved = 0unless later specified otherwise;header_checksumis not part of the baseline envelope contract.
Canonical JSON Header
The header is serialized canonically.
Rules:
- UTF-8 encoding;
- no extra whitespace;
- object keys sorted lexicographically;
- arrays preserve declared order;
- canonicalization applies recursively;
- runtime-facing header values in v1 must avoid floating-point numbers.
Header Contents
The header carries:
asset_tablepreload
Asset Table
asset_table is emitted as a deterministically ordered list of asset entries.
Rules:
- one entry per included asset in the current build set;
- no secondary runtime-only identity layer;
- no synthetic dense reindexing layer;
asset_nameremains present as logical/API-facing metadata.
Preload
Preload is emitted deterministically from per-asset declaration.
Rules:
- assets with
preload.enabled = falsedo not appear in emitted preload data; - assets with
preload.enabled = truedo appear; - preload ordering is deterministic by increasing
asset_id.
Companion Artifacts
The baseline companion artifacts are:
build/asset_table.jsonbuild/preload.jsonbuild/asset_table_metadata.json
Rules:
build/asset_table.jsonmirrorsheader.asset_table1:1;build/preload.jsonmirrorsheader.preload1:1;build/asset_table_metadata.jsonis tooling-only;- richer tooling data must not be added to the 1:1 mirror files.
Alignment and Offsets
Alignment exists only when explicitly required by spec.
Rules:
- there is no implicit baseline alignment beyond envelope and format requirements;
- any required alignment must be normative and visible;
- emitted offsets are always relative to the payload region, never the start of the full file.
Determinism
Equivalent build inputs must produce equivalent outputs.
Rules:
- no filesystem iteration dependence;
- no hidden defaults that affect output;
- no usage-based hot-first packing in the baseline contract;
- determinism is preferred over speculative physical-layout optimization.
Non-Goals
- per-format payload internals for every output family
- future locality optimization policy
- cartridge-level integrity/signature strategy
Exit Criteria
This specification is complete enough when:
- runtime-facing artifact authority is explicit;
- companion artifacts are bounded;
- emitted ordering and header behavior are deterministic.