Added feature documents
This commit is contained in:
parent
414986b7d7
commit
9de7f099cb
247
PlotLine/Docs/Features/Hard_Deletion_Requirements.md
Normal file
247
PlotLine/Docs/Features/Hard_Deletion_Requirements.md
Normal file
@ -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.
|
||||
201
PlotLine/Docs/Features/PlotDirector_PlotLines_Redesign.md
Normal file
201
PlotLine/Docs/Features/PlotDirector_PlotLines_Redesign.md
Normal file
@ -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.
|
||||
Loading…
x
Reference in New Issue
Block a user