# PlotDirector Feature Specification: Character Age and Story Date Management

## Overview

PlotDirector should support both precise age calculations and
approximate author-supplied ages without forcing authors into
unnecessary data entry.

The primary goal is to assist authors with continuity and timeline
management while respecting the fact that not every character requires
an exact birth date.

The system should only perform calculations when sufficient information
has been explicitly provided by the author.

## Design Principles

### 1. Only Calculate What the Author Defines

PlotDirector should never invent information.

If an author provides:

-   A Date of Birth
-   A scene with a resolvable date

Then PlotDirector should calculate exact ages.

If an author only provides:

-   "45 years old"
-   "Mid forties"
-   "About 30"

Then PlotDirector should preserve that approximate information without
attempting to generate birthdays or age progression.

### 2. Precision Should Match Author Intent

Authors intentionally vary the precision of character information.

Characters with known birthdays should benefit from automatic age
calculation. Characters with approximate ages should remain descriptive
only.

## Story Calendar Model

### Project Story Start Date

Projects may optionally define a Story Start Date that acts as a default
reference point.

### Book Story Start Date

Each book may optionally override the project start date. If specified,
the book start date takes precedence.

## Scene Date Resolution

Scenes may have varying levels of temporal precision.

Supported modes:

-   Exact Date
-   Exact Date and Time
-   Relative Day Offset
-   Relative Sequence Only
-   Unknown

## Effective Scene Date

The system should derive an EffectiveSceneDate used for calculations.

Rules:

1.  Use exact scene date if specified.
2.  Use relative day calculations if possible.
3.  Use inherited dates only where the author has explicitly enabled
    such behaviour.
4.  Otherwise, leave unresolved.

The system should avoid silently making assumptions.

## Character Age Model

### Exact Age Tracking

Characters with a Date of Birth participate in automatic age
calculations.

Required Data:

``` csharp
DateTime? DateOfBirth
```

Example output:

-   Maggie Grant: 17 years, 8 months
-   Beth MacDonald: 18 years, 0 months

### Approximate Age Tracking

Characters without a Date of Birth may store an approximate age.

Required Data:

``` csharp
int? ApproximateAge
```

Optional:

``` csharp
DateTime? ApproximateAgeAsOfDate
```

Example:

-   Mary Grant: Approximately 45 years old

No further calculations occur.

## Age Calculation Rules

### Exact Ages

Calculate only when:

-   Date of Birth exists
-   Effective Scene Date exists

Formula:

``` text
Scene Date - Date of Birth
```

Display:

-   17 years, 8 months
-   18 years, 0 months
-   22 years, 3 months

### Approximate Ages

Display author-entered values unchanged.

No progression occurs.

No birthdays are inferred.

No calculations are performed.

### Unknown Ages

If neither Date of Birth nor Approximate Age exists:

Display:

``` text
Unknown
```

## Continuity Assistance Features

These features should only apply to characters with exact birth dates.

### Birthday Transition Warnings

Example:

-   Beth turns 18 between Scene 14 and Scene 15.

### Incorrect Age References

Example:

-   Character notes describe Maggie as 17 years old.
-   However, in this scene she is actually 18 years old.

### Timeline Insights

Possible reporting:

-   Character age at start of book.
-   Character age at end of book.
-   Character age range throughout series.

## User Interface Recommendations

### Character Editor

#### Exact Age Section

-   Date of Birth: \[Date Picker\]
-   Enable automatic age calculation.

#### Approximate Age Section

-   Approximate Age: \[45\]
-   As of: \[Book Start\]

Help text:

> Use this when the exact birth date is unknown or unimportant to the
> story.

### Scene Inspector

Display age contextually.

Exact age example:

-   Maggie Grant
-   Date of Birth: 1 September 1965
-   Age in this Scene: 17 years, 8 months

Approximate age example:

-   Mary Grant
-   Approximate Age: 45
-   Age in this Scene: Approximately 45

Unknown example:

-   Barbara Jones
-   Age: Unknown

## System Behaviour Summary

  Character Data    Scene Date Available   Result
  ----------------- ---------------------- -----------------------------------
  DOB               Yes                    Calculate exact age
  DOB               No                     Display DOB only
  Approximate Age   Yes                    Display approximate age unchanged
  Approximate Age   No                     Display approximate age unchanged
  No age data       Any                    Display unknown

## Key Philosophy

PlotDirector should function as an intelligent continuity assistant
rather than an automated co-author.

The system should:

-   Calculate exact information when sufficient data exists.
-   Preserve ambiguity when the author intentionally provides
    approximate information.
-   Never invent birthdays or age progression.
-   Never assume precision beyond the information supplied.

This approach provides powerful continuity support for plot-critical
characters while remaining lightweight and flexible for secondary
characters.
