kwabs22 Claude Opus 5.5 commited on
Commit
64b0f23
Β·
1 Parent(s): 98ca16a

Archive QA round 4; document that rings merge disjoint outlines per section

Browse files
Files changed (2) hide show
  1. SPEC.md +4 -3
  2. feedback/vli-qa-feedback-2026-10-30.md +18 -0
SPEC.md CHANGED
@@ -129,9 +129,10 @@ a rung doesn't reduce, so a stalled mesh never shows as several identical rungs.
129
  outline sampled at `samples` evenly spaced angles from the section's centre (the
130
  farthest crossing per ray), joined into bands with flat caps. Every band is one
131
  paper strip and every vertex is (ring, angle); the report lists each ring's height,
132
- centre and radii, so it can be checked by hand. One stack per object: branching or
133
- overhanging parts (a lamp's arm and shade) merge into one envelope, and heights with
134
- no section are skipped.
 
135
 
136
  ### Papercraft (rings)
137
 
 
129
  outline sampled at `samples` evenly spaced angles from the section's centre (the
130
  farthest crossing per ray), joined into bands with flat caps. Every band is one
131
  paper strip and every vertex is (ring, angle); the report lists each ring's height,
132
+ centre and radii, so it can be checked by hand. One stack per object: each ray takes
133
+ the farthest crossing, so disjoint outlines in one section merge (two legs become one
134
+ band bridging the gap), branching or overhanging parts (a lamp's arm and shade) merge
135
+ into one envelope, and heights with no section are skipped.
136
 
137
  ### Papercraft (rings)
138
 
feedback/vli-qa-feedback-2026-10-30.md CHANGED
@@ -140,3 +140,21 @@ Seed-0 baseline reproduced bit-identically from the first session: uid `4459b90d
140
  **One new observation for round 4:** deep rungs can *spatially collapse*. The 384-face rung's `surface_area_m2` is 0.0017 vs 0.2233 on the 1,000 rung (~130Γ— area loss) β€” the stall guard checks face count only, so a degenerate blob can pass as a legitimate rung, which misleads the papercraft/materialization use-case. Suggested guard addition: stop (or keep the previous rung) when a rung's area drops sharply, e.g. below ~50% of the previous rung's area. Page budgets look unaffected β€” the 400-face page cat keeps a normal ~0.3 m vertex spread β€” so this is a ladder-quality issue, not a page issue.
141
 
142
  Still open: `use` back-swap after a skip shifts indices; the UI visual click-test; P2-7 dictionary drift (now applies to the ForgeCAD SimReady source too).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  **One new observation for round 4:** deep rungs can *spatially collapse*. The 384-face rung's `surface_area_m2` is 0.0017 vs 0.2233 on the 1,000 rung (~130Γ— area loss) β€” the stall guard checks face count only, so a degenerate blob can pass as a legitimate rung, which misleads the papercraft/materialization use-case. Suggested guard addition: stop (or keep the previous rung) when a rung's area drops sharply, e.g. below ~50% of the previous rung's area. Page budgets look unaffected β€” the 400-face page cat keeps a normal ~0.3 m vertex spread β€” so this is a ladder-quality issue, not a page issue.
141
 
142
  Still open: `use` back-swap after a skip shifts indices; the UI visual click-test; P2-7 dictionary drift (now applies to the ForgeCAD SimReady source too).
143
+
144
+ ---
145
+
146
+ ## 7. Verification round 4 (2026-10-30, after the clustering/rings push) β€” all pass, one big addition
147
+
148
+ | Item | Live result |
149
+ |---|---|
150
+ | Clustering fallback in `decimate` | βœ“ `_clustered`/`_cluster_to` (grid-snap vertices + log-bisection on cell size) takes over when quadric stalls β€” the floor class of bugs is closed in principle, including SimReady CAD meshes (docstring cites a lamp stalling at ~21k faces on sliver triangles) |
151
+ | Area-collapse guard | βœ“ `_collapsed` implemented as suggested (extents + area vs previous rung; original excluded β€” welding double-sided faces legitimately halves area). The degenerate 384 rung is gone |
152
+ | NEW `rings` rung | βœ“ `rings(mesh, 8, 16)` β€” planar circumferences by ray casting; bands join into one paper strip each; profile attached to the rung metadata and returned in the report. On cat 138377: 256 faces, 130 verts, watertight, **area 0.2385 mΒ² (sane)**, and the 8Γ—16 profile reads as a sitting cat (base ring rβ‰ˆ0.098, leg gaps at y=0.045, tail kick: center shifts βˆ’0.108 at y=0.255, head top rβ‰ˆ0.014 at y=0.297). This is the SPEC's "materialization not built yet" gap under construction |
153
+ | Reroll as queue rotation | βœ“ `alternatives.append(chosen); chosen = alternatives.pop(0)` β€” seed-independent; matches the round-2 observation exactly (chosen `1f32bc` popped, skipped `by-nc` during settle, landed `138377`, old choice at the back) |
154
+ | Clean generation reject | βœ“ now raised in `grammar.next_tier` itself |
155
+
156
+ Ladder shape note: for this cat the descent ends at 1,000 faces β€” the 250 request trips `_collapsed` (the clustered output lost >50% area) and the rings rung takes over as the low-poly representative. Healthy output, no degenerate rungs. Minor SPEC note: `rings` merges disjoint outlines per section (farthest-hit per ray), so a two-legs section becomes one band bridging the gap β€” fine for papercraft, worth documenting.
157
+
158
+ **Still open (from the apple demo, unchanged by this push β€” confirmed by re-render):** grey SimReady objects (average the already-downloaded 256px thumbnail into `base_color`), dark no-sun scenes (`sun: null` β†’ near-black render; suggest default daylight or a "what light?" question), cross-tier hint in questions (`q3 "which table?"` shows `alternatives: []` while 101 Objaverse tables sit one reject away), thumbnails as URLs so variants can be chosen by look (the 9 `food_produce_apple_*` variants are the real path to "a green apple"). Plus the minor `use`-back-swap check and the UI visual click-test.
159
+
160
+ > Note (agent, 2026-10-30): the four apple-demo items above were addressed in 98ca16a, pushed after this round was written.