From 9671cc2febb6b6306592c8376257e083577cfcaf Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Mon, 10 Aug 2026 17:15:44 +0900 Subject: [PATCH] docs: close Phase 0 protocol gaps --- docs/build-system.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/build-system.md b/docs/build-system.md index 7834eef4..cf0c6903 100644 --- a/docs/build-system.md +++ b/docs/build-system.md @@ -165,7 +165,7 @@ absence of a garbage collector says nothing about version resolution. | **module** | A distributable, versioned source tree rooted by one `ww.mod`, declaring one globally stable module identity and containing zero or more packages. | | **project** | The module or standalone package selected by the user's current command, including its declared products. | | **workspace** | A local, non-published set of module-identity-to-directory overlays described by `ww.work`. It changes location, never identity. | -| **dependency** | A typed directed edge: package import, generated-input edge, tool edge, native-provider edge, runtime edge, or ordered link edge. The edge kind is never implicit. | +| **dependency** | A typed directed edge: package import, generated-input edge, tool edge, native-provider edge, runtime edge, ordered link edge, or source-input edge. A source-input edge is content-rooted and has no producer action; it is valid in template/final action inputs but never in `GraphEdgeV1`. The edge kind is never implicit. | | **target/platform descriptor** | A canonical architecture/platform/ABI/object/CPU/runtime description. An action labels descriptors by role: execution `B`, product `H`, and optional compiler-output `T`. A target triple is only a short lookup name. | | **artifact** | An immutable byte string or canonical directory tree produced by an action and named by a content digest. Materialized files are copies or links, not the artifact's identity. | | **toolchain** | An immutable descriptor and content closure containing the compiler, action protocol, export/ABI versions, target descriptors, resource files, runtime implementations, and pinned assembler/linker/archive tools. | @@ -394,13 +394,15 @@ The schema tables in section 6.9 close all remaining fields. There is deliberately no general `[settings]` escape hatch. The root `main` package is the default executable product, named after the -module's last segment. Libraries need no product declaration to be imported. +module's last segment, with explicit normalized linkage `dynamic` and runtime +`hosted`. Libraries need no product declaration to be imported. Additional or non-default outputs are explicit: ```text product "inspect" { kind = "exe" root = "cmd/inspect" + linkage = "dynamic" } ``` @@ -1280,8 +1282,9 @@ digest. `GraphSnapshotV1` tags are 1 schema, 2 logical root, 3 sorted 4 optional typed action-record digest, and 5 optional typed action-result digest. `GraphEdgeV1` tags are 1 consumer node ID, 2 consumer input slot, 3 producer node ID, 4 producer output name, and 5 edge kind; edges sort by that five-field tuple. -Non-action source inputs live only in the consumer template rather than invented -graph nodes. The project index contains only its typed graph-snapshot digest. +The `source-input` kind is invalid in `GraphEdgeV1`. Non-action source inputs +live only in the consumer template rather than invented graph nodes. The project +index contains only its typed graph-snapshot digest. #### Target, toolchain, native, interface, and handoff records @@ -2093,6 +2096,7 @@ select one explicitly: product "hello" { kind = "exe" root = "." + linkage = "dynamic" providers = [ { slot = "c:zlib@1", use = "example.org/zlib#zlib-linux-aarch64" } ]