Skip to content

docs(fleet): the cache-policy rollout, recorded - #349

Merged
zackees merged 1 commit into
mainfrom
gen021-final-record
Oct 5, 2026
Merged

zackees merged 1 commit into
mainfrom
gen021-final-record

Conversation

@zackees

@zackees zackees commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Six declarations merged, ~180 GiB reclaimed

clud #1801 · reld #218 · bosn #512 · zccache #1910 · wild #52 · soldr

Three more are authored and validated but awaiting a Local-Gate: stamp (running-process #1323, mimalloc-pprof #603, fbuild #1652), plus one real defect rather than a stamp (FastLED #4703).

What the live dry-run caught that static checks didn't

Every open declaration was verified with ci-lint cache janitor --dry-run against the live repository, not just precheck:

  • running-process #1323 would delete 4 live toolchain entries — older soldr versions alongside the current one. Benign (toolchains re-download rather than rebuild), but not what the declaration intends → #1325
  • zccache's first draft put compile 354 MB below live, and static CACHE-004 passed it
  • soldr's MERGED declaration overstates compile 4.7× (2600 MB × 6 platforms, for one 558 MB entry) and omits its largest family, zccache-unit-v1 at 2.49 GB → #3580

The schema changes, and why each was needed

change what it unblocked
#334 .shapes.<scope> running-process's compile: two ~1.25 GiB shapes and eight ≤529 MB, which one max cannot express
#343 janitor uses family_footprint it used max × cardinality while CACHE-004 used the shapes sum — the janitor was the stricter of the two and deleted live caches precheck had approved. Found independently by three agents.
#345 setup-soldr:target-cache via 33 entries across 3 repos were permanently undeclareable
#348 audit uses family_footprint it charged wild's cook 2 entries against 3 live ones (spurious violation), and compared each entry to fam.max instead of the largest shape ceiling — so a shapes family could never pass

One gap left open deliberately

#347 — via maps one value to exactly one literal prefix, so neither a PATH-shaped cache (203 live sccache/<a>/<b>/<c>/<hash> entries on zccache) nor a repository-owned prefix can be declared.

Listing them in [cache].retired would convert CACHE-001 into CACHE-009 and delete read caches. Both agents that hit this declined to do it, and so did zccache's merged declaration, which carries an explicit warning against running the janitor until the gap closes.

The pattern

Every blocker was infrastructure the cache policy does not own: a gate needing a Local-Gate: stamp, a taplo formatter (wild — nine red jobs from one =), a REUSE licensing annotation, a bosn daemon version. Five repos, five unrelated systems, and not one caused by a [cache.family] value.

The three times a declaration looked impossible, the gap turned out to be in the checker — so the schema work was worth more than the per-repo PRs.

Refs #153, #159, #162, #347

🤖 Generated with Claude Code

**Six declarations merged** -- clud (#1801), reld (#218), bosn (#512), zccache
(#1910), wild (#52), soldr. **~180 GiB reclaimed** fleet-wide.

Three authored and validated but awaiting a `Local-Gate:` stamp
(running-process #1323, mimalloc-pprof #603, fbuild #1652), plus one real
defect rather than a stamp (FastLED #4703).

Every one of those was verified with a LIVE `ci-lint cache janitor
--dry-run`, not just the static checks -- which is what caught:
* running-process #1323 would delete 4 live toolchain entries (benign:
  older soldr versions re-download, they do not rebuild) -> #1325
* zccache's first draft put `compile` 354 MB below live while static
  CACHE-004 passed it
* soldr's MERGED declaration overstates `compile` 4.7x and omits its
  largest family -> #3580

## The schema changes, and why they were needed

Every one exists because a repository could not declare honestly without it:

| change | what it unblocked |
| --- | --- |
| #334 `.shapes.<scope>` | running-process's `compile`: two 1.25 GiB shapes and eight <=529 MB |
| #343 janitor uses `family_footprint` | it used `max x cardinality` while CACHE-004 used the shapes sum -- the janitor was STRICTER and deleted live caches precheck approved. Found independently by three agents. |
| #345 `setup-soldr:target-cache` via | 33 entries across 3 repos were permanently undeclareable |
| #348 audit uses `family_footprint` | it charged wild's `cook` 2 entries against 3 live ones, and compared each entry to `fam.max` instead of the largest shape ceiling, so a `shapes` family could never pass |

## One gap left open deliberately

#347 -- `via` maps one value to exactly one literal prefix, so neither a
PATH-shaped cache (203 live `sccache/<a>/<b>/<c>/<hash>` entries on
zccache) nor a repository-owned prefix can be declared. Listing them in
`[cache].retired` would convert CACHE-001 into CACHE-009 and DELETE read
caches -- both agents that hit this declined, and so did zccache's merged
declaration, which carries a warning against running the janitor until the
gap closes.

## The pattern

Every blocker was infrastructure the cache policy does not own: a gate
needing a `Local-Gate:` stamp, a taplo formatter (wild, 9 red jobs from
one `=`), a REUSE licensing annotation, a bosn daemon version. Five
repos, five unrelated systems, and not one caused by a
`[cache.family]` value. The three times a declaration looked impossible,
the gap was in the CHECKER -- so the schema work was worth more than the
per-repo PRs.

Refs #153, #159, #162, #347

Local-Gate: v1 tree=5cd8966536e8b5458c850e37c1b1b0f171a5f182 secs=35
@zackees
zackees merged commit a117fd1 into main Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant