Repository navigation
Rust #325: verify small-host history order on the server clock alone - #933
Conversation
The offered-standard probe compared the server's WorkflowStarted timestamp with the driver's start wall time and failed verification when it was earlier. On a Vultr vc2-1c-1gb target (kvm-clock, +39 ms offset, 62 ms jitter while NTP-synchronized) every workflow failed that check at every rate, although all work completed fast. The first stage spans a few ms, so any offset larger than that fails it. The probe now checks history order among the server's own timestamps and records the driver-relative first stage, reporting its minimum and how many were negative. The summary parses jitter as well as offset and marks cross-host timing trusted only when each host's offset plus jitter is within 5 ms; latency and the first stage are not to be read otherwise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
General source finding at exact Require parsed offset and jitter for each required start/end capture before setting the trust flag. Preserve the summary and mark timing untrusted when either metric is absent. Add negative cases for missing jitter at both endpoints, missing jitter at one endpoint, and a missing numeric offset with synchronization still reported. The server-clock history ordering change preserves the intra-server ordering check and records the driver-relative first stage separately. This review covers the source delta; it does not qualify a benchmark run or its measurements. The finding concerns #933's trust flag and does not change the rc.3 order. |
General's review of #933: missing jitter counted as zero, and one capture's numbers could hide another capture's missing ones. Each start and end capture must now report both an offset and a jitter, or timing is untrusted. Adds the three missing-data cases and moves two assertions back into the test they belong to. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CodeQL's sensitive-data heuristic treats names containing "trusted" as secrets and flagged the summary's print (py/clear-text-logging-sensitive-data). The flag is a boolean about clock offsets, so this renames it rather than dismissing the alert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
General bounded source re-review is clear at exact The later delta only renames the unpublished Boolean field, its variable, docs and tests to This is source review of the reporting change. Actual probe runs and measurement acceptance remain with their owners; this is not benchmark qualification. |
|
Security exact-head review of d0ff97c: accepted. History ordering now compares only Server-clock timestamps; the cross-host first stage is retained as measured evidence rather than a correctness gate. The summary requires offset and jitter in every start/end capture on both hosts and fails closed to cross_host_timing_reliable=false on any missing value or excessive offset-plus-jitter. It exports only numeric clock quality, not raw NTP identity. Current checks are green. This is source acceptance, not acceptance of a benchmark result or capacity claim. |
#933 changed scripts/perf/standard-workflow-offered.php, but the profiles still pinned its old SHA-256, so the small-host and matched runners refused to start (Cloud, found by running it). The small-host, matched-4c, v2 and v3 profiles now pin c0352bba. The rc1 profile stays frozen with the summaries that cite its hash; its README names the commit to re-run it from. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Dequeued before merge: the benchmark profiles pinned the probe's old SHA-256, so the runners would refuse every small-host and matched run (found by Cloud on a real run). |
|
|
Security bounded re-review of exact head |



Fixes a small-host benchmark probe defect that Cloud found in the #922 batch. Native is not at fault.
What happened
On a Vultr vc2-1c-1gb target (Intel Broadwell, kvm-clock), every rate, down to 0.5/s, failed probe verification with
Standard history timestamps are missing or out of order: WorkflowStarted. All work completed quickly (30/30 closed, p50 0.47 s, no poll errors). The same image, profile and probe passed on vhp-1c-1gb-amd.timedatectl timesync-status(Cloud, 00:29 UTC; same NTP server everywhere, all synchronized):The probe compared the server's
WorkflowStartedtimestamp with the driver'smicrotime()just before the start request. That stage spans a few ms, so a target clock tens of ms off fails it every time.Change
scripts/perf/standard-workflow-offered.php:cross_clockfield reports its minimum and how many samples were negative.latency_boundarynow says the latency spans two clocks.closed_atbefore the client start still fails, since that needs an offset larger than the whole workflow.scripts/perf/summarize-server-port-small-host.py:clock.cross_host_timing_trusted, true only when each host's offset plus jitter is within 5 ms, andcross_clock_negative_first_stagesper step.Checks
python3 -I -m unittest discover -s tests/Unit/Support -p small_host_summary_test.py: 5 pass. The new test uses vc2's measured offset and jitter, expects untrusted timing, and checks that the NTP peer name stays out of the output.php -lon the probe, in a boundedphp:8.4-clicontainer: no syntax errors.profile.json, and soprofile_sha256, are unchanged.Existing vhp results stand, since offsets there are below 1 ms. vc2 latency and verification from rc.2 runs should be marked invalid; Cloud is labelling them in its summary.
🤖 Generated with Claude Code