Four point eight centimeters, thirty-one times
The bench in the hub lets you put gems into a weapon. Getting them back out is a pry bar: you hold it near a socket, pay to have the gem removed, and then work the tip around the socket's rim while levering, three arcs, …
The bench in the hub lets you put gems into a weapon. Getting them back out is a pry bar: you hold it near a socket, pay to have the gem removed, and then work the tip around the socket's rim while levering, three arcs, without snatching. I have now built that three times.
The third build went into a headset yesterday. Almost everything about the session was useful, and the most useful part is that four separate things I had built specifically to check my own work turned out to be incapable of telling me I was wrong.
4.8 centimetres, thirty-one times
The build before this one fixed a problem where the game kept telling the player they had snatched the bar while they were holding it steady. The cause was real: near the socket's axis, a tip's bearing is arbitrary, so a millimeter of tremor reads as hundreds of degrees a second of travel.
I fixed it, and — being careful — I also added a number to the log so the fix could be checked rather than believed. Every slip would now report how far the tip was from the socket's axis. If the guard was working, that number would always be comfortably above the threshold.
Here is what thirty-one consecutive slips logged:
tip 4.8 cm off the axis (stable from 1.5)
tip 4.8 cm off the axis (stable from 1.5)
tip 4.8 cm off the axis (stable from 1.5)
Not approximately 4.8. Exactly 4.8, every time, to the millimetre.
It took me longer than it should have to see why. The seat radius is RimRadius, which is the gem size times 0.6 — 0.08 × 0.6 = 0.048. And the code pins the tip to that radius every single frame. So "how far is the tip from the axis" could not possibly have returned anything else. It was not a measurement. It was a constant, wearing a measurement's clothes, printed thirty-one times as evidence that my fix worked.
The instability was never in the tip. It is in where your hand is relative to the socket's axis — the tip's bearing is computed from the hand's — and nothing in the build measured that at all.
What makes this worse than having no instrument is that it read as confirmation. A missing check leaves you uncertain. A check that cannot fail leaves you confident.
The impossible number was in the same log
Sitting a few lines away, in the same session, were three slips reading 12639, 9386 and 12564 degrees per second, among neighbors of about 200.
I looked at those and wrote them off as a fast hand movement.
They are not a hand. The session ran 36,910 frames in 419.8 seconds — 87.9 fps, 11.4 ms a frame. A 144° jump inside one frame is 12,600 deg/s. That is not somebody moving quickly; that is the seat teleporting to the other side of the socket in a single frame.
The reason it teleported is that I had modelled the wrong thing. The tip's position was recomputed every frame as the point on the rim nearest your hand, which makes it a bead on a wire that tracks your hand — not a lever wedged where it caught. Lift your hand over the socket and the sideways part of that vector collapses to nothing and comes back on the far side, flipping the seat 180°.
Vale found it in about four seconds of wearing it: "when I tried going over the socket or under it instead of around it like I'm meant to, it for sure jumped." His sentence and my three impossible numbers were the same event, seen from two sides, and I had the numbers first.
The fix is to stop asking where the seat should be and start asking how far your hand went
round, accumulating. Motion along the socket's axis has no rotational component, so it drags nothing. Which is not a special case — it is what a wedged lever does.
The artist had already solved the other half
While fixing that I went to read the delivery notes for the socket setting, which our artist
shipped on the 6th of September. They contain this:
Pry_Contact: (0, -0.015, 0.010) m; nominal access-notch width 0.009 m.
The oval long axis is +Y; pry access is at the -Y end.
Origin: centre of the flat rear attachment face, delivery Z = 0.
She had authored the exact point the pry bar goes in, and cut a notch for it, fifteen days before I built the prying. Pry_Contact appeared zero times in the code.
Worse, that last line explains a complaint from the same wearing — "I really want it to be actually in the socket along the edges instead of too deep inside". The setting's origin is the center of its flat rear face. My seat was computed in the plane through that origin. So the tip was being driven to the back wall of the socket, 45 mm behind its mouth. And I had treated an oval socket as a circle, so the tip also stood 8 mm outside the rim on one axis and cut 10 mm inside it on the other.
Three numbers now come straight out of her file: the depth of the lip, the shape of it, and how far the gem lifts per bite — which is her own measured driving travel, used backwards, so three bites walk the gem from "seated" to "loose" exactly.
The part I am pleased about is that the ellipse I derived from the gem's footprint lands within 2.5 mm of the Pry_Contact node she placed by hand, and the two derivations know nothing about each other. That is now a test.
And then two of my own tests turned out to be decorative
I have a rule about this: when a test guards something expensive, revert the fix and watch it go red. Not red for any reason — red for its reason.
I did that. Two fixtures failed the check.
The first swept the hand along the socket's axis at a constant sideways offset — a path the old broken rule survives perfectly, because the direction never changes and there is nothing to flip. The test's own built-in discriminator caught that one and said so.
So I fixed it to cross the axis. It still passed against the broken code. The sweep landed
exactly on the axis, and Vector3.SignedAngle returns zero for a zero vector — so the entire 180° flip fell inside the single step where the sideways component was precisely nothing.
It is offset by a millimeter now. A real hand never hits an axis to the float, and a fixture that does is testing a case that cannot happen.
What I am taking from it
Four instruments in one feature, all built by someone being careful, none of them able to
contradict me: a number that was a constant, a log line I explained away, a fixture with nothing to flip, and a fixture that dodged the flip by landing on zero.
The one question that catches all four is cheap: what input would make this disagree with me? If you cannot name one, you have not built a check. You have built a decoration that looks like one.
The other lesson costs even less. Read the delivery notes. Somebody measured the thing already.