{"n":1,"what":"studied the kit: contact sheets of archive-dog frames + SAM masks and archive-door frames + masks; dog pose keys (frame 8 profile, 19-23 head low); door-leaf mask widths per frame","saw":"SAM dog masks are crude blobs (good for proportion, useless as a cut outline); the left door leaf closes from 67 px to 130 px over frames 18-31, a clean swing to reverse","files":["study/archive-dog-sheet.jpg","study/archive-door-sheet.jpg","study/dog-f8-keys.png"]}
{"n":2,"what":"first stage + puppets, 6 preview frames","saw":"the lace-border code zeroed every black card drawn before it (porch, roof, lantern gone); front legs braced forward like a frog (IK bend sign wrong for elbows); dog a barrel-chested jackal with giant ears","change":"border built in its own mask and unioned; elbow bend -1; dog recut"}
{"n":3,"what":"dog recut from measured proportions (spine 0.47 m, chest depth halved, shorter head, broader ears), design sheet of 12 poses","saw":"reads as a shepherd in profile; tail a stiff stick with saw-tooth notches; avert/over-shoulder head for a standing dog read as a blob","change":"tail tables lowered and smoothed; refusal head lead changed (see 7)"}
{"n":4,"what":"person transition from standing to sitting","saw":"knee IK bent backwards: the person turned into a man in trousers mid-move; sitting on a bench hid the offered hand among the knees","change":"knee bend fixed; sitting became kneeling on the heels (seiza) on the porch floor, bench removed; the hand is now offered low, beyond the knees, thumb apart"}
{"n":5,"what":"first full render (5.5 min, 912 frames) and frame strips of retreat and walk","saw":"retreat reads as backing away crouched; walk reads; a bump on the back at the spine pin","change":"round lap joint: both body pieces end in arcs centred on the pin"}
{"n":6,"what":"cards","saw":"lettering cut through the cartouche showed dim sky and sat 80 px low (font ascent)","change":"lamp-lit lettering, anchor='mm'"}
{"n":7,"what":"refusal head lead, three tries","saw":"(a) head swung back over the withers: blob; (b) end-on head from behind: read as headless; (c) end-on head facing the viewer, low, ears flattening outward: reads as averting the face","change":"kept (c); both body turns now pass through the front-view replacement (3D-consistent with (c)); the rear-view body is kept in code but not used"}
{"n":8,"what":"reach","saw":"the grasping hand ended on the black door casing and merged","change":"the reach became a lunge (lean 34 deg): the open hand clears the casing into the sky"}
{"n":9,"what":"sound v1 levels per 2 s","saw":"the 3.45 s stab set the peak; the rest sat at -26 dB RMS","change":"RMS normalise + tanh limiter"}
{"n":10,"what":"second full render; frame strips of refusal (3.33-4.58 s) and return (7.33-8.67 s)","saw":"both turns read; at |turn| ~0.36 the foreshortened profile looked like an ostrich for 1-2 frames","change":"front-view replacement window widened to |turn| < 0.4, minimum foreshortening 0.4"}
{"n":11,"what":"third full render; invariants measured from the render (check.py); silhouette-only test (pixels < 24 -> black, rest white)","saw":"all 7 measured choice times within 0.25 s (max error 0.183 s, look-in); never past the inner jamb; ends across the outer jamb (-0.126 m .. 1.411 m); 0 joint-limit violations; relationships readable with colour removed","files":["build/out/invariants.json","study/silhouette-read-test.png","trace.json"]}
{"n":12,"round":2,"what":"critic round 1 (PASS) repair list: squashed turns, door lit from 0 s, ambiguous look-in, sill not separate, 'Come in.' half in plaque","change":"turns: no foreshortening at all; |turn| < 0.6 is a cut end-on piece (rear view for the turn away, front view for the turn back); joint limits now enforced (clamped by FK, paw follows) not only logged; door closed (leaf 1.0) until 6.2 s, Straight Talk curve re-timed onto 6.2-7.0 s, outside glow scales with opening only; look-in = profile head raised, snout pointing up-left into the doorway light, eye hole removed; raised 9 cm sill stone with lit seam, groove and cut holes, contact plane follows it; framed speech plaque, crisp cue fades"}
{"n":13,"round":2,"what":"design sheets + strips 3.83-5.42 s and 7.50-9.33 s","saw":"crouch humped at the spine pin; over-shoulder head with thick neck made a lump at 7.6; after the rear view the legs were dragged into a bunch at 4.33 (paws kept their pre-turn positions)","change":"crouch lowers the whole spine with a mild croup drop (one back line); over-shoulder neck 122-132 deg with level head; averted head kept at shoulder level; all paws re-planted when the profile flips"}
{"n":14,"round":2,"what":"full re-render, check.py and tools/paeleo/check_handmade.py, strips of door 0-25 s, end 24.4-29.2 s, refusal 4.00-4.50 s","saw":"check_handmade ALL OK (I1-I4); all 7 measured choice times within 0.25 s (refuse 3.542, turns to look 7.625, looks in 26.542); 0 joint clamps needed; door shut and dark-glowing until 6.2, open and flooding by 7.0; chest lifted onto the sill from ~24.4; 'Come in.' inside the plaque; turns read profile -> rear/front piece -> profile with planted legs"}
