From d7c57e97e8e575a6f6ffe7d36f70ac9ad3be2d9e Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Mon, 10 Aug 2026 19:06:57 +0900 Subject: [PATCH] docs: distinguish provider requirements from selections --- docs/build-system.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/build-system.md b/docs/build-system.md index cf0c6903..6c183b31 100644 --- a/docs/build-system.md +++ b/docs/build-system.md @@ -936,7 +936,8 @@ A `ww.package` action consumes: - the compiler/backend and toolchain resources; - B/H/T, target descriptor, profile, language/compiler/export/object/runtime protocols, and manifest/lock schemas; -- package-specific native-provider declarations; and +- package-specific predeclared native-provider slots, distinct from selected + concrete provider declarations; and - its literal built-in environment and sandbox policy. It emits `.wwe`, one target object, and canonical link metadata. A private change @@ -1244,7 +1245,7 @@ A profile is toolchain data, not an open project map: | 9 | environment | sorted literal map, no secrets | | 10 | input slots | sorted `(name, edge kind, producer/output or source ref, type, mode)` | | 11 | source selection | ordered selected membership plus reasons | -| 12 | native/link template | closed provider and ordered link records | +| 12 | native/link template | closed predeclared provider slots, concrete providers, and ordered link records | | 13 | outputs | sorted name/path/type/mode/canonicalization | | 14 | sandbox/reproducibility | exact policy/version/bounds/class | @@ -1257,6 +1258,14 @@ ABI/layout/contract digests embedded in a referenced sidecar or contract are semantic verification values, not authority to read another object. No producer action key substitutes for a content digest. +The tag-12 native/link record separately encodes the sorted predeclared provider +slots, concrete selected-provider declarations, and the optional ordered link +policy or resolved plan. A `ww.package` action contains exactly its +`PackageConfigV1` native-slot list and empty concrete-provider and link-policy/ +plan values; finalization copies that slot list unchanged. Concrete provider +selection does not enter a package action merely because the provider satisfies +one of those slots. + Finalization interns every source, direct export, package/native object, archive, shared library, header/sysroot tree, generated output, tool/resource, CRT, loader, script, and init dispatcher into exactly one named template input. @@ -1534,7 +1543,10 @@ canonical type graph; 8 sorted exported declarations/constants/foreign symbols; defines excluded non-semantic fields. `PackageLinkV1` (`.wwlm`) tags are 1 schema, 2 package identity, 3 platform/object/runtime ABI, 4 package-object digest, 5 defined/required foreign symbols, 6 predeclared provider slots/contracts, 7 init -symbol/dependency facts, 8 install/link requirements. It cannot add a graph edge. +symbol/dependency facts, 8 install/link requirements. Tag 6 contains exactly one +compiler-derived `ProviderContractV1` for each package action tag-12 predeclared +slot, and its sorted slot projection must equal that predeclared list. It cannot +add a provider slot or graph edge. `InstallManifestV1` tags are 1 schema, 2 product identity/key, 3 sorted entries `(artifact digest, mode, relative destination)`, 4 runtime-resolution policy, 5