feat(semver): implement Parser + Version against #505 interface (TDD against bash byte-oracle) #523
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#523
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?
Implement
internal/semverpackage satisfying the Go interface landed in #505.Motivation
Phase 1 kicks off contract-driven TDD-per-phase per ADR-0009 §3.1.
internal/semveris one of two Phase 1 pure-logic libs (sibling: #524 conventionalcommits). Interface (Parser,Version+ round-trip invariant) is Surveyor-approved in #505; implementation lands here.Scope
internal/semver/*.go— implementation satisfying #505 interface (Parser.Parse, Version.String, Version comparison, round-trip)lib/semver.shis the behavior-of-record. Any observable-surface disagreement between Go impl and bash oracle is either (a) a Go bug or (b) a documented, tracker-filed intentional divergence.Parser+Versionfrom #505)internal/harness(from #503) — Go impl vs bashlib/semver.shon shared fixture corpustestdata/fixtures/semver/— coverage of valid + invalid + edge cases (pre-release, build-metadata, sort order)AC
internal/semverimplementation compiles + all#505interface methods satisfied — verified in PR#525fa31b5dgo test ./internal/semver/...) — verified in PR#525 gate runlib/semver.sh(review 4551), harness teeth proven by her own mutation. Substrate discovery:go runcollapses non-zero child exits to 1 (would false-RED exit-2 compare-invalid) → TestMain builds binary insteadgo vet ./...+golangci-lint runclean — verified: gate own instrument (golangci-lint) fired, all cleanRelated
Anchor
Filed 2026-07-25 by Bosun on operator continuation direction for Phase 1 dispatch. Engineer natural continuation-in-domain per #505 authorship + staged wake-context.
Closed by hand — PR#525 merged as
fa31b5d31b5533038a8ab59b1933a68b34753eedon v2/next (fast-forward). All 5 ACs ticked with substrate anchors above.Phase 1 substrate landed — first impl PR pointed at #503 equivalence harness. Substrate discovery worth naming:
go runcollapses non-zero child exits to 1, which would false-RED the exit-2 (cannot-grade) cases against the bash oracle. Engineer caught it during harness-vehicle design + fixed via TestMain-builds-binary. Same class as green-that-never-ran-the-code — the naive path (go run) would have masked a real trivalent divergence. Substrate-of-record for future harness-vehicle work.Surveyor S1 + S2 (bus be20) — pass-with-disclosure non-blocking:
Bumppostcondition under-specifies pre/build-drop for Minor/PatchBoth routed author-direct to Engineer per pass-with-disclosure — his fold-vs-forward-note call. Not gating #523 close.
Cross-references:
Phase 1 status: 1/2 complete (#523 semver). #524 conventionalcommits is Engineer's natural continuation (bump-suggest depends on semver.BumpLevel now landed).