feat(kyberforge): add apm-install/apm-workflow/apm-orchestrate, ADR-0015 #91

Merged
Claude merged 11 commits from feat/88-marketplace-apm-conversion into main 2026-08-11 16:05:56 +00:00
Collaborator

Builds the operational tooling for Microsoft APM (Agent Package Manager) in kyberforge, scoped by issue #88 and grilled/refined via grill-with-docs.

What's here

  • plugins/kyberforge/docs/research/docs/microsoft-apm/ — research reference set (overview, installation, configuration, cli-reference, examples, troubleshooting, testing-and-validation, marketplace-and-registries, monorepo-and-repo-shapes)
  • ADR-0015 — records the decision to replace this repo's hand-maintained plugin/marketplace authoring model with APM (apm.yml + .apm/) outright, superseding ADR-0001; plugins/<name>/ monorepo-hybrid layout survives, .claude-plugin/marketplace.json/plugin.json become compiled output via apm compile/apm pack
  • apm-install (skill) — apm binary install + apm runtime setup|list|status|remove
  • apm-workflow (skill) — dispatch skill covering configure/scaffold, marketplace, compile/pack/publish, audit/validate
  • apm-orchestrate (agent + Copilot pair) — deterministic counterpart to apm-workflow for future subagent-dispatched multi-plugin work

All three new artifacts passed skill-audit/agent-audit twice — once inline during authoring, once via an independent clean-context recheck — with zero findings both times.

Explicitly out of scope (tracked separately)

  • #89 — adapt plugin-author/marketplace-author/skill-author/agent-author/forge's routing to author .apm/-native content
  • #90 — actually translate the existing plugins into apm.yml + .apm/ and run the real conversion

Closes #88.

Test plan

  • bash tests/run-tests.sh passed via pre-push hook (full suite + manifest/marketplace validation + Vale sync)
  • skill-audit/agent-audit clean on all three new artifacts, verified twice (inline + independent recheck)
  • No live apm CLI smoke test — deferred to #89/#90 when these skills are actually used
Builds the operational tooling for Microsoft APM (Agent Package Manager) in `kyberforge`, scoped by issue #88 and grilled/refined via `grill-with-docs`. ## What's here - `plugins/kyberforge/docs/research/docs/microsoft-apm/` — research reference set (overview, installation, configuration, cli-reference, examples, troubleshooting, testing-and-validation, marketplace-and-registries, monorepo-and-repo-shapes) - **ADR-0015** — records the decision to replace this repo's hand-maintained plugin/marketplace authoring model with APM (`apm.yml` + `.apm/`) outright, superseding ADR-0001; `plugins/<name>/` monorepo-hybrid layout survives, `.claude-plugin/marketplace.json`/`plugin.json` become compiled output via `apm compile`/`apm pack` - `apm-install` (skill) — `apm` binary install + `apm runtime setup|list|status|remove` - `apm-workflow` (skill) — dispatch skill covering configure/scaffold, marketplace, compile/pack/publish, audit/validate - `apm-orchestrate` (agent + Copilot pair) — deterministic counterpart to `apm-workflow` for future subagent-dispatched multi-plugin work All three new artifacts passed `skill-audit`/`agent-audit` twice — once inline during authoring, once via an independent clean-context recheck — with zero findings both times. ## Explicitly out of scope (tracked separately) - #89 — adapt `plugin-author`/`marketplace-author`/`skill-author`/`agent-author`/`forge`'s routing to author `.apm/`-native content - #90 — actually translate the existing plugins into `apm.yml` + `.apm/` and run the real conversion Closes #88. ## Test plan - [x] `bash tests/run-tests.sh` passed via pre-push hook (full suite + manifest/marketplace validation + Vale sync) - [x] `skill-audit`/`agent-audit` clean on all three new artifacts, verified twice (inline + independent recheck) - [ ] No live `apm` CLI smoke test — deferred to #89/#90 when these skills are actually used
Claude added 5 commits 2026-08-10 18:03:10 +00:00
Capture Microsoft's Agent Package Manager (APM) — overview, install,
config, CLI reference, registries/marketplace, monorepo shapes,
testing/validation, troubleshooting, and examples — as structured
reference docs under plugins/kyberforge/docs/research/docs/microsoft-apm/.

Lays the groundwork for issue #88 (build agents/skills to execute a
marketplace-to-APM conversion of this repo).
Records the grill-with-docs decision on issue #88: replace the
hand-authored plugin/marketplace manifest model with Microsoft APM
(apm.yml + .apm/) as this repo's authoring source of truth. The
plugins/<name>/ monorepo-hybrid layout survives; marketplace.json and
provider plugin.json files become compiled output. Supersedes
ADR-0001; touches but does not resolve ADR-0006/0010/0014. Follow-up
work tracked in issues #89 and #90.
Wraps apm CLI binary install and agent-runtime setup
(apm runtime setup/list/status/remove), the bootstrap step
ahead of apm-workflow's configure/compile/audit loop.
Human-facing dispatch over apm's configure/marketplace/compile/audit
lifecycle, one reference file per concern, gitea-issues-style
dispatch table. apm-install handles the one-time binary/runtime
bootstrap that precedes this loop.
Deterministic counterpart to apm-workflow for subagent dispatch,
mirroring git-orchestrate/gitea-orchestrate. Scoped to
configure/marketplace/compile/audit, with fan-out across multiple
packages for the future multi-plugin conversion; apm-install has no
orchestrator counterpart since it's a one-time machine bootstrap.

Bumps kyberforge 1.2.8 -> 1.3.0 (new agent, first in the plugin).
Claude reviewed 2026-08-10 18:33:10 +00:00
Claude left a comment
Author
Collaborator

Full review via /code-review high (multi-agent, independently converged across 3+ passes then re-verified against the actual files). This diff is all-markdown (ADR-0015, apm-orchestrate agent pair, apm-install/apm-workflow skills, research docs, 2 plugin.json bumps) — no executable code, so findings are documentation self-contradictions and interface gaps rather than crashes. 10 inline findings below, grouped: (1) ADR-0015 internally disagrees with itself on when ADR-0001 is superseded and on its own stated scope-rationale; (2) apm-orchestrate's operation vocabulary (compile-manifest-check, add-package, add-marketplace) isn't grounded in apm-workflow's actual CLI verbs anywhere; (3) a Hard Rule in apm-orchestrate.md can never fire given the agent's declared tools; (4) apm-orchestrate.md and apm-orchestrate.agent.md have already drifted on the Output contract; (5) apm-workflow's reference docs duplicate the research docs and one recommends raw git shell instead of this repo's own git-commits/git-remotes skills; (6) CONTEXT.md's glossary and ADR-0001 get no forward-pointer to ADR-0015 despite both being living documents this ADR claims are affected. None of these are blocking code bugs, but several undermine the PR's own acceptance criteria ("internally consistent with the microsoft-apm research docs") and one (the dead Hard Rule) is a safety-relevant correctness issue in an agent definition. Requesting changes rather than approving outright given the ADR self-contradiction and the undocumented orchestrator operations — both are cheap to fix and load-bearing for issues #89/#90 that build on this.

Full review via `/code-review high` (multi-agent, independently converged across 3+ passes then re-verified against the actual files). This diff is all-markdown (ADR-0015, apm-orchestrate agent pair, apm-install/apm-workflow skills, research docs, 2 plugin.json bumps) — no executable code, so findings are documentation self-contradictions and interface gaps rather than crashes. 10 inline findings below, grouped: (1) ADR-0015 internally disagrees with itself on when ADR-0001 is superseded and on its own stated scope-rationale; (2) apm-orchestrate's operation vocabulary (compile-manifest-check, add-package, add-marketplace) isn't grounded in apm-workflow's actual CLI verbs anywhere; (3) a Hard Rule in apm-orchestrate.md can never fire given the agent's declared tools; (4) apm-orchestrate.md and apm-orchestrate.agent.md have already drifted on the Output contract; (5) apm-workflow's reference docs duplicate the research docs and one recommends raw git shell instead of this repo's own git-commits/git-remotes skills; (6) CONTEXT.md's glossary and ADR-0001 get no forward-pointer to ADR-0015 despite both being living documents this ADR claims are affected. None of these are blocking code bugs, but several undermine the PR's own acceptance criteria ("internally consistent with the microsoft-apm research docs") and one (the dead Hard Rule) is a safety-relevant correctness issue in an agent definition. Requesting changes rather than approving outright given the ADR self-contradiction and the undocumented orchestrator operations — both are cheap to fix and load-bearing for issues #89/#90 that build on this.
@@ -0,0 +28,4 @@
and per-provider `plugin.json` files become **compiled output** via `apm compile`/`apm pack`,
generated from `apm.yml` + `.apm/` per plugin, extensible to other `apm runtime`-supported
providers without hand-maintaining a separate manifest per provider.
- **This directly supersedes ADR-0001** ("Skills are distributed via plugins... each plugin
Author
Collaborator

This Decision bullet states 'This directly supersedes ADR-0001' as a present-tense fact, but the Consequences section (line 63) says 'ADR-0001 is superseded once issue #90 executes' — a future, conditional event. The same document licenses opposite conclusions depending which section a reader lands on. Pick one framing (recommend: conditional, matching Consequences) and make the Decision bullet match it.

This Decision bullet states 'This directly supersedes ADR-0001' as a present-tense fact, but the Consequences section (line 63) says 'ADR-0001 is superseded once issue #90 executes' — a future, conditional event. The same document licenses opposite conclusions depending which section a reader lands on. Pick one framing (recommend: conditional, matching Consequences) and make the Decision bullet match it.
Defame1297 marked this conversation as resolved
@@ -0,0 +40,4 @@
- Actually translating the existing plugins into `apm.yml` + `.apm/` and running the real
conversion is deferred to issue #90
(https://git.dev.rkdr.net/Defame1297/holocron/issues/90).
- `CONTEXT.md`'s "Plugin"/"Skill"/"Plugin marketplace" glossary entries remain accurate as
Author
Collaborator

This says CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary 'remains accurate as written until issue #90', but neither CONTEXT.md nor ADR-0001 gets any status marker or forward-pointer to this ADR. CONTEXT.md is mandated reading 'at the start of every session' per AGENTS.md, and this repo's own convention elsewhere (e.g. ADR-0007/ADR-0010) is to add an inline 'Superseded by' / 'Update' note on the older doc. Without that, an agent consulting CONTEXT.md or ADR-0001 directly has no signal a foundational change is pending and will keep hand-authoring plugin.json/marketplace.json exactly as this ADR says is being phased out.

This says CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary 'remains accurate as written until issue #90', but neither CONTEXT.md nor ADR-0001 gets any status marker or forward-pointer to this ADR. CONTEXT.md is mandated reading 'at the start of every session' per AGENTS.md, and this repo's own convention elsewhere (e.g. ADR-0007/ADR-0010) is to add an inline 'Superseded by' / 'Update' note on the older doc. Without that, an agent consulting CONTEXT.md or ADR-0001 directly has no signal a foundational change is pending and will keep hand-authoring plugin.json/marketplace.json exactly as this ADR says is being phased out.
Defame1297 marked this conversation as resolved
@@ -0,0 +54,4 @@
specifically because Vale tooling is generic and repo-agnostic, not holocron-marketplace-specific
(see `CONTEXT.md`'s "lint plugin" entry) — the same argument applies to a generic `apm` CLI
wrapper. Rejected anyway, in favor of `kyberforge`, because this tooling's scope is specifically
converting *this* repo's marketplace, not standing up a reusable generic apm toolkit for other
Author
Collaborator

The rationale for rejecting a standalone plugins/apm/ plugin claims this tooling's scope is 'specifically converting this repo's marketplace, not standing up a reusable generic apm toolkit' — but the shipped apm-install/apm-workflow SKILL.md files are fully generic, repo-agnostic APM CLI documentation with essentially no holocron-specific content. The stated justification doesn't match what was actually built, which will make the placement decision look post-hoc to a future reviewer.

The rationale for rejecting a standalone `plugins/apm/` plugin claims this tooling's scope is 'specifically converting *this* repo's marketplace, not standing up a reusable generic apm toolkit' — but the shipped apm-install/apm-workflow SKILL.md files are fully generic, repo-agnostic APM CLI documentation with essentially no holocron-specific content. The stated justification doesn't match what was actually built, which will make the placement decision look post-hoc to a future reviewer.
Owner

agree that the created files are agnostic, but they still fit the kyberforge purpose.

agree that the created files are agnostic, but they still fit the kyberforge purpose.
Defame1297 marked this conversation as resolved
@@ -0,0 +64,4 @@
- ADR-0006 (plugin-version-parity) will need a third file, `apm.yml`, folded into its parity
check once #90 lands — not resolved by this ADR.
- ADR-0010 (agent sources relocated outside agents dir) needs revisiting once agents move under
`.apm/agents/` with the `.agent.md` extension — not resolved by this ADR.
Author
Collaborator

Attributes the .agent.md extension to the future APM conversion ('needs revisiting once agents move under .apm/agents/ with the .agent.md extension'), but .agent.md is this repo's pre-existing Copilot-pairing convention (ADR-0005/ADR-0010), already in use by this very diff's own apm-orchestrate.agent.md. Whoever executes #90 could read this as license to redesign an already-settled, orthogonal naming convention that has nothing to do with the APM move.

Attributes the `.agent.md` extension to the future APM conversion ('needs revisiting once agents move under .apm/agents/ with the .agent.md extension'), but `.agent.md` is this repo's pre-existing Copilot-pairing convention (ADR-0005/ADR-0010), already in use by this very diff's own apm-orchestrate.agent.md. Whoever executes #90 could read this as license to redesign an already-settled, orthogonal naming convention that has nothing to do with the APM move.
Defame1297 marked this conversation as resolved
@@ -0,0 +58,4 @@
7. Catch and handle apm errors: retry once for a dependency-not-yet-scaffolded failure after the caller confirms the dependency exists; otherwise return error structure with diagnostics
8. Aggregate all outputs and return as structured JSON
## Output
Author
Collaborator

apm-orchestrate.md and apm-orchestrate.agent.md duplicate ~95% of their content verbatim and have already drifted on the Output section: the .md version gives an explicit JSON schema with enumerated error codes (not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed); this .agent.md version has only a one-sentence prose summary that omits the error-code enum entirely. A future edit to one contract has nothing forcing the sibling to follow.

apm-orchestrate.md and apm-orchestrate.agent.md duplicate ~95% of their content verbatim and have already drifted on the Output section: the .md version gives an explicit JSON schema with enumerated error codes (not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed); this .agent.md version has only a one-sentence prose summary that omits the error-code enum entirely. A future edit to one contract has nothing forcing the sibling to follow.
Defame1297 marked this conversation as resolved
@@ -0,0 +20,4 @@
These are non-negotiable regardless of `confirm` or any skill-local override:
- `apm publish` claims a version on a registry — treat it as irreversible. Refuse without explicit `confirm: true`; always dispatch with `--dry-run -v` first and surface that output to the caller before the real publish, even when `confirm: true` was given.
- MCP server secrets in any `apm.yml` content this orchestrator writes or edits must use `${VAR}` indirection — never a literal value.
Author
Collaborator

This Hard Rule governs 'any apm.yml content this orchestrator writes or edits', but the agent declares only tools: Bash, Read (line 6) and its own Scope (line 13) states it 'does not decide manifest content yourself, you delegate' — it has no Edit/Write tool and never touches apm.yml directly. The rule it exists to enforce has no code path that ever fires; it reads as an active safety gate but is dead text. Either grant the capability this rule assumes, or move the rule to wherever manifest content actually gets written.

This Hard Rule governs 'any apm.yml content this orchestrator writes or edits', but the agent declares only `tools: Bash, Read` (line 6) and its own Scope (line 13) states it 'does not decide manifest content yourself, you delegate' — it has no Edit/Write tool and never touches apm.yml directly. The rule it exists to enforce has no code path that ever fires; it reads as an active safety gate but is dead text. Either grant the capability this rule assumes, or move the rule to wherever manifest content actually gets written.
Defame1297 marked this conversation as resolved
@@ -0,0 +38,4 @@
## Inputs
- **operation:** string, one of:
- configure: init-package, compile-manifest-check (does `apm.yml` parse and match `type:`)
Author
Collaborator

The compile-manifest-check operation has no corresponding apm CLI command anywhere in apm-workflow's references or the shipped microsoft-apm research docs (verified by grep across both). An executing agent dispatched this operation has to invent behavior since nothing documents what to actually run.

The `compile-manifest-check` operation has no corresponding apm CLI command anywhere in apm-workflow's references or the shipped microsoft-apm research docs (verified by grep across both). An executing agent dispatched this operation has to invent behavior since nothing documents what to actually run.
Defame1297 marked this conversation as resolved
@@ -0,0 +39,4 @@
- **operation:** string, one of:
- configure: init-package, compile-manifest-check (does `apm.yml` parse and match `type:`)
- marketplace: init-marketplace, check-marketplace, add-package, add-marketplace
Author
Collaborator

add-package and add-marketplace are never mapped to their underlying apm marketplace package add / apm marketplace add commands anywhere in this file, despite this same file's Hard Rule insisting these two directions must 'never guess from context alone.' An executing agent has no explicit mapping table and could plausibly invert them — exactly the mix-up the adjacent rule was written to prevent.

`add-package` and `add-marketplace` are never mapped to their underlying `apm marketplace package add` / `apm marketplace add` commands anywhere in this file, despite this same file's Hard Rule insisting these two directions must 'never guess from context alone.' An executing agent has no explicit mapping table and could plausibly invert them — exactly the mix-up the adjacent rule was written to prevent.
Defame1297 marked this conversation as resolved
@@ -0,0 +1,127 @@
---
Author
Collaborator

This and the other three apm-workflow reference files (compile.md, audit.md, marketplace.md) restate their sibling research docs under docs/research/docs/microsoft-apm/ nearly verbatim (same command lists, same caveats, same CI YAML block in audit.md) — two sources of truth for the same facts. An upstream apm flag/behavior change applied to the research doc (the stated source of truth) can be missed here, leaving the actionable skill guidance silently stale while looking equally authoritative. Consider having these reference files point at the research docs rather than duplicating their content.

This and the other three apm-workflow reference files (compile.md, audit.md, marketplace.md) restate their sibling research docs under docs/research/docs/microsoft-apm/ nearly verbatim (same command lists, same caveats, same CI YAML block in audit.md) — two sources of truth for the same facts. An upstream apm flag/behavior change applied to the research doc (the stated source of truth) can be missed here, leaving the actionable skill guidance silently stale while looking equally authoritative. Consider having these reference files point at the research docs rather than duplicating their content.
Owner

This is/should be done through the sources.md. Not sure this finding is correct

This is/should be done through the sources.md. Not sure this finding is correct
Defame1297 marked this conversation as resolved
@@ -0,0 +11,4 @@
$EDITOR apm.yml # 2. describe each package
apm marketplace check # 3. validate refs resolve
apm pack # 4. build marketplace artifacts
git add apm.yml .claude-plugin/marketplace.json
Author
Collaborator

Documents a raw git add/git commit/git tag/git push --tags chain as the literal release step. AGENTS.md's 'Prefer plugin skills over raw shell' section states commits/remotes are owned by git:git-commits/git:git-remotes and to fall back to raw shell 'only when no skill covers it' — an agent following this reference verbatim shells out directly in a repo that already has dedicated skills for exactly this operation.

Documents a raw `git add`/`git commit`/`git tag`/`git push --tags` chain as the literal release step. AGENTS.md's 'Prefer plugin skills over raw shell' section states commits/remotes are owned by `git:git-commits`/`git:git-remotes` and to fall back to raw shell 'only when no skill covers it' — an agent following this reference verbatim shells out directly in a repo that already has dedicated skills for exactly this operation.
Defame1297 marked this conversation as resolved
Claude reviewed 2026-08-10 18:33:26 +00:00
Claude left a comment
Author
Collaborator

Full review findings (10 inline comments) — mainly the ADR-0015 self-contradiction (Decision vs. Consequences on when ADR-0001 is superseded) and the undocumented apm-orchestrate operations (compile-manifest-check, add-package/add-marketplace) that aren't grounded in apm-workflow's actual CLI verbs anywhere. Submitted as COMMENT rather than REQUEST_CHANGES — Gitea disallows self-review rejection since author and reviewer are the same account here. Treat the ADR contradiction and the dead Hard Rule (apm-orchestrate.md line 23) as should-fix before merge; the rest are lower-severity consistency/maintainability notes. Details inline.

Full review findings (10 inline comments) — mainly the ADR-0015 self-contradiction (Decision vs. Consequences on when ADR-0001 is superseded) and the undocumented apm-orchestrate operations (compile-manifest-check, add-package/add-marketplace) that aren't grounded in apm-workflow's actual CLI verbs anywhere. Submitted as COMMENT rather than REQUEST_CHANGES — Gitea disallows self-review rejection since author and reviewer are the same account here. Treat the ADR contradiction and the dead Hard Rule (apm-orchestrate.md line 23) as should-fix before merge; the rest are lower-severity consistency/maintainability notes. Details inline.
@@ -0,0 +28,4 @@
and per-provider `plugin.json` files become **compiled output** via `apm compile`/`apm pack`,
generated from `apm.yml` + `.apm/` per plugin, extensible to other `apm runtime`-supported
providers without hand-maintaining a separate manifest per provider.
- **This directly supersedes ADR-0001** ("Skills are distributed via plugins... each plugin
Author
Collaborator

This Decision bullet states 'This directly supersedes ADR-0001' as a present-tense fact, but the Consequences section (line 63) says 'ADR-0001 is superseded once issue #90 executes' — a future, conditional event. The same document licenses opposite conclusions depending which section a reader lands on. Pick one framing (recommend: conditional, matching Consequences) and make the Decision bullet match it.

This Decision bullet states 'This directly supersedes ADR-0001' as a present-tense fact, but the Consequences section (line 63) says 'ADR-0001 is superseded once issue #90 executes' — a future, conditional event. The same document licenses opposite conclusions depending which section a reader lands on. Pick one framing (recommend: conditional, matching Consequences) and make the Decision bullet match it.
Defame1297 marked this conversation as resolved
@@ -0,0 +40,4 @@
- Actually translating the existing plugins into `apm.yml` + `.apm/` and running the real
conversion is deferred to issue #90
(https://git.dev.rkdr.net/Defame1297/holocron/issues/90).
- `CONTEXT.md`'s "Plugin"/"Skill"/"Plugin marketplace" glossary entries remain accurate as
Author
Collaborator

This says CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary 'remains accurate as written until issue #90', but neither CONTEXT.md nor ADR-0001 gets any status marker or forward-pointer to this ADR. CONTEXT.md is mandated reading 'at the start of every session' per AGENTS.md, and this repo's own convention elsewhere (e.g. ADR-0007/ADR-0010) is to add an inline 'Superseded by' / 'Update' note on the older doc. Without that, an agent consulting CONTEXT.md or ADR-0001 directly has no signal a foundational change is pending and will keep hand-authoring plugin.json/marketplace.json exactly as this ADR says is being phased out.

This says CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary 'remains accurate as written until issue #90', but neither CONTEXT.md nor ADR-0001 gets any status marker or forward-pointer to this ADR. CONTEXT.md is mandated reading 'at the start of every session' per AGENTS.md, and this repo's own convention elsewhere (e.g. ADR-0007/ADR-0010) is to add an inline 'Superseded by' / 'Update' note on the older doc. Without that, an agent consulting CONTEXT.md or ADR-0001 directly has no signal a foundational change is pending and will keep hand-authoring plugin.json/marketplace.json exactly as this ADR says is being phased out.
Defame1297 marked this conversation as resolved
@@ -0,0 +54,4 @@
specifically because Vale tooling is generic and repo-agnostic, not holocron-marketplace-specific
(see `CONTEXT.md`'s "lint plugin" entry) — the same argument applies to a generic `apm` CLI
wrapper. Rejected anyway, in favor of `kyberforge`, because this tooling's scope is specifically
converting *this* repo's marketplace, not standing up a reusable generic apm toolkit for other
Author
Collaborator

The rationale for rejecting a standalone plugins/apm/ plugin claims this tooling's scope is 'specifically converting this repo's marketplace, not standing up a reusable generic apm toolkit' — but the shipped apm-install/apm-workflow SKILL.md files are fully generic, repo-agnostic APM CLI documentation with essentially no holocron-specific content. The stated justification doesn't match what was actually built, which will make the placement decision look post-hoc to a future reviewer.

The rationale for rejecting a standalone `plugins/apm/` plugin claims this tooling's scope is 'specifically converting *this* repo's marketplace, not standing up a reusable generic apm toolkit' — but the shipped apm-install/apm-workflow SKILL.md files are fully generic, repo-agnostic APM CLI documentation with essentially no holocron-specific content. The stated justification doesn't match what was actually built, which will make the placement decision look post-hoc to a future reviewer.
Owner

agree that the created files are agnostic, but they still fit the kyberforge purpose.

agree that the created files are agnostic, but they still fit the kyberforge purpose.
Defame1297 marked this conversation as resolved
@@ -0,0 +64,4 @@
- ADR-0006 (plugin-version-parity) will need a third file, `apm.yml`, folded into its parity
check once #90 lands — not resolved by this ADR.
- ADR-0010 (agent sources relocated outside agents dir) needs revisiting once agents move under
`.apm/agents/` with the `.agent.md` extension — not resolved by this ADR.
Author
Collaborator

Attributes the .agent.md extension to the future APM conversion ('needs revisiting once agents move under .apm/agents/ with the .agent.md extension'), but .agent.md is this repo's pre-existing Copilot-pairing convention (ADR-0005/ADR-0010), already in use by this very diff's own apm-orchestrate.agent.md. Whoever executes #90 could read this as license to redesign an already-settled, orthogonal naming convention that has nothing to do with the APM move.

Attributes the `.agent.md` extension to the future APM conversion ('needs revisiting once agents move under .apm/agents/ with the .agent.md extension'), but `.agent.md` is this repo's pre-existing Copilot-pairing convention (ADR-0005/ADR-0010), already in use by this very diff's own apm-orchestrate.agent.md. Whoever executes #90 could read this as license to redesign an already-settled, orthogonal naming convention that has nothing to do with the APM move.
Defame1297 marked this conversation as resolved
@@ -0,0 +58,4 @@
7. Catch and handle apm errors: retry once for a dependency-not-yet-scaffolded failure after the caller confirms the dependency exists; otherwise return error structure with diagnostics
8. Aggregate all outputs and return as structured JSON
## Output
Author
Collaborator

apm-orchestrate.md and apm-orchestrate.agent.md duplicate ~95% of their content verbatim and have already drifted on the Output section: the .md version gives an explicit JSON schema with enumerated error codes (not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed); this .agent.md version has only a one-sentence prose summary that omits the error-code enum entirely. A future edit to one contract has nothing forcing the sibling to follow.

apm-orchestrate.md and apm-orchestrate.agent.md duplicate ~95% of their content verbatim and have already drifted on the Output section: the .md version gives an explicit JSON schema with enumerated error codes (not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed); this .agent.md version has only a one-sentence prose summary that omits the error-code enum entirely. A future edit to one contract has nothing forcing the sibling to follow.
Defame1297 marked this conversation as resolved
@@ -0,0 +20,4 @@
These are non-negotiable regardless of `confirm` or any skill-local override:
- `apm publish` claims a version on a registry — treat it as irreversible. Refuse without explicit `confirm: true`; always dispatch with `--dry-run -v` first and surface that output to the caller before the real publish, even when `confirm: true` was given.
- MCP server secrets in any `apm.yml` content this orchestrator writes or edits must use `${VAR}` indirection — never a literal value.
Author
Collaborator

This Hard Rule governs 'any apm.yml content this orchestrator writes or edits', but the agent declares only tools: Bash, Read (line 6) and its own Scope (line 13) states it 'does not decide manifest content yourself, you delegate' — it has no Edit/Write tool and never touches apm.yml directly. The rule it exists to enforce has no code path that ever fires; it reads as an active safety gate but is dead text. Either grant the capability this rule assumes, or move the rule to wherever manifest content actually gets written.

This Hard Rule governs 'any apm.yml content this orchestrator writes or edits', but the agent declares only `tools: Bash, Read` (line 6) and its own Scope (line 13) states it 'does not decide manifest content yourself, you delegate' — it has no Edit/Write tool and never touches apm.yml directly. The rule it exists to enforce has no code path that ever fires; it reads as an active safety gate but is dead text. Either grant the capability this rule assumes, or move the rule to wherever manifest content actually gets written.
Defame1297 marked this conversation as resolved
@@ -0,0 +38,4 @@
## Inputs
- **operation:** string, one of:
- configure: init-package, compile-manifest-check (does `apm.yml` parse and match `type:`)
Author
Collaborator

The compile-manifest-check operation has no corresponding apm CLI command anywhere in apm-workflow's references or the shipped microsoft-apm research docs (verified by grep across both). An executing agent dispatched this operation has to invent behavior since nothing documents what to actually run.

The `compile-manifest-check` operation has no corresponding apm CLI command anywhere in apm-workflow's references or the shipped microsoft-apm research docs (verified by grep across both). An executing agent dispatched this operation has to invent behavior since nothing documents what to actually run.
Defame1297 marked this conversation as resolved
@@ -0,0 +39,4 @@
- **operation:** string, one of:
- configure: init-package, compile-manifest-check (does `apm.yml` parse and match `type:`)
- marketplace: init-marketplace, check-marketplace, add-package, add-marketplace
Author
Collaborator

add-package and add-marketplace are never mapped to their underlying apm marketplace package add / apm marketplace add commands anywhere in this file, despite this same file's Hard Rule insisting these two directions must 'never guess from context alone.' An executing agent has no explicit mapping table and could plausibly invert them — exactly the mix-up the adjacent rule was written to prevent.

`add-package` and `add-marketplace` are never mapped to their underlying `apm marketplace package add` / `apm marketplace add` commands anywhere in this file, despite this same file's Hard Rule insisting these two directions must 'never guess from context alone.' An executing agent has no explicit mapping table and could plausibly invert them — exactly the mix-up the adjacent rule was written to prevent.
Defame1297 marked this conversation as resolved
@@ -0,0 +1,127 @@
---
Author
Collaborator

This and the other three apm-workflow reference files (compile.md, audit.md, marketplace.md) restate their sibling research docs under docs/research/docs/microsoft-apm/ nearly verbatim (same command lists, same caveats, same CI YAML block in audit.md) — two sources of truth for the same facts. An upstream apm flag/behavior change applied to the research doc (the stated source of truth) can be missed here, leaving the actionable skill guidance silently stale while looking equally authoritative. Consider having these reference files point at the research docs rather than duplicating their content.

This and the other three apm-workflow reference files (compile.md, audit.md, marketplace.md) restate their sibling research docs under docs/research/docs/microsoft-apm/ nearly verbatim (same command lists, same caveats, same CI YAML block in audit.md) — two sources of truth for the same facts. An upstream apm flag/behavior change applied to the research doc (the stated source of truth) can be missed here, leaving the actionable skill guidance silently stale while looking equally authoritative. Consider having these reference files point at the research docs rather than duplicating their content.
Owner

This is/should be done through the sources.md. Not sure this finding is correct

This is/should be done through the sources.md. Not sure this finding is correct
Defame1297 marked this conversation as resolved
@@ -0,0 +11,4 @@
$EDITOR apm.yml # 2. describe each package
apm marketplace check # 3. validate refs resolve
apm pack # 4. build marketplace artifacts
git add apm.yml .claude-plugin/marketplace.json
Author
Collaborator

Documents a raw git add/git commit/git tag/git push --tags chain as the literal release step. AGENTS.md's 'Prefer plugin skills over raw shell' section states commits/remotes are owned by git:git-commits/git:git-remotes and to fall back to raw shell 'only when no skill covers it' — an agent following this reference verbatim shells out directly in a repo that already has dedicated skills for exactly this operation.

Documents a raw `git add`/`git commit`/`git tag`/`git push --tags` chain as the literal release step. AGENTS.md's 'Prefer plugin skills over raw shell' section states commits/remotes are owned by `git:git-commits`/`git:git-remotes` and to fall back to raw shell 'only when no skill covers it' — an agent following this reference verbatim shells out directly in a repo that already has dedicated skills for exactly this operation.
Defame1297 marked this conversation as resolved
Defame1297 requested changes 2026-08-10 19:03:28 +00:00
Dismissed
@@ -0,0 +15,4 @@
## Pack
```bash
apm pack --dry-run # resolve and print; do not write
Owner

Should this not be part of the audit before we compile? or do we compile first and then audit?

Should this not be part of the audit before we compile? or do we compile first and then audit?
Defame1297 marked this conversation as resolved
Defame1297 added 1 commit 2026-08-10 19:29:59 +00:00
Adds lint@holocron to enabledPlugins so Vale-based prose linting
skills are available in this repo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186ERbyACLRuRxPRnqwpa4m
Defame1297 added 1 commit 2026-08-10 21:25:31 +00:00
ADR-0015's Decision bullet stated ADR-0001 was superseded as present
fact while Consequences framed it as conditional on issue #90 —
reworded Decision to match, and added a Supersedes header (repo
convention per ADR-0007/ADR-0010) so the pending change is visible
from the title. Also fixed a forward-note that misattributed the
pre-existing .agent.md convention (ADR-0005/0010) to the APM move,
and reworded the rejected-plugins/apm/ rationale to acknowledge the
shipped skills are actually generic rather than repo-specific.

CONTEXT.md's Plugin/Plugin-marketplace glossary entries got a
forward-pointer to ADR-0015 so a session-start read surfaces the
pending manifest-authoring change.

apm-orchestrate.md/.agent.md: removed a Hard Rule requiring ${VAR}
secret indirection that can never fire (the orchestrator has no
Edit/Write tool and never touches apm.yml — apm-workflow's SKILL.md
already owns this rule where content is actually written); removed
compile-manifest-check, an operation with no backing apm CLI command
anywhere in the research docs; added explicit CLI mappings for
add-package/add-marketplace so an executing agent can't invert them.

marketplace.md's release steps shelled out to raw git add/commit/
tag/push — replaced with a pointer to the git-commits/git-remotes
skills per AGENTS.md's "prefer plugin skills over raw shell" rule.

compile.md now states audit runs after compile/pack (audit scans
deployed output, not the source apm.yml) — answers a reviewer
question that had no documented answer.

Refs: #91

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186ERbyACLRuRxPRnqwpa4m
Author
Collaborator

All findings addressed in e16c3dc (pushed). Threaded replies 405'd on this Gitea instance's API, so consolidating responses here instead of inline.

Fixed:

  • ADR-0015 Decision/Consequences contradiction — reworded the Decision bullet from "directly supersedes" to "will supersede... pending issue #90" to match Consequences' conditional framing.
  • CONTEXT.md/ADR-0001 forward-pointer — added a conditional "Will supersede: ADR-0001 (pending #90)" header to ADR-0015 (matches the ADR-0007/ADR-0010 header convention: the new ADR gets the header, the old one is never edited in place), plus one-sentence forward-pointers on CONTEXT.md's Plugin/Plugin-marketplace glossary entries.
  • Rejected plugins/apm/ rationale mismatch — reworded to acknowledge the shipped skills are generic/repo-agnostic (agreeing with your comment), while keeping the kyberforge placement justified as a single-consumer tradeoff (same pattern as ADR-0011's gitea-workflow naming call).
  • .agent.md misattribution in ADR-0010 forward-note — reworded so only the .apm/agents/ directory move is flagged as an APM-move consequence; .agent.md is called out as the pre-existing ADR-0005/ADR-0010 convention, unaffected.
  • Dead Hard Rule in apm-orchestrate — removed the ${VAR} secrets bullet from both apm-orchestrate.md/.agent.md. It never fires (orchestrator has no Edit/Write, never touches apm.yml); it's already correctly owned by apm-workflow/SKILL.md's Gotchas.
  • compile-manifest-check has no backing CLI command — removed from the operation enum. Grepped the full microsoft-apm research doc set to confirm no apm command backs it.
  • add-package/add-marketplace direction ambiguity — added explicit CLI mappings inline (add-package → apm marketplace package add, add-marketplace → apm marketplace add), cross-checked against cli-reference.md.
  • Raw git commands in marketplace.md — replaced with a pointer to the git-commits/git-remotes skills, per AGENTS.md's "prefer plugin skills over raw shell" rule.
  • Compile-vs-audit ordering question — confirmed against testing-and-validation.md: apm audit scans deployed/compiled output, apm compile/apm pack produces it, so compile/pack runs first. Added a one-line ordering note to compile.md.

Investigated and left as-is (false positives against repo precedent):

  • Research-doc/skill-reference duplication — this pattern (skill reference = extracted actionable subset, research doc = deep source, sources.md = provenance link) is used identically by git-history, git-commits, gitea-issues, and vale-config across the repo. Not specific to this PR.
  • apm-orchestrate.md vs .agent.md Output section "drift" — checked against gitea-orchestrate and git-orchestrate pairs: both have the identical shape (.md = full JSON schema with error-code enum, .agent.md = prose summary without it). Established convention, not drift.

bash tests/run-tests.sh: 12 passed, 0 failed. Ready for re-review.

All findings addressed in `e16c3dc` (pushed). Threaded replies 405'd on this Gitea instance's API, so consolidating responses here instead of inline. **Fixed:** - [ADR-0015 Decision/Consequences contradiction](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1406) — reworded the Decision bullet from "directly supersedes" to "will supersede... pending issue #90" to match Consequences' conditional framing. - [CONTEXT.md/ADR-0001 forward-pointer](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1408) — added a conditional "Will supersede: ADR-0001 (pending #90)" header to ADR-0015 (matches the ADR-0007/ADR-0010 header convention: the *new* ADR gets the header, the *old* one is never edited in place), plus one-sentence forward-pointers on CONTEXT.md's Plugin/Plugin-marketplace glossary entries. - [Rejected `plugins/apm/` rationale mismatch](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1410) — reworded to acknowledge the shipped skills are generic/repo-agnostic (agreeing with your comment), while keeping the kyberforge placement justified as a single-consumer tradeoff (same pattern as ADR-0011's gitea-workflow naming call). - [`.agent.md` misattribution in ADR-0010 forward-note](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1411) — reworded so only the `.apm/agents/` directory move is flagged as an APM-move consequence; `.agent.md` is called out as the pre-existing ADR-0005/ADR-0010 convention, unaffected. - [Dead Hard Rule in apm-orchestrate](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1413) — removed the `${VAR}` secrets bullet from both `apm-orchestrate.md`/`.agent.md`. It never fires (orchestrator has no Edit/Write, never touches `apm.yml`); it's already correctly owned by `apm-workflow/SKILL.md`'s Gotchas. - [`compile-manifest-check` has no backing CLI command](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1414) — removed from the operation enum. Grepped the full microsoft-apm research doc set to confirm no `apm` command backs it. - [`add-package`/`add-marketplace` direction ambiguity](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1415) — added explicit CLI mappings inline (`add-package → apm marketplace package add`, `add-marketplace → apm marketplace add`), cross-checked against cli-reference.md. - [Raw git commands in marketplace.md](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1417) — replaced with a pointer to the `git-commits`/`git-remotes` skills, per AGENTS.md's "prefer plugin skills over raw shell" rule. - [Compile-vs-audit ordering question](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1425) — confirmed against testing-and-validation.md: `apm audit` scans deployed/compiled output, `apm compile`/`apm pack` produces it, so compile/pack runs first. Added a one-line ordering note to compile.md. **Investigated and left as-is (false positives against repo precedent):** - [Research-doc/skill-reference duplication](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1418) — this pattern (skill reference = extracted actionable subset, research doc = deep source, `sources.md` = provenance link) is used identically by git-history, git-commits, gitea-issues, and vale-config across the repo. Not specific to this PR. - [apm-orchestrate.md vs .agent.md Output section "drift"](https://git.dev.rkdr.net/Defame1297/holocron/pulls/91#issuecomment-1416) — checked against gitea-orchestrate and git-orchestrate pairs: both have the identical shape (`.md` = full JSON schema with error-code enum, `.agent.md` = prose summary without it). Established convention, not drift. `bash tests/run-tests.sh`: 12 passed, 0 failed. Ready for re-review.
Claude reviewed 2026-08-11 05:36:35 +00:00
Claude left a comment
Author
Collaborator

Full re-review of the fix commit (e16c3dc) against PR review conventions. 6 findings — mostly places where this same fix commit's own edits now contradict its own claims or leave dangling references. See inline comments.

Full re-review of the fix commit (e16c3dc) against PR review conventions. 6 findings — mostly places where this same fix commit's own edits now contradict its own claims or leave dangling references. See inline comments.
@@ -0,0 +44,4 @@
- Actually translating the existing plugins into `apm.yml` + `.apm/` and running the real
conversion is deferred to issue #90
(https://git.dev.rkdr.net/Defame1297/holocron/issues/90).
- `CONTEXT.md`'s "Plugin"/"Skill"/"Plugin marketplace" glossary entries remain accurate as
Author
Collaborator

ADR-0015 states "CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary entries remain accurate as written until issue #90 actually executes — this ADR does not update them," but this same PR's fix commit (e16c3dc) edited CONTEXT.md's Plugin and Plugin marketplace entries to add an ADR-0015 forward-pointer sentence.

Failure scenario: A reader trusts the ADR's own claim about its change boundary and skips re-checking CONTEXT.md, or a future auditor treats the ADR as the authoritative record of what this PR touched and gets it wrong — the document contradicts the diff it ships alongside.

ADR-0015 states "CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary entries remain accurate as written until issue #90 actually executes — this ADR does not update them," but this same PR's fix commit (e16c3dc) edited CONTEXT.md's Plugin and Plugin marketplace entries to add an ADR-0015 forward-pointer sentence. **Failure scenario:** A reader trusts the ADR's own claim about its change boundary and skips re-checking CONTEXT.md, or a future auditor treats the ADR as the authoritative record of what this PR touched and gets it wrong — the document contradicts the diff it ships alongside.
Defame1297 marked this conversation as resolved
@@ -0,0 +59,4 @@
## Output
Returns structured JSON with operation status, result (output — or a list of per-package results when fanned out — plus resolved package-root/registry context), and optional error details with recovery suggestions.
Author
Collaborator

The Output contract here is collapsed to one prose sentence and omits the explicit error-code enum (not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed) that the sibling apm-orchestrate.md specifies as JSON schema, so the two paired provider files disagree on the actual output contract.

Failure scenario: A Copilot CLI caller consuming this file has no enumerated error codes to branch on programmatically, while a Claude Code caller relies on the exact enum from apm-orchestrate.md — the two provider paths silently diverge on what error.code can contain.

The Output contract here is collapsed to one prose sentence and omits the explicit error-code enum (`not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed`) that the sibling `apm-orchestrate.md` specifies as JSON schema, so the two paired provider files disagree on the actual output contract. **Failure scenario:** A Copilot CLI caller consuming this file has no enumerated error codes to branch on programmatically, while a Claude Code caller relies on the exact enum from `apm-orchestrate.md` — the two provider paths silently diverge on what `error.code` can contain.
Defame1297 marked this conversation as resolved
@@ -0,0 +49,4 @@
## Process
1. Validate the request structure and check if `operation` is known
2. Check the request against the Hard rules above (publish confirmation, secret indirection, marketplace-add direction, `type:` ordering, audit-vs-audit-ci, registries precondition) — refuse outright on violation, independent of `confirm`
Author
Collaborator

Process step 2 still tells the orchestrator to check the Hard rules for "secret indirection," but that Hard Rule bullet was deleted from the Hard rules section in this same PR's fix commit (e16c3dc), leaving a dangling reference to a rule that no longer exists.

Failure scenario: An executing agent reads Process step 2, tries to locate and enforce the named "secret indirection" Hard Rule, and finds nothing in the Hard rules list — it either hallucinates a check to satisfy the reference or silently skips it while the text implies the gate still exists.

Identical issue at plugins/kyberforge/agents/apm-orchestrate.agent.md:52.

Process step 2 still tells the orchestrator to check the Hard rules for "secret indirection," but that Hard Rule bullet was deleted from the Hard rules section in this same PR's fix commit (e16c3dc), leaving a dangling reference to a rule that no longer exists. **Failure scenario:** An executing agent reads Process step 2, tries to locate and enforce the named "secret indirection" Hard Rule, and finds nothing in the Hard rules list — it either hallucinates a check to satisfy the reference or silently skips it while the text implies the gate still exists. Identical issue at `plugins/kyberforge/agents/apm-orchestrate.agent.md:52`.
Defame1297 marked this conversation as resolved
@@ -0,0 +31,4 @@
Escape hatches — combine as needed:
- Pin a version: append `@vX.Y.Z` to the piped script's arguments, e.g. `curl -sSL https://aka.ms/apm-unix | sh -s -- @v1.2.3`.
- Custom install directory: set `APM_INSTALL_DIR` before running, e.g. `APM_INSTALL_DIR=$HOME/.local/bin sh`.
Author
Collaborator

The "custom install directory" example APM_INSTALL_DIR=$HOME/.local/bin sh omits the curl -sSL https://aka.ms/apm-unix | ... pipe entirely, so copying it literally just runs a bare sh with no install script.

Failure scenario: A user or agent follows the escape hatch verbatim, runs APM_INSTALL_DIR=$HOME/.local/bin sh, gets an empty/hanging shell (or an immediate no-op non-interactively) instead of an apm install, with no error to indicate anything went wrong.

Identical issue at plugins/kyberforge/docs/research/docs/microsoft-apm/installation.md:20.

The "custom install directory" example `APM_INSTALL_DIR=$HOME/.local/bin sh` omits the `curl -sSL https://aka.ms/apm-unix | ...` pipe entirely, so copying it literally just runs a bare `sh` with no install script. **Failure scenario:** A user or agent follows the escape hatch verbatim, runs `APM_INSTALL_DIR=$HOME/.local/bin sh`, gets an empty/hanging shell (or an immediate no-op non-interactively) instead of an apm install, with no error to indicate anything went wrong. Identical issue at `plugins/kyberforge/docs/research/docs/microsoft-apm/installation.md:20`.
Defame1297 marked this conversation as resolved
@@ -0,0 +27,4 @@
- `apm experimental enable registries` must run before any `registry.*` config takes effect. Declaring a `registries:` block or running `apm config set registry.*` without it silently does nothing — no error, no warning.
- Plain `apm audit` and `apm audit --ci` check different things: plain `apm audit` scans deployed files for hidden Unicode only; `--ci` additionally runs lockfile-consistency checks, install-replay drift detection, and org policy checks. A clean plain `apm audit` is not a CI-equivalent pass.
## Step 1 — Dispatch
Author
Collaborator

Neither apm-workflow's dispatch table nor apm-orchestrate's operation list ever routes to plain apm install [PACKAGE_REF] — the core command that actually resolves/downloads a dependency declared in apm.yml — and apm-install (the skill whose name most resembles it) is explicitly scoped only to installing the apm binary/runtime, not running apm install.

Failure scenario: A caller adds a dependency under dependencies.apm in apm.yml per configure.md's guidance, then has no documented next step to actually fetch it (apm install) — an agent following only these two skills scaffolds a manifest that's never installed.

Neither apm-workflow's dispatch table nor apm-orchestrate's operation list ever routes to plain `apm install [PACKAGE_REF]` — the core command that actually resolves/downloads a dependency declared in apm.yml — and apm-install (the skill whose name most resembles it) is explicitly scoped only to installing the apm binary/runtime, not running `apm install`. **Failure scenario:** A caller adds a dependency under `dependencies.apm` in apm.yml per configure.md's guidance, then has no documented next step to actually fetch it (`apm install`) — an agent following only these two skills scaffolds a manifest that's never installed.
Defame1297 marked this conversation as resolved
@@ -0,0 +33,4 @@
repository: https://github.com/org/my-pkg
keywords: [ai, review, python]
type: skill # instructions | skill | hybrid | prompts — constrains .apm/ contents
Author
Collaborator

This apm.yml schema block omits the "legacy singular target: CSV form is still accepted" caveat that the sibling research doc (docs/research/docs/microsoft-apm/configuration.md:32) documents for the same targets: field.

Failure scenario: An agent following only this file — the one its own SKILL.md dispatch table points to — encounters an existing apm.yml using target: copilot,claude and flags or "corrects" it as invalid, when apm actually still accepts that legacy form.

This apm.yml schema block omits the "legacy singular `target:` CSV form is still accepted" caveat that the sibling research doc (`docs/research/docs/microsoft-apm/configuration.md:32`) documents for the same `targets:` field. **Failure scenario:** An agent following only this file — the one its own SKILL.md dispatch table points to — encounters an existing apm.yml using `target: copilot,claude` and flags or "corrects" it as invalid, when apm actually still accepts that legacy form.
Defame1297 marked this conversation as resolved
Claude reviewed 2026-08-11 05:36:40 +00:00
Claude left a comment
Author
Collaborator

Full re-review of the fix commit (e16c3dc) against PR review conventions. 6 findings — mostly places where this same fix commit's own edits now contradict its own claims or leave dangling references. See inline comments.

Full re-review of the fix commit (e16c3dc) against PR review conventions. 6 findings — mostly places where this same fix commit's own edits now contradict its own claims or leave dangling references. See inline comments.
@@ -0,0 +44,4 @@
- Actually translating the existing plugins into `apm.yml` + `.apm/` and running the real
conversion is deferred to issue #90
(https://git.dev.rkdr.net/Defame1297/holocron/issues/90).
- `CONTEXT.md`'s "Plugin"/"Skill"/"Plugin marketplace" glossary entries remain accurate as
Author
Collaborator

ADR-0015 states "CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary entries remain accurate as written until issue #90 actually executes — this ADR does not update them," but this same PR's fix commit (e16c3dc) edited CONTEXT.md's Plugin and Plugin marketplace entries to add an ADR-0015 forward-pointer sentence.

Failure scenario: A reader trusts the ADR's own claim about its change boundary and skips re-checking CONTEXT.md, or a future auditor treats the ADR as the authoritative record of what this PR touched and gets it wrong — the document contradicts the diff it ships alongside.

ADR-0015 states "CONTEXT.md's Plugin/Skill/Plugin-marketplace glossary entries remain accurate as written until issue #90 actually executes — this ADR does not update them," but this same PR's fix commit (e16c3dc) edited CONTEXT.md's Plugin and Plugin marketplace entries to add an ADR-0015 forward-pointer sentence. **Failure scenario:** A reader trusts the ADR's own claim about its change boundary and skips re-checking CONTEXT.md, or a future auditor treats the ADR as the authoritative record of what this PR touched and gets it wrong — the document contradicts the diff it ships alongside.
Defame1297 marked this conversation as resolved
@@ -0,0 +59,4 @@
## Output
Returns structured JSON with operation status, result (output — or a list of per-package results when fanned out — plus resolved package-root/registry context), and optional error details with recovery suggestions.
Author
Collaborator

The Output contract here is collapsed to one prose sentence and omits the explicit error-code enum (not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed) that the sibling apm-orchestrate.md specifies as JSON schema, so the two paired provider files disagree on the actual output contract.

Failure scenario: A Copilot CLI caller consuming this file has no enumerated error codes to branch on programmatically, while a Claude Code caller relies on the exact enum from apm-orchestrate.md — the two provider paths silently diverge on what error.code can contain.

The Output contract here is collapsed to one prose sentence and omits the explicit error-code enum (`not_confirmed | apm_unavailable | manifest_invalid | dependency_unresolved | publish_failed`) that the sibling `apm-orchestrate.md` specifies as JSON schema, so the two paired provider files disagree on the actual output contract. **Failure scenario:** A Copilot CLI caller consuming this file has no enumerated error codes to branch on programmatically, while a Claude Code caller relies on the exact enum from `apm-orchestrate.md` — the two provider paths silently diverge on what `error.code` can contain.
Defame1297 marked this conversation as resolved
@@ -0,0 +49,4 @@
## Process
1. Validate the request structure and check if `operation` is known
2. Check the request against the Hard rules above (publish confirmation, secret indirection, marketplace-add direction, `type:` ordering, audit-vs-audit-ci, registries precondition) — refuse outright on violation, independent of `confirm`
Author
Collaborator

Process step 2 still tells the orchestrator to check the Hard rules for "secret indirection," but that Hard Rule bullet was deleted from the Hard rules section in this same PR's fix commit (e16c3dc), leaving a dangling reference to a rule that no longer exists.

Failure scenario: An executing agent reads Process step 2, tries to locate and enforce the named "secret indirection" Hard Rule, and finds nothing in the Hard rules list — it either hallucinates a check to satisfy the reference or silently skips it while the text implies the gate still exists.

Identical issue at plugins/kyberforge/agents/apm-orchestrate.agent.md:52.

Process step 2 still tells the orchestrator to check the Hard rules for "secret indirection," but that Hard Rule bullet was deleted from the Hard rules section in this same PR's fix commit (e16c3dc), leaving a dangling reference to a rule that no longer exists. **Failure scenario:** An executing agent reads Process step 2, tries to locate and enforce the named "secret indirection" Hard Rule, and finds nothing in the Hard rules list — it either hallucinates a check to satisfy the reference or silently skips it while the text implies the gate still exists. Identical issue at `plugins/kyberforge/agents/apm-orchestrate.agent.md:52`.
Defame1297 marked this conversation as resolved
@@ -0,0 +31,4 @@
Escape hatches — combine as needed:
- Pin a version: append `@vX.Y.Z` to the piped script's arguments, e.g. `curl -sSL https://aka.ms/apm-unix | sh -s -- @v1.2.3`.
- Custom install directory: set `APM_INSTALL_DIR` before running, e.g. `APM_INSTALL_DIR=$HOME/.local/bin sh`.
Author
Collaborator

The "custom install directory" example APM_INSTALL_DIR=$HOME/.local/bin sh omits the curl -sSL https://aka.ms/apm-unix | ... pipe entirely, so copying it literally just runs a bare sh with no install script.

Failure scenario: A user or agent follows the escape hatch verbatim, runs APM_INSTALL_DIR=$HOME/.local/bin sh, gets an empty/hanging shell (or an immediate no-op non-interactively) instead of an apm install, with no error to indicate anything went wrong.

Identical issue at plugins/kyberforge/docs/research/docs/microsoft-apm/installation.md:20.

The "custom install directory" example `APM_INSTALL_DIR=$HOME/.local/bin sh` omits the `curl -sSL https://aka.ms/apm-unix | ...` pipe entirely, so copying it literally just runs a bare `sh` with no install script. **Failure scenario:** A user or agent follows the escape hatch verbatim, runs `APM_INSTALL_DIR=$HOME/.local/bin sh`, gets an empty/hanging shell (or an immediate no-op non-interactively) instead of an apm install, with no error to indicate anything went wrong. Identical issue at `plugins/kyberforge/docs/research/docs/microsoft-apm/installation.md:20`.
Defame1297 marked this conversation as resolved
@@ -0,0 +27,4 @@
- `apm experimental enable registries` must run before any `registry.*` config takes effect. Declaring a `registries:` block or running `apm config set registry.*` without it silently does nothing — no error, no warning.
- Plain `apm audit` and `apm audit --ci` check different things: plain `apm audit` scans deployed files for hidden Unicode only; `--ci` additionally runs lockfile-consistency checks, install-replay drift detection, and org policy checks. A clean plain `apm audit` is not a CI-equivalent pass.
## Step 1 — Dispatch
Author
Collaborator

Neither apm-workflow's dispatch table nor apm-orchestrate's operation list ever routes to plain apm install [PACKAGE_REF] — the core command that actually resolves/downloads a dependency declared in apm.yml — and apm-install (the skill whose name most resembles it) is explicitly scoped only to installing the apm binary/runtime, not running apm install.

Failure scenario: A caller adds a dependency under dependencies.apm in apm.yml per configure.md's guidance, then has no documented next step to actually fetch it (apm install) — an agent following only these two skills scaffolds a manifest that's never installed.

Neither apm-workflow's dispatch table nor apm-orchestrate's operation list ever routes to plain `apm install [PACKAGE_REF]` — the core command that actually resolves/downloads a dependency declared in apm.yml — and apm-install (the skill whose name most resembles it) is explicitly scoped only to installing the apm binary/runtime, not running `apm install`. **Failure scenario:** A caller adds a dependency under `dependencies.apm` in apm.yml per configure.md's guidance, then has no documented next step to actually fetch it (`apm install`) — an agent following only these two skills scaffolds a manifest that's never installed.
Defame1297 marked this conversation as resolved
@@ -0,0 +33,4 @@
repository: https://github.com/org/my-pkg
keywords: [ai, review, python]
type: skill # instructions | skill | hybrid | prompts — constrains .apm/ contents
Author
Collaborator

This apm.yml schema block omits the "legacy singular target: CSV form is still accepted" caveat that the sibling research doc (docs/research/docs/microsoft-apm/configuration.md:32) documents for the same targets: field.

Failure scenario: An agent following only this file — the one its own SKILL.md dispatch table points to — encounters an existing apm.yml using target: copilot,claude and flags or "corrects" it as invalid, when apm actually still accepts that legacy form.

This apm.yml schema block omits the "legacy singular `target:` CSV form is still accepted" caveat that the sibling research doc (`docs/research/docs/microsoft-apm/configuration.md:32`) documents for the same `targets:` field. **Failure scenario:** An agent following only this file — the one its own SKILL.md dispatch table points to — encounters an existing apm.yml using `target: copilot,claude` and flags or "corrects" it as invalid, when apm actually still accepts that legacy form.
Defame1297 marked this conversation as resolved
Defame1297 added 1 commit 2026-08-11 11:12:14 +00:00
Re-review (comment 24) of fix commit e16c3dc found six new issues, mostly
introduced by that fix commit itself: a dangling reference to a Hard Rule
bullet the same commit deleted (apm-orchestrate.md/.agent.md Process step
2 still named "secret indirection"), and an ADR-0015 Decision bullet that
claimed "this ADR does not update CONTEXT.md" while the same commit had
just added a forward-pointer sentence to CONTEXT.md's Plugin/Plugin
marketplace entries. Both reworded to match what actually happened.

apm-install's APM_INSTALL_DIR escape-hatch example dropped the curl pipe
entirely (`APM_INSTALL_DIR=... sh` with nothing piped into it) — fixed in
both apm-install/SKILL.md and the installation.md research doc, verified
against the upstream Microsoft APM docs via Context7.

Neither apm-workflow nor apm-orchestrate routed to plain `apm install
[PACKAGE_REF]`, the CLI command that actually resolves/fetches
dependencies declared in apm.yml — apm-install only bootstraps the apm
binary/runtime, not per-package deps. Added a 5th "install" dispatch
action to apm-workflow (new references/install.md, SKILL.md table row,
README usage/files sync, sources.md provenance entry) and a matching
"install" operation group on apm-orchestrate so it can route there.

configure.md's apm.yml schema block was also missing the "legacy singular
`target:` CSV form is still accepted" caveat its sibling research doc
documents for the same field — added for consistency.

The sixth finding (paired .md/.agent.md Output-contract disagreement) was
checked against git-orchestrate and gitea-orchestrate's existing pairs and
found to match established repo convention (JSON schema in .md, prose
summary without the enum in .agent.md) — left unchanged as a false
positive rather than "fixed."

kyberforge bumped 1.3.0 -> 1.3.1 via agent-author's normal improve flow.

Refs: #91

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186ERbyACLRuRxPRnqwpa4m
Author
Collaborator

Addressed all 6 findings from the latest review (review #24, re-review of e16c3dc) in 394052f:

  1. Dangling "secret indirection" reference (apm-orchestrate.md/.agent.md Process step 2) — removed; it pointed at a Hard Rule bullet the same fix commit had already deleted.
  2. ADR-0015 self-contradiction — reworded the Decision bullet; it claimed "this ADR does not update CONTEXT.md" while the same commit had just added a forward-pointer sentence to CONTEXT.md's Plugin/Plugin marketplace entries.
  3. Broken APM_INSTALL_DIR escape-hatch example — fixed in both apm-install/SKILL.md and the installation.md research doc. Verified the correct form against the upstream Microsoft APM docs via Context7: the env var goes after the pipe (curl -sSL https://aka.ms/apm-unix | APM_INSTALL_DIR=$HOME/.local/bin sh), not as a standalone prefix with no script piped in.
  4. No route for apm install [PACKAGE_REF] — added a 5th "install" dispatch action to apm-workflow (new references/install.md, dispatch table row, README sync, provenance entry in sources.md) and a matching install operation group on apm-orchestrate to route to it.
  5. Paired .md/.agent.md Output-contract "disagreement" — checked this against git-orchestrate and gitea-orchestrate's existing pairs and found it matches established repo convention exactly (full JSON schema + error enum in .md, prose summary without the enum in .agent.md). Treating as a false positive, left unchanged.
  6. Missing legacy target: CSV caveat in apm-workflow/references/configure.md — added, matching the sibling research doc.

Also fixed a doc-drift item the closing skill-audit surfaced (not part of the original 6): apm-workflow/README.md's Usage list and Files table didn't mention the new install action — synced.

All closing audits (agent-audit, skill-audit, Vale) came back clean, full local test suite (12/12 suites) and manifest check pass, no version-bump collisions (kyberforge 1.3.0 → 1.3.1, applied once).

Addressed all 6 findings from the latest review (review #24, re-review of e16c3dc) in 394052f: 1. **Dangling "secret indirection" reference** (`apm-orchestrate.md`/`.agent.md` Process step 2) — removed; it pointed at a Hard Rule bullet the same fix commit had already deleted. 2. **ADR-0015 self-contradiction** — reworded the Decision bullet; it claimed "this ADR does not update CONTEXT.md" while the same commit had just added a forward-pointer sentence to CONTEXT.md's Plugin/Plugin marketplace entries. 3. **Broken `APM_INSTALL_DIR` escape-hatch example** — fixed in both `apm-install/SKILL.md` and the `installation.md` research doc. Verified the correct form against the upstream Microsoft APM docs via Context7: the env var goes after the pipe (`curl -sSL https://aka.ms/apm-unix | APM_INSTALL_DIR=$HOME/.local/bin sh`), not as a standalone prefix with no script piped in. 4. **No route for `apm install [PACKAGE_REF]`** — added a 5th "install" dispatch action to `apm-workflow` (new `references/install.md`, dispatch table row, README sync, provenance entry in `sources.md`) and a matching `install` operation group on `apm-orchestrate` to route to it. 5. **Paired `.md`/`.agent.md` Output-contract "disagreement"** — checked this against `git-orchestrate` and `gitea-orchestrate`'s existing pairs and found it matches established repo convention exactly (full JSON schema + error enum in `.md`, prose summary without the enum in `.agent.md`). Treating as a false positive, left unchanged. 6. **Missing legacy `target:` CSV caveat** in `apm-workflow/references/configure.md` — added, matching the sibling research doc. Also fixed a doc-drift item the closing skill-audit surfaced (not part of the original 6): `apm-workflow/README.md`'s Usage list and Files table didn't mention the new `install` action — synced. All closing audits (`agent-audit`, `skill-audit`, Vale) came back clean, full local test suite (12/12 suites) and manifest check pass, no version-bump collisions (`kyberforge` 1.3.0 → 1.3.1, applied once).
Defame1297 added 1 commit 2026-08-11 12:15:40 +00:00
A grill-me session determined plugin-author/marketplace-author are fully
superseded by the landed apm-install/apm-workflow/apm-orchestrate artifacts
and will be deleted (not adapted) under issue #90, narrowing issue #89 to
skill-author/agent-author only; forge stays untouched. ADR-0015 is amended
to record this correction plus a three-way content-migration audit.

Claude Code platform-constraint facts that lived only in
plugin-author/marketplace-author (reserved name prefixes, the ADR-0010
agents/ stray-.md validator gotcha, claude plugin validate as a terminal
check, and a removal/re-pack confirm-before-proceeding note) remain true
post-conversion and are migrated into apm-workflow's reference docs via
kyberforge:skill-author, which also updated the skill's README and
sources.md provenance records. Dual-manifest-specific conventions (ADR-0006
parity, CC/Copilot field-placement split) do not carry forward since they
no longer apply.

ADR: 0015
Author
Collaborator

Summary of 92e7ff2 — a grill-me session resolved how plugin-author/marketplace-author relate to the newly-landed apm-install/apm-workflow/apm-orchestrate artifacts (issue #88).

Decision: plugin-author/marketplace-author are fully superseded (not adapted) — apm compile/apm pack will generate .claude-plugin/marketplace.json and per-provider plugin.json directly from apm.yml + .apm/, so both skills get deleted as part of issue #90's execution, once compiled-output parity is verified. This narrows issue #89's scope to skill-author/agent-author only (forge stays untouched throughout).

Before that deletion happens, a content audit sorted what plugin-author/marketplace-author currently document into three buckets, now recorded in ADR-0015's new "Content migration out of plugin-author/marketplace-author" section:

  • Claude Code platform constraints that stay true post-conversion (reserved plugin-name prefixes, the ADR-0010 agents/-directory stray-.md validator gotcha, claude plugin validate as a required terminal check, a removal/re-pack confirm-before-proceeding note) — already migrated into apm-workflow's reference docs (marketplace.md, compile.md, audit.md) in this commit, verified via kyberforge:skill-audit (PASS).
  • Dual-manifest-only conventions (ADR-0006 version-parity/patch-bump rule, the CC-vs-Copilot field-placement split, dual-file mirroring) — obsolete under apm.yml's single-manifest model, deliberately dropped.
  • The catalog minor/patch version-bump convention — not an APM mechanic, flagged as an open policy decision for #90 to re-apply to apm.yml's marketplace.packages[].version.

Tracker updated to match: #89 retitled/narrowed to skill-author/agent-author, #90 commented with the added deletion scope and a pointer to what still needs preserving.

Files changed: docs/adr/0015-apm-replaces-plugin-marketplace-authoring.md, plugins/kyberforge/skills/apm-workflow/{README.md,references/audit.md,references/compile.md,references/marketplace.md,references/sources.md}.

**Summary of `92e7ff2`** — a grill-me session resolved how `plugin-author`/`marketplace-author` relate to the newly-landed `apm-install`/`apm-workflow`/`apm-orchestrate` artifacts (issue #88). **Decision:** `plugin-author`/`marketplace-author` are fully superseded (not adapted) — `apm compile`/`apm pack` will generate `.claude-plugin/marketplace.json` and per-provider `plugin.json` directly from `apm.yml` + `.apm/`, so both skills get deleted as part of issue #90's execution, once compiled-output parity is verified. This narrows issue #89's scope to `skill-author`/`agent-author` only (`forge` stays untouched throughout). Before that deletion happens, a content audit sorted what `plugin-author`/`marketplace-author` currently document into three buckets, now recorded in ADR-0015's new "Content migration out of `plugin-author`/`marketplace-author`" section: - **Claude Code platform constraints that stay true post-conversion** (reserved plugin-name prefixes, the ADR-0010 `agents/`-directory stray-`.md` validator gotcha, `claude plugin validate` as a required terminal check, a removal/re-pack confirm-before-proceeding note) — already migrated into `apm-workflow`'s reference docs (`marketplace.md`, `compile.md`, `audit.md`) in this commit, verified via `kyberforge:skill-audit` (PASS). - **Dual-manifest-only conventions** (ADR-0006 version-parity/patch-bump rule, the CC-vs-Copilot field-placement split, dual-file mirroring) — obsolete under `apm.yml`'s single-manifest model, deliberately dropped. - **The catalog minor/patch version-bump convention** — not an APM mechanic, flagged as an open policy decision for #90 to re-apply to `apm.yml`'s `marketplace.packages[].version`. Tracker updated to match: #89 retitled/narrowed to `skill-author`/`agent-author`, #90 commented with the added deletion scope and a pointer to what still needs preserving. Files changed: `docs/adr/0015-apm-replaces-plugin-marketplace-authoring.md`, `plugins/kyberforge/skills/apm-workflow/{README.md,references/audit.md,references/compile.md,references/marketplace.md,references/sources.md}`.
Defame1297 added 1 commit 2026-08-11 14:25:14 +00:00
Addresses 7 verified findings from the /code-review pass on PR #91's
APM-conversion changes:

- apm-workflow's description omitted install triggers, misrouting
  "install my apm dependencies" requests to apm-install instead
- `apm marketplace check` was listed under both the marketplace and
  audit dispatch rows, breaking the "one reference file per action"
  contract; kept under marketplace.md, its real usage-sequence home
- ADR-0015 claimed apm-workflow docs are generic/repo-agnostic while
  marketplace.md cited this repo's AGENTS.md and git-commits/
  git-remotes skills by name; stripped the holocron-specific
  citations (marketplace.md, compile.md) so the claim now holds
- plugin-author/marketplace-author are superseded per ADR-0015 with
  deletion deferred to #90; added deprecation notices pointing to
  the replacing apm-workflow dispatch actions
- apm-orchestrate/gitea-orchestrate/git-orchestrate all instruct
  dispatch "via Skill" without granting the Skill tool; added it to
  all three
- apm-orchestrate mandated strictly sequential fan-out across
  independent packages with no shared state; relaxed to permit
  parallel dispatch, matching this repo's own subagent-parallelization
  guidance

Refs: #91
Author
Collaborator

Review response

Ran a full /code-review pass on this PR (8 finder angles). 7 of 8 confirmed findings were fixed in d6fd9b6:

  1. apm-workflow description missing install trigger — added install-related trigger phrases so "install my apm dependencies" routes correctly instead of misfiring to apm-install.
  2. Duplicate apm marketplace check dispatch entry — removed from the audit row, kept solely under marketplace (its real usage-sequence home per references/marketplace.md).
  3. ADR-0015 self-contradiction (claimed apm-workflow docs are generic/repo-agnostic while marketplace.md cited this repo's AGENTS.md and git-commits/git-remotes skills by name) — resolved by making apm-workflow's docs actually generic (marketplace.md, compile.md) rather than editing the ADR's claim, to keep the standalone-plugin-extraction option genuinely open.
  4. plugin-author/marketplace-author deprecation gap — added deprecation notices to both SKILL.md files pointing to the replacing apm-workflow dispatch actions, since deletion is deferred to #90.
  5. Missing Skill tool grant — apm-orchestrate, gitea-orchestrate, and git-orchestrate all instruct dispatch "via Skill" without granting the tool; fixed in all three (the gitea/git instances pre-date this PR but were fixed alongside since it's the identical bug).
  6. Unnecessary strict sequential fan-out in apm-orchestrate — relaxed to permit parallel dispatch of independent packages with no shared state, matching this repo's own subagent-parallelization guidance.

Not fixed (by design): the near-verbatim duplication between apm-workflow/references/.md and docs/research/docs/microsoft-apm/.md is intentional — the skill docs independently restate the CLI reference rather than pointing at the research mirror.

All tests pass (tests/run-tests.sh, scripts/check-manifests.sh).

## Review response Ran a full `/code-review` pass on this PR (8 finder angles). 7 of 8 confirmed findings were fixed in d6fd9b6: 1. **apm-workflow description missing install trigger** — added install-related trigger phrases so "install my apm dependencies" routes correctly instead of misfiring to apm-install. 2. **Duplicate `apm marketplace check` dispatch entry** — removed from the `audit` row, kept solely under `marketplace` (its real usage-sequence home per references/marketplace.md). 3. **ADR-0015 self-contradiction** (claimed apm-workflow docs are generic/repo-agnostic while marketplace.md cited this repo's AGENTS.md and git-commits/git-remotes skills by name) — resolved by making apm-workflow's docs actually generic (marketplace.md, compile.md) rather than editing the ADR's claim, to keep the standalone-plugin-extraction option genuinely open. 4. **plugin-author/marketplace-author deprecation gap** — added deprecation notices to both SKILL.md files pointing to the replacing apm-workflow dispatch actions, since deletion is deferred to #90. 5. **Missing Skill tool grant** — apm-orchestrate, gitea-orchestrate, and git-orchestrate all instruct dispatch "via Skill" without granting the tool; fixed in all three (the gitea/git instances pre-date this PR but were fixed alongside since it's the identical bug). 6. **Unnecessary strict sequential fan-out** in apm-orchestrate — relaxed to permit parallel dispatch of independent packages with no shared state, matching this repo's own subagent-parallelization guidance. Not fixed (by design): the near-verbatim duplication between apm-workflow/references/*.md and docs/research/docs/microsoft-apm/*.md is intentional — the skill docs independently restate the CLI reference rather than pointing at the research mirror. All tests pass (`tests/run-tests.sh`, `scripts/check-manifests.sh`).
Defame1297 added 1 commit 2026-08-11 15:23:14 +00:00
Two review passes on PR #91 (correctness + simplification) found the
prior fixup commit (d6fd9b6) left the deprecation notice it added
half-applied, cited a nonexistent ADR, and introduced/compounded a
few duplicate restatements of the same facts across apm-workflow's
skill files and apm-orchestrate's Hard rules.

- plugin-author/SKILL.md cited ADR-0016 (doesn't exist) instead of
  ADR-0006 for the version-parity invariant.
- The deprecation banner on plugin-author/marketplace-author wasn't
  reflected in their routing `description:` frontmatter, forge's
  routing table, either kyberforge README skill table, or CONTEXT.md
  — now propagated consistently; routing behavior is unchanged since
  issue #90 (repo-wide apm conversion) hasn't landed yet.
- apm-orchestrate's `configure` operation only covered scaffolding a
  new package, not editing an existing apm.yml (e.g. removing a
  marketplace.packages[] entry, which has no dedicated `apm` CLI verb
  and is just a manifest edit). Added `edit-config`, intentionally
  ungated — a local file edit isn't the same class of irreversible
  action as `apm publish`, and normal review already gates the commit.
- Deduplicated facts restated 3-4x across SKILL.md/references/ADR
  boundaries (audit semantics, reserved name prefixes, marketplace-add
  direction, registries precondition), and trimmed configure.md's
  ~55-line apm.yml schema dump — copied near-verbatim from the
  research doc — down to a compact key list with a pointer, matching
  install.md's existing terse cross-referencing style.

Deliberately left as-is: apm-orchestrate's parallel/sequential
fan-out logic stays inline rather than extracted to a shared
reference, since neither git-orchestrate nor gitea-orchestrate need
it yet — premature extraction for a single caller.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186ERbyACLRuRxPRnqwpa4m
Author
Collaborator

Resolved the second review round in 591b9cc.

Fixed:

  • Wrong ADR citation in plugin-author/SKILL.md (ADR-0016 doesn't exist → ADR-0006).
  • The deprecation banner this PR added to plugin-author/marketplace-author wasn't reflected anywhere it's actually discovered — routing description: frontmatter, forge's routing table/Gotchas, both kyberforge README skill tables, CONTEXT.md's Skill composition entry. Now propagated consistently. Routing behavior itself is unchanged — issue #90 (repo-wide apm conversion) hasn't landed, so these skills still need to work normally for now.
  • apm-orchestrate's configure operation only covered scaffolding a new package, with no operation for editing an existing apm.yml (e.g. removing a marketplace.packages[] entry). I checked the actual apm CLI reference — there's no apm marketplace package remove verb, removal is just a manifest edit — so I put the design question to the user rather than guessing: added edit-config, intentionally ungated (no Hard Rule/confirm gate), since a local file edit isn't the same class of irreversible action as apm publish and normal PR review already gates the commit.
  • Deduplicated facts that were restated 3-4x across SKILL.md/references/ADR boundaries (audit semantics, reserved name prefixes, marketplace-add direction, registries precondition) and trimmed references/configure.md's ~55-line apm.yml schema dump — copied near-verbatim from the research doc — down to a compact key list with a pointer, matching references/install.md's existing terse cross-referencing style.

Deliberately left as-is: the simplification pass flagged apm-orchestrate's parallel/sequential fan-out logic as one-off prose not shared with git-orchestrate/gitea-orchestrate. Left it inline — neither of those orchestrators needs that logic today, so extracting a shared abstraction now would be premature for a single caller.

Full test suite (tests/run-tests.sh) and scripts/check-manifests.sh both pass on the new commit.

Resolved the second review round in `591b9cc`. **Fixed:** - Wrong ADR citation in `plugin-author/SKILL.md` (ADR-0016 doesn't exist → ADR-0006). - The deprecation banner this PR added to `plugin-author`/`marketplace-author` wasn't reflected anywhere it's actually discovered — routing `description:` frontmatter, forge's routing table/Gotchas, both kyberforge README skill tables, CONTEXT.md's Skill composition entry. Now propagated consistently. Routing behavior itself is unchanged — issue #90 (repo-wide apm conversion) hasn't landed, so these skills still need to work normally for now. - `apm-orchestrate`'s `configure` operation only covered scaffolding a new package, with no operation for editing an existing `apm.yml` (e.g. removing a `marketplace.packages[]` entry). I checked the actual apm CLI reference — there's no `apm marketplace package remove` verb, removal is just a manifest edit — so I put the design question to the user rather than guessing: added `edit-config`, intentionally **ungated** (no Hard Rule/confirm gate), since a local file edit isn't the same class of irreversible action as `apm publish` and normal PR review already gates the commit. - Deduplicated facts that were restated 3-4x across SKILL.md/references/ADR boundaries (audit semantics, reserved name prefixes, marketplace-add direction, registries precondition) and trimmed `references/configure.md`'s ~55-line `apm.yml` schema dump — copied near-verbatim from the research doc — down to a compact key list with a pointer, matching `references/install.md`'s existing terse cross-referencing style. **Deliberately left as-is:** the simplification pass flagged `apm-orchestrate`'s parallel/sequential fan-out logic as one-off prose not shared with `git-orchestrate`/`gitea-orchestrate`. Left it inline — neither of those orchestrators needs that logic today, so extracting a shared abstraction now would be premature for a single caller. Full test suite (`tests/run-tests.sh`) and `scripts/check-manifests.sh` both pass on the new commit.
Defame1297 approved these changes 2026-08-11 15:37:35 +00:00
Claude merged commit 7a5c50fecc into main 2026-08-11 16:05:56 +00:00
Claude deleted branch feat/88-marketplace-apm-conversion 2026-08-11 16:05:56 +00:00
Sign in to join this conversation.