publish-plan: annotate a non-publishing pin push; codify fail-loud gates (#354) - #355
Merged
Conversation
…tes (#354) The push gate matches github.actor against a hard-coded bot allowlist. The allowlist is correct today, but if the App is renamed, replaced, or reinstalled under a new slug the comparison quietly evaluates false, publish is skipped, and the run stays green. The weekly schedule keeps publishing, so the only symptom is lost release timeliness - easy to miss for months, and it defeats the tracker's same-day purpose. Option 1 from the issue (minimal): a main pin push by an unrecognized actor now emits a ::warning:: instead of falling through silently. The publish decision is unchanged for every case - simulated across the matrix (codegen/dependabot/renamed-App/human x main/develop, plus schedule and dispatch): identical publish= results, the warning firing only on the silent-failure path. Also codifies the transferable rule as WORKFLOW.md D8.4: an identity allowlist used as a gate fails loud. It notes where an annotation is optional (the merge-bot's failure is self-announcing - bot PRs visibly pile up) and names the run-time identity resolution (GET /app) as the escalation if an allowlist proves fragile. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the release gating guidance and the reusable publish-plan workflow snippet so that identity-based allowlists do not fail silently when an unexpected github.actor appears (for example, if an App is renamed/reinstalled under a different slug).
Changes:
- Add a new WORKFLOW.md guarantee (D8.4) documenting that identity allowlists used as gates must emit a
::warning::on the non-matching path. - Update
publish-plan-task.ymlto warn (instead of silently no-op) when apushtomaindoes not match the bot allowlist.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| WORKFLOW.md | Codifies the “fail loud” rule for identity allowlists used as workflow gates (D8.4). |
| catalog/snippets/workflows/publish-plan-task.yml | Emits a ::warning:: when a main push is ignored due to an unrecognized actor, preventing silent non-publishing runs. |
…355) publish-plan-task is the generic publish gate every publish-release job reuses, not only the upstream-version pin flow, so "Pin push on main" would misread on any other push trigger. The message and its comment now say "Push to main ... release bot", which is accurate for every consumer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
catalog/snippets/workflows/publish-plan-task.yml:80
- The new rationale comment spans three lines; repo guidance says one line is the default and extra lines should be reserved for constraints the code cannot express. This can be condensed without losing intent.
# Fail loud: an unrecognized actor pushing to main is either a human commit (legitimately not
# publishing, but worth seeing) or a release bot under a new identity, which would otherwise
# stop publishing silently while a schedule keeps releasing - lost timeliness, no error.
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.
Fixes #354, taking option 1 (the minimal, recommended one) plus the generalization.
The fix
A
mainpin push by an actor outside the allowlist now emits a::warning::rather than falling through silently:Verification: the publish decision is unchanged
Simulated the patched logic across the full matrix - the gate behaves identically for every legitimate case, and the warning fires only on the silent-failure path:
Generalization codified: WORKFLOW.md D8.4
with the failure mode it prevents, and two judgment calls worth recording:
GET /app) removes the hard-coded string entirely, and is the right move only if an allowlist proves fragile in practice - noted rather than adopted, per the issue.Validation
actionlint clean on the snippet;
spec/validate.py, markdownlint, editorconfig-checker clean; LF preserved on the workflow YAML.🤖 Generated with Claude Code