Commit Graph
112 Commits
Author SHA1 Message Date
kawa 6138d6c6a3 docs(04-01): complete Wave 0 TDD RED baseline plan — ReviewStep stubs + SECU-03
- Created 04-01-SUMMARY.md
- STATE.md: progress updated to 78%, decisions recorded, session updated
- REQUIREMENTS.md: CONF-02/03, DOWN-01–06, SECU-01/02/03 marked complete
2026-03-27 11:42:44 +01:00
kawa f428630f19 test(04-01): add SECU-03 assertion to reducer.test.ts — storage never written
- Added vi to import for spy capability
- SECU-03: dispatches all action types, asserts setItem never called on
  Storage.prototype (covers both localStorage and sessionStorage)
- All 9 reducer tests GREEN
2026-03-27 11:40:54 +01:00
kawa db4c80f853 test(04-01): add RED stubs for all Phase 4 requirements in ReviewStep.test.tsx
- CONF-02: live rclone.conf preview
- CONF-03: copy rclone.conf to clipboard
- DOWN-01 through DOWN-06: individual and ZIP download buttons
- SECU-01: download gating behind security checkbox
- SECU-02: privacy/no-server message
- Mocks: downloadFile, downloadZip, navigator.clipboard, URL
- All stubs use expect.fail('not yet implemented') — named RED baseline
2026-03-27 11:40:21 +01:00
kawaandClaude Sonnet 4.6 405bf477b4 docs(04-review-download-security): create phase 4 plan
5 plans across 5 waves: Wave 0 TDD stubs, utilities + OutputBlock,
ReviewStep implementation, App.tsx wiring, human verify checkpoint.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:23:14 +01:00
kawaandClaude Sonnet 4.6 8d5f7090e2 docs(phase-4): add research and validation strategy for Review, Download & Security
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:17:06 +01:00
kawaandClaude Sonnet 4.6 0397bc96c9 docs(04): research phase 4 — review, download & security
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:16:00 +01:00
kawaandClaude Sonnet 4.6 3185e46fd1 docs(phase-03): complete phase execution
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:11:08 +01:00
kawa fe7e17e55b docs(03-05): complete wizard wiring plan — human verify approved
- Updated 03-05-SUMMARY.md: checkpoint approved, plan fully complete
- Updated STATE.md: progress 100%, session recorded, decisions added
2026-03-27 10:04:33 +01:00
kawa d3052a6776 docs(03-05): complete DeploymentStep + StepIndicator + App.tsx wiring plan
- 87 tests GREEN across 11 suites (WIZD-01/02/03/04, BACK-01/02/03)
- WIZD-02: App.tsx routes all 3 steps with StepIndicator breadcrumb
- WIZD-03: back-nav clears params without RESET, deployment preserved
- Human-verify checkpoint pending for end-to-end browser validation
2026-03-27 09:48:03 +01:00
kawa 8674bb83b3 feat(03-05): wire App.tsx step router and make App.test GREEN
- App.tsx: WizardShell routes to BackendSelectionStep/RemoteConfigStep/DeploymentStep
- App.tsx: StepIndicator renders above every step as persistent breadcrumb
- App.tsx: RemoteConfigStep keyed on backendType to force remount on backend change
- App.test.tsx: all 3 WIZD-02 tests GREEN (step 0, 1, 2 routing verified)
- Full suite: 87 tests GREEN across 11 test files
2026-03-27 09:46:02 +01:00
kawa b00305c9a0 test(03-05): add failing App step routing WIZD-02 tests (RED)
- renders BackendSelectionStep when currentStep is 0
- renders RemoteConfigStep when currentStep is 1
- renders DeploymentStep when currentStep is 2
2026-03-27 09:45:09 +01:00
kawa 273789f704 feat(03-05): implement DeploymentStep and StepIndicator
- DeploymentStep: includeInstall toggle, configPath radio, scriptTargets checkboxes
- DeploymentStep: dispatches SET_DEPLOYMENT live on every control change
- DeploymentStep: Back button (SET_STEP(1)), Next/Review button (SET_STEP(3))
- StepIndicator: 3-step breadcrumb with checkmarks on completed steps
- StepIndicator: clicking step 0 dispatches SET_REMOTE_PARAMS({}) then SET_STEP(0)
- StepIndicator: never dispatches RESET — deployment options preserved
- All 5 WIZD-03 tests GREEN
2026-03-27 09:43:50 +01:00
kawa 7ffccfb7f8 test(03-05): add failing StepIndicator WIZD-03 tests (RED)
- WIZD-03: clicking completed step dispatches SET_STEP
- WIZD-03: clicking back to step 0 dispatches SET_REMOTE_PARAMS({})
- WIZD-03: clicking back to step 0 does NOT dispatch RESET
- WIZD-03: step 0 shows as active when currentStep is 0
- WIZD-03: completed steps are clickable
2026-03-27 09:42:45 +01:00
kawa 3155491315 docs(03-04): complete RemoteConfigStep plan
- SUMMARY.md created with TDD commits, deviations, decisions
- STATE.md updated: progress 92%, decisions, session
- ROADMAP.md updated: phase 3 4/5 summaries complete
2026-03-27 09:40:25 +01:00
kawa 45bcc0cc18 feat(03-04): implement RemoteConfigStep — registry-driven backend config form
- BACK-01: Azure Blob form with account FieldRenderer + AzureAuthToggle
- BACK-02: S3 form via BACKEND_REGISTRY loop (provider hidden, region required)
- BACK-03: S3-compatible form includes endpoint field
- mode: onSubmit / reValidateMode: onChange for touch-then-live validation
- Guard: useEffect redirects to step 0 if backendType is null
- All hooks called unconditionally (fallback schema prevents rules-of-hooks violation)
- 8/8 BACK-01/02/03 tests GREEN
2026-03-27 09:38:40 +01:00
kawa a57b2eab1d test(03-04): add failing tests for RemoteConfigStep
- BACK-01: Azure Blob form with account field + AzureAuthToggle
- BACK-02: S3 form fields (access_key_id, secret_access_key, region)
- BACK-03: S3-compatible form includes endpoint field
- renderWithBackend helper dispatches SET_BACKEND_TYPE before render
- @testing-library/user-event installed for value retention test
2026-03-27 09:36:41 +01:00
kawa 97651b5d59 docs(03-03): complete BackendSelectionStep plan
- SUMMARY.md: BackendSelectionStep TDD execution, WIZD-01 + WIZD-04
- STATE.md: progress updated to 85% (11/13), decisions added
- ROADMAP.md: phase 3 plan progress updated (3/5 summaries)
2026-03-27 09:34:53 +01:00
kawa b47f607224 feat(03-03): implement BackendSelectionStep (WIZD-01, WIZD-04)
- Remote name field with zod validation (mode: onSubmit, reValidateMode: onChange)
- Three backend cards in popularity order: Azure Blob, Amazon S3, S3-Compatible
- Card click validates name first; dispatches SET_REMOTE_NAME + SET_BACKEND_TYPE + SET_REMOTE_PARAMS({}) + SET_STEP(1)
- Does NOT dispatch RESET — preserves deployment options
- All 10 BackendSelectionStep tests GREEN
2026-03-27 09:33:45 +01:00
kawa cf06d72945 test(03-03): add failing tests for BackendSelectionStep (WIZD-01, WIZD-04)
- Replace expect.fail stubs with real test assertions
- Tests cover card render order, card click dispatch, name validation
- RED: component file does not exist yet
2026-03-27 09:32:35 +01:00
kawa e1cc3eda3f docs(03-02): complete UI atom components plan
- SUMMARY.md for BackendCard, PasswordField, FieldRenderer, AzureAuthToggle
- STATE.md updated with progress (77%), decisions, metrics
- ROADMAP.md updated (phase 3: 2/5 plans complete)
2026-03-27 09:30:57 +01:00
kawa 1c9c337d3f feat(03-02): create FieldRenderer and AzureAuthToggle
- FieldRenderer: registry-driven input renderer (text, password, select, hidden provider)
- AzureAuthToggle: segmented SAS/Key toggle, defaults to SAS, both fields always registered via CSS show/hide
- Both fields preserved on toggle (no conditional rendering that would lose react-hook-form state)
2026-03-27 09:29:51 +01:00
kawa cec45e8f17 feat(03-02): create BackendCard and PasswordField UI atoms
- BackendCard: clickable selection card with selected/unselected visual states
- PasswordField: password input with per-instance show/hide toggle (text labels, no emoji)
- Both files in new src/components/ui/ directory
2026-03-27 09:29:08 +01:00
kawa a2d4318b45 docs(03-01): complete wave-0 test infrastructure plan
- 03-01-SUMMARY.md: 26 RED stubs for WIZD-01/02/03/04 and BACK-01/02/03
- STATE.md: progress 69%, decisions recorded, session updated
- ROADMAP.md: phase 3 progress updated (1/5 plans complete)
- REQUIREMENTS.md: WIZD-01/02/03/04 and BACK-01/02/03 marked complete
2026-03-27 09:27:50 +01:00
kawa 153bc61f8a test(03-01): add Wave 0 RED baseline stubs for all 7 requirements
- src/App.test.tsx: WIZD-02 step routing (3 stubs)
- src/components/wizard/BackendSelectionStep.test.tsx: WIZD-01, WIZD-04 (10 stubs)
- src/components/wizard/RemoteConfigStep.test.tsx: BACK-01, BACK-02, BACK-03 (8 stubs)
- src/components/wizard/StepIndicator.test.tsx: WIZD-03 (5 stubs)
- All 26 tests fail RED with descriptive 'not yet implemented' messages
2026-03-27 09:26:06 +01:00
kawa 9eef93775c chore(03-01): configure Vitest jsdom environment
- Add test block to vite.config.ts with environment: 'jsdom'
- Add passWithNoTests: true (established project convention)
2026-03-27 09:25:08 +01:00
kawa ace078d418 docs(03): add validation strategy and research 2026-03-26 14:36:13 +01:00
kawaandClaude Sonnet 4.6 e6883089b4 docs(03): research phase wizard UI
Investigate react-hook-form + Zod v4 + Tailwind v4 patterns for the
multi-step wizard, document registry-driven form rendering, touch-then-live
validation, Azure auth toggle, and breadcrumb navigation approach.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 14:35:08 +01:00
kawa 279bd0a534 docs(state): record phase 3 context session 2026-03-26 14:30:44 +01:00
kawa dc8aa85dcd docs(03): capture phase context 2026-03-26 14:30:40 +01:00
kawa e17419bfd0 docs(phase-02): complete phase execution 2026-03-26 14:12:22 +01:00
kawa 64e25a691c docs(02-03): complete Intune generators plan 2026-03-26 14:08:40 +01:00
kawa 83e48648f4 docs(02-04): complete buildRmmScript plan — phase 2 all generators done
- SUMMARY.md for plan 02-04 (buildRmmScript)
- STATE.md updated: 100% progress, decisions added, session recorded
- ROADMAP.md phase 02 marked Complete (4/4 summaries)
- Requirements DEPL-03, DEPL-04, DEPL-05 satisfied
2026-03-26 14:08:10 +01:00
kawa 1e1ac25ea3 feat(02-04): implement buildRmmScript pure function
- Imports CONFIG_DIR and buildRcloneInstallBlock from ps-helpers.ts
- Uses \$ErrorActionPreference = 'Stop' for RMM platform exit code surfacing
- Creates config directory idempotently with Test-Path guard
- Writes rclone.conf using [System.IO.File]::WriteAllText UTF-8 no-BOM
- Conditionally includes rclone download block based on includeInstall flag
- All 6 rmm-script.test.ts assertions pass GREEN
2026-03-26 14:06:51 +01:00
kawa 495be0cd11 feat(02-03): implement buildIntuneInstall and buildIntuneDetection
- buildIntuneInstall: UTF-8 no-BOM write via WriteAllText, PS here-string for config, conditional rclone download block
- buildIntuneDetection: no $ErrorActionPreference, Write-Output + exit 0/1 pattern
- Both generators use CONFIG_DIR from ps-helpers for consistent path resolution
- All 15 intune-install and intune-detection tests pass GREEN
2026-03-26 14:06:45 +01:00
kawa 6a7912daae feat(02-03): create ps-helpers.ts shared module
- Export CONFIG_DIR record mapping configPath to Windows paths
- Export buildRcloneInstallBlock for conditional rclone binary download
- machine-wide maps to C:\ProgramData\rclone
- user-profile maps to %APPDATA%\rclone
- Uses -UseBasicParsing for SYSTEM context safety
2026-03-26 10:56:43 +01:00
kawa e3615c446c feat(02-02): implement buildRcloneConf pure function
- Maps BackendType to rclone INI type strings via RCLONE_TYPE_MAP
- s3-compatible correctly maps to type = s3 (not s3-compatible)
- Omits empty param values from output (no 'sas_url =' when blank)
- Throws on null backendType or empty remote name
- All 17 rclone-conf.test.ts assertions pass GREEN
2026-03-26 10:56:42 +01:00
kawa 41ebd20a93 docs(02-01): complete generator test stubs plan
- SUMMARY.md: RED test stubs for all four generators + barrel
- STATE.md: progress 63%, decisions recorded, session updated
- ROADMAP.md: phase 2 plan progress updated (1/4 summaries)
- REQUIREMENTS.md: CONF-01, DEPL-01-05 marked complete
2026-03-26 10:55:22 +01:00
kawa cc53bc014f feat(02-01): create generators barrel index.ts
- Re-exports buildRcloneConf, buildIntuneInstall, buildIntuneDetection, buildRmmScript
- Phase 4 will import all generators from this single entry point
- No implementation logic — purely structural re-exports
2026-03-26 10:53:49 +01:00
kawa 964022b5fc test(02-01): add failing test stubs for all four generators
- rclone-conf.test.ts: azureblob/s3/s3-compatible fixtures, error cases
- intune-install.test.ts: configPath, includeInstall, UTF-8 write, credential safety
- intune-detection.test.ts: configPath, exit codes, stdout only (no STDERR contamination)
- rmm-script.test.ts: configPath, includeInstall, ErrorActionPreference=Stop
2026-03-26 10:53:34 +01:00
kawaandClaude Sonnet 4.6 0722046c32 docs(02-generators): create phase 2 plan — 4 plans in 2 waves
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 10:45:15 +01:00
kawa 0d4c9bd37e docs(02-generators): add research and validation strategy 2026-03-26 10:40:18 +01:00
kawaandClaude Sonnet 4.6 aff2923b14 docs(phase-02): research generators phase
Covers rclone.conf INI generation (type mapping, empty field omission),
PowerShell encoding (UTF-8 no-BOM via UTF8Encoding($false)), Intune
detection script contract (STDERR breaks detection), and RMM SYSTEM
context patterns. All key findings verified against live official sources.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 10:39:12 +01:00
kawaandClaude Sonnet 4.6 bd10a33dab docs(phase-01): complete phase execution
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 10:30:46 +01:00
kawa 77ad5f39b0 docs(01-04): complete WizardState store plan
- 01-04-SUMMARY.md: TDD reducer + Context API store complete, 8 tests green, build clean
- STATE.md: progress 100%, decisions added, session updated
- ROADMAP.md: Phase 01 all 4 plans complete
2026-03-26 10:26:16 +01:00
kawa 2eef7225da feat(01-04): create WizardContext provider and wire into App
- Create src/store/context.tsx: WizardContext, WizardProvider, useWizard hook
- useWizard throws if used outside WizardProvider (prevents silent undefined state bugs)
- Update src/App.tsx to wrap content in WizardProvider
- npm run build exits 0 with no TypeScript errors
2026-03-26 10:24:32 +01:00
kawa 3fade79ea1 feat(01-04): implement WizardState types and pure reducer
- Create src/store/types.ts: WizardState interface, WizardAction union type, INITIAL_STATE constant
- Create src/store/reducer.ts: pure wizardReducer handling SET_STEP, SET_BACKEND_TYPE, SET_REMOTE_NAME, SET_REMOTE_PARAMS, SET_DEPLOYMENT, RESET
- All 8 reducer tests GREEN
- No localStorage/sessionStorage access (SECU-03 compliant)
2026-03-26 10:23:53 +01:00
kawa 5a4bb475c1 docs(01-03): complete Zod schema builder plan
- SUMMARY.md created for Plan 03
- STATE.md updated: progress 75%, decisions logged, session recorded
- ROADMAP.md updated: phase 1 at 3/4 SUMMARY files
2026-03-26 10:22:28 +01:00
kawa eaeae32849 feat(01-03): implement BACKEND_SCHEMAS Zod schema builder
- buildZodSchema derives z.object() from BACKEND_REGISTRY field definitions
- required fields map to z.string().min(1, label) — optional to z.string().optional()
- BACKEND_SCHEMAS exported with entries for azureblob, s3, s3-compatible
- BackendFormValues<T> utility type infers TypeScript type from schema
- No hardcoded field names — all shapes derived from registry loop
- All 8 tests in index.test.ts pass (GREEN)
2026-03-26 10:21:11 +01:00
kawa 64c02e7b76 docs(01-02): complete Backend Schema Registry plan - SUMMARY, STATE, ROADMAP updated
- 01-02-SUMMARY.md created with decisions, deviations, and self-check
- STATE.md: advanced to Plan 2 of 4, added decisions, updated metrics
- ROADMAP.md: phase 1 progress updated (2/4 plans complete)
2026-03-26 10:19:46 +01:00
kawa 9e28bf9ece test(01-02): add Wave 0 TDD stubs for SC-3 (Zod schemas) and SC-4 (wizard reducer)
- src/schemas/index.test.ts: 8 tests defining acceptance criteria for BACKEND_SCHEMAS (Plan 03)
- src/store/reducer.test.ts: 8 tests defining acceptance criteria for wizardReducer (Plan 04)
- Both files fail with "Cannot find module" — correct RED phase, implementation deferred to Plans 03-04
2026-03-26 10:17:35 +01:00