Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Milestones
v1.0 MVP (Shipped: 2026-03-27)
Phases completed: 4 phases, 18 plans Timeline: 2026-03-26 → 2026-03-27 (2 days) Stats: ~2,746 LOC TypeScript/TSX, 101 files, 73 commits
Key accomplishments:
- Vite 6 + React 18 + TypeScript scaffold with Tailwind v4, Vitest, and zero-error dev server
- Backend Schema Registry as single source of truth — drives form rendering, Zod validation, and config generation for Azure Blob, S3, S3-compatible
- 4 pure generator functions (rclone.conf, Intune install/detection, RMM script) — 61 tests, UTF-8 no-BOM, SYSTEM-context safe
- Multi-step wizard (backend selection → config → deployment options) with full back-navigation and no data loss — 87 tests GREEN
- Review + download + security layer — live preview, security gate, individual downloads, ZIP bundle, clipboard copy — 98 tests GREEN
- Pure client-side: no backend, no localStorage writes, credentials never leave the browser
Tech debt deferred to v1.1:
scriptTargetscollected in DeploymentStep but ignored by ReviewStep (all output blocks render unconditionally)- ReviewStep missing explicit Back button (UX inconsistency)
- Backend list hardcoded in BackendSelectionStep, not driven by BACKEND_REGISTRY keys
BackendFormValues<T>dead export in src/schemas/index.tsact()warnings in BackendSelectionStep tests
v1.1 Backlog & Tech Debt (Shipped: 2026-03-31)
Phases completed: 3 phases, 11 plans Timeline: 2026-03-30 → 2026-03-31 (2 days) Stats: 47 files changed, +7,311 / -210 lines
Key accomplishments:
- Registry-driven architecture — BACKEND_REGISTRY enriched with
displayName,description,fields; BackendSelectionStep fully data-driven viaObject.entries() - 4 new cloud backends — OneDrive, SFTP (password + key auth), GCS, and Backblaze B2 added end-to-end through registry, schema, and UI
- SftpAuthToggle component — CSS-hidden toggle for SFTP auth method (password vs SSH key), following AzureAuthToggle pattern
- RemoteConfigStep extended for all 7 backends — registry-loop renders all fields; SFTP has dedicated branch
- Inline field validation —
FieldDef.validateregex rules on 3 fields; wired viabuildZodSchema().regex() - Contextual tooltips (UX-01) —
FieldDef.tooltipTextrendered via ⓘ button across all field types
Tech debt carried forward:
- 7 browser UI verifications pending (confirmatory, not discovery)
- FieldRenderer aria inconsistency between text-branch and select-branch (cosmetic)
- Phase 7 Nyquist compliance partial