diff --git a/PlotLine/Docs/Features/Hard_Deletion_Requirements.md b/PlotLine/Docs/Features/Hard_Deletion_Requirements.md new file mode 100644 index 0000000..34ec15a --- /dev/null +++ b/PlotLine/Docs/Features/Hard_Deletion_Requirements.md @@ -0,0 +1,247 @@ +# Feature Specification: Hard Deletion of Projects and User Accounts + +## Overview + +PlotDirector currently supports archiving projects, allowing users to temporarily remove projects from their active workspace while retaining the ability to restore them later. + +Archived projects continue to count towards the user's subscription allowance because they remain fully recoverable. + +This feature introduces two related capabilities: + +1. Permanent deletion of archived projects +2. Permanent deletion of user accounts + +Both features are designed to: +- Comply with UK GDPR "right to erasure" expectations. +- Reduce unnecessary storage usage. +- Give users confidence that they maintain control over their data. +- Simplify account management. + +## Permanent Project Deletion + +### Current Behaviour + +- Projects can be archived. +- Archived projects can be restored. +- Archived projects continue to count towards subscription limits. +- No mechanism exists to permanently remove projects. + +### New Requirement + +Users must be able to permanently delete archived projects. + +Deletion is irreversible. + +Once deleted: +- The project cannot be restored. +- All associated data must be removed. +- Subscription project counts should update immediately. + +### Preconditions + +Projects may only be permanently deleted if: + +`Project.Status == Archived` + +Users must archive a project before deleting it. + +| State | Meaning | +|--------|----------| +| Active | Normal working project | +| Archived | Hidden but recoverable | +| Deleted | Permanently removed | + +### User Interface Requirements + +Within the Archived Projects page: + +- Add a **Delete Permanently** button. +- Use danger styling. +- Require explicit confirmation. + +### Confirmation Modal + +Display: + +> Permanently delete this project? +> +> This will permanently remove the project and all associated data including books, chapters, scenes, characters, locations, assets, plot threads, notes, metrics, attachments and uploaded files. +> +> This action cannot be undone. + +Require the user to type the project name before enabling deletion. + +### Data Deletion Requirements + +Delete all database records associated with the project including future child entities. + +Delete all project-related files including: +- Uploaded images +- Attachments +- Documents +- Export files +- Generated assets +- Project storage folders + +### Subscription Impact + +Following successful deletion: +- Project counts must be recalculated immediately. +- The deleted project should no longer count against subscription allowances. + +### Technical Recommendation + +Implement: + +```csharp +Task HardDeleteProjectAsync(int projectId, string userId); +``` + +Responsibilities: +1. Verify ownership. +2. Verify project is archived. +3. Delete physical files. +4. Delete database records. +5. Update subscription/project counts. +6. Log deletion activity. + +--- + +## User Account Deletion + +### Overview + +Users must be able to permanently close their PlotDirector account. + +Account deletion is irreversible. + +The process must remove all user-generated content from PlotDirector systems. + +### Subscription Rules + +Users cannot delete their account while an active paid subscription exists. + +Display: + +> You currently have an active paid subscription. +> +> Please cancel your subscription from the Subscription page before closing your account. +> +> Once your subscription has ended and your account has returned to trial or free access, you may permanently delete your account. + +Provide a Manage Subscription link. + +### Trial Users + +PlotDirector does not create Stripe subscriptions for trial users. + +Users may delete their account immediately if they are using: +- Free tier +- Active trial +- Expired trial +- Cancelled subscription state +- Expired subscription state + +### Allowed Deletion States + +- TrialActive +- TrialExpired +- Free +- Cancelled +- Expired +- Inactive +- PaymentFailedCancelled + +### Blocked Deletion States + +- ActivePaidSubscription +- PastDue +- CancellationPending + +### User Interface Requirements + +Within Account Settings add a Danger Zone section. + +Display: + +> Permanently close your PlotDirector account. +> +> This action cannot be undone. +> +> All projects, files and account information will be permanently removed. + +Provide a Delete Account button. + +### Confirmation Modal + +Display: + +> Permanently close your account? +> +> This will: +> - Delete all projects +> - Delete all uploaded files +> - Delete all account information stored by PlotDirector +> - End any active trial access +> +> This action cannot be undone. + +Require users to type their email address before continuing. + +### Account Deletion Process + +1. Verify no active paid subscription exists. +2. Retrieve all user projects. +3. Execute `HardDeleteProjectAsync(...)` for each project. +4. Remove remaining user-owned records: + - Subscription records + - Trial information + - Preferences/settings + - Notifications + - Tokens + - API keys (future) +5. Delete ASP.NET Identity user record. +6. Sign the user out. + +### Stripe Considerations + +Stripe records relating to completed commercial transactions may continue to exist within Stripe for legal, accounting and tax purposes. + +These records are external to PlotDirector and do not prevent local account deletion. + +PlotDirector should retain no personally identifiable user data after deletion unless legally required. + +## Design Principles + +### Archive ≠ Delete + +Archive means: +- Hidden +- Recoverable +- Counts towards subscription limits + +Delete means: +- Permanent +- Irrecoverable +- Removes subscription usage + +### Account Deletion Philosophy + +The process should be: +- Clear +- Explicit +- Difficult to trigger accidentally +- Simple to understand + +Users should have confidence that choosing to leave PlotDirector genuinely removes their data. + +## Future Considerations + +Potential enhancements: +- 30-day deletion grace period +- Export project data before deletion +- Email confirmation before account closure +- Administrative deletion tools +- Background processing for very large deletions + +These enhancements are not required for the initial implementation. diff --git a/PlotLine/Docs/Features/PlotDirector_PlotLines_Redesign.md b/PlotLine/Docs/Features/PlotDirector_PlotLines_Redesign.md new file mode 100644 index 0000000..b483008 --- /dev/null +++ b/PlotLine/Docs/Features/PlotDirector_PlotLines_Redesign.md @@ -0,0 +1,201 @@ +# PlotDirector Plot Lines Redesign Specification + +## Purpose + +The primary purpose of Plot Lines within PlotDirector is not simply to visualise story structure. + +The core purpose is to: +- Track narrative promises made to the reader. +- Prevent important plot threads from being forgotten. +- Ensure all major story threads receive appropriate payoff. +- Help authors identify unresolved, neglected, abandoned, or weak plot lines. +- Provide a visual representation of how the story evolves over time. + +Visualisation is important, but it exists to support this objective. + +## Core Philosophy + +A Plot Line represents: + +> A question, conflict, objective, mystery, relationship, or narrative promise that the reader expects to see progress and eventually receive a payoff. + +If a reader would reasonably expect an answer or outcome, a Plot Line should exist. + +## Plot Line Types + +Replace "Main Plot" with Plot Importance: + +### Primary +Major narrative threads driving the story. +There may be multiple Primary Plot Lines. + +### Secondary +Supporting narrative threads. + +### Minor +Short-term or supporting arcs. + +## Plot Line Properties + +### Required Fields +- Plot Line Name +- Importance (Primary / Secondary / Minor) +- Scope (Book / Series / Project) +- Colour +- Description + +### Optional Fields +- Emerges From Plot Line +- Visible on Timeline + +## Plot Events + +Plot events drive all structural changes. + +### Event Types +- Start +- Progress +- Reveal +- Twist +- Branch +- Split +- Merge +- Resolve +- Abandon + +### Branch +A new plot line emerges while the original continues. + +Source continues. +Target begins. + +### Split +An existing plot line ends and becomes two or more independent threads. + +Source terminates. +Targets begin. + +### Merge +Two or more plot lines combine into a single thread. + +Sources terminate. +Target continues. + +### Resolve +The plot line concludes. + +Resolution without consequence should be questioned. + +## Timeline Rendering + +- Scene columns remain the foundation. +- All plot events align to the centre of their scene. +- Use SVG overlays rather than CSS borders. +- Draw: + - Horizontal paths + - Curved merge connectors + - Curved branch connectors + - Split connectors + - Event nodes + +## Plot Event Symbols + +- Progress: ● +- Reveal: ★ +- Twist: ◆ +- Branch: ╲ +- Split: ╱╲ +- Merge: ◎ +- Resolve: ◉ +- Abandon: ✕ + +## Plot Line States + +### Active +- Solid line +- Full colour + +### Neglected +Criteria: +- No progress for configurable number of scenes (default 10) + +Display: +- Dashed line +- Slight fade +- Warning indicator + +Purpose: +- Highlight potentially forgotten threads. + +### Resolved +- Greyed out +- Reduced emphasis + +### Resolved Without Consequence +Allowed for: +- Red herrings +- Minor thematic threads + +Display: +- Yellow tint +- Question indicator + +Purpose: +- Encourage authors to verify the thread genuinely belongs. + +### Abandoned +- Red styling +- Cross marker + +Purpose: +- Highlight potentially unsatisfactory narrative outcomes. + +## Story Health Analytics + +### Forgotten Plot Thread +Criteria: +- Active plot line +- No events for X scenes + +Warning: +"Potentially forgotten plot thread." + +### Dangling Plot Thread +Criteria: +- Unresolved at manuscript end + +Warning: +"Plot thread remains unresolved." + +### Questionable Resolution +Criteria: +- Resolved without merge +- Resolved without obvious consequence + +Warning: +"Verify this thread provides sufficient payoff." + +### Abandoned Plot Thread +Criteria: +- Explicitly abandoned + +Warning: +"This plot line may disappoint readers." + +### Dominant Plot Thread +Criteria: +- Appears in unusually high percentage of scenes + +Purpose: +- Identify de facto primary plot lines. + +## Guiding Principle + +PlotDirector should help authors answer: + +- What promises have I made? +- Have I progressed them? +- Have I forgotten them? +- Have I delivered a satisfying payoff? + +The visual timeline should make these answers immediately obvious.