Move release mechanics behind the public facade

This commit is contained in:
2026-10-06 00:58:22 +00:00
parent b4d348dd1f
commit 4dee2841e0
10 changed files with 78 additions and 80 deletions

View File

@@ -198,11 +198,13 @@ removes the previous receipt. Affected suites pass.
### R5 — Medium: The root facade still owns release mechanics
Status: Resolved.
Category: Architectural ownership gap and maintainability.
**Evidence:** [candidate_build.go](../../candidate_build.go) implements temporary
**Evidence:** [candidate_build.go](../../internal/build/candidate.go) implements temporary
storage allocation, containment checking, cleanup, and candidate-build
coordination in the public package. [delivery_assets.go](../../delivery_assets.go)
coordination in the public package. [delivery_assets.go](../../internal/delivery/assets.go)
implements artifact inventory validation, file opening/stat/hash checks,
filename derivation, and manifest assembly there. These are substantial
implementation responsibilities beyond forwarding and type conversion.
@@ -220,11 +222,17 @@ assembly API or generic framework.
checks remain valid after the move. Confirm filesystem and artifact algorithms
are owned internally without introducing inward imports of public facades.
**Resolution:** Candidate-build coordination now belongs to `internal/build`;
artifact inventory, hashing, and manifest assembly belong to `internal/delivery`.
The root facade performs conversions and forwarding only. Existing artifact
tests moved with their implementation; external API and CLI tests, the complete
offline suite, and compiled-export/import checks pass.
### R6 — Medium: Builds require a writable parent of the repository
Category: Inadvertently strengthened filesystem prerequisite.
**Evidence:** [Candidate builds](../../candidate_build.go), around line 21,
**Evidence:** [Candidate builds](../../internal/build/candidate.go), around line 21,
and [CLI delivery builds](../../cmd/releasekit/main.go), around line 194,
allocate temporary storage with `os.MkdirTemp(filepath.Dir(repositoryDir), ...)`.
The requirement is disposable output outside the worktree, not sibling output.