One symptom, four bugs
Birds couldn't get through the swing. The report came back four times, each from a different bug. What each verifying probe was blind to, and the four readings the one-way seat takes: side, motion, history, intent.
There's a swing in the borb cage: a seat on two chains, hung from the dome, the only surface in the toy that moves. It's one-way. A bird lands on top and rests; a bird rising from below passes through. It sounds like ten lines of collision code. The report against it was they can't get through the swing. It came back four times, each from a different bug.
The first gate was the obvious one: which side of the seat is the bird's center on? Below passes; above catches. Drop tests from four heights land and hold. Shipped. The probe never moved the seat.
The swing swings. Under a hard tilt the seat rises faster than its rider falls; for a substep it sits above the bird, the side test reads the rider as underneath, and the seat drops what it was carrying. Driven tilt: 146 to 202 fell-under events in twelve seconds. The fix is history, not geometry: a rider from last frame stays a rider, re-seated wherever it swung. Same harness, zero to twelve. The report came back wearing the words that ruled that harness out: even when it's stationary.
Reading the gate backward from the symptom found the next one: it checked which side a body was on, never which way it was moving. A bird flying up through the seat crosses to the top side mid-climb, gets caught as a landing, and friction bleeds the climb every substep it's held: ten substeps leave 0.28 of it. The rule every platformer knows, half-implemented: a semisolid catches only a descending body. Launch tests, straight up at three speeds, passed. A launch is one clean impulse, and flight is not.
The field found the difference: a tossed bird sails through; a flying bird doesn't, and the asymmetry isolates one variable. A toss is pure motion. Flight is motion plus a motor, and the motor and gravity run on different clocks: thrust lands once per frame, gravity at each of its four substeps. A climbing bird's velocity dips downward between pulses; at the wrong substep, the climb reads as a descent. Instantaneous velocity is a lossy proxy for what a body is doing. Flight now carries a second vector, the direction it's steering: intent, beside actual. Moving up passes, meaning up passes; a landing still catches, since a settling approach cuts thrust and arrives intent-silent. Which is why tossing always worked; a toss has no thrust to jitter. A unit matrix on the gate: intent-up against actual-down, landing, ballistic, resting, a dive. All green. Every row was about the gate.
The report came back a fourth time, and after three gate fixes the tempting move was a fourth. Reproducing first put the bug upstream. Flight's arrival braking began three body-radii from the target. For a bird flying up to a seat, that's below it. Thrust cut early, the climb died, and the arithmetic was cruel: the height its speed could still buy, v² over 2g, almost exactly equals the gap left. The bird stalled at the seat's underside, struggling, never quite failing: 1,458 hovering frames per attempt. The probe that reproduced it composed nothing: real seat, real seek pipeline, a tired bird sent to bed. Five trials, five identical flutters. The fix was a flare: keep climbing to a body above the perch, settle only from at-or-above. The same probe came back twelve for twelve, median 1.1 seconds, floor to asleep on the seat. The hardest fix required believing three fixes' worth of gate and looking somewhere else.
Every fix shipped verified. Every verification passed. Every probe was composed: the drop never moved the seat, the drive never sat still, the launch never sustained thrust, the matrix never left the gate. Each was blind along exactly the axis the next bug lived on. The one that ended it reproduced the field instead of imagining it. A fix validated against invented scenarios is validated against your own imagination. The readings arrived out of the gate's logical order: side, history, motion, intent. Diagnosis runs in the order of your blind spots, not the order of the design.
The gate now tags every verdict for the debug overlay: under, rise, intent, break, land, ride. When a bird meets the seat, the seat names which reading decided. The symptom never changed. The cause did, four times.