A runtime over a new InMemoryCheckpointer, holding its runs' claims by claims. Both use clock: the runtime stamps checkpoints and events with it, and the store judges claim expiry and prune's ages by it, so a test that moves clock moves both.
A runtime over a new InMemoryCheckpointer, holding its runs' claims by claims. Both use clock: the runtime stamps checkpoints and events with it, and the store judges claim expiry and prune's ages by it, so a test that moves clock moves both.
A GraphRuntime over a store of its own has two clocks: its clock stamps what it writes - each checkpoint's createdAt and each event's timestamp - while the store's clock judges expiry and retention (Checkpointer.prune compares the store's now with createdAt). Give both the same clock, or keep hosts' clocks synchronised: skew between them shifts what prune(maxAge) keeps.