Task · SKT-0095

Anchor construct phase scheduling to the wall clock

Description

seedPhases (internal/runner/runner.go) sets each construct’s first due time to now + phaseOffset(name, interval), so phases are relative to process start. After any restart or HA handoff every series’ cadence restarts, which can drop up to about two scheduled samples per series at 60s intervals regardless of how fast the takeover is. Anchor to the epoch: next due = first t >= now with (t - phase) mod interval == 0. Two processes running the same blueprint then share one schedule. RunOnce / -dump unaffected.

Acceptance Criteria

Definition of Done

Implementation Plan

Isolated candidate with frozen ownership; acceptance reproduction, focused checks and just check; independent review before root landing. HA seam design is independently challenged and frozen first.

Implementation Notes

loop1: implementation attempts 1; ownership repair was read-only, later gate rerun had a new actual base. Accepted and landed f3d701a1a4500eb2944a0a354c53a9c641fed371; composed just check exit0 at that exact SHA. CI run37696196429 all required jobs/ci-success green. Original fake-clock regression red retained, seven focused tests green; same-second actual-base/candidate complete dump parity 542277 bytes, no filtering/overlay. Real clock affects model-span coverage; one final coordinated pair, earlier separate attempts disclosed. No blueprint field/config/skill changed, generation not applicable; inventory parity and composed signal-fidelity validation cover catalogue. Routine aggregate review remains scheduled after last routine land.

Final Summary

Epoch-anchored startup and post-late-tick scheduling; fake-clock restart reproduced before fix and passes. Full dump proof, independent review, exact-SHA composed gate and CI passed. Evidence /tmp/skh-U95-proof/acceptance-a8610b9.json and /tmp/U95-composed-f3d701a/gate.log. Release v1.6.0-rc.134 targets this SHA.

View the source file on GitHub