Skip to content

Commit f80411b

Browse files
TMHSDigitalclaude
andauthored
feat(skills): link every skill to the examples that prove it (#444)
10 of 16 skills linked no example, and an agent had to join three manifests to learn what an example runs, on which Blender, and how to break it. - examples/skills.json (hand-edited) maps each of the 64 examples to the skills it proves; 52 map to at least one. - scripts/build_examples_index.py generates examples/index.json: one record per example with script, skills, render or check-only, min_version, run command, one-line summary, every smoke falsifier with its expected exit, and the README exit-code table. - The same script writes a marked "Runnable examples" section into each SKILL.md, with an absolute link, summary and one falsifier per example. addon-scaffolding, bl-info-migration and ui-panels say no example exists yet and point at #378. - --check runs in Validate and tests/run_all.py. It fails when an example is unmapped, a skill name is unknown, a skill has no example and is not pending, or the generated files are stale. - CLAUDE.md and docs/new-example-prompt.md add the mapping to the wiring list. Gallery version badges and a "falsify it" line on detail pages are left for a follow-up. Refs #377 Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 3867dce commit f80411b

23 files changed

Lines changed: 2721 additions & 3 deletions

File tree

‎.github/workflows/validate.yml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,9 @@ jobs:
326326
- name: Check claude/blender-rules.md and the rules skill are regenerated from rules/*.mdc
327327
run: python3 scripts/build_claude_rules.py --check
328328

329+
- name: Check examples/index.json and each skill's Runnable examples section are regenerated
330+
run: python3 scripts/build_examples_index.py --check
331+
329332
- name: Check the plugin-dist build assembles, carries every skill, and stays slim
330333
run: python3 scripts/build_plugin_dist.py --check
331334

‎CLAUDE.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,10 @@ example still carries a `tests/smoke/catalog.json` row and a falsifier.
124124
gallery's source of truth. When authoring a new gallery example, copy the anatomy of
125125
`examples/bmesh-gear/` (script structure, README shape, dark-studio render recipe) and
126126
wire all of: gallery.json entry (with an `alt` sentence describing the still; the build fails without one),
127-
a `tests/smoke/catalog.json` row, hero webp (1280×720) in
127+
a `tests/smoke/catalog.json` row, an `examples/skills.json` entry naming the skills it proves (`python scripts/build_examples_index.py` then regenerates `examples/index.json` and each skill's Runnable examples section; Validate fails on a missing entry), hero webp (1280×720) in
128128
`docs/gallery/assets/` + its 640×360 card variant `<name>-hero-640.webp` (`python scripts/make_thumbs.py`; the gallery build exits 5 without it) + preview webp (1200×675), then run `python scripts/build_gallery.py`.
129129
A check-only example wires only the
130-
`tests/smoke/catalog.json` row and its README — it is deliberately absent from
130+
`tests/smoke/catalog.json` row, its `examples/skills.json` entry, and its README — it is deliberately absent from
131131
`examples/gallery.json` and `docs/gallery/`.
132132
Renders must conform to the gallery look spec at `docs/VISUAL-STYLE.md`.
133133
Render paths gate framing through the shared helper `examples/gallery_framing.py` —

‎docs/new-example-prompt.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,12 @@ shape from neighboring examples and repository configuration, including the exam
9797
directory, README, gallery metadata and assets, plugin manifest, smoke catalog
9898
(`tests/smoke/catalog.json`, whose row must list the falsifier under
9999
`falsifiers` with its exact `expect_exit` so CI re-proves it on every run),
100+
the skills mapping (`examples/skills.json`, then `python scripts/build_examples_index.py`
101+
to regenerate `examples/index.json` and the skills' Runnable examples sections),
100102
the top-level README's aggregate counts (it no longer carries a per-example
101103
row; the gallery is the catalog), and generated gallery pages. A
102104
check-only example skips the gallery metadata, assets, and generated pages — it wires
103-
the plugin manifest, the smoke catalog row, and its README, and nothing else. After regenerating the gallery with
105+
the plugin manifest, the smoke catalog row, the skills mapping, and its README, and nothing else. After regenerating the gallery with
104106
`python scripts/build_gallery.py`, read the **generated** output character by
105107
character—not only `examples/gallery.json` source fields. Open
106108
`docs/gallery/index.html` and `docs/gallery/<name>/index.html` and inspect the

0 commit comments

Comments
 (0)