-
Notifications
You must be signed in to change notification settings - Fork 125
Closed
Labels
enhancementNew feature or requestNew feature or requestpackagingExtension and plugin packagingExtension and plugin packaging
Milestone
Description
Summary
Add full support for an optional maturity field at the collection level in collections/*.collection.yml manifests. When set to experimental, the collection is excluded from Stable/Release channel packaging and shows a visible experimental notice in generated READMEs. The infrastructure partially exists but has gaps in schema definition, validation, and user-facing visibility.
Motivation
experimental.collection.ymlalready usesmaturity: experimentalbut the JSON schema does not include this field — and hasadditionalProperties: false, meaning the existing manifest technically violates the specgithub.collection.ymlhas 100% experimental items but no collection-level maturity, so it passes through to Stable channel with zero usable items- Generated plugin READMEs and extension READMEs show no indication that a collection is experimental — users have no visibility into maturity status
Validate-Collections.ps1does not validate collection-level maturity values
What Already Works (No Changes Needed)
Test-CollectionMaturityEligibleinPrepare-Extension.ps1— fully implemented, gates experimental from Stableextension-package.ymldiscover step — already filters by collection maturity and channelextension-publish.ymlandextension-publish-prerelease.yml— pass correct channel parameters- Item-level maturity filtering — fully working in both plugin generation and extension packaging
Remaining Work
Schema
- Add optional
maturityproperty (enum:stable,preview,experimental,deprecated) to root level inscripts/linting/schemas/collection-manifest.schema.json
Validation
- Add collection-level maturity validation to
Invoke-CollectionValidationinscripts/plugins/Validate-Collections.ps1— reject invalid values, allow omitted (defaults tostable)
Plugin Generation — Experimental Notice
- Update
New-PluginReadmeContentinscripts/plugins/Modules/PluginHelpers.psm1to accept collection maturity and render an experimental notice/badge whenexperimental - Update
Write-PluginDirectoryto pass collection maturity through to readme generation
Extension Packaging — Experimental Notice
- Add
{{MATURITY_NOTICE}}token toextension/templates/README.template.md - Update
New-CollectionReadmeinscripts/extension/Prepare-Extension.ps1to resolve the token — experimental notice for experimental collections, empty for others
Data Consistency
- Add
maturity: experimentaltocollections/github.collection.ymlat collection level (all items already marked experimental)
Tests (95% Line Coverage Target)
-
Validate-Collections.Tests.ps1— valid/invalid collection-level maturity, omitted field -
PluginHelpers.Tests.ps1— experimental notice in plugin README, no notice for stable -
Generate-Plugins.Tests.ps1— deprecated collection skipped, experimental generated -
Prepare-Extension.Tests.ps1— maturity notice in extension README, no notice for stable
Documentation
- Verify/update
extension/PACKAGING.mdcollection manifest schema table - Verify/update
docs/architecture/ai-artifacts.mdcollection maturity section - Verify/update
docs/contributing/ai-artifacts-common.mdmaturity field requirements
Design Decisions
- No changes to
plugin.json— format defined by GitHub CLI plugin spec - No changes to
package.json— format defined by VS Code extension manifest and validated byvsce - No workflow changes — all three publish/package workflows already handle collection-level maturity correctly
- Maturity is a build-time concept — lives in collection YAML, surfaces in generated READMEs only
Experimental Notice Format
Both plugin and extension READMEs use the same notice:
> **⚠️ Experimental** — This collection is experimental and available only in the Pre-Release channel. Contents may change or be removed without notice.Acceptance Criteria
- Collections with
maturity: experimentalare excluded from Stable/Release packaging - Collections with
maturity: experimentalshow visible notice in generated plugin and extension READMEs - JSON schema accurately reflects supported fields (fixes existing
additionalPropertiesviolation) - Invalid maturity values at collection level are caught by validation
- Pester test coverage ≥ 95% line coverage
-
github.collection.ymltagged as experimental at collection level
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestpackagingExtension and plugin packagingExtension and plugin packaging