# Phase 21F - Story Intelligence Visualisation Snapshot

## Snapshot Architecture

Phase 21F adds a read-only real-data snapshot path for the existing Story Intelligence Experience prototype. The browser contract remains the existing `StoryIntelligenceExperiencePrototypeViewModel` shape so the renderer can display either simulation data or persisted Story Intelligence run data.

## Data Sources

The snapshot service reads:

- `StoryIntelligenceSavedRun`
- `StoryIntelligenceSavedSceneResult`
- parsed `SceneIntelligenceScene` JSON
- existing Illustration Library resolution through `IIllustrationLibraryService.ApplyApprovedIllustrationsAsync`

It deliberately does not expose source manuscript text, raw AI responses, prompts, or import write operations.

## DTO Contract

The model adds snapshot metadata:

- `mode`
- `runId`
- `runStatus`
- `changeToken`
- `generatedUtc`
- `isTerminal`
- `snapshotMessage`
- `availableRuns`

The renderer continues to consume `scenes`, `characters`, `location`, `assets`, `relationships`, `knowledgeThreads`, `observations`, `latestDiscoveries`, and `activityFeed`.

## Stable Visual IDs

Stable IDs are deterministic:

- scenes: `scene-result-{SceneResultID}`
- waiting scene: `run-{RunID}-waiting`
- characters: `character-result-{normalised-name}`
- locations: `location-result-{normalised-name}`
- assets: `asset-result-{normalised-name}`
- relationships: `relationship-result-{character-a}-{character-b}-{signal}`
- knowledge: `knowledge-result-{recipient}-{knowledge-item}` or `question-result-{question}`
- observations: `observation-result-{type}-{subject}-{predicate}`

Normalised names are lower-case, alphanumeric slug keys.

## Current Scene Selection

The current scene is the latest valid parsed scene at or below the run's completed-scene count. If no parsed scenes exist, the snapshot returns a waiting scene so the visual shell remains intact.

## Character Rules

The current scene maps parsed characters and point-of-view data. Explicit POV receives weight `100`. Mentioned-only characters are lower weight. No POV is invented if the parsed data does not provide one.

## Location Rules

The snapshot chooses one active location, preferring present, specific, high-confidence locations. If none exists, it returns a graceful "Location not yet identified" placeholder.

## Asset Rules

The snapshot returns up to five significant current-scene assets. Mentioned-only and clearly low-value/background assets are filtered.

## Relationship Rules

Relationships are limited to the current scene parsed relationships. They use deterministic IDs and confidence-derived weights. The renderer may suppress inline labels if there is no clean visual space.

## Knowledge Mapping

Questions raised and knowledge changes feed the Knowledge Threads panel. Parsed observations feed the Story Observations panel. Wording is concise and user-facing.

## Illustration Resolution

The snapshot assigns starter Illustration Library stable codes using simple non-manuscript heuristics and then reuses the existing Illustration Library resolver. It does not generate images.

## API Route

`GET /api/story-intelligence/runs/{runId}/visualisation-snapshot`

The endpoint is authenticated and returns only runs owned by the signed-in user in this phase.

## Development Route

- Simulation: `/Development/StoryIntelligenceExperience?mode=simulation`
- Real run: `/Development/StoryIntelligenceExperience?runId={runId}`
- Selector: `/Development/StoryIntelligenceExperience`

The selector is development/admin-only.

## Refresh Mechanism

Real mode uses restrained polling of the snapshot endpoint. It polls about every 7 seconds while visible, backs off while hidden, avoids overlapping requests, and stops once the run is terminal.

## Completion Behaviour

Completed and completed-with-warning runs show the final provisional snapshot and stop polling. Failed and cancelled runs show the available snapshot plus a clear status message.

## Performance Notes

The service parses scene result JSON once per snapshot request, limits central collections, does not load manuscript source text, and logs snapshot build duration.

## Tests

Added coverage for:

- simulation mode remaining available
- real snapshot contract metadata
- absence of raw manuscript text, raw AI responses, and prompts from the visualisation contract

Existing build and Story Intelligence/Illustration tests continue to run.

## Known Gaps

- Collaborator/project access beyond run ownership is not yet expanded for this development endpoint.
- Canonical uploaded entity images are not resolved ahead of Illustration Library images yet.
- The route is not linked from the production Story Intelligence progress workflow.
- Relationship/knowledge mapping uses current scene parsed data, not a durable replay history.

## Recommended Phase 21G Work

- Broaden access checks to full project collaborator semantics.
- Resolve canonical entity images before library fallbacks where canonical entity matches are available.
- Connect the real Story Intelligence workflow to this visualisation at the appropriate handoff point.
- Add a lightweight status-token endpoint if polling full snapshots becomes too heavy.
