First implementation milestone of the agent-first coverage architecture (ADR-020, PRD 2026-05-13). Lands the keystone — coverage bands as a typed declaration in feature.manifest.ts plus a helper that derives vitest threshold shapes from them. New file packages/core-shared/src/conformance/coverage.ts (self- contained, no relative imports — loadable at vitest config time): - CoverageBand / CoverageBands / CoverageManifest / VitestThresholds types - DEFAULT_COVERAGE_BANDS (baseline 80/75/80/80; entities 100/100/100/ 100; use-cases + controllers 100/95/100/100) — matches ADR-011 - DEFAULT_MUTATION_SCORE (80) + DEFAULT_MUTATION_TARGETS (entities + use-cases) - getCoverageBands / getMutationConfig — manifest -> resolved bands, with default fallback for missing layers - vitestThresholdsFromBands / vitestThresholdsFromManifest — convert to vitest's coverage.thresholds shape with the layer-to-glob mapping define-feature.ts gains the optional coverage field on FeatureManifest (imports its type from coverage.ts to avoid a relative-import cycle at config-load time). Exposed via two subpaths: @repo/core-shared/conformance (re-exports for source/test code) and @repo/core-shared/conformance/coverage (direct subpath safe to load from vitest configs, bypasses the index re-export chain that Node ESM doesn't auto-extension-resolve). Auth wired as proof-of-concept: - packages/auth/src/feature.manifest.ts declares its coverage section - packages/auth/vitest.config.ts imports the helper + DEFAULT_COVERAGE_BANDS and emits thresholds via vitestThresholdsFromBands(DEFAULT_COVERAGE_BANDS) — no more hand-maintained per-glob thresholds block. Verified: 175/175 tests pass; 14/14 typechecks clean; auth coverage green (21 tests, 93.77% overall, all per-layer 100% bands hold). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
76 lines
2.6 KiB
JSON
76 lines
2.6 KiB
JSON
{
|
|
"name": "@repo/core-shared",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"exports": {
|
|
".": "./src/index.ts",
|
|
"./audit": "./src/audit/index.ts",
|
|
"./conformance": "./src/conformance/index.ts",
|
|
"./conformance/coverage": "./src/conformance/coverage.ts",
|
|
"./di": "./src/di/index.ts",
|
|
"./di/bind-protocols": "./src/di/bind-protocols.ts",
|
|
"./di/bind-context": "./src/di/bind-context.ts",
|
|
"./jobs": "./src/jobs/index.ts",
|
|
"./payload": "./src/payload/index.ts",
|
|
"./trpc/init": "./src/trpc/init.ts",
|
|
"./trpc/context": "./src/trpc/context.ts",
|
|
"./trpc/define-error-middleware": "./src/trpc/define-error-middleware.ts",
|
|
"./instrumentation": "./src/instrumentation/index.ts",
|
|
"./instrumentation/otel": "./src/instrumentation/otel/index.ts",
|
|
"./instrumentation/otel/init-server-node": "./src/instrumentation/otel/init-server-node.ts",
|
|
"./instrumentation/sentry/init-client": "./src/instrumentation/sentry/init-client.ts",
|
|
"./instrumentation/sentry/init-client-react": "./src/instrumentation/sentry/init-client-react.ts"
|
|
},
|
|
"scripts": {
|
|
"build": "tsc --noEmit",
|
|
"lint": "eslint .",
|
|
"test": "vitest run",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@opentelemetry/api": "^1.9.0",
|
|
"@opentelemetry/api-logs": "^0.55.0",
|
|
"@opentelemetry/instrumentation": "^0.55.0",
|
|
"@opentelemetry/instrumentation-http": "^0.55.0",
|
|
"@opentelemetry/instrumentation-pg": "^0.50.0",
|
|
"@opentelemetry/instrumentation-undici": "^0.10.0",
|
|
"@opentelemetry/resources": "^1.27.0",
|
|
"@opentelemetry/sdk-logs": "^0.55.0",
|
|
"@opentelemetry/sdk-metrics": "^1.27.0",
|
|
"@opentelemetry/sdk-node": "^0.55.0",
|
|
"@opentelemetry/sdk-trace-base": "^1.27.0",
|
|
"@opentelemetry/semantic-conventions": "^1.27.0",
|
|
"@sentry/nextjs": "^10.51.0",
|
|
"@sentry/opentelemetry": "^10.51.0",
|
|
"@trpc/server": "^11.0.0",
|
|
"payload": "^3.14.0",
|
|
"superjson": "^2.2.1",
|
|
"zod": "^3.24.0"
|
|
},
|
|
"peerDependencies": {
|
|
"@sentry/node": "^10.51.0",
|
|
"@sentry/react": "^10.51.0"
|
|
},
|
|
"peerDependenciesMeta": {
|
|
"@sentry/node": {
|
|
"optional": true
|
|
},
|
|
"@sentry/react": {
|
|
"optional": true
|
|
}
|
|
},
|
|
"devDependencies": {
|
|
"@opentelemetry/context-async-hooks": "^1.28.0",
|
|
"@repo/core-eslint": "workspace:*",
|
|
"@repo/core-testing": "workspace:*",
|
|
"@repo/core-typescript": "workspace:*",
|
|
"@sentry/node": "^10.51.0",
|
|
"@sentry/react": "^10.51.0",
|
|
"@types/node": "^22.0.0",
|
|
"inversify": "^6.2.0",
|
|
"reflect-metadata": "^0.2.2",
|
|
"vitest": "^3.1.0"
|
|
}
|
|
}
|