Repository navigation
Publish attested preview and stable Pylon Prime releases #29
Description
Activity
- addedpkg:coding-agentAffects packages/coding-agentAffects packages/coding-agent
on Aug 31, 2026 Read-only implementation audit complete. No repository setting, file, tag, release, attestation, or publication was changed.
One concrete blocker must be fixed in #29: protected
pyloncurrently requiresCheck changelog fragment, but that workflow runs only onpull_request. A stable admission routine that honestly requires every branch-protection context on the exact merged source SHA would therefore always fail. The #29 PR should add apylonpush proof job that asserts the canonical repo/ref, resolves the associated merged PR, verifies its head check came from GitHub Actions app id15368and succeeded, then emits the required context on the merged SHA. It must not relabel a PR-head check as an exact merged-SHA check or silently omit a protected context.The smallest sound implementation is:
- protected preview publication only after the canonical
pylonpush aggregate and Ubuntu/macOS/Windows deterministic-install gates succeed; - immutable prerelease
pylon-build-g<sha12>-r<recipe>with the four tarballs, build manifest, deterministic preview manifest, and keyless build-provenance attestations for all six subjects; - manual
pylon-ref stable promotion that downloads and verifies an existing immutable preview, checks every exact-SHA protected context and attestation, runs the same bytes through three-OS install gates, and publishes only a signed stable manifest under monotonicpylon-stable-NNNNNN-g<sha12>-r<recipe>; - no rebuild, clobber, mutable release edit, npm/R2 credentials, arbitrary refs,
main, inheritedv*, or repository-source execution in the publisher; - rollback/withdrawal as a higher signed stable sequence with an append-only revocation list, never release/tag deletion.
Ordering remains strict: merge #32 first; create #29 from the resulting latest
origin/pylon(not PR #32's current head); configure immutable releases plus guardedpylon-preview/pylon-stableenvironments and full-SHA action policy before #29 merges; then verify the first preview and dispatch stable sequence000001as explicit maintainer checkpoints. No repository secret is required.Admin prerequisites do not exist yet: the repository currently has zero environments/releases/deployments, and the release-immutability setting was not exposed by the read-only REST probe. The publisher must require
immutable:trueafter publication and fail loudly otherwise. The first live preview remains a maintainer verification gate.- protected preview publication only after the canonical
Admin prerequisites advanced after #32 merged:
- repository immutable releases are now enabled and read back as
enabled: true(enforced_by_owner: false); - GitHub Actions remains enabled with the existing
allowed_actions: allpolicy, but full-SHA pin enforcement is now enabled and read back assha_pinning_required: true; - a pre-change scan found zero non-40-hex action references in current workflows.
No environment, release, tag, deployment, attestation, or publication was created.
pylon-previewandpylon-stableenvironment policies remain pending the final reviewed job boundaries.- repository immutable releases are now enabled and read back as
Maintainer approved the solo-maintainer environment model. Admin prerequisites are now complete:
pylon-preview: required reviewerrynfar, self-approval allowed, only custom deployment branchpylon;pylon-stable: required reviewerrynfar, self-approval allowed, only custom deployment branchpylon.
Both environment and branch-policy API responses were read back exactly. This is the deliberate single-maintainer exception: each deployment still requires explicit approval, but
prevent_self_reviewcannot be enabled until a second maintainer exists. No deployment, release, tag, or attestation was created.Publication tag governance is now configured and read back:
- repository ruleset
21950766, Pylon immutable publication tags; - active for
refs/tags/pylon-build-*andrefs/tags/pylon-stable-*(including sequence reservations); - blocks all tag updates and deletions;
- no bypass actors; API read-back reports
current_user_can_bypass: never; - new tag creation remains allowed so the protected publisher can atomically create the next reservation.
I first attempted to restrict creation with GitHub Actions app
15368as the sole bypass. GitHub rejected that configuration because its global Actions integration is not part of the repository or owner-organization ruleset source. I did not add a broad maintainer/owner bypass. This configuration instead preserves the key invariant: once any publication or sequence tag is created, neither the publisher nor a maintainer can update or delete it without an explicit governance change.No tag, release, deployment, or attestation was created.
- repository ruleset
- added 12 commits that reference this issue
on Aug 31, 2026
Problem
Deterministic fork tarballs still need a protected publication and promotion path. The fork intentionally removed upstream release automation because it targets
main/v*, depends on upstream R2 credentials, advances mutable channels, and uploads with--clobber. Restoring that workflow would violate the fork's product-branch and provenance boundaries.Required publication model
Use GitHub Releases in
pylon-code/prime-agentwith no external package or storage credentials:pylonpush publishes a prerelease preview for the exact merged source, using a Pylon-only tag such aspylon-build-g<sha12>-r<recipe>.refs/heads/pylonpromotes an existing preview to a monotonic stable tag such aspylon-stable-000001-g<sha12>-r<recipe>.--clobber.main, inherited upstreamv*tags, PR heads, and arbitrary refs.pylon, required exact-SHA checks are green, and preview attestations are valid.Provenance and permissions
id-token: writeandattestations: write.pylon-code/prime-agent, exact signer workflow/ref, source commit/tree, and recipe id.Acceptance coverage
mainnever publish;gh attestation verifydocumentation plus automated negative tests cover tamper, replay, wrong signer, and wrong subject;Scope and dependencies
Depends on #28's deterministic artifact contract. This issue owns publishing, keyless attestation, channel promotion, rollback/yank runbooks, and workflow governance only. It does not add a Pylon installer or updater.
Coordinate with #1 and Pylon #114. Do not restore upstream
.github/workflows/build-binaries.yml. Comet and #20 are not dependencies.