Dev
6ae3629301
docs(06): create phase plan for global site selection (5 plans, 3 waves)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 09:57:15 +02:00
Dev
59efdfe3f0
docs: create milestone v1.1 roadmap (4 phases)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 09:41:49 +02:00
Dev
04a307b69c
docs: define milestone v1.1 requirements (10 requirements)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 09:40:02 +02:00
Dev
81da0f6a99
docs: start milestone v1.1 Enhanced Reports
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 09:38:28 +02:00
Dev
0fb35de80f
docs: capture todo - Add global multi-site selection option
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 09:33:05 +02:00
Dev
724fdc550d
chore: complete v1.0 milestone
...
Archive 5 phases (36 plans) to milestones/v1.0-phases/.
Archive roadmap, requirements, and audit to milestones/.
Evolve PROJECT.md with shipped state and validated requirements.
Collapse ROADMAP.md to one-line milestone summary.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 09:19:03 +02:00
Dev
b815c323d7
fix: resolve post-milestone tech debt items
...
- Add DataGrid RowStyle with red highlighting for invalid CSV rows
in BulkMembersView, BulkSitesView, and FolderStructureView
- Fix cancel test locale mismatch by setting EN culture before assertion
- Remove dead FeatureTabBase placeholder (replaced by full tab views)
- Clean up unused xmlns:controls from MainWindow.xaml
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 09:15:02 +02:00
Dev
c81d8959f7
docs(phase-05): complete phase execution — verification passed, human approved
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 08:51:50 +02:00
Dev
b3686cc24c
docs(05-03): complete integration gate and human sign-off plan
...
- 134 tests pass, 22 skip, 0 fail across all three Phase 5 workstreams
- Single-file EXE (201 MB, 0 loose DLLs) verified
- Human smoke test approved: French locale correct, all 10 tabs render
- Phase 5 and project marked complete in STATE.md and ROADMAP.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 16:51:53 +02:00
Dev
e0e3d55013
chore(05-03): verify full test suite and publish artifact
...
- 134 pass, 22 skip (MSAL interactive), 0 fail — all new helper + locale tests green
- dotnet publish -p:PublishSingleFile=true produces SharepointToolbox.exe (201 MB)
- 0 loose DLL files in ./publish/ — single-file self-contained confirmed
2026-04-03 16:39:00 +02:00
Dev
0758ce9593
docs(05-01): complete helper unit tests and locale completeness plan
...
- SUMMARY.md: 2 tasks, 5 files, 12 new tests all passing
- STATE.md: updated progress, decisions, session
- ROADMAP.md: phase 5 progress updated (2/3 summaries)
2026-04-03 16:37:34 +02:00
Dev
711f9502f2
docs(05-02): complete French locale and single-file publish plan
...
- 05-02-SUMMARY.md: 27 FR diacritic fixes + conditional PublishSingleFile
- STATE.md: progress 97%, session updated, decisions recorded
- ROADMAP.md: Phase 5 progress updated (2/3 summaries)
- REQUIREMENTS.md: FOUND-11 marked complete
2026-04-03 16:37:31 +02:00
Dev
8c6539440c
feat(05-01): add FR locale completeness tests
...
- Test 1 (AllEnKeys_HaveNonEmptyFrTranslation): verifies every EN key has a non-empty, non-bracketed FR translation
- Test 2 (FrStrings_ContainExpectedDiacritics): spot-checks 5 keys for correct diacritics (é/è)
- Both tests pass — FR file already contains correct diacritics
2026-04-03 16:36:08 +02:00
Dev
39517d8956
feat(05-02): add self-contained single-file publish configuration
...
- Added conditional PropertyGroup for PublishSingleFile=true
- Sets SelfContained=true, RuntimeIdentifier=win-x64,
IncludeNativeLibrariesForSelfExtract=true
- Conditional activation avoids affecting dotnet build and dotnet test
- Produces single SharepointToolbox.exe with zero loose DLL files
- PublishTrimmed remains false (required by PnP.Framework + MSAL)
2026-04-03 16:36:07 +02:00
Dev
f7829f0801
fix(05-02): correct French diacritics in Strings.fr.resx
...
- Fixed 27 strings with missing accents across Transfer, BulkMembers,
BulkSites, FolderStruct, Templates, and shared bulk operation keys
- Corrected: Bibliothèque, Déplacer, Écraser, Démarrer, transférer,
Aperçu, Créer, Propriétaires, Modèles, Sélectionner, Terminé, etc.
2026-04-03 16:35:34 +02:00
Dev
4d7e9ea02a
feat(05-01): make helper methods internal and add unit tests
...
- Changed IsThrottleException to internal static in ExecuteQueryRetryHelper
- Changed BuildPagedViewXml to internal static in SharePointPaginationHelper
- Created ExecuteQueryRetryHelperTests: 5 tests (throttle true x3, non-throttle false, nested false)
- Created SharePointPaginationHelperTests: 5 tests (null, empty, whitespace, replace, append)
2026-04-03 16:34:54 +02:00
Dev
0122a47c9e
docs(05): create phase plan for distribution and hardening
...
3 plans in 2 waves: helper tests + locale completeness (W1), FR diacritics + publish config (W1), verification + human checkpoint (W2).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 14:40:41 +02:00
Dev
0dc2a2d8e4
docs(phase-5): add research and validation strategy
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 14:29:51 +02:00
Dev
af2177046f
docs(phase-05): research distribution and hardening phase
...
Verified single-file publish works with IncludeNativeLibrariesForSelfExtract,
documented 25+ FR diacritic gaps, and mapped retry/pagination test coverage gaps.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 14:27:51 +02:00
Dev
1d5dde9ceb
docs(phase-04): complete phase execution — verification passed, human approved
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 13:52:45 +02:00
Dev
3d62b2c48b
fix(04): resolve null-reference crashes in CsvValidationService and TransferView
...
- Add null-conditional on CsvReader.Context.Parser to fix CS8602 warnings
- Guard ConflictCombo_SelectionChanged against null ViewModel during XAML init
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 11:06:25 +02:00
Dev
a1c2a68cb5
docs(04-10): complete TemplatesViewModel + DI registration + MainWindow wiring plan — Phase 4 complete
...
- SUMMARY.md: 7 files created/modified, 1 auto-fix (missing converter classes), checkpoint:human-verify pending
- STATE.md: Phase 4 complete (10/10 plans), progress 100%, decisions recorded
- ROADMAP.md: Phase 4 marked Complete (10/10 summaries)
2026-04-03 10:26:44 +02:00
Dev
988bca844b
feat(04-10): register Phase 4 DI + wire MainWindow tabs + TemplatesView
...
- App.xaml.cs: register TemplateRepository, GraphClientFactory, ICsvValidationService, BulkResultCsvExportService
- App.xaml.cs: register BulkMemberService, BulkSiteService, ITemplateService, IFolderStructureService
- App.xaml.cs: register all 5 Phase 4 ViewModels and Views (Transfer, BulkMembers, BulkSites, FolderStructure, Templates)
- MainWindow.xaml: replace 3 FeatureTabBase stub tabs with 5 named TabItems (tab.transfer through tab.templates)
- MainWindow.xaml.cs: wire all 5 new TabItem.Content from DI-resolved Views
2026-04-03 10:24:32 +02:00
Dev
a49bbb9f98
feat(04-10): create TemplatesViewModel and TemplatesView
...
- TemplatesViewModel: list, capture with 5 options, apply, rename, delete, refresh
- TemplatesView: capture section with checkboxes, apply section, template DataGrid
- RenameInputDialog: simple WPF dialog (no Microsoft.VisualBasic dependency)
- Capture/Apply are separate async commands from RunCommand
2026-04-03 10:24:23 +02:00
Dev
87dd4bb3ef
feat(04-08,04-09): create Transfer/BulkMembers/BulkSites/FolderStructure ViewModels and Views
...
- TransferViewModel: source/dest site selection, Copy/Move mode, conflict policy, export failed
- TransferView: SitePickerDialog and FolderBrowserDialog wiring, confirm dialog
- BulkMembersViewModel, BulkSitesViewModel: CSV import, validate, preview, execute, retry, export
- FolderStructureViewModel: CSV import, site URL + library inputs, folder creation
- All 3 bulk Views: ConfirmBulkOperationDialog wiring, DataGrid preview with validation status
- Added EnumBoolConverter, StringToVisibilityConverter, ListToStringConverter to converters file
2026-04-03 10:23:54 +02:00
Dev
93218b0953
docs(04-09): complete BulkMembers, BulkSites, and FolderStructure ViewModels + Views plan
...
- SUMMARY.md: 9 files created, 2 auto-fixed deviations documented
- STATE.md: position advanced to plan 09 of 10, 2 new decisions recorded
- ROADMAP.md: phase 4 progress updated to 9/10 summaries
2026-04-03 10:22:07 +02:00
Dev
57f2c1d304
docs(04-08): complete TransferViewModel + TransferView plan
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 10:20:32 +02:00
Dev
fcd5d1d938
feat(04-09): create BulkMembers, BulkSites, and FolderStructure ViewModels and Views
...
- BulkMembersViewModel: CSV import, validate, preview, confirm, execute, retry failed, export failed
- BulkSitesViewModel: same flow using IBulkSiteService.CreateSitesAsync
- FolderStructureViewModel: site URL + library inputs, CSV folders, FolderStructureService.BuildUniquePaths
- BulkMembersView/BulkSitesView/FolderStructureView: XAML + code-behind wiring ConfirmBulkOperationDialog
- [Rule 3] Fixed duplicate converter definitions: removed untracked standalone EnumBoolConverter/StringToVisibilityConverter/ListToStringConverter files (already defined in IndentConverter.cs)
2026-04-03 10:20:23 +02:00
Dev
7b78b19bf5
feat(04-08): create TransferViewModel and TransferView
...
- TransferViewModel: source/dest site selection, transfer mode, conflict policy, confirmation dialog, per-item results, failed-items CSV export
- TransferView.xaml: DockPanel layout with GroupBoxes for source/dest, mode radio buttons, conflict policy ComboBox, progress bar, cancel button, export failed items button
- TransferView.xaml.cs: code-behind wires SitePickerDialog + FolderBrowserDialog for source and dest browsing
- Added EnumBoolConverter and StringToVisibilityConverter to IndentConverter.cs
- Registered converters in App.xaml; registered TransferViewModel, TransferView, IFileTransferService, BulkResultCsvExportService in App.xaml.cs
2026-04-03 10:19:16 +02:00
Dev
509c0c6843
docs(04-07): complete Localization + Shared Dialogs + Example CSV Resources plan
...
- Create 04-07-SUMMARY.md with task details, decisions, and self-check results
- Update STATE.md: progress 91%, decisions recorded, session updated
- Update ROADMAP.md: phase 4 progress (7/10 summaries)
2026-04-03 10:15:06 +02:00
Dev
1a2cc13224
feat(04-07): add Phase 4 localization, shared dialogs, and example CSV resources
...
- Add 80+ Phase 4 EN/FR localization keys to Strings.resx and Strings.fr.resx (tabs, transfer, bulkmembers, bulksites, folderstruct, templates, bulk-shared, folderbrowser)
- Add ResourceManager property accessors for all new keys to Strings.Designer.cs
- Create ConfirmBulkOperationDialog (XAML + code-behind) with Proceed/Cancel buttons
- Create FolderBrowserDialog (XAML + code-behind) with lazy-loading TreeView of SharePoint libraries/folders
- Bundle bulk_add_members.csv, bulk_create_sites.csv, folder_structure.csv as EmbeddedResource in csproj
2026-04-03 10:13:39 +02:00
Dev
fdb1108e76
docs(04-06): complete TemplateService + FolderStructureService plan — CSOM template capture/apply and CSV folder hierarchy creation
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 10:09:31 +02:00
Dev
84cd569fb7
feat(04-06): implement TemplateService and FolderStructureService
...
- FolderStructureService.CreateFoldersAsync creates folder hierarchy from CSV rows using BulkOperationRunner
- FolderStructureService.BuildUniquePaths deduplicates and sorts paths parent-first by slash depth
- TemplateService already committed; verified compilation and interface compliance
- FolderStructureServiceTests: 4 unit tests pass (BuildUniquePaths edge cases, deduplication, empty levels, BuildPath) + 1 skip
- TemplateServiceTests: 3 unit tests pass (interface impl, SiteTemplate defaults, SiteTemplateOptions defaults) + 2 skip
2026-04-03 10:07:49 +02:00
Dev
773393c4c0
docs(04-04): complete BulkMemberService plan — Graph API member addition with CSOM fallback
...
- Create 04-04-SUMMARY.md with full execution details and deviation docs
- Update STATE.md: plan 04 complete, new decisions, session record
- Update REQUIREMENTS.md: BULK-02 marked complete (BULK-04/05 already done in 04-01)
2026-04-03 10:06:37 +02:00
Dev
c4d8124a81
docs(04-02): complete CsvValidationService + TemplateRepository plan
...
- 9 CsvValidationService tests passing (delimiter detection, BOM, member/site/folder validation)
- 6 TemplateRepository tests passing (round-trip, GetAll, delete, rename, empty dir, non-existent)
- All 10 previously-skipped scaffold tests now active and passing (15 total)
- Requirements TMPL-03, TMPL-04, FOLD-02 marked complete
2026-04-03 10:05:21 +02:00
Dev
0cf6f50448
docs(04-03): complete FileTransferService plan — CSOM file transfer with conflict policies
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 10:05:00 +02:00
Dev
98fa16a195
docs(04-05): complete BulkSiteService plan — PnP Framework Team + Communication site creation
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 10:04:03 +02:00
Dev
f3a1c352c7
feat(04-02): implement CsvValidationService and TemplateRepository with tests
...
- CsvValidationService: CsvHelper-based parsing with DetectDelimiter, BOM detection,
per-row validation for BulkMemberRow/BulkSiteRow/FolderStructureRow
- TemplateRepository: atomic JSON write (tmp + File.Move) with SemaphoreSlim,
supports GetAll/GetById/Save/Delete/Rename operations
- CsvValidationServiceTests: 9 passing tests (email validation, delimiter detection,
BOM handling, folder/site/member validation)
- TemplateRepositoryTests: 6 passing tests (round-trip, GetAll, delete, rename,
empty directory, non-existent id)
- All previously-skipped scaffold tests now active and passing (15 total)
2026-04-03 10:03:41 +02:00
Dev
ac74d31933
feat(04-03): implement FileTransferService with MoveCopyUtil and conflict policies
...
- FileTransferService.cs: CSOM copy/move via MoveCopyUtil.CopyFileByPath/MoveFileByPath
- Conflict policies: Skip (catch ServerException), Overwrite (overwrite=true), Rename (KeepBoth=true)
- ResourcePath.FromDecodedUrl for special character support
- Recursive folder enumeration with system folder filtering
- EnsureFolderAsync creates intermediate destination folders
- Best-effort metadata preservation (ResetAuthorAndCreatedOnCopy=false)
- FileTransferServiceTests.cs: 4 passing tests, 3 skipped (integration)
2026-04-03 10:02:57 +02:00
Dev
b0956adaa3
feat(04-05): implement BulkSiteService with PnP Framework site creation
...
- BulkSiteService creates Team sites via TeamSiteCollectionCreationInformation with owners/members
- BulkSiteService creates Communication sites via CommunicationSiteCollectionCreationInformation with generated URL
- Per-site error handling via BulkOperationRunner with continue-on-error semantics
- SanitizeAlias generates URL-safe aliases from site names for Communication sites
- BulkSiteServiceTests: 3 pass (interface check + model defaults + CSV parsing), 3 skip (live SP)
- Fixed pre-existing BulkMemberService.cs Group type ambiguity (MSCSC.Group vs Graph.Models.Group)
2026-04-03 10:02:09 +02:00
Dev
fdcd4c8377
docs(04-01): complete Phase 4 Plan 01 — models, interfaces, BulkOperationRunner
...
- Create 04-01-SUMMARY.md with full execution details and deviation docs
- Update STATE.md: progress 73%, new decisions, session record
- Update ROADMAP.md: Phase 4 In Progress, 1/10 plans complete
- Mark requirements BULK-04 and BULK-05 complete in REQUIREMENTS.md
2026-04-03 09:55:26 +02:00
Dev
39deed9d8d
feat(04-01): add Phase 4 models, interfaces, BulkOperationRunner, and test scaffolds
...
- Install CsvHelper 33.1.0 and Microsoft.Graph 5.74.0 (main + test projects)
- Add 14 core model/enum files (BulkOperationResult, BulkMemberRow, BulkSiteRow, TransferJob, FolderStructureRow, SiteTemplate, SiteTemplateOptions, TemplateLibraryInfo, TemplateFolderInfo, TemplatePermissionGroup, ConflictPolicy, TransferMode, CsvValidationRow)
- Add 6 service interfaces (IFileTransferService, IBulkMemberService, IBulkSiteService, ITemplateService, IFolderStructureService, ICsvValidationService)
- Add BulkOperationRunner with continue-on-error and cancellation support
- Add BulkResultCsvExportService stub (compile-ready)
- Add test scaffolds: BulkOperationRunnerTests (5 passing), BulkResultCsvExportServiceTests (2 passing), CsvValidationServiceTests (6 skipped), TemplateRepositoryTests (4 skipped)
2026-04-03 09:53:05 +02:00
Dev
d73e50948d
docs(04): create Phase 4 plan — 10 plans for Bulk Operations and Provisioning
...
Wave 0: models, interfaces, BulkOperationRunner, test scaffolds
Wave 1: CsvValidationService, TemplateRepository, FileTransferService,
BulkMemberService, BulkSiteService, TemplateService, FolderStructureService
Wave 2: Localization, shared dialogs, example CSV resources
Wave 3: TransferVM+View, BulkMembers/BulkSites/FolderStructure VMs+Views,
TemplatesVM+View, DI registration, MainWindow wiring
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 09:38:33 +02:00
Dev
97fc29c15e
docs(04): research phase domain for Bulk Operations and Provisioning
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 09:17:41 +02:00
Dev
97d1e10faf
docs(state): record phase 4 context session
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 09:07:43 +02:00
Dev
6dd5faf65d
docs(04): capture phase context for Bulk Operations and Provisioning
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-03 09:07:34 +02:00
Dev
43dd6ce17f
docs(03-08): complete SearchViewModel + DuplicatesViewModel + Views plan — Phase 3 complete
...
- 3 tasks completed, 9 files created/modified
- Visual checkpoint pending: all three Phase 3 tabs wired and ready for UI verification
2026-04-02 16:10:54 +02:00
Dev
1f2a49d7d3
feat(03-08): DI registration + MainWindow wiring for Search and Duplicates tabs
...
- App.xaml.cs: register ISearchService, SearchCsvExportService, SearchHtmlExportService, SearchViewModel, SearchView, IDuplicatesService, DuplicatesHtmlExportService, DuplicatesViewModel, DuplicatesView
- MainWindow.xaml: add x:Name to SearchTabItem and DuplicatesTabItem (remove FeatureTabBase stubs)
- MainWindow.xaml.cs: wire SearchTabItem.Content and DuplicatesTabItem.Content via DI
2026-04-02 15:45:29 +02:00
Dev
0984a36bc7
feat(03-08): create DuplicatesViewModel, DuplicatesView XAML and code-behind
...
- DuplicatesViewModel: ModeFiles/Folders, criteria checkboxes, group flattening to DuplicateRow
- Uses TenantProfile site URL override pattern (ctx.Url is read-only)
- ExportHtmlCommand exports DuplicateGroup list via DuplicatesHtmlExportService
- DuplicatesView.xaml: type selector, criteria panel + flattened DataGrid
- DuplicatesView.xaml.cs: DI constructor with DataContext wiring
2026-04-02 15:44:26 +02:00
Dev
7e6d39a3db
feat(03-08): create SearchViewModel, SearchView XAML and code-behind
...
- SearchViewModel: full filter props, RunOperationAsync via ISearchService
- Uses TenantProfile site URL override pattern (ctx.Url is read-only)
- ExportCsvCommand + ExportHtmlCommand with CanExport guard
- SearchView.xaml: filter panel + DataGrid with all 8 columns
- SearchView.xaml.cs: DI constructor with DataContext wiring
2026-04-02 15:43:22 +02:00