bfdf0a82da
Tests, CSP nonce middleware, SSRF guard, perf-route hardening, Docker env isolation, migration runbook, RBAC E2E coverage. Tickets resolved: - #19: MfaSetup.test.ts — static source tests confirming local QR rendering - #20: ssrf-guard.test.ts (16 tests) + webhook-procedure-support mock fix - #21: /api/perf route.test.ts (5 tests) — header-only auth, fail-closed - #22: middleware.ts (nonce-based CSP) + middleware.test.ts (6 tests); layout.tsx async + nonce prop; CSP removed from next.config.ts - #23: Active-session registry enforcement verified (already in codebase) - #24: docker-compose.yml REDIS_URL hardcoded (no host-env substitution) - #25: docker-compose.yml REDIS_URL + docs/developer-runbook.md created - #26: e2e/dev-system/rbac-data-access.spec.ts (12 tests, 3 roles × 4 procedures) Quality gates: tsc clean, api 1447/1447, web 189/189 passing. Turbo concurrency capped at 2 (package.json) to prevent OOM under parallel test runs. Co-Authored-By: claude-flow <ruv@ruv.net>
56 lines
2.4 KiB
JSON
56 lines
2.4 KiB
JSON
{
|
|
"name": "capakraken",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"predev": "pnpm check:exports && pnpm check:imports",
|
|
"dev": "node ./scripts/run-from-workspace-root.mjs turbo dev",
|
|
"prebuild": "pnpm check:exports && pnpm check:imports",
|
|
"build": "node ./scripts/run-from-workspace-root.mjs turbo build",
|
|
"lint": "node ./scripts/run-from-workspace-root.mjs turbo lint",
|
|
"test": "node ./scripts/run-from-workspace-root.mjs turbo run test:unit --concurrency=2",
|
|
"test:unit": "node ./scripts/run-from-workspace-root.mjs turbo test:unit --concurrency=2",
|
|
"test:e2e": "node ./scripts/run-from-workspace-root.mjs turbo test:e2e",
|
|
"test:scripts": "node --test scripts/*.test.mjs",
|
|
"check:architecture": "node ./scripts/check-architecture-guardrails.mjs",
|
|
"check:exports": "node ./scripts/check-workspace-exports.mjs",
|
|
"check:imports": "node ./scripts/check-workspace-imports.mjs",
|
|
"worktree:hygiene": "node ./scripts/worktree-hygiene.mjs",
|
|
"clean:next": "node ./scripts/clean-next-artifacts.mjs",
|
|
"db:doctor": "node ./scripts/db-doctor.mjs capakraken",
|
|
"db:prisma": "node ./scripts/prisma-with-env.mjs",
|
|
"db:push": "node ./scripts/prisma-with-env.mjs db push",
|
|
"db:migrate": "node ./scripts/prisma-with-env.mjs migrate dev",
|
|
"db:generate": "node ./scripts/prisma-with-env.mjs generate",
|
|
"db:validate": "node ./scripts/prisma-with-env.mjs validate",
|
|
"db:seed": "node ./scripts/with-env.mjs pnpm --filter @capakraken/db db:seed",
|
|
"db:studio": "node ./scripts/with-env.mjs pnpm --filter @capakraken/db db:studio",
|
|
"db:reset:dispo": "pnpm --filter @capakraken/db db:reset:dispo",
|
|
"db:import:dispo": "pnpm --filter @capakraken/db db:import:dispo",
|
|
"db:readiness:demand-assignment": "pnpm --filter @capakraken/db db:readiness:demand-assignment",
|
|
"format": "prettier --write \"**/*.{ts,tsx,md,json}\"",
|
|
"typecheck": "node ./scripts/run-from-workspace-root.mjs turbo typecheck"
|
|
},
|
|
"devDependencies": {
|
|
"@capakraken/eslint-config": "workspace:*",
|
|
"@capakraken/tsconfig": "workspace:*",
|
|
"prettier": "^3.3.3",
|
|
"turbo": "^2.3.3",
|
|
"typescript": "^5.6.3"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.0.0",
|
|
"pnpm": ">=9.0.0"
|
|
},
|
|
"pnpm": {
|
|
"overrides": {
|
|
"flatted": "^3.4.2",
|
|
"picomatch": "^4.0.4"
|
|
}
|
|
},
|
|
"packageManager": "pnpm@9.14.2",
|
|
"dependencies": {
|
|
"framer-motion": "^12.38.0"
|
|
}
|
|
}
|