Skip to content

Commit cc22753

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add wooden-yoke
The wooden yoke was the first unclaimed showcase candidate. What an envelope check cannot see on a yoke is whether each bow still closes round a neck: a bow bent too tight still stands on the floor, passes up through the beam, takes its pins and fits the bounding box. The piece measures each opening between the bow legs and up to the saddle off the mesh; --pinch-bows exits 19 at 196 mm while every other budget and the envelope still pass. Also asserts the legs stand proud of the beam, the staple bites it, the ring is threaded along and hung on the staple's bar, the pins rest on the beam and the bows are mirrored, each with a falsifier proven on 4.5.11, 5.1.2 and 5.2.1. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
1 parent 4116e02 commit cc22753

14 files changed

Lines changed: 3178 additions & 9 deletions

File tree

‎.cursor-plugin/plugin.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@
169169
"showcase/rope-bridge",
170170
"showcase/grain-sacks",
171171
"showcase/brazier",
172-
"showcase/apothecary-shelf"
172+
"showcase/apothecary-shelf",
173+
"showcase/wooden-yoke"
173174
]
174175
}

‎CLAUDE.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ rules/<rule-name>.mdc - Anti-pattern rules, 9 total
2222
templates/<template-name>/ - Starter projects, 3 total
2323
snippets/<snippet-name>.py - Standalone code patterns, 27 total
2424
examples/<name>/ - Runnable smoke-gated examples, 59 total (+ gallery.json)
25-
showcase/<name>/ - Budget-conformance props, 32 pieces (sibling of examples/; see showcase/README.md)
25+
showcase/<name>/ - Budget-conformance props, 33 pieces (sibling of examples/; see showcase/README.md)
2626
scripts/build_gallery.py - Regenerates docs/gallery/ from examples/gallery.json + showcase/gallery.json
2727
scripts/site/ - Vendored landing-page build (Jinja2)
2828
docs/gallery/ - Committed generated gallery pages + hero renders

‎README.md‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</p>
1919

2020
<p align="center">
21-
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>59 examples</strong> &nbsp;&bull;&nbsp; <strong>32 showcase pieces</strong>
21+
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>59 examples</strong> &nbsp;&bull;&nbsp; <strong>33 showcase pieces</strong>
2222
</p>
2323

2424
<p align="center">
@@ -37,7 +37,7 @@
3737

3838
## Overview
3939

40-
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 59 examples, and 32 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
40+
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 59 examples, and 33 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
4141

4242
The content is consumed by AI coding agents reading these files directly from a checkout — **there is no MCP server in this repository, and none is required**. Cursor applies `rules/*.mdc` automatically wherever their scope globs match and takes skills by name in chat; Claude Code reads `skills/` and `rules/` from the project workspace, or from this repo kept as a referenced checkout. Any agent that can read files in a workspace can use it the same way. There is no build step for the content — edit the Markdown and Python files directly.
4343

@@ -106,7 +106,7 @@ per-script exit-code model, are in
106106
Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](showcase/README.md).
107107

108108
<details>
109-
<summary><strong>32 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>33 showcase pieces</strong> — click to expand the preview grid</summary>
110110

111111
<p align="center">
112112
<a href="showcase/shipping-crate/"><img src="showcase/shipping-crate/preview.webp" width="24%" alt="Shipping crate: a wooden slat crate with iron corner brackets on a dark studio floor, warm wedge on the back wall" /></a>
@@ -141,6 +141,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
141141
<a href="showcase/grain-sacks/"><img src="showcase/grain-sacks/preview.webp" width="24%" alt="Grain sacks: three burlap sacks gathered and tied with twine, two standing and one lying slumped in front, one blue-striped and one red-striped, on a dark studio floor" /></a>
142142
<a href="showcase/brazier/"><img src="showcase/brazier/preview.webp" width="24%" alt="Brazier: an iron fire bowl with a rolled rim on three S-curved forged legs, holding ash and a heap of glowing charcoal, on a dark studio floor" /></a>
143143
<a href="showcase/apothecary-shelf/"><img src="showcase/apothecary-shelf/preview.webp" width="24%" alt="Apothecary shelf: a stained wooden shelf unit with an arched crest, gallery rails and three drawers, stocked with labelled glass bottles, flasks and glazed jars, on a dark studio floor" /></a>
144+
<a href="showcase/wooden-yoke/"><img src="showcase/wooden-yoke/preview.webp" width="24%" alt="Wooden yoke: a carved oak ox yoke with upturned ends standing on two bent hickory oxbows pinned above the beam, with an iron ring hung under its centre, on a dark studio floor" /></a>
144145
</p>
145146

146147
[`shipping-crate`](showcase/shipping-crate/) — procedural crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets. Falsifier `--skip-decimate` exits 9.
@@ -203,6 +204,8 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
203204

204205
[`apothecary-shelf`](showcase/apothecary-shelf/) — procedural apothecary shelf stocked with fifteen labelled bottles, flasks and jars, whose headroom under the shelf above is recomputed per vessel, through the same pipeline. Falsifiers `--tall-flask` exits 20, `--short-shelves` exits 17.
205206

207+
[`wooden-yoke`](showcase/wooden-yoke/) — procedural double ox yoke on two bent hickory bows with a hung ring, whose neck openings are measured between the bow legs and up to the saddles, through the same pipeline. Falsifiers `--pinch-bows` exits 19, `--edge-on-ring` exits 17.
208+
206209
</details>
207210

208211
## Examples

‎ROADMAP.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
137137
- ~~Grain sacks (cloth sacks, some slumped, tied necks) as a game-prop showcase piece~~ **SHIPPED** as `showcase/grain-sacks/` — three settled, pleated burlap sacks, one lying, twine ties seated in the neck waist, sacks pressed into one another; flat contact patch summed from the mesh, `--round-bottom` exits 19 on it while zmin still passes
138138
- ~~Brazier (iron bowl on legs, coals, ash) as a game-prop showcase piece~~ **SHIPPED** as `showcase/brazier/` — spun bowl with a rolled rim, three one-sweep forged legs, ash bed biting the wall, 36 cleaved coals packed without interpenetration; tip angle from a density-weighted mass centre and the support polygon, `--tuck-legs` exits 19 on it while the feet still ground
139139
- ~~Apothecary shelf (shelf unit, bottles and jars of varied form) as a game-prop showcase piece~~ **SHIPPED** as `showcase/apothecary-shelf/` — housed shelves, gallery rails, lapped back boards, a drawer bank and an arched crest, stocked with fifteen lathed vessels in five forms, each corked or lidded and labelled on its own rings; per-vessel headroom under the member above is read off the mesh, `--tall-flask` exits 20 on it while every seat and the envelope still pass
140-
- Wooden yoke (oxbow, iron rings) as a game-prop showcase piece
140+
- ~~Wooden yoke (oxbow, iron rings) as a game-prop showcase piece~~ **SHIPPED** as `showcase/wooden-yoke/` — lofted oak beam with neck saddles and upturned ends, two bent-hickory bows through it and pinned above it, a staple and a threaded hung ring; each neck opening measured between the bow legs and up to the saddle, `--pinch-bows` exits 19 on it while the bows still ground and the envelope is unchanged
141+
- Ox cart tongue or plough beam that hitches to the yoke's ring as a game-prop showcase piece — a hitch is a ring-on-hook contact the yoke's hung ring only tests against a fixed bar
141142
- Butter churn (staved tub, lid, dasher) as a game-prop showcase piece
142143
- Bookshelf with leaning books (upright and toppled volumes of varied size, one leaning on its neighbour) as a game-prop showcase piece — the lean needs a contact budget the apothecary shelf's upright vessels never exercised: each leaning book rests on its neighbour's spine edge and on the shelf, not in either
143144
- ~~Small modular kit showcase on recognizable geometry (`modular-kit-snap` contract)~~ **SHIPPED** as `showcase/fence-kit/` — tiling post-and-rail section (AABB X is the tile width; does not re-witness the snap contract); `--skip-decimate` exits 9 on the LOD1 ratio band
31.5 KB
Loading
21 KB
Loading
53.2 KB
Loading

‎docs/gallery/index.html‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ <h1>Examples and Showcase</h1>
291291
autocomplete="off" spellcheck="false" aria-label="Search examples and showcase pieces" />
292292
<button class="q-clear" id="qClear" type="button" aria-label="Clear search" hidden>&times;</button>
293293
</div>
294-
<span class="count" id="count" role="status" aria-live="polite">51 examples, 32 showcase pieces</span>
294+
<span class="count" id="count" role="status" aria-live="polite">51 examples, 33 showcase pieces</span>
295295
<div class="density" role="group" aria-label="Card density">
296296
<button class="density-btn" data-density="compact" type="button" aria-pressed="false">Compact</button>
297297
<button class="density-btn" data-density="detailed" type="button" aria-pressed="false">Detailed</button>
@@ -1254,6 +1254,17 @@ <h2><a href="apothecary-shelf/">apothecary-shelf</a></h2>
12541254
<a class="card-link" href="apothecary-shelf/">View showcase piece<span class="sr-only"> apothecary-shelf</span> <span aria-hidden="true">&rarr;</span></a>
12551255
</div>
12561256
</article>
1257+
<article class="card" data-tags="mesh export showcase">
1258+
<a class="card-media" href="wooden-yoke/" tabindex="-1" aria-hidden="true">
1259+
<img src="assets/wooden-yoke-hero.webp" alt="A carved oak ox yoke with upturned ends standing on two bent hickory bows pinned above the beam, with a rusted iron ring hung from a staple under its centre." loading="lazy" decoding="async" />
1260+
</a>
1261+
<div class="card-body">
1262+
<h2><a href="wooden-yoke/">wooden-yoke</a></h2>
1263+
<p class="teaches">A procedural double ox yoke — a carved oak beam with neck saddles and upturned ends on two bent hickory bows pinned above it, with a staple and a hung iron ring — carried through UVs, bake, LOD, compound collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
1264+
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 5288 tris, three materials with 1088 oak, 720 hickory and 936 iron faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.424×0.140×0.640 m, zmin 0, hygiene 0 including zero coplanar cross-shell pairs, both bows standing on the floor, every leg 52.7 mm proud of the beam, the staple 17.5 mm into it, four pins resting 1.5 mm into its crown, a ring threaded along the staple&#x27;s bar and hung 1.0 mm onto it, two mirrored bows, and each neck opening 266 mm wide and 371 mm high. --pinch-bows exits 19 at 196 mm while the bows still ground and the envelope is unchanged; --edge-on-ring exits 17.</p>
1265+
<a class="card-link" href="wooden-yoke/">View showcase piece<span class="sr-only"> wooden-yoke</span> <span aria-hidden="true">&rarr;</span></a>
1266+
</div>
1267+
</article>
12571268
</div>
12581269
<p class="noresults" id="noResults" hidden>Nothing matches the current filters.
12591270
<button class="chip" id="resetFilters" type="button">Clear search and tags</button></p>
@@ -1283,7 +1294,7 @@ <h2><a href="apothecary-shelf/">apothecary-shelf</a></h2>
12831294
var tagsToggle = document.getElementById('tagsToggle');
12841295
var toTop = document.getElementById('toTop');
12851296
var total = cards.length;
1286-
var COUNT_LABEL = '51 examples, 32 showcase pieces';
1297+
var COUNT_LABEL = '51 examples, 33 showcase pieces';
12871298
var LS_KEY = 'bdt-gallery-density';
12881299
var reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
12891300

0 commit comments

Comments
 (0)