feat(agency): centralize Claude Code plugin and self-contained marketplace - #1102
Conversation
bb5fc49 to
d63fe2e
Compare
|
/rust-review |
|
✅ Rust PR Reviewer completed successfully! |
🔍 Rust PR ReviewSummary: Looks good overall — clean architecture and solid error handling. One concrete bug in the CLI help text. Findings🐛 Bugs / Logic Issues
|
Address Rust PR Reviewer feedback on #1102: - `--agency` help text said `.github/ado-aw` (stale); the scaffold writes to `agency/plugins/ado-aw` plus repo-root marketplace catalogs. - Extend test_init_agency_matches_canonical_source to verify all 13 embedded plugin files byte-for-byte (was 9), covering the previously-unchecked update/debug/manage-lifecycle/audit-build skills. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Address Rust PR Reviewer feedback on #1102: - `--agency` help text said `.github/ado-aw` (stale); the scaffold writes to `agency/plugins/ado-aw` plus repo-root marketplace catalogs. - Extend test_init_agency_matches_canonical_source to verify all 13 embedded plugin files byte-for-byte (was 9), covering the previously-unchecked update/debug/manage-lifecycle/audit-build skills. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1e0fcf3 to
d4b2219
Compare
|
/rust-review |
|
✅ Rust PR Reviewer completed successfully! |
🔍 Rust PR ReviewSummary: Looks good overall — clean design, solid tests — but there's one user-visible bug to fix before merging. Findings🐛 Bugs / Logic Issues
|
Round 2 review (run 28016634353) on #1102: - doctor.sh not executable: scaffolded copies (tokio::fs::write) and the checked-in file (git 100644) were non-exec, so `./scripts/doctor.sh` would fail with Permission denied. Mark the canonical file 100755 and document the cross-platform-safe `bash ./scripts/doctor.sh` invocation in the plugin README + dispatcher agent. - tests/init_tests.rs: restore the truncated first line of the test_init_force_flag_is_advertised_in_help doc comment. - src/init.rs: replace the silent `if let Some(parent)` skip with an explicit parent-directory resolution + error, so a missing parent fails loudly. - release-please: track the checked-in .github/agents/ado-aw.agent.md for version bumps (add x-release-please-version markers to src/data/init-agent.md prompt URLs + list it in extra-files) so it no longer drifts on each release. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
/rust-review |
|
✅ Rust PR Reviewer completed successfully! |
🔍 Rust PR ReviewSummary: Mostly looks good — one real bug, one minor suggestion. Findings🐛 Bugs / Logic Issues
|
…ion tracking Follow-up to the Rust PR review on #1102: - src/init.rs: after writing each plugin file, set mode 0755 on `.sh` files (`#[cfg(unix)]`, mirroring src/compile/common.rs) so the scaffolded doctor.sh is executable and the documented `./scripts/doctor.sh` works — `tokio::fs::write` otherwise leaves it 0644. - tests/init_tests.rs: add a `#[cfg(unix)]` assertion that the scaffolded doctor.sh carries the executable bit, guarding this going forward. - docs/agency-plugin.md: add a maintainer note spelling out that the compile-and-validate/manage-lifecycle/audit-build skills are intentionally omitted from release-please `extra-files`, and that adding a version-pinned URL to any of them requires both an x-release-please-version marker and an extra-files entry. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: jamesadevine <4742697+jamesadevine@users.noreply.github.com>
Co-authored-by: jamesadevine <4742697+jamesadevine@users.noreply.github.com>
…place
Promote the embedded `--agency` templates into a live, checked-in plugin at
`agency/plugins/ado-aw/` as the single source of truth, and implement the full
Agency marketplace spec: plugin.json, .mcp.json wiring the read-only
`ado-aw mcp-author` server, agency.json governance (external `source` pointer,
org-only identity, no PII), README, an agents/ado-aw.md dispatcher, six
skills/*/SKILL.md playbooks, and scripts/doctor.{sh,ps1} prerequisite checks.
Make the repository itself an installable marketplace: add repo-root catalogs
`.claude-plugin/marketplace.json` (Claude) and `.github/plugin/marketplace.json`
(Copilot) that list the plugin via `source: "./agency/plugins/ado-aw"`, so
`/plugin marketplace add <repo>` detects it. `ado-aw init --agency` scaffolds the
plugin under `agency/plugins/ado-aw/` plus those root catalogs.
Align terminology on the canonical brand "Azure DevOps Agentic Workflows": the
authored markdown spec is an "agentic workflow"; "pipeline" is reserved for the
compiled ADO execution artifact. Swept the init-generated output, root catalogs,
README, AGENTS.md title/prose, and user-facing CLI help strings.
Versions stay lock-step with the compiler via release-please `extra-files`: the
plugin manifest, both root catalogs (metadata + plugin entry), and the pinned
prompt URLs in the agent + create/update/debug skills bump on each release.
`init` embeds the canonical files via include_str! and writes them verbatim; the
duplicate src/data/agency-plugin tree is removed. Parity tests assert the
scaffold matches the canonical source byte-for-byte. .gitattributes forces LF
under agency/plugins/** and the root catalogs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Address Rust PR Reviewer feedback on #1102: - `--agency` help text said `.github/ado-aw` (stale); the scaffold writes to `agency/plugins/ado-aw` plus repo-root marketplace catalogs. - Extend test_init_agency_matches_canonical_source to verify all 13 embedded plugin files byte-for-byte (was 9), covering the previously-unchecked update/debug/manage-lifecycle/audit-build skills. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add docs/agency-plugin.md (canonical layout, skills, mcp-author wiring, self-contained root marketplace catalogs, init --agency scaffolding, release-please version-locking, shared-marketplace listing) and index it from AGENTS.md, matching the repo's one-page-per-concept docs convention. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The 0.37.0->0.38.0 release landed on main while this PR was open, bumping Cargo.toml but not the not-yet-merged plugin files. Resync the literal versions (plugin.json, both root catalogs, and the pinned prompt URLs in the agent + create/update/debug skills) so the plugin matches the compiler. release-please extra-files keeps them in lock-step on future releases. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Round 2 review (run 28016634353) on #1102: - doctor.sh not executable: scaffolded copies (tokio::fs::write) and the checked-in file (git 100644) were non-exec, so `./scripts/doctor.sh` would fail with Permission denied. Mark the canonical file 100755 and document the cross-platform-safe `bash ./scripts/doctor.sh` invocation in the plugin README + dispatcher agent. - tests/init_tests.rs: restore the truncated first line of the test_init_force_flag_is_advertised_in_help doc comment. - src/init.rs: replace the silent `if let Some(parent)` skip with an explicit parent-directory resolution + error, so a missing parent fails loudly. - release-please: track the checked-in .github/agents/ado-aw.agent.md for version bumps (add x-release-please-version markers to src/data/init-agent.md prompt URLs + list it in extra-files) so it no longer drifts on each release. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ion tracking Follow-up to the Rust PR review on #1102: - src/init.rs: after writing each plugin file, set mode 0755 on `.sh` files (`#[cfg(unix)]`, mirroring src/compile/common.rs) so the scaffolded doctor.sh is executable and the documented `./scripts/doctor.sh` works — `tokio::fs::write` otherwise leaves it 0644. - tests/init_tests.rs: add a `#[cfg(unix)]` assertion that the scaffolded doctor.sh carries the executable bit, guarding this going forward. - docs/agency-plugin.md: add a maintainer note spelling out that the compile-and-validate/manage-lifecycle/audit-build skills are intentionally omitted from release-please `extra-files`, and that adding a version-pinned URL to any of them requires both an x-release-please-version marker and an extra-files entry. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
905f811 to
183d1b2
Compare
Address the design-review findings on #1102: - Directory-walk parity test: test_init_agency_matches_canonical_source now walks agency/plugins/ado-aw/ instead of a hardcoded list, so a new canonical file that nobody wired into AGENCY_PLUGIN_FILES fails loudly instead of being shipped via the in-repo marketplace but never scaffolded by `init --agency`. - Version-parity guard: test_plugin_version_matches_crate_version asserts plugin.json + both root catalogs (metadata + plugins[0]) equal the crate version, so a release landing mid-change can no longer desync silently. - Clobber guard: write_agency_plugin no longer overwrites a consumer's pre-existing, differing root marketplace catalog — it skips with a warning and leaves it for manual merge (identical catalogs remain an idempotent no-op). Covered by test_init_agency_does_not_clobber_existing_catalog. - Committed-agent parity: test_committed_agent_file_matches_template_output guards .github/agents/ado-aw.agent.md against drift from its template. - Clarify in docs/agency-plugin.md that the template's release-please markers intentionally propagate into the committed agent file (the tracked one); the template markers are inert by design and must not be stripped. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
/rust-review |
|
✅ Rust PR Reviewer completed successfully! |
🔍 Rust PR ReviewSummary: Looks good overall — clean Findings🐛 Bugs / Logic Issues
✅ What Looks Good
|
The wrote_catalog/skipped_catalog booleans were reported with `if/else if`, so the mixed case (one root catalog written, one pre-existing one skipped) printed the "✓ Wrote marketplace catalogs" line and falsely implied both were written, contradicting the per-file skip warning. Replace with an exhaustive match over (wrote, skipped) including a dedicated mixed-case message. Extend test_init_agency_does_not_clobber_existing_catalog to assert the stderr skip warning, the corrected stdout summary, and that the non-pre-existing catalog is still written. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
What & why
ado-aw init --agencypreviously emitted a duplicated, hard-to-test plugintemplate tree (
src/data/agency-plugin/) into.github/ado-aw, and the resultwas not detectable by the Agency marketplace. This PR centralizes the plugin as
a checked-in single source of truth, makes the repo itself an installable
marketplace, implements the full Agency plugin spec, and aligns terminology on
the canonical brand Azure DevOps Agentic Workflows.
Key changes
agency/plugins/ado-aw/(single source of truth):.claude-plugin/plugin.json,.mcp.json(wires the read-onlyado-aw mcp-authorserver),agency.json(governance + externalsourcepointer, org-only identity, no PII),
README.md, anagents/ado-aw.mddispatcher, six
skills/*/SKILL.mdplaybooks (create/update/debug-workflow,compile-and-validate, manage-lifecycle, audit-build), and
scripts/doctor.{sh,ps1}prerequisite checks..claude-plugin/marketplace.json(Claude) and.github/plugin/marketplace.json(Copilot) list the plugin via
source: "./agency/plugins/ado-aw", so/plugin marketplace add <repo>detects it.--agency:initnow embeds the canonical files viainclude_str!and writes them verbatim (plugin under
agency/plugins/ado-aw/+ rootcatalogs); the duplicate
src/data/agency-plugin/tree is removed.extra-files: plugin manifest,both root catalogs (metadata + plugin entry), and the pinned prompt URLs in the
agent + create/update/debug skills bump on every release.
spec is an agentic workflow; pipeline = the compiled ADO execution
artifact) across init-generated output, root catalogs, README, AGENTS.md, and
user-facing CLI help.
Tests
init --agencyoutput matches the canonical sourcebyte-for-byte; root-catalog existence +
sourceassertions; updated agent-titleassertions.
cargo build, fullcargo test(2063 lib + integration, 0 failed),cargo clippy --all-targets --all-features, andshellcheck doctor.shall green.Follow-up (separate)
To list in the shared Agency marketplace, add a one-line
extPluginSourcesentryto
agency-microsoft/playground'smarketplace-config.json:"https://github.com/githubnext/ado-aw.git": ["agency/plugins/ado-aw"].