epic(phase-6): Orchestrators — decide + prep + release + manifest-check + prune-rc-tags #508

Closed
opened 2026-07-24 22:42:29 +02:00 by bosun · 1 comment
Owner

Umbrella tracker for Phase 6 sub-work. Largest phase (~2,285 LOC per ADR-0008 §5). #499 fail-atomic lands as the transactional design of internal/release per ADR-0009 §6, not as a follow-up.

Phase 6 gate (from milestone description)

The 30-file bats oracle runs green against the Go binary via the equivalence harness; #499's transactional invariant (fragment-consumption atomicity, no orphan on failure) is testable and passes.

Sub-tracker planning (filed at phase-start, not now)

Anticipated decomposition — actual list refined during Phase 0b interface work and Phase 6 phase-start:

  • internal/release.Cutter transactional implementation (§6 design)
  • rt decide (release-decide.sh port — 826 LOC, 3-layer safeguard)
  • rt prep (release-prep.sh port — 785 LOC, 39 git-porcelain sites)
  • rt release (draft-release.sh port — 285 LOC, idempotency)
  • rt manifest-check port
  • rt prune-rc-tags port
  • #499 — fail-atomic transactional cut (lands as first-class §6 design, closes at this phase gate)

Refs ADR-0009 §3.3 phase 6, §6 (transactional cut design).

Umbrella tracker for Phase 6 sub-work. Largest phase (~2,285 LOC per ADR-0008 §5). #499 fail-atomic lands as the transactional design of `internal/release` per ADR-0009 §6, not as a follow-up. ## Phase 6 gate (from milestone description) The 30-file bats oracle runs green against the Go binary via the equivalence harness; #499's transactional invariant (fragment-consumption atomicity, no orphan on failure) is testable and passes. ## Sub-tracker planning (filed at phase-start, not now) Anticipated decomposition — actual list refined during Phase 0b interface work and Phase 6 phase-start: - `internal/release.Cutter` transactional implementation (§6 design) - `rt decide` (release-decide.sh port — 826 LOC, 3-layer safeguard) - `rt prep` (release-prep.sh port — 785 LOC, 39 git-porcelain sites) - `rt release` (draft-release.sh port — 285 LOC, idempotency) - `rt manifest-check` port - `rt prune-rc-tags` port ## Related existing trackers (retro-linked to Phase 6 milestone) - #499 — fail-atomic transactional cut (lands as first-class §6 design, closes at this phase gate) Refs ADR-0009 §3.3 phase 6, §6 (transactional cut design).
Author
Owner

CLOSED — Phase 6 orchestrator/utility port arc COMPLETE (2026-07-27).

All 5 orchestrators ported + Cutter foundation delivered:

Tracker PR Merged @ Substrate
#554 Cutter transactional cut engine PR#560 79e5947 (01:56 CEST) internal/release.Cutter two-phase txn per ADR-0009 §6 (folds #499 fail-atomic)
#556 rt-prep PR#561 3385537 (04:02 CEST) internal/prep + cmd/rt/prep.go (785 LOC port + 29 git-porcelain sites + rolling-mode)
#557 rt-release PR#563 b215acf (05:13 CEST) cmd/rt/release.go via Cutter.Fire (first production caller); manifest-atomic strengthening
#559 rt-prune-rc-tags PR#565 6072fa3 (06:12 CEST) cmd/rt/prune_rc_tags.go pure orchestrator (deletion-set differential harness)
#558 rt-manifest-check PR#564 c1cf08a (06:23 CEST) cmd/rt/manifest_check.go accumulator + fork-B verbose desync + C2-lenient parse
#555 rt-decide PR#566 22507cf (10:47 CEST) internal/decide + cmd/rt/decide.go (826 LOC port + 3-layer safeguard + F1 events-retire + F2 forgejo.Client accretion)

Substrate refinement pattern across the arc

Each orchestrator port surfaced necessary substrate additions in the primitive it consumes:

  • Cutter refinements (3/5, threshold-firm): Request.Composed (#556); Deps.Manifest permitted nil (#556); Fire.CreateReleaseRequest.Draft additive-optional + idempotency honor (#557)
  • manifest.Store refinement: CheckDesyncVerbose verbose variant (#558)
  • forgejo.Client refinements: PullRequest.Author field + PullRequest.Labels field + ListPRs method with startswith-tolerance filter (#555)

Substrate-refinement-per-port is the natural §3.3 shape — interfaces refined as reality intrudes at the primitive that reality actually pushes against; Cutter didn't centralize all accretion, and the arc-wide threshold discipline held.

Composite-milestone-gate design vindicated 5×

Property gate at substrate + harness gate at consumer + Surveyor adversarial-verify at review — each layer surfaces defects the others can't:

  • Surveyor's #554 review: §4 (c)-branch silent-loss (partial deleteFragments orphaned removed fragment)
  • #556 harness: #532 MergeSections emit order + #554 cut.lock working-tree leak (2 latent bugs in already-merged code)
  • #557 harness: Fire empty-target lenient divergence from bash oracle
  • #558 review: §5 5c mismatch-line drop (equivalence harness + units both missed)
  • #555 review: #417 orphan check load-bearing dead-variable divergence (equivalence harness + units both missed)

Cross-actor discipline correction cycle

n=5 substrate-of-record corrections landed clean across the arc (rolling-mode over-tick / 4-vs-3 refinement count / Fire-replay-naturally / git-primitive-gap / C2-strict-vs-lenient), plus a chamber-metabolism framing correction from operator. Pattern: Bosun ratify-time substrate mappings consistently need Engineer's framing-verify pass; Engineer's oracle-grounded reads win over design intuitions. The correction cycle IS the discipline working (surface + reason + accept-correction → clean revision), not a defect in the ratify process.

Deferred to Phase 7

#562 rolling-mode end-to-end differential test (Engineer's honest coverage residual from #556 — coverage-completeness follow-up, not a Phase-6 gate condition) — moved to milestone #80.

  • Milestone #78 closes with this + #499 + #555 all closed.
  • #499 (fail-atomic transactional cut) closed same session with substrate-evidence comment.
  • Next phase: milestone #79 (Phase 6b — Cut-time validators / gates) OR milestone #80 (Phase 7 — Workflow integration) per operator direction.

Closed by Bosun 2026-07-27 10:49 CEST.

**CLOSED — Phase 6 orchestrator/utility port arc COMPLETE (2026-07-27)**. All 5 orchestrators ported + Cutter foundation delivered: | Tracker | PR | Merged @ | Substrate | |---------|-----|----------|-----------| | **#554** Cutter transactional cut engine | PR#560 | 79e5947 (01:56 CEST) | `internal/release.Cutter` two-phase txn per ADR-0009 §6 (folds #499 fail-atomic) | | **#556** rt-prep | PR#561 | 3385537 (04:02 CEST) | `internal/prep` + `cmd/rt/prep.go` (785 LOC port + 29 git-porcelain sites + rolling-mode) | | **#557** rt-release | PR#563 | b215acf (05:13 CEST) | `cmd/rt/release.go` via Cutter.Fire (first production caller); manifest-atomic strengthening | | **#559** rt-prune-rc-tags | PR#565 | 6072fa3 (06:12 CEST) | `cmd/rt/prune_rc_tags.go` pure orchestrator (deletion-set differential harness) | | **#558** rt-manifest-check | PR#564 | c1cf08a (06:23 CEST) | `cmd/rt/manifest_check.go` accumulator + fork-B verbose desync + C2-lenient parse | | **#555** rt-decide | PR#566 | 22507cf (10:47 CEST) | `internal/decide` + `cmd/rt/decide.go` (826 LOC port + 3-layer safeguard + F1 events-retire + F2 forgejo.Client accretion) | ## Substrate refinement pattern across the arc Each orchestrator port surfaced necessary substrate additions in the primitive it consumes: - **Cutter refinements** (3/5, threshold-firm): Request.Composed (#556); Deps.Manifest permitted nil (#556); Fire.CreateReleaseRequest.Draft additive-optional + idempotency honor (#557) - **manifest.Store refinement**: CheckDesyncVerbose verbose variant (#558) - **forgejo.Client refinements**: PullRequest.Author field + PullRequest.Labels field + ListPRs method with startswith-tolerance filter (#555) **Substrate-refinement-per-port** is the natural §3.3 shape — interfaces refined as reality intrudes at the primitive that reality actually pushes against; Cutter didn't centralize all accretion, and the arc-wide threshold discipline held. ## Composite-milestone-gate design vindicated 5× Property gate at substrate + harness gate at consumer + Surveyor adversarial-verify at review — each layer surfaces defects the others can't: - Surveyor's #554 review: §4 (c)-branch silent-loss (partial deleteFragments orphaned removed fragment) - #556 harness: #532 MergeSections emit order + #554 cut.lock working-tree leak (2 latent bugs in already-merged code) - #557 harness: Fire empty-target lenient divergence from bash oracle - #558 review: §5 5c mismatch-line drop (equivalence harness + units both missed) - #555 review: #417 orphan check load-bearing dead-variable divergence (equivalence harness + units both missed) ## Cross-actor discipline correction cycle n=5 substrate-of-record corrections landed clean across the arc (rolling-mode over-tick / 4-vs-3 refinement count / Fire-replay-naturally / git-primitive-gap / C2-strict-vs-lenient), plus a chamber-metabolism framing correction from operator. Pattern: Bosun ratify-time substrate mappings consistently need Engineer's framing-verify pass; Engineer's oracle-grounded reads win over design intuitions. The correction cycle IS the discipline working (surface + reason + accept-correction → clean revision), not a defect in the ratify process. ## Deferred to Phase 7 **#562** rolling-mode end-to-end differential test (Engineer's honest coverage residual from #556 — coverage-completeness follow-up, not a Phase-6 gate condition) — moved to milestone #80. ## Related - Milestone #78 closes with this + #499 + #555 all closed. - #499 (fail-atomic transactional cut) closed same session with substrate-evidence comment. - Next phase: milestone #79 (Phase 6b — Cut-time validators / gates) OR milestone #80 (Phase 7 — Workflow integration) per operator direction. Closed by Bosun 2026-07-27 10:49 CEST.
bosun closed this issue 2026-07-27 10:49:23 +02:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/release-toolkit#508
No description provided.