The tag-triggered release workflow can publish an arbitrary matching tag without proving that its commit is contained in main. It also runs a narrower validation set than normal CI: the release job builds the solution and runs only gclo.Engine.Tests, while normal CI additionally enforces CLI coverage, the coverage threshold, UI smoke tests, and formatting.
This allows an immutable public release to be created from a commit or regression that would not pass the repository's normal contribution gates.
Evidence
Tag trigger accepts every matching version tag: .github/workflows/release.yml:10-13.
Release validation builds and runs only the Engine suite: .github/workflows/release.yml:61-66.
Normal CI applies the broader build, coverage, CLI, UI, and formatting gates: .github/workflows/ci.yml:34-135.
This finding was independently verified at commit 119ac26804ef93b98a262cb1c0c7a41afe71fde5. It is related to the release findings collected in #32, but is tracked separately so it can be implemented and closed independently.
Acceptance criteria
The release workflow verifies that the tagged commit is contained in main before building or publishing artifacts.
Release artifacts depend on the same build, Engine/ViewModels, CLI, coverage, and formatting gates used by normal CI.
The Windows UI smoke gate is either required before publishing or an explicit, documented exception with an equivalent packaged-app launch smoke test.
Publishing jobs cannot run when any required validation job fails or is skipped unexpectedly.
Workflow changes pass syntax validation and include a testable failure path for a tag not contained in main.
## Problem
The tag-triggered release workflow can publish an arbitrary matching tag without proving that its commit is contained in `main`. It also runs a narrower validation set than normal CI: the release job builds the solution and runs only `gclo.Engine.Tests`, while normal CI additionally enforces CLI coverage, the coverage threshold, UI smoke tests, and formatting.
This allows an immutable public release to be created from a commit or regression that would not pass the repository's normal contribution gates.
## Evidence
- Tag trigger accepts every matching version tag: `.github/workflows/release.yml:10-13`.
- Release validation builds and runs only the Engine suite: `.github/workflows/release.yml:61-66`.
- Normal CI applies the broader build, coverage, CLI, UI, and formatting gates: `.github/workflows/ci.yml:34-135`.
This finding was independently verified at commit `119ac26804ef93b98a262cb1c0c7a41afe71fde5`. It is related to the release findings collected in #32, but is tracked separately so it can be implemented and closed independently.
## Acceptance criteria
- The release workflow verifies that the tagged commit is contained in `main` before building or publishing artifacts.
- Release artifacts depend on the same build, Engine/ViewModels, CLI, coverage, and formatting gates used by normal CI.
- The Windows UI smoke gate is either required before publishing or an explicit, documented exception with an equivalent packaged-app launch smoke test.
- Publishing jobs cannot run when any required validation job fails or is skipped unexpectedly.
- Workflow changes pass syntax validation and include a testable failure path for a tag not contained in `main`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
The tag-triggered release workflow can publish an arbitrary matching tag without proving that its commit is contained in
main. It also runs a narrower validation set than normal CI: the release job builds the solution and runs onlygclo.Engine.Tests, while normal CI additionally enforces CLI coverage, the coverage threshold, UI smoke tests, and formatting.This allows an immutable public release to be created from a commit or regression that would not pass the repository's normal contribution gates.
Evidence
.github/workflows/release.yml:10-13..github/workflows/release.yml:61-66..github/workflows/ci.yml:34-135.This finding was independently verified at commit
119ac26804ef93b98a262cb1c0c7a41afe71fde5. It is related to the release findings collected in #32, but is tracked separately so it can be implemented and closed independently.Acceptance criteria
mainbefore building or publishing artifacts.main.