feat: attribute-domain-shear example + count/numeric-contract housekeeping#111
Merged
Conversation
Both files' prose said 23 examples while README, the plugin manifest, and CI all agree on 38 (derived from .cursor-plugin/plugin.json: 12 skills, 6 rules, 2 templates, 17 snippets, 38 examples — every other count in the two files verified correct as written). Example-shipping commits keep these lines current from here. Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Two shipped examples have contracts with no visual signature: vertex-weight-limit's pose-preserving prune and triangulate-tangents' mikktspace field both falsify pixel-identical, and both declared it honestly. Layer 1 now makes that an explicit, narrow exception: the README declares the contract numeric, the render depicts subject and setup legibly rather than a break that cannot exist, and falsification is satisfied by naming why. Anchored to the two precedents by name so the exception stays narrow — where a visual witness is possible, it is still required. Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Witnesses what POINT vs CORNER means on Mesh.color_attributes once a mesh has shared vertices: an 8-wedge pinwheel around one raised hub. CORNER authoring holds each wedge's exact color at the hub (err <= 1e-6); the naive per-wedge POINT loop rewrites every shared vertex once per neighbor and the last write wins — hub reads palette[K-1], ring verts read palette[i] except the wrap-around vert 0, and the measured shear equals the palette closed form (0.751031) exactly. Storage sizes asserted per domain (3K loops vs K+1 verts). Byte-identical on 4.5.11 and 5.1.2. Falsified: corner corruption (exit 4), reversed write order (exit 5), ring corruption (exit 6), constant palette collapsing the shear (exit 7). Companion to color-attribute-wheel, not a repackage: that one covers domain sizing and active_color; this one covers what the domains mean on shared topology. Render path gated with check_framing (0.837x/0.478y, margins >= 0.081); dual pinwheel still carries the broken state in-frame — the POINT fan is the falsification variant. Count prose bumped to 39 across README/CLAUDE/AGENTS. Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Attribute domain shear + two housekeeping commits
New example witnessing
POINTvsCORNERsemantics onMesh.color_attributes— plus the two housekeeping commits that opened the branch (count-prose fix, numeric-contract exception codified).Housekeeping
docs:count-prose fix. AGENTS.md and CLAUDE.md said "23 examples" while README, the manifest, and CI all agree on 38 (derived from.cursor-plugin/plugin.json; every other count in both files verified correct as written). Example-shipping commits keep the lines current — this PR moves them to 39.docs:numeric-contract exception in VISUAL-STYLE Layer 1. Codifies whatvertex-weight-limit(pose-preserving prune) andtriangulate-tangents(mikktspace field) already declared honestly: a contract with no visual signature is declared numeric in the README, the render depicts subject and setup legibly, and falsification names why. Anchored to those two precedents so the exception stays narrow.The example
examples/attribute-domain-shear/— an 8-wedge pinwheel around one raised hub vertex shared by every wedge (plus a shared outer ring). The contract, all closed form:len(loops)== 3K; POINT attr ==len(vertices)== K+1.Companion to
color-attribute-wheel(domain sizing,active_color, shader Attribute node) — this covers the meaning of the domains on shared topology, not a repackage.Falsification evidence
All restored; final check exits 0 with
attribute-domain-shear OK corner_exact point_shear=0.751031.Framing (measured, gallery_framing silhouette)
fill 0.837x / 0.478y, margins L0.081 R0.081 B0.089 T0.133 — in band on 5.1.2 and identical on 4.5.11. Gate wired via
check_framing(exit 10). Draft 1 was gate-rejected (fill 1.000, margins 0) — the gate caught it before any artifact shipped.Visual-pass log (4 render iterations)
Runtime
Local binaries:
.scratch/blender-5.1.2-windows-x64/blender.exe(reports Blender 5.1.2),.scratch/blender-4.5.11-windows-x64/blender.exe(reports Blender 4.5.11 LTS). Check-only: exit 0 on both, byte-identical output, sub-second runtime (new smoke step is check-only, so smoke runtimes are unaffected). CI floats within series per CLAUDE.md.Live-run vs inspection-only
Test plan
blender --background --python examples/attribute-domain-shear/attribute_domain_shear.py --→ exit 0,point_shear measured=0.751031 closed_form=0.751031(4.5 LTS and 5.1).-- --output out.png→ framing lines printframing_ok, exit 0, artifact written.