chore(work): decompose security-headers-rate-limit-sbom epic

Generated 1 epic + 11 stories under docs/work/epics/ from the approved
PRD docs/work/prds/security-headers-rate-limit-sbom.prd.md. Stories
cover rate-limit type primitives + implementations + ESLint rule +
withRateLimit wrapper, auth.signIn rate-limit backfill, security
headers core module + framework adapters, app wiring across web-next /
web-tanstack / cms, SBOM CI workflow, and documentation. Ready for
`pnpm work dispatch --execute`.
This commit is contained in:
2026-05-20 10:14:54 +02:00
parent 352a7c64c1
commit a633561c82
13 changed files with 762 additions and 3 deletions

View File

@@ -1,5 +1,5 @@
{
"updated_at": "2026-05-19T22:09:30.480Z",
"updated_at": "2026-05-20T08:14:56.249Z",
"epics": {
"binder-wrap-helper": {
"status": "done",
@@ -566,9 +566,202 @@
"blocks": []
}
}
},
"security-headers-rate-limit-sbom": {
"status": "in-progress",
"title": "Security headers + rate-limit primitive + SBOM in CI — Epic C of ADR-025",
"prd": "docs/work/prds/security-headers-rate-limit-sbom.prd.md",
"stories": {
"01-rate-limit-type-primitives": {
"status": "in-progress",
"title": "Rate-limit type primitives and manifest field",
"ac_total": 1,
"ac_completed": 0,
"depends_on": [],
"blocks": []
},
"02-rate-limit-implementations": {
"status": "todo",
"title": "Rate-limit implementations — Noop, InMemory, Recording",
"ac_total": 2,
"ac_completed": 0,
"depends_on": [
"01-rate-limit-type-primitives"
],
"blocks": []
},
"03-no-undeclared-rate-limit-eslint-rule": {
"status": "todo",
"title": "`no-undeclared-rate-limit` ESLint rule",
"ac_total": 1,
"ac_completed": 0,
"depends_on": [
"01-rate-limit-type-primitives"
],
"blocks": [
"05-auth-signin-rate-limit-backfill"
]
},
"04-with-rate-limit-wrapper-and-conformance": {
"status": "todo",
"title": "`withRateLimit` wrapper and conformance extensions",
"ac_total": 1,
"ac_completed": 0,
"depends_on": [
"01-rate-limit-type-primitives",
"02-rate-limit-implementations"
],
"blocks": [
"05-auth-signin-rate-limit-backfill"
]
},
"05-auth-signin-rate-limit-backfill": {
"status": "todo",
"title": "auth.signIn rate-limit backfill",
"ac_total": 1,
"ac_completed": 0,
"depends_on": [],
"blocks": []
},
"06-security-headers-core-module": {
"status": "todo",
"title": "Security headers core module",
"ac_total": 1,
"ac_completed": 0,
"depends_on": [],
"blocks": [
"07-security-header-adapters"
]
},
"07-security-header-adapters": {
"status": "todo",
"title": "Per-framework security header adapters",
"ac_total": 2,
"ac_completed": 0,
"depends_on": [
"06-security-headers-core-module"
],
"blocks": [
"08-app-wiring-web-next",
"09-app-wiring-web-tanstack-and-cms"
]
},
"08-app-wiring-web-next": {
"status": "todo",
"title": "App wiring: web-next",
"ac_total": 1,
"ac_completed": 0,
"depends_on": [
"07-security-header-adapters"
],
"blocks": []
},
"09-app-wiring-web-tanstack-and-cms": {
"status": "todo",
"title": "App wiring: web-tanstack and cms",
"ac_total": 2,
"ac_completed": 0,
"depends_on": [
"07-security-header-adapters"
],
"blocks": []
},
"10-sbom-ci-workflow": {
"status": "todo",
"title": "SBOM CI workflow and ADR-023 amendment",
"ac_total": 1,
"ac_completed": 0,
"depends_on": [],
"blocks": []
},
"11-documentation": {
"status": "todo",
"title": "Documentation and conformance reference updates",
"ac_total": 2,
"ac_completed": 0,
"depends_on": [],
"blocks": []
}
}
}
},
"ready": [],
"blocked": [],
"ready": [
{
"epic": "security-headers-rate-limit-sbom",
"story": "01-rate-limit-type-primitives",
"title": "Rate-limit type primitives and manifest field"
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "05-auth-signin-rate-limit-backfill",
"title": "auth.signIn rate-limit backfill"
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "06-security-headers-core-module",
"title": "Security headers core module"
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "10-sbom-ci-workflow",
"title": "SBOM CI workflow and ADR-023 amendment"
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "11-documentation",
"title": "Documentation and conformance reference updates"
}
],
"blocked": [
{
"epic": "security-headers-rate-limit-sbom",
"story": "02-rate-limit-implementations",
"title": "Rate-limit implementations — Noop, InMemory, Recording",
"waiting_on": [
"security-headers-rate-limit-sbom/01-rate-limit-type-primitives"
]
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "03-no-undeclared-rate-limit-eslint-rule",
"title": "`no-undeclared-rate-limit` ESLint rule",
"waiting_on": [
"security-headers-rate-limit-sbom/01-rate-limit-type-primitives"
]
},
{
"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/01-rate-limit-type-primitives",
"security-headers-rate-limit-sbom/02-rate-limit-implementations"
]
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "07-security-header-adapters",
"title": "Per-framework security header adapters",
"waiting_on": [
"security-headers-rate-limit-sbom/06-security-headers-core-module"
]
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "08-app-wiring-web-next",
"title": "App wiring: web-next",
"waiting_on": [
"security-headers-rate-limit-sbom/07-security-header-adapters"
]
},
{
"epic": "security-headers-rate-limit-sbom",
"story": "09-app-wiring-web-tanstack-and-cms",
"title": "App wiring: web-tanstack and cms",
"waiting_on": [
"security-headers-rate-limit-sbom/07-security-header-adapters"
]
}
],
"needs_prd_ship": []
}