tests: napraw flaky asercję pokrycia w heartbeacie #26

Merged
gitea merged 1 commits from fix-heartbeat-progress-flake into main 2026-08-24 15:41:20 +00:00
Owner

Objaw

test_search_fills_progress_with_live_positions_and_total (z #21, już w main) padał losowo — mniej więcej co drugi pełny przebieg integracji. W izolacji zawsze zielony, stąd łatwo przeoczyć.

Przyczyna (realna, nie "flaky bo wątki")

Test asertował 100% pokrycia po wyszukaniu DOI, które istnieje. A gdy wszystkie szukane DOI zostaną znalezione, konsument wysyła TERM i producenci zatrzymują się w połowie pliku — więc zapisane offsety sięgają dowolnego miejsca. Asercja ścigała się ze skanem.

Poprawka

Rozdzielone na dwie rzeczy, z których każda jest deterministyczna:

  • pokrycie mierzone na DOI nieobecnym — nic nie może przerwać skanu, więc 100% jest gwarantowane,
  • przypadek trafienia asertuje to, co zachodzi niezależnie od tego, gdzie stanęli producenci: total jest znany, postęp jest ograniczony i sensowny (0 <= done <= total), trafienie zaraportowane.

Weryfikacja

5 przebiegów samego pliku + 3 pełne przebiegi integracji — wszystkie zielone (71 passed).

Niezależne od #25 (Ollama).

🤖 Generated with Claude Code

## Objaw `test_search_fills_progress_with_live_positions_and_total` (z #21, już w main) padał **losowo** — mniej więcej co drugi pełny przebieg integracji. W izolacji zawsze zielony, stąd łatwo przeoczyć. ## Przyczyna (realna, nie "flaky bo wątki") Test asertował **100% pokrycia** po wyszukaniu DOI, które **istnieje**. A gdy wszystkie szukane DOI zostaną znalezione, konsument wysyła TERM i producenci **zatrzymują się w połowie pliku** — więc zapisane offsety sięgają dowolnego miejsca. Asercja ścigała się ze skanem. ## Poprawka Rozdzielone na dwie rzeczy, z których każda jest deterministyczna: - **pokrycie** mierzone na DOI **nieobecnym** — nic nie może przerwać skanu, więc 100% jest gwarantowane, - **przypadek trafienia** asertuje to, co zachodzi niezależnie od tego, gdzie stanęli producenci: total jest znany, postęp jest ograniczony i sensowny (`0 <= done <= total`), trafienie zaraportowane. ## Weryfikacja 5 przebiegów samego pliku + 3 pełne przebiegi integracji — wszystkie zielone (71 passed). Niezależne od #25 (Ollama). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gitea self-assigned this 2026-08-24 12:10:23 +00:00
gitea added 1 commit 2026-08-24 12:10:23 +00:00
tests: fix the flaky heartbeat coverage assertion
CI / compile (pull_request) Successful in 5s
CI / unit (pull_request) Successful in 22s
CI / integration (pull_request) Successful in 27s
build / build (push) Successful in 1m5s
CI / compile (push) Successful in 9s
CI / unit (push) Successful in 25s
CI / integration (push) Successful in 30s
13d2a04052
test_search_fills_progress_with_live_positions_and_total asserted 100%
coverage after searching for a DOI that EXISTS. Once every queried DOI is
found the consumer signals TERM and the producers stop mid-file, so the
recorded offsets reach an arbitrary point - the assertion was racing the
scan and failed roughly one full-suite run in two.

Split into the two things that are actually deterministic: coverage is now
measured with an ABSENT DOI (nothing can stop the scan early, so 100% is
guaranteed), and the found-target case asserts what holds regardless of
where the producers stopped - the total is known, progress is bounded and
sane, and the hit is reported.

Verified: 5 consecutive runs of the file and 3 consecutive full integration
runs, all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
gitea merged commit 13d2a04052 into main 2026-08-24 15:41:20 +00:00
gitea deleted branch fix-heartbeat-progress-flake 2026-08-24 15:41:20 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/conjurer#26