feat: add GitHub Copilot marketplace output - #2600
Aryan Singh K. (aryansk) wants to merge 4 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds support for generating a GitHub Copilot CLI-compatible marketplace artifact by introducing a new output profile and mapper, along with unit tests to validate the produced JSON.
Changes:
- Register a new
copilotmarketplace output profile with a default discovery path. - Implement
CopilotMarketplaceMapperto compose Copilot CLI marketplace JSON (including remote pin info). - Add unit tests covering local source preservation and remote pin emission.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| tests/unit/marketplace/test_copilot_output_mapper.py | Adds unit tests validating the new Copilot output profile and mapper behavior. |
| src/apm_cli/marketplace/output_profiles.py | Registers the new copilot output profile and includes it in MARKETPLACE_OUTPUTS. |
| src/apm_cli/marketplace/output_mappers.py | Introduces CopilotMarketplaceMapper and _copilot_source, and registers the mapper. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
Suppressed comments (6)
tests/unit/marketplace/test_copilot_output_mapper.py:70
- Test functions here should follow the common
def test_...(...) -> None:style used acrosstests/unit/marketplace/for consistency.
def test_copilot_mapper_preserves_remote_pin_information():
entry = PackageEntry(
src/apm_cli/marketplace/output_profiles.py:99
- The new
copilotprofile declaresconfig_attr="copilot", butMarketplaceConfigcurrently has nocopilotconfig object (onlyclaude/codex), and the apm.yml marketplace block rejects unknown keys (somarketplace: { copilot: ... }cannot be expressed). This makesconfig_attreffectively dead and contradicts the issue’s requestedMarketplaceCopilotConfig/_APM_MARKETPLACE_KEYSintegration.
COPILOT_MARKETPLACE_OUTPUT = MarketplaceOutputProfile(
name="copilot",
config_attr="copilot",
default_output=".github/plugin/marketplace.json",
mapper="copilot",
path_env_var="APM_MARKETPLACE_COPILOT_PATH",
)
tests/unit/marketplace/test_copilot_output_mapper.py:6
- This new test module doesn’t follow the established unit-test conventions in this repo (module docstring +
from __future__ import annotationsat top). Several othertests/unit/marketplace/*files use that header style for consistency.
from types import SimpleNamespace
from apm_cli.marketplace.output_mappers import CopilotMarketplaceMapper
from apm_cli.marketplace.output_profiles import MARKETPLACE_OUTPUTS
from apm_cli.marketplace.yml_schema import MarketplaceConfig, MarketplaceOwner, PackageEntry
tests/unit/marketplace/test_copilot_output_mapper.py:9
- Type hints are consistently used in the surrounding unit tests (helpers and test functions use
-> None, typed params, etc.). This file introduces un-annotated helpers/test functions, which is inconsistent and may violate the repo’s typing/style expectations.
def _resolved(**overrides):
values = {
tests/unit/marketplace/test_copilot_output_mapper.py:41
- Test functions here should follow the common
def test_...(...) -> None:style used acrosstests/unit/marketplace/for consistency.
This issue also appears on line 69 of the same file.
def test_copilot_profile_uses_default_discovery_path():
profile = MARKETPLACE_OUTPUTS["copilot"]
assert profile.default_output == ".github/plugin/marketplace.json"
assert profile.mapper == "copilot"
def test_copilot_mapper_nests_marketplace_metadata_and_keeps_local_source():
src/apm_cli/marketplace/output_profiles.py:99
- This change adds a new marketplace output format (
copilot) and a new default output path. The user-facing docs/examples should be updated accordingly (e.g.,docs/src/content/docs/reference/cli/pack.mdsections that describe marketplace artifacts and showmarketplace.outputsexamples currently only mentionclaude/codex; the apm-guide usage docs underpackages/apm-guide/.apm/skills/apm-usage/likely need a corresponding update as well).
COPILOT_MARKETPLACE_OUTPUT = MarketplaceOutputProfile(
name="copilot",
config_attr="copilot",
default_output=".github/plugin/marketplace.json",
mapper="copilot",
path_env_var="APM_MARKETPLACE_COPILOT_PATH",
)
APM Review Panel:
|
| Persona | B | R | N | Takeaway |
|---|---|---|---|---|
| Python Architect | 0 | 0 | 2 | Clean additive feature that follows the established Base+Subclass mapper pattern and frozen-dataclass profile pattern exactly. No architectural concerns. |
| CLI Logging Expert | 0 | 0 | 0 | No CLI output, logging, or diagnostic rendering is introduced or modified by this PR. No concerns. |
| DevX UX Expert | 0 | 1 | 1 | Profile is well-structured; empty-string description emitted instead of omitting the field, and default output path is non-standard without docs. |
| Supply Chain Security Expert | 0 | 2 | 1 | Read-only output serializer with moderate concerns: unsanitized remote metadata and unvalidated SHA field. |
| OSS Growth Hacker | 0 | 1 | 2 | Strong story-fit; adding Copilot as first-class target reinforces 'one manifest, every agent' positioning. |
| Auth Expert | -- | -- | -- | Inactive: no auth, token, credential, or remote-host surfaces touched. |
| Doc Writer | 0 | 3 | 1 | Three in-place edits needed on publish-to-a-marketplace.md: inventory, YAML example, and .gitignore block all omit the new copilot output. |
| Test Coverage Expert | 0 | 1 | 0 | Unit tests cover profile registration, local source, and remote-pin branches; the url-source branch (remote host without subdir) is untested. |
| Performance Expert | 0 | 0 | 0 | No performance concerns. Mapper is O(n) with dict-indexed lookups, mirrors existing mappers. |
B = blocking-severity findings, R = recommended, N = nits.
Counts are signal strength, not gates. The maintainer ships.
Top 5 follow-ups
- [Test Coverage Expert] Add url-source branch test for non-GitHub hosts -- outcome:missing on portability-by-manifest surface; one test function, bounded scope.
- [Doc Writer] Update
publish-to-a-marketplace.md: inventory, YAML example, .gitignore block -- three in-place edits to one page; users enabling copilot output will hit silent .gitignore failures without the guidance. - [Supply Chain Security Expert] Add SHA format validation (40-char hex regex) before emission -- defense-in-depth for artifact integrity; apply across all three mappers in a single follow-up PR.
- [DevX UX Expert] Omit empty-string description instead of emitting it -- aligns with Claude mapper behavior and improves discoverability of missing data.
- [Supply Chain Security Expert] Add remote-metadata length cap and control-char strip -- supply-chain hardening; non-urgent since mapper is local-only, but good hygiene before the output format is considered stable.
Architecture
classDiagram
direction LR
class MarketplaceOutputMapper {
<<ABC>>
+uses_remote_metadata bool
+compose(config, resolved, remote_metadata) MapperResult
}
class ClaudeMarketplaceMapper {
+compose(...) MapperResult
}
class CodexMarketplaceMapper {
+compose(...) MapperResult
}
class CopilotMarketplaceMapper {
+uses_remote_metadata = True
+compose(...) MapperResult
}
class MarketplaceOutputProfile {
<<ValueObject frozen>>
+name str
+config_attr str
+default_output str
+mapper str
+path_env_var str
}
class MapperResult {
<<ValueObject>>
+doc dict
+warnings tuple
+diagnostics tuple
}
class MarketplaceBuilder {
+build(profile, config, resolved)
}
MarketplaceOutputMapper <|-- ClaudeMarketplaceMapper
MarketplaceOutputMapper <|-- CodexMarketplaceMapper
MarketplaceOutputMapper <|-- CopilotMarketplaceMapper
MarketplaceBuilder ..> MarketplaceOutputProfile : selects
MarketplaceBuilder ..> MarketplaceOutputMapper : delegates compose
MarketplaceOutputMapper ..> MapperResult : returns
class CopilotMarketplaceMapper:::touched
class MarketplaceOutputProfile:::touched
classDef touched fill:#fff3b0,stroke:#d47600
flowchart TD
A["apm pack --marketplace copilot"] --> B["MarketplaceBuilder.build()"]
B --> C{"Profile lookup\nMARKETPLACE_OUTPUTS['copilot']"}
C --> D["resolve_effective_output_path()\n.github/plugin/marketplace.json"]
C --> E["MARKETPLACE_OUTPUT_MAPPERS['copilot']"]
E --> F["CopilotMarketplaceMapper.compose()"]
F --> G["_sanitized_name_with_diagnostic()"]
F --> H{"For each resolved pkg"}
H --> I["_copilot_source(entry, pkg)"]
I --> J{"entry.is_local?"}
J -->|Yes| K["return entry.source (str)"]
J -->|No| L["_remote_source_url(pkg)"]
L --> M["Build source dict with ref/sha/path"]
F --> N["Return MapperResult"]
N --> O["Write marketplace.json"]
Recommendation
Merge now. The PR delivers a complete, pattern-consistent, well-tested Copilot marketplace output that directly advances APM's multi-harness positioning. The two material follow-ups (url-source test + docs page update) should land same-week and can be tracked as a paired issue. No blocking findings from any panelist.
Full per-persona findings
Python Architect
- [nit] Missing type annotations on
composeparameters in diff snippet atsrc/apm_cli/marketplace/output_mappers.py:336
The actual committed code has full type annotations confirmed in-tree. The PR diff description was misleading but the code is correct. No action needed. - [nit]
entry.versionfallback on local packages may emit None-ish empty string atsrc/apm_cli/marketplace/output_mappers.py:370
Line 370:version = entry.version if entry.is_local else meta.get('version') or entry.version-- if entry.version is an empty string, theif version:guard on line 371 correctly suppresses it. Intent is well-guarded.
CLI Logging Expert
No findings.
DevX UX Expert
- [recommended] Empty-string description degrades discoverability of missing data at
src/apm_cli/marketplace/output_mappers.py:358
When neitherentry.descriptionnorremote_metadatasupplies a description, the mapper emits"description": "". The Claude mapper omits the field entirely in this case, which is a better UX signal -- an absent key tells the user 'not configured yet' while an empty string looks like a deliberate blank. Consider omitting the field or emitting a diagnostic so users know to add one. - [nit] Default path
.github/plugin/is unconventional -- note in help/docs atsrc/apm_cli/marketplace/output_profiles.py:97
.github/plugin/marketplace.jsonis not an established convention. Fine as a default, but theapm marketplace build --helpor quickstart should mention it so users know where to look.
Supply Chain Security Expert
- [recommended] Remote metadata written to artifact without validation at
src/apm_cli/marketplace/output_mappers.py
Values fromremote_metadata(description, version) flow directly into the output JSON with no length cap, character-set check, or schema validation. A compromised or malicious registry response could inject oversized strings, control characters, or crafted payloads. Consider a lightweight sanitization pass -- type-assert str, cap length, and strip control chars. - [recommended] SHA field not validated as 40-char hex at
src/apm_cli/marketplace/output_mappers.py
pkg.shais emitted into the source dict without asserting it is a full 40-character lowercase hex string. A truncated or malformed SHA weakens the integrity guarantee. A one-line regex guard before emission would enforce deterministic provenance.
Suggested:if pkg.sha and re.fullmatch(r'[0-9a-f]{40}', pkg.sha): source["sha"] = pkg.sha - [nit] Local source path emitted verbatim at
src/apm_cli/marketplace/output_mappers.py
entry.sourceis returned as-is for local packages. Acceptable for a user-controlled local dev artifact, but if the output could ever be shared or committed, it leaks absolute filesystem paths. Worth a comment acknowledging this is intentional for local-only use.
OSS Growth Hacker
- [recommended] README hero line already lists Copilot -- link the feature at
README.md
The hero line mentions GitHub Copilot but there is no visible mention of marketplace output anywhere a visitor would see it. Consider adding a one-liner showingapm marketplace pack --output copilotas a hook visitors can repost. - [nit] Default path discoverability for docs/quickstart at
src/apm_cli/marketplace/output_profiles.py
The default output.github/plugin/marketplace.jsonis buried in code. A short doc comment or entry in the quickstart/marketplace docs page showing the happy-path command would turn this into a 60-second proof point for new users. - [nit]
CopilotMarketplaceMapperdocstring could carry a story-shaped sentence atsrc/apm_cli/marketplace/output_mappers.py
The one-line class docstring could double as copy source for release notes. Something like 'Generate a Copilot-compatible plugin registry from your apm.yml manifest' reads better in changelogs and social posts.
Auth Expert -- inactive
Inactive: no auth, token, credential, or remote-host surfaces are touched by this PR.
Doc Writer
- [recommended] 'What lives where' inventory omits the copilot output at
docs/src/content/docs/producer/publish-to-a-marketplace.md:59
Lines 56-64 enumerate the files thatapm packwrites but say nothing about.github/plugin/marketplace.json. A user who addscopilottooutputs:will have no documentation explaining what file is generated.
Suggested: Add:- .github/plugin/marketplace.json -- optional Copilot CLI output. Enable it by adding 'copilot' to marketplace.outputs. - [recommended] YAML
outputs:example does not showcopilotatdocs/src/content/docs/producer/publish-to-a-marketplace.md:87
The annotatedapm.ymlscaffold showsoutputs: { claude: {} }and documentscodex:but does not includecopilot. Users copying this example will not knowcopilotis a valid value. - [recommended]
.gitignorepitfall block is missing the copilot unignore line atdocs/src/content/docs/producer/publish-to-a-marketplace.md:262
Lines 259-263 document the*.jsonin.gitignoretrap but only list!.claude-plugin/marketplace.jsonand!.agents/plugins/marketplace.json. Users who enable copilot output will hit the same silent-skip problem but find no guidance.
Suggested: Add!.github/plugin/marketplace.jsonto the unignore list. - [nit] End-to-end example hardcodes a single
git addpath atdocs/src/content/docs/producer/publish-to-a-marketplace.md:34
Line 34 showsgit add apm.yml .claude-plugin/marketplace.json. A parenthetical note 'add all enabled output files' would prevent confusion for users enabling copilot or codex outputs.
Test Coverage Expert
- [recommended]
_copilot_sourceurl branch (non-GitHub host, no subdir) has no test attests/unit/marketplace/test_copilot_output_mapper.py
The CopilotMarketplaceMapper has three remote-source branches: git-subdir, url, and github. Only the github branch is tested. The url branch -- triggered when_remote_source_url(pkg)returns a URL -- is not exercised. Grepped test file for 'url' -- only 1 hit (source_url=None fixture default).
Proof (missing):tests/unit/marketplace/test_copilot_output_mapper.py::test_copilot_mapper_emits_url_source_for_non_github_host-- proves: Copilot marketplace JSON emits a clone-ready URL when packages come from a non-github.com host [portability-by-manifest, multi-harness-support]
assert plugin['source'] == {'source': 'url', 'url': 'https://ghe.corp.example/acme/demo', 'ref': 'v1.0.0'}
Performance Expert
No findings.
This panel is advisory. It does not block merge. Re-apply the
panel-review label after addressing feedback to re-run.
PR triage recommendationneeds-issue Recommendation only, not merge or scope approval. A responsible Linked issue#2430 -- open; labels include Proposed classification
Processing: CODEOWNERS for this tree: Daniel Meppiel (@danielmeppiel) Sergio Sisternes (@sergio-sisternes-epam) Suggested next actionWait for a responsible human maintainer to record bounded scope, Suggested PR commentThank you for contributing this pull request, @aryansk.
APM starts with an issue, not an implementation
(https://github.com/microsoft/apm/blob/main/CONTRIBUTING.md).
This PR correctly links #2430, but that issue is not currently
labelled `status/accepted`. Maintainer direction on 2026-09-12
withdrew prior acceptance, so previous labels or comments are not
approval to continue substantive implementation.
Please keep #2430 as the tracking issue and wait for a responsible
human maintainer to record scope, done-when criteria, and a review
contact there before this work is invited for inclusion. This PR is
labelled `status/deferred` until that happens. CODEOWNERS remain
@danielmeppiel and @sergio-sisternes-epam; this note does not
request additional review. |
|
Thanks for the PR, Aryan Singh K. (@aryansk) - and for the Copilot marketplace output work on #2430. Build & Test Shard 1 (Linux) and the Merge Gate are red on the current tip (unit tests still expect only Generated by autopilot-pr-ready-takeover. This comment is AI-generated and may contain errors. |
aeb9109 to
fa3fae9
Compare
|
Thanks for the PR, Aryan Singh K. (@aryansk) - and for the Copilot marketplace output work on #2430. Four open Copilot review threads on the marketplace mapper still needed a schema-aligned pass (relative-path Generated by autopilot-pr-ready-takeover. This comment is AI-generated and may contain errors. |
APM Review Panel:
|
| Persona | B | R | N | Takeaway |
|---|---|---|---|---|
| Python Architect | 0 | 2 | 1 | Pattern-consistent; config_attr="copilot" is dead (no config object / apm.yml key) and remote pin loss is undocumented. |
| Test Coverage Expert | 0 | 2 | 1 | No builder write_output test for copilot (codex has one); subdir normalization edges untested. |
| Doc Writer | 0 | 3 | 0 | Marketplace guide, pack reference, apm-guide resources and CHANGELOG all omit copilot. |
B = blocking-severity findings, R = recommended, N = nits.
Counts are signal strength, not gates. The maintainer ships.
Top 5 follow-ups
- [Doc Writer] Document
copilotinpublish-to-a-marketplace.mdandreference/cli/pack.md(enable viaoutputs, default.github/plugin/marketplace.json,APM_MARKETPLACE_COPILOT_PATH, relative-string sources, no pin) -- users otherwise cannot discover the output; also add the.gitignoreunignore line. - [Doc Writer] Mirror the change in
packages/apm-guide/.apm/skills/apm-usage/(commands.md, package-authoring.md) and add a CHANGELOG[Unreleased]entry citing feat: add GitHub Copilot marketplace output #2600 -- repo rule 4 and changelog convention. - [Test Coverage Expert] Add
test_write_copilot_output_profilemirroring the codex builder test -- proves builder wiring, output path, and env override, not just the mapper. - [Python Architect] Resolve the dead
config_attr="copilot"(add a config dataclass + schema key, or use the existing no-config sentinel) -- avoids misleading maintainers. - [Python Architect] Comment (or emit a diagnostic) where remote ref/sha are discarded and
./<name>is fabricated -- makes the reproducibility trade-off explicit. Optionally add subdir normalization cases (./x,x/) andfrom __future__ import annotations/-> Nonein the new test file.
Recommendation
Ship with follow-ups. No blocking findings; the schema rewrite resolved the earlier concerns. Fold the docs/CHANGELOG/apm-guide updates and the builder test into this PR (bounded, same-scope); the config_attr cleanup and pin diagnostic can follow. Merge decision stays with the CODEOWNERS (@danielmeppiel, @sergio-sisternes-epam).
Full per-persona findings
Python Architect
- [recommended]
config_attr="copilot"references a non-existentMarketplaceConfigattribute atsrc/apm_cli/marketplace/output_profiles.py
MarketplaceConfigonly hasclaude/codex, and_APM_MARKETPLACE_KEYSrejects acopilot:block. Resolution falls back todefault_output, so no runtime bug, but the declaration is dead and misleading. - [recommended] Remote source fabricates a relative path and drops ref/sha/host pin at
src/apm_cli/marketplace/output_mappers.py
Claude emits a structured, reproducible source; Copilot emits./<subdir>or./<name>. Document why in the remote branch and consider a diagnostic when pins are discarded. - [nit] Header assembly (name, owner, metadata) duplicates Claude mapper logic at
src/apm_cli/marketplace/output_mappers.py
Acknowledged in the class docstring; a shared helper would reduce drift later.
Test Coverage Expert
- [recommended] No
write_outputintegration test for copilot attests/unit/marketplace/test_local_path_compose.py
Codex hastest_write_codex_output_profile; copilot has only isolated mapper tests.
Suggested: addtest_write_copilot_output_profileasserting.github/plugin/marketplace.jsonpath and nested metadata. - [recommended] Subdir normalization edge cases untested at
tests/unit/marketplace/test_copilot_output_mapper.py
Leading./preserved and trailing/stripped are not covered. - [nit] New test file omits
from __future__ import annotationsand-> Noneannotations used by sibling modules.
Doc Writer (ad-hoc: user-facing output added with no docs touched)
- [recommended] Marketplace docs enumerate claude/codex only at
docs/src/content/docs/producer/publish-to-a-marketplace.md
Add copilot enablement, default path, env var, schema notes, and the relative-source/no-pin limitation; updatereference/cli/pack.mdartifact list and--marketplace-pathrow. - [recommended] apm-guide resources not updated at
packages/apm-guide/.apm/skills/apm-usage/package-authoring.md
Repo rule 4 requires mirroring format changes there and incommands.md. - [recommended] No CHANGELOG
[Unreleased]entry atCHANGELOG.md
Suggested: "apm packcan emit a GitHub Copilotmarketplace.json(.github/plugin/marketplace.json) whencopilotis inmarketplace.outputs; override withAPM_MARKETPLACE_COPILOT_PATH. (feat: add GitHub Copilot marketplace output #2600)"
This panel is advisory. It does not block merge. Re-apply the
panel-review label after addressing feedback to re-run.
Generated by PR Review Panel for #2600 · copilot · auto · 208 AIC · ⌖ 6.28 AIC · ⊞ 10K · ◷
APM Review Panel:
|
| Persona | B | R | N | Takeaway |
|---|---|---|---|---|
| Python Architect | 0 | 2 | 1 | Pattern-consistent; config_attr="copilot" is dead (no config object / apm.yml key) and remote pin loss is undocumented. |
| Test Coverage Expert | 0 | 2 | 1 | No builder write_output test for copilot (codex has one); subdir normalization edges untested. |
| Doc Writer | 0 | 3 | 0 | Marketplace guide, pack reference, apm-guide resources and CHANGELOG all omit copilot. |
B = blocking-severity findings, R = recommended, N = nits.
Counts are signal strength, not gates. The maintainer ships.
Top 5 follow-ups
- [Doc Writer] Document
copilotinpublish-to-a-marketplace.mdandreference/cli/pack.md(enable viaoutputs, default.github/plugin/marketplace.json,APM_MARKETPLACE_COPILOT_PATH, relative-string sources, no pin) -- users otherwise cannot discover the output; also add the.gitignoreunignore line. - [Doc Writer] Mirror the change in
packages/apm-guide/.apm/skills/apm-usage/(commands.md, package-authoring.md) and add a CHANGELOG[Unreleased]entry citing feat: add GitHub Copilot marketplace output #2600 -- repo rule 4 and changelog convention. - [Test Coverage Expert] Add
test_write_copilot_output_profilemirroring the codex builder test -- proves builder wiring, output path, and env override, not just the mapper. - [Python Architect] Resolve the dead
config_attr="copilot"(add a config dataclass + schema key, or use the existing no-config sentinel) -- avoids misleading maintainers. - [Python Architect] Comment (or emit a diagnostic) where remote ref/sha are discarded and
./<name>is fabricated -- makes the reproducibility trade-off explicit. Optionally add subdir normalization cases (./x,x/) andfrom __future__ import annotations/-> Nonein the new test file.
Recommendation
Ship with follow-ups. No blocking findings; the schema rewrite resolved the earlier concerns. Fold the docs/CHANGELOG/apm-guide updates and the builder test into this PR (bounded, same-scope); the config_attr cleanup and pin diagnostic can follow. Merge decision stays with the CODEOWNERS (@danielmeppiel, @sergio-sisternes-epam).
Full per-persona findings
Python Architect
- [recommended]
config_attr="copilot"references a non-existentMarketplaceConfigattribute atsrc/apm_cli/marketplace/output_profiles.py
MarketplaceConfigonly hasclaude/codex, and_APM_MARKETPLACE_KEYSrejects acopilot:block. Resolution falls back todefault_output, so no runtime bug, but the declaration is dead and misleading. - [recommended] Remote source fabricates a relative path and drops ref/sha/host pin at
src/apm_cli/marketplace/output_mappers.py
Claude emits a structured, reproducible source; Copilot emits./<subdir>or./<name>. Document why in the remote branch and consider a diagnostic when pins are discarded. - [nit] Header assembly (name, owner, metadata) duplicates Claude mapper logic at
src/apm_cli/marketplace/output_mappers.py
Acknowledged in the class docstring; a shared helper would reduce drift later.
Test Coverage Expert
- [recommended] No
write_outputintegration test for copilot attests/unit/marketplace/test_local_path_compose.py
Codex hastest_write_codex_output_profile; copilot has only isolated mapper tests.
Suggested: addtest_write_copilot_output_profileasserting.github/plugin/marketplace.jsonpath and nested metadata. - [recommended] Subdir normalization edge cases untested at
tests/unit/marketplace/test_copilot_output_mapper.py
Leading./preserved and trailing/stripped are not covered. - [nit] New test file omits
from __future__ import annotationsand-> Noneannotations used by sibling modules.
Doc Writer (ad-hoc: user-facing output added with no docs touched)
- [recommended] Marketplace docs enumerate claude/codex only at
docs/src/content/docs/producer/publish-to-a-marketplace.md
Add copilot enablement, default path, env var, schema notes, and the relative-source/no-pin limitation; updatereference/cli/pack.mdartifact list and--marketplace-pathrow. - [recommended] apm-guide resources not updated at
packages/apm-guide/.apm/skills/apm-usage/package-authoring.md
Repo rule 4 requires mirroring format changes there and incommands.md. - [recommended] No CHANGELOG
[Unreleased]entry atCHANGELOG.md
Suggested: "apm packcan emit a GitHub Copilotmarketplace.json(.github/plugin/marketplace.json) whencopilotis inmarketplace.outputs; override withAPM_MARKETPLACE_COPILOT_PATH. (feat: add GitHub Copilot marketplace output #2600)"
This panel is advisory. It does not block merge. Re-apply the
panel-review label after addressing feedback to re-run.
Generated by autopilot-pr-review-worker. This comment is AI-generated and may contain errors.
Document copilot in pack/publish guides and apm-guide; add write_output builder test; resolve dead config_attr; clarify remote pin/subdir trade-off in the Copilot mapper (microsoft#2600 panel soft Top 5). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Thanks for the PR, Aryan Singh K. (@aryansk) — and for the Copilot marketplace output work on #2430. A soft panel follow-up recommended a small docs/test/config cleanup on this tip (publish/pack docs, apm-guide mirror + CHANGELOG, a builder write_output test, the dead No further status drip on this thread unless the situation changes or you ask. Generated by autopilot-pr-ready-takeover. This comment is AI-generated and may contain errors. |
Shard 1 failed because known_output_names and doctor format-coverage fixtures still assumed only claude/codex after the new copilot profile. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Align CopilotMarketplaceMapper with microsoft#2430 / Copilot CLI marketplace.json: relative-path source strings, omit empty description and unsupported plugin fields (author/tags/sha/ref/etc.). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document copilot in pack/publish guides and apm-guide; add write_output builder test; resolve dead config_attr; clarify remote pin/subdir trade-off in the Copilot mapper (microsoft#2600 panel soft Top 5). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
9255529 to
bf0ba77
Compare
|
Thanks for the PR, Aryan Singh K. (@aryansk) — and for the Copilot marketplace output work on #2430. A soft panel follow-up recommended a small docs/test/config cleanup on this tip (publish/pack docs, apm-guide mirror + CHANGELOG, a builder write_output test, the dead config_attr, and a clearer note where remote pins become relative paths). Delivery took those bounded follow-ups on your branch (keeping your authorship) and rebased onto the latest base so the tip stays mergeable. No further status drip on this thread unless the situation changes or you ask. Generated by autopilot-pr-ready-takeover. This comment is AI-generated and may contain errors. |
Closes #2430
Summary
copilotmarketplace output profile with the Copilot CLI default pathValidation
main