RX0023

Domain: Engine

Error message

the canonical clock did not advance: %s

In the message, %s marks a value that the engine fills in when it raises the error.

The story

Time is supposed to move forward, and this time, the engine's clock did not. Here is why that matters. In the accretion store, the current value of a name is its newest version, the one with the highest timestamp. That only works if no two versions of the same name share a timestamp. So every write must carry a stamp strictly later than the last one. Normally this is guaranteed: the clock, called tictac, always returns the larger of the real time and the last stamp plus one, so even two writes in the same instant get different stamps. That means if you see this message, the clock itself broke its promise. You did nothing wrong. And the engine chooses to refuse instead of repair, because inventing a tiebreak would mean the engine answering a question that only the clock may answer. Picture two letters stamped with the identical minute: which one is newer? Nobody can honestly say. The message adds detail on what the clock returned. Look at the clock source and its counter, fix the contract, and writes will flow again.

Text from the Rush engine's error catalogue.