The hospital gown's surface renders as triangular shards wherever it appears — in the live ED room and
in an isolated bake capture of a different actor. It is also the only garment in the fleet whose
triangle count is an order of magnitude out of line.
MY GRADE, native resolution, no upscale
tools/openclinxr/evidence/issue-714/bodice-band-1to1.png, 1060x585, a 1:1 crop of a 4096 render of
mpfb-gown-adult-patient.glb through the model-vetting three.js path:
- triangular sawtooth spikes running down both vertical seam lines
- a shattered region at the sternum and upper chest
- spikes along the shoulder and the lower hem
- two orange-tan slivers mid-chest and one upper-left that are skin visible through the garment, so
that region is open rather than merely faceted
#712's measurement found the same appearance in the live ed_chest_pain_priority_v1 capture, and
established what it is NOT: not skinning weights, not a bone transform, not a morph, not vertex
displacement. The mesh's current AABB sits within 1.25x of its bind AABB and the pixels land exactly
where the measured geometry is.
Measured 2026-08-28 across every shipped humanoid
| asset |
gown/garment primitive |
triangles |
vertices |
mpfb-gown-inspect |
..._hospital_gown_phenotype_L0 |
57,073 |
28,852 |
mpfb-gown-adult-patient |
..._hospital_gown_phenotype_L0 |
29,185 |
14,899 |
ed_chest_pain_spouse_adult |
open cardigan L1 |
7,829 |
4,468 |
ed_chest_pain_spouse_adult |
casual top L0 |
4,146 |
2,161 |
peds_anxious_parent |
open cardigan L1 |
8,009 |
4,506 |
peds_anxious_parent |
casual top L0 |
4,069 |
2,101 |
peds_fever_patient_child |
phenotype L0 |
4,883 |
2,565 |
peds_nurse_kevin |
scrub pocket L1 |
4,076 |
2,106 |
peds_nurse_kevin |
scrub top L0 |
4,170 |
2,158 |
peds_patient_child |
exam t-shirt L0 |
3,887 |
2,042 |
Every non-gown real garment falls between 3,887 and 8,009 triangles. The hospital gown carries 4x to
15x that, and it is the only one that renders as shards.
What is NOT established
That the triangle density is the cause. It is a correlation across nine primitives in seven
assets, and it is equally consistent with density being a symptom of the same fold generation that
produces the shards. CAUSE NOT DETERMINED — do not take the correlation as a mechanism.
The two obvious readings, unranked, and they may both be wrong: the fold wave
(_fold_amp686 = 0.034, _fold_k686 = 16 in automate_blender.py) subdivides the surface past what
the shell can carry; or the gown's shell is generated at a different base resolution from every other
garment and the wave merely makes the result visible.
The first measurement, before any product edit
Compare the hospital gown's surface against a garment that renders clean — peds_nurse_kevin's scrub
top at 4,170 triangles is the known-good column, same pipeline, same actor family. Report edge-length
distribution, triangle aspect ratios, normal discontinuity across adjacent faces, and boundary-edge
count for both. That says whether the gown's surface is degenerate or merely dense.
tools/openclinxr/evidence/gown-shard-mechanism-measure.ts already walks the gown asset and is the
instrument to extend rather than replace.
Do not
Report these
If any proof cannot pass as written, OR passes trivially against the ambient measured range, OR
asserts the opposite direction from the defect, say so in your first report, at the moment you find
it.
If the premise here turns out to be false, say so immediately. Never narrow or weaken a clause so that
it passes.
Report any out-of-scope wrongness you saw and are not fixing, naming the object and what is wrong. The
detached trouser waistband (#320) and the unlit room (#526) are already carded.
Write your report with the section headers IN-SCOPE:, OUT-OF-SCOPE:, CLAIM: and NOT TESTED: in
that colon form.
factory_step: clothing_consume
The RED is planted at 006bac1a
tools/openclinxr/evidence/the-hospital-gown-surface-is-as-smooth-as-a-garment-that-renders.test.ts.
Clause (1) is it.fails and reds on the real defect; three counterweights are green.
The metric is the share of interior edges whose two faces meet past 60 degrees, from GEOMETRIC face
normals derived from positions, after welding vertices by position at 5 decimal places. It is immune
to shading and to index splits at material or UV seams, and it is what "a field of triangular spikes"
means numerically. It deliberately does NOT bound the triangle count — a count is a quantity and
shards are a shape, so a count clause greens the moment the mesh is decimated while the surface stays
shredded.
Clause (1)'s threshold is measured at test time from the non-gown population rather than chosen here.
It resolves today to 3.47% against the gown's 19.32%, a 5.6x margin.
Destructive probes, all three fired and all three reverted, recorded in the plant commit:
pointing both gown subjects at clean geometry makes clause (1) pass; tightening the comparator ceiling
to 2.0% reds counterweight (3); lowering _fold_amp686 to 0.010 reds counterweight (2).
If the surface cannot be fixed inside this slice
Report the measurement and stop. That closes this card successfully.
The live: rule requires clause (1) to be flipped, and a clause you cannot honestly flip will fail
it. That is a defect in my contract, not in your work, and I will resolve it the way #714 was: the
unmet clause is relocated verbatim to a new card with an inverted guard at the origin. Do not flip
the clause to make the proof pass, and do not weaken it.
CORRECTED 2026-08-28 (second pass) — read this before the sections above
Three candidate causes are measured dead. Do not re-derive them.
| candidate |
verdict |
evidence |
| the C0 wave corner |
contributes 0.65 of 16 points |
a phase-matched C1 cosine at the same amplitude and wave count moved the adult gown 19.32% → 18.67% and inspect 21.08% → 20.70%; gathers survived exactly |
| aliasing |
REFUTED |
two horizontal rings carry 315 and 197 distinct azimuth columns with phase concentration R = 0.067 and 0.034 — ~19 samples per period. torso_cols = 16 is the parametric grid, NOT the exported azimuthal count |
| slivers |
REFUTED |
sharp fraction against a minimum triangle area of 0 / 1e-8 / 1e-6 / 1e-5 m²: gown 19.32 / 18.01 / 16.98 / 11.58%, scrub top flat at 1.29%. At 1e-6 the gown is still 13x |
The C1 attempt is preserved at branch salvage/issue-747-c1-wave (bb461d64). It is NOT landed: it
changes shipped GLB bytes for 0.65 points, changes nothing a grader can see, and raises the
near-zero-area triangle count from 483 to 2,636 on the adult gown. Read it if useful; do not assume it.
What survives, as a HYPOTHESIS and not a measurement: the wave is too deep for its wavelength. At
k = 16 on a ~2.2 m chest circumference a half period is ~69 mm, and a 34 mm excursion gives a crest
dihedral near 90 degrees — which is the measured p90 of 86–90. CAUSE STILL NOT DETERMINED. The
arithmetic fits; nothing has tested it.
Counterweight (2) was amended at 6ffa5977 because it bounded the fix out
It pinned _fold_amp686 = 0.034 AND _fold_k686 = 16 as literal equalities, so every remaining
candidate was refused by the clause meant to stop one specific cheat. That was my defect.
It now bounds the property those constants stood in for: the gather's DEPTH, as an amplitude FLOOR at
0.030 — 88% of the shipped 0.034, so a trim is allowed and a flattening is not. The wave count is
unpinned on purpose: lowering k lengthens the wavelength and reduces the crest slope while leaving
depth untouched, which is the opposite of flattening.
Probes, all three fired and reverted: _fold_amp686 = 0.010 reds it; _fold_k686 = 8 stays green, so
the wavelength fix is legal; _fold_amp686 = 0.029 reds it.
The work is a SWEEP, and you do not pick the value
Do not choose an amplitude and a wave count and defend them. Produce a variant sweep and let the
orchestrator grade it.
Sweep _fold_k686 across at least four values spanning a real range (something like 4, 6, 8, 12) and
_fold_amp686 across at least two at or above the 0.030 floor. For each cell, rebake
mpfb-gown-adult-patient from current main and record the sharp fraction, the near-zero-area triangle
count, and the peak radial excursion into gown-vs-clean-surface.json beside the existing rows.
Then produce ONE labelled contact sheet of the rendered bodice band across the cells, native
resolution, on a TRACKED path under tools/openclinxr/evidence/issue-747/. Label every cell with its
k and amplitude. The orchestrator grades the sheet and picks the cell; you do not need clause (1) to
go green to succeed.
If no cell clears the ceiling, that is a finding and it closes the slice. Report the table and
stop. Do not chase the threshold, do not go below the amplitude floor, and do not decimate — #695 owns
decimation and clause (1) bounds a shape precisely so decimation cannot green it.
Duration is not a constraint here. A multi-hour bake sweep is acceptable and preferred over a guess.
done_when
- run:pnpm exec vitest run tools/openclinxr/evidence/the-hospital-gown-surface-is-as-smooth-as-a-garment-that-renders.test.ts
- live:tools/openclinxr/evidence/the-hospital-gown-surface-is-as-smooth-as-a-garment-that-renders.test.ts
- exists:tools/openclinxr/evidence/issue-747/gown-vs-clean-surface.json
gown-vs-clean-surface.json is the pre-fix comparison, written on a TRACKED path BEFORE any product
edit — a deliverable under a gitignored path has no land path. One row per garment primitive carrying
edge-length distribution, triangle aspect ratio, the dihedral distribution, and boundary-edge count,
so the question "is the gown's surface degenerate or merely dense" is answered from data rather than
from the triangle count.
The hospital gown's surface renders as triangular shards wherever it appears — in the live ED room and
in an isolated bake capture of a different actor. It is also the only garment in the fleet whose
triangle count is an order of magnitude out of line.
MY GRADE, native resolution, no upscale
tools/openclinxr/evidence/issue-714/bodice-band-1to1.png, 1060x585, a 1:1 crop of a 4096 render ofmpfb-gown-adult-patient.glbthrough the model-vetting three.js path:that region is open rather than merely faceted
#712's measurement found the same appearance in the live
ed_chest_pain_priority_v1capture, andestablished what it is NOT: not skinning weights, not a bone transform, not a morph, not vertex
displacement. The mesh's current AABB sits within 1.25x of its bind AABB and the pixels land exactly
where the measured geometry is.
Measured 2026-08-28 across every shipped humanoid
mpfb-gown-inspect..._hospital_gown_phenotype_L0mpfb-gown-adult-patient..._hospital_gown_phenotype_L0ed_chest_pain_spouse_adulted_chest_pain_spouse_adultpeds_anxious_parentpeds_anxious_parentpeds_fever_patient_childpeds_nurse_kevinpeds_nurse_kevinpeds_patient_childEvery non-gown real garment falls between 3,887 and 8,009 triangles. The hospital gown carries 4x to
15x that, and it is the only one that renders as shards.
What is NOT established
That the triangle density is the cause. It is a correlation across nine primitives in seven
assets, and it is equally consistent with density being a symptom of the same fold generation that
produces the shards. CAUSE NOT DETERMINED — do not take the correlation as a mechanism.
The two obvious readings, unranked, and they may both be wrong: the fold wave
(
_fold_amp686 = 0.034,_fold_k686 = 16inautomate_blender.py) subdivides the surface past whatthe shell can carry; or the gown's shell is generated at a different base resolution from every other
garment and the wave merely makes the result visible.
The first measurement, before any product edit
Compare the hospital gown's surface against a garment that renders clean —
peds_nurse_kevin's scrubtop at 4,170 triangles is the known-good column, same pipeline, same actor family. Report edge-length
distribution, triangle aspect ratios, normal discontinuity across adjacent faces, and boundary-edge
count for both. That says whether the gown's surface is degenerate or merely dense.
tools/openclinxr/evidence/gown-shard-mechanism-measure.tsalready walks the gown asset and is theinstrument to extend rather than replace.
Do not
_fold_amp686or_fold_k686. The bodice fold amplitude is 34 mm on a 10-22 mm standoff, so the wave valleys land inside the body #714's clause (3) and 73 gown vertices are inside the body at y 1.153-1.348 m after #714's derived clamp #746's counterweight (2) bothrefuse it, and flattening the gathers is not a fix for a surface that is shattered.
reports without establishing what the shards are, and Wire meshopt decimation into the humanoid pipeline — the silhouette holds at 2.81x and the station comes under budget #695 owns decimation.
Report these
If any proof cannot pass as written, OR passes trivially against the ambient measured range, OR
asserts the opposite direction from the defect, say so in your first report, at the moment you find
it.
If the premise here turns out to be false, say so immediately. Never narrow or weaken a clause so that
it passes.
Report any out-of-scope wrongness you saw and are not fixing, naming the object and what is wrong. The
detached trouser waistband (#320) and the unlit room (#526) are already carded.
Write your report with the section headers
IN-SCOPE:,OUT-OF-SCOPE:,CLAIM:andNOT TESTED:inthat colon form.
factory_step: clothing_consume
The RED is planted at
006bac1atools/openclinxr/evidence/the-hospital-gown-surface-is-as-smooth-as-a-garment-that-renders.test.ts.Clause (1) is
it.failsand reds on the real defect; three counterweights are green.The metric is the share of interior edges whose two faces meet past 60 degrees, from GEOMETRIC face
normals derived from positions, after welding vertices by position at 5 decimal places. It is immune
to shading and to index splits at material or UV seams, and it is what "a field of triangular spikes"
means numerically. It deliberately does NOT bound the triangle count — a count is a quantity and
shards are a shape, so a count clause greens the moment the mesh is decimated while the surface stays
shredded.
Clause (1)'s threshold is measured at test time from the non-gown population rather than chosen here.
It resolves today to 3.47% against the gown's 19.32%, a 5.6x margin.
Destructive probes, all three fired and all three reverted, recorded in the plant commit:
pointing both gown subjects at clean geometry makes clause (1) pass; tightening the comparator ceiling
to 2.0% reds counterweight (3); lowering
_fold_amp686to 0.010 reds counterweight (2).If the surface cannot be fixed inside this slice
Report the measurement and stop. That closes this card successfully.
The
live:rule requires clause (1) to be flipped, and a clause you cannot honestly flip will failit. That is a defect in my contract, not in your work, and I will resolve it the way #714 was: the
unmet clause is relocated verbatim to a new card with an inverted guard at the origin. Do not flip
the clause to make the proof pass, and do not weaken it.
CORRECTED 2026-08-28 (second pass) — read this before the sections above
Three candidate causes are measured dead. Do not re-derive them.
torso_cols = 16is the parametric grid, NOT the exported azimuthal countThe C1 attempt is preserved at branch
salvage/issue-747-c1-wave(bb461d64). It is NOT landed: itchanges shipped GLB bytes for 0.65 points, changes nothing a grader can see, and raises the
near-zero-area triangle count from 483 to 2,636 on the adult gown. Read it if useful; do not assume it.
What survives, as a HYPOTHESIS and not a measurement: the wave is too deep for its wavelength. At
k = 16on a ~2.2 m chest circumference a half period is ~69 mm, and a 34 mm excursion gives a crestdihedral near 90 degrees — which is the measured p90 of 86–90. CAUSE STILL NOT DETERMINED. The
arithmetic fits; nothing has tested it.
Counterweight (2) was amended at
6ffa5977because it bounded the fix outIt pinned
_fold_amp686 = 0.034AND_fold_k686 = 16as literal equalities, so every remainingcandidate was refused by the clause meant to stop one specific cheat. That was my defect.
It now bounds the property those constants stood in for: the gather's DEPTH, as an amplitude FLOOR at
0.030 — 88% of the shipped 0.034, so a trim is allowed and a flattening is not. The wave count is
unpinned on purpose: lowering
klengthens the wavelength and reduces the crest slope while leavingdepth untouched, which is the opposite of flattening.
Probes, all three fired and reverted:
_fold_amp686 = 0.010reds it;_fold_k686 = 8stays green, sothe wavelength fix is legal;
_fold_amp686 = 0.029reds it.The work is a SWEEP, and you do not pick the value
Do not choose an amplitude and a wave count and defend them. Produce a variant sweep and let the
orchestrator grade it.
Sweep
_fold_k686across at least four values spanning a real range (something like 4, 6, 8, 12) and_fold_amp686across at least two at or above the 0.030 floor. For each cell, rebakempfb-gown-adult-patientfrom current main and record the sharp fraction, the near-zero-area trianglecount, and the peak radial excursion into
gown-vs-clean-surface.jsonbeside the existing rows.Then produce ONE labelled contact sheet of the rendered bodice band across the cells, native
resolution, on a TRACKED path under
tools/openclinxr/evidence/issue-747/. Label every cell with itskand amplitude. The orchestrator grades the sheet and picks the cell; you do not need clause (1) togo green to succeed.
If no cell clears the ceiling, that is a finding and it closes the slice. Report the table and
stop. Do not chase the threshold, do not go below the amplitude floor, and do not decimate — #695 owns
decimation and clause (1) bounds a shape precisely so decimation cannot green it.
Duration is not a constraint here. A multi-hour bake sweep is acceptable and preferred over a guess.
done_when
gown-vs-clean-surface.jsonis the pre-fix comparison, written on a TRACKED path BEFORE any productedit — a deliverable under a gitignored path has no land path. One row per garment primitive carrying
edge-length distribution, triangle aspect ratio, the dihedral distribution, and boundary-edge count,
so the question "is the gown's surface degenerate or merely dense" is answered from data rather than
from the triangle count.