Generated from
cat-harness/skills/kg/kg-core/skill-voice-review.md— do not edit here.
Skill voice review
What this axis is, and what it deliberately is not
A voice whose rules declare appliesTo: ["skill"] judges skill files. In
agent-skills that is the shared base agent-skill-authoring and one override
per vendor under skills/voices/vendors/ (vendors/vendors.json lists them),
each extending the base. A voice counts
only once the harness config activates it (voice.active in
its index.config.json entry) — the same switch every other voice uses.
The owner’s ruling on bean rkqp sets the boundary: an agentic review, with no
formal gate on rule content. “Best practice” drifts, and a vendor describing
its own product is an assertion, not evidence. So:
- the criterion
skill-voice-review-current(minor, gated by nothing) asks only whether a review exists for the skill and voice as they are now; - a rule you judge
failis recorded in the skill’s attestation file and printed — it is not a finding, and it must not be turned into one here.
Reviewing one skill against one voice
Print the rules you are judging, resolved through
extends:bun run cat voice:review -- --rules agent-skill-authoring-claudeA vendor voice lists its own rules and the base’s, because an inherited rule keeps the scope it was declared under.
Open each rule’s citation before judging it. Every rule carries the library entry, page and quote it was read from. Uphold a verdict from the source, never from the one-line title: the title is a summary, and the rule is what the quote says.
Judge the skill as the platform would load it — the front matter the router sees, the body, and the files the body points to. One verdict per rule:
verdict when note passthe skill does what the rule asks optional failit does not required — what is missing, where n/athe rule cannot apply to this skill (a scripts rule, and the skill has no scripts) required — why not n/ais not a softerfail. If the rule could apply and the skill does not meet it, that is afailwith a note.Record it — the writer refuses a set that misses a rule, judges one twice, or leaves a
fail/n/aunexplained:bun run cat voice:review -- --sidecar <instance>/test/results/kg-qa/<skill path>.json \ --voice agent-skill-authoring-claude --by agent --verdicts verdicts.jsonverdicts.jsonis[{ "rule": "<id>", "result": "pass"|"fail"|"n/a", "note": "…" }]. The review pins the skill’s content hash and the hash of the voice’s skill rules, and replaces any earlier review of that skill against that voice.--sidecarnames the subject, not where the review is written. A voice review is a judgement, so it is kept asvoice_reviewsin the skill’s attestation file,<instance>/test/attestations/kg-qa/<skill path>.attestations.json(qa-attestations/v1), onmain— not in the derived kg-qa sidecar, whose record moves to theqa-reportsbranch (bean2gst, arc3fva). Commit the attestation file. A store that cannot be read is UNKNOWN and the writer refuses rather than overwriting it.Run
bun run cat kg:auditso the sidecar’s criterion reads the new review from the store.
When the criterion reports stale
A review goes stale when the skill changes or the voice’s skill rules change. The earlier review is kept, not deleted — it is evidence of what was checked — and the finding stays until a new review replaces it. Re-review the whole voice rather than patching the one rule you suspect moved: a changed skill can break a rule nobody was looking at.
Fixing what you found
A fail verdict is information for whoever owns the skill. Editing the skill is
a separate change with its own review. Do not edit a skill to make your own
verdict pass in the same step: record the verdict first, change the skill, then
review again — so the sidecar shows both states.