fix(scripts): ensure reliable array count operations in linting and security scripts#395
Conversation
…ecurity scripts - wrap array assignments with @() in PSScriptAnalyzer, YamlLint, and Markdown-Link-Check - add array coercion to count checks in Validate-MarkdownFrontmatter - fix array handling in Test-DependencyPinning and Test-SHAStaleness scripts 🔧 - Generated by Copilot
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #395 +/- ##
==========================================
+ Coverage 52.44% 61.45% +9.01%
==========================================
Files 17 17
Lines 3110 3111 +1
==========================================
+ Hits 1631 1912 +281
+ Misses 1479 1199 -280
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR fixes PowerShell array handling issues across linting and security validation scripts by applying defensive array coercion with @(). The changes prevent "property 'Count' cannot be found" errors that occur when pipeline operations return null or single items instead of arrays, particularly affecting functions like Get-ChangedFilesFromGit and Get-FilesRecursive.
Changes:
- Added
@()array coercion to function return values and count operations across all linting scripts (PSScriptAnalyzer, YamlLint, Markdown-Link-Check, Validate-MarkdownFrontmatter) - Enhanced array handling in security validation scripts (Test-DependencyPinning, Test-SHAStaleness) for violation collections, grouping operations, and measure-object counts
- Initialized
$script:StaleDependenciesas an empty array in Test-SHAStaleness.ps1
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/security/Test-SHAStaleness.ps1 | Added array coercion to 11 count operations, tool staleness detection, and initialized StaleDependencies array |
| scripts/security/Test-DependencyPinning.ps1 | Added array coercion to 5 violation collection and measure-object operations |
| scripts/linting/Validate-MarkdownFrontmatter.ps1 | Wrapped Get-ChangedMarkdownFileGroup results and count checks with @() |
| scripts/linting/Markdown-Link-Check.ps1 | Added array coercion to Get-MarkdownTarget return value and count check |
| scripts/linting/Invoke-YamlLint.ps1 | Wrapped Get-ChangedFilesFromGit, Get-ChildItem results, and count operations with @() |
| scripts/linting/Invoke-PSScriptAnalyzer.ps1 | Added array coercion to Get-ChangedFilesFromGit, Get-FilesRecursive results, and all count operations in summary |
… environments - implement tests for fixture exclusion filtering in Markdown-Link-Check - validate error handling and output formatting for GitHub Actions - ensure array coercion works correctly in main execution block 🔒 - Generated by Copilot
🤖 I have created a release *beep* *boop* --- ## [2.1.0](hve-core-v2.0.1...hve-core-v2.1.0) (2026-02-04) ### ✨ Features * add PowerShell script to validate copyright headers ([#370](#370)) ([92fce72](92fce72)) * **docs:** Replace deprecated chat.modeFilesLocations with chat.agentFilesLocations ([#413](#413)) ([67fb2ab](67fb2ab)) * **scripts:** add CIHelpers module for CI platform abstraction ([#348](#348)) ([23e7a7e](23e7a7e)) * **scripts:** add SecurityHelpers and CIHelpers modules ([#354](#354)) ([b93d990](b93d990)) * **workflow:** add copilot-setup-steps.yml for Coding Agent environment ([#398](#398)) ([085a38b](085a38b)) ### 🐛 Bug Fixes * **build:** increase release-please search depths to prevent 250-commit window issue ([#342](#342)) ([4bb857d](4bb857d)) * **build:** patch @isaacs/brace-expansion critical vulnerability ([#404](#404)) ([292ef51](292ef51)) * **ci:** disable errexit during spell check exit code capture ([#356](#356)) ([ed6ed46](ed6ed46)) * **ci:** exclude extension/README.md from frontmatter validation ([#362](#362)) ([e0d7378](e0d7378)) * exclude test fixtures from markdown link checker ([#345](#345)) ([58147f9](58147f9)) * **extension:** resolve path resolution issues in Windows/WSL environments ([#407](#407)) ([8529725](8529725)) * **linting:** use Write-Error instead of Write-Host for error output ([#377](#377)) ([2ca766b](2ca766b)) * **scripts:** apply CI output escaping to infrastructure scripts ([#369](#369)) ([251021e](251021e)) * **scripts:** apply CI output escaping to linting scripts ([#367](#367)) ([fdd75ed](fdd75ed)) * **scripts:** apply CI output escaping to security scripts ([#368](#368)) ([1237c9a](1237c9a)) * **scripts:** ensure reliable array count operations in linting and security scripts ([#395](#395)) ([de43e73](de43e73)) * **scripts:** standardize PowerShell requirements header block ([#385](#385)) ([6e26282](6e26282)) ### 📚 Documentation * add doc-ops agent to CUSTOM-AGENTS reference ([#358](#358)) ([15f7185](15f7185)) * add memory agent to CUSTOM-AGENTS.md ([#359](#359)) ([d92c4e1](d92c4e1)) * add missing agents to extension README ([#357](#357)) ([d58541c](d58541c)) * add task-reviewer agent to CUSTOM-AGENTS.md ([#363](#363)) ([0efb722](0efb722)) * **contributing:** add copyright header guidelines ([#382](#382)) ([881a567](881a567)) * **scripts:** update README.md with missing directory sections ([#355](#355)) ([ac2966f](ac2966f)) ### ♻️ Refactoring * **scripts:** align linting and tests with CIHelpers ([#401](#401)) ([3587e6a](3587e6a)) * **scripts:** extract Invoke-PackageExtension for testability ([#343](#343)) ([858a1be](858a1be)) * **scripts:** extract orchestration function for Prepare-Extension testability ([#344](#344)) ([9fd4bd1](9fd4bd1)) * **scripts:** replace raw GITHUB_OUTPUT with Set-CIOutput in Package-Extension ([#391](#391)) ([74a30bb](74a30bb)) * **security:** move DependencyViolation and ComplianceReport to shared module ([#378](#378)) ([1dd31ad](1dd31ad)) ### 🔧 Maintenance * add copyright headers to PowerShell scripts ([#381](#381)) ([d19c9b3](d19c9b3)) * add copyright headers to shell scripts ([#380](#380)) ([284b456](284b456)) * **deps-dev:** bump cspell from 9.6.1 to 9.6.2 in the npm-dependencies group ([#387](#387)) ([23c2b9f](23c2b9f)) * **workflows:** simplify Copilot setup steps workflow triggers ([#414](#414)) ([492a7b1](492a7b1)) --- 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> Co-authored-by: Bill Berry <wberry@microsoft.com>
Description
This PR fixes PowerShell array handling issues in linting and security validation scripts by ensuring array assignments and count operations use proper array coercion with
@(). These changes prevent potential errors when pipeline operations return null or single items instead of arrays.fix(linting): wrapped array assignments in Invoke-PSScriptAnalyzer, Invoke-YamlLint, and Markdown-Link-Check with
@()to ensure consistent array behaviorGet-ChangedFilesFromGitandGet-FilesRecursive.Countproperty accesses for reliable zero-count checksfix(linting): added array coercion to count checks in Validate-MarkdownFrontmatter
Get-ChangedMarkdownFileGroupresult with@()for consistent array handlingfix(security): improved array handling in Test-DependencyPinning script
@()wrapping to violation collection and grouping operationsfix(security): enhanced array coercion in Test-SHAStaleness script
@()for reliable behavior$script:StaleDependenciesas empty arrayRelated Issue(s)
Fixes #394
Type of Change
Select all that apply:
Code & Documentation:
Infrastructure & Configuration:
AI Artifacts:
prompt-builderagent and addressed all feedback.github/instructions/*.instructions.md).github/prompts/*.prompt.md).github/agents/*.agent.md)Other:
.ps1,.sh,.py)Testing
Tested by running the affected scripts with various file count scenarios:
All scripts now handle edge cases consistently without null reference errors.
Checklist
Required Checks
AI Artifact Contributions
/prompt-analyzeto review contributionprompt-builderreviewRequired Automated Checks
The following validation commands must pass before merging:
npm run lint:mdnpm run spell-checknpm run lint:frontmatternpm run lint:md-linksnpm run lint:psSecurity Considerations
Additional Notes
These changes follow PowerShell best practices for defensive array handling. The
@()operator ensures that pipeline results are always treated as arrays, even when they return null or single items, preventing runtime errors in count operations and foreach loops.🔧 - Generated by Copilot