One control: a crank on an AI conveyor with no speed limit. It feeds three fixed-pace stations in series — Review, Test, Release — each draining its inbox at its own rate no matter how fast parts arrive. Crank past the slowest station (Test, by default) and the surplus doesn’t vanish: it piles up as work-in-progress in that station’s inbox, and a pile that outgrows its capacity jams the station for a few seconds, backing up everything behind it too. The score only counts crates that make it all the way through — produced and scrapped are shown, but they don’t count toward the grade. The skill is finding the crank position that matches your slowest station, not maxing it out.
Riffs on a recent NBER finding that AI lifts commit volume roughly 180% but release throughput only about 30%, because the humans downstream (review, test, deploy discipline) are the actual constraint — cranking the front of the line doesn’t move the bottleneck, it just buries it.
Reuse
The mechanic lives in src/weak-link.js as a framework-free ES module:
createWeakLinkSim(opts)— returns a state object; callupdate(dt)each frame andsetCrank(v)(0..1) to set the conveyor’s speed. There’s no drag/input handling in the module — that’s the demo’s canvas + pointer code, reference only.opts:conveyorMaxRate,stationRates(array of 3, Review/Test/ Release),bufferCapacity,jamDuration,warnThreshold,duration(0 for an endless run).- State exposes
buffers(3, each withwip,warning,jamFlash),stations(3, each withname,rate,jamTimer),crank,totalProduced,totalShipped,totalScrapped, andstatus('playing'|'finished').
Gotchas
- Overflow at any buffer both scraps the excess WIP and jams the station
right behind that buffer for
jamDuration— a jam near the front cascades into every buffer downstream of it filling too, since nothing is draining through the jammed station. That cascade is the point, not a bug to tune away. - Default station rates (
2.2, 1.4, 2.0) make Test the bottleneck; a crank held steady at or below1.4 / conveyorMaxRate(~18%) never overflows anything. Change which rate is lowest to move the bottleneck around. - The demo bundles its own copy of the module (self-contained by contract).
If you touch
src/, re-copy it intodemo/.