drogna

A demonstration harness. Every number in it is invented.

V1 record — describes retired software; superseded for V2 by srd.md, constitution 2.0.0 and ADR-0027.

ADR-0007: Host time may smooth the display between clock samples

Status: Accepted Date: 26 August 2026 Requirements: SRD FR-09, FR-46, FR-47, FR-48 Amends: Constitution Principle I, which gains a second narrow exemption Raised by: feature 012's specification, which recorded it as a Complexity Tracking entry

Context

The client animates: the control loop cycles, messages cross boundaries, the uncertainty field decays and refreshes, and a route is traversed against a time control (FR-46 to FR-48). Simulation time arrives from the clock service as discrete samples at whatever rate the transport delivers them.

Rendering only on arrival of a sample makes the display step at the sample rate, which at a low sample rate looks broken rather than paused. The conventional fix is to interpolate between the two most recent samples using the browser's animation frame timestamp, which is host time and therefore forbidden by Constitution Principle I.

Feature 012 recorded this as the only host-time use across its four features and put it in Complexity Tracking rather than committing it silently. That was the right handling, and it is now decided rather than left as a standing violation.

Decision

The client may read the browser's animation frame timestamp for the sole purpose of interpolating between two received simulation clock samples for display.

Constitution Principle I gains a second narrow exemption, alongside ADR-0006's, under the existing # harness:allow-wallclock marker with this ADR as the reason.

Three rules bound it:

  1. It may only interpolate between two samples actually received. It may never extrapolate beyond the most recent sample, so the display cannot invent a simulation time that the clock has not reached.
  2. Every received sample is authoritative and snaps the display to it. Interpolation is discarded on arrival, not blended, so error cannot accumulate.
  3. No value derived from it ever leaves the render path. It does not reach a query, a message, a recorded observation, a screenshot's recorded time, or any assertion in a test.

If sample arrival stops, the display holds at the last sample rather than drifting forward. A rate of zero is therefore indistinguishable from a paused display, which is correct.

Consequences