fix(release): accept independent core and Pi versions in candidate validation
Maintainers usually reply within 1 day
Assessment
This issue has not been assessed yet.
Description
Existing Issue Search
- I searched existing issues and will add evidence to a canonical tracker when applicable.
📝 Observed Consequence
Release-candidate tooling rejects a core/Pi pair with different version numbers even when the selected Pi manifest and installer pin agree. This prevents validating the independent SemVer pair required by the canonical release policy. Local Pi package validation also inherits the identical-version restriction.
🔄 Steps to Reproduce
- At source commit 3f0b44554dbed8fa8edc976cfe7a6c783376ef88, prepare an isolated metadata fixture with plugin/pi/package.json selecting gentle-engram 0.5.0 and internal/setup/setup.go containing the literal installer constant piGentleEngramPackage = "npm:[email protected]".
- Run the public helper from that checkout: go run ./tools/release-candidate -root -core-ref refs/tags/v3.0.0 -pi-ref refs/tags/pi-v0.5.0.
- Observe the equality rejection before Pi metadata validation. The original public-command regression also reproduces this for core 1.2.3+a with Pi 1.2.3+b.
✅ Expected Behavior
Both full refs independently satisfy strict SemVer and identify an ordered core/Pi pair. Metadata and local archive validation bind to the selected Pi version, not the core version. Malformed refs, mismatched Pi manifests/pins and invalid archives still reject. Metadata/package success must not imply semantic parity, runtime compatibility, release approval or publication permission; the rejection-only checker must retain all schema/semantic blockers.
❌ Actual Behavior
The helper exits 1, emits no stdout and writes exactly "core and Pi versions must match exactly" plus a newline to stderr (go run adds its own "exit status 1" line). The Node rejection-only checker reports "Core and Pi versions must match exactly." instead of reaching semantic blockers. The local package command rejects the independent pair before packing.
Operating System
Windows
Release Version (Report Context)
Source-tooling report at commit 3f0b44554dbed8fa8edc976cfe7a6c783376ef88; not a claim about an installed or published release. Fresh remote main 258e7a3b145879968dde10d1cdbe52bb30d87add still contains the equality rejection and core-bound metadata validation by source inspection. The recorded execution reproduction is against 3f0b4455, not a fresh execution of the newer main.
Agent / Client
Other
📋 Relevant Logs
# Original regression run before production changes:
go test ./tools/release-candidate -run '^TestReleaseCandidateIndependentPair$' -count=1
# exit 1; observed helper diagnostic:
core and Pi versions must match exactly
exit status 1
💡 Additional Context
This is a deliberately bounded child/delivery issue of #1349, created with the user's explicit authorization so a focused PR can close this defect without closing the umbrella coordinator. #1349 remains canonical for the wider release coordination effort; this issue covers only its first remaining tooling/docs item.
Root cause established at the reproduced baseline: the Go helper enforces equal core/Pi versions and passes the core version to Pi metadata/archive validation; the Node package wrapper also uses that single version for the archive filename.
Acceptance scope:
- Support independent full-ref inputs with unchanged strict SemVer validation.
- Keep JSON version as core identity and add piVersion to identify the selected Pi companion in metadata and package results.
- Bind the Pi manifest, installer pin and tarball to Pi; retain existing equal-version behavior and rejection guarantees.
- Align CLI help and docs/RELEASE-CANDIDATE.md with independent versions and explicit proof limits.
A local, unpublished candidate already exists in commit 0a60295c4fad60dbf9946d9058f0ca3b04c86434. Original RED was observed before implementation. Subsequent focused Go regression, affected Go package, 34 Node checker/package tests, six baseline differential probes and independent technical verification passed. Full Pi suite: 570 passed, 0 failed, 1 skipped packaged/prebuilt-fixture case. Native RDD review of that exact candidate was approved and acknowledged. These are local candidate results, not hosted CI or release readiness proof; the newer main has not been retested with this candidate.
Non-goals: a positive semantic release certificate, publication state/concurrency/recovery coordinator, workflow/publisher/settings changes, actual version or installer-pin changes, tags, registry publication, Homebrew redesign, runtime negotiation (#1350), or automatic latest promotion. Promotion remains manually and separately authorized. No push or PR has been performed. This issue must start as status:needs-review; neither #1349's approval nor the local review automatically approves this separate issue. Maintainer approval and a real assignee remain required before the PR.
- Dominant language
- Go
- Stars
- 7.1k
- Forks
- 729
- Avg merge
- 8h 48m
- Merged PRs (30d)
- 340
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Gentleman-Programming/engram
-
bug(obsidian): project-scoped export rewrites shared topic hubs from the scoped project's refs onlyOpenstatus:needs-review type:bug
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
Gentleman-Programming/engram#2003 ·
Maintainers usually reply within 1 day
-
priority:medium status:needs-review type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
Gentleman-Programming/engram#863 · 1 comment ·
Maintainers usually reply within 1 day
-
feat(ci): prepare dormant required-job queue interlockPossibly taken @dnlrsls claimed this 1 day ago. Openstatus:approved type:feature
Gentleman-Programming/engram#2031 · 1 assignee ·
Maintainers usually reply within 1 day
-
feat(ci): wire dormant native and legacy proof boundariesPossibly taken @dnlrsls claimed this 1 day ago. Openstatus:approved type:feature
Gentleman-Programming/engram#2030 · 1 assignee ·
Maintainers usually reply within 1 day
-
feat(ci): add dormant proof release contractPossibly taken @dnlrsls claimed this 1 day ago. Openstatus:approved type:feature
Gentleman-Programming/engram#2029 · 1 assignee ·
Maintainers usually reply within 1 day
All issues in Gentleman-Programming/engram
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
FiloSottile/age#758 ·
-
nginx configOpen
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 63/100
Maintainers usually reply within 1 day