@model StoryIntelligenceProgressViewModel @{ ViewData["Title"] = "Review Plot Lines & Threads"; const int previewLimit = 50; var showAll = string.Equals(Context.Request.Query["view"], "all", StringComparison.OrdinalIgnoreCase); var narrativeCandidates = showAll ? Model.NarrativeReview.Candidates.ToList() : Model.NarrativeReview.Candidates.Take(previewLimit).ToList(); var hiddenCandidateCount = Math.Max(0, Model.NarrativeReview.Candidates.Count - narrativeCandidates.Count); } Phase 3 Review Story Intelligence Review Plot Lines & Threads Review recurring narrative arcs and thread candidates from the discovered hierarchy. @if (TempData["OnboardingStoryIntelligenceError"] is string error) { @error } @if (TempData["OnboardingStoryIntelligenceMessage"] is string message) { @message } @if (Model.NarrativeReview.Candidates.Count == 0) { No Plot Line or Thread candidates are waiting. PlotDirector did not find recurring narrative candidates that require approval, or this review has already been completed. Back to Review Centre Mark reviewed } else { @if (hiddenCandidateCount > 0) { View all @Model.NarrativeReview.Candidates.Count.ToString("N0") } @for (var i = 0; i < narrativeCandidates.Count; i++) { var candidate = narrativeCandidates[i]; @candidate.ProposedTitle @candidate.CandidateType @(!string.IsNullOrWhiteSpace(candidate.Category) ? $"- {candidate.Category}" : string.Empty) @candidate.Confidence Title Description @candidate.ProposedDescription @if (string.Equals(candidate.CandidateType, StoryIntelligenceNarrativeCandidateTypes.Thread, StringComparison.OrdinalIgnoreCase)) { @if (!string.IsNullOrWhiteSpace(candidate.ParentCandidateTitle)) { Proposed parent: @candidate.ParentCandidateTitle } Existing related Plot Line Choose Plot Line @foreach (var option in Model.NarrativeReview.PlotLineOptions) { @option.Text } Proposed parent Plot Line No proposed parent @foreach (var option in Model.NarrativeReview.CandidatePlotLineOptions) { @option.Text } } Decision Accept new Merge with existing Merge with candidate Reject Existing Plot Line for merge Choose existing Plot Line @foreach (var option in Model.NarrativeReview.PlotLineOptions) { @option.Text } Candidate for merge Choose proposed candidate @foreach (var option in Model.NarrativeReview.Candidates.Where(item => item.NarrativeCandidateID != candidate.NarrativeCandidateID && string.Equals(item.CandidateType, candidate.CandidateType, StringComparison.OrdinalIgnoreCase)).Select(item => new SelectListItem(item.ProposedTitle, item.NarrativeCandidateID.ToString()))) { @option.Text } @if (candidate.ChildThreads.Count > 0) { Suggested child Threads @foreach (var child in candidate.ChildThreads) { @child.ProposedTitle } } Supporting scenes @foreach (var evidence in candidate.Evidence) { @evidence.SceneLabel: @(string.IsNullOrWhiteSpace(evidence.Evidence) ? evidence.ContributionType : evidence.Evidence) } } @if (hiddenCandidateCount > 0) { @hiddenCandidateCount.ToString("N0") more narrative decision@(hiddenCandidateCount == 1 ? string.Empty : "s") available after this batch. } Back to Review Centre Save Plot Lines & Threads } @section Scripts { }
Phase 3
Review Story Intelligence
Review recurring narrative arcs and thread candidates from the discovered hierarchy.
PlotDirector did not find recurring narrative candidates that require approval, or this review has already been completed.
Proposed parent: @candidate.ParentCandidateTitle