Skip to content

Commit 20373d4

Browse files
committed
Merge origin/main into fix/hero-car-mirror-symmetry
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
2 parents e208932 + 16f9b65 commit 20373d4

24 files changed

Lines changed: 1028 additions & 255 deletions

‎.cursor-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "blender-developer-tools",
33
"displayName": "Blender Developer Tools",
44
"description": "Cursor and Claude Code skills, rules, snippets, and templates for Blender Python add-on and scripting development",
5-
"version": "0.85.0",
5+
"version": "0.85.2",
66
"author": {
77
"name": "TMHSDigital",
88
"email": "contact@users.noreply.github.com"

‎CHANGELOG.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [0.85.2] - 2026-09-26
6+
7+
See [release notes](https://github.com/TMHSDigital/Blender-Developer-Tools/releases/tag/v0.85.2) for details.
8+
9+
## [0.85.1] - 2026-09-25
10+
11+
See [release notes](https://github.com/TMHSDigital/Blender-Developer-Tools/releases/tag/v0.85.1) for details.
12+
513
## [0.85.0] - 2026-09-25
614

715
See [release notes](https://github.com/TMHSDigital/Blender-Developer-Tools/releases/tag/v0.85.0) for details.

‎CLAUDE.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
88

99
## Project Overview
1010

11-
The **Blender Developer Tools** repository is at **v0.85.0**. It packages skills, rules, snippets, starter templates, and runnable smoke-gated examples for Blender Python development with Cursor and Claude Code. Coverage targets **Blender 5.2 LTS** (current stable) with **Blender 4.5 LTS** fallback. **Blender 5.1** is prior stable. There is no MCP server; content is consumed directly by the AI when working in Blender add-on or scripting projects.
11+
The **Blender Developer Tools** repository is at **v0.85.2**. It packages skills, rules, snippets, starter templates, and runnable smoke-gated examples for Blender Python development with Cursor and Claude Code. Coverage targets **Blender 5.2 LTS** (current stable) with **Blender 4.5 LTS** fallback. **Blender 5.1** is prior stable. There is no MCP server; content is consumed directly by the AI when working in Blender add-on or scripting projects.
1212

13-
**Version:** 0.85.0
13+
**Version:** 0.85.2
1414
**License:** CC-BY-NC-ND-4.0
1515
**Author:** TM Hospitality Strategies
1616

@@ -159,7 +159,7 @@ Stage with **explicit paths only** — never `git add -A` or `git add .`. Cursor
159159
- `docs/VISUAL-STYLE.md` is the **binding** render standard; deviations are defects.
160160
- **Framing gate:** Layer 1 framing is measured, not eyeballed — the example's `--output` render path calls the shared helper `examples/gallery_framing.py` (`check_framing`, exit 10 on violation) before writing the still: hero fill 0.70–0.90 of frame in at least one axis, every element that matters clearing all four edges by ≥ 0.02. The check-only path never invokes it, so smoke runtimes are unaffected. The helper measures; call sites enforce. Bleed compositions call `measure_framing_deviation` and assert their own cap at the call site — `check_framing` has no `deviation=` flag.
161161
- **Contact-sheet gate:** composite the candidate hero beside the pinned calibration set — currently `armature-bend`, `damped-track-aim`, `bmesh-gear` — commit the composite under `docs/gallery/contact-sheets/`, link it in the PR body, and report per-criterion verdicts (stage darkness, wedge warmth, subject fill, saturation, thumbnail legibility) including mean luminance versus the calibration images. A claim without the committed composite is not acceptable evidence. **This list is the canonical home of the pinned set** — update it here when a new example outclasses a member; `docs/new-example-prompt.md` points here rather than naming members. The longer "calibration references" list in `docs/VISUAL-STYLE.md` is a style reference, not this contact-sheet set. Tooling: `python scripts/render_hero.py --blender PATH --only NAME` renders the README `--output` command and writes the hero and preview webps (the one committed PNG-to-webp path); `python scripts/contact_sheet.py NAME` builds the composite in the committed format and prints each tile's luma, stage, wedge warmth and saturation; `python scripts/measure_hero_drift.py` checks committed heroes against what the code renders now.
162-
- **Asset-sheet gate (asset-type examples — game props/kits):** composite the hero asset rendered alone (neutral three-quarter view, plain studio lighting, no staging tricks, no labels, no comparison props) beside the pinned asset-quality reference set — currently `collision-hull-proxy`, `custom-normals-shade`, `vertex-weight-limit`, `lod-decimate-chain` — rendered the same way; commit under `docs/gallery/asset-sheets/`, link it in the PR body, and report a verdict. The asset ships only if it is not identifiable as the least-designed object in that lineup — a strong scene can carry a weak model; this gate removes the scene. **This list is the canonical home of the reference set** — update it here when a new asset outclasses a member. The measurable floors behind the gate (naming, material variation, edge treatment) live in `examples/gallery_asset_quality.py` — render path only, same call pattern as `gallery_framing`, exit 11 on violation — with the calibration table and dropped-floor evidence in `docs/VISUAL-STYLE.md` § Asset quality.
162+
- **Asset-sheet gate (asset-type examples — game props/kits):** composite the hero asset rendered alone (neutral three-quarter view, plain studio lighting, no staging tricks, no labels, no comparison props) beside the pinned asset-quality reference set — currently `collision-hull-proxy`, `socket-attach-points`, `vertex-color-ao`, `wheelbarrow`, `apothecary-shelf` — rendered the same way; commit under `docs/gallery/asset-sheets/`, link it in the PR body, and report a verdict. The asset ships only if it is not identifiable as the least-designed object in that lineup — a strong scene can carry a weak model; this gate removes the scene. **This list is the canonical home of the reference set** — update it here when a new asset outclasses a member. A reference may be an example or a showcase piece. Tooling: `python scripts/asset_sheet.py --blender PATH NAME` renders the candidate and this set (read from this line) through `scripts/asset_sheet_panel.py` and writes the composite. The measurable floors behind the gate (naming, material variation, edge treatment) live in `examples/gallery_asset_quality.py` — render path only, same call pattern as `gallery_framing`, exit 11 on violation — with the calibration table and dropped-floor evidence in `docs/VISUAL-STYLE.md` § Asset quality.
163163
- **Falsification:** every check must be proven to fail once — break the contract, observe the non-zero exit, restore — with the probe and the measured error reported in the PR body. An assertion that cannot fail witnesses nothing.
164164
- **After gallery regeneration** (`python scripts/build_gallery.py`), read the **generated HTML** character by character — the `<img alt>` text and witnesses callouts in `docs/gallery/index.html` and `docs/gallery/<name>/index.html` — not just `examples/gallery.json`. Precedent: the `teaches.split(".")[0]` bug truncated 14/21 card alts at dotted API paths like `bmesh.ops` while the source JSON looked fine (fixed in PR #68).
165165
- **Playwright gallery captures:** gallery `<img>` tags lazy-load, so force them first (`document.querySelectorAll('img').forEach(i => i.loading = 'eager')`, then wait). **Scroll the target card into view and take a viewport capture** — `scrollIntoView({block:'center', behavior:'instant'})`, short wait, `browser_take_screenshot` with `fullPage` omitted. A `fullPage` capture is NOT a workaround: on a tall gallery page it renders every card image blank even when the images are verified loaded (`complete === true`, `naturalWidth === 1280`, `opacity === 1`) — measured on the 45-card grid at 1425x4516. Verify load state via `browser_evaluate` rather than trusting the pixels.

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ or expand a category below.
232232
<table>
233233
<tr>
234234
<td width="46%" valign="middle">
235-
<a href="examples/swatch-grid/"><img src="examples/swatch-grid/preview.webp" alt="Swatch grid: a three-by-two grid of shaded spheres - polished gold and brushed copper metals, red and blue plastics, an emissive orange, and a matte white - against a dark studio backdrop, rendered with EEVEE" /></a>
235+
<a href="examples/swatch-grid/"><img src="examples/swatch-grid/preview.webp" alt="Swatch grid: a tiered material library in a dark studio - six spheres seated in chrome collars on graphite plinths, mirror gold, brushed copper and red plastic on tall plinths behind blue plastic, a glowing orange emissive globe and matte white in front, rendered with EEVEE" /></a>
236236
</td>
237237
<td valign="middle">
238238

@@ -350,7 +350,7 @@ Gallery still is a dual-elevation diptych so the contract reads at thumbnail sca
350350
<table>
351351
<tr>
352352
<td width="46%" valign="middle">
353-
<a href="examples/bmesh-gear/"><img src="examples/bmesh-gear/preview.webp" alt="Bmesh gear: a machined brass 14-tooth gear with concentric turning marks catching the light, tilted at a three-quarter angle on a dark studio floor" /></a>
353+
<a href="examples/bmesh-gear/"><img src="examples/bmesh-gear/preview.webp" alt="Bmesh gear: a brass 14-tooth gear leaning back on a dark display wedge, its lathe-turned face catching a soft highlight that fans from the centre and its hobbed tooth flanks lit against the stage" /></a>
354354
</td>
355355
<td valign="middle">
356356

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Roadmap
44

5-
**Current:** v0.85.0
5+
**Current:** v0.85.2
66

77
Themes are listed in order. Shipped themes note the release they landed in (for reference,
88
not a commitment); upcoming themes are intentionally **not** pinned to a version number, so

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.85.0
1+
0.85.2

‎docs/VISUAL-STYLE.md‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,23 @@ violation; never imported by a check-only path):
130130
(`bmesh-gear` measures 0.667); raw boxes (1.0) fail.
131131

132132
Calibrated empirically against the gallery's own assets, exactly as the
133-
0.02 margin floor was:
133+
0.02 margin floor was. The four new reference rows were measured on the
134+
isolated asset by `scripts/asset_sheet_panel.py` (the sheet renderer prints
135+
the floors per panel); compactness was not re-measured for them. The three
136+
former references passed every floor and were still demoted by eye in the
137+
2026-09 gallery review — the floors cannot tell a primitive-built rocket
138+
from a designed wheelbarrow, which is the Status section below in practice:
134139

135140
| asset | parts | materials | edge90 | compactness (info only) |
136141
| --- | --- | --- | --- | --- |
137142
| collision-hull-proxy (reference) | 16 | 6 | 0.044 | 65.9 |
138-
| custom-normals-shade (reference) | 39 | 2 | 0.288 | 31.0 |
139-
| vertex-weight-limit (reference) | 1 | 4 | 0.150 | 34.8 |
140-
| lod-decimate-chain (reference) | 3 | 4 | 0.019 | 79.1 |
143+
| socket-attach-points (reference) | 21 | 32 | 0.027 | — |
144+
| vertex-color-ao (reference) | 11 | 11 | 0.171 | — |
145+
| wheelbarrow (reference, showcase) | 1 | 2 | 0.216 | — |
146+
| apothecary-shelf (reference, showcase) | 1 | 6 | 0.055 | — |
147+
| custom-normals-shade (former reference) | 39 | 2 | 0.288 | 31.0 |
148+
| vertex-weight-limit (former reference) | 1 | 4 | 0.150 | 34.8 |
149+
| lod-decimate-chain (former reference) | 3 | 4 | 0.019 | 79.1 |
141150
| depsgraph-export (weak) | 2 | 1 | 1.000 | 23.9 |
142151
| text-version-stamp (weak) | 1 | 1 | 1.000 | 405.3 |
143152
| bmesh-gear (simple, honest) | 1 | 1 | 0.667 | 18.3 |
49 KB
Loading
-24.3 KB
Loading
-2.55 KB
Loading

0 commit comments

Comments
 (0)