--- phase: 01-foundation plan: "02" subsystem: schema tags: [typescript, rclone, registry, tdd, vitest, wave-0] # Dependency graph requires: - 01-01 (Vite scaffold, Vitest configured) provides: - BackendType union, FieldDef interface, BACKEND_REGISTRY constant (src/schemas/registry.ts) - Wave 0 TDD stub: src/schemas/index.test.ts (SC-3 Zod schema acceptance criteria) - Wave 0 TDD stub: src/store/reducer.test.ts (SC-4 wizardReducer acceptance criteria) affects: - 01-03 (implements BACKEND_SCHEMAS against index.test.ts) - 01-04 (implements wizardReducer against reducer.test.ts) - Phase 2 (generates rclone.conf from BACKEND_REGISTRY key names) - Phase 3 (renders dynamic forms from BACKEND_REGISTRY field definitions) # Tech tracking tech-stack: added: [] patterns: - "Registry pattern: BACKEND_REGISTRY as single source of truth for rclone field definitions" - "Wave 0 TDD: write test stubs defining acceptance criteria before implementation exists" - "FieldDef.key values MUST be snake_case matching rclone INI config key names exactly" key-files: created: - src/schemas/registry.ts - src/schemas/registry.test.ts - src/schemas/index.test.ts - src/store/reducer.test.ts modified: [] key-decisions: - "BACKEND_REGISTRY as Record — typed map drives both form rendering (Phase 3) and config generation (Phase 2)" - "Wave 0 TDD stubs written before implementation — index.test.ts and reducer.test.ts fail RED intentionally until Plans 03-04" - "All FieldDef.key values snake_case matching rclone config keys — wrong keys would silently produce broken .conf files" - "s3 and s3-compatible share rclone type=s3, differentiated by provider field (AWS vs Other)" requirements-completed: [] # Metrics duration: 2min completed: 2026-03-26 --- # Phase 01 Plan 02: Backend Schema Registry Summary **TypeScript schema registry with rclone-compatible field definitions for three backends (azureblob, s3, s3-compatible), plus Wave 0 TDD stubs establishing acceptance criteria for Plans 03 and 04** ## Performance - **Duration:** ~2 min - **Started:** 2026-03-26T10:16:59Z - **Completed:** 2026-03-26T10:17:47Z - **Tasks:** 2 - **Files modified:** 4 ## Accomplishments - Backend Schema Registry created as the single source of truth: `BackendType` union, `FieldDef` interface, `BACKEND_REGISTRY` constant with azureblob (3 fields), s3 (4 fields), and s3-compatible (5 fields) - All `FieldDef.key` values are snake_case matching rclone INI config key names exactly (verified: no uppercase in key values) - `registry.test.ts` written and passing: 7 tests GREEN covering backend presence, field structure, and key name validity - Wave 0 TDD stubs created: `index.test.ts` (8 tests for BACKEND_SCHEMAS Zod parsing) and `reducer.test.ts` (8 tests for wizardReducer actions) — both fail with "Cannot find module" as expected in RED phase ## Task Commits Each task was committed atomically: 1. **Task 1: Create the Backend Schema Registry** - `4c614fc` (feat) 2. **Task 2: Write Wave 0 test stubs for SC-2, SC-3, SC-4** - `9e28bf9` (test) **Plan metadata:** _(committed after SUMMARY.md — see final commit)_ ## Files Created/Modified - `src/schemas/registry.ts` — BackendType union, FieldDef interface, BACKEND_REGISTRY with three backends - `src/schemas/registry.test.ts` — 7 tests verifying registry structure (GREEN, SC-2) - `src/schemas/index.test.ts` — 8 tests for BACKEND_SCHEMAS Zod safeParse (RED until Plan 03, SC-3) - `src/store/reducer.test.ts` — 8 tests for wizardReducer actions (RED until Plan 04, SC-4) ## Decisions Made - `BACKEND_REGISTRY` typed as `Record` to guarantee TypeScript catches missing backends and malformed field definitions at compile time - Used `provider` select field with `options: [{ value: 'AWS', label: '...' }]` for s3 and `options: [{ value: 'Other', label: '...' }]` for s3-compatible — matches how rclone.conf differentiates them under the same `type=s3` entry - Wave 0 TDD stub approach: acceptance criteria written as failing tests before implementation, ensuring Plans 03-04 implement exactly what is specified here rather than discovering requirements during implementation ## Deviations from Plan None - plan executed exactly as written. ## Issues Encountered None. ## User Setup Required None. ## Next Phase Readiness - `src/schemas/registry.ts` ready for import by Plans 03 and 04 - `src/schemas/index.test.ts` defines exact Zod schema behavior Plan 03 must implement (8 tests) - `src/store/reducer.test.ts` defines exact reducer action behavior Plan 04 must implement (8 tests) - CAUTION: Verify rclone key names against https://rclone.org/azureblob/ and https://rclone.org/s3/ before Phase 2 script generation — MEDIUM confidence on current key names --- *Phase: 01-foundation* *Completed: 2026-03-26* ## Self-Check: PASSED - src/schemas/registry.ts: FOUND - src/schemas/registry.test.ts: FOUND - src/schemas/index.test.ts: FOUND - src/store/reducer.test.ts: FOUND - .planning/phases/01-foundation/01-02-SUMMARY.md: FOUND - Commit 4c614fc (Task 1): FOUND - Commit 9e28bf9 (Task 2): FOUND