Skip to content

fix(scripts): add per-violation Write-Host and Write-CIAnnotation output to Test-DependencyPinning#640

Merged
WilliamBerryiii merged 5 commits intomicrosoft:mainfrom
AhmedMustafa249:bug/fix-missing-per-violation-WriteHost-and-WriteCIAnnotation
Feb 17, 2026
Merged

fix(scripts): add per-violation Write-Host and Write-CIAnnotation output to Test-DependencyPinning#640
WilliamBerryiii merged 5 commits intomicrosoft:mainfrom
AhmedMustafa249:bug/fix-missing-per-violation-WriteHost-and-WriteCIAnnotation

Conversation

@AhmedMustafa249
Copy link
Contributor

@AhmedMustafa249 AhmedMustafa249 commented Feb 17, 2026

Pull Request

Description

  • add grouped-by-file Write-Host output with per-violation detail lines
  • add Write-CIAnnotation Warning call per unpinned dependency with file and line
  • add global Pester mocks for Write-Host, Write-CIAnnotation, and Write-CIStepSummary
  • add 6 test assertions covering violation and clean-scan CI output paths

Related Issue(s)

Fixes #631

Type of Change

Select all that apply:

Code & Documentation:

  • Bug fix (non-breaking change fixing an issue)
  • New feature (non-breaking change adding functionality)
  • Breaking change (fix or feature causing existing functionality to change)
  • Documentation update

Infrastructure & Configuration:

  • GitHub Actions workflow
  • Linting configuration (markdown, PowerShell, etc.)
  • Security configuration
  • DevContainer configuration
  • Dependency update

Other:

  • Script/automation (.ps1, .sh, .py)
  • Other (please describe):

Testing

  • npm run lint:ps — All 49 PowerShell files pass PSScriptAnalyzer checks
  • npm run test:ps — 62/62 dependency pinning tests pass, 0 failures, 0 regressions
  • Patch coverage: 100% (9/9 executable lines), exceeds 80% gate

Checklist

Required Checks

  • Documentation is updated (if applicable)
  • Files follow existing naming conventions
  • Changes are backwards compatible (if applicable)
  • Tests added for new functionality (if applicable)

Required Automated Checks

The following validation commands must pass before merging:

  • Markdown linting: npm run lint:md
  • Spell checking: npm run spell-check
  • Frontmatter validation: npm run lint:frontmatter
  • Link validation: npm run lint:md-links
  • PowerShell analysis: npm run lint:ps

Security Considerations

  • This PR does not contain any sensitive or NDA information
  • Any new dependencies have been reviewed for security issues
  • Security-related scripts follow the principle of least privilege

Additional Notes

  • Annotation placement order

The reference pattern in Invoke-PSScriptAnalyzer.ps1 emits Write-CIAnnotation before Write-Host for each violation. This implementation reverses that order (Write-Host first, then Write-CIAnnotation). Both execute synchronously within the same loop iteration so there is no functional impact. A follow-up can swap the order for cross-script consistency.

  • Workflow annotation deduplication

Dependency-pinning-scan.yml (lines 116–136) iterates violations from the JSON report and emits ::warning annotations. The script now also emits Write-CIAnnotation -Level Warning per violation, producing duplicate annotations with different message formats. This duplication is accepted per issue #631 scope. A follow-up issue can remove the workflow's inline ::warning loop or gate it on a script output flag.

AhmedMustafa249 and others added 2 commits February 17, 2026 10:37
…put to Test-DependencyPinning

- add grouped-by-file Write-Host output with per-violation detail lines
- add Write-CIAnnotation Warning call per unpinned dependency with file and line
- add global Pester mocks for Write-Host, Write-CIAnnotation, and Write-CIStepSummary
- add 6 test assertions covering violation and clean-scan CI output paths
@AhmedMustafa249 AhmedMustafa249 marked this pull request as ready for review February 17, 2026 16:12
@AhmedMustafa249 AhmedMustafa249 requested a review from a team as a code owner February 17, 2026 16:12
@katriendg katriendg requested a review from Copilot February 17, 2026 16:23
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds richer CI/log output to the dependency pinning security scan so contributors can see per-violation details directly in logs and as CI annotations, with accompanying Pester coverage.

Changes:

  • Emit grouped-by-file Write-Host output for dependency pinning violations (and a success line when clean).
  • Emit per-violation Write-CIAnnotation -Level Warning with file/line targeting.
  • Add Pester mocks + assertions to validate both “clean scan” and “violations” output paths.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
scripts/security/Test-DependencyPinning.ps1 Adds per-violation console output and CI annotations within Invoke-DependencyPinningAnalysis.
scripts/tests/security/Test-DependencyPinning.Tests.ps1 Mocks CI output functions and adds assertions for success/no-violation and violation scenarios.

AhmedMustafa249 and others added 3 commits February 18, 2026 00:43
…output before falling back to CurrentRef

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
modify Write-CIAnnotation -File $dep.File to pass absolute file path to ensure the correct file is resolved

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@WilliamBerryiii
Copy link
Member

Thanks for the contribution, @AhmedMustafa249! Welcome to the project 🎉

We'll start the review shortly.

@codecov-commenter
Copy link

Codecov Report

❌ Patch coverage is 12.50000% with 14 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.08%. Comparing base (ae3a35d) to head (6f47f0e).

Files with missing lines Patch % Lines
scripts/security/Test-DependencyPinning.ps1 12.50% 14 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #640      +/-   ##
==========================================
- Coverage   85.36%   85.08%   -0.29%     
==========================================
  Files          23       23              
  Lines        4475     4491      +16     
==========================================
+ Hits         3820     3821       +1     
- Misses        655      670      +15     
Flag Coverage Δ
pester 85.08% <12.50%> (-0.29%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
scripts/security/Test-DependencyPinning.ps1 84.21% <12.50%> (-3.52%) ⬇️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@WilliamBerryiii WilliamBerryiii merged commit 9d3b71d into microsoft:main Feb 17, 2026
18 checks passed
WilliamBerryiii pushed a commit that referenced this pull request Feb 20, 2026
🤖 I have created a release *beep* *boop*
---


##
[3.0.0](hve-core-v2.3.10...hve-core-v3.0.0)
(2026-02-20)


### ⚠ BREAKING CHANGES

* **skills:** migrate PR reference generation to self-contained skill
([#669](#669))
* restructure RPI collection to HVE Core naming convention
([#668](#668))

### ✨ Features

* **agents:** add agile-coach agent
([#562](#562))
([de8d86c](de8d86c))
* **agents:** add DT coach agent with tiered instruction loading
([#656](#656))
([206d3a7](206d3a7))
* **agents:** add product manager advisor and UX/UI designer agents
([#627](#627))
([539eb8a](539eb8a))
* **agents:** add system architecture reviewer for design trade-offs and
ADR creation ([#626](#626))
([de5cfd6](de5cfd6))
* **build:** pin devcontainer image and align tool parity
([#704](#704))
([6258b1c](6258b1c))
* **design-thinking:** add manufacturing industry context template
([#682](#682))
([ce864bf](ce864bf))
* **instructions:** add DT coaching state protocol for session
persistence ([#654](#654))
([5a5be4e](5a5be4e))
* **instructions:** add dt-coaching-identity ambient instruction
([#642](#642))
([6209a0d](6209a0d))
* **instructions:** add dt-method-01-deep for advanced scope
conversation techniques
([#673](#673))
([cc92ef9](cc92ef9))
* **instructions:** add dt-method-03-deep for advanced input synthesis
techniques ([#676](#676))
([0079a4f](0079a4f))
* **instructions:** add dt-method-09-deep instructions for Method 9
advanced coaching
([#703](#703))
([150b2a6](150b2a6))
* **instructions:** add dt-method-sequencing ambient instruction
([#650](#650))
([e465b2f](e465b2f))
* **instructions:** add dt-quality-constraints and design-thinking
collection ([#645](#645))
([17002bd](17002bd))
* **instructions:** add DT-to-RPI handoff contract specification
([#679](#679))
([87f9962](87f9962))
* **instructions:** add energy industry context template
([#687](#687))
([41088d8](41088d8))
* **instructions:** add healthcare industry context template
([#686](#686))
([b2d5281](b2d5281))
* **instructions:** add Method 1 Scope Conversations coaching knowledge
([#651](#651))
([93e2d48](93e2d48))
* **instructions:** add Method 2 Design Research coaching knowledge
([#652](#652))
([30f7f3b](30f7f3b))
* **instructions:** add Method 3 Input Synthesis coaching knowledge
([#653](#653))
([1efdb7d](1efdb7d))
* **instructions:** add Method 7 High-Fidelity Prototypes coaching
instruction ([#666](#666))
([9233eab](9233eab))
* **instructions:** add pull request instructions for PR generation
workflow ([#706](#706))
([73d23eb](73d23eb))
* **instructions:** create DT curriculum content (9 modules)
([#690](#690))
([9f7378f](9f7378f)),
closes [#617](#617)
* **instructions:** create dt-method-02-deep.instructions.md
([#700](#700))
([4d4d0ca](4d4d0ca))
* **instructions:** create dt-method-06-lofi-prototypes.instructions.md
([#684](#684))
([4d5f757](4d5f757))
* **instructions:** create dt-method-07-deep.instructions.md
([#678](#678))
([d3ec70d](d3ec70d))
* **instructions:** Create dt-method-08-deep.instructions.md
([#683](#683))
([d9e1115](d9e1115))
* **instructions:** create dt-method-08-testing.instructions.md
([#681](#681))
([3008ad8](3008ad8))
* **instructions:** create dt-method-09-iteration.instructions.md
([#685](#685))
([9d7f4f5](9d7f4f5))
* **instructions:** create dt-rpi-research-context.instructions.md
([#689](#689))
([34c7b89](34c7b89))
* **instructions:** create manufacturing reference learning scenario
([#692](#692))
([1bd3994](1bd3994))
* **instructions:** Design Thinking Method 4 brainstorming instruction
file ([#664](#664))
([06f90b0](06f90b0))
* **prompts:** add DT start-project prompt for coaching initialization
([#657](#657))
([ce583d5](ce583d5))
* **prompts:** add dt-resume-coaching prompt for session recovery
([#665](#665))
([11b93cb](11b93cb))
* **prompts:** create dt-handoff-problem-space.prompt.md
([#688](#688))
([277963d](277963d))
* **scripts:** add collection-level maturity field with validation,
gating, and notices
([#697](#697))
([7b1c8e8](7b1c8e8))
* **scripts:** add per-violation CI annotations and colorized console
output ([#637](#637))
([bd7d512](bd7d512))
* **skills:** edit SKILL frontmatter schema, add CI validation, and
documentation ([#625](#625))
([0138a78](0138a78))
* **skills:** mandate unit testing and document language support
([#636](#636))
([9263617](9263617))
* **skills:** migrate PR reference generation to self-contained skill
([#669](#669))
([cf8805f](cf8805f))


### 🐛 Bug Fixes

* **collections:** migrate artifacts into collection-based
subdirectories
([#658](#658))
([dfa5261](dfa5261))
* **instructions:** optimize Phase 1 DT token budgets and close
[#564](https://github.com/microsoft/hve-core/issues/564)/[#565](https://github.com/microsoft/hve-core/issues/565)
gaps ([#675](#675))
([4f42f00](4f42f00))
* **scripts:** add CI annotations and step summary to copyright header
check ([#638](#638))
([5fa6328](5fa6328))
* **scripts:** add grouped link-lang console diagnostics and failure
summary ([#661](#661))
([4d6871f](4d6871f))
* **scripts:** add per-violation Write-Host and Write-CIAnnotation
output to Test-DependencyPinning
([#640](#640))
([9d3b71d](9d3b71d))
* **scripts:** align agent frontmatter schema with VS Code spec
([#469](#469))
([254d445](254d445))
* **scripts:** optimize PSScriptAnalyzer linting performance in WSL2
([#667](#667))
([f120b93](f120b93))
* **scripts:** stabilize YAML display key ordering in collection
manifest ([#701](#701))
([73c0d2c](73c0d2c))
* **scripts:** use text stubs for plugin links when symlinks unavailable
([#695](#695))
([d7650a3](d7650a3))
* **skills:** fix powershell test coverage in pr-reference skill
([#699](#699))
([408e6b7](408e6b7))


### 📚 Documentation

* **dt:** add Method 5 Concepts and Method 6 Lo-Fi Prototypes
instructions ([#693](#693))
([cfdcf11](cfdcf11))
* **hve-guide:** add role-based guides and project lifecycle
documentation ([#663](#663))
([17a85da](17a85da))


### ♻️ Refactoring

* restructure RPI collection to HVE Core naming convention
([#668](#668))
([120dde0](120dde0))
* **scripts:** consolidate duplicate logging into shared SecurityHelpers
module ([#655](#655))
([627a877](627a877))
* **scripts:** use shared SecurityHelpers and CIHelpers modules in
security scripts
([#705](#705))
([3a0baa7](3a0baa7))


### 🔧 Maintenance

* **deps-dev:** bump markdownlint-cli2 from 0.20.0 to 0.21.0 in the
npm-dependencies group
([#609](#609))
([1486dd7](1486dd7))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: hve-core-release-please[bot] <254602402+hve-core-release-please[bot]@users.noreply.github.com>
Sign up for free to 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.

Test-DependencyPinning.ps1 missing per-violation Write-Host and Write-CIAnnotation

5 participants