# Team logos wrong after force reseed: TDD plan

## Observed runtime failure
- Browser console: Internal server error.
- Team images still not shown.

## Hypothesis
The current force-reseed cleanup in [`SeedRacingData.clearExistingRacingData()`](adapters/bootstrap/SeedRacingData.ts:479) still leaves inconsistent DB state (or errors during deletion), so seeding or the teams endpoint fails.

## Approach (TDD)

### 1) Reproduce via HTTP
- Use curl against `/teams/all` and capture:
  - HTTP status
  - response body
  - server logs correlating to request

### 2) Capture docker logs around bootstrap
- Start/ensure dev stack is up via [`docker-compose.dev.yml`](docker-compose.dev.yml:1).
- Collect:
  - API logs from container startup through seeding
  - DB logs if errors/constraint violations occur

### 3) Add regression test (make it fail first)
- Add an API e2e/integration test that:
  1. Runs with postgres persistence and force reseed on.
  2. Calls `/teams/all`.
  3. Asserts every team returns a generated logo URL:
     - `logoUrl` matches `/media/teams/{id}/logo` (or resolver output for generated ref)
     - must not be `/media/default/logo.png`

Candidate location: existing media module tests under [`apps/api/src/domain/media`](apps/api/src/domain/media/MediaModule.test.ts:1) or a new teams controller test.

### 4) Diagnose failing test
- If 500:
  - Identify stack trace and failing query.
  - Confirm whether failures occur during reseed or request handling.
- If 200 but wrong URLs:
  - Query DB for `racing_teams.logoRef` and verify it is generated.

### 5) Minimal fix
Prefer fixing cleanup by:
- Deleting in correct order to satisfy FKs.
- Ensuring `racing_teams` + dependent tables are cleared.
- Avoiding partial deletes that can leave orphaned rows.

### 6) Verification
- Run eslint, tsc, tests.
- Manual verification:
  - `curl http://localhost:3001/teams/all` returns `logoUrl: /media/teams/{id}/logo`.
  - Requesting one returned URL is `200 OK`.

