ci-fix: allow src/AI/** in the fixer's file allowlist (unblocks net11 twin) - #36601
Conversation
… twin)
The net11 twin (`ci-status-fix-net11`) has been failing in the `safe_outputs`
job on most scheduled runs since ~07-10. Every failure is the same:
Cannot create pull request: patch modifies files outside the
allowed-files list (src/AI/tests/Essentials.AI.UnitTests/...)
net11.0 gained a new `src/AI/` source tree (Essentials.AI / streaming-JSON)
that does not exist on `main`. The agent repeatedly finds a flaky
`Essentials.AI.UnitTests` test, builds a valid fix, and emits
`create_pull_request` — but `src/AI/**` was never added to the enforced
`allowed-files` allowlist, so the handler rejects the patch and the whole
run goes red. The flake can therefore never be filed, and one create-PR
slot is burned every sweep.
Add `src/AI/**` to both `allowed-files` blocks (create-pull-request and
push-to-pull-request-branch) in both twins. On `main` this is a harmless
no-op (no `src/AI/` tree exists there) and it keeps the twins byte-identical
per the mirror invariant, future-proofing a forward-port. Recompiled both
locks (0 errors / 0 warnings); the only lock delta is the prepended
`"src/AI/**"` entry in the two allowed_files arrays plus the metadata hash.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d41db557-d1b5-45e0-ba14-f5a71cf61f0a
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 36601Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 36601" |
|
Azure Pipelines: 1 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Pull request overview
Updates the CI Failure Fixer workflows’ safe-outputs configuration to allow patches touching the new src/AI/** tree (present on net11.0), unblocking ci-status-fix-net11 from creating PRs when fixes involve AI test infrastructure. The same allowlist update is mirrored into the main twin to preserve the established workflow symmetry.
Changes:
- Add
src/AI/**to the enforcedallowed-fileslist for bothcreate-pull-requestandpush-to-pull-request-branchinci-status-fixandci-status-fix-net11. - Regenerate both
*.lock.ymlfiles so the embedded safe-outputs handler config matches the updated allowlists.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/ci-status-fix.md |
Adds src/AI/** to both safe-outputs allowlists (create PR + push-to-PR-branch). |
.github/workflows/ci-status-fix.lock.yml |
Regenerated lockfile reflecting the updated allowlists in the embedded config JSON. |
.github/workflows/ci-status-fix-net11.md |
Adds src/AI/** to both safe-outputs allowlists for the net11 twin. |
.github/workflows/ci-status-fix-net11.lock.yml |
Regenerated lockfile reflecting the updated allowlists in the embedded config JSON. |
Copilot's findings
- Files reviewed: 4/4 changed files
- Comments generated: 0
PureWeen
left a comment
There was a problem hiding this comment.
Adversarial review — clean ✅
Ran an adversarial multi-model review of this PR: 3 independent reviewers with adversarial consensus. All three came back with no must-fix or should-fix findings.
What was verified
- Fix is correct & sufficient. gh-aw v0.80.9 compiles
src/AI/**→^src/AI/.*$, which matches both direct and nested files. The net11 daily-red failure came from a rejected patch to a nestedEssentials.AI.UnitTestsfile, so this allowlist entry resolves exactly that rejection. - Twin symmetry preserved.
src/AI/**contains no cross-ref tokens, so it's added identically to both twins — the 124-line symmetry invariant holds. Onmain(nosrc/AI/tree) the entry is effectively inert; on net11.0 it unblocks the workflow. - Locks are compiler-clean. Both
.lock.ymldeltas are the generatedallowed_filesarray entry + metadata hashes only — no hand edits, no semantic drift. - No security regression.
create-pull-request/push-to-pull-request-branchremain constrained bydraft: true,allowed-base-branches,required-title-prefix,required-labels, andprotected-files. PublicAPI behavior unchanged.
Non-blocking observation (all 3 reviewers converged, all deemed acceptable)
src/AI/ includes .csproj / Directory.Build.props / .targets that aren't in protected-files, so the widened allowlist technically permits touching them. This mirrors the existing uniform gap under every other allowlisted root (e.g. src/Core/…/Directory.Build.targets) — it's not a new risk class, and the draft/base/title/label guardrails still bound the blast radius. Out of scope for this focused fix; noted for future hardening if the team ever tightens build-infra protection across all roots.
Verdict: No changes requested. LGTM.
Methodology: 3 independent model reviewers, adversarial consensus (agree/dispute/discard). Comment-only — approval is a human decision.
kubaflo
left a comment
There was a problem hiding this comment.
🔍 AI-generated review (multi-model pipeline: Opus 4.8 · GPT-5.5 · Gemini 3.1 Pro), on behalf of @kubaflo.
✅ LGTM — src/AI/** allowlist addition
Clean, correctly-scoped change. src/AI/** is added to both enforced allowlists (create-pull-request and push-to-pull-request-branch) in both workflow sources (ci-status-fix.md and ci-status-fix-net11.md), alongside the existing src/Core/** / src/Controls/** / src/Essentials/** siblings. The compiled .lock.yml files are regenerated consistently (8 total src/AI/** occurrences = 4 source + 4 generated).
Verified:
.github/**stays excluded from the fixer's write surface — this only widens the allowlist to a legitimate MAUI source directory (src/AI/), unblocking the net11 twin from landing AI-project fixes.- Defense-in-depth constraints (
required-title-prefix,required-labels,allowed-base-branches: main) are unchanged. - No mismatch between the two workflow files or between source
.mdand generated.lock.yml.
No concerns.
ℹ Automated multi-model review. This is advisory — a human maintainer makes the final merge decision.
… twin) (dotnet#36601) > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Problem The **net11 twin** of the CI Failure Fixer (`ci-status-fix-net11`) has been failing in its `safe_outputs` job on most scheduled runs since ~2026-07-10 (red on 07-10, 07-12, 07-13, 07-14, and 07-15 ×2). Every failure is the same error: ``` Cannot create pull request: patch modifies files outside the allowed-files list (src/AI/tests/Essentials.AI.UnitTests/...) ``` `net11.0` gained a new **`src/AI/`** source tree (Essentials.AI / streaming-JSON) that **does not exist on `main`** (it 404s there). The agent repeatedly finds a flaky `Essentials.AI.UnitTests` test, builds a valid fix, and emits `create_pull_request` — but `src/AI/**` was never added to the enforced `allowed-files` allowlist. The handler rejects the patch, so: - the whole scheduled run goes **red** every time, - that AI-test flake can **never** be filed, and - one create-PR slot is **burned** each sweep. The `main` twin is unaffected because there is no `src/AI/` tree on `main`. ## Fix Add `src/AI/**` to **both** `allowed-files` blocks (`create-pull-request` and `push-to-pull-request-branch`) in **both** twins: - On **net11.0** it unblocks the failing PR creation. - On **main** it is a harmless no-op (no `src/AI/` tree exists there to match) and keeps the two workflow files byte-identical per the established mirror invariant — future-proofing a forward-port of the AI tree. Both `.lock.yml` files were recompiled with `gh aw compile` (0 errors / 0 warnings). The only substantive lock delta is the prepended `"src/AI/**"` entry in the two `allowed_files` arrays (plus the metadata hash line). No other handler config changed — `max` values, `add_labels allowed:[p/0]`, `mark_pull_request_as_ready_for_review`, `protected_files`, `base_branch`, and `title_prefix` are all unchanged. ## Verification - `gh aw compile ci-status-fix` and `gh aw compile ci-status-fix-net11` → **0 errors / 0 warnings** each. - Twin-symmetry invariant preserved (transformed-net11 vs main diff = **124 lines**, the pre-existing cosmetic delta — unchanged by this PR). - `gh aw lint` → no lint issues. - Confirmed via lock diff that the sole config change is `"src/AI/**"` prepended to the two `allowed_files` arrays in each twin. Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com>
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Problem
The net11 twin of the CI Failure Fixer (
ci-status-fix-net11) has been failing in itssafe_outputsjob on most scheduled runs since ~2026-07-10 (red on 07-10, 07-12, 07-13, 07-14, and 07-15 ×2). Every failure is the same error:net11.0gained a newsrc/AI/source tree (Essentials.AI / streaming-JSON) that does not exist onmain(it 404s there). The agent repeatedly finds a flakyEssentials.AI.UnitTeststest, builds a valid fix, and emitscreate_pull_request— butsrc/AI/**was never added to the enforcedallowed-filesallowlist. The handler rejects the patch, so:The
maintwin is unaffected because there is nosrc/AI/tree onmain.Fix
Add
src/AI/**to bothallowed-filesblocks (create-pull-requestandpush-to-pull-request-branch) in both twins:src/AI/tree exists there to match) and keeps the two workflow files byte-identical per the established mirror invariant — future-proofing a forward-port of the AI tree.Both
.lock.ymlfiles were recompiled withgh aw compile(0 errors / 0 warnings). The only substantive lock delta is the prepended"src/AI/**"entry in the twoallowed_filesarrays (plus the metadata hash line). No other handler config changed —maxvalues,add_labels allowed:[p/0],mark_pull_request_as_ready_for_review,protected_files,base_branch, andtitle_prefixare all unchanged.Verification
gh aw compile ci-status-fixandgh aw compile ci-status-fix-net11→ 0 errors / 0 warnings each.gh aw lint→ no lint issues."src/AI/**"prepended to the twoallowed_filesarrays in each twin.