@model StoryIntelligenceProgressViewModel @{ ViewData["Title"] = "Story Intelligence Review Centre"; }

Story Intelligence

Review Centre

Your manuscript analysis is complete. Review only the story intelligence that needs an author decision; everything here is saved and can be picked up later.

@if (TempData["OnboardingStoryIntelligenceError"] is string error) {
@error
} @if (TempData["OnboardingStoryIntelligenceMessage"] is string message) {
@message
}
@ReviewModule( "Characters", Model.CharacterNeedsAttentionCount, Model.CharacterGateSatisfied ? "Resolved" : "Needs attention", "Resolve identity questions before reviewing dependent story intelligence.", "Resolve Characters", "StoryIntelligenceCharacters", false) @ReviewModule( "Locations", Model.LocationNeedsAttentionCount, Model.PipelineDashboard.LocationStageComplete ? "Reviewed" : AttentionLabel(Model.LocationNeedsAttentionCount), "Places found in the manuscript that may be worth creating, linking, or ignoring.", "Review locations", "StoryIntelligenceLocations", !Model.CharacterGateSatisfied) @ReviewModule( "Assets", Model.AssetNeedsAttentionCount, Model.PipelineDashboard.AssetStageComplete ? "Reviewed" : AttentionLabel(Model.AssetNeedsAttentionCount), "Important objects and possessions detected from generic evidence such as recurrence, ownership, and scene prominence.", "Review assets", "StoryIntelligenceAssets", !Model.CharacterGateSatisfied) @ReviewModule( "Relationships", Model.RelationshipNeedsAttentionCount, Model.PipelineDashboard.RelationshipStageComplete ? "Reviewed" : AttentionLabel(Model.RelationshipNeedsAttentionCount), "Relationship candidates grouped by the canonical character identities involved.", "Review relationships", "StoryIntelligenceRelationships", !Model.CharacterGateSatisfied) @ReviewModule( "Knowledge", Model.KnowledgeNeedsAttentionCount, Model.PipelineDashboard.KnowledgeStageComplete ? "Reviewed" : AttentionLabel(Model.KnowledgeNeedsAttentionCount), "Facts, discoveries, beliefs, and suspicions that need a create, link, merge, or ignore decision.", "Review knowledge", "StoryIntelligenceKnowledge", !Model.CharacterGateSatisfied) @ReviewModule( "Plot Lines & Threads", Model.NarrativeNeedsAttentionCount, Model.PipelineDashboard.NarrativeStageComplete ? "Reviewed" : AttentionLabel(Model.NarrativeNeedsAttentionCount), "Recurring arcs and threads organised by the narrative hierarchy discovered from scene evidence.", "Review plot lines", "StoryIntelligenceNarrative", !Model.CharacterGateSatisfied)

Scene Metrics

Available from the imported scene analysis. Metrics are auto-applied where configured and do not require a mandatory review step.

@if (Model.CharacterGateSatisfied) { Available @Model.TotalAnalysedScenes.ToString("N0") scenes } else { Resolve Characters first Locked until Characters are resolved }
@if (Model.AnalysisIssueCount > 0) {

Analysis Issues

Some chapters or scenes reported analysis issues. Canonical chapters and scenes remain intact.

Needs attention Return to book @Model.AnalysisIssueCount.ToString("N0") need attention
}
@functions { private string AttentionLabel(int count) => count == 0 ? "No outstanding decisions" : "Needs attention"; private Microsoft.AspNetCore.Html.IHtmlContent ReviewModule( string title, int count, string status, string description, string actionLabel, string action, bool blocked) { var statusClass = blocked ? "story-review-status story-review-status--active" : count > 0 ? "story-review-status story-review-status--warning" : "story-review-status story-review-status--ready"; var statusText = blocked ? "Resolve Characters first" : status; var countText = blocked ? "Locked until Characters are resolved" : count == 1 ? "1 needs attention" : $"{count:N0} need attention"; var disabled = blocked ? " disabled aria-disabled=\"true\"" : string.Empty; var href = blocked ? "#" : Url.Action(action, "Onboarding", new { batchId = Model.BatchID }) ?? "#"; return new Microsoft.AspNetCore.Html.HtmlString($$"""

{{System.Net.WebUtility.HtmlEncode(title)}}

{{System.Net.WebUtility.HtmlEncode(description)}}

{{System.Net.WebUtility.HtmlEncode(statusText)}} {{System.Net.WebUtility.HtmlEncode(actionLabel)}} {{System.Net.WebUtility.HtmlEncode(countText)}}
"""); } }