flaky api tests: git clone from shared full-data fixture repo loses objects mid-copy under parallel workers

Open
#171 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
52/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
git, typescript
Domain
ci-cd, testing

Research direction

Start with apps/api/tests/helpers/seed-fixtures.ts and tests/helpers/test-full-repo.ts, then reproduce the listed slug-redirect and avatar-upload tests using CI's default worker count. Trace shared fixture creation, cloning, and cleanup while parallel workers run; done means those tests no longer intermittently fail during git clone and the full parallel suite remains stable.

Written by the indexing model from the issue text.

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 person and > 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

https://claude.ai/code/session_01RdRwHvDupRLV8GuJpYKzEr

Dominant language
TypeScript
Stars
1
Forks
1
Avg merge
1d 20h
Merged PRs (30d)
25

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from CodeForPhilly/codeforphilly-ng

All issues in CodeForPhilly/codeforphilly-ng

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.