3.7 KiB
id, title, status, assignee, created_date, updated_date, labels, dependencies, priority, ordinal
| id | title | status | assignee | created_date | updated_date | labels | dependencies | priority | ordinal | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TASK-78 | Modularize config definitions and validation by domain | Done | 2026-02-18 11:43 | 2026-02-22 07:49 |
|
|
high | 78000 |
Description
Config defaults and resolution are still concentrated in large files (src/config/definitions.ts, src/config/service.ts). This task splits config schema/defaults/validation into domain modules while preserving a single composed public config API.
Suggestions
- Organize by domain (
anki,subtitle,jellyfin,anilist,launcher,runtime). - Keep one composition root that merges domain validators and defaults.
- Prefer small reusable validator helpers over per-field inline logic.
Action Steps
- Define domain module boundaries for defaults + validation rules.
- Extract domain validators with shared primitives and warning builder.
- Compose resolved config in a central aggregator module.
- Keep
ConfigServiceexternal API stable. - Expand tests for domain-level validation and composed config output.
- Update config docs to reflect module ownership and extension workflow.
Acceptance Criteria
- #1 Config definitions/validation are split by domain with clear ownership
- #2
ConfigServiceAPI remains backward-compatible - #3 Validation behavior remains stable under existing tests
- #4 New domain-level tests prevent regression in future config additions
Implementation Notes
2026-02-21: Started execution via writing-plans/executing-plans workflow in opencode session opencode-task78-config-domain-20260221T235604Z-p9x2.
2026-02-22: Refactored src/config/definitions.ts into a composed facade over domain modules under src/config/definitions/ (defaults-*.ts, options-*.ts, runtime-options.ts, template-sections.ts, shared.ts) while preserving exported API names and ConfigService behavior.
Added domain-level regression tests in src/config/definitions/domain-registry.test.ts for critical registry paths, duplicate-path guard, template section key uniqueness, and per-domain contributor coverage.
Updated contributor docs (docs/development.md) with config extension workflow by domain ownership and composition entrypoint guidance.
Verification: bun test src/config/definitions/domain-registry.test.ts (3 pass), bun run test:config:src (49 pass), bun run test:core:src (219 pass, 6 skip).
make generate-config currently blocked by pre-existing TypeScript errors in src/main/state.test.ts missing exports from src/main/state (outside TASK-78 scope).
Follow-up: wired src/config/definitions/domain-registry.test.ts into package.json config test lanes (test:config:src + test:config:dist). Re-ran bun run test:config:src => 52 pass.
Final Summary
Modularized config definition ownership by introducing domain-specific defaults, option registry builders, runtime-option metadata, and template-section modules under src/config/definitions/, with src/config/definitions.ts preserved as the single composed public API. Added domain-level registry tests and updated contributor docs for the new config extension workflow; config/core source test lanes pass.
Definition of Done
- #1 Config and core tests pass
- #2 Documentation updated for config extension workflow