Full spec: docs/hardening-roadmap-2026-04-16.md#h-5
Description
packages/core/src/config.ts:74-141 is ~70 lines of manual type assertions. Zod is already a dep in @sourcerer/ai, @sourcerer/intake, @sourcerer/scoring. Custom validator duplicates Zod, skips nested-field checks, produces weaker errors.
Current State
validateConfig() and applyDefaults() in packages/core/src/config.ts.
Suggested Fix
Verification
Automation Hints
scope: packages/core/package.json, packages/core/src/config.ts, packages/core/src/tests/config.test.ts
do-not-touch: other packages
approach: refactor-to-config
risk: low
max-files-changed: 3
blocked-by: none
bail-if: any downstream package fails to build
Priority
Medium
Full spec:
docs/hardening-roadmap-2026-04-16.md#h-5Description
packages/core/src/config.ts:74-141is ~70 lines of manual type assertions. Zod is already a dep in@sourcerer/ai,@sourcerer/intake,@sourcerer/scoring. Custom validator duplicates Zod, skips nested-field checks, produces weaker errors.Current State
validateConfig()andapplyDefaults()inpackages/core/src/config.ts.Suggested Fix
zodtopackages/core/package.jsondeps.SourcererConfigSchemawithz.inferproducing existingSourcererConfigtype.validateConfig()body withSourcererConfigSchema.parse(raw)(keep signature +ConfigValidationErrorclass; map ZodError → ConfigValidationError).applyDefaults()— use Zod.default()inline.Verification
pnpm buildpassespnpm testpasses (existingconfig.test.tsunchanged)pnpm typecheckcleanadapters.exa.apiKey: Required)validateConfig()< 20 linesAutomation Hints
scope: packages/core/package.json, packages/core/src/config.ts, packages/core/src/tests/config.test.ts
do-not-touch: other packages
approach: refactor-to-config
risk: low
max-files-changed: 3
blocked-by: none
bail-if: any downstream package fails to build
Priority
Medium