Skip to content

v0.29.0

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 serve no 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 } and framework: { publishes_sim_time } keys are gone; declare domains in a launcher's root framework.clocks and bind each instance with framework: { clock: "<domain>" }.

  • Standalone configuration replaces with_use_sim_time and with_sim_time_participants with a single with_clock, taking a ClockBinding that names the domain the node reads or publishes.

  • The generated test harness replaces its use_sim_time and sim_time_participants config with one clock knob set to wall, consumer, or publisher.

  • SimTimePublisher::for_node is renamed ClockPublisher::for_node, and it reports the single domain it supplies through domain() 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 list shows every clock domain running across the federation: who publishes each, whether it has ticked, and how many instances read it, with --json for 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 with peppy node add --run.

  • peppy stack list adds a CLOCK column per instance, and peppy stack resolve reports 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, and node run alike.

  • Launcher adjustments gain a set_framework operation that binds a target instance's clock, letting one shared control or recorder fragment run on whichever domain selects it.

  • The generated clock module's now_ns reads whichever clock its instance is bound to, returning a simulated domain's last tick or the machine's own wall time.

View all releases