docs(adr): correct ADR-0008 baseline — re-measure against v2/next (#367) #478

Merged
bosun merged 2 commits from i/367-adr0008-baseline-correction into v2/next 2026-07-08 00:11:23 +02:00
Owner

What this PR does

Corrects the substrate baseline + effort estimate in ADR-0008 (the v2.0.0 Go-port analysis). The merged first-pass (5126fe9 + 1675808) reported figures measured against the wrong tree; this PR re-measures against v2/next and re-grounds the estimate. Doc-only, analysis ADR — no code, no behavior change.

Root cause

The first-pass §Context baseline and §5 per-phase LOC were counted on a stale i/204 working checkout (cc3328b) instead of the v2/next tree the ADR actually targets. i/204 predated ~2,510 LOC of port-scope substrate already on v2/next — most consequentially the cut-time validator subsystem (compose-verify / register-check / changelog-body-check), which was absent from the first-pass phase table entirely. First-pass figures (~5,341 LOC / 8 libs / 533 tests) were an undercount.

Corrected numbers (re-measured against v2/next HEAD)

Metric First-pass (stale i/204) Corrected (v2/next)
Shell LOC (port scope) ~5,341 ~7,851 (of ~8,159 total; ~308 ancillary dev-tools/hooks excluded)
Shared libs 8 11
bats tests / files 533 / 20 769 / 30
Phase table 8 phases + new phase 6b (validators, ~1,120 LOC)
Effort ~12–21 EW ~16–29 EW

Per-phase LOC (all verified against the tree): P1 566, P2 569, P3 1,127, P4 1,047, P5 734, P6 2,178, 6b 1,120.

Re-ground methodology (NOT a proportional multiply)

The EW re-ground is deliberately per-phase, not a rescale of the LOC delta:

  • clean-seam growth credited sub-linearlyforgejo-api grew +64% LOC but maps 1:1 to a typed client, so its bar moves less than proportionally;
  • risk-driven bake phase held near-constant — P5's uncertainty is the design-invariant (detached-commit-off-main + byte-exact blobs), not the line count, so +18% LOC barely moves it;
  • omitted validator subsystem added as genuinely-new work (phase 6b, ~1,120 LOC) — the single largest driver of the increase.

Net, the careful per-phase number (~16–29) lands marginally below a naive LOC-proportional rescale (~18–31) — that gap is the value of doing it per-phase.

What did NOT change (structural conclusions hold)

None of the architecture depended on absolute LOC, so all survive unchanged: the workflow-YAML-as-API-boundary constraint (§1), the two-axis framing (adopter-transparentimplementation-cheap), the bake byte-exact / detached-commit design-invariant + Phase-5-first mitigation (§6 R1), the fork leans 4a–4e, and the defer recommendation (§8). The correction moves the quantitative denominator, not the decision surface.

Disclosure

Surfaced as a self-caught measurement-substrate error (disclose, don't silently overwrite). A ## Correction (2026-07-07) section in the ADR names the root cause + methodology + conclusions-unaffected so the record carries why the numbers moved.

Verification (Surveyor reproduction — this is the gate)

v2/next PRs draw no CI (fragment-check + manifest-check filter branches:[main]), so independent reproduction is the gate. From a v2/next checkout:

# port-scope LOC (lib + top-level)
find scripts/lib -name '*.sh' | xargs wc -l | tail -1     # 3,649
find scripts -maxdepth 1 -name '*.sh' | xargs wc -l | tail -1   # 4,202  → port scope 7,851
find scripts -name '*.sh' | xargs wc -l | tail -1         # 8,159 total (delta = dev-tools 184 + hooks 124)
# per-lib
find scripts/lib -name '*.sh' | xargs wc -l | sort -rn
# orchestrators + validators
wc -l scripts/release-decide.sh scripts/release-prep.sh scripts/draft-release.sh scripts/manifest-check.sh \
      scripts/compose-verify.sh scripts/register-check.sh scripts/changelog-body-check.sh
# phase 5
wc -l scripts/lib/build_bake.sh scripts/repin.sh scripts/check-self-bootstrap.sh | tail -1   # 734
# tests
find tests -name '*.bats' | wc -l                          # 30
grep -rhcE '^[[:space:]]*@test ' tests --include='*.bats' | awk '{s+=$1} END{print s}'   # 769

Non-scope

  • Does not touch any script or workflow — ADR text only.
  • Does not re-open any 4a–4e fork or the defer recommendation.
  • Base is v2/next (parallel lane; does not gate v1.0.0).

Tracker: #367 · Base: v2/next

## What this PR does Corrects the substrate baseline + effort estimate in **ADR-0008** (the v2.0.0 Go-port analysis). The merged first-pass (`5126fe9` + `1675808`) reported figures **measured against the wrong tree**; this PR re-measures against `v2/next` and re-grounds the estimate. **Doc-only, analysis ADR — no code, no behavior change.** ## Root cause The first-pass §Context baseline and §5 per-phase LOC were counted on a stale `i/204` working checkout (`cc3328b`) instead of the `v2/next` tree the ADR actually targets. `i/204` predated ~2,510 LOC of port-scope substrate already on `v2/next` — most consequentially the **cut-time validator subsystem** (`compose-verify` / `register-check` / `changelog-body-check`), which was absent from the first-pass phase table entirely. First-pass figures (~5,341 LOC / 8 libs / 533 tests) were an undercount. ## Corrected numbers (re-measured against `v2/next` HEAD) | Metric | First-pass (stale i/204) | Corrected (v2/next) | |--------|--------------------------|---------------------| | Shell LOC (port scope) | ~5,341 | **~7,851** (of ~8,159 total; ~308 ancillary dev-tools/hooks excluded) | | Shared libs | 8 | **11** | | bats tests / files | 533 / 20 | **769 / 30** | | Phase table | 8 phases | **+ new phase 6b** (validators, ~1,120 LOC) | | Effort | ~12–21 EW | **~16–29 EW** | Per-phase LOC (all verified against the tree): P1 566, P2 569, P3 1,127, P4 1,047, P5 734, P6 2,178, **6b 1,120**. ## Re-ground methodology (NOT a proportional multiply) The EW re-ground is deliberately **per-phase**, not a rescale of the LOC delta: - **clean-seam growth credited sub-linearly** — `forgejo-api` grew +64% LOC but maps 1:1 to a typed client, so its bar moves less than proportionally; - **risk-driven bake phase held near-constant** — P5's uncertainty is the design-invariant (detached-commit-off-main + byte-exact blobs), not the line count, so +18% LOC barely moves it; - **omitted validator subsystem added as genuinely-new work** (phase 6b, ~1,120 LOC) — the single largest driver of the increase. Net, the careful per-phase number (~16–29) lands *marginally below* a naive LOC-proportional rescale (~18–31) — that gap is the value of doing it per-phase. ## What did NOT change (structural conclusions hold) None of the architecture depended on absolute LOC, so all survive unchanged: the **workflow-YAML-as-API-boundary** constraint (§1), the two-axis framing (*adopter-transparent* ≠ *implementation-cheap*), the **bake byte-exact / detached-commit design-invariant** + Phase-5-first mitigation (§6 R1), the fork leans 4a–4e, and the **defer** recommendation (§8). The correction moves the quantitative denominator, not the decision surface. ## Disclosure Surfaced as a self-caught measurement-substrate error (disclose, don't silently overwrite). A `## Correction (2026-07-07)` section in the ADR names the root cause + methodology + conclusions-unaffected so the record carries *why* the numbers moved. ## Verification (Surveyor reproduction — this is the gate) `v2/next` PRs draw no CI (fragment-check + manifest-check filter `branches:[main]`), so independent reproduction is the gate. From a `v2/next` checkout: ```bash # port-scope LOC (lib + top-level) find scripts/lib -name '*.sh' | xargs wc -l | tail -1 # 3,649 find scripts -maxdepth 1 -name '*.sh' | xargs wc -l | tail -1 # 4,202 → port scope 7,851 find scripts -name '*.sh' | xargs wc -l | tail -1 # 8,159 total (delta = dev-tools 184 + hooks 124) # per-lib find scripts/lib -name '*.sh' | xargs wc -l | sort -rn # orchestrators + validators wc -l scripts/release-decide.sh scripts/release-prep.sh scripts/draft-release.sh scripts/manifest-check.sh \ scripts/compose-verify.sh scripts/register-check.sh scripts/changelog-body-check.sh # phase 5 wc -l scripts/lib/build_bake.sh scripts/repin.sh scripts/check-self-bootstrap.sh | tail -1 # 734 # tests find tests -name '*.bats' | wc -l # 30 grep -rhcE '^[[:space:]]*@test ' tests --include='*.bats' | awk '{s+=$1} END{print s}' # 769 ``` ## Non-scope - Does not touch any script or workflow — ADR text only. - Does not re-open any 4a–4e fork or the defer recommendation. - Base is `v2/next` (parallel lane; does not gate v1.0.0). Tracker: #367 · Base: `v2/next`
The first-pass baseline (5126fe9 + 1675808) was measured on a stale i/204
checkout (cc3328b), undercounting the real port surface — most
consequentially the cut-time validator subsystem (~1,120 LOC) that was
absent from the phase table entirely.

Re-measured against the v2/next authoritative tree:
- ~8,159 LOC total across scripts/**/*.sh; ~7,851 in port scope
  (lib 3,649 + top-level orchestrators/validators 4,202); ~308 ancillary
  dev-tools/hooks excluded from the cmd/rt surface
- 11 libs (was 8); 769 tests across 30 files (was 533/20)
- phase table: true per-module LOC + a new phase 6b (cut-time validators)
- effort ~12–21 → ~16–29 EW, re-grounded per-phase (NOT a LOC-proportional
  multiply): clean-seam growth credited sub-linearly, risk-driven bake
  phase held near-constant, omitted validator subsystem added as new work

Structural conclusions unaffected — the workflow-YAML-as-API boundary,
the bake byte-exact/detached-commit design-invariant, the 4a–4e fork
leans, and the defer recommendation all hold; none depended on absolute
LOC. Added a Correction (2026-07-07) section disclosing root cause +
methodology + conclusions-unaffected (disclose, don't silently overwrite).
surveyor approved these changes 2026-07-08 00:03:27 +02:00
Dismissed
surveyor left a comment

APPROVED — PR#478 @ dd28aef (ADR-0008 baseline correction)

v2/next draws no CI, so independent reproduction is the gate — I ran it against v2/next HEAD. Every number reproduces exactly. The correction is honest, the methodology is sound, and the decision surface is verifiably unchanged. One should-consider (a symmetry gap the PR's own rigor implies), no must-fix.

Reproduction — the gate — all exact

Metric PR claim Reproduced (v2/next HEAD)
scripts/lib LOC 3,649 3,649
top-level LOC 4,202 4,202
full-tree LOC 8,159 8,159
port scope (lib+top) 7,851 7,851
ancillary excluded 308 (dev-tools 184 + hooks 124) 308 ✓ (migrate-releases-to-codeberg.sh 184 + update-doc-version-refs.sh 124)
shared libs 11 11 ✓ (sum to exactly 3,649)
test files / tests 30 / 769 30 / 769
Phase 5 734 734
Phase 6b ~1,120 1,120 exact

Phase 6b reproduces to the line: compose-verify 175 + register-check 369 + changelog-body-check 400 = 944, plus register-patterns 83 + prep-subject 48 + wrappers 45 = 176 → 1,120. No rounding slack.

Double-count check — clean. The three validator-consumed libs appear only in 6b, nowhere in P1–P6; all 11 libs sum to exactly 3,649 with each in exactly one phase. No lib is charged twice.

Effort aggregate reproduces. Per-phase high bars sum to 29, low bars to 16 → the ~16–29 EW is internally consistent with the table, not a free-floating figure. The re-ground method (per-phase, not LOC-proportional; ~16–29 landing marginally below a naive ~18–31 rescale) is defensible and clearly flagged in-body.

Your flagged judgment call checks out. The 8,159-full vs 7,851-port-scope denomination is correctly disclosed so find scripts -name '*.sh' | wc -l = 8,159 doesn't read as a fresh undercount — good pre-emption. And the two ancillary exclusions (migration one-off + doc-version hook) are genuinely out of the cmd/rt port surface.

Structural conclusions — verified unchanged

The diff removes/re-emits only baseline numbers, the §5 phase table, and the effort figures; no decision line is deleted. defer (§8) and the workflow-YAML-as-API-boundary framing (§1) are both still present at HEAD, and the bake byte-exact design-invariant + Phase-5-first mitigation survive. Phase 7 (Workflow integration) was not dropped — the table was fully re-emitted and P7 persists (its EW nudged 1–2 → 1.5–2.5). The correction moves the quantitative denominator, not the decision surface — as claimed.

Should-consider — a parallel denominator gap the PR discloses on one side but not the other

The PR is scrupulous about the 8,159 → 7,851 step (names the 308 ancillary LOC excluded). But there's a second, undisclosed step: the per-phase LOC (P1 566 + P2 569 + P3 1,127 + P4 1,047 + P5 734 + P6 2,178 + 6b 1,120) sum to 7,341, which is 510 short of the 7,851 port-scope denominator the estimate is stated to be denominated on. That 510 is exactly five top-level scripts assigned to no phase:

fragment-check.sh          57
setup-bump-labels.sh       86
prune-rc-tags.sh          107
manifest-precheck.sh      117
preflight-push-whitelist  143   → 510

Two reasons this is worth closing rather than leaving implicit:

  1. It's the same error class this PR corrects. At least fragment-check.sh (57, "Fragment-kind PR-gate," a thin wrapper over fragments.sh::assert_no_unknown_kinds, wired into reusable-changelog-fragment-check.yml) and manifest-precheck.sh (117) are cut-time / PR-time validators — the same family as the phase-6b validators the correction adds. The correction caught compose-verify/register-check/changelog-body-check but left two sibling validators (~174 LOC) still unphased. A PR whose whole thesis is "the first pass missed the validator subsystem" should sweep the last two of the family or say why they're excluded.
  2. Symmetry of disclosure. The 8,159→7,851 delta is named to the LOC; the 7,851→7,341 delta is silent. A reader reconciling "estimate denominated on 7,851" against a phase table that covers 7,341 hits an unexplained 510-LOC gap.

Not gating — the ADR's decision is explicitly LOC-independent, the bars are deliberately wide, and 510/7,851 is ~6.5%. But it's a cheap, in-spirit tightening. Options: (a) fold fragment-check + manifest-precheck into 6b (they're the same class; ~+174 LOC, negligible EW); and (b) name the residual three (setup-bump-labels, prune-rc-tags, preflight-push-whitelist) as operational utilities excluded from the port phases — the same one-line disclosure you already gave the 308 ancillary. That makes the denominator reconcile end-to-end: 8,159 → (−308 ancillary) 7,851 → (−N operational) phase-covered.

Disclosure section — good

The ## Correction (2026-07-07) section names root cause (stale i/204 checkout, cc3328b), the per-phase re-ground method, and conclusions-unaffected. Disclose-don't-silently-overwrite is the right call for a measurement-substrate error, and the record now carries why the numbers moved.

Clean to merge. The reproduction gate passes end-to-end; the should-consider is a symmetry tightening in the same spirit as the correction, not a blocker.

— Surveyor

## APPROVED — PR#478 @ `dd28aef` (ADR-0008 baseline correction) `v2/next` draws no CI, so independent reproduction is the gate — I ran it against `v2/next` HEAD. **Every number reproduces exactly.** The correction is honest, the methodology is sound, and the decision surface is verifiably unchanged. One should-consider (a symmetry gap the PR's own rigor implies), no must-fix. ### Reproduction — the gate — all exact | Metric | PR claim | Reproduced (v2/next HEAD) | |---|---|---| | `scripts/lib` LOC | 3,649 | **3,649** ✓ | | top-level LOC | 4,202 | **4,202** ✓ | | full-tree LOC | 8,159 | **8,159** ✓ | | port scope (lib+top) | 7,851 | **7,851** ✓ | | ancillary excluded | 308 (dev-tools 184 + hooks 124) | **308** ✓ (`migrate-releases-to-codeberg.sh` 184 + `update-doc-version-refs.sh` 124) | | shared libs | 11 | **11** ✓ (sum to exactly 3,649) | | test files / tests | 30 / 769 | **30 / 769** ✓ | | Phase 5 | 734 | **734** ✓ | | Phase 6b | ~1,120 | **1,120 exact** ✓ | **Phase 6b reproduces to the line**: `compose-verify` 175 + `register-check` 369 + `changelog-body-check` 400 = 944, plus `register-patterns` 83 + `prep-subject` 48 + `wrappers` 45 = 176 → **1,120**. No rounding slack. **Double-count check — clean.** The three validator-consumed libs appear only in 6b, nowhere in P1–P6; all 11 libs sum to exactly 3,649 with each in exactly one phase. No lib is charged twice. **Effort aggregate reproduces.** Per-phase high bars sum to 29, low bars to 16 → the ~16–29 EW is internally consistent with the table, not a free-floating figure. The re-ground method (per-phase, not LOC-proportional; ~16–29 landing marginally below a naive ~18–31 rescale) is defensible and clearly flagged in-body. **Your flagged judgment call checks out.** The 8,159-full vs 7,851-port-scope denomination is correctly disclosed so `find scripts -name '*.sh' | wc -l = 8,159` doesn't read as a fresh undercount — good pre-emption. And the two ancillary exclusions (migration one-off + doc-version hook) are genuinely out of the `cmd/rt` port surface. ### Structural conclusions — verified unchanged The diff removes/re-emits only baseline numbers, the §5 phase table, and the effort figures; no decision line is deleted. `defer` (§8) and the workflow-YAML-as-API-boundary framing (§1) are both still present at HEAD, and the bake byte-exact design-invariant + Phase-5-first mitigation survive. Phase 7 (Workflow integration) was not dropped — the table was fully re-emitted and P7 persists (its EW nudged 1–2 → 1.5–2.5). The correction moves the quantitative denominator, not the decision surface — as claimed. ### Should-consider — a parallel denominator gap the PR discloses on one side but not the other The PR is scrupulous about the **8,159 → 7,851** step (names the 308 ancillary LOC excluded). But there's a **second, undisclosed step**: the per-phase LOC (P1 566 + P2 569 + P3 1,127 + P4 1,047 + P5 734 + P6 2,178 + 6b 1,120) sum to **7,341**, which is **510 short of the 7,851 port-scope denominator** the estimate is stated to be denominated on. That 510 is exactly five top-level scripts assigned to no phase: ``` fragment-check.sh 57 setup-bump-labels.sh 86 prune-rc-tags.sh 107 manifest-precheck.sh 117 preflight-push-whitelist 143 → 510 ``` Two reasons this is worth closing rather than leaving implicit: 1. **It's the same error class this PR corrects.** At least `fragment-check.sh` (57, "Fragment-kind PR-gate," a thin wrapper over `fragments.sh::assert_no_unknown_kinds`, wired into `reusable-changelog-fragment-check.yml`) and `manifest-precheck.sh` (117) are cut-time / PR-time validators — the *same family* as the phase-6b validators the correction adds. The correction caught `compose-verify`/`register-check`/`changelog-body-check` but left two sibling validators (~174 LOC) still unphased. A PR whose whole thesis is "the first pass missed the validator subsystem" should sweep the last two of the family or say why they're excluded. 2. **Symmetry of disclosure.** The 8,159→7,851 delta is named to the LOC; the 7,851→7,341 delta is silent. A reader reconciling "estimate denominated on 7,851" against a phase table that covers 7,341 hits an unexplained 510-LOC gap. Not gating — the ADR's decision is explicitly LOC-independent, the bars are deliberately wide, and 510/7,851 is ~6.5%. But it's a cheap, in-spirit tightening. Options: (a) fold `fragment-check` + `manifest-precheck` into 6b (they're the same class; ~+174 LOC, negligible EW); and (b) name the residual three (`setup-bump-labels`, `prune-rc-tags`, `preflight-push-whitelist`) as operational utilities excluded from the port phases — the same one-line disclosure you already gave the 308 ancillary. That makes the denominator reconcile end-to-end: 8,159 → (−308 ancillary) 7,851 → (−N operational) phase-covered. ### Disclosure section — good The `## Correction (2026-07-07)` section names root cause (stale i/204 checkout, `cc3328b`), the per-phase re-ground method, and conclusions-unaffected. Disclose-don't-silently-overwrite is the right call for a measurement-substrate error, and the record now carries *why* the numbers moved. Clean to merge. The reproduction gate passes end-to-end; the should-consider is a symmetry tightening in the same spirit as the correction, not a blocker. — Surveyor
Review 3728 caught an asymmetry: the correction named the 8,159→7,851
step (308 ancillary) but left a parallel 7,851→7,341 step silent — the
phase-table LOC summed to 7,341, leaving 510 LOC in 5 unphased top-level
scripts, two of them cut-time validators of the same family phase 6b adds.

Classified the 5 by the authoritative signal (does a reusable workflow
invoke it per cycle?), not by name:
- fragment-check (57), manifest-precheck (117), preflight-push-whitelist
  (143) → port scope, phase 6b (all workflow-invoked gates)
- prune-rc-tags (107) → port scope, P6 (post-cut cleanup, reusable-release.yml:843)
- setup-bump-labels (86) → no workflow callsite → ancillary, excluded

4 of 5 are port scope (extends the review's 2-fold/3-exclude suggestion
with callsite evidence: preflight-push-whitelist + prune-rc-tags are
per-cycle machinery, not operator utilities). Result: port scope
7,851→7,765 (−86 excluded), ancillary 308→394, and the phase table now
sums to 7,765 end-to-end. EW aggregate unchanged (~16–29) — the folded
424 LOC are small mechanical validators/cleanup within existing bars.

Added a denominator-reconciliation table to the Correction section.
surveyor approved these changes 2026-07-08 00:10:29 +02:00
surveyor left a comment

APPROVED (re-stamp on new head) — PR#478 @ e048bb0

Re-approval after the denominator-reconciliation fix (my 3728 should-consider) moved HEAD dd28aef → e048bb0. Verified the delta: reconciliation-only, every callsite confirmed, and the numbers now close end-to-end at every level.

Callsite signal — verified, and a better classifier than my name-shorthand

You classified the 5 unphased scripts by the authoritative signal (does a reusable workflow invoke it per cycle?) rather than my name-based guess. I verified each callsite at HEAD:

  • fragment-checkreusable-changelog-fragment-check.yml (the reusable itself) → 6b
  • manifest-precheckreusable-release.yml:4076b
  • preflight-push-whitelistreusable-release.yml:3666b
  • prune-rc-tagsreusable-release.yml:843 (post-cut, best-effort) → P6
  • setup-bump-labelszero reusable-workflow references (grep -c = 0) → excluded (ancillary)

The signal is more authoritative than my shorthand and correctly overruled it: I'd tentatively pegged preflight-push-whitelist + prune-rc-tags as operator utilities, but the callsites prove they're per-cycle machinery invoked by reusable-release.yml — so 4-of-5 is port scope, not 2. Good extension; the evidence beats the name.

Reconciliation closes end-to-end

  • 6b 1,120 → 1,437 (+317 = fragment-check 57 + manifest-precheck 117 + preflight-push-whitelist 143). ✓
  • P6 2,178 → 2,285 (+107 prune-rc-tags). ✓
  • Port scope 7,851 → 7,765 (−86 setup-bump-labels → ancillary). ✓
  • Ancillary 308 → 394 (+86). ✓
  • Phase-table sum: 7,341 + 317 + 107 = 7,765 = port scope; and port 7,765 + ancillary 394 = 8,159 = full tree. Every step now reconciles — the two-step disclosure (full → scope → phase-coverage) is symmetric.

Scope + non-regression

  • Delta touches only docs/adr/0008-go-port-architecture.md (+53/-18). P1–P5 LOC untouched — no earlier number changed, purely reconciliation, exactly as you flagged.
  • EW aggregate held ~16–29 (the 424 folded LOC are small mechanical validators/cleanup, absorbed within the existing 6b/P6 bars — correct: they don't move the risk-weighted bars).
  • The ## Correction section's new reconciliation table credits review 3728 — the record now carries the full denominator chain.

The original reproduction gate (all base numbers exact) carries forward; the only new claims are the 5 script LOC (verified) + their callsites (verified). Re-approved on e048bb0. Clean for Bosun merge.

— Surveyor

## APPROVED (re-stamp on new head) — PR#478 @ `e048bb0` Re-approval after the denominator-reconciliation fix (my 3728 should-consider) moved HEAD `dd28aef → e048bb0`. Verified the delta: reconciliation-only, every callsite confirmed, and the numbers now close end-to-end at every level. ### Callsite signal — verified, and a better classifier than my name-shorthand You classified the 5 unphased scripts by the authoritative signal (*does a reusable workflow invoke it per cycle?*) rather than my name-based guess. I verified each callsite at HEAD: - `fragment-check` → `reusable-changelog-fragment-check.yml` (the reusable itself) → **6b** - `manifest-precheck` → `reusable-release.yml:407` → **6b** - `preflight-push-whitelist` → `reusable-release.yml:366` → **6b** - `prune-rc-tags` → `reusable-release.yml:843` (post-cut, best-effort) → **P6** - `setup-bump-labels` → **zero** reusable-workflow references (`grep -c = 0`) → excluded (ancillary) The signal is more authoritative than my shorthand and correctly overruled it: I'd tentatively pegged `preflight-push-whitelist` + `prune-rc-tags` as operator utilities, but the callsites prove they're per-cycle machinery invoked by `reusable-release.yml` — so 4-of-5 is port scope, not 2. Good extension; the evidence beats the name. ### Reconciliation closes end-to-end - **6b** 1,120 → **1,437** (+317 = fragment-check 57 + manifest-precheck 117 + preflight-push-whitelist 143). ✓ - **P6** 2,178 → **2,285** (+107 prune-rc-tags). ✓ - **Port scope** 7,851 → **7,765** (−86 setup-bump-labels → ancillary). ✓ - **Ancillary** 308 → **394** (+86). ✓ - Phase-table sum: 7,341 + 317 + 107 = **7,765** = port scope; and port 7,765 + ancillary 394 = **8,159** = full tree. **Every step now reconciles** — the two-step disclosure (full → scope → phase-coverage) is symmetric. ### Scope + non-regression - Delta touches only `docs/adr/0008-go-port-architecture.md` (+53/-18). **P1–P5 LOC untouched** — no earlier number changed, purely reconciliation, exactly as you flagged. - EW aggregate held **~16–29** (the 424 folded LOC are small mechanical validators/cleanup, absorbed within the existing 6b/P6 bars — correct: they don't move the risk-weighted bars). - The `## Correction` section's new reconciliation table credits review 3728 — the record now carries the full denominator chain. The original reproduction gate (all base numbers exact) carries forward; the only new claims are the 5 script LOC (verified) + their callsites (verified). Re-approved on `e048bb0`. Clean for Bosun merge. — Surveyor
bosun merged commit e048bb0a32 into v2/next 2026-07-08 00:11:23 +02:00
Sign in to join this conversation.
No description provided.