From 56e78612dcac923bfbaa1a1a0c806ed9554dbc7f Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 8 Oct 2026 15:50:36 +0200 Subject: [PATCH] ADR 0257: the sweep after a build leaves an index for a confirmed collect Let go of alone, an index's platforms would stay for ever under a collected record (re-review of #207). --- ...ilds-that-stood-on-it-and-held-once-per-image.md | 13 +++++++++---- .../51-the-registries-keep-what-is-named.md | 5 +++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/02-DECISIONS/0257-a-copied-base-is-recorded-where-it-is-copied-kept-by-the-builds-that-stood-on-it-and-held-once-per-image.md b/02-DECISIONS/0257-a-copied-base-is-recorded-where-it-is-copied-kept-by-the-builds-that-stood-on-it-and-held-once-per-image.md index cea384a6..7a082ab2 100644 --- a/02-DECISIONS/0257-a-copied-base-is-recorded-where-it-is-copied-kept-by-the-builds-that-stood-on-it-and-held-once-per-image.md +++ b/02-DECISIONS/0257-a-copied-base-is-recorded-where-it-is-copied-kept-by-the-builds-that-stood-on-it-and-held-once-per-image.md @@ -84,7 +84,9 @@ Windows included. 4. **Let the index go with the platform manifests it names that no kept index of the repository also names, platforms first, only in a collect a person confirmed.** Chosen. The store tools can see every manifest in a repository, and their dry run lists each one that stays and would lose a platform. A - person reads that before confirming. The sweep after a build lets an index go alone, as it did before. + person reads that before confirming. The sweep after a build does not touch an index: it leaves it + eligible for that collect. Letting it go alone would be option 1, and would record it as collected, + so no later collect would offer it again and its platforms would stay for ever. **The copies no record names**, made before this record by a failed build, or before builds kept what they stood on. @@ -130,8 +132,10 @@ copies alone: another module's artifact is still kept by that module's own build a confirmed `collect` reads, for every repository it will touch, which platform manifests the kept indexes there name. If any of those reads fails, it lets nothing go. Then, for each index it lets go of, it first deletes the platform manifests that no kept index of the same repository names, and deletes the -index last. A collect cut short leaves the index to be asked about again. The sweep after a build lets an -index go alone. This applies to every index the mesh lets go of, upstream artifacts included. +index last. A collect cut short leaves the index to be asked about again. The sweep after a build asks +the store whether each eligible reference is an index (one read of its manifest). It skips every index, +leaving it eligible and not recorded as collected, and lets go of everything else as before; a read that +fails stops the sweep. This applies to every index the mesh lets go of, upstream artifacts included. **5. A person may record a copy that no record names.** The controller's `mirrors` verb lists the copies the records hold, with their states. Given references, it records the ones that are in a repository only @@ -203,7 +207,8 @@ ADR 0097 is superseded in one sentence only: a base is copied into the image's o - **The sweep.** - Through the records, a confirmed collect lets an eligible index go with its own platform, platforms first, and leaves the platform a kept index of the same repository names. - - The sweep after a build lets an index go alone. + - The sweep after a build leaves an eligible index eligible and lets an image go, and a later confirmed + collect takes the index with its own platform. - An image is one delete. - A kept index the store will not answer for stops a confirmed collect before its first delete, and an index in a repository not read beforehand is kept. 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 b91ea5c7..03611752 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 @@ -116,7 +116,8 @@ A build that stands on an image published elsewhere copies it into the store fir - **An index goes with its platforms only in a confirmed collect.** Before its first delete, it reads which platforms the kept indexes of every repository it touches name, and lets nothing go if a read fails. It deletes the platform manifests an index names that no kept index of its repository also - names, and deletes the index last. The sweep after a build lets an index go alone. + names, and deletes the index last. The sweep after a build skips every eligible index and leaves it + eligible for such a collect; it lets other eligible artifacts go as before. - **A copy no record names** waits for a person. `artifact_store_references` lists each one in `unrecorded_mirrors`, with what it alone marks. The controller's `mirrors` verb records the ones a person names, and the sweep then decides about them. @@ -130,7 +131,7 @@ A build that stands on an image published elsewhere copies it into the store fir runs after a build: every kept archive held first, then each eligible reference let go and recorded as collected, stopping at the first refusal by the store. It is bounded by a count and a time, says what is left, and is a hand-act recorded with its `why`. A confirmed collect lets an index go with its - own platform manifests (ADR 0257); the sweep after a build lets it go alone. + own platform manifests (ADR 0257); the sweep after a build leaves an eligible index for it. - **`mirrors`** lists the copied bases the records hold, with their states. Given references, it records the copies that are in a repository only the copy step writes and that the store holds. It is a dry run without `confirm`; with `confirm` it needs a `why`, and it is a hand act, logged once the copies