Skip to content

Commit e256a9a

Browse files
TMHSDigitalclaude
andauthored
feat(showcase): add rope-bridge (#251)
A rope footbridge was the first unclaimed showcase candidate on the roadmap. Its failure mode no bounding box can see is the deck shape: two straight ramps with the same ends and sag pass every envelope check. The piece fits a least-squares parabola to the plank tops read off the mesh, and --vee-deck exits 19 on that fit while its sag stays in band. Also asserts named supports, rope-end and tenon bites, banded plank seats and lashing hoops, one connected assembly, plumb, plank pitch, rail height, edge treatment and baked texels per UV island, each with a falsifier proven on 4.5.11, 5.1.2 and 5.2.1. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent 940aad9 commit e256a9a

14 files changed

Lines changed: 4329 additions & 9 deletions

File tree

‎.cursor-plugin/plugin.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@
165165
"showcase/wooden-ladder",
166166
"showcase/hay-bale",
167167
"showcase/crate-stack",
168-
"showcase/stone-archway"
168+
"showcase/stone-archway",
169+
"showcase/rope-bridge"
169170
]
170171
}

‎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, 28 pieces (sibling of examples/; see showcase/README.md)
25+
showcase/<name>/ - Budget-conformance props, 29 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>28 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>29 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 28 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 29 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>28 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>29 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>
@@ -137,6 +137,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
137137
<a href="showcase/hay-bale/"><img src="showcase/hay-bale/preview.webp" width="24%" alt="Hay bale: a bound straw bale with two sisal twine belts on a dark studio floor" /></a>
138138
<a href="showcase/crate-stack/"><img src="showcase/crate-stack/preview.webp" width="24%" alt="Crate stack: three slatted shipping crates stacked and yawed, each with iron corner straps and runners, on a dark studio floor" /></a>
139139
<a href="showcase/stone-archway/"><img src="showcase/stone-archway/preview.webp" width="24%" alt="Stone archway: a semicircular masonry arch with coursed piers, projecting imposts, nine voussoirs and a proud keystone, on a dark studio floor" /></a>
140+
<a href="showcase/rope-bridge/"><img src="showcase/rope-bridge/preview.webp" width="24%" alt="Rope bridge: a sagging plank deck on foot ropes between two pairs of log posts, with lashed hemp hand ropes, suspenders, and ropes staked to the ground, on a dark studio floor" /></a>
140141
</p>
141142

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

192193
[`hay-bale`](showcase/hay-bale/) — procedural bound hay bale with sisal twine through the same pipeline. Falsifier `--skip-decimate` exits 9.
193194

195+
[`rope-bridge`](showcase/rope-bridge/) — procedural rope footbridge whose plank deck is fitted to a parabola recomputed from the plank tops, with lashed hand ropes and staked foot ropes, through the same pipeline. Falsifiers `--vee-deck` exits 19, `--float-suspenders` exits 18.
196+
194197
</details>
195198

196199
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
133133
- ~~Bound hay bale as a game-prop showcase piece~~ **SHIPPED** as `showcase/hay-bale/` — bevelled loaf, end nap, two sisal twine belts; `--skip-decimate` exits 9 on the LOD1 ratio band
134134
- ~~Stack of shipping crates as a game-prop showcase piece~~ **SHIPPED** as `showcase/crate-stack/` — one generator called three times with a per-instance seed driving yaw and plank widths, crates seated on the lid below; `--same-seed` exits 20 on the per-instance variation budget, `--float-stack` exits 18 on the seat
135135
- ~~Keystone archway with voussoirs as a game-prop showcase piece~~ **SHIPPED** as `showcase/stone-archway/` — coursed piers, projecting imposts, nine voussoirs, proud keystone; the intrados circle fit is recomputed from vertex positions and `--off-circle` exits 19 on it while leaving every other budget passing
136-
- Rope bridge (planks, rope rails, sag between anchors) as a game-prop showcase piece
136+
- ~~Rope bridge (planks, rope rails, sag between anchors) as a game-prop showcase piece~~ **SHIPPED** as `showcase/rope-bridge/` — log posts, through-tenoned sills, twenty planks seated on laid foot ropes, lashed hand ropes, suspenders, staked tie-offs; a least-squares parabola is fitted to the plank tops and `--vee-deck` exits 19 on it with the sag still in band
137137
- Grain sacks (cloth sacks, some slumped, tied necks) as a game-prop showcase piece
138138
- Brazier (iron bowl on legs, coals, ash) as a game-prop showcase piece
139139
- Apothecary shelf (shelf unit, bottles and jars of varied form) as a game-prop showcase piece
36.7 KB
Loading
38.5 KB
Loading
59.7 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, 28 showcase pieces</span>
294+
<span class="count" id="count" role="status" aria-live="polite">51 examples, 29 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>
@@ -1210,6 +1210,17 @@ <h2><a href="stone-archway/">stone-archway</a></h2>
12101210
<a class="card-link" href="stone-archway/">View showcase piece<span class="sr-only"> stone-archway</span> <span aria-hidden="true">&rarr;</span></a>
12111211
</div>
12121212
</article>
1213+
<article class="card" data-tags="mesh export showcase">
1214+
<a class="card-media" href="rope-bridge/" tabindex="-1" aria-hidden="true">
1215+
<img src="assets/rope-bridge-hero.webp" alt="A wooden rope bridge whose plank deck sags between two pairs of log posts, with hemp hand ropes lashed to the posts, vertical ropes tying rail to deck, and foot ropes run back to ground stakes." loading="lazy" decoding="async" />
1216+
</a>
1217+
<div class="card-body">
1218+
<h2><a href="rope-bridge/">rope-bridge</a></h2>
1219+
<p class="teaches">A procedural rope footbridge — log posts, through-tenoned sills, twenty planks on two sagging foot ropes, lashed hand ropes, suspenders and staked tie-offs — carried through UVs, bake, LOD, compound collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
1220+
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 8768 tris, two materials with 1356 timber and 3348 rope faces, UVs in 0..1 with zero AABB overlap and 18.8 baked texels per island, outer AABB 4.619×1.073×1.480 m, zmin 0, hygiene 0 including zero coplanar cross-shell pairs, four posts and four stakes grounded, every rope end and sill tenon biting its host, all 20 planks seated 4.0 mm on both foot ropes, 12 lashing turns hooped 2.4 mm, one connected assembly of 60 shells, posts plumb, plank pitch within 0.08 mm, hand ropes 0.87 m over the deck, and every plank top within 2.97 mm of a least-squares parabola with a 0.220 m sag. --vee-deck exits 19 on the parabola fit with its sag still in band; --float-suspenders exits 18 on the contact graph.</p>
1221+
<a class="card-link" href="rope-bridge/">View showcase piece<span class="sr-only"> rope-bridge</span> <span aria-hidden="true">&rarr;</span></a>
1222+
</div>
1223+
</article>
12131224
</div>
12141225
<p class="noresults" id="noResults" hidden>Nothing matches the current filters.
12151226
<button class="chip" id="resetFilters" type="button">Clear search and tags</button></p>
@@ -1239,7 +1250,7 @@ <h2><a href="stone-archway/">stone-archway</a></h2>
12391250
var tagsToggle = document.getElementById('tagsToggle');
12401251
var toTop = document.getElementById('toTop');
12411252
var total = cards.length;
1242-
var COUNT_LABEL = '51 examples, 28 showcase pieces';
1253+
var COUNT_LABEL = '51 examples, 29 showcase pieces';
12431254
var LS_KEY = 'bdt-gallery-density';
12441255
var reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
12451256

0 commit comments

Comments
 (0)