Alfred, Sir Jesse's three, in his order, each committed on its own.

1. The screen changing on a blink. Fixed at the source (f5e563b8f).
I checked the 3D faces first: their panel is identical, pixel for pixel, in all ten expressions, so no 3D face swap moves the screen.
The fault was in the 2D rigs the chat plays. Every move, the blink included, set the head layer's state to "complete". That swapped the resting head for a second drawn head whose screen was another size: the squire's 56x30 pixels against 51x29, and the colleague's differed too. The eyes were also painted into both head images, so a swap changed the eyes as well as the eye layer.
New script, scripts/mascots/bare_heads.py:
- gives each voice a resting head with a bare screen (the painted eyes filled with the screen's own tone, the eye layer alone showing the eyes);
- gives the head the moves swap in that same screen, pixel for pixel;
- refuses to write a moving head whose screen still differs.
Each rig now points at those two heads. Every expression change is the eye layer alone, so no face, blink or move can resize the screen.
Test written, not run: src/web/tests/toon.test.js, "every 2D head a move or a blink can show is one whose screen bare_heads.py made the same".

2. Each screen at its drawn size (c13a01256).
Measured as the eye sees it, on the closed-lid face so the arcs can't split the panel. Width x height of figure height, render against drawing:
- butler 0.235 x 0.164, drawing 0.235 x 0.164
- coach 0.256 x 0.172 with his cap on, drawing 0.261 x 0.170. Without the cap the panel is 0.260 x 0.168.
- colleague, the two lenses: 0.143 x 0.117 and 0.124 x 0.119, drawing 0.134 x 0.123 and 0.130 x 0.117
- homie 0.314 x 0.208, drawing 0.313 x 0.205
- squire 0.237 x 0.137, drawing 0.238 x 0.137
All five are wider than tall, both lenses included. Everything is within a pixel at chat size, except the colleague's near lens, 0.009 too wide and about one pixel.
Three causes surfaced on the way, each fixed where it was born:
- Squire: his helmet opening was cut larger than his screen and inked along its edge. The ink merged with the panel and made it read taller (0.141), and a band of the head showed inside the opening. The opening is now cut from his screen's own size in toonPoses.json, and the inked edge is gone; the shell's outline draws the border.
- Coach: his panel had been grown under the cap brim to make up for the brim covering it, and was taller than wide underneath (0.235 x 0.225). It is now the drawn size, set lower on the head, and his cap is lifted off it.
- Colleague: her frames covered the edge of each lens, so the visible lens jumped about as the lens size changed. The lenses are now drawn a little larger than the frames open, and the frames alone set what shows.

3. The happy eye (the last commit).
The bow had been a shallow, even band. It is now drawn as the drawing has it: a rounded bow half as high as it is wide, thinner over its top than at its ends, with rounded ends. Only the eye artwork changes. The panel measures the same before and after, on all five.

Overlap is unchanged: butler 0.816, coach 0.830, colleague 0.839, homie 0.854, squire 0.707.

Not done or not checked:
- I haven't watched the 2D blink play in the chat itself; I checked the rig images and their screens.
- The colleague's near lens is one pixel wide.
- Still waiting from round 5: the squire's reach, and the colleague's shoulders and mug.

Preview: http://127.0.0.1:8431/toon-preview/index.html
Side-by-side overlays, render | drawing | laid over, regenerated from this build: http://127.0.0.1:8431/toon-preview/rest/overlays.png (live: http://127.0.0.1:8431/toon-preview/compare.html?voice=all, with window.screenOf(voice, {asSeen: true}) for the screens)
