Files
holocron/plugins/kyberforge/.apm/skills/factory-audit/references/prompt-flow.md
Defame1297 0ea3f69dc6 fix(kyberforge): align primitive-author and factory-audit rule tiers
Second clean-context audit found author Must/Should and audit FAIL/SUGGESTION
tiers drifting apart, and author Musts the audit never checked.

- factory-audit: FAIL on absolute or bare relative hook script paths, an
  applyTo present but empty, and unbalanced braces/brackets in applyTo;
  judgment steps for dependency stem collisions, helper .json in hook dirs,
  unresolvable instruction links, prompt model slugs and second-person
  bodies; an unmatched glob drops to SUGGESTION; deliberate tier deviations
  recorded in hook-flow.md; validate.sh --help lists the three new modes;
  DescriptionOpener message no longer prescribes "Use when".
- primitive-author: deprecated routing, extra prompt keys and the prompt
  description contract become Shoulds; hook Musts gain "contributes an
  entry", no bare relative paths, and executable-when-run-directly;
  prompt Must 1 covers hardlinks; Vale prose FAILs resolved at close.
- forge: say "hook, instruction or prompt" rather than "apm primitive".

Refs #94

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

3.6 KiB

source_keys
source_keys
apm-cli-installed-source
apm-docs-llms-full

Prompt Flow

Steps 1 to 3 for an apm prompt — the target Step 0 matched as a *.prompt.md file. Work them in order, then return to SKILL.md Step 4 to report.

Gotchas

  • A prompt is judged against ADR-0029, not against apm's framing. apm calls a prompt "a callable program"; this repo holds it to a single-intent, user-triggered message that steers existing skills or agents by name and carries no procedure of its own.
  • A prompt's description is not a skill description. It is one plain user-facing sentence with no "Use when" trigger clause and no boundary clause — so never raise a missing trigger or boundary as a finding. A Vale Kyberforge.DescriptionOpener alert here means rewrite it as an imperative action ("Review the current PR with …"), not add a trigger.

Step 1 — Deterministic checks

Resolve both paths against this skill's own directory. Run exactly:

bash scripts/validate.sh <prompt-file>
bash scripts/vale-wrap.sh <prompt-file>

validate.sh findings become the ### Structure dimension, FAILs and SUGGESTIONs both, at the tier the script assigned: path and name, frontmatter, description presence, length and trigger clause, keys Claude drops, input: names and shapes, and ${input:x} references against input:. Keys Claude drops are a SUGGESTION, not a FAIL, on purpose: a Copilot-only key is legitimate when its Claude drop is intended, and only the author can say which. It exits 0 with no FAIL, 1 on real findings, 2 when it never ran — report that as ### Structure unverified, quoting the stderr reason.

vale-wrap.sh applies the bundled Kyberforge style. Every alert is a FAIL under ### Prose, cited by rule ID; do not re-derive it by judgment. 0 files scanned means NOT RUN, not clean — say so and judge prose by reading.

There is no provenance step: a prompt carries no source_keys.

Step 2 — Read the prompt and what it steers

Read the file end to end, then the description of every skill or agent its body names, and confirm each resolves in this repo or in a package the prompt's package declares.

Step 3 — Qualitative audit

Cite file and line for every finding.

role — whether this is a prompt at all. Decide it by reading the body, not by its length or headings; there is no threshold.

  • FAIL: the body clearly carries reusable procedure — steps, gotchas, domain know-how the agent could not act without — rather than steering skills or agents that hold it. Fix: move the procedure into a skill (new, or the one it belongs to) and reduce the prompt to the message that invokes it.
  • FAIL: the body names a skill or agent that does not resolve, or one carrying disable-model-invocation: true, which the model cannot invoke.
  • SUGGESTION: borderline — some how-to detail beyond steering, but not a full procedure.
  • SUGGESTION: more than one intent in one prompt.
  • SUGGESTION: the body is not written as second-person instructions to the agent.
  • SUGGESTION: a model value that is not a model slug the package's Claude target accepts. Copilot ignores model and allowed-tools, so neither constrains a Copilot run.

description

  • SUGGESTION: the description does not read as one user-facing action, or does not name the skills or agents the prompt steers. On Claude the description is model-visible and apm drops disable-model-invocation, so naming what it steers keeps the router pointed at the capability rather than the wrapper.

Then return to SKILL.md Step 4, opening the report with this coverage line:

Checked: structure · prose · role · description