Coverage for src\genesis\writer\writer_state.py: 100%
21 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
1"""Writer 跨章状态(Phase 5)。追踪各章版本/内容/最近评估结果。"""
2from __future__ import annotations
4from genesis.writer.models import ChapterContent
5from genesis.eval.scorer import EvalReport
8class WriterState:
9 def __init__(self, chapter_order: list[str]) -> None:
10 self.versions: dict[str, int] = {cid: 0 for cid in chapter_order}
11 self.contents: dict[str, ChapterContent | None] = {cid: None for cid in chapter_order}
12 self.last_eval: dict[str, EvalReport | None] = {cid: None for cid in chapter_order}
14 def record_success(self, content: ChapterContent) -> None:
15 self.versions[content.chapter_id] += 1
16 self.contents[content.chapter_id] = content
18 def record_eval(self, cid: str, report: EvalReport) -> None:
19 self.last_eval[cid] = report
21 def needs_regeneration(self) -> list[str]:
22 out: list[str] = []
23 for cid, content in self.contents.items():
24 if content is None:
25 out.append(cid)
26 elif self.last_eval[cid] is not None and cid in self.last_eval[cid].failed_chapters:
27 out.append(cid)
28 return out