Skip to content

feat(scripts): add collection-level maturity field with validation, gating, and notices#697

Merged
katriendg merged 7 commits intomainfrom
feat/696-collection-maturity-enhance
Feb 20, 2026
Merged

feat(scripts): add collection-level maturity field with validation, gating, and notices#697
katriendg merged 7 commits intomainfrom
feat/696-collection-maturity-enhance

Conversation

@katriendg
Copy link
Copy Markdown
Contributor

@katriendg katriendg commented Feb 20, 2026

Description

Added full support for an optional collection-level maturity field in collection manifests, enabling release channel gating, validation enforcement, and user-facing experimental notices in generated READMEs. Deprecated collections are now skipped during plugin generation, and experimental collections display a warning banner in both CLI plugin and VS Code extension READMEs.

  • feat(schemas): Added optional maturity property (enum: stable, preview, experimental, deprecated) to root level in collection-manifest.schema.json, fixing the existing additionalProperties: false violation where experimental.collection.yml already used the field.
  • feat(validation): Added collection-level maturity validation to Invoke-CollectionValidation in Validate-Collections.ps1 — rejects invalid values and allows omitted (defaults to stable).
  • feat(plugins): Updated New-PluginReadmeContent and Write-PluginDirectory in PluginHelpers.psm1 to accept and forward collection maturity, injecting an experimental notice when maturity is experimental.
  • feat(plugins): Updated Invoke-PluginGeneration in Generate-Plugins.ps1 to skip deprecated collections and pass maturity through to Write-PluginDirectory.
  • feat(extension): Added {{MATURITY_NOTICE}} token to extension/templates/README.template.md and updated New-CollectionReadme in Prepare-Extension.ps1 to resolve the token with an experimental notice for experimental collections.
  • feat(collections): Added maturity: experimental to github.collection.yml (all items already marked experimental) and design-thinking.collection.yml.
  • refactor(scripts): Extracted main execution block in Generate-Plugins.ps1 into a testable Start-PluginGeneration function.
  • test(scripts): Added 15+ Pester tests covering collection-level maturity validation (valid/invalid/omitted values), experimental notice in plugin and extension READMEs, deprecated collection skip, Start-PluginGeneration entry point, artifact frontmatter parsing, and DryRun mode paths.
  • chore(collections): remove experimental maturity tags from GitHub backlog items and collection, and add experimental to all Design thinking collection and artifacts

Related Issue(s)

Closes #696

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

AI Artifacts:

  • Reviewed contribution with prompt-builder agent and addressed all feedback
  • Copilot instructions (.github/instructions/*.instructions.md)
  • Copilot prompt (.github/prompts/*.prompt.md)
  • Copilot agent (.github/agents/*.agent.md)
  • Copilot skill (.github/skills/*/SKILL.md)

Other:

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

Sample Prompts (for AI Artifact Contributions)

N/A — No AI artifacts were added or modified in this PR.

Testing

  • Added Pester tests for all new code paths across four test files:
    • Validate-Collections.Tests.ps1 — collection-level maturity validation for all enum values, invalid values, omitted field, plus error-path coverage for missing fields, duplicate IDs, path mismatches, and maturity conflicts.
    • PluginHelpers.Tests.ps1 — experimental notice rendering (experimental, stable, omitted, null maturity), artifact frontmatter YAML parse failure, Write-PluginDirectory DryRun mode with agents, skills, missing sources, and missing shared directories.
    • Generate-Plugins.Tests.ps1 — deprecated collection skipped, experimental collection generated on PreRelease channel, plus Start-PluginGeneration function tests for success, failure, missing module, and default refresh logic.
    • Prepare-Extension.Tests.ps1 — maturity notice included for experimental collection, absent for stable and omitted maturity.
  • Ran npm run plugin:generate to verify generated plugin READMEs contain the experimental notice for experimental collections.

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)

AI Artifact Contributions

N/A — No AI artifacts were contributed.

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
  • Skill structure validation: npm run validate:skills
  • 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

  • The hve-core-all.collection.yml diff shows only a cosmetic reorder of the display.featured and display.ordering fields — no functional change.
  • Documentation in extension/PACKAGING.md, docs/architecture/ai-artifacts.md, and docs/contributing/ai-artifacts-common.md already covers the collection-level maturity field comprehensively; no additional doc updates were needed.
  • The Start-PluginGeneration refactor replaces exit calls with return values, making the main execution block testable without process termination side effects.

🚀 - Generated by Copilot

…l gating

- add optional maturity property to collection-manifest JSON schema
- add collection-level maturity validation in Validate-Collections.ps1
- skip deprecated collections during plugin generation
- inject experimental notice in plugin and extension READMEs
- add 15 Pester tests covering all new code paths

🚀 - Generated by Copilot
…ollections, update README for experimental notice

🔒 - Generated by Copilot
… functionality

test(collections): enhance validation tests for collection maturity and error paths
…execution block

- refactor main execution into testable Start-PluginGeneration function
- add 5 tests covering success, failure, missing module, and default refresh logic
- improve line coverage from 78.9% to 99.0% for Generate-Plugins.ps1

🧪 - Generated by Copilot
@katriendg katriendg requested a review from a team as a code owner February 20, 2026 11:09
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 20, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Feb 20, 2026

Codecov Report

❌ Patch coverage is 96.00000% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 86.27%. Comparing base (d7650a3) to head (466377f).

Files with missing lines Patch % Lines
scripts/plugins/Generate-Plugins.ps1 90.00% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #697      +/-   ##
==========================================
+ Coverage   84.61%   86.27%   +1.66%     
==========================================
  Files          23       23              
  Lines        4737     4757      +20     
==========================================
+ Hits         4008     4104      +96     
+ Misses        729      653      -76     
Flag Coverage Δ
pester 86.27% <96.00%> (+1.66%) ⬆️

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

Files with missing lines Coverage Δ
scripts/extension/Prepare-Extension.ps1 94.31% <100.00%> (+0.05%) ⬆️
scripts/plugins/Modules/PluginHelpers.psm1 85.26% <100.00%> (+8.06%) ⬆️
scripts/plugins/Validate-Collections.ps1 91.54% <100.00%> (+21.98%) ⬆️
scripts/plugins/Generate-Plugins.ps1 96.07% <90.00%> (+20.03%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@katriendg katriendg merged commit 7b1c8e8 into main Feb 20, 2026
19 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.

feat(scripts): collection-level maturity field: schema enforcement, validation, and experimental visibility

3 participants