-
Notifications
You must be signed in to change notification settings - Fork 125
Description
Issue Description
Implement a collection-based plugin distribution system replacing the previously planned persona-based approach. Collections are domain-focused artifact groupings defined as YAML manifests, with automated plugin generation, schema validation, and marketplace registry support.
This issue documents the implementation delivered in PR #439 and supersedes Phases 1, 2, 3, 6, and 8 of the original persona distribution epic (#431). Phase 1b and Phase 7 goals are achieved within this work. Phases 4 and 5 retain partial relevance and are tracked separately.
Motivation
The original persona-based approach used a central JSON registry (ai-artifacts-registry.json) with role-based persona tags (developer, tpm, devops, architect, technical-writer) to filter artifacts. This was replaced by a simpler architecture where:
- Domain-focused collections directly list their items by path and kind in YAML manifests
- No central registry is needed — each collection is self-contained
- Plugin generation is fully automated from manifests via
Generate-Plugins.ps1 - 10 domain collections replace 5 role-based personas, offering more composable and intuitive groupings
Key Architectural Decisions
| Decision | Rationale |
|---|---|
| YAML collection manifests over JSON registry | Simpler authoring, no indirection layer, human-readable |
| Domain-focused over role-based groupings | Users pick domains (ado, rpi, git) not personas; more composable |
Symlink-based plugins over .vsix per collection |
Disk-efficient, single source of truth for artifacts |
Auto-discovery for hve-core-all |
Removes manual maintenance burden for the full bundle |
| Maturity per-item in collections | Eliminates need for a central maturity registry |
Deliverables
1. Collection Manifest System
- 10 collection manifests in
collections/*.collection.ymlwith companion.collection.mddescriptions - Schema at
scripts/linting/schemas/collection-manifest.schema.jsonwith required fields (id, name, description, items) and optional fields (tags, display, maturity per item) - Item kinds:
agent,prompt,instruction,skill,hook
Collections:
| Collection ID | Name | Artifact Count | Maturity |
|---|---|---|---|
ado |
Azure DevOps Integration | Varies | stable |
coding-standards |
Coding Standards | Varies | stable |
data-science |
Data Science | Varies | stable |
git |
Git Operations | Varies | stable |
github |
GitHub Backlog Management | Varies | experimental |
hve-core-all |
HVE Core All | All stable | stable |
project-planning |
Project Planning | Varies | stable |
prompt-engineering |
Prompt Engineering | Varies | stable |
rpi |
RPI Workflow | Varies | stable |
security-planning |
Security Planning | Varies | stable |
2. Plugin Generation Pipeline
scripts/plugins/Generate-Plugins.ps1— generates Copilot CLI plugin directories from collection manifests with symlinks,plugin.jsonmanifests, and auto-generated READMEsscripts/plugins/Modules/PluginHelpers.psm1— shared pure functions for manifest parsing and frontmatter extraction- Generated output under
plugins/(gitignored) with one subdirectory per collection hve-core-allauto-discovers all non-deprecated artifacts
3. Collection Validation
scripts/plugins/Validate-Collections.ps1— validates all collection manifests for structure, required fields, artifact path existence, kind-suffix consistency, and duplicate ID detectionnpm run plugin:validate/npm run lint:collections-metadatafor CI integration
4. Marketplace Registry
.github/plugin/marketplace.json— centralized registry of all generated plugins with name, version, source path, and description- Auto-updated during plugin generation
5. Extension Packaging Updates
Prepare-Extension.ps1updated to load collection manifests, filter by maturity and collection membership, resolve transitive handoff dependencies, and generatepackage.jsoncontributesPackage-Extension.ps1updated for collection-aware artifact copying- Collection-level maturity gating: experimental collections build only for PreRelease channel, deprecated collections excluded entirely
6. Maturity Migration (from Phase 1b)
maturityfield removed from all artifact frontmatter files and schemas- Maturity tracked as optional per-item field in collection manifests
- Resolves Copilot CLI incompatibility (#360)
7. Documentation Updates (partial, from Phase 4)
- Architecture docs updated for collection model
- Contributing guides updated for collection authoring
extension/PACKAGING.mddocuments the full pipeline- Getting started docs reflect collection-based installation
Breaking Changes
maturityfrontmatter field removed from all 61+ artifact files- Frontmatter schemas updated to remove maturity property
extension/package.jsoncontributes section generated at build time (no longer static)- Extension packaging scripts have new parameters (
-Collection, collection-aware filtering) ai-artifacts-registry.jsonremoved (previously proposed in Phase 1)Validate-ArtifactRegistry.ps1removed (replaced byValidate-Collections.ps1)
NPM Scripts
| Script | Purpose |
|---|---|
npm run plugin:generate |
Generate plugins from collection manifests |
npm run plugin:validate |
Validate all collection manifests |
npm run lint:collections-metadata |
CI validation alias |
npm run extension:prepare |
Prepare extension (stable channel) |
npm run extension:prepare:prerelease |
Prepare extension (prerelease channel) |
npm run extension:package |
Package .vsix |
Superseded Issues
This implementation supersedes the following issues from the persona distribution epic:
| Issue | Title | Disposition |
|---|---|---|
| #432 | AI Artifacts Registry Design and Schema | Superseded — registry removed, replaced by collection manifests |
| #438 | Migrate Maturity Metadata to Registry | Completed — goal achieved via collections |
| #433 | Multi-Package Extension Build System | Superseded — replaced by plugin generation |
| #434 | Installer Agent Persona Selection | Superseded — refactored to collection-based |
| #437 | Persona-to-Artifact Mapping | Superseded — collections define items directly |
| #467 | Collection Maturity Gating | Completed — carried forward |
| #468 | PR Registry Drift Validation | Superseded — replaced by collection validation |
Remaining Work (Separate Issues)
| Work Item | Original Issue | Description |
|---|---|---|
| Per-collection Marketplace descriptions | #435 | Descriptions for all 10 collections suitable for Marketplace listing |
| End-to-end publishing validation | #436 | Marketplace publishing test for collection-based plugins |
| Release process documentation | #436 | Document collection-based release workflow |
Acceptance Criteria
- 10 domain-focused collection manifests defined in
collections/*.collection.yml - Collection manifest schema validates all manifests
- Plugin generation produces symlink-based plugins under
plugins/ -
hve-core-allauto-discovers all non-deprecated artifacts - Collection validation catches missing files, invalid kinds, and duplicate IDs
- Marketplace registry lists all generated plugins
- Extension packaging respects collection-level maturity gating
- Maturity removed from all artifact frontmatter
- Handoff dependencies resolved transitively from agent frontmatter
- Architecture and contributing documentation updated for collection model
-
PACKAGING.mddocuments the full plugin generation and extension packaging pipeline