diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index 6285fae..8a402ca 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -89,36 +89,36 @@ Which phases cover which requirements. Updated during roadmap creation. | Requirement | Phase | Status | |-------------|-------|--------| -| WIZD-01 | — | Pending | -| WIZD-02 | — | Pending | -| WIZD-03 | — | Pending | -| WIZD-04 | — | Pending | -| BACK-01 | — | Pending | -| BACK-02 | — | Pending | -| BACK-03 | — | Pending | -| CONF-01 | — | Pending | -| CONF-02 | — | Pending | -| CONF-03 | — | Pending | -| DEPL-01 | — | Pending | -| DEPL-02 | — | Pending | -| DEPL-03 | — | Pending | -| DEPL-04 | — | Pending | -| DEPL-05 | — | Pending | -| DOWN-01 | — | Pending | -| DOWN-02 | — | Pending | -| DOWN-03 | — | Pending | -| DOWN-04 | — | Pending | -| DOWN-05 | — | Pending | -| DOWN-06 | — | Pending | -| SECU-01 | — | Pending | -| SECU-02 | — | Pending | -| SECU-03 | — | Pending | +| WIZD-01 | Phase 3 | Pending | +| WIZD-02 | Phase 3 | Pending | +| WIZD-03 | Phase 3 | Pending | +| WIZD-04 | Phase 3 | Pending | +| BACK-01 | Phase 3 | Pending | +| BACK-02 | Phase 3 | Pending | +| BACK-03 | Phase 3 | Pending | +| CONF-01 | Phase 2 | Pending | +| CONF-02 | Phase 4 | Pending | +| CONF-03 | Phase 4 | Pending | +| DEPL-01 | Phase 2 | Pending | +| DEPL-02 | Phase 2 | Pending | +| DEPL-03 | Phase 2 | Pending | +| DEPL-04 | Phase 2 | Pending | +| DEPL-05 | Phase 2 | Pending | +| DOWN-01 | Phase 4 | Pending | +| DOWN-02 | Phase 4 | Pending | +| DOWN-03 | Phase 4 | Pending | +| DOWN-04 | Phase 4 | Pending | +| DOWN-05 | Phase 4 | Pending | +| DOWN-06 | Phase 4 | Pending | +| SECU-01 | Phase 4 | Pending | +| SECU-02 | Phase 4 | Pending | +| SECU-03 | Phase 4 | Pending | **Coverage:** - v1 requirements: 24 total -- Mapped to phases: 0 -- Unmapped: 24 ⚠️ +- Mapped to phases: 24 +- Unmapped: 0 ✓ --- *Requirements defined: 2026-03-26* -*Last updated: 2026-03-26 after initial definition* +*Last updated: 2026-03-26 after roadmap creation* diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md new file mode 100644 index 0000000..393bbf5 --- /dev/null +++ b/.planning/ROADMAP.md @@ -0,0 +1,79 @@ +# Roadmap: Ready2Blob + +## Overview + +Ready2Blob is built inside-out: architectural foundation first, then pure generator functions, then wizard UI, then the download and security layer. This order front-loads the highest-risk correctness requirements (PowerShell encoding, SYSTEM-context paths, credential handling) before any user-facing code exists, and keeps all four phases independently verifiable. + +## Phases + +**Phase Numbering:** +- Integer phases (1, 2, 3): Planned milestone work +- Decimal phases (2.1, 2.2): Urgent insertions (marked with INSERTED) + +Decimal phases appear between their surrounding integers in numeric order. + +- [ ] **Phase 1: Foundation** - Project scaffold, TypeScript types, Backend Schema Registry, Zod schemas, and wizard state store +- [ ] **Phase 2: Generators** - Pure builder functions for rclone.conf and PowerShell deployment scripts, plus download manager +- [ ] **Phase 3: Wizard UI** - Multi-step wizard with backend selector, dynamic backend forms, and deployment options +- [ ] **Phase 4: Review, Download & Security** - Live config preview, security warning gate, all download buttons, clipboard copy, and ZIP bundle + +## Phase Details + +### Phase 1: Foundation +**Goal**: The architectural skeleton exists and all downstream phases can build on it without rework +**Depends on**: Nothing (first phase) +**Requirements**: None directly — this phase creates the infrastructure that all v1 requirements depend on +**Success Criteria** (what must be TRUE): + 1. Vite dev server starts and serves a React + TypeScript app with no console errors + 2. The Backend Schema Registry defines at least Azure Blob, S3, and S3-compatible backends with typed field definitions + 3. Zod validation schemas can be derived from the registry and validate correct/incorrect input correctly + 4. The WizardState useReducer store initializes, accepts dispatch actions, and state is accessible via Context +**Plans**: TBD + +### Phase 2: Generators +**Goal**: Given a completed wizard state, the app can produce correct, deployment-ready file content for all output types +**Depends on**: Phase 1 +**Requirements**: CONF-01, DEPL-01, DEPL-02, DEPL-03, DEPL-04, DEPL-05 +**Success Criteria** (what must be TRUE): + 1. `buildRcloneConf()` produces a valid INI-format rclone.conf string with correct key/value pairs for each supported backend + 2. The Intune install script writes config using UTF-8 no-BOM encoding, places it at the correct path, and never echoes credential values + 3. The Intune detection script exits 0 when both rclone.exe and the config file are present, and non-zero otherwise + 4. The RMM script is self-contained, idempotent, and runs correctly in a generic SYSTEM context + 5. Toggling "include rclone installation" adds a download step to all generated scripts; disabling it removes it +**Plans**: TBD + +### Phase 3: Wizard UI +**Goal**: An IT admin can navigate the full wizard from backend selection through deployment options without losing data +**Depends on**: Phase 1 +**Requirements**: WIZD-01, WIZD-02, WIZD-03, WIZD-04, BACK-01, BACK-02, BACK-03 +**Success Criteria** (what must be TRUE): + 1. User can select a storage backend from a list where Azure Blob and S3 appear first + 2. User can navigate forward through all wizard steps (backend selection → backend config → deployment options) and back without losing entered values + 3. User can configure an Azure Blob remote by entering a storage account name and choosing SAS token or access key authentication + 4. User can configure an Amazon S3 or S3-compatible remote (access key, secret, region, optional endpoint override) + 5. User can set a custom remote name and the field rejects names with invalid characters +**Plans**: TBD + +### Phase 4: Review, Download & Security +**Goal**: An IT admin can see exactly what will be deployed, acknowledge the security implications, and download any combination of generated files +**Depends on**: Phases 2, 3 +**Requirements**: CONF-02, CONF-03, DOWN-01, DOWN-02, DOWN-03, DOWN-04, DOWN-05, DOWN-06, SECU-01, SECU-02, SECU-03 +**Success Criteria** (what must be TRUE): + 1. A live preview of the rclone.conf content updates in real time as the user fills in the wizard forms + 2. Before any download is enabled, the user must acknowledge a security warning that credentials are stored in plain text + 3. The app prominently displays that no data is sent to any server, and wizard state is never written to localStorage or sessionStorage + 4. User can download each artifact individually (rclone.conf, Intune install script, Intune detection script, RMM script) or all together as a ZIP bundle + 5. User can copy any output block to clipboard without downloading +**Plans**: TBD + +## Progress + +**Execution Order:** +Phases execute in numeric order: 1 → 2 → 3 → 4 + +| Phase | Plans Complete | Status | Completed | +|-------|----------------|--------|-----------| +| 1. Foundation | 0/? | Not started | - | +| 2. Generators | 0/? | Not started | - | +| 3. Wizard UI | 0/? | Not started | - | +| 4. Review, Download & Security | 0/? | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md new file mode 100644 index 0000000..d9e6b69 --- /dev/null +++ b/.planning/STATE.md @@ -0,0 +1,63 @@ +# Project State + +## Project Reference + +See: .planning/PROJECT.md (updated 2026-03-26) + +**Core value:** An IT pro can go from zero to a deployable rclone setup in minutes — without needing to know rclone's config syntax or PowerShell deployment conventions. +**Current focus:** Phase 1 — Foundation + +## Current Position + +Phase: 1 of 4 (Foundation) +Plan: 0 of ? in current phase +Status: Ready to plan +Last activity: 2026-03-26 — Roadmap created + +Progress: [░░░░░░░░░░] 0% + +## Performance Metrics + +**Velocity:** +- Total plans completed: 0 +- Average duration: — +- Total execution time: — + +**By Phase:** + +| Phase | Plans | Total | Avg/Plan | +|-------|-------|-------|----------| +| - | - | - | - | + +**Recent Trend:** +- Last 5 plans: — +- Trend: — + +*Updated after each plan completion* + +## Accumulated Context + +### Decisions + +Decisions are logged in PROJECT.md Key Decisions table. +Recent decisions affecting current work: + +- Pure frontend (no backend): simpler hosting, no data retention risk with credentials +- Support all rclone backends: broader utility beyond Azure Blob +- Optional rclone install in scripts: different orgs have different baseline images + +### Pending Todos + +None yet. + +### Blockers/Concerns + +- Phase 2: Verify exact rclone backend field names against live rclone.org docs before implementing Schema Registry — wrong keys produce silently broken configs +- Phase 2: Verify Intune 32-bit/64-bit PS host defaults and script re-execution trigger against live Microsoft docs before writing script templates +- Phase 3: Confirm current `rclone authorize` token JSON structure for OneDrive before designing OAuth token input UX + +## Session Continuity + +Last session: 2026-03-26 +Stopped at: Roadmap created — ready to plan Phase 1 +Resume file: None