codebee 0.1.95 → 0.1.97
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.
- package/CHANGELOG.md +733 -720
- package/LICENSE +21 -21
- package/README.md +516 -509
- package/app/core/acceptance.py +100 -100
- package/app/core/agent_context.py +118 -0
- package/app/core/aiflavor.py +197 -197
- package/app/core/analytics.py +38 -38
- package/app/core/artifacts.py +148 -148
- package/app/core/assets.py +110 -110
- package/app/core/attachments.py +623 -623
- package/app/core/audit.py +30 -30
- package/app/core/backup.py +470 -470
- package/app/core/beekeeper.py +183 -183
- package/app/core/benchstore.py +102 -95
- package/app/core/board.py +246 -209
- package/app/core/bookmeta.py +1036 -1036
- package/app/core/bookmeta_catalog.py +180 -180
- package/app/core/branching.py +137 -137
- package/app/core/builtin_agent.py +2055 -1680
- package/app/core/capability.py +144 -144
- package/app/core/chaptersafe.py +32 -32
- package/app/core/checkpoints.py +648 -0
- package/app/core/cleanup.py +303 -303
- package/app/core/compaction.py +201 -201
- package/app/core/contracts.py +255 -255
- package/app/core/covergen.py +356 -356
- package/app/core/defectretro.py +43 -43
- package/app/core/diagnostics.py +114 -114
- package/app/core/dispatch.py +198 -191
- package/app/core/dispatch_log.py +128 -128
- package/app/core/env_scrub.py +85 -85
- package/app/core/errorlog.py +137 -137
- package/app/core/eval_matrix.py +82 -0
- package/app/core/evalbench.py +184 -91
- package/app/core/evaluation.py +174 -174
- package/app/core/failure_notify.py +290 -290
- package/app/core/flow_graph.py +33 -0
- package/app/core/goal_service.py +167 -167
- package/app/core/health.py +389 -389
- package/app/core/history.py +38 -38
- package/app/core/hooks.py +162 -162
- package/app/core/jobs.py +25 -4
- package/app/core/knowledge_pipeline.py +86 -0
- package/app/core/manager.py +2232 -2232
- package/app/core/mcp_client.py +200 -29
- package/app/core/mocks.py +64 -64
- package/app/core/notify.py +201 -201
- package/app/core/novel_quality.py +181 -189
- package/app/core/openapi.py +177 -154
- package/app/core/operations.py +228 -228
- package/app/core/paihang.py +145 -145
- package/app/core/pipeline.py +319 -59
- package/app/core/planner.py +17 -11
- package/app/core/policy.py +84 -0
- package/app/core/portguard.py +111 -111
- package/app/core/presence.py +77 -77
- package/app/core/preview.py +293 -293
- package/app/core/project_memory.py +139 -0
- package/app/core/prompt_guard.py +78 -78
- package/app/core/publish/__init__.py +7 -7
- package/app/core/publish/auto.py +106 -22
- package/app/core/publish/browser.py +694 -655
- package/app/core/publish/chaprows.py +138 -0
- package/app/core/publish/fanqie.py +212 -165
- package/app/core/publish/flow.py +832 -640
- package/app/core/publish/flows-fanqie-calibrated.json +361 -336
- package/app/core/publish/ledger.py +51 -2
- package/app/core/publish/manager.py +1150 -1118
- package/app/core/publish/qimao.py +176 -176
- package/app/core/publish/volumes.py +108 -0
- package/app/core/publish/ws.py +139 -139
- package/app/core/quality_gate.py +194 -194
- package/app/core/redact.py +38 -38
- package/app/core/repeat_guard.py +129 -129
- package/app/core/retrieval.py +137 -137
- package/app/core/router.py +398 -398
- package/app/core/runner.py +2239 -2238
- package/app/core/selfupdate.py +384 -384
- package/app/core/session_log.py +161 -161
- package/app/core/sessions.py +312 -312
- package/app/core/settings.py +33 -5
- package/app/core/settings_schema.py +282 -271
- package/app/core/share_page.py +114 -114
- package/app/core/skill_scan.py +139 -139
- package/app/core/skillpacks/fanqie-novel.md +8 -6
- package/app/core/skillpacks/market/character-bible.md +66 -66
- package/app/core/skillpacks/market/code-risk-checklist.md +58 -58
- package/app/core/skillpacks/market/git-workflow.md +57 -57
- package/app/core/skillpacks/market/release-notes.md +72 -72
- package/app/core/skillpacks/market/weekly-report.md +71 -71
- package/app/core/skillpacks/market/worldview-consistency.md +70 -70
- package/app/core/skillpacks/qimao-signing.md +14 -11
- package/app/core/skills.py +32 -21
- package/app/core/step_runner.py +132 -132
- package/app/core/store.py +24 -0
- package/app/core/story_tracking.py +275 -275
- package/app/core/task_compile.py +199 -199
- package/app/core/telemetry.py +292 -292
- package/app/core/tlsctx.py +64 -64
- package/app/core/token_meter.py +147 -147
- package/app/core/tool_outputs.py +107 -0
- package/app/core/tracing.py +207 -144
- package/app/core/upstream.py +41 -41
- package/app/core/usage.py +1038 -1038
- package/app/core/volumes.py +389 -389
- package/app/core/webhooks.py +89 -0
- package/app/core/wxdigest.py +865 -858
- package/app/core/zentao.py +2692 -2692
- package/app/main.py +179 -10
- package/app/mcp_server.py +244 -244
- package/app/pick_dialog.py +110 -110
- package/app/ui/app.js +563 -21
- package/app/ui/artdiff.js +74 -74
- package/app/ui/assets/community-qr.png +0 -0
- package/app/ui/assets/donate-alipay.jpg +0 -0
- package/app/ui/assets/donate-qr.jpg +0 -0
- package/app/ui/assets/workbench-reference.png +0 -0
- package/app/ui/board.css +451 -666
- package/app/ui/board.html +165 -162
- package/app/ui/board.js +509 -305
- package/app/ui/hive3d.js +242 -0
- package/app/ui/i18n.js +125 -9
- package/app/ui/icons/bee.svg +79 -79
- package/app/ui/index.html +60 -3
- package/app/ui/manifest.json +16 -16
- package/app/ui/qrcode.js +2297 -2297
- package/app/ui/style.css +189 -9
- package/bin/tutti.js +147 -147
- package/package.json +49 -48
- package/tools/wx_reader.py +261 -261
- package/app/.playwright-cli/console-2026-09-23T08-26-03-635Z.log +0 -88
- package/app/.playwright-cli/page-2026-09-23T08-26-03-845Z.yml +0 -126
- package/app/.playwright-cli/page-2026-09-23T08-29-44-203Z.png +0 -0
- package/app/.playwright-cli/page-2026-09-23T08-35-42-046Z.yml +0 -210
- package/app/.playwright-cli/page-2026-09-23T08-36-52-858Z.png +0 -0
- package/app/.playwright-cli/page-2026-09-23T08-37-33-938Z.png +0 -0
- package/app/.playwright-cli/run-detail-after.png +0 -0
- package/app/output/_createbook_body.json +0 -1
- package/app/output/_probe_fq_click.py +0 -50
- package/app/output/_probe_fq_form.py +0 -42
- package/app/output/_probe_fq_modal.py +0 -55
- package/app/output/_probe_fq_points.py +0 -71
- package/app/output/_probe_fq_submit.py +0 -34
- package/app/output/_probe_fq_watch.py +0 -62
|
@@ -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
|
+
- [ ] 若改过既有设定:三步流程(登记 / 排查前文 / 更新台账)已走完
|
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
|
|
8
8
|
> 这是写作参考与自检清单,不是平台官方规则或过签预测;按当前频道与后台要求核实。
|
|
9
9
|
|
|
10
|
+
## 使用顺序(覆盖下方历史口诀的绝对化表述)
|
|
11
|
+
|
|
12
|
+
遇到作品“不过”先确认具体结果:内容/合规审核、建书字段校验、签约质量评估、发布章节审核或读者数据表现,不混称“审核”。优先记录平台原文、日期、频道、提交版本和评估范围;没有明确平台意见时,标注为内部诊断,不推断政策原因、AI 检测或算法权重。
|
|
13
|
+
|
|
14
|
+
诊断依次分开报告:①文本问题(引用可定位原文);②该频道/受众的适配假设(说明依据与替代解释);③当前政策核验(引用当前后台/公告或标为未核实)。经验口诀只能生成检查问题,不能充当评分标准或自动拒稿门槛。未读正文不能判定通过;有风险也要说明严重度、影响及可逆的改法。
|
|
15
|
+
|
|
16
|
+
拒稿反馈到修改必须形成闭环:`原反馈 → 可观察的正文问题 → 结构/措辞/政策中的改动层级 → 小样本复验方式`。若意见是切入点/设定常规,先比较不同事件机制、主角选择与代价,不仅润色原句;若是文风/流畅,才定位句段层问题。改稿不能只加冲突、爽点、钩子或特写来迎合清单。
|
|
17
|
+
|
|
10
18
|
## 证据等级与使用边界(2026-09-30 更新)
|
|
11
19
|
|
|
12
20
|
- **A级:当前平台事实**:只接受作家助手/合同/官方公告中当前可见的规则;投稿、独家、更新和内容红线必须回到原页面核对,历史材料不能代替政策。
|
|
@@ -31,8 +39,8 @@
|
|
|
31
39
|
- **前 600 字**:观察眼前困境是否具体(退婚/背叛/陷害/侮辱/破产/误会/灾难/生死危机),而非只铺垫。
|
|
32
40
|
- **前 2000 字**:观察核心吸引点是否实际展示(字数位置本身不证明吸引力)。
|
|
33
41
|
- **第三章前**:观察主线是否明确(主角要干什么,像“鸣人要当火影”一样清楚)。
|
|
34
|
-
-
|
|
35
|
-
|
|
42
|
+
- 第一章具名人物尽量少(五人只是阅读负担参考,不是硬门槛);观察前三章是否出现对故事理解或人物处境有意义的变化;
|
|
43
|
+
反转若出现,应由前文条件引发,不为口诀机械加死亡/背叛。
|
|
36
44
|
- 可复用的一种开篇节奏:**第一章建立冲突并留后续问题 → 第二章让核心能力/设定影响行动 → 第三章完成第一次阶段性兑现**;具体次序服务于本稿题材与因果。
|
|
37
45
|
- 三幕式可以作为结构草图:开端(危机/目标)→发展(行动/代价)→转折(新信息/选择),不要求每稿套“金手指/背叛”等桥段。
|
|
38
46
|
- 历史经验帖常提醒检查设定、世界观、环境和人物关系是否挤占事件;倒叙、群像或配角戏份本身不是禁写项,重点是读者能否跟住主线。
|
|
@@ -66,24 +74,19 @@
|
|
|
66
74
|
- 开篇视角应让读者容易定位人物、信息来源和情绪距离;第三人称全知等视角不是禁项,需看执行是否清楚。
|
|
67
75
|
例:×"昏暗的房间里,一个男人把南笙按在沙发上" → √"好痒……南笙迷迷糊糊苏醒,感觉腿上一阵瘙痒,
|
|
68
76
|
随后一只粗糙的大手便摸上了她的大腿"。
|
|
69
|
-
-
|
|
77
|
+
- 视角选择服务于本稿;第一人称、限知、全知或多视角都可用,检查信息归属是否清楚、切换是否有意图。
|
|
70
78
|
- 避免直白叙述:"她哭得很伤心" × → "她蜷缩在墙角,指甲掐进掌心,喉咙里溢出压抑的呜咽" √。
|
|
71
|
-
-
|
|
79
|
+
- 追求准确、有辨识度且适合叙述者的语言;心理描写不必一律替换为动作,对话也可承担停顿、重复、闲谈等真实功能。
|
|
72
80
|
- 段落短,适配手机阅读;少错别字病句。
|
|
73
81
|
|
|
74
82
|
### 编辑高频驳回话术拆解(实测复盘,动笔/改稿时逐条对照)
|
|
75
83
|
以下三条是所汇编材料中反复出现的"文笔类"反馈,可转成自查问题;不代表所有频道或拒稿的完整原因:
|
|
76
84
|
|
|
77
|
-
- **"风格不够统一"
|
|
78
|
-
或切场景/切视角时文风跟着变。**修法**:全篇定一个文风锚(如"短句 + 白描 + 口语但不过火"),
|
|
79
|
-
换场不换笔调;网络用语、方言、专有名词只允许一种强度,通篇统一。
|
|
85
|
+
- **"风格不够统一"**:叙述语域/句式/人称距离无意跳变且影响阅读。**修法**:以作者确定的风格目标和叙述者声音为锚,检查跳变是否有意图;不要求全篇同一语速、句长或语域。
|
|
80
86
|
- **"不够流畅"**:读出声会卡——长定语/多重倒装、连续多句都以同一主语开头(她…她…她…)、
|
|
81
87
|
动作与反应被拆碎、段与段之间没有承接。**修法**:一句一动作,主谓宾贴紧;
|
|
82
88
|
相邻句换用不同句式与长度;段尾留半句承上启下;写完逐段读出声,卡顿处即病句,就地删改。
|
|
83
|
-
- **"细节刻画力度稍弱"
|
|
84
|
-
打压—反击缺生理与环境反应,爽点"打不满"。**修法**:每个爽点/反转标记为"特写镜头",
|
|
85
|
-
用五感 + 微动作 + 环境反馈把这几秒写"厚"(心跳、指节、周围人的呼吸与目光),
|
|
86
|
-
铺垫在前、放大在中、余波在后;场景篇幅按叙事重要性调整,不把"特写"固定套给每个爽点。
|
|
89
|
+
- **"细节刻画力度稍弱"**:关键情绪变化被一笔带过。**修法**:选择适合本稿的细节、动作、对话或留白呈现;特写与留白都可以,场景篇幅按叙事重要性调整,不把五感、生理反应或环境反馈列为必填项。
|
|
87
90
|
|
|
88
91
|
## 六、题材、书名、简介
|
|
89
92
|
- 题材 = 个人兴趣 × 市场需求的最大公约数;风格要匹配题材。
|
package/app/core/skills.py
CHANGED
|
@@ -88,11 +88,11 @@ BUILTIN_PACKS = [
|
|
|
88
88
|
{"id": "qimao-signing", "name": "七猫签约标准与写作规范",
|
|
89
89
|
"file": "qimao-signing.md",
|
|
90
90
|
"scopes": ["novel", "serial_novel"],
|
|
91
|
-
"note": "
|
|
91
|
+
"note": "七猫经验边界、拒稿证据诊断、开篇与故事单元自检;非过签预测"},
|
|
92
92
|
{"id": "fanqie-novel", "name": "番茄小说写作与流量守则",
|
|
93
93
|
"file": "fanqie-novel.md",
|
|
94
94
|
"scopes": ["novel", "serial_novel"],
|
|
95
|
-
"note": "
|
|
95
|
+
"note": "番茄经验边界、阅读数据假设、故事单元自检与后台规则核验;非算法预测"},
|
|
96
96
|
]
|
|
97
97
|
|
|
98
98
|
# ---------------------------------------------------------------- 用户自建包(3A)
|
|
@@ -484,7 +484,7 @@ def upsert_lesson(scope, title, content, source="", category=None, dim=None):
|
|
|
484
484
|
"created_at": _now(),
|
|
485
485
|
# 稳定 token(procedure=程序性做法 / lesson=规避性教训);
|
|
486
486
|
# 展示层 view() 翻译成「做法/教训」,持久层不用中文防改文案伤数据
|
|
487
|
-
"kind": ("procedure" if title.startswith("做法:") else "lesson")}
|
|
487
|
+
"kind": ("procedure" if title.startswith(("做法:", "候选做法:")) else "lesson")}
|
|
488
488
|
it.update({k: rev[k] for k in ("revision_id", "content_sha256")})
|
|
489
489
|
items.append(it)
|
|
490
490
|
_save(data)
|
|
@@ -726,17 +726,17 @@ def block_for(task, scope_override=None, *, stable_order=False, run_id=None):
|
|
|
726
726
|
# run 内稳定:won 只在 run 收尾回写,任务中途字节不变。
|
|
727
727
|
karma = ""
|
|
728
728
|
if int(x.get("won") or 0) >= 2:
|
|
729
|
-
karma = "
|
|
729
|
+
karma = "(同类维度达标关联 %d 次,非因果证明)" % int(x.get("won") or 0)
|
|
730
730
|
lines.append("- [%s] **%s**%s:%s" % (x["id"], x["title"], karma, x["content"]))
|
|
731
731
|
used.append(x["id"])
|
|
732
732
|
lesson_ids.append(x["id"])
|
|
733
|
-
lesson_part = ("###
|
|
733
|
+
lesson_part = ("### 【本项目经验记录(证据强度以条目标注为准;先结合当前正文判断,不要机械套用;方括号内为编号)】\n"
|
|
734
734
|
+ "\n".join(lines))
|
|
735
735
|
|
|
736
736
|
if not parts and not lesson_part:
|
|
737
737
|
return "", []
|
|
738
738
|
|
|
739
|
-
header = "## 经验库(写作/工程规范 +
|
|
739
|
+
header = "## 经验库(写作/工程规范 + 过往经验记录;按证据强度参考)\n\n"
|
|
740
740
|
budget = max(600, MAX_INJECT_CHARS - len(lesson_part))
|
|
741
741
|
body = "\n\n".join(parts)
|
|
742
742
|
if len(body) > budget:
|
|
@@ -814,16 +814,17 @@ def bump_hits(ids):
|
|
|
814
814
|
|
|
815
815
|
LEARN_PROMPT = """你是编排系统的复盘官。下面是刚结束的一次任务运行的评审结果与主要问题。
|
|
816
816
|
请把**可复用到下次同类任务**的经验提炼出来(不要复述本次剧情,不要写泛泛的套话)。
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
817
|
+
两类都要看:①待复核的问题观察(来自本次问题);②候选做法(mengram 程序性记忆
|
|
818
|
+
借鉴:任务一次通过且分数高时,可提炼「这次可能做对了什么」,title 以「候选做法:」
|
|
819
|
+
开头,如「候选做法:先列评分点再逐条应答」。单次运行不能称为已验证,也不能据此
|
|
820
|
+
推断因果;只有跨运行重复观察后,才可作为更强证据。经验仅适用于当前任务类型,避免升格成跨题材硬规则。
|
|
820
821
|
只输出一个 ```json 代码块,不要输出其他内容。JSON 结构:
|
|
821
|
-
{"lessons": [{"title": "≤14
|
|
822
|
+
{"lessons": [{"title": "≤14 字的归类(观察以「本次观察:」开头;做法以「候选做法:」开头)", "category": "问题分类", "content": "本次证据及适用边界(≤120 字,不写成普遍定律)", "violates": ["sk-xxxxxx"]}]}
|
|
822
823
|
violates:本次问题**戳穿了下面「本次已注入的历史教训」中的哪几条**(那几条已在提示词里却没防住),
|
|
823
824
|
只能填下面列出的编号原值,不确定或没有对应就填 []。
|
|
824
825
|
category 必须从以下固定枚举中选一个(贴合评审维度,不要自创类别):
|
|
825
826
|
__CATEGORIES__
|
|
826
|
-
最多 5
|
|
827
|
+
最多 5 条,只保留本次证据明确且影响较大的观察;单次成功只能提炼「候选做法」;没有值得沉淀的就返回空数组。不要用「反复」「总是」「必须」描述单次运行证据。
|
|
827
828
|
|
|
828
829
|
## 任务类型
|
|
829
830
|
__TYPE__
|
|
@@ -939,7 +940,7 @@ def _attribute(registered, by_id, issues, strengths):
|
|
|
939
940
|
|
|
940
941
|
|
|
941
942
|
def _fallback_lessons(task, run):
|
|
942
|
-
"""
|
|
943
|
+
"""无编排者时的确定性兜底:只记录本次观察,不把单次结果泛化成规律。"""
|
|
943
944
|
v = run.get("verdict") or {}
|
|
944
945
|
out = []
|
|
945
946
|
weak = {}
|
|
@@ -950,15 +951,15 @@ def _fallback_lessons(task, run):
|
|
|
950
951
|
for d, lst in sorted(weak.items(), key=lambda kv: -len(kv[1]))[:3]:
|
|
951
952
|
chs = "、".join("第 %s 章(%.1f)" % (c, s) for c, s in lst[:4])
|
|
952
953
|
out.append({"dim": d,
|
|
953
|
-
"title": "
|
|
954
|
-
"content": "
|
|
955
|
-
"
|
|
954
|
+
"title": "本次观察:%s偏弱" % d,
|
|
955
|
+
"content": "单次运行%s的评审中,「%s」在%s低于阈值;这是待复核信号,不代表题材通用规律。"
|
|
956
|
+
"后续先检查对应文本证据与任务目标,再决定是否调整。" % (task.get("type"), d, chs)})
|
|
956
957
|
for d, s in (v.get("global_scores") or {}).items():
|
|
957
958
|
if float(s) < float(v.get("threshold") or 7.0):
|
|
958
959
|
out.append({"dim": d,
|
|
959
|
-
"title": "
|
|
960
|
-
"content": "
|
|
961
|
-
"
|
|
960
|
+
"title": "本次观察:全书%s偏弱" % d,
|
|
961
|
+
"content": "单次运行的一致性评审中,全书「%s」得 %.1f 分;这是待复核信号。先查看评审证据,"
|
|
962
|
+
"确认问题确由全书结构造成后,再决定是否在后续大纲中规划整体曲线。" % (d, float(s))})
|
|
962
963
|
return out[:5]
|
|
963
964
|
|
|
964
965
|
|
|
@@ -1007,13 +1008,21 @@ def learn_from_run(run_id, use_orchestrator=True):
|
|
|
1007
1008
|
task = store.get_task(run.get("task_id")) if run.get("task_id") else None
|
|
1008
1009
|
if not task:
|
|
1009
1010
|
return 0
|
|
1011
|
+
# 只有正常完成的运行才可沉淀;failed/cancelled/timeout 即便残留 verdict,
|
|
1012
|
+
# 也可能是半成品或基础设施故障,不能当作内容质量证据。
|
|
1013
|
+
if (run.get("status") or "") != "done":
|
|
1014
|
+
return 0
|
|
1010
1015
|
# mock 运行不沉淀(没有真实评审信号)
|
|
1011
|
-
|
|
1016
|
+
steps = run.get("steps") or []
|
|
1017
|
+
if not steps or all((s.get("agent") or "").startswith("mock") for s in steps):
|
|
1012
1018
|
return 0
|
|
1013
1019
|
v = verdict
|
|
1014
1020
|
if not v:
|
|
1015
1021
|
return 0
|
|
1022
|
+
if outcome is None and not (v.get("chapter_scores") or v.get("global_scores")):
|
|
1023
|
+
return 0 # 仅有摘要/执行状态但无明确结论或评分,不作为质量信号
|
|
1016
1024
|
lessons = []
|
|
1025
|
+
model_returned_lessons = False
|
|
1017
1026
|
if use_orchestrator:
|
|
1018
1027
|
try:
|
|
1019
1028
|
from . import modelhub, runner
|
|
@@ -1038,15 +1047,17 @@ def learn_from_run(run_id, use_orchestrator=True):
|
|
|
1038
1047
|
data = runner.extract_json(res.get("text") or "")
|
|
1039
1048
|
raw = (data or {}).get("lessons") if isinstance(data, dict) else None
|
|
1040
1049
|
if isinstance(raw, list):
|
|
1050
|
+
model_returned_lessons = True
|
|
1041
1051
|
for x in raw[:5]:
|
|
1042
|
-
if isinstance(x, dict) and x.get("title") and x.get("content")
|
|
1052
|
+
if (isinstance(x, dict) and x.get("title") and x.get("content")
|
|
1053
|
+
and str(x["title"]).strip().startswith(("本次观察:", "候选做法:"))):
|
|
1043
1054
|
lessons.append({"title": str(x["title"]), "content": str(x["content"]),
|
|
1044
1055
|
"category": x.get("category")})
|
|
1045
1056
|
for lid in (x.get("violates") or [])[:MAX_LESSONS_INJECT]:
|
|
1046
1057
|
cited.add(str(lid).strip())
|
|
1047
1058
|
except Exception:
|
|
1048
1059
|
lessons = []
|
|
1049
|
-
if not lessons:
|
|
1060
|
+
if not lessons and not model_returned_lessons:
|
|
1050
1061
|
lessons = _fallback_lessons(task, run)
|
|
1051
1062
|
n = 0
|
|
1052
1063
|
for x in lessons:
|