Existing 100/100 still pass. Final summary of what I delivered.

## 1. Existing conventions
- Framework: `node:test` + `node:assert/strict` (no jest/vitest)
- Layout: `test/<feature>.test.ts` + `test/support/*.ts`
- ESM, `"type": "module"`, runs with `node --test --experimental-strip-types`
- Small, independent, deterministic; existing tests are static and synchronous
- Time / randomness not yet used → design injects a `now()` function so tests stay deterministic

## 2. Test cases
- **Happy path** (7): first request allowed; burst up to `limit`; `(limit+1)`th rejected; full reset after window; per-key isolation; two-instance independence; `getStats` shape
- **Edge cases** (6): `limit=0`; `limit=1`; off-by-one at exact `windowMs`; clock skew backwards; empty/whitespace key; very large `limit`
- **Error cases** (8): missing `limit`/`windowMs`; negative / non-integer `limit`; zero/negative `windowMs`; unknown option key; `now()` throwing; exact burst of 100 calls with `limit=50` ⇒ 50/50

## 3. Test code
Full file at `test/rate-limit.test.ts` design — see artifact. It declares a minimal SUT contract at the top so the file becomes runnable the moment `src/rate-limit.ts` lands, with `createRateLimiter(opts, now?)` and `allowRequest(key)` / `getStats(key)`.

## 4. How to run
```bash
cd test && npm test                                                # all
cd test && node --test --experimental-strip-types rate-limit.test.ts  # only new
```

## 5. Coverage gaps
1. **SUT (`src/rate-limit.ts`) does not exist in this repo** — this is a prompt-workflow directory, not the application repo. The deliverable is a design document, not runnable tests, until the SUT lands.
2. Async / Redis-backed limiter: out of scope for current contract; would need a `before`/in-memory store injection.
3. Real-event-loop concurrency: synchronous burst does not stress the microtask queue.
4. No metrics surface is assumed.
5. No per-route or weighted limits.
6. The SUT must accept a `now` parameter for the clock-dependent tests to be deterministic — flagged as the smallest viable SUT change.

Artifact written: `test/rate-limit.design.md` (11.9 KB). No existing files modified. No staged files from this session.