-
Notifications
You must be signed in to change notification settings - Fork 47
feat(extension): implement collection-based plugin distribution system #439
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
- add ai-artifacts-registry.json with persona definitions and artifact metadata - add Validate-ArtifactRegistry.ps1 for structure and filesystem validation - add JSON schema for registry format validation - integrate lint:registry into npm lint:all pipeline Refs #432 🔧 - Generated by Copilot
- add unit tests for registry structure, persona refs, and dependency validation - add circular dependency detection and orphan artifact tests - add integration tests for CI environment handling and exit codes 🧪 - Generated by Copilot
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned Files
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #439 +/- ##
==========================================
+ Coverage 83.41% 85.34% +1.92%
==========================================
Files 20 23 +3
Lines 3510 4476 +966
==========================================
+ Hits 2928 3820 +892
- Misses 582 656 +74
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This draft PR implements Phase 1 of the persona-based distribution epic (#431), introducing the AI Artifacts Registry as a centralized metadata store for all HVE-Core artifacts. The registry replaces in-frontmatter metadata (resolving Copilot CLI incompatibility issues from #360) and establishes the foundation for persona-filtered extension packages and installer enhancements in subsequent phases.
Changes:
- Introduced AI Artifacts Registry JSON file with persona definitions (hve-core-all, developer, tpm, devops, architect, technical-writer) and complete metadata for 62 artifacts (21 agents, 22 prompts, 18 instructions, 1 skill) including maturity levels, persona assignments, and dependency mappings
- Created comprehensive PowerShell validation script with structure validation, persona reference checking, file existence verification, dependency validation, circular dependency detection, and orphan file detection capabilities
- Added JSON Schema defining registry format with maturity enum, persona arrays, tags, and agent dependency mappings
- Implemented Pester test suite with 64 tests covering all validation functions, edge cases, and CI integration scenarios (97.27% code coverage)
- Integrated validation into CI/CD pipeline via npm run lint:registry and lint:all
Reviewed changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
.github/ai-artifacts-registry.json |
Centralized registry with all 62 artifacts, personas, maturity levels, and dependency mappings |
scripts/linting/Validate-ArtifactRegistry.ps1 |
PowerShell validation script with comprehensive checks for structure, personas, files, and dependencies |
scripts/linting/schemas/ai-artifacts-registry.schema.json |
JSON Schema defining registry format with enums, patterns, and required fields |
scripts/tests/linting/Validate-ArtifactRegistry.Tests.ps1 |
Complete Pester test suite with 64 tests achieving 97.27% coverage |
scripts/tests/Fixtures/ArtifactRegistry/*.json |
11 test fixture files for validation scenarios (valid, invalid JSON, missing fields, circular deps, etc.) |
package.json |
Added lint:registry script and integrated into lint:all pipeline |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 16 out of 16 changed files in this pull request and generated 1 comment.
…d improve RepoRoot resolution logic - add dependency-pinning-artifacts/ to .gitignore - simplify RepoRoot path resolution in Validate-ArtifactRegistry.ps1 🔒 - Generated by Copilot
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 16 out of 17 changed files in this pull request and generated 1 comment.
… frontmatter (#440) Closes #438 - [x] Explore and understand all files requiring changes - [x] **Phase 1: Schema Updates** — Remove `maturity` property from 5 schema files - [x] **Phase 2: Artifact Frontmatter Removal** — Remove `maturity` line from all artifact files - [x] **Phase 3: Documentation Updates** — Update docs to reference registry - [x] Step 3.1: Rewrite `ai-artifacts-common.md` maturity section - [x] Step 3.2: Remove maturity from `custom-agents.md` - [x] Step 3.3: Remove maturity from `instructions.md` - [x] Step 3.4: Remove maturity from `prompts.md` - [x] Step 3.5: Remove maturity from `skills.md` - [x] Step 3.6: Update `release-process.md` maturity section - [x] Step 3.7: Update `prompt-builder.instructions.md` — add registry maturity guidance - [x] Step 3.8: Update `pull-request.prompt.md` maturity detection - [x] Run code review and security checks — ✅ No issues **Security Summary**: No security vulnerabilities. All changes are documentation and JSON schema modifications only. <!-- START COPILOT CODING AGENT TIPS --> --- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: katriendg <838216+katriendg@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 89 out of 90 changed files in this pull request and generated no new comments.
Foundation: - Add collection.schema.json (JSON Schema 2020-12) - Create hve-core-all and developer collection manifests - Seed 3 registry entries with cross-persona tags Prepare-Extension enhancements: - Migrate maturity filtering from YAML frontmatter to registry - Add Get-RegistryData, Get-DiscoveredSkills, chatSkills support - Add collection filtering - Add BFS handoff resolution (Resolve-HandoffDependencies) - Accept -Collection parameter for filtered builds Package-Extension enhancements: - Add skills to Get-PackagingDirectorySpec (5 specs) - Add -Collection parameter with Copy-CollectionArtifacts - Add CollectionId to Get-ExtensionOutputPath Tests: - Add 25 new Pester tests for collection functions - Update existing tests for registry-based maturity Refs #433 🚀 - Generated by Copilot
…ve unused code and clarify parameter usage - remove redundant copilot-instructions.md copy logic - clarify PrepareResult parameter for future use 🔧 - Generated by Copilot
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 97 out of 98 changed files in this pull request and generated 5 comments.
…irectory specification refactor(tests): update agent handoff definitions to use object format for clarity style(linting): remove maturity enum validation from artifact registry description 🔧 - Generated by Copilot
…ona guidelines - add artifact registry section to multiple documentation files - outline persona selection criteria for agents, prompts, instructions, and skills - introduce collection-based packaging and installation methods Refs #435 📚 - Generated by Copilot
…nal plugin files and collection markdowns 🔒 - Generated by Copilot
…ection 🔒 - Generated by Copilot
…files - standardize agent and command tables for clarity - add new github-issue-manager agent documentation - improve formatting for better readability - include additional instructions and skills 🔒 - Generated by Copilot
- create marketplace.json for plugin metadata - update version for all plugins to 2.2.0 - enhance plugin manifest generation in scripts 🔧 - Generated by Copilot
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 174 out of 175 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (4)
extension/PACKAGING.md:1
- The date "2026-02-10" is in the future. Documentation dates should reflect when the content was last updated, not a future date.
scripts/tests/extension/Package-Extension.Tests.ps1:1 - The new
.github/skillsdirectory creation is added to support skills packaging, but there are no corresponding tests that verify skills are correctly copied during collection-based packaging. Add test coverage for skills copying in the collection mode tests.
scripts/extension/Package-Extension.ps1:1 - The function lacks a
.NOTESsection explaining that it returns null for both the hve-core-all collection AND when no matching README file exists. This dual null-return behavior should be documented to clarify the function's contract.
plugins/hve-core-all/agents/github-issue-manager.md:1 - This symlink points to a deprecated agent. Consider adding a comment in the symlink target file or a README explaining why this deprecated agent is still included in the hve-core-all collection rather than being removed entirely.
…debase - rename Get-PersonaReadmePath/Set-PersonaReadme to Get-CollectionReadmePath/Set-CollectionReadme - update all docstrings, comments, test names, and test fixtures - delete orphaned collection.schema.json - update documentation, agent, and config files (~18 files total) - preserve behavioral persona references in installer agent ♻️ - Generated by Copilot
…ent documentation - revise agent selection logic to reference collection manifests - clarify installation method descriptions in documentation - enhance consistency in collection-related comments and examples 🔄 - Generated by Copilot
… categorization - revise recommended collections for various agent types - introduce tags for collections to enhance discoverability - update documentation for skills and instructions to reflect new standards 🔖 - Generated by Copilot
- create Generate-Plugins.Tests.ps1 with 21 tests for channel filtering and plugin orchestration - add 30+ tests to Prepare-Extension.Tests.ps1 for uncovered error and edge-case paths - include plugins directory in pester.config.ps1 coverage tracking 🧪 - Generated by Copilot
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 175 out of 176 changed files in this pull request and generated no new comments.
Description
Replaces the originally planned persona-based distribution model with a simpler, domain-focused collection architecture. The initial approach used a centralized JSON registry (
ai-artifacts-registry.json) with role-based persona tags (developer, tpm, devops, architect, technical-writer) to filter artifacts at build and install time. During implementation, this was rearchitected to a collection-based system where YAML manifests directly define artifact groupings by domain, eliminating the need for a central registry and its associated indirection.Ten domain-focused collections now replace the five role-based personas, offering more composable and intuitive groupings. Each collection is a self-contained YAML manifest listing its items by path and kind, with optional per-item maturity tracking. A fully automated plugin generation pipeline produces Copilot CLI-compatible plugin directories from these manifests, and the extension packaging scripts were updated for collection-aware builds with maturity gating.
collections/*.collection.ymlwith companion.collection.mddescription files covering Azure DevOps, Coding Standards, Data Science, Git, GitHub, HVE Core All, Project Planning, Prompt Engineering, RPI, and Security Planning domainsscripts/plugins/Generate-Plugins.ps1for automated plugin generation from collection manifests using symlinks,plugin.jsonmanifests, and auto-generated READMEsscripts/plugins/Modules/PluginHelpers.psm1with shared pure functions for manifest parsing, frontmatter extraction, and shared resource directory resolutionscripts/plugins/Validate-Collections.ps1for CI validation of all collection manifests including structure, required fields, artifact path existence, kind-suffix consistency, and duplicate ID detectionscripts/linting/schemas/collection-manifest.schema.jsondefining the collection format with required fields (id, name, description, items) and optional fields (tags, display, maturity per item).github/plugin/marketplace.jsonas a centralized registry of all generated plugins with name, version, source path, and descriptionmaturityfrontmatter field from all 61+ artifact files (agents, prompts, instructions, skills) to resolve Copilot CLI incompatibility (fix(agents): maturity, etc. are not supported frontmatter for agents in copilot CLI #360), with maturity now tracked as optional per-item field in collection manifestsagent-frontmatter.schema.json,prompt-frontmatter.schema.json,instruction-frontmatter.schema.json,chatmode-frontmatter.schema.json) to remove the maturity propertyscripts/extension/Prepare-Extension.ps1with collection filtering, BFS handoff dependency resolution (Resolve-HandoffDependencies), registry-based maturity migration,Get-DiscoveredSkillsandchatSkillssupport, and-Collectionparameter for filtered buildsscripts/extension/Package-Extension.ps1with-Collectionparameter,Copy-CollectionArtifactsfunction, collection-specific README swapping viaSet-CollectionReadme, and template-basedpackage.jsongeneration fromextension/templates/extension/package.jsonandextension/README.mdwith build-time generated versions fromextension/templates/package.template.jsonandextension/templates/README.template.mdscripts/tests/plugins/Generate-Plugins.Tests.ps1(21 tests),scripts/tests/plugins/PluginHelpers.Tests.ps1(167 lines), andscripts/tests/plugins/Validate-Collections.Tests.ps1(199 lines) for plugin infrastructure coveragescripts/tests/extension/Prepare-Extension.Tests.ps1and expandedscripts/tests/extension/Package-Extension.Tests.ps1for collection-aware packaging coverageValidate-ArtifactRegistry.ps1,ai-artifacts-registry.schema.json, registry test fixtures, andartifact-registry-validation.ymlworkflowplugin-package.ymlworkflow for plugin packaging and updatedmain.yml,extension-package.yml,extension-publish-prerelease.yml, andextension-publish.ymlfor collection matrix strategyhve-core-installer.agent.mdto use collection-based selection instead of persona-based filtering, with references to collection manifests rather than a central registrygithub-issue-manager.agent.mdas deprecateddocs/architecture/ai-artifacts.md,docs/architecture/workflows.md), contributing guides (ai-artifacts-common.md,custom-agents.md,instructions.md,prompts.md,skills.md), release process, andextension/PACKAGING.mdto reflect the collection modeldocs/getting-started/install.mdwith collection-based installation guidancenpm run plugin:validateandnpm run lint:collections-metadatainto the CI pipeline, replacingnpm run lint:registryRelated Issue(s)
Closes #519
Related to #431 (Epic: Persona-Based Extension Distribution, now superseded by collection approach)
Related to #360 (Custom maturity frontmatter breaks Copilot CLI)
Related to #251 (Update extension packaging to distribute skills)
Superseded Issues
This implementation supersedes the following issues from the persona distribution epic:
Remaining Work
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).github/skills/*/SKILL.md)Other:
.ps1,.sh,.py)Sample Prompts (for AI Artifact Contributions)
N/A — GHCP artifact changes in this PR are limited to maturity field removal and collection terminology updates, not new artifacts.
Testing
npm run plugin:validateto validate all 10 collection manifests for structure, required fields, artifact path existence, kind-suffix consistency, and duplicate ID detectionnpm run plugin:generateto verify plugin generation produces correct symlink-based plugins underplugins/hve-core-allauto-discovery includes all non-deprecated artifactsGenerate-Plugins.Tests.ps1with 21 Pester tests covering channel filtering and plugin orchestrationPrepare-Extension.Tests.ps1with 30+ tests for collection filtering, BFS handoff resolution, maturity-based filtering, and error pathsPackage-Extension.Tests.ps1with tests for template-copy, backup/restore, collection artifact copying, and README swappingValidate-Collections.Tests.ps1with 199 lines of tests covering validation scenariosPluginHelpers.Tests.ps1with 167 lines of tests for manifest parsing and frontmatter extractionnpm run lint:allpasses (includeslint:collections-metadata)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
Architectural Evolution
Development began with Phase 1 of the persona distribution epic (#431), building the centralized AI Artifacts Registry, validation scripts, and Pester tests. As subsequent phases progressed, the architecture was simplified from a centralized registry with persona-based filtering to a decentralized collection manifest system where each collection directly declares its items. The registry and its validation infrastructure were removed once the collection approach proved simpler and more maintainable.
Key architectural decisions that drove the pivot:
.vsixper collectionhve-core-allBreaking Changes
maturityfrontmatter field removed from all 61+ artifact filesextension/package.jsoncontributessection generated at build time (no longer static)-Collection, collection-aware filtering)ai-artifacts-registry.jsonremoved (previously proposed in Phase 1)Validate-ArtifactRegistry.ps1removed (replaced byValidate-Collections.ps1)npm run lint:registryremoved (replaced bynpm run plugin:validate)Collections Summary
adocoding-standardsdata-sciencegitgithubhve-core-allproject-planningprompt-engineeringrpisecurity-planningNPM Scripts
npm run plugin:generatenpm run plugin:validatenpm run lint:collections-metadatanpm run extension:preparenpm run extension:prepare:prereleasenpm run extension:package.vsix🔧 - Generated by Copilot