文笔层:AI 味机检、标点规范化、分块大量扩写(第 1 集成稿 10805 字)

- 修复上次提交把 dfannals/cli.py 写成 0 字节的问题(它是唯一入口,导致管道不可运行)
- 性别:解析 <caste>,人物表与写作素材带性别(Ral Fastenhatchets 实为女性)
- 新增 dfannals/deslop.py:AI 味机械诊断(硬伤词/句式/标点,按千字密度报告)
- 新增 dfannals/normalize.py:标点与结构清理(引号配对、重复段落与句子、模型自加的小节标记)
- 新增 dfannals/expand.py 与 prompts/literary-expander.md:按年份场景分块大量扩写
- 专名防幻觉:每块附史料专名白名单,事后按段自动修复可疑专名
- episode 命令并进文笔层(骨架稿另存 .skeleton.md),新增 expand 命令做 A/B 对照
- 新增 notes/switched-threads.md 与 test_deslop / test_normalize 回归测试
- 提交前拦截「已跟踪文件为空」,防止上述事故复发
This commit is contained in:
Chen Yi
2026-10-05 22:27:02 +08:00
parent 08a032120a
commit 8630dcad55
23 changed files with 1971 additions and 56 deletions
+5 -4
View File
@@ -155,8 +155,8 @@ def render_material(
for fid in heros:
row = rows.get(fid)
if row:
lines.append(f"- {row.name}|{row.race}|{row.span}|身份:{row.identity or '不详'}"
f"|本集出场 {row.appearances} 次")
lines.append(f"- {row.name}|{row.race}|性别:{row.gender or '史料未载'}"
f"|{row.span}|身份:{row.identity or '不详'}|本集出场 {row.appearances} 次")
else:
lines.append(f"- {world.figure_name(fid)}")
@@ -173,8 +173,8 @@ def render_material(
for fid in others[:6]:
row = rows.get(fid)
if row:
lines.append(f"- {row.name}|{row.race}|身份:{row.identity or '不详'}"
f"|本集出场 {row.appearances} 次")
lines.append(f"- {row.name}|{row.race}|性别:{row.gender or '史料未载'}"
f"|身份:{row.identity or '不详'}|本集出场 {row.appearances} 次")
else:
lines.append(f"- {world.figure_name(fid)}")
@@ -196,6 +196,7 @@ def render_material(
"",
f"- 本集 {CHAPTER_MIN_CHARS}–{CHAPTER_MAX_CHARS} 字,中文正文,专名保留英文。",
"- 贴着主角写:他们的目标、算计、得失做主语;对手要是个具体的人。",
"- 性别按上面卡片写,不要默认“他”;史料未载性别时用名字或身份称呼。",
"- 史料之外的世界大事不要写;只有影响到主角时才提一句。",
]
return "\n".join(lines)