Common safety and triage protocol for .NET MAUI CI-fixer workflows. Use whenever investigating, creating, or advancing a `[ci-fix]` or `[ci-fix-net11]` pull request from a `ci-scan` issue, including frozen ownership snapshots, Continue/Watch/Stop/Skip classification, manual single-issue dispatches, and scheduled sweeps.
76
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Use this protocol before proposing a code change or emitting a CI-fixer safe output. The calling workflow supplies its branch, labels, title prefix, attempt limit, and allowed write surface; preserve those caller-specific restrictions.
For each candidate, state one terminal decision before taking an action:
Decision: Continue — no dedup or safety gate blocks current-evidence analysis.Decision: Watch — exclusively an open workflow-owned CI-fix PR owns the
issue; advance only that PR.Decision: Stop — an explicit human PR owns the issue; do not monitor it or
plan a fallback CI-fix PR.Decision: Skip — the issue is stale, visual, already fixed, out of scope, or
cannot be safely advanced.Explain the concrete evidence for the decision. A search result is evidence to inspect, not a decision by itself.
Reason through all ownership evidence before emitting the decision. Return exactly one terminal decision; never emit a provisional decision and then correct it later in the response.
When the caller requests a strict decision format, complete the classification before writing any response text. Emit only the final decision and requested next action. Do not include a draft, correction, or alternate decision.
Refs: dotnet/maui#<issue> is the only Watch case. Never open a second CI-fix
PR for that issue.Refs: declaration or a
closing/reference keyword such as Fix, Fixes, Fixed, Close, Closes,
Closed, Resolve, Resolves, or Resolved followed by the issue
reference, including #<issue>, dotnet/maui#<issue>, or
https://github.com/dotnet/maui/issues/<issue>.GitHub search normally includes comments and incidental status text. Do not
treat a raw issue number in a comment, check summary, commit message, diff, or
unrelated list as human ownership. Inspect the PR title and body before stopping.
If every result is incidental, return Decision: Continue; an unrelated search
hit is not independently a reason to Stop or Skip.
Before a fresh attempt:
Advance only the existing CI-fix PR and respect the caller's effective attempt
counter. When the cap is reached, return Decision: Skip and defer rather than
advancing the existing PR or opening a replacement.
Never claim the target test is fixed from a category-level result or an unrelated
green leg; require evidence for the specific test on the CI-fix PR's current
head.
Before any code-push safe output, apply the caller's transport gate to the saved base and head. Reject transport unless the saved base is an ancestor, all new commits are append-only and merge-free, and the complete diff stays within the caller's allowed paths, commit count, file count, and patch-byte bounds. Never trim, conceal, or retry an unrelated or oversized diff merely to make it pass.
If a supported safe-output call returns a backend, connection, or validation
error, do not retry that mutation, continue the remaining mutation set, emit a
noop, or use a direct write path. Request one bounded report_incomplete safe
output and stop. A missing expected safe output is a failed/incomplete run, not
a successful no-write result.
90afade
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.