flaky api tests: git clone from shared full-data fixture repo loses objects mid-copy under parallel workers #171
Description
Seen twice on 2026-09-09 in CI on the same commit (96b71ef, merge of #157, which touched only apps/web):
- push run:
tests/slug-redirect.test.ts > never intercepts /api/* paths - pull_request run:
tests/avatar-upload.test.ts > 404s for a missing personand> rejects unsupported MIME types with 422
All with the same error from apps/api/tests/helpers/seed-fixtures.ts cloning the bare fixture repo created by tests/helpers/test-full-repo.ts:
Error: Command failed: git clone /tmp/cfp-full-data-XXXX/data.git /tmp/cfp-seed-wt-YYYY
fatal: failed to copy file to '/tmp/cfp-seed-wt-YYYY/.git/objects/71/fdd3...': No such file or directory
Different test files, different temp dirs, same shape: a local git clone (hardlink/copy of loose objects) races with something mutating the source repo's object store while it runs. Suspects: another worker's transaction on the same shared fixture repo (gitsheets 2.x Rust core landed on develop via #151 and may repack/prune loose objects), or a cleanup rm in a sibling file's afterEach. Locally the suite passes with --maxWorkers=2; CI uses the default worker count.
Options: give each test file its own fixture repo (no shared source), clone with --no-hardlinks/file:// (forces a pack transfer instead of per-object copies), or serialize the clone behind a lock. Re-running the job passes, so this is a flake, not a regression, but it will keep failing release CI at random.
🤖 Generated with Claude Code
Activity