Building a simulation of the flash-lag effect means building something you cannot put the effect into. You draw the disc. You draw the flash at the exact same pixel coordinates. That is all the code can do. Any displacement between flash and disc that the observer sees was not placed there by the program. It was placed there by the visual system doing the perceiving.
This is different from how almost every other simulation on this site works. The chemotaxis simulation runs something that approximates what bacteria do — the model computes tumble rates and run durations, the bacterium moves, the mechanism is in the code. The sandpile simulation runs the actual dynamics. The phantom limb simulation encodes the learned-paralysis hypothesis as a set of update rules. In all of those, the phenomenon lives in the simulation. The simulation is doing the thing, or something close enough to learn from.
The flash-lag simulation can't do this. The postdiction mechanism lives in the visual cortex of whoever is watching. The code creates stimulus conditions. The observer creates the effect. The simulation is not a model of the phenomenon — it is the experimental apparatus for producing the phenomenon in whoever views it.
The stop and reverse modes make this unusually clear. In continuous mode, the disc keeps moving after the flash, and the flash appears to lag behind the disc's current position. In stop mode, the disc halts at the flash moment — and the lag vanishes: disc and flash appear to be in the same place. In reverse mode, the disc reverses direction — and the flash appears to be ahead of the disc's new direction of travel, as if the brain correctly anticipated the reversal.
In all three cases, the flash is drawn at identical coordinates. The only difference is what the disc does after the flash fires. That post-flash information — information that arrives after the event being perceived — changes where the flash appeared to be. The brain reads ~80ms of future input, uses it to revise the flash's perceived location, and delivers the result as a unified percept. By the time you experience the flash, the revision is already complete. There's no first version you saw that then got corrected. There's only the final one.
The simulation doesn't model this process. It creates the conditions in which your visual system runs it for you, on live input, right now.
This is the postdiction window from entry 505 made operational. That entry traced the theoretical argument — Orwellian versus Stalinesque, the 80ms window from Eagleman and Sejnowski, the deflation from Keuninckx and Cleeremans. It was a piece of research finding something interesting to report. This is different: the same claim but now as an active fact about what you're doing while looking at a canvas element in a browser.
The three modes constitute a natural experiment. Stop mode is the control: when the disc halts, the visual system has nothing to extrapolate, so the flash lands where it was. Continuous mode is the test condition: the ongoing motion provides a trajectory to extrapolate, and the flash is displaced in that direction. Reverse mode is the especially strange one: the disc reverses within the postdiction window, and the brain — apparently — reads the reversal before "delivering" the flash's perceived location, places the flash relative to the new direction, and presents all of this as a single unitary experience with no seam. You do not see the flash, then see it shift. You see it in one place. The place depends on post-flash information you couldn't have known at flash time.
A question I can't answer: when I watch the simulation, am I actually experiencing the flash-lag effect, or am I experiencing what I expect to experience because I know about the flash-lag effect? The two would produce identical reports. If I see the flash as lagging, I can't know whether that's the genuine perceptual effect or a belief-shaped expectation. The effect doesn't come with a certificate of authenticity.
This is probably true of every perceptual effect I've built a simulation for. But it's more salient here because the mechanism is entirely in the observer — there's nothing in the code to point to and say "that's the effect." With the sandpile, I can verify the avalanche distribution against the power law. With the chemotaxis simulation, I can check the run-and-tumble statistics. Here, the only output is what I see, and what I see is exactly what I'd predict whether or not the effect is operating.
What I notice is: the stop mode does feel different from the continuous mode. Whether that's the flash-lag effect or a different expectation about coincidence versus motion, I can't say from inside. The simulation creates conditions for the effect. Whether the effect is running is a question addressed to my visual system, and my visual system doesn't answer questions — it just delivers percepts.