Files
holocron/plugins/kyberforge/docs
Defame1297 cf625229f7 fix(scripts): detect the .apm/ content the mirror loses silently
apm's bundle exporter drops symlinks entirely, so a symlink under .apm/ never
reaches the mirror -- and no gate could see it, because every existing check
diffs the live mirror against a bundle-derived copy and both sides lack the
file. It is an absence with nothing left to mismatch against, the only class of
.apm/ content that vanishes without a trace. check_apm_symlinks reads the .apm/
source tree, where the loss is visible, and fails both modes. Reported rather
than resolved: dereferencing would make a real sync emit content the bundle does
not contain, which is the reimplementation ADR-0017 rejects.

--check --all could also pass having verified fewer plugins than the marketplace
lists: a plugin whose .apm/ had gone was SKIPped rather than counted, and the
earlier floor only caught zero. The count is now checked against the marketplace's
own local-package list. There is no exempt state -- ADR-0015 makes .apm/ the sole
authoring source for every local plugin, so a listed plugin without one is drift.

On the Copilot hooks gap, the decision is to document, not implement. Copilot
declares no hooks path and apm emits none, which looks like the mcpServers case
-- but that exception holds because .mcp.json is one host-agnostic format both
ecosystems read, so a pointer to it is true whatever it contains. Hooks have no
shared format: Claude expects nested matcher groups under PascalCase events,
Copilot requires version: 1, camelCase, and a bash/powershell split. apm merges
.apm/hooks/*.json into exactly one file, at Claude's convention path. A pointer
would assert a Claude-shaped file is Copilot-shaped -- an incomplete manifest
traded for a wrong one -- and it is not inert today either, since {"hooks": {}}
lacks Copilot's mandatory version key. A test pins the decision, so restoring the
pointer fails until someone confronts the schema mismatch.

Tests: 77 -> 92 assertions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7GvKuJfy2WrdBmUttV4DT
2026-08-14 14:20:47 +00:00
..

docs/

Plugin documentation. Not read automatically by Claude Code or GitHub Copilot CLI — reference specific files from skill bodies or agent prompts as needed.

Path Purpose
hooks.md Where this plugin's hooks are authored (.apm/hooks/), where they are generated to (hooks/hooks.json), and the Claude Code and Copilot CLI schemas

Everything else under this directory is research material.

research/

Upstream reference material gathered during skill authoring. Not shipped with the plugin — used at development time only.

Path Purpose
research/docs/agentskillsio/ agentskills.io spec, skill authoring, description optimization, eval design, scripts
research/docs/claude-code-plugins/ Claude Code plugin and marketplace manifests, plugin directory layout, agent definition format, claude plugin validate behaviour
research/docs/github-copilot-plugins/ Copilot CLI plugin manifest and marketplace format, agent definition format, Copilot extensions and SDK
research/docs/microsoft-apm/ apm CLI reference, apm.yml schema, primitive schemas (agent, prompt, instructions, hooks), monorepo repo shapes, marketplace/registries, packing and releasing
research/examples/skill-write/ Upstream skill examples reviewed when authoring skill-author and skill-audit

AGENTS.md research moved to plugins/core/docs/research/docs/agentsmd/ when the AGENTS.md skills landed in the core plugin (ADR-0012) — it is no longer part of kyberforge's provenance chain.