docs: create milestone v1.1 roadmap (3 phases)
This commit is contained in:
+29
-89
@@ -2,12 +2,12 @@
|
||||
gsd_state_version: 1.0
|
||||
milestone: v1.1
|
||||
milestone_name: "Backlog & Tech Debt"
|
||||
status: defining_requirements
|
||||
stopped_at: Milestone v1.1 started — defining requirements
|
||||
status: roadmap_ready
|
||||
stopped_at: Roadmap created for v1.1 — 3 phases (5-7), 11 requirements mapped
|
||||
last_updated: "2026-03-27T00:00:00.000Z"
|
||||
last_activity: 2026-03-27 — Milestone v1.1 started
|
||||
last_activity: 2026-03-27 — v1.1 roadmap created, ready to plan Phase 5
|
||||
progress:
|
||||
total_phases: 0
|
||||
total_phases: 3
|
||||
completed_phases: 0
|
||||
total_plans: 0
|
||||
completed_plans: 0
|
||||
@@ -21,106 +21,45 @@ progress:
|
||||
See: .planning/PROJECT.md (updated 2026-03-27)
|
||||
|
||||
**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:** Planning next milestone (v1.1)
|
||||
**Current focus:** Phase 5 — Tech Debt (ready to plan)
|
||||
|
||||
## Current Position
|
||||
|
||||
Phase: Not started (defining requirements)
|
||||
Plan: —
|
||||
Status: Defining requirements
|
||||
Last activity: 2026-03-27 — Milestone v1.1 started
|
||||
Phase: 5 of 7 (Tech Debt)
|
||||
Plan: — (not yet planned)
|
||||
Status: Ready to plan
|
||||
Last activity: 2026-03-27 — v1.1 roadmap created, 11 requirements mapped across 3 phases
|
||||
|
||||
Progress: [█████░░░░░] 50%
|
||||
Progress: [░░░░░░░░░░] 0% (v1.1)
|
||||
|
||||
## Performance Metrics
|
||||
|
||||
**Velocity:**
|
||||
- Total plans completed: 2
|
||||
- Average duration: 3 min
|
||||
- Total execution time: 6 min
|
||||
**Velocity (v1.0 reference):**
|
||||
- Total plans completed: 18
|
||||
- Average duration: ~3 min
|
||||
- Total execution time: ~54 min
|
||||
|
||||
**By Phase:**
|
||||
**v1.1 By Phase:**
|
||||
|
||||
| Phase | Plans | Total | Avg/Plan |
|
||||
|-------|-------|-------|----------|
|
||||
| 01-foundation | 2 | 6 min | 3 min |
|
||||
|
||||
**Recent Trend:**
|
||||
- Last 5 plans: 01-01 (4 min), 01-02 (2 min)
|
||||
- Trend: On track
|
||||
| 5. Tech Debt | TBD | - | - |
|
||||
| 6. New Backends | TBD | - | - |
|
||||
| 7. Validation & UX Polish | TBD | - | - |
|
||||
|
||||
*Updated after each plan completion*
|
||||
| Phase 01-foundation P03 | 1 | 1 tasks | 1 files |
|
||||
| Phase 01-foundation P04 | 2min | 2 tasks | 4 files |
|
||||
| Phase 02-generators P01 | 2min | 2 tasks | 5 files |
|
||||
| Phase 02-generators P04 | 5min | 1 tasks | 1 files |
|
||||
| Phase 02-generators P03 | resumed | 2 tasks | 3 files |
|
||||
| Phase 03-wizard-ui P01 | 1min | 2 tasks | 5 files |
|
||||
| Phase 03-wizard-ui P02 | 2min | 2 tasks | 4 files |
|
||||
| Phase 03-wizard-ui P03 | 2min | 1 tasks | 2 files |
|
||||
| Phase 03-wizard-ui P04 | 3min | 1 tasks | 3 files |
|
||||
| Phase 03-wizard-ui P05 | 5min | 2 tasks | 5 files |
|
||||
| Phase 03-wizard-ui P05 | 5min | 3 tasks | 5 files |
|
||||
| Phase 04-review-download-security P01 | 2min | 2 tasks | 2 files |
|
||||
| Phase 04-review-download-security P02 | 2min | 2 tasks | 5 files |
|
||||
| Phase 04-review-download-security P03 | 4min | 1 tasks | 2 files |
|
||||
| Phase 04-review-download-security P04 | 1min | 1 tasks | 2 files |
|
||||
| Phase 04-review-download-security P05 | 1min | 1 tasks | 0 files |
|
||||
| Phase 04-review-download-security P05 | 1min | 1 tasks | 0 files |
|
||||
|
||||
## Accumulated Context
|
||||
|
||||
### Decisions
|
||||
|
||||
Decisions are logged in PROJECT.md Key Decisions table.
|
||||
Recent decisions affecting current work:
|
||||
Recent decisions affecting v1.1 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
|
||||
- [01-01] Tailwind v4 via @tailwindcss/vite plugin — no postcss.config.js, no tailwind.config.js
|
||||
- [01-01] Zod v4 + @hookform/resolvers v5 required together (v5 resolvers required for Zod v4)
|
||||
- [01-01] vitest passWithNoTests: true so CI passes before any tests are written
|
||||
- [Phase 01-02]: BACKEND_REGISTRY as Record<BackendType, FieldDef[]> — typed map drives both form rendering (Phase 3) and config generation (Phase 2)
|
||||
- [Phase 01-02]: Wave 0 TDD stubs (index.test.ts, reducer.test.ts) written before implementation — fail RED until Plans 03-04
|
||||
- [Phase 01-02]: All FieldDef.key values snake_case matching rclone config key names exactly — wrong keys would silently break generated .conf files
|
||||
- [Phase 01-foundation]: buildZodSchema loops over BACKEND_REGISTRY — field names never hardcoded in Zod schemas, registry is single source of truth for validation shape
|
||||
- [Phase 01-foundation]: BACKEND_SCHEMAS exported as const — TypeScript narrows to exact backend schema type at call sites
|
||||
- [Phase 01-foundation]: useReducer + Context API chosen over external state library — zero dependencies, sufficient for 4-step wizard
|
||||
- [Phase 01-foundation]: useWizard throws on missing provider — fail fast prevents silent undefined state propagation
|
||||
- [Phase 01-foundation]: INITIAL_STATE.deployment.scriptTargets defaults to both ['intune','rmm'] — users deselect rather than discover
|
||||
- [Phase 02-generators]: s3-compatible uses type = s3 with provider = Other — rclone does not have a separate s3-compatible backend type
|
||||
- [Phase 02-generators]: Intune detection scripts must not use \ (STDERR contamination); RMM scripts must use \ = 'Stop'
|
||||
- [Phase 02-generators]: Credentials embedded as literals in generated PowerShell — no PS variable interpolation inside config content blocks
|
||||
- [Phase 02-generators]: buildRcloneConfContent duplicated inline in rmm-script.ts — keeps generators self-contained, avoids circular dep risk
|
||||
- [Phase 02-generators]: RMM scripts use \ = 'Stop' — RMM platforms surface exit codes; not STDERR-based like Intune detection
|
||||
- [Phase 02-generators]: PS here-string embeds config as literals — no PS variable interpolation, satisfies credential non-echo requirement
|
||||
- [Phase 02-generators]: buildIntuneDetection omits ErrorActionPreference — STDERR contamination guard per Intune detection contract
|
||||
- [Phase 02-generators]: CONFIG_DIR shared via ps-helpers.ts — single source of truth prevents path drift between install and detection scripts
|
||||
- [Phase 03-wizard-ui]: jsdom environment added to vite.config.ts test block — no triple-slash vitest reference needed with vitest ^4.x
|
||||
- [Phase 03-wizard-ui]: Wave 0 stubs use expect.fail('not yet implemented') for named RED failures rather than relying on import errors
|
||||
- [Phase 03-wizard-ui]: Requirement IDs embedded in describe block names (WIZD-01, BACK-02, etc.) for direct test-to-requirement traceability
|
||||
- [Phase 03-wizard-ui]: AzureAuthToggle uses CSS hidden class (not conditional rendering) to preserve both sas_url and key in react-hook-form state when toggling
|
||||
- [Phase 03-wizard-ui]: FieldRenderer hides provider field for single-option selects and auto-registers via hidden input
|
||||
- [Phase 03-wizard-ui]: [03-03] waitFor used in async validation tests — handleSubmit is async, React state updates need await
|
||||
- [Phase 03-wizard-ui]: [03-03] pendingBackend useRef stores clicked backend type before handleSubmit fires — avoids closure staleness
|
||||
- [Phase 03-wizard-ui]: [03-03] Dispatch order: SET_REMOTE_NAME -> SET_BACKEND_TYPE -> SET_REMOTE_PARAMS({}) -> SET_STEP(1)
|
||||
- [Phase 03-wizard-ui]: [03-04] useEffect guard for null backendType instead of dispatch-in-render — prevents React hooks order violation
|
||||
- [Phase 03-wizard-ui]: [03-04] Fallback schema (azureblob) used when backendType is null to keep useForm call unconditional
|
||||
- [Phase 03-wizard-ui]: [03-05] StepIndicator dispatches SET_REMOTE_PARAMS({}) before SET_STEP(0) — clears remote params without RESET, preserving deployment options
|
||||
- [Phase 03-wizard-ui]: [03-05] App.tsx clamps stepIndex to steps.length-1 — phase 4 can add step 3 without breaking current 3-step flow
|
||||
- [Phase 03-wizard-ui]: [03-05] Human verification approved — full 3-step wizard flow confirmed working end-to-end
|
||||
- [Phase 04-review-download-security]: [04-01] Wave 0 stubs use expect.fail — named RED baseline for all 10 ReviewStep requirements, consistent with Phase 3 pattern
|
||||
- [Phase 04-review-download-security]: [04-01] SECU-03 assertion placed in reducer.test.ts — reducer is the state boundary that must never touch storage
|
||||
- [Phase 04-review-download-security]: No src/utils/index.ts barrel — direct imports keep test mock paths predictable
|
||||
- [Phase 04-review-download-security]: Do NOT install @types/jszip — JSZip 3.x ships own TypeScript declarations
|
||||
- [Phase 04-review-download-security]: OutputBlock disabled prop gates both Copy and Download buttons — visual opacity-40 without hiding (SECU-01 gate)
|
||||
- [Phase 04-review-download-security]: [04-03] Security checkbox must be clicked before testing action buttons — disabled buttons don't fire onClick in jsdom
|
||||
- [Phase 04-review-download-security]: [04-03] vi.stubGlobal must come after vi.clearAllMocks in beforeEach — clear order matters for mock reliability
|
||||
- [Phase 04-review-download-security]: [04-03] Native DOM .disabled/.checked properties used instead of jest-dom matchers — jest-dom not installed in this project
|
||||
- [Phase 04-review-download-security]: [04-04] No logic changes needed in App.tsx — Math.min clamp already handled 4 steps correctly once ReviewStep added to array
|
||||
- [Phase 04-review-download-security]: [04-05] Human verification checkpoint reached — browser verification of full Phase 4 feature set pending user approval
|
||||
- [Phase 04-review-download-security]: [04-05] Human verification approved — Phase 4 full feature set confirmed working end-to-end in real browser
|
||||
- [v1.0] BACKEND_REGISTRY as single source of truth — Phase 5 wires BackendSelectionStep to it
|
||||
- [v1.0] scriptTargets defaults to both ['intune','rmm'] — Phase 5 adds filtering in ReviewStep
|
||||
- [v1.0] AzureAuthToggle uses CSS hidden (not conditional render) — Phase 6 SFTP auth toggle should follow same pattern
|
||||
- [v1.0] Wave 0 TDD stubs written before implementation — continue this pattern in v1.1
|
||||
|
||||
### Pending Todos
|
||||
|
||||
@@ -128,12 +67,13 @@ 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
|
||||
- [Phase 6] OneDrive: confirm current `rclone authorize` token JSON structure before designing token input field — token format may differ from v1.0 research
|
||||
- [Phase 6] SFTP: verify exact rclone SFTP field names (key_file vs key_pem, etc.) against live rclone.org docs before writing registry entry
|
||||
- [Phase 6] GCS: rclone GCS backend uses `service_account_file` or `token` — confirm auth approach before implementation
|
||||
- [Phase 7] VALID-01: S3 region validation regex must match AWS region format exactly — verify against current AWS region list
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-03-27T13:58:13.293Z
|
||||
Stopped at: Completed 04-05-PLAN.md — Phase 4 human verification approved, all 18 checks passed
|
||||
Last session: 2026-03-27T00:00:00.000Z
|
||||
Stopped at: v1.1 roadmap created — Phases 5-7 defined, all 11 requirements mapped
|
||||
Resume file: None
|
||||
|
||||
Reference in New Issue
Block a user