Development record
The stop hook's wake tests read the real clock in the machine's local zone, so they fail during a daylight-saving fall-back's repeated hour. Cron.Next (internal/core/autonomy/cron.go) deliberately never matches a repeated wall-clock minute, so between 02:00 and 03:00 CET on 2026-10-25 a */10 or */30 task had no match until 03:00. TestHookStopOutput, TestHookStopWakeCountAcrossRuns and TestHookStopRecordsHandBack (internal/surface/cli/hook_stop_test.go) then failed in make preflight on every branch, at any load. They pass with TZ=UTC and again after the hour, while CI (UTC) stays green. The hook itself shares the behaviour: for that hour a session sees no qualifying wake for any recurring task.
The stop hook's wake tests read the real clock in the machine's local zone, so they fail during a daylight-saving fall-back's repeated hour. Cron.Next (internal/core/autonomy/cron.go) deliberately never matches a repeated wall-clock minute, so between 02:00 and 03:00 CET on 2026-10-25 a */10 or */30 task had no match until 03:00. TestHookStopOutput, TestHookStopWakeCountAcrossRuns and TestHookStopRecordsHandBack (internal/surface/cli/hook_stop_test.go) then failed in make preflight on every branch, at any load. They pass with TZ=UTC and again after the hour, while CI (UTC) stays green. The hook itself shares the behaviour: for that hour a session sees no qualifying wake for any recurring task.
Grounds
- pursued: the stop-hook tests now give the same verdicts in any machine zone and at any real hour, a fall-back fold included; a TestHookStop* failure under some TZ or wall-clock hour, or a wake verdict that differs between TZ=UTC and TZ=Europe/Berlin, would show it wrong.
Frontmatter
| id | iss-2610250107576049 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610250107576049-the-stop-hook-s-wake-tests-read-the-real.md
open on GitHub ↗ · commit history ↗
mentions2
- dcn-26102501090703422026-10-25 — The records branch docs/review-set-and-planning-autonomy is parked, unpushed, from 2026-10-25 01:15 UTC. Four preflights failed on tests the branch does not touch: two timed out at the load gate, and two failed in main's suite. Those failures were the deadline and forge-budget tests under the live reservation iss-2610241911001655, three packages past their 20-minute timeout, and the stop-hook tests in the daylight-saving fold (iss-2610250107576049). The release cut's merge hold starts at 02:30 UTC. The branch is rebased and gets one gated preflight once that fix is on main and the hold has lifted.
- iss-2609301519558538Deferred, owed to a person: the live proof of the command-line runner (itd-2609201916056194). Phase 1 and 2 prove every criterion on fake harness binaries only; no ruling admits a live check of the runner (ruling L names the site setup, the API adapter and the decision adapter; H8 lists the three paid-service checks and itd-6's RepoPrompt run), so the intent cannot close. What a person must run: (1) the intent's first proof, criterion 7 live: a ruthless review of a real lane routed roles.ruthless-reviewer.runner=opencode, from a lane the host drives, its return recorded beside a host-run review's and differing only in the route; (2) the claude runner under --bare with --permission-mode dontAsk and --allowedTools, confirming a nested claude does not refuse under an inherited CLAUDECODE, and noting that the headless page (read 2026-09-30) says bare mode never reads OAuth or the keychain, so the claude runner needs ANTHROPIC_API_KEY, a paid API key rather than the person's subscription; (3) opencode run --format json --pure: the event shape (the CLI page does not document it; the adapter assumes step_start/text/step_finish with a sessionID and a part) and whether run mode prompts for a permission, which the timeout bounds and records as a fallback.