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
(issues #7627, #7630, #7636, #7637, #7639, #7640, #7641 — rubric finding: seven prior feedback-run attempts to land this fix via create_pull_request failed at git push; the same edit is being carried forward as a direct commit on this run)
Rubric finding: of 59 ci-scan runs since window-start (2026-06-08T13:53:53Z), the recurring skip reason is stale build window (>14d) / no follow-up build yet, defer to next run / no failed build in 7d. Runs hitting these conditions have consumed 2.2–2.4M+ effective tokens before concluding with noop — approximately 10× the ~250K ET of a correctly-halting Step 1 exit.
Rubric finding (tally correctness): the skipped-with-reason column reads 0 on skip-only runs (runs 58 and 59); Hard Rule 10 mandates the literal | 0 | 0 | 0 | 1 | row so the tally is honest.
Proposed edits
.github/workflows/ci-scan.agent.md (Hard Rules section, after rule 9): Add Hard Rule 10 that elevates the no-scannable-build exit to the same hard constraint level as the issue-cap rule — names exact forbidden operations (AzDO timeline fetch, log download, Helix query) and gives the literal tally row | 0 | 0 | 0 | 1 |.
.github/workflows/ci-scan.agent.md (Step 1 trailing sentence): Replace the inline restatement of the three skip reasons with a single reference to Hard Rule 10 so the constraint is stated once, authoritatively.
Expected behavior change
On any run where Step 1 yields a selection-time skip (no follow-up build yet, defer to next run, stale build window (>14d), or no failed build in 7d), the scanner will append the reason to the coverage file, print | 0 | 0 | 0 | 1 |, call noop, and stop immediately — without fetching any AzDO timeline, downloading any task log, or querying any Helix work item. This eliminates the observed ~10× token variance between correct low-ET runs (~250K ET) and high-ET runs (2.2–2.4M+ ET) on identical pipeline state, and ensures the tally row correctly shows skipped-with-reason=1 on skip-only runs.
Note
🔒 Integrity filter blocked 3 items
The following items were blocked because they don't meet the GitHub integrity level.
The patch file is available in the agent artifact in the workflow run linked above.
To create a pull request with the changes:
# Download the artifact from the workflow run
gh run download 28001364209 -n agent -D /tmp/agent-28001364209
# Create a new branch
git checkout -b ci-scan-feedback/hard-rule-10-early-exit-2026-06-23-95e476217153e017
# Apply the patch (--3way handles cross-repo patches where files may already exist)
git am --3way /tmp/agent-28001364209/aw-ci-scan-feedback-hard-rule-10-early-exit-2026-06-23.patch
# Push the branch to origin
git push origin ci-scan-feedback/hard-rule-10-early-exit-2026-06-23-95e476217153e017
# Create the pull request
gh pr create --title '[ci-scan-feedback] ci-scan: add Hard Rule 10 to force early exit on no scannable build' --base main --head ci-scan-feedback/hard-rule-10-early-exit-2026-06-23-95e476217153e017 --repo dotnet/machinelearning
Show patch preview (56 of 56 lines)
From 163c6c39021ab08ace2f51a42bc0c29a2f54e1fa Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com>
Date: Tue, 23 Jun 2026 04:11:33 +0000
Subject: [PATCH] ci-scan: add Hard Rule 10 to force early exit on no scannable
build
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
6 of 59 ci-scan runs consumed 2.2M-2.4M+ effective tokens before
concluding with a selection-time skip reason that should have stopped
the run at Step 1 in ~250K ET. The existing 'and stop' sentence was
not preventing further fetching of timelines, logs, and Helix data.
Add Hard Rule 10 which elevates the no-scannable-build exit to the same
level as the issue-cap and label rules: append the skip reason, print
| 0 | 0 | 0 | 1 |, call noop, and stop — without fetching any AzDO
timeline, downloading any log, or querying any Helix work item.
Update Step 1's trailing sentence to reference Hard Rule 10 directly
instead of restating the skip-reason list inline.
Signal: issues #7627, #7630, #7636, #7637, #7639, #7640, #7641
(seven prior failed PR attempts); runs consuming 2.2M+ ET on a
skip-only path.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.github/workflows/ci-scan.agent.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/ci-scan.agent.md b/.github/workflows/ci-scan.agent.md
index 0937c5f..8bbfdb5 100644
--- a/.github/workflows/ci-scan.agent.md+++ b/.github/workflows/ci-scan.agent.md@@ -78,6 +78,7 @@ These invariants are not delegated to the shared file. Honor them even if a shar
7. **All state under `/tmp/gh-aw/agent/`;** each bash call is a fresh subshell.
8. **AzDO REST is anonymous;** stay on `https://dev.azure.com/dnceng-public/public/_apis/build/...`. Follow every rule in [Environment constraints](shared/ci-scan.instructions.md#environment-constraints) (pre-bind URLs, `%24top`, no redirection).
9. **Sanitize every embedded log excer
... (truncated)
Triggering signals
create_pull_requestfailed at git push; the same edit is being carried forward as a direct commit on this run)stale build window (>14d)/no follow-up build yet, defer to next run/no failed build in 7d. Runs hitting these conditions have consumed 2.2–2.4M+ effective tokens before concluding with noop — approximately 10× the ~250K ET of a correctly-halting Step 1 exit.skipped-with-reasoncolumn reads0on skip-only runs (runs 58 and 59); Hard Rule 10 mandates the literal| 0 | 0 | 0 | 1 |row so the tally is honest.Proposed edits
.github/workflows/ci-scan.agent.md(Hard Rules section, after rule 9): Add Hard Rule 10 that elevates the no-scannable-build exit to the same hard constraint level as the issue-cap rule — names exact forbidden operations (AzDO timeline fetch, log download, Helix query) and gives the literal tally row| 0 | 0 | 0 | 1 |..github/workflows/ci-scan.agent.md(Step 1 trailing sentence): Replace the inline restatement of the three skip reasons with a single reference to Hard Rule 10 so the constraint is stated once, authoritatively.Expected behavior change
On any run where Step 1 yields a selection-time skip (
no follow-up build yet, defer to next run,stale build window (>14d), orno failed build in 7d), the scanner will append the reason to the coverage file, print| 0 | 0 | 0 | 1 |, callnoop, and stop immediately — without fetching any AzDO timeline, downloading any task log, or querying any Helix work item. This eliminates the observed ~10× token variance between correct low-ET runs (~250K ET) and high-ET runs (2.2–2.4M+ ET) on identical pipeline state, and ensures the tally row correctly showsskipped-with-reason=1on skip-only runs.Note
🔒 Integrity filter blocked 3 items
The following items were blocked because they don't meet the GitHub integrity level.
list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".list_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".To allow these resources, lower
min-integrityin your GitHub frontmatter:Note
This was originally intended as a pull request, but the git push operation failed.
Workflow Run: View run details and download patch artifact
The patch file is available in the
agentartifact in the workflow run linked above.To create a pull request with the changes:
Show patch preview (56 of 56 lines)