Skip to content

Commit fdc48e3

Browse files
TMHSDigitalclaude
andcommitted
feat(skills): link every skill to the examples that prove it
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 791716c commit fdc48e3

23 files changed

Lines changed: 2597 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)