docs: source ADR-0029 claims and sync ADRs and hook docs with behaviour

- cite the VS Code prompt-file deprecation and the verbatim apm quote
- add ADR-0029 boundary-clause enforcement and Consequences
- mark superseded ADR-0019 passages; record neutral lock advice, source
  fork and reloadSkills, amend for the hook hardening
- move the ADR-0025 amendment out of the Decision list
- amend ADR-0022 for create keeping 0.1.0
- fix hooks.md merge and event claims, README guard caveat, gates.md Vale
  globs, and pin the research registry URL

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkT7RSDwDbmrM9T34b6sTi
This commit is contained in:
2026-09-29 08:00:39 +00:00
parent 4a4b598955
commit 641ebcac0e
12 changed files with 171 additions and 76 deletions

View File

@@ -67,9 +67,10 @@ consumers, but a deliberate choice, never a default. A rule for this repo alone
_Avoid_: rule (the Claude-side deployed form under `.claude/rules/`), guideline, standard
**Hook**:
A runtime callback a harness fires inside its own tool loop, authored as one JSON file per concern
under `plugins/<plugin>/.apm/hooks/` in apm's canonical shape — nested entries, PascalCase events,
`${PLUGIN_ROOT}` script paths — which apm renders per target. Reach is narrowed in the package's
A runtime callback a harness fires inside its own tool loop, authored as JSON under
`plugins/<plugin>/.apm/hooks/` — one file or several; kyberforge ships a single `hooks.json` — in
apm's canonical shape — nested entries, PascalCase events, `${PLUGIN_ROOT}` script paths — which
apm renders per target. Reach is narrowed in the package's
`apm.yml` `targets:`, never by filename. The last resort among apm primitives: procedure belongs in
a **Skill**, and a hook is only for "this must always happen at this event".
_Avoid_: trigger, callback script (the script is the hook's payload, not the hook)
@@ -225,7 +226,8 @@ _Avoid_: namespace, category
recheck belongs to `factory-audit`, not to `forge`, which routes only to the author
skills and never to an audit.
- "prompt" meant both apm's `.prompt.md` primitive and, loosely, any slash command or a skill — resolved:
a **Prompt** is the `.prompt.md` primitive under the house rule above. apm calls a prompt "a
callable program for an LLM", but on Claude it deploys as a model-invocable command with fewer
frontmatter keys than a skill, and Codex receives nothing. A fat prompt is a worse skill on every
harness, so the procedure goes in the skill and the prompt only steers it.
a **Prompt** is the `.prompt.md` primitive under the house rule above. apm frames a prompt as a
program ("a prompt is a program for an LLM", its "What is APM?" page), but on Claude it deploys
as a model-invocable command with fewer frontmatter keys than a skill, and Codex receives
nothing. A fat prompt is a worse skill on every harness, so the procedure goes in the skill and
the prompt only steers it.