You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 9e9e7ce
Browse filesBrowse the repository at this point in the historyBrowse files
feat: attribute-domain-shear example + count/numeric-contract housekeeping (#111)
* docs: correct the stale example count in AGENTS.md and CLAUDE.md
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>
* docs: codify the numeric-contract exception in VISUAL-STYLE Layer 1
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>
* feat: add attribute-domain-shear example
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>
---------
Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
@@ -739,6 +739,27 @@ Companion to [`depsgraph-export`](examples/depsgraph-export/) (evaluated-vs-
739
739
original) and [`shape-key-blend`](examples/shape-key-blend/) (non-destructive
740
740
evaluation). Break the mirror and the render is literally half a car.
741
741
742
+
</td>
743
+
</tr>
744
+
<tr>
745
+
<tdwidth="46%"valign="middle">
746
+
<ahref="examples/attribute-domain-shear/"><imgsrc="examples/attribute-domain-shear/preview.webp"alt="Attribute domain shear: two eight-petal pinwheels side by side — left CORNER-domain with crisp colored petals to the hub, right naive POINT-domain smeared into a swirl, proving last-write-wins shear at shared vertices" /></a>
Copy file name to clipboardExpand all lines: ROADMAP.md
+1-2Lines changed: 1 addition & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -100,7 +100,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
100
100
- Gallery coverage follow-ups from the GPv3 review: light-linking (`grease-pencil-rosette`, `armature-bend`, `text-version-stamp`, `image-pixels-testcard`, and `vse-cut-list` shipped first)
101
101
-~~UV-layer authoring witness~~**SHIPPED** as `examples/uv-layer-grid/` — `create_grid(..., calc_uvs=True)` silent no-op without a pre-existing UV layer; closed-form UV fill + explicit assignment fallback; dual-panel render (flat texel (0,0) vs neon checker)
102
102
-~~Image save-format witness~~**SHIPPED** as `examples/png-exr-alpha/` — float→PNG is RGBA16 and false-unpremultiplies as if associated-alpha (closed-form err 0.98 at RGB 0.02 / a=1/255); OpenEXR preserves float RGBA; byte→PNG is straight RGBA8; `EXR color_mode='RGB'` drops alpha
103
-
- Attribute domain witness: writing a POINT-domain color attribute and reading it as if it were CORNER (or vice versa) silently shears colors across shared verts — companion to `color-attribute-wheel`
103
+
-~~Attribute domain witness~~**SHIPPED** as `examples/attribute-domain-shear/` — POINT vs CORNER semantics on an 8-wedge pinwheel with one shared hub: CORNER authoring exact (hub corners disagree by face, err ≤ 1e-6), naive per-wedge POINT loop shears to the last write at hub + ring verts, measured deviation == palette closed form (0.751031); byte-identical on 4.5.11 and 5.1.2; crisp-vs-smeared dual pinwheel still — companion to `color-attribute-wheel`
104
104
-~~Light-linking collection witness~~**SHIPPED** as `examples/light-link-studio/` — the API is `obj.light_linking` on the light OBJECT (`ld.light_linking` is an AttributeError on both versions); linked ratio 4.0x at projected-center luminance samples, unlink raises the decoy 244–251% with 0.0% hero drift in the same two-render check; EEVEE Next honors linking too (5.5x on 4.5.11, 5.9x on 5.1.2), Cycles pinned for deterministic samples
105
105
-~~VSE sequences-to-strips witness~~**SHIPPED** as `examples/vse-cut-list/` — `.sequences` removed on 5.x (4.5 bridges to `.strips`), `new_effect` end kwarg `frame_end=` (4.5) vs `length=` (5.x), `frame_final_*` deprecated in favor of `left_handle`/`right_handle`/`duration`, TRANSFORM effect type removed, GAMMA_CROSS clamps to the source overlap, effect strips consume inputs only when stacked above them, same-scene scene strips render transparent; save/reload round-trip + tiny-render pixel witness
106
106
-~~glTF export round-trip witness~~**SHIPPED** as `examples/gltf-export-roundtrip/` — `export_yup` bakes `(x,y,z)→(x,z,−y)` into vertex data with no node rotation (probed identical on 4.5.11 and 5.1.2), `export_apply` ships the evaluated mesh (one disk vertex per evaluated loop), TEXCOORD_0 is V-flipped on disk, per-triangle material bindings survive; exporter/importer RNA signatures byte-identical between 4.5.11 and 5.1.2 (guarded against future renames); `Mesh.calc_normals()` removal on 5.x surfaced during authoring
@@ -127,7 +127,6 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
127
127
- Bicycle-wheel radial witness: spokes via radial Array with object offset — exact angular spacing, spoke count, hub/rim concentricity, every evaluated spoke endpoint on its computed rim coordinate
128
128
-~~mesh-hygiene-audit witness~~**SHIPPED** as `examples/mesh-hygiene-audit/` — engine-ingest topology checklist on a stepped street electrical pedestal: no ngons, no loose verts, manifold edges (exactly 2 faces), no zero-area faces (`min_area` printed), positive signed volume, Euler `V−E+F==2` (24/44/22, volume 0.989248); byte-identical on 4.5.11 and 5.1.2; dual-panel dirty vs clean still
129
129
- UV atlas pack witness — lightmap/unique UV island packing with non-overlap + utilization closed forms (deferred behind hygiene/origin; overlaps `uv-layer-grid` / `triangulate-tangents` / `gltf-export-roundtrip` UV arc)
130
-
- Attribute domain witness: writing a POINT-domain color attribute and reading it as if it were CORNER (or vice versa) silently shears colors across shared verts — companion to `color-attribute-wheel`
131
130
132
131
-~~Gallery framing recomposition worklist~~**DRAINED**: all four recomposition cases restaged and gated with `check_framing` — depsgraph-export (0.984x/touch→0.812x; cube+dome recentered, aim-based camera), vertex-weight-limit (touch B→0.867y; more frontal camera, lower aim, base in frame), triangulate-tangents (0.334x→0.833y; 2x-class move-in plus Key/Glint trim that also cleared a pre-existing dome blowout), text-version-stamp (0.663x→0.719x; moved in with aim on the stamp center, dead third gone). The seven marginal cases were camera-nudged in the preceding sweep; deviations documented in #108 (damped-track-aim, wave-displace); sky-texture-sun-elevation is a measurement artifact (world subject — report-only if wired). Remaining: nothing on the framing worklist — future examples inherit the gate at authoring time.
0 commit comments