Skip to content

Commit b9d3ec1

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add mine-cart piece
A narrow-gauge mine cart on a rail segment. It has a riveted red steel tub with a rolled lip, ribs, base strap and grab bars, sitting on oak sills with buffer beams and coupling rings. Four flanged, lathe-turned wheels on two axles run in iron axle boxes over two 30 lb ASCE rails (600 mm gauge, 79 mm rail). The rails sit on tie plates, spiked to four sleepers in a ballast bed. Contact witnesses, measured off the finished mesh: - every wheel tread sits 0.50 mm into its railhead (allowed -1.5..+0.5 mm); - every flange is 20.5 mm below the rail top and 6.00 mm clear of the railhead's inner face (allowed 3-10 mm); - both axles are 0.0000 degrees off square; - wheelbase 0.600 m on 0.600 m gauge, wheels 0.360 m. Budgets: 12334 tris, four materials (steel 816, iron 5104, timber 208, ballast 622 faces). UVs stay in 0..1 with zero overlap. LOD1 ratio is 0.4999, LOD2 0.2118-0.2199. The compound collider has 1532 tris. The normal bake finishes and the Unity glTF is 990 kB. Hygiene is all zero. Falsifiers. Each one exits its own code on Blender 4.5.11 LTS, 5.1.2 and 5.2.1 LTS (.scratch binaries, 18 runs). The default run exits 0 on all three. --skip-decimate 9 LOD1 ratio 1.0000 --stray-vert 15 one loose vert --lift-z 16 zmin 0.050 --float-wheel 18 tread 5.50 mm over the rail --skew-axle 19 axle 1.500 degrees off square --wide-gauge 20 flanges 6.00 mm inside the railheads Asset quality is remapped to exit 21, because 11 is this piece's collider code. Gates: - Framing: pass (fill x 0.716 / y 0.844). - Asset quality: pass (4 materials, edge90 0.083). - Contact sheet: luma 0.234 (references 0.237-0.243), stage 0.220, warmth +0.05, saturation 0.172. Every criterion passes. - Asset sheet: pass. Against collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow and apothecary-shelf, the cart is not the least-designed object. Also in this commit: - scripts/asset_sheet.py gains the MineCartLow SELECT row. - Two README showcase list lines that ran together are split. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent b92dea1 commit b9d3ec1

89 files changed

Lines changed: 5258 additions & 155 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.cursor-plugin/plugin.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@
212212
"showcase/cricket-wicket",
213213
"showcase/bamboo-clump",
214214
"showcase/toboggan",
215-
"showcase/sundial"
215+
"showcase/sundial",
216+
"showcase/mine-cart"
216217
]
217218
}

‎AGENTS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ classifies it as a `cursor-plugin`. This is content the AI loads when the user
2121
asks Blender questions or works on Blender add-ons in Cursor or Claude Code.
2222

2323
The content base is 16 skills, 9 rules, 3 templates, 27 snippets, 62
24-
examples, and 72 showcase pieces (counts are CI-enforced against README.md)
24+
examples, and 73 showcase pieces (counts are CI-enforced against README.md)
2525
and the manifest). The full inventory tables and per-item purposes live in
2626
`CLAUDE.md`. Example anatomy and authoring rules: copy `examples/bmesh-gear/`;
2727
showcase conventions: `showcase/README.md`. The render look is specified

‎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, 62 total (+ gallery.json)
25-
showcase/<name>/ - Budget-conformance props, 72 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 73 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
2626
scripts/build_gallery.py - Regenerates docs/gallery/ from examples/gallery.json + showcase/gallery.json
2727
scripts/site/ - Vendored landing-page build (Jinja2); tokens.css is the shared palette
2828
tests/check_site_links.py - Internal link/anchor/alt gate over the built site (docs/)

‎README.md‎

Lines changed: 7 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>62 examples</strong> &nbsp;&bull;&nbsp; <strong>72 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>62 examples</strong> &nbsp;&bull;&nbsp; <strong>73 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, 62 examples, and 72 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, 62 examples, and 73 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>72 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>73 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 stencilled PORT ROYAL and NO 17, with iron corner brackets and an end handle, on a dark studio floor, warm wedge on the back wall" /></a>
@@ -181,6 +181,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
181181
<a href="showcase/bamboo-clump/"><img src="showcase/bamboo-clump/preview.webp" width="24%" alt="Bamboo clump: seven splayed green and yellow culms with dark node collars and papery sheaths, under a full drooping leafy crown, rising from a soil hummock with exposed rhizome knuckles, on a dark studio floor" /></a>
182182
<a href="showcase/toboggan/"><img src="showcase/toboggan/preview.webp" width="24%" alt="Toboggan: a wooden runner sled with steel-shod runners curling into front horns, a screwed seven-slat deck on posts, a red crossbar, and a twisted hemp pull rope ending in a wooden toggle, on a dark studio floor" /></a>
183183
<a href="showcase/sundial/"><img src="showcase/sundial/preview.webp" width="24%" alt="Sundial: a garden sundial with a stepped stone plinth, a tapered octagonal granite column and cap, and a bronze dial plate with hour lines, a Roman-numeral chapter ring and a triangular gnomon, on a dark studio floor" /></a>
184+
<a href="showcase/mine-cart/"><img src="showcase/mine-cart/preview.webp" width="24%" alt="Mine cart: a rust-streaked riveted red steel tub on oak sills, four flanged iron wheels resting on two polished rails spiked to sleepers in grey ballast, on a dark studio floor" /></a>
184185
</p>
185186

186187
[`shipping-crate`](showcase/shipping-crate/) — procedural crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets. Falsifier `--skip-decimate` exits 9.
@@ -312,8 +313,11 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
312313
[`fern-mossy-rock`](showcase/fern-mossy-rock/) — the ninth `nature` piece: procedural shaded woodland corner on a sloping soil bank (a gritstone boulder cut by deep cleavage planes into broad flat fracture faces meeting at crisp, weathered arrises, with stepped ledges, pitting, lichen, a moss stain and a damp band at its foot, split down its front by a deep crack and sunk into the bank all round; lobed moss cushions and satellite tufts laid on it as conforming shells, deepest in its hollows, feathering to nothing at the rim, tucked over the crack's lip, with bare patches where the stone shows through; a male fern's shuttlecock crown of eleven bipinnate fronds whose 434 alternate pinnae are cut into pinnules and taper to the tip, three fiddleheads unrolling as logarithmic spirals from a scaly rootstock bedded in the soil, a smaller fern growing out of the crack, and beech litter, pebbles, a twig and wood sorrel at the foot), whose cleaved stone, rooted fronds and rootstock, moss thickness and feathered rim, boulder sealed in the bank, moss facing up or into the shade, crack fern wedged in the cleft, pinna alternation and taper, true spirals and ground cover are recomputed from the mesh, through the same pipeline. `--smooth-rock` exits 27 on the stone's turning concentrated in crisp arrises, `--float-fronds` and `--lift-crown` 17 on every frond rooted in its crown and the crown sealed in the soil, `--float-moss` 18 on the moss cushion's thickness band on the stone, `--slab-moss` 28 on the cushion feathering out at its rim, `--perch-rock` 20 on the boulder sealed all round, `--sunny-moss` 21 on moss facing up or into the shade, `--perch-crack-fern` 22 on the crack fern rooted in the cleft, `--flat-taper` and `--opposite-pinnae` 23 on pinnae alternating and tapering along the rachis, `--open-crozier` 24 on every fiddlehead a real spiral, `--float-cover` 25 on the ground cover joined to the soil, while the envelope holds.
313314

314315
[`sea-stack-arch`](showcase/sea-stack-arch/) — the tenth `nature` piece: procedural coastal diorama tile (a fragment of a bedded sandstone headland at the sea's edge as one eroded mass: eighteen level hard and soft beds running on from the legs into the roof and the stack, jointed faces leaning back, battered and flared at the foot, one weathering field read on the face through every bed, fallen-out blocks and open joints, soft beds undercut to a wave-cut notch; a natural arch of two legs curving in to meet at the crown under a roof that steps down seaward; a tapering stack standing in the sea; the sea filling the tile to its rim, foam at the shore and round the feet, a wave-cut platform with tide pools, a shingle cove, fallen blocks, boulders and pebbles, and a draped turf mat with sea grass and thrift cushions), whose beds biting each other and the roof biting both legs, stack over its footprint, feet sealed in the ground, clear aperture, level continuous bedding, undercut soft beds, sea level and ripple, contained water, seated foam, loose rock sealed and apart, rooted cover and ragged (not squared) rock are recomputed from the mesh, through the same pipeline. `--gap-lintel` exits 17 on every bed biting the one it lies on, `--lean-stack` 19 on the stack's mass over its footprint, `--cut-pillar` 20 on the feet sealed all round, `--close-arch` 21 on the clear aperture, `--tilt-beds` 22 on level, continuous bedding, `--flush-beds` 23 on the undercut, `--flat-sea` 24 on the water level and ripple, `--short-sea` 25 on the water contained, `--lift-foam` 26 on the foam at the waterline, `--perch-talus` 27 and `--pile-talus` 28 on the loose rock sealed and apart, `--float-cover` 29 on the cover rooted in the tops, `--tidy-rock` 31 on the rock ragged rather than squared, while the envelope holds.
316+
315317
[`sundial`](showcase/sundial/) — procedural garden sundial whose gnomon is inclined at the latitude and whose hour lines follow tan(H) = sin(lat)·tan(15°h), measured off the finished mesh, through the same pipeline. Falsifiers `--wrong-latitude` and `--linear-hours` exit 17.
316318

319+
[`mine-cart`](showcase/mine-cart/) — procedural narrow-gauge mine cart on a rail segment, riveted tub on flanged wheels over 30 lb rails, sleepers and ballast, through the same pipeline; every tread seated on its railhead and every flange clear of it. Falsifiers `--skip-decimate` exits 9, `--stray-vert` exits 15, `--lift-z` exits 16, `--float-wheel` exits 18, `--skew-axle` exits 19, `--wide-gauge` exits 20.
320+
317321
</details>
318322

319323
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
143143
- ~~Library ladder or book trolley with loose books as a game-prop showcase piece~~ **SHIPPED** (the trolley half) as `showcase/book-trolley/` — a double-sided library book truck on four swivel casters: arched end panels standing in skids, four sloped troughs each a tilted shelf and a backrest square to it, forty-seven spines-out hardbacks and two loose stacks on the deck; each trough book's fore-edge depth in its backrest is read off the mesh beside its shelf seat, `--off-back` and `--deep-back` exit 21 on it while every seat and the envelope still pass
144144
- Library rolling ladder (hooked top rollers riding a round rail, raked stiles, treads, floor wheels) as a game-prop showcase piece — the unbuilt half of the item above: a hook riding a round rail is a curved-on-curved contact that neither the trolley's flat backrests nor the yoke's hung ring exercise
145145
- 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
146-
- Mine cart on a rail segment as a game-prop showcase piece — flanged wheels seated on the railheads: every tread contact within a band of the rail top and every flange clearing the rail's inner face by a gauge band, so a cart riding up on a flange or dropping between the rails fails while seats and bbox still pass
146+
- ~~Mine cart on a rail segment as a game-prop showcase piece~~ **SHIPPED** as `showcase/mine-cart/` — riveted steel tub on four flanged wheels over 30 lb rails, spiked sleepers and ballast; every tread seated within −1.5..+0.5 mm of its railhead (`--float-wheel` exits 18), axles square (`--skew-axle` exits 19), flanges 3–10 mm clear of the railheads (`--wide-gauge` exits 20); `--skip-decimate` exits 9 on the LOD1 ratio band
147147
- Hinged garden gate as a game-prop showcase piece — strap hinges whose knuckles sit coaxial on the post pintles: knuckle axis-to-pintle axis distance within a band and the swing arc clearing the latch post, a pin-in-knuckle contact no existing piece tests
148148
- Mooring bollard with a coiled rope as a game-prop showcase piece — rope turns laid as stacked helices around the barrel: each turn resting on the one below (not interpenetrating, not floating), measured turn-to-turn off the mesh
149149
- Ship's wheel as a game-prop showcase piece — spokes and handles by exact radial repetition: equal angular spacing, every spoke end seated in the rim, hub/rim concentric, handles on the computed radius

‎docs/gallery/anvil/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Anvil</h1>
4545
<p>A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 72 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 73 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A London-pattern forged anvil with a thick face block, tapered horn and broad flared foot on a hooped oak stand, a cross-peen hammer on the floor beside it.">
5050
<img src="../assets/anvil-hero.webp" alt="A London-pattern forged anvil with a thick face block, tapered horn and broad flared foot on a hooped oak stand, a cross-peen hammer on the floor beside it." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -3571,7 +3571,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
35713571
</article>
35723572
</div>
35733573
</section>
3574-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 72 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
3574+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 73 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
35753575
</main>
35763576
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
35773577
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>

‎docs/gallery/apothecary-shelf/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Apothecary Shelf</h1>
4545
<p>A procedural apothecary shelf — housed shelves, gallery rails, a drawer bank and an arched crest, stocked with fifteen lathed bottles, flasks and glazed jars, each corked or lidded and labelled — carried through UVs, bake, LOD, convex collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 72 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 73 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars.">
5050
<img src="../assets/apothecary-shelf-hero.webp" alt="A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -3420,7 +3420,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
34203420
</article>
34213421
</div>
34223422
</section>
3423-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 72 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
3423+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 73 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
34243424
</main>
34253425
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
34263426
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>

0 commit comments

Comments
 (0)