Files
holocron/plugins/kyberforge/.apm/skills/primitive-author/SKILL.md
Defame1297 5d0f988ed8 fix(kyberforge): resolve PR #144 review and audit round 3
- factory-audit: hook events judged per deployed target after apm's
  rename (Claude/Copilot event sets FAIL, others SUGGESTION); Claude
  plugin layouts accepted as hook sources; interpreter options and
  sh -c strings checked; bats 378 -> 386
- primitive-author: Must 4/5 match the audit; reference hand-back
  points at the right steps; Step 4.2 --target all fallback
- skill-author: new-skill.sh repair only on the template marker line,
  so complete skills stay a no-op; provenance and calibration text
- forge: restore "already named" qualifier; drop false HITL claim
- apm-workflow: token example uses an env var
- docs/hooks.md: the apm-hooks.json sidecar is committed, not ignored

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkT7RSDwDbmrM9T34b6sTi
2026-09-28 21:32:18 +00:00

4.0 KiB

name, description, allowed-tools, metadata
name description allowed-tools metadata
primitive-author Use when the user wants an apm hook, instruction or prompt file created, or audit findings or feedback applied to an existing one. Not read-only review -> factory-audit. Not skills -> skill-author. Not agents -> agent-author. Bash Read Write Edit
version category source_keys
0.1.0 factory
apm-cli-installed-source
apm-docs-llms-full

Gotchas

  • apm compile --validate is not a gate: it only warns on instructions, exits 0, and never reads prompts. apm install exits 1 only on a hook payload Copilot would reject or on critical hidden Unicode; bad prompt input names and dropped keys merely warn — /factory-audit is the only check that fails on the rest.
  • Never draft with the real suffix outside .apm/<type>/. apm's local discovery globs **/*.instructions.md across the whole tree, so a draft named that way anywhere in the repo becomes a real instruction. The templates carry a trailing .template for this reason; drop it only on the final path.
  • Never hand-write .claude/settings.json, even to test a hook. apm owns that file (ADR-0019), overwrites it outright when it is malformed, and apm audit --ci fails on anything it would not have written.

Step 1 — Dispatch

Target or intent Type Reference
A hook — .apm/hooks/<name>.json, or "run X whenever Y happens" hook references/hook.md
An instruction — .apm/instructions/<name>.instructions.md, or a rule for files matching a pattern instruction references/instruction.md
A prompt — .apm/prompts/<name>.prompt.md, or a reusable message the user types to kick off work prompt references/prompt.md

Read only the reference matching the resolved type — each is self-contained. If the target sits inside a git worktree, capture rtk git log --oneline -1 before touching the filesystem; Step 4 needs it.

Step 2 — Boundary gate

Run the reference's Gate section before writing anything. A failed gate stops this skill: hand over to the owner the Gate names. Never bend the artifact to pass the gate.

Step 3 — Create or improve

Condition Action
No file at the target path Create: copy the reference's template from assets/templates/, drop .template, fill every FILL IN and FILL_IN_ placeholder, and apply the reference's checklist
File exists, at least one signal Improve: read the whole file, then apply each signal against the reference's checklist
File exists, no signal Stop and ask whether the user meant a new file or has feedback to apply

Signals: grill output, /factory-audit findings, inline feedback, session context. Group findings by root cause and fix the cause once.

Step 4 — Validate and close

  1. Run /factory-audit on the file, inline in this context; resolve every FAIL before reporting done, including the ### Prose FAILs Vale raises on an instruction or prompt body or description.
  2. Render it: in a fresh mktemp -d directory, run rtk apm install <absolute path to the owning package> --target <its targets:, or all when it declares none>, then read what each target received — .claude/settings.json and .github/hooks/, .claude/rules/ and .github/instructions/, or .claude/commands/ and .github/prompts/. A local path deploys the working tree; --dry-run renders nothing and a repo-root install resolves the remote's main.
  3. Bump the owning package's apm.yml version: — minor for a new hook, instruction or prompt, patch for a fix — unless this branch already bumped it for unreleased work. None of these is released on its own version — bump the package even if an instruction carries an optional version: key.
  4. Commit verification. Inside a git worktree, once the audit is clean, run rtk git add and rtk git commit, then confirm rtk git log --oneline -1 changed from Step 1's hash: staged-but-uncommitted work is lost if the tree is cleaned up. Outside a worktree, report done on a clean audit and name that as the reason.