@cloud411716/fancy-webnovel 3.0.3 → 3.0.4

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 (49) hide show
  1. package/package.json +1 -1
  2. package/plugins/fancy-analyze/analyze-definitions.md +35 -35
  3. package/plugins/fancy-analyze/templates.js +3 -3
  4. package/plugins/fancy-import/prompts/01-import-prompt.md +20 -20
  5. package/plugins/fancy-scan/prompts/01-analysis-prompt.md +7 -7
  6. package/plugins/fancy-scan/templates.js +2 -2
  7. package/plugins/fancy-story-builder/prompts/01-skeleton-prompt.md +40 -28
  8. package/plugins/fancy-story-builder/prompts/02-flesh-prompt.md +28 -10
  9. package/plugins/fancy-story-builder/prompts/03-rhythm-prompt.md +21 -9
  10. package/plugins/fancy-story-builder/prompts/04-writing-prompt.md +15 -15
  11. package/plugins/fancy-story-builder/prompts/05-deslop-prompt.md +18 -18
  12. package/plugins/fancy-story-builder/purpose-template.md +1 -1
  13. package/plugins/fancy-story-builder/references/glossary.md +8 -8
  14. package/plugins/fancy-story-builder/references/index.md +2 -2
  15. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/00-index.md +2 -2
  16. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/01-scene.md +2 -2
  17. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/02-chapter-workflow.md +2 -2
  18. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/03-opening-chapter.md +2 -2
  19. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/04-dialogue-mastery.md +2 -2
  20. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/05-genre-formulas.md +2 -2
  21. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/06-tone-ensemble.md +2 -2
  22. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/07-ledger-audit.md +2 -2
  23. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/08-diagnosis-revision.md +2 -2
  24. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/09-reading-power.md +7 -7
  25. package/plugins/fancy-story-builder/references//345/206/231/344/275/234/346/214/207/345/257/274/10-deslop.md +6 -6
  26. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/00-index.md +2 -2
  27. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/01-upgrade-rhythm.md +2 -2
  28. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/02-arc-rhythm.md +2 -2
  29. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/03-highpoint-hooks.md +2 -2
  30. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/04-satisfaction.md +2 -2
  31. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/05-foreshadow-density.md +5 -5
  32. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/06-chapter-outline.md +2 -2
  33. package/plugins/fancy-story-builder/references//350/212/202/345/245/217/346/214/207/345/257/274/07-audit.md +1 -1
  34. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/00-index.md +2 -2
  35. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/01-character.md +2 -2
  36. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/02-worldbuilding.md +5 -5
  37. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/03-relations.md +3 -3
  38. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/04-emotion-methods.md +3 -3
  39. package/plugins/fancy-story-builder/references//350/241/200/350/202/211/346/214/207/345/257/274/05-audit.md +1 -1
  40. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/00-index.md +2 -2
  41. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/01-positioning.md +1 -1
  42. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/02-packaging.md +3 -3
  43. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/03-entities.md +2 -2
  44. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/04-conflict.md +2 -2
  45. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/05-quota.md +2 -2
  46. package/plugins/fancy-story-builder/references//351/252/250/346/236/266/346/214/207/345/257/274/06-audit.md +1 -1
  47. package/plugins/fancy-story-builder/storydb/README.md +4 -4
  48. package/plugins/fancy-story-builder/storydb/prompts.js +1 -1
  49. package/plugins/fancy-topic/prompts/01-exploration-prompt.md +6 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloud411716/fancy-webnovel",
3
- "version": "3.0.3",
3
+ "version": "3.0.4",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "exports": {
@@ -1,18 +1,18 @@
1
1
  # 网文创作分析术语定义(权威)
2
2
 
3
- > 本文件是 `schema.md` 的配套定义文件,和 `schema.md` 一起使用。
4
- >
5
- > **执行任何章节分析前,必须先按本文件确认术语含义。**
6
- > 不要用通用文学理论、学术论文或其它题材的定义替代这里的定义。
7
- >
8
- > 定义中的类型和例子是**判定框架,不是题材清单**;都市/玄幻/悬疑/言情/无限流/历史/科幻/体育/职场等题材的等价现象都算,按源文实际内容判断,不要硬套词表。
9
- >
10
- > 判定顺序:
11
- > 1. 先判断“本章有没有这个现象”;
12
- > 2. 再判断它属于哪个术语;
13
- > 3. 最后才写分析。
14
- >
15
- > 如果拿不准,宁可写“无”,不要硬套术语。硬套会让后续骨架/血肉/节奏阶段学到错误模式。
3
+ 本文件是 `schema.md` 的配套定义文件,和 `schema.md` 一起使用。
4
+
5
+ **执行任何章节分析前,必须先按本文件确认术语含义。**
6
+ 不要用通用文学理论、学术论文或其它题材的定义替代这里的定义。
7
+
8
+ 定义中的类型和例子是**判定框架,不是题材清单**;都市/玄幻/悬疑/言情/无限流/历史/科幻/体育/职场等题材的等价现象都算,按源文实际内容判断,不要硬套词表。
9
+
10
+ 判定顺序:
11
+ 1. 先判断“本章有没有这个现象”;
12
+ 2. 再判断它属于哪个术语;
13
+ 3. 最后才写分析。
14
+
15
+ 如果拿不准,宁可写“无”,不要硬套术语。硬套会让后续骨架/血肉/节奏阶段学到错误模式。
16
16
 
17
17
  ---
18
18
 
@@ -34,7 +34,7 @@
34
34
  - 把作者旁白当成视角人物的认知。
35
35
 
36
36
  **网文例子**:
37
- > 方平不知道“武科”是什么,读者也不知道。信息只从方平的疑问和同学的对话里释放——这是限知视角,不是全知旁白。
37
+ 方平不知道“武科”是什么,读者也不知道。信息只从方平的疑问和同学的对话里释放——这是限知视角,不是全知旁白。
38
38
 
39
39
  ---
40
40
 
@@ -53,7 +53,7 @@
53
53
  - 把整本书的卷结构当成单章结构。
54
54
 
55
55
  **网文例子**:
56
- > 开头方平确认重生 → 同学提到武科 → 方平听不懂 → 张浩带来八品之战消息 → 方平发现“剧本不对”。这是“确认异常—扩大信息—认知崩塌”的单章结构。
56
+ 开头方平确认重生 → 同学提到武科 → 方平听不懂 → 张浩带来八品之战消息 → 方平发现“剧本不对”。这是“确认异常—扩大信息—认知崩塌”的单章结构。
57
57
 
58
58
  ---
59
59
 
@@ -72,7 +72,7 @@
72
72
  - 把“事件多”当成节奏快——事件多但全是说明,读者仍会觉得拖。
73
73
 
74
74
  **网文例子**:
75
- > 前半段课堂闲聊轻快,张浩一句“马宗师突破八品”后信息密度骤增,结尾用短句收束。这是“轻—重—紧”的节奏,不是单纯事件多。
75
+ 前半段课堂闲聊轻快,张浩一句“马宗师突破八品”后信息密度骤增,结尾用短句收束。这是“轻—重—紧”的节奏,不是单纯事件多。
76
76
 
77
77
  ---
78
78
 
@@ -93,7 +93,7 @@
93
93
  - 忽略“沉默”“答非所问”“称呼变化”也是对话。
94
94
 
95
95
  **网文例子**:
96
- > 陈凡说“方平,直呼宗师之名,这是最大的不尊重!”——这句话同时在纠正规则、暴露陈凡对武道礼制的熟悉、建立两人关系里的“懂行/不懂行”落差。
96
+ 陈凡说“方平,直呼宗师之名,这是最大的不尊重!”——这句话同时在纠正规则、暴露陈凡对武道礼制的熟悉、建立两人关系里的“懂行/不懂行”落差。
97
97
 
98
98
  ---
99
99
 
@@ -114,7 +114,7 @@
114
114
  - 环境描写与剧情完全无关也标“有”。
115
115
 
116
116
  **网文例子**:
117
- > “方平满脸懵”是心理/表情描写;“手里只剩十五元”是动作性细节,同时推进资源困境。两者都比“方平很穷”有效。
117
+ “方平满脸懵”是心理/表情描写;“手里只剩十五元”是动作性细节,同时推进资源困境。两者都比“方平很穷”有效。
118
118
 
119
119
  ---
120
120
 
@@ -134,7 +134,7 @@
134
134
  - 机制只出现一次、没有后果,也标“有”。
135
135
 
136
136
  **网文例子**:
137
- > 重生不是“知道未来”这么简单:方平的旧记忆与当前武道世界不匹配,迫使他重新收集信息。这是“信息差 + 认知错位”机制在推动行动。
137
+ 重生不是“知道未来”这么简单:方平的旧记忆与当前武道世界不匹配,迫使他重新收集信息。这是“信息差 + 认知错位”机制在推动行动。
138
138
 
139
139
  ---
140
140
 
@@ -154,7 +154,7 @@
154
154
  - 把“标题”当成开头钩子。
155
155
 
156
156
  **网文例子**:
157
- > “2008 年,4 月 5 日。”——日期本身不钩人,但紧接着“方平确认自己重生”制造了“他为什么回到过去、他要怎么活”的问题,这才是钩子。
157
+ “2008 年,4 月 5 日。”——日期本身不钩人,但紧接着“方平确认自己重生”制造了“他为什么回到过去、他要怎么活”的问题,这才是钩子。
158
158
 
159
159
  ---
160
160
 
@@ -174,7 +174,7 @@
174
174
  - 把“下一章标题”当成结尾收束。
175
175
 
176
176
  **网文例子**:
177
- > “这剧本,好像有些不对劲啊!”——用人物判断点明异常,不解释原因,把“哪里不对”留给下一章。
177
+ “这剧本,好像有些不对劲啊!”——用人物判断点明异常,不解释原因,把“哪里不对”留给下一章。
178
178
 
179
179
  ---
180
180
 
@@ -194,7 +194,7 @@
194
194
  - 全章都是短句也标“有”——那可能是单调,不是变化。
195
195
 
196
196
  **网文例子**:
197
- > 解释性长句写武科制度,紧接着“什么情况?”“啥情况?”两个短句写方平的震惊。长短交替制造认知落差。
197
+ 解释性长句写武科制度,紧接着“什么情况?”“啥情况?”两个短句写方平的震惊。长短交替制造认知落差。
198
198
 
199
199
  ---
200
200
 
@@ -215,7 +215,7 @@
215
215
  - 只看排版,不看段落之间的逻辑推进。
216
216
 
217
217
  **网文例子**:
218
- > 课堂群像用较长段落铺陈,张浩爆料后切成短段和独立句,最后用一句“剧本不对”单独收束。段落长度跟着信息压力变化。
218
+ 课堂群像用较长段落铺陈,张浩爆料后切成短段和独立句,最后用一句“剧本不对”单独收束。段落长度跟着信息压力变化。
219
219
 
220
220
  ---
221
221
 
@@ -236,7 +236,7 @@
236
236
  - 纯心理联想没有时空/焦点变化,不一定算场景转换。
237
237
 
238
238
  **网文例子**:
239
- > 方平在教室听同学聊武科,随后“去蓝天网吧查资料”——地点和行动目标都变了,这是场景转换。仅从方平的思考切到陈凡的台词,不算。
239
+ 方平在教室听同学聊武科,随后“去蓝天网吧查资料”——地点和行动目标都变了,这是场景转换。仅从方平的思考切到陈凡的台词,不算。
240
240
 
241
241
  ---
242
242
 
@@ -256,7 +256,7 @@
256
256
  - 用旁白总结情绪,没有场景支撑。
257
257
 
258
258
  **网文例子**:
259
- > 全班兴奋崇拜,方平却“满脸懵”“整个人都傻了”。用群体情绪反衬主角的孤立和不安,比直接写“方平很困惑”更有渲染力。
259
+ 全班兴奋崇拜,方平却“满脸懵”“整个人都傻了”。用群体情绪反衬主角的孤立和不安,比直接写“方平很困惑”更有渲染力。
260
260
 
261
261
  ---
262
262
 
@@ -276,7 +276,7 @@
276
276
  - 把所有信息都解释完,张力消失。
277
277
 
278
278
  **网文例子**:
279
- > 方平只剩十五元,报名截止只剩两天,陈凡最多借十元——目标、资源、时间三重压力同时存在,读者会想知道他怎么凑钱。
279
+ 方平只剩十五元,报名截止只剩两天,陈凡最多借十元——目标、资源、时间三重压力同时存在,读者会想知道他怎么凑钱。
280
280
 
281
281
  ---
282
282
 
@@ -296,7 +296,7 @@
296
296
  - 只写“过渡章”而不说明过渡了什么。
297
297
 
298
298
  **网文例子**:
299
- > 第 1 章的功能不是“介绍世界观”,而是“用认知错位制造悬念,并让主角确立考武科目标”。这是可被后续章节继承的功能。
299
+ 第 1 章的功能不是“介绍世界观”,而是“用认知错位制造悬念,并让主角确立考武科目标”。这是可被后续章节继承的功能。
300
300
 
301
301
  ---
302
302
 
@@ -319,7 +319,7 @@
319
319
  - 只写“他们是朋友”,不写朋友关系带来的义务和代价。
320
320
 
321
321
  **网文例子**:
322
- > 方平与陈凡不只是“同桌”:陈凡提供武道规则解释和现实提醒,方平提供跨世界视角;两人资源都很紧,但陈凡愿意借出仅有的十元。关系里有信息交换、情谊和资源落差。
322
+ 方平与陈凡不只是“同桌”:陈凡提供武道规则解释和现实提醒,方平提供跨世界视角;两人资源都很紧,但陈凡愿意借出仅有的十元。关系里有信息交换、情谊和资源落差。
323
323
 
324
324
  ---
325
325
 
@@ -341,7 +341,7 @@
341
341
  - 势力只在背景里被提到,没有行动和后果,也不算有效设计。
342
342
 
343
343
  **网文例子**:
344
- > 企鹅集团不是“一个大公司”四个字:它有跨省法人资格、武道强者、商业资源、与谷歌亚太区的竞争关系。这些结构决定了它如何压迫/拉拢主角。
344
+ 企鹅集团不是“一个大公司”四个字:它有跨省法人资格、武道强者、商业资源、与谷歌亚太区的竞争关系。这些结构决定了它如何压迫/拉拢主角。
345
345
 
346
346
  ---
347
347
 
@@ -363,7 +363,7 @@
363
363
  - 规则可以随意打破,没有代价,等于没有规则。
364
364
 
365
365
  **网文例子**:
366
- > “武科”不是一句“有武道考试”:它有报名费、年龄上限、政审、体检、文化课线、区域录取差异、动态录取标准。这些规则共同制造了主角的资源困境。
366
+ “武科”不是一句“有武道考试”:它有报名费、年龄上限、政审、体检、文化课线、区域录取差异、动态录取标准。这些规则共同制造了主角的资源困境。
367
367
 
368
368
  ---
369
369
 
@@ -385,7 +385,7 @@
385
385
  - 冲突解决后没有任何后果,等于没有真正发生。
386
386
 
387
387
  **网文例子**:
388
- > “方平要考武科”与“家里没钱、报名截止、陈凡只能借十元”构成资源冲突;它不是一场吵架,而是持续多章的目标—资源对立。
388
+ “方平要考武科”与“家里没钱、报名截止、陈凡只能借十元”构成资源冲突;它不是一场吵架,而是持续多章的目标—资源对立。
389
389
 
390
390
  ---
391
391
 
@@ -406,7 +406,7 @@
406
406
  - 主线目标中途换掉,却没有解释。
407
407
 
408
408
  **网文例子**:
409
- > 主线是“方平考武科、改变阶层处境”;支线包括“重生身份疑云”“特殊钞票能力”“与陈凡/家人的关系”。支线不是平行小说,它们不断给主线提供资源/阻力/信息。
409
+ 主线是“方平考武科、改变阶层处境”;支线包括“重生身份疑云”“特殊钞票能力”“与陈凡/家人的关系”。支线不是平行小说,它们不断给主线提供资源/阻力/信息。
410
410
 
411
411
  ---
412
412
 
@@ -427,7 +427,7 @@
427
427
  - 卷末高潮与下一卷开篇没有因果连接。
428
428
 
429
429
  **网文例子**:
430
- > 第一卷“阳城备考”以武科报名/体检为小高潮,卷末把舞台推向“南江武大/更大势力”;第二卷再升级资源和对手。这是分卷节奏,不是简单分章。
430
+ 第一卷“阳城备考”以武科报名/体检为小高潮,卷末把舞台推向“南江武大/更大势力”;第二卷再升级资源和对手。这是分卷节奏,不是简单分章。
431
431
 
432
432
  ---
433
433
 
@@ -455,7 +455,7 @@
455
455
  - 伏笔回收时没有改变读者理解,只是补一句说明。
456
456
 
457
457
  **网文例子**:
458
- > “方平直呼马宗师之名,陈凡严肃纠正”——这里既埋了“武道礼制”规则,也埋了“方平为什么不懂”的身份疑云。后续“重生/记忆错位”回收了这条线。
458
+ “方平直呼马宗师之名,陈凡严肃纠正”——这里既埋了“武道礼制”规则,也埋了“方平为什么不懂”的身份疑云。后续“重生/记忆错位”回收了这条线。
459
459
 
460
460
  ---
461
461
 
@@ -486,7 +486,7 @@
486
486
  - 角色每章都变,没有稳定内核,也不可信。
487
487
 
488
488
  **网文例子**:
489
- > 方平从“谨慎旁观、先求证”到“主动报名、承担风险”,中间经过资源困境、家庭责任、知识短板、信息不足的反复检验。这是弧光,不是单纯“变强”。
489
+ 方平从“谨慎旁观、先求证”到“主动报名、承担风险”,中间经过资源困境、家庭责任、知识短板、信息不足的反复检验。这是弧光,不是单纯“变强”。
490
490
 
491
491
  ---
492
492
 
@@ -551,7 +551,7 @@ ${projectRoot}/对标/${bookName}/
551
551
  | ... |
552
552
 
553
553
  ## 角色动机交织(最关键!)
554
- > 这一段是整个 characters.md 的核心:让 fancy-bible 能直接据此设计角色生态
554
+ 这一段是整个 characters.md 的核心:让 fancy-bible 能直接据此设计角色生态
555
555
 
556
556
  - 主角 ↔ 主反派:[冲突的动机点]
557
557
  - 主角 ↔ 配角 A:[...]
@@ -1093,8 +1093,8 @@ FANCY_SUMMARY_EOF
1093
1093
  **只处理下面明确列出的总结目录**,不要自行扩大范围。
1094
1094
 
1095
1095
  ${scaleNote}
1096
- > ⚠️ 本提示词**故意不列具体来源名** —— 一本长篇可能几千章、上千个实体页,列出来会把提示词撑爆。
1097
- > 哪些来源还没总结,由你按每个目录下方写的步骤**自己去目录里判断**。
1096
+ ⚠️ 本提示词**故意不列具体来源名** —— 一本长篇可能几千章、上千个实体页,列出来会把提示词撑爆。
1097
+ 哪些来源还没总结,由你按每个目录下方写的步骤**自己去目录里判断**。
1098
1098
 
1099
1099
  ## ⚠️ 语言强制要求
1100
1100
 
@@ -1,11 +1,11 @@
1
1
  # 01 导入执行须知
2
2
 
3
- > 本文件是导入阶段的**产物契约**:从旧稿反推出什么文件、写成什么格式、什么会被拦下。
4
- > 导入的因果方向和正向四阶段相反:
5
- > **旧稿已经在那里了 → 你把它读成结构化产物**,而不是照配额从零造。
6
- >
7
- > 导入阶段由插件驱动:它扫目录、切章、算配额、跑校验器、把错误发回来。
8
- > **你不需要自己决定写哪些文件,也不需要自己跑校验脚本。**
3
+ 本文件是导入阶段的**产物契约**:从旧稿反推出什么文件、写成什么格式、什么会被拦下。
4
+ 导入的因果方向和正向四阶段相反:
5
+ **旧稿已经在那里了 → 你把它读成结构化产物**,而不是照配额从零造。
6
+
7
+ 导入阶段由插件驱动:它扫目录、切章、算配额、跑校验器、把错误发回来。
8
+ **你不需要自己决定写哪些文件,也不需要自己跑校验脚本。**
9
9
 
10
10
  ---
11
11
 
@@ -19,20 +19,20 @@
19
19
 
20
20
  ## 一、核心铁律
21
21
 
22
- > 1. **只反推,不创作**。旧稿里没有的人物、势力、地点、伏笔**不许新增**。
23
- > 你的任务是"把旧稿里已经有的东西整理成结构化数据",
24
- > 不是"补全一部没写完的小说"。
25
- > 旧稿确实没写到的部分**留空**,由插件在报告里列成待补清单。
26
- >
27
- > 2. **不改旧稿正文**。正文由插件直接落盘(保留原标题),
28
- > 你只负责反推结构化产物。写了正文也算违反契约。
29
- >
30
- > 3. **不修改 `模板/` 和 `references/` 下的任何文件**。这两个目录是只读输入。
31
- >
32
- > 4. **只写本轮指定的文件**。本轮要写哪几个文件,驱动会在派活时列清楚。
33
- > 不要顺手多写,也不要改别的阶段的文件。
34
- >
35
- > 5. **引用的实体只能用 id 引用**(如 `C001`),不要在关系里写名字。
22
+ 1. **只反推,不创作**。旧稿里没有的人物、势力、地点、伏笔**不许新增**。
23
+ 你的任务是"把旧稿里已经有的东西整理成结构化数据",
24
+ 不是"补全一部没写完的小说"。
25
+ 旧稿确实没写到的部分**留空**,由插件在报告里列成待补清单。
26
+
27
+ 2. **不改旧稿正文**。正文由插件直接落盘(保留原标题),
28
+ 你只负责反推结构化产物。写了正文也算违反契约。
29
+
30
+ 3. **不修改 `模板/` 和 `references/` 下的任何文件**。这两个目录是只读输入。
31
+
32
+ 4. **只写本轮指定的文件**。本轮要写哪几个文件,驱动会在派活时列清楚。
33
+ 不要顺手多写,也不要改别的阶段的文件。
34
+
35
+ 5. **引用的实体只能用 id 引用**(如 `C001`),不要在关系里写名字。
36
36
 
37
37
  ---
38
38
 
@@ -121,7 +121,7 @@ ${preflight_command}
121
121
 
122
122
  ### 3.2 读取与取样
123
123
 
124
- > **阶段边界**:3.1 的 `test` / `grep` / `ls` 禁令只约束预检阶段。进入本节后可用只读脚本(grep / awk / python)读取 `data_files` 聚合;但仍不得读取白名单外路径,不得修改或删除任何文件。
124
+ **阶段边界**:3.1 的 `test` / `grep` / `ls` 禁令只约束预检阶段。进入本节后可用只读脚本(grep / awk / python)读取 `data_files` 聚合;但仍不得读取白名单外路径,不得修改或删除任何文件。
125
125
 
126
126
  - 先读每个文件的开头和所有标题/表头,确认字段(书名、作者、排名、题材、${heat_metric_label}、状态、简介等);**不要假设固定格式**
127
127
  - 把每个文件头部的 `抓取时间` **原样**写进"一、数据与方法"(每个数据文件都要写)。
@@ -144,10 +144,10 @@ ${tag_rule_block} - **开篇钩子**:文件里**没有第一章内容**,不
144
144
 
145
145
  ### 3.3 分析口径
146
146
 
147
- > **口径红线:需求规模 / 份额 / 集中度只能使用 ${heat_metric_label};其它指标只做交叉验证,不进入公式。**
147
+ **口径红线:需求规模 / 份额 / 集中度只能使用 ${heat_metric_label};其它指标只做交叉验证,不进入公式。**
148
148
 
149
149
  - **本报告是单日快照**:数据只覆盖这一天${snapshot_scope}。
150
- **结论只能描述当日结构,不能描述趋势** —— 没有历史数据时,不得写"正在上升""持续走高""降温了";确需给出趋势判断的,必须在"一、数据与方法"里写明所依据的对比日期,本次无对比数据则不写趋势。
150
+ **结论只能描述当日结构,不能描述趋势** —— 没有历史数据时,不得写“正在上升、持续走高、降温了”;确需给出趋势判断的,必须在"一、数据与方法"里写明所依据的对比日期,本次无对比数据则不写趋势。
151
151
  ${list_rule_block}- "爆款"不只看排名:结合**${heat_metric_label}规模**、题材内排名、题材集中度
152
152
  ${genre_rule_block}- **每个题材/结构结论至少 2 本书佐证**,写成"《书名》(题材 ${group_scope}第 X 名,${heat_metric_label} ${heat_sample_value})"
153
153
  - **用户画像可以基于题材簇推断**(不必硬凑到两本书),但必须**标注"推断"**,并写明依据的是哪几类书
@@ -190,9 +190,9 @@ ${section_titles_block}
190
190
  ${direction_template_block}
191
191
  ```
192
192
 
193
- > 11 个标签**全部加粗**,冒号用全角 `:`;不要改写、合并或省略。
194
- > **每个标签后面至少 ${min_tag_chars} 个汉字** —— 写个标签名充数不算数。
195
- > **固定格式是为了让写入后的校验能确定性执行**(见 5.2 的 `append-block.js`)。
193
+ 11 个标签**全部加粗**,冒号用全角 `:`;不要改写、合并或省略。
194
+ **每个标签后面至少 ${min_tag_chars} 个汉字** —— 写个标签名充数不算数。
195
+ **固定格式是为了让写入后的校验能确定性执行**(见 5.2 的 `append-block.js`)。
196
196
  - **方向之间不能是"同一题材换皮"**:${min_directions}-${max_directions} 个方向中,任意两个至少在"题材 / 金手指 / 情绪价值"三项里的**两项**不同
197
197
  - **优先级排序按这四项打分**(每项写清依据):
198
198
  - **数据支撑度**(有多少${heat_metric_label}数据支持)—— 权重 40%
@@ -245,7 +245,7 @@ ${genre_self_check}
245
245
 
246
246
  ## 五、追加写入(校验在脚本里,跑不掉)
247
247
 
248
- > **红线:目标文件只能通过 5.2 的 `append-block.js` 写入。禁止 `cat >>`、write / edit、`touch` 或任何绕过脚本的写法。**
248
+ **红线:目标文件只能通过 5.2 的 `append-block.js` 写入。禁止 `cat >>`、write / edit、`touch` 或任何绕过脚本的写法。**
249
249
 
250
250
  把本次分析报告**追加**到 `${topic_file}` 的**末尾**。
251
251
 
@@ -598,7 +598,7 @@ export const scan = {
598
598
  `- **辅助指标(${aux.map(a => a.label).join(' / ')})只作交叉验证,不进上面三项公式** ——`,
599
599
  ` 它们的口径和量级都与${h.label}不同(见 2.3),代入占比或相加都得出没有意义的数。用法:`,
600
600
  ...aux.map(a => ` - ${a.usage}`),
601
- ` 以上都是**同一天、同一批书的横向比较** —— 不能写成"正在上升""持续走高"。`,
601
+ ` 以上都是**同一天、同一批书的横向比较** —— 不能写成“正在上升、持续走高”。`,
602
602
  ]
603
603
  : [];
604
604
 
@@ -613,7 +613,7 @@ export const scan = {
613
613
  ? [
614
614
  `- **数据文件里有 \`**排名变动:**\` 行时**,它说明"名次较上次有变动"(上升/下降 N 名/持平)——`,
615
615
  ` 这可以写进结论,但**只能写这一次的变动**:"名次较上次上升 N 位";`,
616
- ` **不能**由它推断连续走势("连续上升""一路走高")—— 它是单个变化值,不是历史序列。`,
616
+ ` **不能**由它推断连续走势(“连续上升、一路走高”)—— 它是单个变化值,不是历史序列。`,
617
617
  ]
618
618
  : [];
619
619
 
@@ -1,18 +1,19 @@
1
1
  # 01 骨架阶段产物契约
2
2
 
3
- > 本文件是骨架阶段的**产物契约**:每个文件长什么样、哪些规则不能破。
4
- >
5
- > 怎么派活、怎么校验、错了怎么改、下一批做什么,全部由插件负责:
6
- > 插件按批次把活派给你,校验脚本判定通过与否,
7
- > 错误清单由插件整理后回喂给你。**你只负责按指令生成文件。**
8
- >
9
- > 本阶段是第一层,无上游依赖。
3
+ 本文件是骨架阶段的**产物契约**:每个文件长什么样、哪些规则不能破。
4
+
5
+ 怎么派活、怎么校验、错了怎么改、下一批做什么,全部由插件负责:
6
+ 插件按批次把活派给你,校验脚本判定通过与否,
7
+ 错误清单由插件整理后回喂给你。**你只负责按指令生成文件。**
8
+
9
+ 本阶段是第一层,无上游依赖。
10
10
 
11
11
  @meta-only
12
12
 
13
13
  ---
14
14
 
15
15
  <!-- contract:overview -->
16
+
16
17
  ## 一、本阶段目标
17
18
 
18
19
  产出 4 个 JSON 文件到 `设定/raw/sources/骨架/`:
@@ -39,10 +40,11 @@
39
40
  ---
40
41
 
41
42
  <!-- contract:input -->
43
+
42
44
  ## 二、任务输入
43
45
 
44
- > 本节由插件注入,只读,不得修改。
45
- > 骨架阶段没有上游,这输入就是选题时的原始输入。
46
+ 本节由插件注入,只读,不得修改。
47
+ 骨架阶段没有上游,这输入就是选题时的原始输入。
46
48
 
47
49
  ${input_snapshot_block}
48
50
 
@@ -56,6 +58,7 @@ ${input_snapshot_block}
56
58
  ---
57
59
 
58
60
  <!-- contract:output-list -->
61
+
59
62
  ## 三、本阶段产出清单
60
63
 
61
64
  | # | 文件 | 路径 | 前置依赖 |
@@ -68,27 +71,29 @@ ${input_snapshot_block}
68
71
  ---
69
72
 
70
73
  <!-- contract:rules -->
74
+
71
75
  ## 四、核心铁律(违反任意一条都会校验失败)
72
76
 
73
- > 1. **不得出现任何章节号**(`chapter` / `ch` / `start` / `end` / `appearance_chapters` / `chapter_range` / `buried_chapter` / `recovered_chapter` / `key_nodes` 等,完整清单见 glossary 第六节)。骨架脚本会拦截 `SKELETON_CHAPTER_FORBIDDEN`。
74
- >
75
- > 2. **常规实体的枚举必须遵守 glossary**。例如 `character_type` 只允许"主角/贯穿级核心配角/卷级重要配角/贯穿级核心反派/卷级反派",不能自创。题材特有存在不要硬塞进 `characters`,改写进可选的 `other_entities`(`kind` 是自由文本,如 灵魂/神魂/器灵/妖灵/概念体)。ENUM 校验会拦截常规枚举。
76
- >
77
- > 3. **引用关系只允许 id,不允许编名字**。关系.json 的 `from`/`to`/`character`/`faction`/`item`/`location`/`ending`/`main_line`/`branch` 必须是 `C001`/`X001`/`F001` 这种 id,不是名字。`SKELETON_REF_MISSING` 会拦截。
78
- >
79
- > 4. **不得自创字段**。每个文件的字段必须严格在 `模板/骨架/<文件名>模板.json` 的 `structure.properties` 中定义。`EXTRA_FIELD` 会拦截。
80
- >
81
- > 5. **公式推导(`derivations`)必须 30 条齐全**,每条 `{formula, range_low, range_high, note}`,且 `formula` 逐字与 `formulas-skeleton.json` 一致。`DERIVATION_MISSING` / `DERIVATION_RANGE_MISMATCH` 会拦截。
82
- >
83
- > 6. **关系类型只能取第 8.2 节各自那套词表**。`character_relations[].relation_kind` 取 13 值(血缘/师徒/雇佣/服从/提携/合作/利益交换/利用/对立/敌对/竞争/中立/其他);用 `其他` 时必须填 `relation_label` 写清具体关系(如 附身/寄生/契约/共生)。非人物实体的关系写 `other_relations`;`faction_membership[].member_relation` 取 8 值(利益交换/合作/对立/利用/师徒/雇佣/血亲/无);`faction_relations[].relation_type` 取 4 值(合作/对立/利用/中立);`main_line_branch_relation[].relation_kind` 取 6 值(促成/阻碍/并行/揭示/收束/依存)。不要写"盟友""对手""上下级""血亲"——它们不在对应词表里,ENUM 会拦截。
84
- >
85
- > 7. **实体名要是真名字,内容要是真内容**。名字写"陆子仲"而不是"主角1";`input_snapshot` 的 `positioning` / `core_conflict` 要写清一个具体处境,而不是"核心概述。"。`NAME_PLACEHOLDER` / `TEXT_TOO_SHORT` / `TEXT_PLACEHOLDER` 会拦截。
86
- >
87
- > 8. **实体条数必须与框架的 quota 完全一致**。框架里声明 `character_counts.protagonist = 2`,实体清单里就恰好要有 2 个 `type=主角` 的角色;多一个少一个都会报 `QUOTA_MISMATCH`。
77
+ 1. **不得出现任何章节号**(`chapter` / `ch` / `start` / `end` / `appearance_chapters` / `chapter_range` / `buried_chapter` / `recovered_chapter` / `key_nodes` 等,完整清单见 glossary 第六节)。骨架脚本会拦截 `SKELETON_CHAPTER_FORBIDDEN`。
78
+
79
+ 2. **常规实体的枚举必须遵守 glossary**。例如 `character_type` 只允许"主角/贯穿级核心配角/卷级重要配角/贯穿级核心反派/卷级反派",不能自创。题材特有存在不要硬塞进 `characters`,改写进可选的 `other_entities`(`kind` 是自由文本,如 灵魂/神魂/器灵/妖灵/概念体)。ENUM 校验会拦截常规枚举。
80
+
81
+ 3. **引用关系只允许 id,不允许编名字**。关系.json 的 `from`/`to`/`character`/`faction`/`item`/`location`/`ending`/`main_line`/`branch` 必须是 `C001`/`X001`/`F001` 这种 id,不是名字。`SKELETON_REF_MISSING` 会拦截。
82
+
83
+ 4. **不得自创字段**。每个文件的字段必须严格在 `模板/骨架/<文件名>模板.json` 的 `structure.properties` 中定义。`EXTRA_FIELD` 会拦截。
84
+
85
+ 5. **公式推导(`derivations`)必须 30 条齐全**,每条 `{formula, range_low, range_high, note}`,且 `formula` 逐字与 `formulas-skeleton.json` 一致。`DERIVATION_MISSING` / `DERIVATION_RANGE_MISMATCH` 会拦截。
86
+
87
+ 6. **关系类型只能取第 8.2 节各自那套词表**。`character_relations[].relation_kind` 取 13 值(血缘/师徒/雇佣/服从/提携/合作/利益交换/利用/对立/敌对/竞争/中立/其他);用 `其他` 时必须填 `relation_label` 写清具体关系(如 附身/寄生/契约/共生)。非人物实体的关系写 `other_relations`;`faction_membership[].member_relation` 取 8 值(利益交换/合作/对立/利用/师徒/雇佣/血亲/无);`faction_relations[].relation_type` 取 4 值(合作/对立/利用/中立);`main_line_branch_relation[].relation_kind` 取 6 值(促成/阻碍/并行/揭示/收束/依存)。不要写“盟友、对手、上下级、血亲”——它们不在对应词表里,ENUM 会拦截。
88
+
89
+ 7. **实体名要是真名字,内容要是真内容**。名字写"陆子仲"而不是"主角1";`input_snapshot` 的 `positioning` / `core_conflict` 要写清一个具体处境,而不是"核心概述。"。`NAME_PLACEHOLDER` / `TEXT_TOO_SHORT` / `TEXT_PLACEHOLDER` 会拦截。
90
+
91
+ 8. **实体条数必须与框架的 quota 完全一致**。框架里声明 `character_counts.protagonist = 2`,实体清单里就恰好要有 2 个 `type=主角` 的角色;多一个少一个都会报 `QUOTA_MISMATCH`。
88
92
 
89
93
  ---
90
94
 
91
95
  <!-- contract:refs -->
96
+
92
97
  ## 五、参考文件
93
98
 
94
99
  ### 必读(每次任务开始时读一次,之后不再重读)
@@ -118,6 +123,7 @@ ${benchmark_refs_block}
118
123
  ---
119
124
 
120
125
  <!-- contract:file:框架 -->
126
+
121
127
  ## 六、框架.json 的字段契约
122
128
 
123
129
  **顶层**:纯对象(没有顶层数组) **模板**:`模板/骨架/框架模板.json`
@@ -277,6 +283,7 @@ Level 3(依赖实体数):
277
283
  ---
278
284
 
279
285
  <!-- contract:file:实体 -->
286
+
280
287
  ## 七、实体.json 的字段契约
281
288
 
282
289
  **顶层**:12 个常规数组 + 可选的 `other_entities` **模板**:`模板/骨架/实体模板.json`
@@ -341,6 +348,7 @@ Level 3(依赖实体数):
341
348
  ---
342
349
 
343
350
  <!-- contract:file:关系 -->
351
+
344
352
  ## 八、关系.json 的字段契约
345
353
 
346
354
  **顶层**:9 个常规数组 + 可选的 `other_relations` **模板**:`模板/骨架/关系模板.json`
@@ -390,10 +398,10 @@ Level 3(依赖实体数):
390
398
 
391
399
  **`faction_relations[].relation_type`** —— 只从这 4 个值里选:`合作` / `对立` / `利用` / `中立`。
392
400
 
393
- > ⚠️ **这是四套互不相同的词表,别串用**:
394
- > `relation_kind`(角色关系,13 值,含扩展出口 `其他`)/ `member_relation`(成员关系,8 值)/ `relation_type`(势力关系,4 值)/ `main_line_branch_relation[].relation_kind`(支线挂主线,6 值)。
395
- > 拿 `relation_kind` 的值去填 `member_relation` 或 `relation_type` 一律报 ENUM
396
- > (tt5 实测 2026-10-27:9 条 ENUM 错误,2 个批次重写,理由全是"从角色关系词表里取值")。
401
+ ⚠️ **这是四套互不相同的词表,别串用**:
402
+ `relation_kind`(角色关系,13 值,含扩展出口 `其他`)/ `member_relation`(成员关系,8 值)/ `relation_type`(势力关系,4 值)/ `main_line_branch_relation[].relation_kind`(支线挂主线,6 值)。
403
+ 拿 `relation_kind` 的值去填 `member_relation` 或 `relation_type` 一律报 ENUM
404
+ (tt5 实测 2026-10-27:9 条 ENUM 错误,2 个批次重写,理由全是"从角色关系词表里取值")。
397
405
 
398
406
  ### 8.3 关键约束
399
407
 
@@ -411,6 +419,7 @@ Level 3(依赖实体数):
411
419
  ---
412
420
 
413
421
  <!-- contract:file:层级 -->
422
+
414
423
  ## 九、层级.json 的字段契约
415
424
 
416
425
  **顶层**:4 个数组 **模板**:`模板/骨架/层级模板.json`
@@ -436,6 +445,7 @@ Level 3(依赖实体数):
436
445
  ---
437
446
 
438
447
  <!-- contract:consistency -->
448
+
439
449
  ## 十、本阶段全量校验清单
440
450
 
441
451
  全量模式(插件在四个文件都产出后跑一次)检查以下项目:
@@ -477,6 +487,7 @@ Level 3(依赖实体数):
477
487
  ---
478
488
 
479
489
  <!-- contract:errors -->
490
+
480
491
  ## 十一、常见错误代码速查(详见 glossary 与脚本)
481
492
 
482
493
  | code | 含义 | 修复方向 |
@@ -534,6 +545,7 @@ Level 3(依赖实体数):
534
545
  ---
535
546
 
536
547
  <!-- contract:forbidden -->
548
+
537
549
  ## 十二、本阶段禁令(13 条)
538
550
 
539
551
  1. **不得出现任何章节号**(`chapter` / `ch` / `start` / `end` / `appearance_chapters` / `chapter_range` / `buried_chapter` / `recovered_chapter` / `key_nodes` 等,完整清单见 glossary 第六节)。骨架脚本会报 `SKELETON_CHAPTER_FORBIDDEN`。