keep normal PR/main CI limited to canonical package construction, verification, artifact transfer, and external-package integration
remove tag triggers, release write permission, corresponding-source publication work, and Gitea release mutation from normal CI
add a separate Publish Signage Release workflow that is workflow_dispatch only and requires an explicit version
require the operator-selected ref to be main, matching Core's manual package publisher
build the canonical Module Package once in a read-only release gate and run full external-package integration against those exact bytes
generate and verify ADR 0055 corresponding-source and redistribution assets before handing the proven six-file bundle to a separate write-authorized job
create or safely resume v<version> only after all gates pass, refuse conflicting tags/releases/assets, and anonymously read every uploaded asset back byte-for-byte
add static checks proving pull requests and pushes can never publish
shell syntax, Python compilation, and git diff --check
pnpm lint
pnpm typecheck
pnpm test (22 files, 262 tests)
pnpm build
pnpm validate (20 checks)
canonical package verification at commit 86121d793102a1f7f83fca190040551b452f4cf6: 9,240,197 bytes, SHA-256 29b1cfcd3e169d47b30f05b2010c75b7a598096b6d89ed3dccd0b742133d4954
full external-package integration against those bytes, including UI/API/display browsers, resilience, process restart, container recreation, lifecycle, exact-package reinstall, retained data/history, TLS, and Doctor
corresponding-source acquisition/build/verification and exact six-file release-bundle validation
No tag or real release was created or modified during this work.
## Summary
- keep normal PR/main CI limited to canonical package construction, verification, artifact transfer, and external-package integration
- remove tag triggers, release write permission, corresponding-source publication work, and Gitea release mutation from normal CI
- add a separate `Publish Signage Release` workflow that is `workflow_dispatch` only and requires an explicit version
- require the operator-selected ref to be `main`, matching Core's manual package publisher
- build the canonical Module Package once in a read-only release gate and run full external-package integration against those exact bytes
- generate and verify ADR 0055 corresponding-source and redistribution assets before handing the proven six-file bundle to a separate write-authorized job
- create or safely resume `v<version>` only after all gates pass, refuse conflicting tags/releases/assets, and anonymously read every uploaded asset back byte-for-byte
- add static checks proving pull requests and pushes can never publish
## Verification
- `bash ci/check-cleanup.sh` (26 checks passed)
- `python3 -m unittest -v ci/test_release_assets.py` (5 passed)
- shell syntax, Python compilation, and `git diff --check`
- `pnpm lint`
- `pnpm typecheck`
- `pnpm test` (22 files, 262 tests)
- `pnpm build`
- `pnpm validate` (20 checks)
- canonical package verification at commit `86121d793102a1f7f83fca190040551b452f4cf6`: 9,240,197 bytes, SHA-256 `29b1cfcd3e169d47b30f05b2010c75b7a598096b6d89ed3dccd0b742133d4954`
- full external-package integration against those bytes, including UI/API/display browsers, resilience, process restart, container recreation, lifecycle, exact-package reinstall, retained data/history, TLS, and Doctor
- corresponding-source acquisition/build/verification and exact six-file release-bundle validation
No tag or real release was created or modified during this work.
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.
Summary
Publish Signage Releaseworkflow that isworkflow_dispatchonly and requires an explicit versionmain, matching Core's manual package publisherv<version>only after all gates pass, refuse conflicting tags/releases/assets, and anonymously read every uploaded asset back byte-for-byteVerification
bash ci/check-cleanup.sh(26 checks passed)python3 -m unittest -v ci/test_release_assets.py(5 passed)git diff --checkpnpm lintpnpm typecheckpnpm test(22 files, 262 tests)pnpm buildpnpm validate(20 checks)86121d793102a1f7f83fca190040551b452f4cf6: 9,240,197 bytes, SHA-25629b1cfcd3e169d47b30f05b2010c75b7a598096b6d89ed3dccd0b742133d4954No tag or real release was created or modified during this work.