Repository navigation
docs: apply the history rules from adoption and make the caller workflow the only release template - #10
Merged
Conversation
…low the only release template templates/release.yml signed inside the build legs: the job that ran `cargo build`, and with it every dependency's build.rs and proc-macros, later received COLONY_SIGNING_KEY_PEM, the key Colony also trusts for its own self-updates. A process started by the build can outlive its step and read the key file. The in-build template, templates/sign-release.sh and the docs that sent programs to them are retired: sign-and-publish-caller.yml is now the one release template, and its build legs never see a key. The caller template gains what only the retired one had: the verified `Validate colony.json` step (Colony's signature and signed .meta checked before it runs), the architecture check for the Intel macOS cross-build, and the release-please and recovery notes. It names the organisation pin of the shared workflow instead of asking for main's current commit, pins dtolnay/rust-toolchain on master (the stable branch is rebased, so its SHAs become unreachable) and takes upload-artifact v7.0.2. templates/program/README.md gets a `## Code signing policy` section, the anchor every release's notes link to, with openssl verification commands and the SignPath wording held back until SignPath signs, plus a `## Privacy` skeleton. design/documentation.md lists both. design/releases.md: conventional commits and squash-only merges apply from adoption (2026-10-09 for existing repositories) and history before that is never rewritten; the PR_TITLE squash setting is the stated default; sections 5, 7 and 8 point at the caller template; Arch Colony's pacman repositories and ISO images get their signing and source rules. The tracked agent skill and the .gitignore lines for agent folders go.
The caller template pins sign-and-publish.yml at the organisation commit, and design/releases.md says that pin moves for every program at once, only when the workflow changes. The github-actions entry of the Dependabot template tracked every `uses:` ref, the pin included, so it would propose the newest commit of this repository to each caller on its own, and the org rule to merge green Dependabot PRs would then break the shared pin. The template now ignores this repository, and releases.md says why.
This was referenced Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was wrong
templates/release.ymlsigned inside the build legs. The job that rancargo build, and with it thebuild.rsand procedural macros of every dependency, later receivedCOLONY_SIGNING_KEY_PEM. A process started during the build can keep running until the job ends and read the key file a later step writes. That key is also the one Colony trusts for its own self-updates, so one compromised crate in any program copying the template could forge launcher updates.design/releases.mdsections 7 and 8 still sent new and existing programs to that template and totemplates/sign-release.sh.The caller template, the safe path, lacked the
colony.jsonvalidation and the Intel macOS architecture check the in-build template had, told authors to pin the shared workflow at main's current commit rather than the organisation pin, and the program README skeleton had no## Code signing policysection although the shared workflow links every release's notes to that anchor.What changed
templates/release.ymlandtemplates/sign-release.share removed.templates/sign-and-publish-caller.ymlis the only release workflow template; its build legs never receive a key..github/workflows/sign-and-publish.ymlis untouched (callers pin it at619460ff4dc0049f129955f0988d368427b9eedb).Validate colony.jsonstep to the Linux leg (embedded Colony release public key,colony-linux+.sig+.meta+.meta.sigfrom Project-Colony/Colony, twoopenssl pkeyutl -verify, theasset=andsha256=check, thenvalidate-manifestwith the four asset names). It keeps the--versionsmoke test on every executable leg and adds thefilecheck for the Intel macOS cross-build. It names the organisation pin of the shared workflow, documents the release-please and recovery parts that used to live in the retired template, and notes whencode-signing-policymust be turned off. The tag checkout keepspersist-credentials: false(the only checkout left intemplates/).actions/upload-artifactv7.0.2 (cf430e0).dtolnay/rust-toolchainis pinned on master (e2a55d2, 2026-10-09) withtoolchain: stable, because thestablebranch is rebased onto every master commit and its SHAs stop being reachable (the old pin4cda84dalready is). Checked withgh api: checkout v7.0.1 and release-please-action v5.0.0 are already current. rust-cache, action-gh-release and download-artifact were used only by the removed template.templates/program/README.md. New## Code signing policysection (what is signed, with which key,opensslverification commands with the public key, a link todesign/releases.md#5-signing, and the SignPath wording and team roles in a comment to add only once SignPath signs). New## Privacyskeleton per ORG-9, with SignPath Foundation's accepted sentence for programs that contact nothing.design/documentation.mdlists both sections and what they must say.design/releases.md.PR_TITLE/COMMIT_MESSAGES, squash only, delete branch on merge). Every public org repository except the archives already usesPR_TITLE.SigLevel = Required DatabaseRequired, and ISO images with their sources or a written offer.templates/README.md,README.md(templates row),design/repository-layout.md(scripts/),design/dependencies.md(one template, pins bumped by hand since Dependabot does not readtemplates/).templates/dependabot.ymlignoresProject-Colony/Project-Colony-Resourcesin itsgithub-actionsentry, and "The pin" indesign/releases.mdsays why: Dependabot would otherwise propose the newest commit ofmainto each caller on its own, which contradicts the rule that the pin moves for every program at once..claude/skills/colony-theme-set/SKILL.mdand the.gitignorelines for agent folders are removed.templates/or indesign/releases.md.How it was verified
Validate colony.jsonstep from the template with a YAML parser and ran it locally against Colony v0.10.4. A valid manifest passes (both signatures verify,colony.json: OK). A manifest naming an unknown platform exits 1. A modified public key fails at the firstopensslverify before anything runs.## Code signing policycommands against Colony v0.10.4'scolony-linux: both signatures verify, and the.metasha256 equalssha256sum.gh api.cargo run -p colony-tokens -- check:generated/is up to date. No Rust code reads the changed files.Links from other repositories
Only Colony linked
templates/release.ymlandtemplates/sign-release.sh(gh search code). Project-Colony/Colony#89 points those links attemplates/sign-and-publish-caller.yml; its links work onmaintoday, so the order of the two merges does not matter.Left out on purpose
.github/workflows/sign-and-publish.ymlstill mentionstemplates/release.ymlandtemplates/sign-release.shin three comments. Editing it would move the file away from the organisation pin, so those comments should change the next time the workflow itself changes.