PRs queue up one at a time. Stamp merges the front one immediately — fast, and the ticket shows a “confidence” tell (teal reads clean, amber/red reads sketchy) that correlates with real risk but never guarantees it. Read locks you onto the front one for a couple of seconds and always catches a defect before it ships, but the rest of the queue keeps aging without you, and anything that waits too long merges on its own, blind, exactly like a stamp.
The trick is the delay: stamping a defective PR doesn’t fail you on the spot. It plants a fuse that goes off a few seconds later as an incident, draining the uptime bar — so the cost of skipping review is deferred, not instant, and it’s easy to build a real backlog of ticking risk before the first explosion teaches you anything. The skill is reading the tell and spending review time where the odds call for it, not stamping everything or reading everything.
Reuse
The mechanic lives in src/rubber-stamp.js as a framework-free ES module:
createRubberStamp(opts)— returns a state object; callupdate(dt)each frame, andstamp()/read()on input.opts:maxHealth,incidentDamage,fuseDelay,readDuration,patience,minDefectChance,maxDefectChance,spawnIntervalBase,spawnIntervalMin,spawnDecay,duration.- Rendering is yours: the state exposes
queue(each item hasageand a visibleconfidence, but not the hiddendefectiveflag’s outcome until it resolves),reading,bombs(ticking, unresolved), andhealth. The demo draws all of it on canvas.
Gotchas
defectiveis decided at spawn time fromconfidenceplus noise — it’s a tell, not a rule. A render that leaks it (e.g. debug logging the raw item) spoils the guessing game the mechanic is built around.- Reading removes the item from
queuefor the duration, so it stops aging and can’t time out mid-review — but it also can’t be handed back if you change your mind; there’s no cancel. - The demo in
demo/bundles its own copy of the module (self-contained by contract). If you touchsrc/, re-copy it intodemo/.