Context
Currently packages/ contains backend/, frontend/, plugins/ — no shared package.
Concrete duplication example:
ACTIVE_REQUEST_STATUSES defined identically (['pending', 'approved', 'processing', 'failed']) in:
packages/frontend/src/utils/requestStatus.ts:2
packages/backend/src/utils/requestStatus.ts:13
Risk: silent divergence at the next workflow change.
Scope
Success criteria
- Single source of truth for cross-cutting contracts
- 0 back↔front duplication on shareable constants
Priority
Medium — launch after the audit if at least 3-4 real duplications are identified.
Parent: #145
Context
Currently
packages/containsbackend/,frontend/,plugins/— nosharedpackage.Concrete duplication example:
ACTIVE_REQUEST_STATUSESdefined identically (['pending', 'approved', 'processing', 'failed']) in:packages/frontend/src/utils/requestStatus.ts:2packages/backend/src/utils/requestStatus.ts:13Risk: silent divergence at the next workflow change.
Scope
packages/shared(ESM, strict TS, no heavy deps)ACTIVE_REQUEST_STATUSESfirst, then cross-cutting DTO typesSuccess criteria
Priority
Medium — launch after the audit if at least 3-4 real duplications are identified.
Parent: #145