718c79a deleted every per-plugin .claude-plugin/plugin.json, which
reclassified each package from a marketplace plugin to a plain apm
package. That silently broke MCP propagation: apm_cli/deps/plugin_parser.py
maps a plugin-root .mcp.json into .apm/.mcp.json, and that code path runs
only for marketplace plugins. With no manifest, apm never reads the file.
Reproduced on ref-pinned consumer clones: at the parent commit a consumer
receives the obsidian server, at HEAD it receives none, and on upgrade apm
prints "Removed stale MCP server 'obsidian' from .mcp.json". This repo
consumes its own plugins through apm (ADR-0018), so the tracked root
.mcp.json would have been rewritten to an empty server map on the next
lock re-resolve -- silent tool loss plus unexplained working-tree drift.
The server is removed entirely rather than relocated to .apm/. It was
already a standing question (SIMPLIFICATION-AUDIT finding 37, deferred on
2026-09-13 pending confirmation, now confirmed), and plugins/bin/apm.yml
declares dependencies.mcp: [] -- apm's supported mechanism was never used.
All seven .mcp.json files go; the root one is apm-generated output and is
now gitignored alongside the other install artifacts.
ADR-0011's deferred ".mcp.json wiring gap" is moot twice over -- the
install route it blocked no longer exists and neither does the file --
and ADR-0018 records why it lost its only worked example of MCP
propagation. apm.lock.yaml still carries the server; it clears on the
first apm update after this reaches the default branch.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YR2CjVumUbEGWcMikcoXBD
60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Editor
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
|
|
# Logs and temp
|
|
*.log
|
|
*.tmp
|
|
/tmp/
|
|
|
|
# Environment
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
# Node (if tooling is added later)
|
|
node_modules/
|
|
|
|
# Claude Code local settings (machine-specific)
|
|
.claude/settings.local.json
|
|
|
|
# APM dependencies
|
|
apm_modules/
|
|
|
|
# APM install output — deployed copies of released plugin content, regenerated
|
|
# by `apm install`. The authoring source is plugins/<name>/.apm/; committing a
|
|
# deployed copy would add a third mirror of the same skills to drift against.
|
|
.claude/skills/
|
|
.claude/agents/
|
|
|
|
# APM MCP deployment output — `apm install` writes the repo-root .mcp.json from
|
|
# the MCP servers its dependencies declare, and regenerates it on every install.
|
|
# It is apm's output, not repo content; nothing here is hand-authored.
|
|
/.mcp.json
|
|
|
|
# APM hook deployment output — `apm install` copies each package's referenced
|
|
# hook scripts here and tracks its own settings.json entries in the sidecar.
|
|
# Regenerated on every install; the authoring source is
|
|
# plugins/<name>/.apm/hooks/ (ADR-0019).
|
|
.claude/hooks/
|
|
.claude/apm-hooks.json
|
|
|
|
# `apm pack` bundle output. The pre-push gate runs pack with --dry-run, so this
|
|
# only appears after a bare `apm pack` during a release; it is not repo content.
|
|
build/
|
|
|
|
# `apm pack`'s manifest for the *root* package. Emitted beside the marketplace
|
|
# manifest by a bare `apm pack`, and never tracked on any branch — the repo's
|
|
# own paths hide it, since the apm-pack-check-clean pre-push hook, the only
|
|
# thing that runs pack here, passes --dry-run. Scoped
|
|
# to the file, not the directory: the sibling .claude-plugin/marketplace.json is
|
|
# compiled output that IS committed and must stay tracked.
|
|
/.claude-plugin/plugin.json
|