Remove chapter-level POV character

Character assignment now lives on beats only, per batch-assign. Drops
Chapter.PovCharacterId (entity, contracts, service, agent/import/MCP
tools, web UI) and the backing column via migration.
This commit is contained in:
James Wampler
2026-08-15 20:44:10 -07:00
parent df10b1f99b
commit 7d8dd0c4fd
13 changed files with 973 additions and 117 deletions
-2
View File
@@ -173,8 +173,6 @@ export interface ChapterSummary {
number: number
title: string
summary: string | null
povCharacterId: string | null
povCharacterName: string | null
setting: string | null
status: DraftStatus
targetWordCount: number | null
+1 -16
View File
@@ -84,22 +84,7 @@ export default function ChapterPage() {
/>
</div>
<div className="mt-4 grid gap-4 sm:grid-cols-2">
<label className="block">
<span className="label">POV character</span>
<select
className="input"
value={chapter.povCharacterId ?? ''}
onChange={(e) => patch({ povCharacterId: e.target.value || null })}
>
<option value=""></option>
{characters?.map((c) => (
<option key={c.id} value={c.id}>
{c.name}
</option>
))}
</select>
</label>
<div className="mt-4">
<AutoField
label="Setting"
value={chapter.setting}
@@ -57,7 +57,6 @@ export default function ChaptersPage() {
)}
</div>
<div className="flex shrink-0 items-center gap-3 text-xs muted">
{chapter.povCharacterName && <span>POV: {chapter.povCharacterName}</span>}
<span>{chapter.beatCount} beats</span>
<span>{chapter.wordCount.toLocaleString()} words</span>
<StatusBadge status={chapter.status} />