feat(workspaces): scaffold feature
Scaffold the workspaces feature package via pnpm turbo gen feature (single Workspace entity, getWorkspace use case) and hand-wire the aggregators: bindAll dispatcher (web-next), core-api app router, and workspace deps. Release-please registration reverted per the root-only versioning policy (AGENTS.md, ADR-027 retrofit). Pinned @trpc/server to the repo-wide 11.16.0 resolution so instanceof TRPCError checks share one module instance. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
This commit is contained in:
55
packages/workspaces/src/feature.manifest.ts
Normal file
55
packages/workspaces/src/feature.manifest.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
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: [],
|
||||
useCases: {
|
||||
getWorkspace: {
|
||||
mutates: false,
|
||||
audits: [],
|
||||
publishes: [],
|
||||
consumes: [],
|
||||
analyticsEvents: [],
|
||||
},
|
||||
},
|
||||
realtimeChannels: [],
|
||||
jobs: [],
|
||||
// <gen:coverage>
|
||||
// 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;
|
||||
Reference in New Issue
Block a user