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

1"""Writer 跨章状态(Phase 5)。追踪各章版本/内容/最近评估结果。""" 

2from __future__ import annotations 

3 

4from genesis.writer.models import ChapterContent 

5from genesis.eval.scorer import EvalReport 

6 

7 

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} 

13 

14 def record_success(self, content: ChapterContent) -> None: 

15 self.versions[content.chapter_id] += 1 

16 self.contents[content.chapter_id] = content 

17 

18 def record_eval(self, cid: str, report: EvalReport) -> None: 

19 self.last_eval[cid] = report 

20 

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