Skip to content

Observation record: watch #67 failed once each on three unrelated PRs in one night, and not on main #1000

Description

@fujibee

Three sightings in one night, on three pull requests that touch three different files, and zero on
main
in the same window. Recording them together so there is a count rather than three separate
recollections. This is not a flakiness claim — it is the opposite: the observations are being
written down precisely so that whether it is a flake stays an open question with evidence attached.

tests/test_watch.bats:208
  watch: exits when its session dies without consuming an undelivered row (#67)
PR what that PR changes leg
#970 scripts/lib/instance-id.sh — the liveness helper bats (macos-latest 1/4)
#991 scripts/watch.sh and friends — argv-to-stdin bats (macos-latest 3/4)
#904 scripts/lib/storage.sh, the sqlite drivers — probe placement bats (ubuntu-latest 4/4)

On main: checking every failing main run in the last twelve
(gh run list --workflow tests.yml --branch main, then --log-failed | grep "(#67)"), this test
does not appear once. The failures present there are the two #937 launcher tests and the
pair-release test now correctly naming #983.

Why the three are worth one record

Each author reasonably concluded it was not theirs, and each was reasoning correctly in isolation:

Both are sound. What none of them could see alone is that the test also failed for two other people,
on two other platforms, for two other changes, on the same night.

What is and is not established

Established: the test failed once each on three unrelated branches, and not on main in that
window; it is not confined to one platform; and at least one failure is inside a bounded wait rather
than an assertion about watcher behaviour.

Not established: whether these are one phenomenon or three, whether the bounded wait is the
mechanism or just where the symptom surfaces, and whether the rate on main is genuinely zero or
merely below the number of runs looked at.

What would settle it

  • The observed state at the timeout, not just that the wait expired. _wait_for_file_contains
    gives up after 100 × 0.1s; what the file contained at that moment is the difference between "the
    watcher never exited" and "the watcher exited but the line had not been written yet".
  • A fourth sighting with its leg and OS, added here, so the rate becomes a rate.
  • Whether the test's notion of "the session died" depends on ps/pid visibility. It embeds a
    controllable stand-in session pid in a composite instance id and kills it, so it may share a root
    with Six open items reduce to one question: positive evidence that a process is gone #996 — but that is a hypothesis, not a finding.

A note on how these were nearly lost

Two of the three were found on runs that were subsequently re-run to green. The re-runs were
legitimate — in both cases the failing test was identified and its identity recorded before the
re-run — but the record lived in chat. Re-running to green erases the frequency unless the
observation lands somewhere countable first. This issue is that somewhere.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions