docs(kyberforge): restore the retrofit cut order in skill-author

improve.md still required a retrofit before extending but lost the
procedure with retrofit.md. Restore the ordered cuts inline, and fix
the stale hook name and plugin-mode wording in skill-author's tests and
deployment-modes reference.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-16 15:27:32 +00:00
parent 0323c2919b
commit baa2f5dc7f
3 changed files with 18 additions and 5 deletions

View File

@@ -5,15 +5,15 @@ source_keys:
# Deployment Modes # Deployment Modes
Skills deploy standalone, or as part of a package — either a legacy plugin-mode cache install or an APM (`apm.yml`-governed `.apm/` tree, compiled via `apm compile`). All resolve relative paths from the skill root — the SKILL.md body works the same in any of them. Differences only arise when referencing files *outside* the skill directory. Skills deploy standalone, or as part of an APM package (an `apm.yml`-governed `.apm/` tree, compiled via `apm compile`). Some consumers also receive a package through a host's plugin install, which copies it into a cache. All modes resolve relative paths from the skill root — the SKILL.md body works the same in any of them. Differences only arise when referencing files *outside* the skill directory.
## Cache isolation (plugin mode) ## Cache isolation (host plugin install)
When a plugin is installed, its directory is copied to a cache. Only the plugin's own files are copied. **Any path that leaves the skill directory breaks post-install:** When a host installs a plugin, it copies the plugin directory to a cache. Only the plugin's own files are copied. **Any path that leaves the skill directory breaks post-install:**
``` ```
../other-skill/validate.sh # breaks ../other-skill/validate.sh # breaks
plugins/kyberforge/skills/other-skill/ # breaks plugins/<plugin>/.apm/skills/other/ # breaks
../../shared/utils.sh # breaks ../../shared/utils.sh # breaks
``` ```

View File

@@ -76,6 +76,19 @@ into compliance first — the gates are hot and carry no baseline file, so a one
non-compliant skill cannot be committed until the description and body meet non-compliant skill cannot be committed until the description and body meet
`references/contract.md`. Treat that retrofit as part of the same change, not a follow-up. `references/contract.md`. Treat that retrofit as part of the same change, not a follow-up.
Retrofit against the number that actually failed: the audit reports description characters and
body-only words separately. Audit the skill in its real package directory, never a scratch copy,
where boundary resolution reports `DID NOT RUN` and exits 0 without checking anything. Cut in this
order, stopping once the gate clears; the order puts the cuts that lose the least behaviour first:
1. Gotchas that paraphrase a step below them — delete the Gotcha, keep the step.
2. Spec restatements — text repeating a published spec, a tool's `--help`, or a limit the
validator already enforces.
3. Capability enumeration — keep one capability clause in the description; drop the rest.
4. Per-flow prose — move each flow into its own `references/` file behind a dispatch table.
Still over after all four means the skill does two jobs: split it rather than compressing prose.
If a signal points to a script or reference file, edit that file directly rather than adding a If a signal points to a script or reference file, edit that file directly rather than adding a
workaround in SKILL.md. workaround in SKILL.md.

View File

@@ -146,7 +146,7 @@ EOF
} }
@test "scaffold emits a live metadata.version seeded at 0.1.0 (ADR-0022)" { @test "scaffold emits a live metadata.version seeded at 0.1.0 (ADR-0022)" {
# The scaffold must clear .pre-commit-config.yaml's `skill-frontmatter` hook # The scaffold must clear .pre-commit-config.yaml's `skill-size-check` hook
# on its first commit: a commented-out metadata block ships a skill with no # on its first commit: a commented-out metadata block ships a skill with no
# version and is blocked. Assert the field is live, not a comment. # version and is blocked. Assert the field is live, not a comment.
bash "$SCRIPT" my-tool "$DEST" bash "$SCRIPT" my-tool "$DEST"