Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions by Evangelink · Pull Request #8899 · microsoft/testfx · GitHub
Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions by Evangelink · Pull Request #8899 · microsoft/testfx · GitHub
Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions by Evangelink · Pull Request #8899 · microsoft/testfx · GitHub
Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions by Evangelink · Pull Request #8899 · microsoft/testfx · GitHub
Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions by Evangelink · Pull Request #8899 · microsoft/testfx · GitHub
Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions by Evangelink · Pull Request #8899 · microsoft/testfx · GitHub
Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions by Evangelink · Pull Request #8899 · microsoft/testfx · GitHub
Skip to content

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions - #8899

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison
Jun 8, 2026
Merged

[msbuild-reviewer] Add Rule B-3: catch bare-token property typos in MSBuild conditions#8899
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/msbuild-reviewer-string-comparison

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Summary

Adds Rule B-3 — Bare-token property reference in conditions to the msbuild-reviewer.agent rule catalog. This is a real defect class caught manually on PR #8817 that Rule B-2 does not catch (B-2 only validates that both sides of an ==/!= are quoted).

The bug class

A condition like:

<PropertyGroupCondition="'(TestingPlatformCommandLineArguments)' != ''">
<!-- ... -->
</PropertyGroup>

looks correct at a glance, but the missing \$ means MSBuild compares the literal string (TestingPlatformCommandLineArguments) to '' — which is always true — so the whole PropertyGroup is always applied regardless of whether the property is actually set. PR #8817 caught this exact mistake; without a checklist entry, the next instance will reach review the same way.

Same defect class applies to items ('@(Name)') and metadata ('%(Name)').

What changed

FileChange
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 with severity 🔴 Error and a precise reviewer trigger ("a quoted token starting with ( immediately after the opening quote"). Renumbers the remaining Category B rules (4, 5, 6) accordingly. Adds the new rule to the Severity Definitions example list.

Risk

Pure content addition to an agent's rule catalog (5 insertions, 4 deletions — the deletions are just the renumbering of rules 3→4 and 4→5). No workflow YAML changes, no .lock.yml regeneration needed. The renumber is a one-shot churn; future findings citing Rule B-3 (added here) and onward will be stable.

Validation

  • git diff --stat1 file changed, 5 insertions(+), 4 deletions(-).
  • The new rule's precise trigger ("quoted token starting with ( immediately after the opening quote") is grep-able and matches the exact pattern that surfaced in PR MSBuild Condition Fixes #8817 ('(TestingPlatformCommandLineArguments)' != '').
  • No references to the renumbered rules elsewhere in the agent — the file uses Rule B-2, Rule A-3 formatting but the only existing reference to Category-B rules in the file uses the rule name, not the index.

🤖 Authored with GitHub Copilot CLI based on a one-month review-comment audit of microsoft/testfx (505 merged PRs sampled).

…pos in conditions
A condition like '(TestingPlatformCommandLineArguments)' != '' (caught in
PR #8817) is a property-reference typo - the missing dollar sign means MSBuild
compares the literal string (TestingPlatformCommandLineArguments) against the
empty string, so the condition is always true. The existing Rule B-2 only checks
that both sides are quoted, so it does not catch this defect class.
Adds:
- Rule B-3 'Bare-token property reference in conditions' (Error severity) with
the exact pattern reviewers should grep for: a quoted token starting with '('
immediately after the opening quote. Applies to property, item, and metadata
references alike.
- Updates the Severity Definitions example list to include this new rule.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 7, 2026 08:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the MSBuild reviewer agent rule catalog (msbuild-reviewer.agent) by adding a new Category B rule to catch a specific MSBuild condition typo pattern where a parenthesized token like '(Foo)' is mistakenly used instead of a real property reference like '$(Foo)', and renumbers the subsequent Category B rules accordingly.

Changes:

  • Add Rule B-3 to flag bare-token '(Name)' usages in Condition="..." as likely property/item/metadata reference typos.
  • Renumber existing Category B rules to accommodate the new rule.
  • Update the Severity Definitions examples to include the new defect class.
Show a summary per file
FileDescription
.github/agents/msbuild-reviewer.agent.mdAdds Rule B-3 to the rule catalog and updates Category B numbering and Severity Definitions to reflect the new rule.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 1

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
@Evangelink

Copy link
Copy Markdown
MemberAuthor

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Design-level note — Safe Auto-Fixes section not updated for Rule B-3

The Safe Auto-Fixes section currently allows the agent to auto-fix only B-1, B-2, and D-1 in scan mode:

- Adding Condition="'$(Prop)' == ''" to a clearly-intended default property setter (Rule B-1).
- Quoting both sides of a condition expression (Rule B-2).
- Adding Exists() guard to an obviously optional import (Rule D-1).

Correcting '(Foo)''$(Foo)' (Rule B-3) is a one-character, fully mechanical insertion — arguably less ambiguous than B-2 (quoting an unquoted condition requires choosing a pattern), since the intended sigil is unambiguous when a bare (Name) token is the sole content of a quoted operand. Without B-3 on this list, the agent will report the defect in the scan-mode issue but will never auto-fix it, even though the transformation is deterministic.

Suggested addition to the allow-list:

  • Correcting a bare-token reference from '(Name)' to '$(Name)' in a condition (Rule B-3). For items/metadata, apply only when the surrounding context unambiguously indicates @(Name) or %(Name) was intended.

The items/metadata qualifier keeps the conservative stance consistent with the existing auto-fix constraints.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M ·

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Documentation-only PR (single .md agent-definition file). The defect class is real, the severity classification is correct, and the example matches the actual bug from PR #8817. 18 of 21 dimensions are N/A; the two with minor findings are noted below.

#DimensionVerdict
1Algorithmic Correctness🟡 2 NIT
21Scope & PR Discipline🟡 1 MODERATE

✅ 19/21 dimensions clean.

  • Dim 1 — Rule B-3 trigger heuristic has two gaps: RHS comparisons not covered; items/metadata sigil-drop connection is implicit. Inline comment on line 110.
  • Dim 21Safe Auto-Fixes section not updated. B-3 correction ('(Foo)''$(Foo)') is a mechanical one-character fix, equally safe as the B-2 quoting fix already on the allow-list. Separate PR comment with suggested wording.

Generated by Expert Code Review (on open) for issue #8899 · sonnet46 2.6M

Comment thread.github/agents/msbuild-reviewer.agent.md Outdated
Address review feedback on PR #8899: the previous wording said the
bare-token condition is "always true", which is only correct for the
specific `!= ''` (or similar) right-hand side. The underlying defect
is that `'(Foo)'` is treated as a literal string and never expanded,
so depending on the operator and value the condition may be always
true, always false, or just incorrect.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Evangelink
Amaury Levé (Evangelink) merged commit 6fecedd into mainJun 8, 2026
27 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/msbuild-reviewer-string-comparison branch June 8, 2026 11:30
Sign up for freeto 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.

2 participants

@Evangelink