diff --git a/docs/work/_system/_state.json b/docs/work/_system/_state.json index 39f114f..7f1d109 100644 --- a/docs/work/_system/_state.json +++ b/docs/work/_system/_state.json @@ -1,5 +1,5 @@ { - "updated_at": "2026-05-20T08:32:32.756Z", + "updated_at": "2026-05-20T08:38:25.437Z", "epics": { "binder-wrap-helper": { "status": "done", @@ -581,10 +581,10 @@ "blocks": [] }, "02-rate-limit-implementations": { - "status": "in-progress", + "status": "done", "title": "Rate-limit implementations — Noop, InMemory, Recording", "ac_total": 2, - "ac_completed": 1, + "ac_completed": 2, "depends_on": [ "01-rate-limit-type-primitives" ], @@ -688,13 +688,13 @@ "ready": [ { "epic": "security-headers-rate-limit-sbom", - "story": "02-rate-limit-implementations", - "title": "Rate-limit implementations — Noop, InMemory, Recording" + "story": "03-no-undeclared-rate-limit-eslint-rule", + "title": "`no-undeclared-rate-limit` ESLint rule" }, { "epic": "security-headers-rate-limit-sbom", - "story": "03-no-undeclared-rate-limit-eslint-rule", - "title": "`no-undeclared-rate-limit` ESLint rule" + "story": "04-with-rate-limit-wrapper-and-conformance", + "title": "`withRateLimit` wrapper and conformance extensions" }, { "epic": "security-headers-rate-limit-sbom", @@ -718,14 +718,6 @@ } ], "blocked": [ - { - "epic": "security-headers-rate-limit-sbom", - "story": "04-with-rate-limit-wrapper-and-conformance", - "title": "`withRateLimit` wrapper and conformance extensions", - "waiting_on": [ - "security-headers-rate-limit-sbom/02-rate-limit-implementations" - ] - }, { "epic": "security-headers-rate-limit-sbom", "story": "07-security-header-adapters", diff --git a/docs/work/epics/security-headers-rate-limit-sbom/02-rate-limit-implementations/_story.md b/docs/work/epics/security-headers-rate-limit-sbom/02-rate-limit-implementations/_story.md index b5d4f77..dbfc26c 100644 --- a/docs/work/epics/security-headers-rate-limit-sbom/02-rate-limit-implementations/_story.md +++ b/docs/work/epics/security-headers-rate-limit-sbom/02-rate-limit-implementations/_story.md @@ -3,7 +3,7 @@ id: 02-rate-limit-implementations epic: security-headers-rate-limit-sbom title: Rate-limit implementations — Noop, InMemory, Recording type: technical-story -status: in-progress +status: done feature: core-shared depends-on: [01-rate-limit-type-primitives] blocks: @@ -12,7 +12,7 @@ blocks: 05-auth-signin-rate-limit-backfill, ] created: 2026-05-20T00:00:00Z -updated: 2026-05-20T08:32:32.585Z +updated: 2026-05-20T08:38:25.271Z --- ## Goal @@ -46,4 +46,4 @@ The `withRateLimit` wrapper (Story 04) and the `auth.signIn` backfill (Story 05) ## Tasks - [x] Implement `NoopRateLimit` in `packages/core-shared/src/rate-limit/noop-rate-limit.ts` with sibling unit test (consume always allowed, reset no-op); implement `InMemoryRateLimit` in `packages/core-shared/src/rate-limit/in-memory-rate-limit.ts` with sibling unit test (per-bucket tracking, check-at-read expiry via injected clock, explicit reset restores budget); export both from `core-shared` barrel; all gates pass. -- [ ] Implement `RecordingRateLimit` in `packages/core-testing/src/rate-limit/recording-rate-limit.ts` capturing `consume` + `reset` call arguments verbatim with `consumeCalls` + `resetCalls` accessors; sibling test verifies capture correctness; export from `core-testing` barrel; all gates pass. +- [x] Implement `RecordingRateLimit` in `packages/core-testing/src/rate-limit/recording-rate-limit.ts` capturing `consume` + `reset` call arguments verbatim with `consumeCalls` + `resetCalls` accessors; sibling test verifies capture correctness; export from `core-testing` barrel; all gates pass. diff --git a/docs/work/epics/security-headers-rate-limit-sbom/_epic.md b/docs/work/epics/security-headers-rate-limit-sbom/_epic.md index 1426629..58f0a4a 100644 --- a/docs/work/epics/security-headers-rate-limit-sbom/_epic.md +++ b/docs/work/epics/security-headers-rate-limit-sbom/_epic.md @@ -7,7 +7,7 @@ status: in-progress features: [core-shared, core-testing, core-eslint, auth, web-next, web-tanstack, cms] created: 2026-05-20T00:00:00Z -updated: 2026-05-20T08:24:33.292Z +updated: 2026-05-20T08:38:25.271Z --- ## Goal @@ -21,7 +21,7 @@ Security scanners flag the absence of HSTS, X-Frame-Options, X-Content-Type-Opti ## Stories - [x] [01 — Rate-limit type primitives and manifest field](01-rate-limit-type-primitives/_story.md) -- [ ] [02 — Rate-limit implementations: Noop, InMemory, Recording](02-rate-limit-implementations/_story.md) +- [x] [02 — Rate-limit implementations: Noop, InMemory, Recording](02-rate-limit-implementations/_story.md) - [ ] [03 — `no-undeclared-rate-limit` ESLint rule](03-no-undeclared-rate-limit-eslint-rule/_story.md) - [ ] [04 — `withRateLimit` wrapper and conformance extensions](04-with-rate-limit-wrapper-and-conformance/_story.md) - [ ] [05 — auth.signIn rate-limit backfill](05-auth-signin-rate-limit-backfill/_story.md)