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>
This commit is contained in:
Dev
2026-04-07 09:15:14 +02:00
parent b815c323d7
commit 724fdc550d
959 changed files with 6852 additions and 728 deletions

View File

@@ -0,0 +1,121 @@
---
phase: 02-permissions
plan: "04"
subsystem: export
tags: [csv, html, permissions, export, csom, rfc4180]
# Dependency graph
requires:
- phase: 02-permissions plan 02
provides: PermissionEntry record type and stub export service classes
provides:
- CsvExportService: merges PermissionEntry rows by (Users, PermissionLevels, GrantedThrough) and writes RFC 4180 CSV with UTF-8 BOM
- HtmlExportService: generates self-contained interactive HTML report with inline CSS/JS, stats cards, badges, and user pills
affects:
- 02-permissions (plans 05-07 may call these services)
- Phase 3+ (any feature using CSV or HTML permission exports)
# Tech tracking
tech-stack:
added: []
patterns:
- "GroupBy merge pattern: group PermissionEntry by composite key then pipe-join distinct URLs/Titles"
- "Self-contained HTML: all CSS and JS inline in StringBuilder output — no external file references"
- "RFC 4180 CSV escaping: every field double-quoted, internal quotes doubled"
- "External user detection: #EXT# substring check applied to UserLogins for CSS class annotation"
key-files:
created: []
modified:
- SharepointToolbox/Services/Export/CsvExportService.cs
- SharepointToolbox/Services/Export/HtmlExportService.cs
key-decisions:
- "CsvExportService uses UTF-8 with BOM (encoderShouldEmitUTF8Identifier=true) for Excel compatibility"
- "HtmlExportService uses UTF-8 without BOM for HTML files (standard browser expectation)"
- "HtmlEncode helper implemented inline rather than using System.Web.HttpUtility to avoid WPF dependency issues"
- "User pills zip UserLogins and Users arrays by index position to associate login with display name"
patterns-established:
- "Export services accept IReadOnlyList<PermissionEntry> — no direct file system coupling in BuildXxx methods"
- "WriteAsync wraps BuildXxx for testability — BuildXxx returns string, WriteAsync does I/O"
requirements-completed: [PERM-05, PERM-06]
# Metrics
duration: 1min
completed: 2026-04-02
---
# Phase 2 Plan 04: Export Services Summary
**CsvExportService with Merge-PermissionRows GroupBy logic and HtmlExportService with inline CSS/JS stats report — both implementing PERM-05 and PERM-06**
## Performance
- **Duration:** 1 min
- **Started:** 2026-04-02T11:58:05Z
- **Completed:** 2026-04-02T12:00:00Z
- **Tasks:** 2
- **Files modified:** 2
## Accomplishments
- CsvExportService ports PowerShell Merge-PermissionRows: groups entries by (Users, PermissionLevels, GrantedThrough), pipe-joins duplicate URLs and Titles, writes RFC 4180-escaped CSV with UTF-8 BOM
- HtmlExportService ports Export-PermissionsToHTML: self-contained HTML with stats cards, color-coded object-type badges, unique/inherited badges, user pills with external-user class for #EXT# logins, and inline JS filter
- All 6 export tests pass (3 CSV + 3 HTML); full suite: 59 pass, 4 skip, 0 fail
## Task Commits
Each task was committed atomically:
1. **Task 1: Implement CsvExportService** - `44913f8` (feat)
2. **Task 2: Implement HtmlExportService** - `e3ab319` (feat)
**Plan metadata:** (docs: complete plan — see final commit)
_Note: TDD tasks — tests were stubs from Plan 01 (RED). Implementation done in this plan (GREEN)._
## Files Created/Modified
- `SharepointToolbox/Services/Export/CsvExportService.cs` - Merges PermissionEntry rows and writes RFC 4180 CSV with UTF-8 BOM
- `SharepointToolbox/Services/Export/HtmlExportService.cs` - Generates self-contained interactive HTML report with inline CSS/JS
## Decisions Made
- CsvExportService uses UTF-8 with BOM (`encoderShouldEmitUTF8Identifier: true`) so Excel opens the file correctly without encoding prompts
- HtmlExportService uses UTF-8 without BOM (standard for HTML, browsers do not expect BOM)
- Minimal `HtmlEncode` helper implemented inline (replaces &, <, >, ", ') rather than pulling in `System.Web` — avoids adding a dependency and keeps the class self-contained
- User pills zip `UserLogins` and `Users` by index — this matches the semicolon-delimited parallel arrays established in PermissionEntry design
## Deviations from Plan
None - plan executed exactly as written.
## Issues Encountered
None - both services compiled and all tests passed on first attempt.
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- CsvExportService and HtmlExportService are fully implemented and tested (PERM-05, PERM-06 complete)
- Both services are ready to be wired into the PermissionsViewModel export commands (upcoming plan in wave 3)
- No blockers for continuing Phase 2
---
*Phase: 02-permissions*
*Completed: 2026-04-02*
## Self-Check: PASSED
- FOUND: SharepointToolbox/Services/Export/CsvExportService.cs
- FOUND: SharepointToolbox/Services/Export/HtmlExportService.cs
- FOUND commit 44913f8 (feat: CsvExportService)
- FOUND commit e3ab319 (feat: HtmlExportService)
- FOUND: .planning/phases/02-permissions/02-04-SUMMARY.md