Skip to content

dispatch-liveness prescribes timeout(1), which macOS does not ship #402

Description

@randomparity

Problem

references/dispatch-liveness.md:55 prescribes a wait built on timeout(1):

timeout 3600 bash -c 'until <condition>; do sleep 60; done'; echo "wait ended: $?"

and :58 tells the reader to "set the outer timeout to the longest the wait could reasonably
take". macOS does not ship timeout(1). On a stock macOS host the recipe fails with a
command-not-found, and the wait it was supposed to bound does not happen at all.

This is the same premise ADR 0068 rests on. That record exists because there is no portable
timeout on this project's primary development platform, and it specifies a trap-free Bash 3.2
mechanism for exactly that reason. One shipped reference now says the opposite of another.

Evidence

  • references/dispatch-liveness.md:55 and :58 — the prescription, in a reference the repository
    ships and links from skills.
  • ADR 0068 and references/network-bounds.md — the mechanism that exists because timeout(1) is
    unavailable here.
  • scripts/check-public-safety-test.sh already records the same hazard in-repo: its gate is
    backgrounded and polled "rather than wrapped in timeout(1), which macOS does not ship (a
    timeout-based leg would fail on it)".
  • Homebrew coreutils may supply timeout or gtimeout on a given machine. That is a host
    accident, not a guarantee, and a reference cannot depend on it.

Expected

dispatch-liveness.md prescribes a wait that runs on a stock macOS host. The repository already
has two portable precedents to draw on rather than inventing a third — the polled loop in
check-public-safety-test.sh and the bounded_call mechanism in references/network-bounds.md.

Reuse beats invention here: if bounded_call fits, say so and point at it, since a fourth copy of
the same idiom is the drift ADR 0068 already priced.

Non-goals

  • Changing what dispatch-liveness says about liveness itself — one probe per worker per run,
    never inferring liveness from timestamps. That guidance is not in question.
  • Adding timeout to any required-command list, which would make the affected scripts refuse to
    run on a stock macOS host.

Provenance

Found during the campaign covering #382, #384, #386 and #387, while auditing the repository's own
timeout precedents; verified against the file before filing. Filed on explicit operator
authorization.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsADR and debt-record conventions, numbering, and record lifecyclebugSomething isn't workingeffort:SSmall; hours, single sittingpriority:P2Normal prioritystatus:needs-triagenot yet analyzed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions