You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(scripts): add collection-level maturity field with validation, gating, and notices (#697)
Added 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)
- [x] 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:**
- [x] Script/automation (`.ps1`, `.sh`, `.py`)
- [ ] Other (please describe):
## Sample Prompts (for AI Artifact Contributions)
<!-- Delete this section if not applicable -->
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
- [x] Documentation is updated (if applicable)
- [x] Files follow existing naming conventions
- [x] Changes are backwards compatible (if applicable)
- [x] Tests added for new functionality (if applicable)
### AI Artifact Contributions
<!-- If contributing an agent, prompt, instruction, or skill, complete
these checks -->
N/A — No AI artifacts were contributed.
### Required Automated Checks
The following validation commands must pass before merging:
- [x] Markdown linting: `npm run lint:md`
- [x] 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`
- [x] PowerShell analysis: `npm run lint:ps`
## Security Considerations
- [x] This PR does not contain any sensitive or NDA information
- [ ] Any new dependencies have been reviewed for security issues
- [x] 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
'> **⚠️ Experimental** — This collection is experimental and available only in the Pre-Release channel. Contents may change or be removed without notice.'
0 commit comments