docs(plans): split S20-A step 19 into 19a and 19b

What this changes

This merge request amends the merged S20-A plan. It splits step 19 into steps 19a and 19b.

Issue #681's option A moved the repository-scoped size delta into the reap. The operator then split the result. The plan still described the step before both decisions.

The plan file is the only file this merge request touches. Guardrail 4 makes this the only merge request allowed to touch it.

The amendment

Status table. Row 19 becomes 19a and 19b, so the table now has 22 rows. Row 19a records !1912. Row 19b records !1916.

Step 19a, type chore. The reap computes the repository-scoped freed bytes. The branch targets main, not the stack, and it depends on nothing in this plan. This is the correction that matters. The old row named step 18, and that is true of the emit half alone.

Step 19b, type feat. The purger emits the deltas its chunks earn. The branch targets the step-18 branch, and it depends on step 18 and on 19a. docs/plans/TEMPLATE.md defines Type as the conventional commit type for the step's merge request. The old chore was therefore a stale forecast, for the same reason the Files list and the size forecast were stale.

Merge order, in 19b's Depends on line. 19b carries 19a's commits, because the emit site reads ReapTotals.RepositoryID and the step-18 branch does not contain 19a. So 19a merges to main first. The project squash-merges, so the rebase after that is a git rebase --onto repair with a patch-id equality check. It is not a fast-forward.

The three arms that still report zero. ContainerReaper, MavenRemoteVersionReaper and NpmRemoteVersionReaper report no bytes. No merged path raises repositories.size_bytes for hosted OCI or for either cache fill. !1895 and !1901 (merged) can make two of the three zeros observable. The npm remote fill has no merge request, only issue #834. The plan states this as a condition and its event, never as present state.

Two issues the plan did not cite. Issue #681 is what 19a implements. Issue #836 is the counter asymmetry that 19b exposes, and 19b's entry bounds that window on both axes.

Run recipe. The enumeration of steps that change how the service boots or dispatches now names step 17b as well, so it reads 16, 17b, 18 and 19b. !1870 (merged) registers a second leased collector at the composition root and edits .claude/skills/run-artifact-registry/SKILL.md.

Numerals for counts of 10 or more. Four lines carried a spelled "fifteen" and now read "15", per the markdown-review numbers rule. The occurrences already merged in this file are untouched.

.gitlab-ci.yml joins 19b's Files list. The test:lifecycle-failpoints job pins case names in two places. Without the edit the new seam case does not run, and the job stays green.

Research Findings records the corrections rather than dropping them silently. Two rows of the old Files list named files whose comment fix already landed on main. The spec's Follow-ups records issue #534's entry as closed. One residual survives in internal/datastore/blob_storage_attachments_integration_test.go, which the plan never listed.

Accepted smells, named per half. 19b's diff carries 19a's commits until the rebase. 19a lands a computed field with no consumer on main.

Measurements

Half Files Lines
19a, against origin/main 22 +2417 / −296
19b's merge request, against its base 37 +4135 / −360
19b's own share of that 15 +1700 / −62

The 22 shared files measure +2435 / −298 on 19b and +2417 / −296 on 19a. So 19b's copy adds 18 lines that 19a's does not, and deletes two more. Three per-file shares make up the 18, and the plan's measurement paragraph names each one.

Size

The diff is 151 added lines in one file, so guardrail 18 asks for no justification.

Merge order for this merge request

This merge request and the two step merge requests run in parallel. No merge order binds them. This is a stated deviation from guardrail 3, decided by the operator with the consequence in front of them. The S20-A plan merged long ago, so this is an amendment to a merged plan rather than a plan that arrives late.

Related to #681

This is a bot message 🤖 — /smurfit

Edited by Pawel Rozlach

Merge request reports

Loading
Loading