codebee 0.1.67 → 0.1.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +543 -532
  2. package/LICENSE +21 -21
  3. package/README.md +11 -7
  4. package/app/.playwright-cli/console-2026-09-23T08-26-03-635Z.log +88 -0
  5. package/app/.playwright-cli/page-2026-09-23T08-26-03-845Z.yml +126 -0
  6. package/app/.playwright-cli/page-2026-09-23T08-29-44-203Z.png +0 -0
  7. package/app/.playwright-cli/page-2026-09-23T08-35-42-046Z.yml +210 -0
  8. package/app/.playwright-cli/page-2026-09-23T08-36-52-858Z.png +0 -0
  9. package/app/.playwright-cli/page-2026-09-23T08-37-33-938Z.png +0 -0
  10. package/app/.playwright-cli/run-detail-after.png +0 -0
  11. package/app/core/acceptance.py +100 -100
  12. package/app/core/aiflavor.py +197 -197
  13. package/app/core/artifacts.py +148 -148
  14. package/app/core/assets.py +110 -110
  15. package/app/core/attachments.py +623 -623
  16. package/app/core/automation.py +758 -758
  17. package/app/core/backup.py +470 -470
  18. package/app/core/beekeeper.py +183 -183
  19. package/app/core/board.py +209 -209
  20. package/app/core/bookmeta.py +930 -930
  21. package/app/core/bookmeta_catalog.py +180 -180
  22. package/app/core/branching.py +137 -137
  23. package/app/core/builtin_agent.py +1234 -1234
  24. package/app/core/capability.py +144 -144
  25. package/app/core/catalog.py +42 -0
  26. package/app/core/chaptersafe.py +32 -32
  27. package/app/core/cleanup.py +303 -303
  28. package/app/core/compaction.py +201 -201
  29. package/app/core/covergen.py +356 -356
  30. package/app/core/defectretro.py +43 -43
  31. package/app/core/diagnostics.py +114 -114
  32. package/app/core/dispatch.py +173 -173
  33. package/app/core/dispatch_log.py +128 -113
  34. package/app/core/env_scrub.py +85 -85
  35. package/app/core/error_codes.py +23 -23
  36. package/app/core/errorlog.py +137 -137
  37. package/app/core/evaluation.py +174 -174
  38. package/app/core/failure_notify.py +290 -290
  39. package/app/core/flows.py +2 -2
  40. package/app/core/goal_service.py +167 -167
  41. package/app/core/health.py +374 -374
  42. package/app/core/history.py +38 -38
  43. package/app/core/hooks.py +162 -162
  44. package/app/core/jobs.py +29 -25
  45. package/app/core/knowledge.py +7 -0
  46. package/app/core/manager.py +2122 -2122
  47. package/app/core/market.py +362 -362
  48. package/app/core/mocks.py +64 -64
  49. package/app/core/modelhub.py +22 -3
  50. package/app/core/notify.py +106 -106
  51. package/app/core/operations.py +228 -228
  52. package/app/core/paihang.py +138 -138
  53. package/app/core/paths.py +2 -2
  54. package/app/core/pipeline.py +16 -1
  55. package/app/core/planner.py +2 -0
  56. package/app/core/portguard.py +111 -111
  57. package/app/core/preview.py +293 -293
  58. package/app/core/publish/__init__.py +7 -7
  59. package/app/core/publish/auto.py +367 -367
  60. package/app/core/publish/browser.py +539 -539
  61. package/app/core/publish/fanqie.py +159 -159
  62. package/app/core/publish/flow.py +440 -440
  63. package/app/core/publish/flows-fanqie-calibrated.json +332 -332
  64. package/app/core/publish/flows-qimao-calibrated.json +7 -3
  65. package/app/core/publish/ledger.py +203 -203
  66. package/app/core/publish/manager.py +692 -692
  67. package/app/core/publish/qimao.py +141 -141
  68. package/app/core/publish/ws.py +139 -139
  69. package/app/core/redact.py +38 -38
  70. package/app/core/repeat_guard.py +129 -129
  71. package/app/core/router.py +398 -398
  72. package/app/core/runner.py +2067 -2065
  73. package/app/core/selfupdate.py +384 -384
  74. package/app/core/session_log.py +161 -161
  75. package/app/core/sessions.py +312 -312
  76. package/app/core/settings.py +149 -149
  77. package/app/core/settings_schema.py +262 -262
  78. package/app/core/share_page.py +114 -114
  79. package/app/core/skill_scan.py +122 -114
  80. package/app/core/skillpacks/fanqie-novel.md +80 -80
  81. package/app/core/skillpacks/market/character-bible.md +66 -66
  82. package/app/core/skillpacks/market/code-risk-checklist.md +58 -58
  83. package/app/core/skillpacks/market/git-workflow.md +57 -57
  84. package/app/core/skillpacks/market/release-notes.md +72 -72
  85. package/app/core/skillpacks/market/weekly-report.md +71 -71
  86. package/app/core/skillpacks/market/worldview-consistency.md +70 -70
  87. package/app/core/skills.py +15 -1
  88. package/app/core/step_runner.py +132 -132
  89. package/app/core/store.py +75 -34
  90. package/app/core/task_compile.py +199 -199
  91. package/app/core/telemetry.py +292 -292
  92. package/app/core/tlsctx.py +64 -64
  93. package/app/core/token_meter.py +147 -147
  94. package/app/core/tracing.py +144 -0
  95. package/app/core/upstream.py +41 -41
  96. package/app/core/usage.py +862 -858
  97. package/app/core/volumes.py +389 -389
  98. package/app/core/wxdigest.py +858 -858
  99. package/app/core/zentao.py +2465 -2465
  100. package/app/main.py +2981 -2957
  101. package/app/pick_dialog.py +110 -110
  102. package/app/ui/app.js +14399 -14384
  103. package/app/ui/artdiff.js +74 -74
  104. package/app/ui/board.html +162 -162
  105. package/app/ui/board.js +305 -305
  106. package/app/ui/i18n.js +2770 -2766
  107. package/app/ui/icons/bee.svg +79 -79
  108. package/app/ui/manifest.json +16 -16
  109. package/app/ui/qrcode.js +2297 -2297
  110. package/app/ui/style.css +16 -16
  111. package/bin/tutti.js +147 -147
  112. package/package.json +46 -46
  113. package/tools/wx_reader.py +261 -261
@@ -1,72 +1,72 @@
1
- ---
2
- name: 版本发布说明撰写模板
3
- note: 面向用户的更新公告:固定六段结构 / 写作纪律 / 破坏性变更三要素 / 可复制模板与反例
4
- scopes:
5
- - "*"
6
- source: market
7
- market_id: release-notes
8
- ---
9
-
10
- # 版本发布说明撰写模板(市场包)
11
-
12
- 适用:发版时写 Release Notes / 更新公告 / changelog 的用户可读部分。
13
- 核心立场:**写给用户看,不是写给 git log 看**——用户不关心重构了哪个模块,
14
- 只关心「这次更新后我能多做什么、少烦什么、会坏什么」。
15
-
16
- ## 一、标准结构(顺序固定)
17
- 1. **一句话概览**:这版最值得用户知道的一件事;实在没有就写「稳定性修复」。
18
- 2. **新功能**:能做以前做不了的事。每条 = 功能名 + 用户收益 + 入口在哪。
19
- 3. **体验优化**:以前能做、现在更快 / 更顺 / 更省的事。
20
- 4. **问题修复**:写用户见过的**症状**(「修复导出 PDF 中文乱码」),
21
- 不写内部成因(「修复字体子集化模块的编码偏移」)。
22
- 5. **升级注意事项 / 破坏性变更**:有则紧跟概览**置顶**(不按上面的顺序排),
23
- 没有就省略此节。
24
- 6. **已知问题**:带着已知问题发版必须如实列出,并给临时绕过办法。
25
-
26
- ## 二、写作纪律
27
- - 每条只说**一个行为变化**,动词开头、面向结果:「支持按标签筛选任务」,
28
- 而不是「重构筛选服务并接入标签存储」。
29
- - 收益优先于实现:先说用户能干什么,实现细节放括号或链接里。
30
- - 数字具体化:「启动更快」要写成「冷启动从约 6 秒降到约 2 秒」;
31
- 没有数据不要编数字。
32
- - 不用内部术语:对用户写「登录更稳定」,不写「修复 OAuth2 refresh token 竞态」;
33
- 这类内容放进面向开发者的附录小节。
34
- - 每条尽量带出处:issue / PR / 需求单号,方便日后回溯。
35
-
36
- ## 三、破坏性变更的写法(最容易写砸的部分)
37
- - 三要素齐全:**什么会坏**(哪个行为 / 接口 / 配置)、**影响谁**、**怎么办**
38
- (迁移步骤或替代写法,给可直接复制的示例)。
39
- - 正面示例:
40
- > **升级注意**:`/api/tasks` 返回的 `status` 字段由中文改为枚举值
41
- > (`running` / `done` / `failed`)。依赖该字段的脚本需同步修改,
42
- > 新旧值对照表见帮助文档「status 迁移」一节。
43
- - 「可能影响部分用户」这类模糊表述禁止——写清判定条件,让用户 10 秒内
44
- 判断自己在不在影响范围内。
45
-
46
- ## 四、模板(可直接复制)
47
- ```
48
- ## vX.Y.Z 更新说明(YYYY-MM-DD)
49
-
50
- 概览:一句话说清这版最重要的事。
51
-
52
- ### 新功能
53
- - 支持xxx:现在可以……(入口:设置 > xxx)(#123)
54
-
55
- ### 优化
56
- - xxx 更快 / 更省:从……到……
57
-
58
- ### 修复
59
- - 修复「用户看到的现象」(#456)
60
-
61
- ### 升级注意
62
- - 变更点 → 影响谁 → 迁移步骤(附示例代码或对照表链接)
63
-
64
- ### 已知问题
65
- - ……;临时绕过:……
66
- ```
67
-
68
- ## 五、反例对照
69
- - 反例:「优化了底层性能。」→ 正例:「任务列表在 1 万条数据时加载时间从约 4 秒降到约 1 秒。」
70
- - 反例:「修复若干问题。」→ 正例:「修复搜索结果偶发重复显示;修复深色模式下按钮文字不可读。」
71
- - 反例:「接口升级,请注意适配。」→ 正例:按三要素写全(什么坏 / 影响谁 / 怎么办)。
72
- - 反例:「重构核心模块。」→ 用户视角无行为变化的重构不进用户公告,放开发者 changelog。
1
+ ---
2
+ name: 版本发布说明撰写模板
3
+ note: 面向用户的更新公告:固定六段结构 / 写作纪律 / 破坏性变更三要素 / 可复制模板与反例
4
+ scopes:
5
+ - "*"
6
+ source: market
7
+ market_id: release-notes
8
+ ---
9
+
10
+ # 版本发布说明撰写模板(市场包)
11
+
12
+ 适用:发版时写 Release Notes / 更新公告 / changelog 的用户可读部分。
13
+ 核心立场:**写给用户看,不是写给 git log 看**——用户不关心重构了哪个模块,
14
+ 只关心「这次更新后我能多做什么、少烦什么、会坏什么」。
15
+
16
+ ## 一、标准结构(顺序固定)
17
+ 1. **一句话概览**:这版最值得用户知道的一件事;实在没有就写「稳定性修复」。
18
+ 2. **新功能**:能做以前做不了的事。每条 = 功能名 + 用户收益 + 入口在哪。
19
+ 3. **体验优化**:以前能做、现在更快 / 更顺 / 更省的事。
20
+ 4. **问题修复**:写用户见过的**症状**(「修复导出 PDF 中文乱码」),
21
+ 不写内部成因(「修复字体子集化模块的编码偏移」)。
22
+ 5. **升级注意事项 / 破坏性变更**:有则紧跟概览**置顶**(不按上面的顺序排),
23
+ 没有就省略此节。
24
+ 6. **已知问题**:带着已知问题发版必须如实列出,并给临时绕过办法。
25
+
26
+ ## 二、写作纪律
27
+ - 每条只说**一个行为变化**,动词开头、面向结果:「支持按标签筛选任务」,
28
+ 而不是「重构筛选服务并接入标签存储」。
29
+ - 收益优先于实现:先说用户能干什么,实现细节放括号或链接里。
30
+ - 数字具体化:「启动更快」要写成「冷启动从约 6 秒降到约 2 秒」;
31
+ 没有数据不要编数字。
32
+ - 不用内部术语:对用户写「登录更稳定」,不写「修复 OAuth2 refresh token 竞态」;
33
+ 这类内容放进面向开发者的附录小节。
34
+ - 每条尽量带出处:issue / PR / 需求单号,方便日后回溯。
35
+
36
+ ## 三、破坏性变更的写法(最容易写砸的部分)
37
+ - 三要素齐全:**什么会坏**(哪个行为 / 接口 / 配置)、**影响谁**、**怎么办**
38
+ (迁移步骤或替代写法,给可直接复制的示例)。
39
+ - 正面示例:
40
+ > **升级注意**:`/api/tasks` 返回的 `status` 字段由中文改为枚举值
41
+ > (`running` / `done` / `failed`)。依赖该字段的脚本需同步修改,
42
+ > 新旧值对照表见帮助文档「status 迁移」一节。
43
+ - 「可能影响部分用户」这类模糊表述禁止——写清判定条件,让用户 10 秒内
44
+ 判断自己在不在影响范围内。
45
+
46
+ ## 四、模板(可直接复制)
47
+ ```
48
+ ## vX.Y.Z 更新说明(YYYY-MM-DD)
49
+
50
+ 概览:一句话说清这版最重要的事。
51
+
52
+ ### 新功能
53
+ - 支持xxx:现在可以……(入口:设置 > xxx)(#123)
54
+
55
+ ### 优化
56
+ - xxx 更快 / 更省:从……到……
57
+
58
+ ### 修复
59
+ - 修复「用户看到的现象」(#456)
60
+
61
+ ### 升级注意
62
+ - 变更点 → 影响谁 → 迁移步骤(附示例代码或对照表链接)
63
+
64
+ ### 已知问题
65
+ - ……;临时绕过:……
66
+ ```
67
+
68
+ ## 五、反例对照
69
+ - 反例:「优化了底层性能。」→ 正例:「任务列表在 1 万条数据时加载时间从约 4 秒降到约 1 秒。」
70
+ - 反例:「修复若干问题。」→ 正例:「修复搜索结果偶发重复显示;修复深色模式下按钮文字不可读。」
71
+ - 反例:「接口升级,请注意适配。」→ 正例:按三要素写全(什么坏 / 影响谁 / 怎么办)。
72
+ - 反例:「重构核心模块。」→ 用户视角无行为变化的重构不进用户公告,放开发者 changelog。
@@ -1,71 +1,71 @@
1
- ---
2
- name: 周报晨报生成器守则
3
- note: 从任务与运行记录生成汇报:先取材再总结 / 晨报三段 / 周报四段 / 量化纪律与模板
4
- scopes:
5
- - "*"
6
- source: market
7
- market_id: weekly-report
8
- ---
9
-
10
- # 周报 / 晨报生成器守则(市场包)
11
-
12
- 适用:为个人或团队生成晨报(昨日 / 今日 / 阻塞)与周报(本周 / 风险 / 下周)。
13
- 第一原则:**先取材,再总结,不许凭印象编**。事实原料来自任务系统、运行记录、
14
- 提交历史与日志;生成器的工作是把原料提炼成「能支撑决策」的信息,不是文学创作。
15
-
16
- ## 一、取材清单(动笔前先收集)
17
- - 已完成:本周关闭的任务、成功结束的运行、合并的提交 / PR(git log --since 起止)。
18
- - 进行中:各任务当前状态、最近一次运行结论、卡在哪一步。
19
- - 信号类:评审打分、测试通过率、失败与重试次数、耗时的环比变化——量化的来源。
20
- - 未进系统的口头承诺 / 临时插活:单独列出并标注「口头事项」,不混进正式条目。
21
-
22
- ## 二、晨报结构(10 行以内,站着读完)
23
- - **昨日完成**:2-4 条,每条写一个**结果**(不是动作)。
24
- - **今日计划**:2-4 条,每条可验证(「提测搜索分页」,而不是「继续做搜索」)。
25
- - **阻塞**:0-2 条,每条带「需要谁 / 需要什么」;没有就写「无」,不硬凑。
26
-
27
- ## 三、周报结构
28
- 1. **本周一句话**:本周最重要的结果或结论。上级只读这一行也能掌握大局。
29
- 2. **关键进展**:按目标 / 项目分组,每组 1-3 条;每条 = 结果 + 量化 + 对照计划
30
- (提前 / 按期 / 延期几天)。流水账禁止——「周一做了 A,周二做了 B」是日志,
31
- 不是汇报。
32
- 3. **风险与阻塞**:每条 = 风险描述 + 影响面 + 需要的支持或缓解方案。
33
- **只报风险不给方案 = 把问题原样上交;报喜不报忧 = 把雷埋到下周。**
34
- 4. **下周计划**:2-5 条可验证的目标,与风险呼应,高风险项排前面。
35
-
36
- ## 四、写作纪律
37
- - **量化**:能带数字必带数字(章数、字数、通过率、耗时、条数);
38
- 「大量」「明显」「基本完成」这类模糊词出现即重写。
39
- - **结果导向**:写「完成了 X,达到 Y」;「在做 X」「推进中」放进计划或阻塞,不进步进展。
40
- - **动词开头、一条一意**:每条脱离上下文独立可懂。
41
- - **诚实纪律**:延期就写延期,附原因与新预计时间;数据缺失标注「缺」,不估算充数。
42
- - **篇幅纪律**:周报正文 ≤400 字(附录与链接不计);超了说明没提炼。
43
-
44
- ## 五、常见毛病对照(反例 → 正例)
45
- - 反例:「本周推进了 A 项目。」→ 正例:「A 项目完成搜索分页改造并提测,1 万条数据下翻页响应小于 200ms。」
46
- - 反例:「一切顺利。」→ 正例:「整体按期;联调依赖的 B 接口周三可用,已与对方确认。」
47
- - 反例:「风险:时间紧。」→ 正例:「风险:评审通过率低于阈值会触发返工,预计延期 2 天;已加排一轮预审。」
48
- - 反例:把 12 条流水账逐日列出 → 正例:归并成 3 条按目标分组的结果,逐日明细放附录链接。
49
-
50
- ## 六、周报模板(可直接复制)
51
- ```
52
- # 周报(MM.DD - MM.DD)
53
-
54
- 一句话:完成xxx,指标y环比+z%;主要风险:xxx。
55
-
56
- ## 关键进展
57
- - 【目标A】交付xxx(量化数据);对照计划:按期 / 延期n天
58
- - 【目标B】……
59
-
60
- ## 风险与阻塞
61
- - 风险:……;影响:……;需要:……(或已采取措施:……)
62
-
63
- ## 下周计划
64
- - ……
65
- ```
66
-
67
- ## 七、自检
68
- - [ ] 每个数字都能在任务 / 运行记录 / git log 里找到出处
69
- - [ ] 无「继续推进」「持续优化」这类无信息量条目
70
- - [ ] 风险条目全部带缓解方案或明确的求助对象
71
- - [ ] 下周计划每条都有可验证的完成标志
1
+ ---
2
+ name: 周报晨报生成器守则
3
+ note: 从任务与运行记录生成汇报:先取材再总结 / 晨报三段 / 周报四段 / 量化纪律与模板
4
+ scopes:
5
+ - "*"
6
+ source: market
7
+ market_id: weekly-report
8
+ ---
9
+
10
+ # 周报 / 晨报生成器守则(市场包)
11
+
12
+ 适用:为个人或团队生成晨报(昨日 / 今日 / 阻塞)与周报(本周 / 风险 / 下周)。
13
+ 第一原则:**先取材,再总结,不许凭印象编**。事实原料来自任务系统、运行记录、
14
+ 提交历史与日志;生成器的工作是把原料提炼成「能支撑决策」的信息,不是文学创作。
15
+
16
+ ## 一、取材清单(动笔前先收集)
17
+ - 已完成:本周关闭的任务、成功结束的运行、合并的提交 / PR(git log --since 起止)。
18
+ - 进行中:各任务当前状态、最近一次运行结论、卡在哪一步。
19
+ - 信号类:评审打分、测试通过率、失败与重试次数、耗时的环比变化——量化的来源。
20
+ - 未进系统的口头承诺 / 临时插活:单独列出并标注「口头事项」,不混进正式条目。
21
+
22
+ ## 二、晨报结构(10 行以内,站着读完)
23
+ - **昨日完成**:2-4 条,每条写一个**结果**(不是动作)。
24
+ - **今日计划**:2-4 条,每条可验证(「提测搜索分页」,而不是「继续做搜索」)。
25
+ - **阻塞**:0-2 条,每条带「需要谁 / 需要什么」;没有就写「无」,不硬凑。
26
+
27
+ ## 三、周报结构
28
+ 1. **本周一句话**:本周最重要的结果或结论。上级只读这一行也能掌握大局。
29
+ 2. **关键进展**:按目标 / 项目分组,每组 1-3 条;每条 = 结果 + 量化 + 对照计划
30
+ (提前 / 按期 / 延期几天)。流水账禁止——「周一做了 A,周二做了 B」是日志,
31
+ 不是汇报。
32
+ 3. **风险与阻塞**:每条 = 风险描述 + 影响面 + 需要的支持或缓解方案。
33
+ **只报风险不给方案 = 把问题原样上交;报喜不报忧 = 把雷埋到下周。**
34
+ 4. **下周计划**:2-5 条可验证的目标,与风险呼应,高风险项排前面。
35
+
36
+ ## 四、写作纪律
37
+ - **量化**:能带数字必带数字(章数、字数、通过率、耗时、条数);
38
+ 「大量」「明显」「基本完成」这类模糊词出现即重写。
39
+ - **结果导向**:写「完成了 X,达到 Y」;「在做 X」「推进中」放进计划或阻塞,不进步进展。
40
+ - **动词开头、一条一意**:每条脱离上下文独立可懂。
41
+ - **诚实纪律**:延期就写延期,附原因与新预计时间;数据缺失标注「缺」,不估算充数。
42
+ - **篇幅纪律**:周报正文 ≤400 字(附录与链接不计);超了说明没提炼。
43
+
44
+ ## 五、常见毛病对照(反例 → 正例)
45
+ - 反例:「本周推进了 A 项目。」→ 正例:「A 项目完成搜索分页改造并提测,1 万条数据下翻页响应小于 200ms。」
46
+ - 反例:「一切顺利。」→ 正例:「整体按期;联调依赖的 B 接口周三可用,已与对方确认。」
47
+ - 反例:「风险:时间紧。」→ 正例:「风险:评审通过率低于阈值会触发返工,预计延期 2 天;已加排一轮预审。」
48
+ - 反例:把 12 条流水账逐日列出 → 正例:归并成 3 条按目标分组的结果,逐日明细放附录链接。
49
+
50
+ ## 六、周报模板(可直接复制)
51
+ ```
52
+ # 周报(MM.DD - MM.DD)
53
+
54
+ 一句话:完成xxx,指标y环比+z%;主要风险:xxx。
55
+
56
+ ## 关键进展
57
+ - 【目标A】交付xxx(量化数据);对照计划:按期 / 延期n天
58
+ - 【目标B】……
59
+
60
+ ## 风险与阻塞
61
+ - 风险:……;影响:……;需要:……(或已采取措施:……)
62
+
63
+ ## 下周计划
64
+ - ……
65
+ ```
66
+
67
+ ## 七、自检
68
+ - [ ] 每个数字都能在任务 / 运行记录 / git log 里找到出处
69
+ - [ ] 无「继续推进」「持续优化」这类无信息量条目
70
+ - [ ] 风险条目全部带缓解方案或明确的求助对象
71
+ - [ ] 下周计划每条都有可验证的完成标志
@@ -1,70 +1,70 @@
1
- ---
2
- name: 世界观设定一致性台账守则
3
- note: 设定台账五件套 / 设定变更三步流程 / 高频吃书场景 / 章前查章后记闭环
4
- scopes:
5
- - novel
6
- - serial_novel
7
- source: market
8
- market_id: worldview-consistency
9
- ---
10
-
11
- # 世界观设定一致性台账守则(市场包)
12
-
13
- 适用:连载与长篇的设定管理。吃书(前后矛盾)是长篇差评第一来源,且几乎全部
14
- 源于**「没有台账」而不是「记性差」**——几十万字跨度下,任何人都记不住自己写过的
15
- 每个数字与专名。本包给出一套零工具依赖的台账纪律。
16
-
17
- ## 一、台账五件套(开书第一天建立,一个文件即可)
18
- 1. **规则体系**:力量 / 能力等级、代价与限制、禁忌(什么绝对做不到)。
19
- **限制比能力更重要**——能赢只是爽,不能做什么才产生剧情。
20
- 2. **地理与组织**:地名 / 势力名清单(含从属关系)。一地一名,写法逐字固定
21
- (定了「云州」就不能又写「云洲」)。
22
- 3. **时间线**:故事内历法 + 大事件年表(含「现在」的锚点日期);每章推进了
23
- 多长时间记一笔,跨章对表。
24
- 4. **专有名词表**:自造词、称谓、咒语、物品名,逐字锁定。
25
- 5. **数字台账**:金额、距离、年龄、队伍人数、库存——正文出现过的每个数字。
26
- 数字是最容易吃书的类别,因为最枯燥、最没人记。
27
-
28
- ## 二、铁律
29
- - **设定一经正文确认,不可静默更改。**要改,走三步:登记「改了什么 / 从哪章起
30
- 生效」→ 排查并修订前文旧描述(或用剧情解释)→ 更新台账。三步缺一不可。
31
- - 设定揭示分层:世界观全貌不必第一章交底,但**已揭示的部分永不反悔**。
32
- 未揭示的可以随时丰富——区分「未揭示」与「矛盾」:读者无从知晓的不算吃书。
33
- - 新设定入正文前先对台账查重:与既有规则冲突吗?冲突就要么改新、要么改旧,
34
- 不许「先写上再说」。
35
- - 跨书 / 跨卷沿用设定时,以台账为准重读一遍,不凭上一本的记忆。
36
-
37
- ## 三、高频吃书场景(评审时重点排查)
38
- - 时间线对不上:上一段还是「昨天」,三天后又被称作「昨天」;旅程三天的两头
39
- 都只过了一夜。
40
- - 能力凭空升级 / 降级:前面明确做不到的事,后面无解释做到了(或反之)。
41
- - 称谓漂移:同一人物 / 势力的称呼前后不一;称呼随剧情需要临时变化。
42
- - 死人复活 / 物品复用:已确认死亡的角色、已消耗或损毁的物品再次登场。
43
- - 年龄与亲缘错位:年龄推算矛盾、辈分关系前后颠倒。
44
-
45
- ## 四、闭环纪律:章前查、章后记
46
- - **章前查**:写 / 审每一章前,读一遍本章涉及的台账条目(出场地名、势力、规则、
47
- 上次时间锚点)。30 秒的事,防 30 万字后的大返工。
48
- - **章后记**:本章产生的任何新设定、新专名、新数字、时间推进,**当章写入台账,
49
- 不过夜**。攒三章再补 = 必漏。
50
- - 一致性评审给出的矛盾项,当轮修复并回填台账;同类矛盾出现第二次 = 台账结构
51
- 要补一类条目,而不是「下次更小心一点」。
52
-
53
- ## 五、台账文件模板(可直接复制)
54
- > ## 规则体系
55
- > - 等级:……;代价:……;禁忌(绝对做不到的事):……
56
- > ## 地理与组织
57
- > - 云州(州)> 落霞城(城);青岚宗(宗门,驻落霞城)
58
- > ## 时间线
59
- > - 第 1 章:启程日(春三月初七);第 2 章:+3 日 → 三月十一
60
- > ## 专有名词表
61
- > - 破妄瞳(术法名,逐字锁定);称「宗主」不写「掌门」
62
- > ## 数字台账
63
- > - 主角 16 岁;启程盘缠 3 两银;落霞城至云州城 700 里
64
-
65
- ## 六、交稿前自检
66
- - [ ] 本章新设定已查重并入台账,未与既有规则冲突
67
- - [ ] 时间推进已记账,与上一章锚点衔接无误
68
- - [ ] 数字(金额 / 距离 / 人数 / 年龄)与台账一致,新数字已登记
69
- - [ ] 专名写法与名词表逐字一致
70
- - [ ] 若改过既有设定:三步流程(登记 / 排查前文 / 更新台账)已走完
1
+ ---
2
+ name: 世界观设定一致性台账守则
3
+ note: 设定台账五件套 / 设定变更三步流程 / 高频吃书场景 / 章前查章后记闭环
4
+ scopes:
5
+ - novel
6
+ - serial_novel
7
+ source: market
8
+ market_id: worldview-consistency
9
+ ---
10
+
11
+ # 世界观设定一致性台账守则(市场包)
12
+
13
+ 适用:连载与长篇的设定管理。吃书(前后矛盾)是长篇差评第一来源,且几乎全部
14
+ 源于**「没有台账」而不是「记性差」**——几十万字跨度下,任何人都记不住自己写过的
15
+ 每个数字与专名。本包给出一套零工具依赖的台账纪律。
16
+
17
+ ## 一、台账五件套(开书第一天建立,一个文件即可)
18
+ 1. **规则体系**:力量 / 能力等级、代价与限制、禁忌(什么绝对做不到)。
19
+ **限制比能力更重要**——能赢只是爽,不能做什么才产生剧情。
20
+ 2. **地理与组织**:地名 / 势力名清单(含从属关系)。一地一名,写法逐字固定
21
+ (定了「云州」就不能又写「云洲」)。
22
+ 3. **时间线**:故事内历法 + 大事件年表(含「现在」的锚点日期);每章推进了
23
+ 多长时间记一笔,跨章对表。
24
+ 4. **专有名词表**:自造词、称谓、咒语、物品名,逐字锁定。
25
+ 5. **数字台账**:金额、距离、年龄、队伍人数、库存——正文出现过的每个数字。
26
+ 数字是最容易吃书的类别,因为最枯燥、最没人记。
27
+
28
+ ## 二、铁律
29
+ - **设定一经正文确认,不可静默更改。**要改,走三步:登记「改了什么 / 从哪章起
30
+ 生效」→ 排查并修订前文旧描述(或用剧情解释)→ 更新台账。三步缺一不可。
31
+ - 设定揭示分层:世界观全貌不必第一章交底,但**已揭示的部分永不反悔**。
32
+ 未揭示的可以随时丰富——区分「未揭示」与「矛盾」:读者无从知晓的不算吃书。
33
+ - 新设定入正文前先对台账查重:与既有规则冲突吗?冲突就要么改新、要么改旧,
34
+ 不许「先写上再说」。
35
+ - 跨书 / 跨卷沿用设定时,以台账为准重读一遍,不凭上一本的记忆。
36
+
37
+ ## 三、高频吃书场景(评审时重点排查)
38
+ - 时间线对不上:上一段还是「昨天」,三天后又被称作「昨天」;旅程三天的两头
39
+ 都只过了一夜。
40
+ - 能力凭空升级 / 降级:前面明确做不到的事,后面无解释做到了(或反之)。
41
+ - 称谓漂移:同一人物 / 势力的称呼前后不一;称呼随剧情需要临时变化。
42
+ - 死人复活 / 物品复用:已确认死亡的角色、已消耗或损毁的物品再次登场。
43
+ - 年龄与亲缘错位:年龄推算矛盾、辈分关系前后颠倒。
44
+
45
+ ## 四、闭环纪律:章前查、章后记
46
+ - **章前查**:写 / 审每一章前,读一遍本章涉及的台账条目(出场地名、势力、规则、
47
+ 上次时间锚点)。30 秒的事,防 30 万字后的大返工。
48
+ - **章后记**:本章产生的任何新设定、新专名、新数字、时间推进,**当章写入台账,
49
+ 不过夜**。攒三章再补 = 必漏。
50
+ - 一致性评审给出的矛盾项,当轮修复并回填台账;同类矛盾出现第二次 = 台账结构
51
+ 要补一类条目,而不是「下次更小心一点」。
52
+
53
+ ## 五、台账文件模板(可直接复制)
54
+ > ## 规则体系
55
+ > - 等级:……;代价:……;禁忌(绝对做不到的事):……
56
+ > ## 地理与组织
57
+ > - 云州(州)> 落霞城(城);青岚宗(宗门,驻落霞城)
58
+ > ## 时间线
59
+ > - 第 1 章:启程日(春三月初七);第 2 章:+3 日 → 三月十一
60
+ > ## 专有名词表
61
+ > - 破妄瞳(术法名,逐字锁定);称「宗主」不写「掌门」
62
+ > ## 数字台账
63
+ > - 主角 16 岁;启程盘缠 3 两银;落霞城至云州城 700 里
64
+
65
+ ## 六、交稿前自检
66
+ - [ ] 本章新设定已查重并入台账,未与既有规则冲突
67
+ - [ ] 时间推进已记账,与上一章锚点衔接无误
68
+ - [ ] 数字(金额 / 距离 / 人数 / 年龄)与台账一致,新数字已登记
69
+ - [ ] 专名写法与名词表逐字一致
70
+ - [ ] 若改过既有设定:三步流程(登记 / 排查前文 / 更新台账)已走完
@@ -410,6 +410,14 @@ def upsert_lesson(scope, title, content, source="", category=None, dim=None):
410
410
  it.update({k: new_rev[k] for k in ("revision_id", "content_sha256")})
411
411
  it["seen"] = int(it.get("seen") or 1) + 1
412
412
  it["updated_at"] = _now()
413
+ # 合并不吞变体标题(批2 记忆卫生):近似题被吸收时留痕——溯源可见,
414
+ # 且后续按变体措辞检索也能命中(bigram 检索只看 survivor 自己的题)。
415
+ # 去重+封顶 8 条,防止长跑自动化把字段撑成第二正文。
416
+ if title != str(it.get("title") or ""):
417
+ mt = it.setdefault("merged_titles", [])
418
+ if title not in mt:
419
+ mt.append(title)
420
+ del mt[:-8]
413
421
  # 合并时不降级已有分类:除非本次归到了明确类别,或该条原本没有分类
414
422
  if cat != LESSON_UNCATEGORIZED or not it.get("category"):
415
423
  it["category"] = cat
@@ -599,7 +607,13 @@ def block_for(task, scope_override=None, *, stable_order=False, run_id=None):
599
607
  for x in lessons:
600
608
  # 编号可见:复盘官据此点名「哪条已沉淀教训没防住本次问题」,
601
609
  # 归因才能落到单条而不是整批(见 note_outcome)。
602
- lines.append("- [%s] **%s**:%s" % (x["id"], x["title"], x["content"]))
610
+ # karma 标注(批5 对称补齐):won≥2 才标——1 次可能是巧合,噪音为零;
611
+ # 与知识库[有据]置信标同构,模型可按实证强度校准采信。
612
+ # run 内稳定:won 只在 run 收尾回写,任务中途字节不变。
613
+ karma = ""
614
+ if int(x.get("won") or 0) >= 2:
615
+ karma = "(已验证有效 %d 次)" % int(x.get("won") or 0)
616
+ lines.append("- [%s] **%s**%s:%s" % (x["id"], x["title"], karma, x["content"]))
603
617
  used.append(x["id"])
604
618
  lesson_ids.append(x["id"])
605
619
  lesson_part = ("### 【本项目已沉淀的教训(历史评审反复出现,务必规避;方括号内为教训编号)】\n"