docs(catalog): count prompt-hook entries on the badge-less hooks axis

The counting rule said "hook COMMAND entries". It was calibrated against
plugins that predate prompt-hooks, so it was never a ruling on them. A prompt
entry fires on the same event and does the same job, so it counts.

Re-measured every pinned ref before rewriting the rule, since restating an old
measurement in new words is itself a claim: every plugin that badges hooks and
ships a hooks.json has entries equal to command-entries, so the two phrasings
agree across the whole badged set. okr is the only plugin with a non-command
entry, and it does not badge the axis.

Also records which plugins badge the agents axis and which two do not, so a
future session does not treat an unmeasured number as gated or a gated one as
unmeasured.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141o7P9gFCDxURKyc2cW7mc
This commit is contained in:
Kjell Tore Guttormsen 2026-08-13 20:29:46 +02:00
commit e17229fb78

View file

@ -82,11 +82,26 @@ their own Forgejo repositories under `https://git.fromaitochitta.com/open/`.
number; fix the catalog to match it. number; fix the catalog to match it.
- **Counting rules for a badge-less axis (calibrated against the badged plugins, 2026-08-02).** When - **Counting rules for a badge-less axis (calibrated against the badged plugins, 2026-08-02).** When
the catalog must count an axis itself, count it the way the badges do, or the numbers stop being the catalog must count an axis itself, count it the way the badges do, or the numbers stop being
comparable across plugin blocks: **hooks = hook COMMAND entries** in `hooks/hooks.json` (not comparable across plugin blocks: **hooks = hook ENTRIES** in `hooks/hooks.json` (not events, not
events, not matchers — the three diverge, and `commands` is what matched the badge on all 6 badged matchers — the three diverge), and **tests = ` tests` from `node --test`**, not ` pass`
plugins), and **tests = ` tests` from `node --test`**, not ` pass` (config-audit's badge 1398 is (config-audit's badge 1398 is its `tests` count; `pass` was 1375). Measure in an extraction of the
its `tests` count; `pass` was 1375). Measure in an extraction of the tag tag (`git archive <ref> | tar -x -C <tmp>`), never the sibling working tree.
(`git archive <ref> | tar -x -C <tmp>`), never the sibling working tree. - **`type: prompt` entries COUNT (decided 2026-08-13).** The rule read "hook COMMAND entries" until
now. That wording was calibrated in 2026-08 against plugins that predate prompt-hooks, so it was
never a ruling on them — it had no case to rule on. A prompt entry fires on the same event and
does the same job from the reader's side, so excluding it would understate the plugin.
**Re-measured 2026-08-13 at all 12 pinned refs before the rewrite**, because restating an old
measurement in new words is itself a claim: every plugin that both badges `hooks` and ships a
`hooks.json` has entries == command-entries (llm-security 9/9, config-audit 4/4, linkedin-studio
9/9, ai-psychosis 4/4, repo-mailbox 1/1), so the two phrasings agree on the whole badged set and
the rewrite contradicts nothing. `okr` @ `v1.10.0` is the **only** plugin with a non-command
entry — 3 entries, 2 `command` + 1 `prompt` (`PreCompact`) — and it does **not** badge the axis,
which is precisely why the badged set never tested the rule. The catalog's `3 hooks` stands, measured.
- **The `agents` axis IS badge-covered — 4 of the 6 plugins that claim it (measured 2026-08-13).**
`llm-security` `agents-6`, `config-audit` `agents-7`, `ms-ai-architect` `agents-12`,
`linkedin-studio` `agents-20`; all four match the catalog exactly and are gated. Ungated:
`voyage` (`24 agents`) and `okr` (`7 agents`) — badge-less, so those two numbers are unverified
until measured at their refs. Do **not** record this axis as uncalibrated: it has a referent.
- **The stat mirror reads the plugin README AT THE PINNED `ref`, never the sibling working tree.** - **The stat mirror reads the plugin README AT THE PINNED `ref`, never the sibling working tree.**
The catalog documents what *installs*, and that is the tag. A plugin that commits past its tag The catalog documents what *installs*, and that is the tag. A plugin that commits past its tag
without bumping its version — measured 2026-08-02 on both llm-security (scanners 23→22, tests without bumping its version — measured 2026-08-02 on both llm-security (scanners 23→22, tests