import { defineFeature } from "@repo/core-shared/conformance"; /** * The workspaces feature's conformance manifest. Drives binding-slot * types in `di/bind-production.ts` and is read by ESLint, the boot * assertion, and the CI drift gate. * * Conventions: * - `mutates: true` for any use case that creates, updates, or deletes state * - `audits` lists every audit event the use case emits (must match calls * to `auditLog.record(...)` in the factory body — ESLint enforces this) * - `publishes` / `consumes` cover cross-feature events through `IEventBus` */ export const workspacesManifest = defineFeature({ name: "workspaces", requiredCores: ["audit"], useCases: { connectWorkspace: { mutates: true, audits: ["workspace-connected"], publishes: [], consumes: [], analyticsEvents: [], }, getWorkspace: { mutates: false, audits: [], publishes: [], consumes: [], analyticsEvents: [], }, }, realtimeChannels: [], jobs: [], // // Coverage bands — single source of truth (ADR-020). Read by: // - vitest.config.ts (test-time thresholds, L0) // - assertFeatureConformance (boot-time, fails dev/prod on drift) // - pnpm coverage:diff (cover-the-diff gate, L1) // Edit here; the helper in vitest.config picks up the new numbers. coverage: { bands: { baseline: { statements: 80, branches: 75, functions: 80, lines: 80 }, entities: { statements: 100, branches: 100, functions: 100, lines: 100 }, "use-cases": { statements: 100, branches: 95, functions: 100, lines: 100, }, controllers: { statements: 100, branches: 95, functions: 100, lines: 100, }, }, mutationTargets: ["entities", "use-cases"], }, } as const); export type WorkspacesManifest = typeof workspacesManifest;