Skip to content

fix(release): bind SBOM main modules and GitHub tag events for 0.4.1 - #169

Merged
HengYangDS merged 5 commits into
devfrom
proposal/20260926-terminal-product-convergence
Oct 14, 2026
Merged

HengYangDS merged 5 commits into
devfrom
proposal/20260926-terminal-product-convergence

Conversation

@HengYangDS

Copy link
Copy Markdown
Owner

Release-blocking fixes found after a04e265d and the 0.4.1 preparation that replaces the failed v0.4.0 tag.

  • SBOM main-module identity (e03f07fe, 52392a8b): each release program must be the evident-by file of exactly one package of the main module that go.mod declares (name, and a package URL whose version, if any, is the package's own) and of exactly one Go standard library, at the scanned version, that is a DEPENDENCY_OF that same main-module package. Regressions cover self-referencing, foreign and mismatched-version cases and a VCS-stamped main module; the real-Syft journey passes with a repository-local TMPDIR.
  • GitHub tag events (8ae65f85, 03e210c5): the v0.4.0 tag run failed because the GitHub version job never passed its tag to the gate's CI_COMMIT_TAG input, and candidate-mode tests inherited the runner's tag. The CUE projection now supplies the tag, the production gate is unchanged, and the test packages clear the runner's release-tag selection.
  • 0.4.1 (ab2167db): v0.4.0 stays immutable without release assets; VERSION and the dated Changelog section move to 0.4.1.

Local evidence: source gate and full ETHOS proof at 03e210c5 (attestation 3991ca48…); the release, construction, CI and projection packages pass in a clean and a simulated GitHub tag-push environment. Task 4.5.2 (real-Provider tool continuation) remains open.

Generated with Claude Code

Independent acceptance kept the real six-program SPDX intact and pointed every
standard library's DEPENDENCY_OF at the library itself; the per-program check
still passed because it only compared evident-by edges and never proved that
the dependency target was the program's main module.

Release construction now reads the module path that go.mod declares and
requires each release program to be the evident-by file of exactly one package
named by that path with package URL pkg:golang/<module>, and of exactly one
standard library at the scanned version whose DEPENDENCY_OF names that same
main-module package. A self-referencing, foreign or missing main module fails
before signing.

The shared SBOM fixture now carries package URLs, release-build fixtures
declare the module it names, and a self-dependency regression joins the
existing refusals; the real-Syft journey passes with its own declared module.

Generated with Claude Code
… tag

The first GitHub tag push of this source failed in two places that review and
dev runs never reach. validate-version-tag read only GitLab's CI_COMMIT_TAG,
so a GitHub tag, which names itself through GITHUB_REF_TYPE and
GITHUB_REF_NAME, failed with "CI_COMMIT_TAG must use v<semver>". And sixteen
candidate-mode tests in tools/release/construction and tools/ci inherited the
runner's selected tag, so candidate admission refused them on every platform.

validate-version-tag now uses the shared readiness.SelectedReleaseTag owner
that already selects either peer's tag. Both test packages clear the runner's
release-tag selection in TestMain; tests that need a tag set it explicitly.
The version-tag regression adds a GitHub tag push, and every package passes
under a simulated GitHub tag environment as well as a clean one.

Generated with Claude Code
The v0.4.0 tag at a04e265 failed its GitHub release checks, and the release
tooling and SBOM checks changed after it, so no release assets were published
for it. The operator chose to keep that tag immutable and release the fixed
source as 0.4.1.

VERSION and the dated Changelog section move to 0.4.1, whose section names it
the first published 0.4 release and notes the assetless v0.4.0 tag. Task 4.5's
Desktop requalification and task 9.3 now name the 0.4.1 reader and release; the
performance acceptance records that 0.4.1 ships the same product code; the
Migration Plan and the late-fix record cover the failed tag run.

Generated with Claude Code
Independent acceptance found the main-module identity check rejecting the real
Syft SBOM whenever Go stamped the fixture's main module from version control:
Syft then records the module's pseudo-version as its SPDX version and in its
package URL, pkg:golang/<module>@<version>, and isModule accepted only the
unversioned URL. TestReleaseSBOMCatalogsEveryNativeBinary failed whenever its
temporary directory sat inside a Git checkout, as it does during ETHOS proof.

isModule now accepts the unversioned package URL or one whose percent-decoded
version equals the package's own SPDX version, so a +dirty pseudo-version
encoded as %2B matches while a package URL naming another version does not.
New regressions accept a versioned main module and refuse a package URL with a
foreign version; the real-Syft journey passes with a repository-local TMPDIR.

Generated with Claude Code
8ae65f8 widened validate-version-tag to read either peer's ref variables.
Acceptance asked to keep the gate's explicit CI_COMMIT_TAG contract and repair
the event projection instead: GitLab sets CI_COMMIT_TAG for tag pipelines, but
the GitHub release-version job never passed its tag to the gate.

The CUE graph now gives that step CI_COMMIT_TAG from github.ref_name, the
rendered verify.yml matches it, and the projection test requires the input.
validate-version-tag and its regression are back to their production form.
The test packages keep clearing the runner's release-tag selection, so
candidate fixtures no longer inherit a tag push.

Generated with Claude Code
@HengYangDS
HengYangDS merged commit 03e210c into dev Oct 14, 2026
7 checks passed
@HengYangDS
HengYangDS deleted the proposal/20260926-terminal-product-convergence branch October 14, 2026 03:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant