You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Bind merge qualification to the independent issuer and verify fork contributions #27
Main is already protected by two active repository rulesets. The earlier opening premise inferred absence of protection from the legacy endpoint's 404; that was incomplete evidence. The branch and applicable-rules APIs independently report the actual protection.
Ruleset 20880170, Public target qualification, strictly requires Target branch qualification from GitHub Actions App 15368 and blocks deletion/non-fast-forward updates.
Both apply to main with no bypass actors. Main fbdc2c9 and merged PR Select exclusive clean trust for CI dependency requests #26 prove the same-repository positive CI path, including the three PHP/Laravel matrix jobs. They do not qualify fork behavior or resistance to contributor-controlled workflow substitution.
The Sonar workflow intentionally skips fork pull requests, while its separate App check remains required. The fork contribution path therefore needs direct qualification; no observed fork failure or live exploit is claimed. The generic Actions App/context binding also needs the independent qualification authority already being implemented in durable-workflow/.github#240. Security's current-state evidence and source analysis are in comments 6402160331 and 6402186237.
Acceptance and order:
Complete and live-qualify the existing protected independent issuer in .github#240, including fork, wrong-issuer, stale-base, malformed-input, ambiguous-write and required-rule controls. Do not create a duplicate issuer or protection baseline.
Record the exact delta and rollback, bind the existing AI target requirement to that qualified issuer, and verify the applicable strict rule and its positive/negative behavior.
Then prove the external fork/missing-context behavior and adjust the separate Sonar requirement as needed, preserving Sonar analysis and pushed findings. Do not remove the Sonar requirement before the independent authority is qualified and bound.
No settings, source, credentials or exploit PR were changed during this inspection. Keep the existing protections while completing the owning prerequisite and actual contribution-path acceptance.
Read-only verification at 2026-10-25T19:45Z contradicts the issue's opening premise. Do not install another protection baseline from the legacy endpoint result. No setting or source was changed by this review.
GET /repos/durable-workflow/ai/branches/main reports protected: true at main fbdc2c98b7b7d3cb1f06b6831fd10278b9b4e380.
GET /repos/durable-workflow/ai/rules/branches/main returns two applicable active repository rulesets.
Ruleset 20880170 (Public target qualification) applies only to refs/heads/main; it strictly requires Target branch qualification from GitHub Actions App 15368, blocks deletion and non-fast-forward updates, has no bypass actors, and reports current_user_can_bypass: never.
Ruleset 25192813 (SonarQube quality gate) also applies only to refs/heads/main; it strictly requires SonarCloud Code Analysis from App 12526, has no bypass actors, and reports current_user_can_bypass: never.
The legacy branch-protection endpoint returns 404 even though the branch and applicable-rules APIs prove ruleset protection. That endpoint is therefore not sufficient current-state evidence here.
The exact main Sonar workflow runs pull-request analysis only when the PR head repository equals the base repository. There is no historical cross-repository PR in this repository to disprove the resulting fork-path risk. Requiring the separate Sonar context can therefore strand a fork PR when that job is intentionally skipped.
Merged PR Select exclusive clean trust for CI dependency requests #26 proves the same-repository happy path: all three supported PHP/Laravel matrix jobs, central action-policy preflight, Target branch qualification, and both Sonar checks succeeded. It does not qualify the fork path, missing/skipped/cancelled dependency cases, or issuer spoof resistance.
Corrected next action
Preserve the existing qualified-target ruleset while reconciling it with .github#240. Treat the separately required Sonar context as the current contribution-path defect: record an exact settings delta and rollback, prove the fork/missing-context behavior without weakening the qualified aggregate, then read back the applicable rules after the reviewed change. Do not add another issuer or duplicate target-qualification rule. The issue title/body should be corrected to reflect an existing-protection reconciliation rather than an unprotected branch.
Security acceptance blocker — current aggregate is candidate-spoofable
The existing ruleset is real enforcement, but its current Target branch qualification requirement does not satisfy the issue's spoof-resistance criterion.
GitHub's current ruleset documentation states that required status checks do not take workflow, matrix, or event trigger identity into account; the rule binds the check name and selected source App. GitHub also documents that a pull_request workflow runs from the pull request merge commit, which can be controlled by a contributor without base-repository write access. Current AI ci.yml is such a pull_request workflow, and the required job is emitted by the generic GitHub Actions App 15368.
Consequently, a candidate can replace or alter its workflow and emit a successful job named Target branch qualification from the same expected Actions App without executing the protected-base central policy or the intended dependency matrix. Strict/up-to-date enforcement does not bind workflow identity. This is the exact authority gap addressed by draft .github#240, whose independent issuer is not activated.
Complete and live-qualify the protected independent issuer in .github#240, including fork, wrong-issuer, stale-base, malformed input, ambiguous-write, and required-rule controls.
Bind AI's required aggregate context to that independent App and read back the applicable rule plus strict behavior.
Only then remove or relax the separately required Sonar context after proving the fork contribution path and rollback.
Removing the Sonar requirement before the independent issuer is active would remove the current fork-path blockade while leaving the generic Actions aggregate forgeable. Do not make either settings change independently. No live exploit PR, setting, source, or credential change was made for this review.
changed the title [-]Protect main with qualified target-branch checks[/-][+]Bind merge qualification to the independent issuer and verify fork contributions[/+]on Oct 25, 2026
Correction: I incorrectly concluded that main was unprotected from the legacy endpoint 404. Fresh branch, applicable-rules and ruleset-detail reads independently confirm both active rulesets and no bypass actors. I corrected the title/body and retained the existing .github#240-first sequencing from comments 6402160331/6402186237. No protection, source or credential setting was changed.
Activity
rmcdaniel commentedon Oct 25, 2026
Security current-state correction
Read-only verification at 2026-10-25T19:45Z contradicts the issue's opening premise. Do not install another protection baseline from the legacy endpoint result. No setting or source was changed by this review.
GET /repos/durable-workflow/ai/branches/mainreportsprotected: trueat mainfbdc2c98b7b7d3cb1f06b6831fd10278b9b4e380.GET /repos/durable-workflow/ai/rules/branches/mainreturns two applicable active repository rulesets.20880170(Public target qualification) applies only torefs/heads/main; it strictly requiresTarget branch qualificationfrom GitHub Actions App15368, blocks deletion and non-fast-forward updates, has no bypass actors, and reportscurrent_user_can_bypass: never.25192813(SonarQube quality gate) also applies only torefs/heads/main; it strictly requiresSonarCloud Code Analysisfrom App12526, has no bypass actors, and reportscurrent_user_can_bypass: never.Target branch qualification, and both Sonar checks succeeded. It does not qualify the fork path, missing/skipped/cancelled dependency cases, or issuer spoof resistance.Corrected next action
Preserve the existing qualified-target ruleset while reconciling it with
.github#240. Treat the separately required Sonar context as the current contribution-path defect: record an exact settings delta and rollback, prove the fork/missing-context behavior without weakening the qualified aggregate, then read back the applicable rules after the reviewed change. Do not add another issuer or duplicate target-qualification rule. The issue title/body should be corrected to reflect an existing-protection reconciliation rather than an unprotected branch.rmcdaniel commentedon Oct 25, 2026
Security acceptance blocker — current aggregate is candidate-spoofable
The existing ruleset is real enforcement, but its current
Target branch qualificationrequirement does not satisfy the issue's spoof-resistance criterion.GitHub's current ruleset documentation states that required status checks do not take workflow, matrix, or event trigger identity into account; the rule binds the check name and selected source App. GitHub also documents that a
pull_requestworkflow runs from the pull request merge commit, which can be controlled by a contributor without base-repository write access. Current AIci.ymlis such apull_requestworkflow, and the required job is emitted by the generic GitHub Actions App15368.Consequently, a candidate can replace or alter its workflow and emit a successful job named
Target branch qualificationfrom the same expected Actions App without executing the protected-base central policy or the intended dependency matrix. Strict/up-to-date enforcement does not bind workflow identity. This is the exact authority gap addressed by draft.github#240, whose independent issuer is not activated.Primary documentation:
Safe sequencing
.github#240, including fork, wrong-issuer, stale-base, malformed input, ambiguous-write, and required-rule controls.Removing the Sonar requirement before the independent issuer is active would remove the current fork-path blockade while leaving the generic Actions aggregate forgeable. Do not make either settings change independently. No live exploit PR, setting, source, or credential change was made for this review.
[-]Protect main with qualified target-branch checks[/-][+]Bind merge qualification to the independent issuer and verify fork contributions[/+]rmcdaniel commentedon Oct 25, 2026
Correction: I incorrectly concluded that main was unprotected from the legacy endpoint 404. Fresh branch, applicable-rules and ruleset-detail reads independently confirm both active rulesets and no bypass actors. I corrected the title/body and retained the existing .github#240-first sequencing from comments 6402160331/6402186237. No protection, source or credential setting was changed.