Addresses findings from the orthogonal /code-review + /security-review passes:
- Markdown-injection (CRITICAL/HIGH): escape untrusted free-text (name, description,
license, author, eos axes) with mdInline() and size install/uninstall code fences
dynamically so a crafted entry cannot inject phishing links, break the summary
table, or escape the code fence in the committed, GitHub-rendered catalog.
- validateEntries no longer throws on a null/non-object array element (kept the
--json contract); rejects control characters in free-text fields; caps field
lengths and entry count; tightens the discussion and license regexes so neither
admits Markdown metacharacters / newlines.
- gen-registry treats a missing capabilities.json as an error (only eos.json is
optional pre-PR2); disambiguated from gen-capability-registry.cjs.
- Renders the required 'author' field (was captured but never shown).
- Adds tests for every fix: escaping/link-hijack/fence, null guard, control chars,
length + entry caps, tightened regexes, eos render path, interactions guards.
Refs #2182
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>