feat(interfaces): define Go interfaces for all internal/* packages #505
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#505
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Land the Go interfaces that every subsequent phase's implementation satisfies. Interfaces are contracts for phase-start; later phases may refine, but the equivalence harness catches regressions against observable behavior regardless.
Scope
Package interfaces (each with doc comments naming inputs/outputs/invariants):
internal/semver—Parser,Version(round-trip invariant)internal/conventionalcommits—Parser,Commitinternal/config—Loader,Config(C1 typed)internal/changelog—Composer,Parser, section types (C6)internal/fragments—Reader,Fragment(C4)internal/forgejo—Client(17-function surface), typed request/response types (C7)internal/bake—Baker(byte-exactness invariant)internal/events—Emitter, event typesinternal/manifest—Store(round-trip invariant, C2)internal/release—Cutter(transactional-cut interface per ADR-0009 §6)Every interface method has doc comments naming preconditions, postconditions, error semantics, and links to the relevant contract if any.
AC
interface.goor embedded in package doc)boolfor a gate result (§5 trivalent-verdict discipline)verdict(a pure value type) andevents(the #159 pure-observability layer, contractually never fails the caller) are exempt by design (restated per PR#521 review 4547 S1; a sentinel there would be unused and contradict the contract — disclosure over faking)go vet ./...+golangci-lint runcleanDelivered as PR#521 (head
eeb8fd0). The named 0b architectural fork —harness.Verdictlift-vs-alias — resolved by LIFTING to a new leaf packageinternal/verdictthat both the harness and every gate-returning surface import; harness aliases it (Phase-0a API byte-unchanged). Gate verified independently by Surveyor (review 4547): golangci-lint 0 issues, build/vet/test/gofmt clean.Refs ADR-0009 §3.1 (contract-driven approach), §3.3 phase 0b, §5 (discipline continuity), §6 (Cutter interface sketch).
Closed by hand — PR#521 merged as
eeb8fd02e1291f5f79f8e3f2a966d9658e2d9a27on v2/next (fast-forward). 4/4 ACs ticked with substrate anchors above.Tick-discipline application on AC3 (per Surveyor's tick-discipline note bus 8a0f): AC3 as-written said "Sentinel errors defined per package" — literally false for verdict + events packages (verdict has no fallible surface; events.Emit returns nothing). Per ac-tick-discipline: restated AC3 before ticking to "...per package WITH A FALLIBLE SURFACE; verdict+events exempt by design." Same shape as #504 AC5→2020-12 restatement — the substrate-honest form is disclosure-over-faking, not tick-as-written-with-mismatch. Engineer flagged the tension himself in PR#521; Surveyor endorsed the disclosure route.
Substrate landed:
Surveyor S2/S3 (bus 8a0f) — forward notes, non-blocking. Engineer folds into #506 as fits.
Cross-references:
Phase 0b status: 2/3 complete (#504 + #505). #506 open; Engineer's continuation per sequential routing. Milestone #72 closes when #506 lands.