diff --git a/03-DESIGN/01-to-be/47-milestones/G-6-verbs-retires-and-answers.md b/03-DESIGN/01-to-be/47-milestones/G-6-verbs-retires-and-answers.md index 96f39caa..bc07c3cf 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-6-verbs-retires-and-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-6-verbs-retires-and-answers.md @@ -507,3 +507,9 @@ record it follows from, and replaces the builder's own choice where one was made releases a version; a build of another watched branch reserves none, publishes no version and is delivered by its build, its fingerprint, as every want names one. Why: the operator, 2026-11-10. How it is checked: whole (builder), a `beta` build reserves nothing and is delivered. +- §372 **The catalog's versions start from what is published.** At the new indexer's first start, `versions` is filled + once, as released, from each name's highest `published` version the builder's state `versions` held, read by + `builder_versions`; it is not filled again. Why: numbering reads only the catalog's released versions (§348), and + without this every first version under G would start below today's and Go's `@latest` would never move (the + design's choice, 2026-11-10). How it is checked: whole (indexer, builder), with `0.1.14` published before G, the + first G build of `0.1` is `0.1.15`. diff --git a/03-DESIGN/01-to-be/51-the-registries-keep-what-is-named.md b/03-DESIGN/01-to-be/51-the-registries-keep-what-is-named.md index 580bf6dd..9c89370d 100644 --- a/03-DESIGN/01-to-be/51-the-registries-keep-what-is-named.md +++ b/03-DESIGN/01-to-be/51-the-registries-keep-what-is-named.md @@ -6,7 +6,7 @@ code: - mesh-catalog modules/artifact-store-tools (the store's tools), modules/distribution (its program, holding the two image seats) - mesh-catalog modules/gitea (package retention; the two package seats' verbs in its Go bundle) - mesh-catalog modules/mesh-build-go, modules/mesh-build-node, modules/mesh-build-image (publishing through the seats) - - mesh-delivery modules/mesh-delivery-builder (versions, tag asks; from milestone G a package numbered at its publication, the seat `mesh-builds`), the forge bridge, the indexer, the checker, the assigner, modules/mesh-delivery-pipeline (`tag-wanted` from milestone G) + - mesh-delivery modules/mesh-delivery-builder (versions, tag asks; from milestone G a module's version reserved at its build's start and released by the catalog, the seat `mesh-builds`), the forge bridge, the indexer, the checker, the assigner, modules/mesh-delivery-pipeline (`tag-wanted` from milestone G) - mesh-sdk (the bus helper for sending in parts) - mesh-catalog modules/docker (image pruning) - mesh-host internal/apply (every new image of a module pulled before any of its containers is replaced; a failed pull applied again on the status view's `settled` for the store's holder, and at the node-engine's start), internal/compose (each routed image reference written with its seat and that seat's holder) @@ -266,24 +266,30 @@ the verb. ### The versions -- **From the delivery of design 47's milestone G, a package is numbered when it is published** (ADR 0666 §15). The - builder numbers a package's version at its publication, never only when its build is claimed: a package's trunk - build is claimed with no number and built by its digest, and once its build is done the builder gives it the next - count of its series, under compare-and-set, and says `numbered`, on which the build module calls `publish` with - the version and the held digest, as below for a floor not yet known. A build of an older source revision of the - same watched branch than one already numbered for that name is not numbered and publishes nothing, so a version never - names older content than the one below it. When the holder says `published`, the builder says the publication as the - event `package-published` of its seat `mesh-builds` (the name, the version, the fingerprint, the commit, the watched - branch). On it every artifact with a "published before it builds" edge to the package is rebuilt against the new - version, and the pipeline runner, which consumes the event, starts its pipeline (ADR 0666 §15; design 47, *A publish - rebuilds*); - nothing else is rebuilt, and a change to a package's tests alone publishes nothing. This removes the claim's wait - for earlier merges' numbers below, which held a group on 2026-11-09 (research 086, Findings). Why at publication: a - number given at the claim must wait for every earlier merge's number, and a build that never publishes keeps a - number nothing holds. An image, bundle or archive keeps the rule below. How it is checked: in the builder's - whole-module test a package's trunk build is numbered only once built, an older revision's build after a newer one - publishes nothing, `package-published` is said once per publication, and only the importing artifacts rebuild - (design 47, test 80). +- **From the delivery of design 47's milestone G, a module's version is reserved at its build's start and released + when every artifact is published** (the operator, 2026-11-10 about 21:40 CET; design 47 G §52, §348, §349, §368 to + §371). A module's manifest says its `version`, `MAJOR.MINOR`, and no custom version (`beta`, `alpha`) exists for now + (G §368). The patch is the next after the highest version the catalog holds released for that `MAJOR.MINOR`, 0 for + one it holds none of; the builder reserves it when the module's build starts, in its key `reserved` for the module + and `MAJOR.MINOR` (G §369), and passes it to the build of every artifact as a build argument, so code and packed + files carry it (G §370): a Go package is tagged `vMAJOR.MINOR.PATCH`, in git under its module directory's prefix + (`go/vMAJOR.MINOR.PATCH`), which departs from ADR 0573 §2 (a Go package's version is its trunk commit) by the + operator's choice, a later research bringing the record in line. Each artifact published is said as + `package-published` of the seat `mesh-builds` (ADR 0666 §15), on which every artifact with a "published before it + builds" edge to it is rebuilt against the new version and its pipeline started (design 47, *A publish rebuilds*); + nothing else is rebuilt, and a change to a package's tests alone publishes nothing. The version is released only + once every artifact of the module is published at it: the catalog, the seat `mesh-catalog`, then holds it and says + `version-released`, and its `versions` is the one list of released versions, which numbering alone reads (G §348, + §349). A failed publish leaves the version reserved, and `builder_publish_again` publishes the missing artifacts + under the same version. Only a build of the registration's first watched branch reserves and releases a version; a + build of another watched branch is delivered by its build, with none (G §371). The builder no longer numbers a + build at its claim or at its publication, says no `numbered` or `version.numbered` for a module's versions, and + keeps no list of them of its own: the bullets below on the claim's numbering, the numbering per source revision, the + builder's state `versions`, the floor and the event `numbered` hold until that delivery only. Numbering continues above what is published today, the catalog filled once from it (G §372). Why reserved before the build: a Go module zip and a TypeScript package carry their + version inside the file, so a number given at publication could not be valid for a digest built before it; this + departs from ADR 0666 §15's numbering at publication by the operator's choice. How it is checked: design 47's test + 102, and in the builder's whole-module test a version is reserved at the build's start, released once both of a + module's artifacts are published, and published again under the same version after a failed publish. - **A build that cannot read the published packages refuses**, naming the unread state, never building against a guess (ADR 0666 §15; design 47, test 70). - **Until that delivery, the builder numbers every trunk build** of a package, image, bundle or archive at its claim: the package series