Skip to content

ci(windows): fts_consistent_under_tag_churn intermittently exceeds nextest slow-timeout #186

Description

@utof

Symptom

perima-db::search_proptests::fts_consistent_under_tag_churn intermittently times out on windows-latest, failing the whole just ci job:

TERMINATING [> 80.000s] perima-db::search_proptests fts_consistent_under_tag_churn
    TIMEOUT [  80.299s] (396/396)
    test fts_consistent_under_tag_churn has been running for over 60 seconds
Summary [98.268s] 396 tests run: 395 passed, 1 timed out, 6 skipped

Everything else passes — it is this single test, and only on Windows.

Not a regression from transcription v1

Checked before assuming. Same commit, same CI run:

Platform fts_consistent_under_tag_churn
ubuntu-latest 8.4 s (passes)
windows-latest >80 s (terminated)

8.4 s is faster than the ~14 s baseline recorded in CLAUDE.md (as of 532ac2a, 2026-04-22), so the three FTS aggregations added by V012 did not slow this test down. The gap is a ~10× Windows penalty on SQLite I/O, not added trigger work.

Intermittent, not consistent

Run 30666964446 (windows) passed. Run 30668291291 (windows) timed out. Identical test code between them — the two commits in between touched only scripts/fetch-ffmpeg-sidecar.sh. So the test sits marginally under the limit on Windows and tips over with normal runner variance.

Options

  1. Lower the proptest case count on Windows only (#[cfg(windows)] case override). Keeps Linux coverage at full strength where it is cheap. Interacts with proptest harness hangs after writer-actor migration: two racing SQLite write-connections #124 — the 64/32 caps there are a floor on coverage, so reducing further on one platform needs a decision.
  2. Raise slow-timeout in .config/nextest.toml for Windows. Simplest, but masks genuine hangs — the whole point of that setting is catching the SQLite deadlock class documented in RESEARCH-sqlite-deadlock.md.
  3. Profile the Windows penalty. 10× is large enough to suspect something specific (per-test tempdir on D:\, Defender scanning the SQLite files, busy_timeout interaction) rather than general slowness.

(3) then (1) is probably the right order — the 10× gap is itself the interesting signal.

Scope

Pre-existing; surfaced while merging #184. Related: #124 (proptest caps), #138 (other Windows-only test race).

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/ciCI pipeline, GitHub Actions, workflowspriority/mediumDefault priority — address in normal flowtype/bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions