Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

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

Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

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

Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

@ptr727
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

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

Answer Four Promotion-Review Findings Against Content Already on Develop - #1168

Merged
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits
Sep 1, 2026
Merged

Answer Four Promotion-Review Findings Against Content Already on Develop#1168
ptr727 merged 1 commit into
developfrom
feature/1163-promotion-review-nits

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Answers four review findings raised on the develop -> main promotion #1163 against content already merged to develop. The promotion's diff cannot carry a fix, so they land here.

FindingFix
local-strict-review's refusal table says "no count of the rows is kept here to go stale against the table", then refers to two rows by positionBoth now name the row by its own wording, so an inserted or reordered row breaks neither
OPERATIONS.md explains why CI carries !cancelled() on report --check and leaves the local block beside it reading as though it behaved the sameStates that the local block runs under set -Eeuo pipefail, so a failing check stops it and the gates below never run
test_canonical_review.py creates a symlink unconditionally, which Windows refuses without the privilege or Developer ModeSkips with the reason instead, so the case reports an execution boundary rather than failing as though the guard broke
test_pr_review.py's unknown-marker floor covers headings and metadata labels, while the positive case beside it covers all three vetted listsAdds the summary arm, so turning off summary vetting can no longer leave both green

Verification

The two test changes were checked by mutation rather than by reading. Vetting an unknown summary in pr_review.VETTED_SUMMARIES makes exactly one test fail, the new arm, and nothing else. The symlink guard still fails as before when a symlink can be created, which is the case on this host.

prose_lint, ruff check, ruff format --check, spec/validate.py, build_dist --check and the full scripts/tests suite all pass, and the one canonical unit this moves is recorded.

Not fixed here

One finding on #1163 is declined rather than carried: docs/reusable-workflows.md naming NUGET_USERNAME. That is the NuGet mechanism's credential, declared fleet-wide in spec/secrets.json under nuget-oidc and identical for every NuGet adopter, so it is the mechanism the hub guide is supposed to describe rather than an adopter's own specifics. The reasoning is in that thread.

The refusal table said no count of its rows is kept here so a row cannot go stale
against it, then referred to two rows by position. An inserted or reordered row
breaks both, which is the failure that sentence exists to prevent. Both now name
the row by its own wording.
OPERATIONS.md explained why CI carries !cancelled() on report --check and left
the local block beside it reading as though it behaved the same. It runs under
set -Eeuo pipefail, so a failing check stops it and every gate below never runs.
The symlink guard's own test created a symlink unconditionally, which Windows
refuses without the privilege or Developer Mode, so the case would have failed
with an environment error rather than reporting the guard it tests. It skips with
the reason instead, which is the execution-boundary distinction rather than a
verdict.
The unknown-marker floor covered headings and metadata labels while the positive
case beside it covered all three vetted lists, so turning off summary vetting
would have left both green. Verified by vetting an unknown summary and watching
exactly the new arm fail.
CopilotAI lite review requested due to automatic review settings September 1, 2026 18:52
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Resolve promotion-review documentation and test findings

🐞 Bug fix🧪 Tests📝 Documentation🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces brittle positional references in canonical-review guidance with stable wording-based
references.
• Clarifies local fail-fast gate behavior and refreshes distributed skill metadata.
• Makes symlink tests capability-aware and covers unknown PR-review summary markers.
Diagram

sequenceDiagram
actor R as Promotion review
participant S as Skill source
participant D as Distributed skills
participant O as Operations guide
participant T as Test suites
participant A as Generated records
R->>S: Stabilize refusal references
S->>D: Propagate canonical wording
S->>A: Refresh digest and ledger
R->>O: Clarify local fail-fast
R->>T: Harden regression coverage
Loading
High-Level Assessment

The targeted approach is appropriate: capability-based symlink skipping is more accurate than an OS-specific condition, explicit summary-marker coverage closes the exact regression gap, and wording-based documentation references remain stable under table reordering. Mocking symlink behavior or restructuring the review machinery would add complexity without improving these focused fixes.

Files changed (8) +19 / -12

Tests (2) +8 / -1
test_canonical_review.pySkip symlink guard test when unsupported+7/-1

Skip symlink guard test when unsupported

• Catches host-level symlink creation failures, restores the temporary fixture, and reports the environment limitation as a skipped test. Hosts capable of creating symlinks still exercise both external and internal symlink refusals.

scripts/tests/test_canonical_review.py

test_pr_review.pyCover unknown summary markers+1/-0

Cover unknown summary markers

• Adds an unknown '<summary>' marker to the negative marker-vetting test. The test now protects heading, metadata-label, and summary recognition paths consistently.

scripts/tests/test_pr_review.py

Documentation (4) +7 / -7
SKILL.mdReplace positional refusal-table references+2/-2

Replace positional refusal-table references

• Names the carried-unit row and missing-pass headline directly instead of referring to numbered or relative rows. This keeps remediation guidance valid when the table is reordered or extended.

.agents/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize Claude plugin review guidance+2/-2

Synchronize Claude plugin review guidance

• Propagates the stable wording-based refusal references into the Claude plugin’s distributed skill copy.

.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.md

SKILL.mdSynchronize GitHub review guidance+2/-2

Synchronize GitHub review guidance

• Propagates the stable wording-based refusal references into the GitHub-distributed skill copy.

.github/skills/local-strict-review/SKILL.md

OPERATIONS.mdDistinguish local fail-fast behavior from CI+1/-1

Distinguish local fail-fast behavior from CI

• Explains that the local verification block runs under 'set -Eeuo pipefail', so a failed canonical check prevents later gates from running. This distinguishes local execution from CI’s '!cancelled()' reporting behavior.

OPERATIONS.md

Other (2) +4 / -4
.source-digestRefresh the distributed skill source digest+1/-1

Refresh the distributed skill source digest

• Updates the generated digest after changing the canonical local-strict-review skill content.

.claude-plugin/fleet-skills/.source-digest

canonical-review.jsonRecord the reviewed canonical skill revision+3/-3

Record the reviewed canonical skill revision

• Updates the local-strict-review unit digest, reviewed commit, and timestamp after the canonical documentation change.

reports/canonical-review.json

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

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.

🟢 Approval recommended

The updates are consistent with the stated findings, improve test robustness across platforms, and do not introduce behavioral or contract regressions.

Pull request overview

Addresses four promotion-review findings that were raised on the develop -> main promotion PR (#1163) against content already merged into develop, by tightening marker-vetting coverage, clarifying canonical-review behavior in local vs CI runs, and making a Windows-specific symlink test report an execution boundary instead of a false negative.

Changes:

  • Extend pr_review marker-shape floor coverage by adding the missing <summary>/summary-arm case to the “unknown marker” test.
  • Make the canonical-review symlink test skip (with an execution-boundary reason) on hosts that cannot create symlinks (notably Windows without privilege/Developer Mode).
  • Update local-strict-review refusal-table wording to avoid referencing rows by position; refresh derived skill distributions and the canonical-review ledger entry.
File summaries
FileDescription
scripts/tests/test_pr_review.pyAdds the missing summary unknown-marker case so summary vetting can’t silently regress.
scripts/tests/test_canonical_review.pySkips the symlink-guard test with an execution-boundary explanation when symlink creation is not permitted.
reports/canonical-review.jsonUpdates the recorded digest/stamp for the changed canonical unit.
OPERATIONS.mdClarifies why the local gate sequence can’t mirror CI’s !cancelled() behavior for report --check.
.github/skills/local-strict-review/SKILL.mdRemoves row-number-based references in the refusal table by pointing to row wording/relative placement instead.
.claude-plugin/fleet-skills/skills/local-strict-review/SKILL.mdPropagates the same refusal-table wording fix into the plugin distribution.
.claude-plugin/fleet-skills/.source-digestUpdates the distribution source digest to reflect the regenerated skill content.
.agents/skills/local-strict-review/SKILL.mdUpdates the canonical skill source with the same refusal-table wording fix.
Review details
  • Files reviewed: 8/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 10066ed into developSep 1, 2026
8 checks passed
@ptr727
ptr727 deleted the feature/1163-promotion-review-nits branch September 1, 2026 18:59
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

@ptr727