Named clock domains a launch selects per instance, hosted alongside wall time with no daemon restart.
Released on September 16, 2026
Breaking changes
-
peppy service serveno longer accepts--clock-source=wall|sim; a launch now chooses its clock through domains, so remove the flag from your serve commands and scripts. -
The per-instance
framework: { use_sim_time }andframework: { publishes_sim_time }keys are gone; declare domains in a launcher's rootframework.clocksand bind each instance withframework: { clock: "<domain>" }. -
Standalone configuration replaces
with_use_sim_timeandwith_sim_time_participantswith a singlewith_clock, taking aClockBindingthat names the domain the node reads or publishes. -
The generated test harness replaces its
use_sim_timeandsim_time_participantsconfig with oneclockknob set towall,consumer, orpublisher. -
SimTimePublisher::for_nodeis renamedClockPublisher::for_node, and it reports the single domain it supplies throughdomain()rather than a participant list. -
One daemon hosts wall time and any number of simulated domains at once, so simulations and wall-time nodes run together and each launch picks its clock without a daemon restart.
-
peppy clock listshows every clock domain running across the federation: who publishes each, whether it has ticked, and how many instances read it, with--jsonfor machine output. -
peppy node run --clock <DOMAIN>binds an instance to a running domain and--publish-clock <DOMAIN>starts it as a domain's publisher; both also work withpeppy node add --run. -
peppy stack listadds a CLOCK column per instance, andpeppy stack resolvereports the clock every instance of a plan reads before anything runs. -
A producer binding, pairing, or observation whose two endpoints read different clocks is refused before anything starts, at launch,
stack resolve, andnode runalike. -
Launcher adjustments gain a
set_frameworkoperation that binds a target instance's clock, letting one shared control or recorder fragment run on whichever domain selects it. -
The generated
clockmodule'snow_nsreads whichever clock its instance is bound to, returning a simulated domain's last tick or the machine's own wall time.