Found while re-scoring the Remotion differential, and verified directly.
Fixed by PR #168. Kept for the record; the reasoning below is what shaped that fix.
The finding
rustmotion skills install is the channel through which an agent receives the generation rules. SKILL_FILES (crates/rustmotion-cli/src/skills.rs:16) embedded 30 of them. There are 47 on disk.
$ ls .claude/skills/rustmotion/rules/*.md | wc -l
47
$ grep -o 'rules/[a-z0-9_-]*\.md' crates/rustmotion-cli/src/skills.rs | sort -u | wc -l
30
The 17 missing ones were not a harmless sample:
| Missing rule |
Why it matters |
geometry-safety.md |
Cited by name in CLAUDE.md:14. The rule explaining white-space, auto_scroll and overflow — the core of viewport safety. |
world-view.md |
Cited by name in CLAUDE.md:40. Coordinate model of the world view, including the world-position = camera waypoint trap. |
audio-reactive.md |
Cited by name in CLAUDE.md:100. |
html-css-mental-model.md |
Corrected by PR #156 because it taught margin-top and padding: [32, 48] — forms CssStyle rejects, which drop the whole component from the video. |
component-field-placement.md, time-remapping.md, animation-completion-budget.md, typography-readability.md, scene-pacing.md, … |
+ 12 more |
Why this was worse than "17 forgotten files"
The chantier repaired the content without repairing the pipe. PR #156 corrected html-css-mental-model.md precisely because it taught LLMs to produce JSON that deletes components. But that file had never been in SKILL_FILES, before or after. An agent with only rustmotion skills install saw neither the broken version nor the corrected one — the fix did not reach it.
And CLAUDE.md explicitly points readers at three rules they will not receive. The entry document links to pages the distribution channel does not deliver.
Root cause
SKILL_FILES was a hand-maintained literal list with no guard. No test asserted that it covered .claude/skills/rustmotion/rules/. Any rule added since was invisible by default, and would have stayed so silently.
Resolution
PR #168 deleted the literal list rather than completing it: a build.rs walks the skills tree at build time, so "every rule is embedded" holds by construction. Verified by running the installed binary into an empty directory — 49 files written, 47 of them rules — and by a test comparing what is embedded against the directory, which fails naming any file that drifts out.
Found while re-scoring the Remotion differential, and verified directly.
The finding
rustmotion skills installis the channel through which an agent receives the generation rules.SKILL_FILES(crates/rustmotion-cli/src/skills.rs:16) embedded 30 of them. There are 47 on disk.The 17 missing ones were not a harmless sample:
geometry-safety.mdCLAUDE.md:14. The rule explainingwhite-space,auto_scrollandoverflow— the core of viewport safety.world-view.mdCLAUDE.md:40. Coordinate model of theworldview, including theworld-position= camera waypoint trap.audio-reactive.mdCLAUDE.md:100.html-css-mental-model.mdmargin-topandpadding: [32, 48]— formsCssStylerejects, which drop the whole component from the video.component-field-placement.md,time-remapping.md,animation-completion-budget.md,typography-readability.md,scene-pacing.md, …Why this was worse than "17 forgotten files"
The chantier repaired the content without repairing the pipe. PR #156 corrected
html-css-mental-model.mdprecisely because it taught LLMs to produce JSON that deletes components. But that file had never been inSKILL_FILES, before or after. An agent with onlyrustmotion skills installsaw neither the broken version nor the corrected one — the fix did not reach it.And
CLAUDE.mdexplicitly points readers at three rules they will not receive. The entry document links to pages the distribution channel does not deliver.Root cause
SKILL_FILESwas a hand-maintained literal list with no guard. No test asserted that it covered.claude/skills/rustmotion/rules/. Any rule added since was invisible by default, and would have stayed so silently.Resolution
PR #168 deleted the literal list rather than completing it: a
build.rswalks the skills tree at build time, so "every rule is embedded" holds by construction. Verified by running the installed binary into an empty directory — 49 files written, 47 of them rules — and by a test comparing what is embedded against the directory, which fails naming any file that drifts out.