Skip to content

Fix manual-dispatch condition analysis - #273

Merged
rmcdaniel merged 2 commits into
mainfrom
fix/dispatch-condition-semantics-20261101
Nov 1, 2026
Merged

rmcdaniel merged 2 commits into
mainfrom
fix/dispatch-condition-semantics-20261101

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Nov 1, 2026 •

Copy link
Copy Markdown
Member

Privileged manual-dispatch guards can pass policy when event-name case or bare-negation precedence is misread. Match ASCII event literals case-insensitively, and treat ungrouped negation/comparison forms as unknown. Preserve grouped negation, Boolean composition and the existing protected-ref model. Unsupported Unicode spellings cannot establish trust.

The old implementation produces six failing rejection subcases and three falsely rejected safe cases. The corrected focused suite passes 25 tests. All 11 local Python modules pass 118 tests, with the npm/Cargo client controls skipped because those binaries are absent from the disposable image; normal hosted CI retains them. The 11-target candidate workflow trust scan passes. This is parser validation, not a live dispatch or credential test.

Keep this correction separate from #271's fork-cache enforcement. No workflow permissions, required checks, publication job or provider setting changes.

Fixes #272.

@sonarqubecloud

sonarqubecloud Bot commented Nov 1, 2026

Copy link
Copy Markdown

@rmcdaniel

Copy link
Copy Markdown
Member Author

The final head is f8e8487576d061251db7ffc934da913d00a33f2c. The last change extracts the existing supported-negation check into a helper to meet the complexity limit; its truth model is unchanged. All seven hosted checks pass, including Shared contract tests, CodeQL and Sonar. Sonar reports zero open findings on this PR.

The normal 11 local Python modules complete 118 tests with two npm/Cargo client skips. The fresh immutable public-main workflow catalog, observed November 1 at 23:22 UTC, contains 97 workflows across 11 public targets; every target passes this candidate policy without overlays. The private target is excluded. No live dispatch or credential test ran.

This fixes #272 independently of #271. The fork-cache enforcement PR remains draft until its repository prerequisites merge and its fresh catalog passes.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 1, 2026 23:25
@rmcdaniel
rmcdaniel merged commit 07d5d6a into main Nov 1, 2026
7 checks passed
@rmcdaniel
rmcdaniel deleted the fix/dispatch-condition-semantics-20261101 branch November 1, 2026 23:28
@rmcdaniel

Copy link
Copy Markdown
Member Author

Security review of merged source head f8e8487: accepted. Bare negation of an ungrouped comparison is now conservative, event-name comparison models Actions case-insensitivity only for ASCII literals, and grouped negation plus protected-ref composition retain the safe accepted cases. The correction merged normally with current checks green and closes the privately recorded unexploited policy gap. No dispatch, credential use, incident, or release hold resulted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Correct manual-dispatch condition casing and negation analysis

1 participant