@topmindspace/tms-skills 0.1.0 → 0.1.2

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 (102) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +9 -3
  3. package/bin/tms-skills.js +200 -160
  4. package/package.json +12 -9
  5. package/top-ppt-html/README.md +162 -254
  6. package/top-ppt-html/SKILL.md +126 -111
  7. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +3926 -3926
  8. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.model.json +167 -167
  9. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +4325 -4325
  10. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.model.json +320 -320
  11. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +5527 -5527
  12. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.model.json +913 -913
  13. package/top-ppt-html/assets/pptx-export.js +1944 -1944
  14. package/top-ppt-html/assets/style-gallery.html +589 -589
  15. package/top-ppt-html/assets/templates/architecture.html +3728 -3728
  16. package/top-ppt-html/assets/templates/engine.css +840 -840
  17. package/top-ppt-html/assets/templates/presentation.html +3738 -3738
  18. package/top-ppt-html/assets/templates/research.html +4017 -4017
  19. package/top-ppt-html/assets/templates/ui.js +520 -520
  20. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  21. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  22. package/top-ppt-html/assets/theme-overview.png +0 -0
  23. package/top-ppt-html/evals/prompts.csv +15 -15
  24. package/top-ppt-html/evals/rubric.schema.json +25 -25
  25. package/top-ppt-html/evals/run_evals.py +220 -220
  26. package/top-ppt-html/evals/trace.example.json +16 -16
  27. package/top-ppt-html/package-lock.json +186 -0
  28. package/top-ppt-html/package.json +11 -11
  29. package/top-ppt-html/references/charts-basic.md +624 -624
  30. package/top-ppt-html/references/charts-discipline.md +110 -108
  31. package/top-ppt-html/references/charts-extended.md +482 -482
  32. package/top-ppt-html/references/charts.md +37 -28
  33. package/top-ppt-html/references/components-atoms.md +624 -624
  34. package/top-ppt-html/references/components.md +30 -30
  35. package/top-ppt-html/references/content-rules.md +510 -490
  36. package/top-ppt-html/references/default-surface.md +61 -0
  37. package/top-ppt-html/references/design-system.md +478 -478
  38. package/top-ppt-html/references/failure-modes.md +227 -214
  39. package/top-ppt-html/references/high-fidelity.md +127 -127
  40. package/top-ppt-html/references/icons.md +176 -397
  41. package/top-ppt-html/references/infographics-stats.md +308 -308
  42. package/top-ppt-html/references/infographics-structure.md +226 -226
  43. package/top-ppt-html/references/infographics.md +43 -43
  44. package/top-ppt-html/references/layout-grammar.md +325 -315
  45. package/top-ppt-html/references/layouts-architecture.md +108 -108
  46. package/top-ppt-html/references/layouts-combo.md +600 -600
  47. package/top-ppt-html/references/layouts-research.md +160 -160
  48. package/top-ppt-html/references/modes.md +259 -254
  49. package/top-ppt-html/references/outline-design.md +275 -275
  50. package/top-ppt-html/references/playbook.md +284 -266
  51. package/top-ppt-html/references/pptx-export.md +227 -209
  52. package/top-ppt-html/references/presentation-craft.md +69 -0
  53. package/top-ppt-html/references/styles.md +370 -370
  54. package/top-ppt-html/references/tech-design.md +138 -138
  55. package/top-ppt-html/scripts/audit_css.py +109 -109
  56. package/top-ppt-html/scripts/audit_docs.py +176 -176
  57. package/top-ppt-html/scripts/audit_skill.py +231 -220
  58. package/top-ppt-html/scripts/audit_styles.py +351 -351
  59. package/top-ppt-html/scripts/build_examples.py +55 -2276
  60. package/top-ppt-html/scripts/build_pptx.js +2386 -2380
  61. package/top-ppt-html/scripts/capture_theme_overview.js +79 -78
  62. package/top-ppt-html/scripts/checks_html.py +166 -127
  63. package/top-ppt-html/scripts/cross_verify.py +298 -294
  64. package/top-ppt-html/scripts/env_probe.py +158 -158
  65. package/top-ppt-html/scripts/extract_model.py +210 -210
  66. package/top-ppt-html/scripts/extract_snippet.py +374 -374
  67. package/top-ppt-html/scripts/gen_channel_a.js +214 -214
  68. package/top-ppt-html/scripts/layout-constants.json +111 -18
  69. package/top-ppt-html/scripts/lib_layout_regions.js +410 -412
  70. package/top-ppt-html/scripts/measure_height.py +178 -178
  71. package/top-ppt-html/scripts/negative_tests.py +433 -307
  72. package/top-ppt-html/scripts/package_skill.py +294 -291
  73. package/top-ppt-html/scripts/prepare_images.py +341 -341
  74. package/top-ppt-html/scripts/probe_image_export.py +187 -188
  75. package/top-ppt-html/scripts/quality_gate.py +309 -301
  76. package/top-ppt-html/scripts/recommend_layout.py +384 -0
  77. package/top-ppt-html/scripts/regression.py +308 -308
  78. package/top-ppt-html/scripts/render_compare.py +275 -275
  79. package/top-ppt-html/scripts/render_from_model.py +698 -698
  80. package/top-ppt-html/scripts/scaffold_report.py +1054 -1054
  81. package/top-ppt-html/scripts/section-file-map.json +104 -104
  82. package/top-ppt-html/scripts/smoke_pptx.sh +30 -0
  83. package/top-ppt-html/scripts/sync_runtime.py +659 -662
  84. package/top-ppt-html/scripts/validate_pptx.py +1579 -1510
  85. package/top-ppt-html/scripts/validate_report.py +1755 -1456
  86. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.html +0 -3926
  87. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +0 -168
  88. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +0 -4325
  89. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +0 -321
  90. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +0 -4325
  91. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +0 -321
  92. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +0 -5527
  93. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +0 -914
  94. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +0 -5527
  95. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +0 -914
  96. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +0 -5527
  97. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +0 -914
  98. package/top-ppt-html/assets/theme-overview-presentation.png +0 -0
  99. package/top-ppt-html/references/design-system-engine.md +0 -235
  100. package/top-ppt-html/references/industry-benchmark.md +0 -105
  101. package/top-ppt-html/references/reform-plan.md +0 -252
  102. package/top-ppt-html/scripts/layout_slots.json +0 -830
@@ -1,266 +1,284 @@
1
- # 作战手册 · Playbook(唯一常读入口 · L1)
2
-
3
- > **每次生成都读这一份,通常就够了。**
4
- > 本文件是**决策层**:定模式、选页型、选版式组合、选图表、定配色、跑校验。
5
- > **代码、几何、穷举表不在本文件**——需要时按 `SKILL.md` 的 L2 路由读深度文件,**读完即停,不预读**。
6
-
7
- ---
8
-
9
- ## 〇、排版总序(先骨架后内容 · 整齐优雅)
10
-
11
- ```
12
- 角色 → 预设骨架 P1–P12(layout-grammar.md)→ 元素落位 → 间距 token → 对齐/填充率 → LAYOUT_* 门禁
13
- ```
14
-
15
- **禁止**临场发明栅格、写死间距、同页两个视觉重心。详规 `references/layout-grammar.md`。
16
-
17
- ---
18
-
19
- ## 一、三模式契约(生成时锁定,页面无切换)
20
-
21
- | | A 演示汇报 | B 研究报告 | C 信息架构图 |
22
- |--|--|--|--|
23
- | `data-mode` | `presentation` | `research` | `architecture` |
24
- | 阅读契约 | 3 秒一屏,听讲 | 30 秒一页,深读 | 一眼看全结构 |
25
- | 版心 / 正文 | 1400px / 17–18px | 1240px / 14–15px | 1600px / 图注级 |
26
- | 单页文字 | ≤1500 | ≤3200 | ≤600 |
27
- | 并列单元 | ≤8 | ≤12 | 节点 ≤24 |
28
- | 表格行 | ≤8 | ≤16 | 表转图 |
29
- | 每页图表 | **按复杂度定面积**(V1–V4;简单图禁全幅) | 1–2 个(取尺寸下限) | 1 张全幅(宽 ≥85% 版心) |
30
- | 论证结构 | 主张 → 证据 → 休止 | 发现 → 证据 → 含义 + so-what | 标题 → 图 → 图注 |
31
- | Exhibit 编号 | 不用 | **全篇连续 + 来源行** | 不用 |
32
- | 篇幅 | 8–15 页 | 12–25 页 | 1–3 张图(6–8 页) |
33
- | PPTX 正文 | 13pt | 10.5pt | 13pt |
34
-
35
- **密度选错的症状**:A 出现双栏小字(投影看不清)→ 拆页;B 出现大面积留白(坐读信息量不足)→ 合页或补证据;C 出现成段正文 → 转图注。
36
- **节奏**:禁止连续 3 页同密度档;同一版式不连用超过 2 页;research 每 3–4 页插一个低密度页(指标带/金句/大数)。
37
-
38
- ---
39
-
40
- ## 二、两条生成路径(先判定,再动手)
41
-
42
- **轻量路径**(默认)——同时满足:≤12 页 · 材料单一完整 · 无未敲定关键判断 · 用户没要求看框架。
43
- ```
44
- Gate 0 参考图 → 六项问询(1 轮)→ 1 张规划卡 → scaffold_report.py → 填内容+模型 → 校验 → 交付
45
- ```
46
-
47
- **完整路径**(任一命中)——研究 ≥20 页 / 演示 ≥12 页 / 材料量大且杂 / 含未敲定关键判断 / 用户要看框架。
48
- ```
49
- Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴 → SCR+主张树 → 逐页规划卡 → 大纲确认(1 轮)→ 生成 → 校验 → 交付
50
- ```
51
-
52
- **预算(硬)**:交互轮次 ≤3;必读文件 = `SKILL.md` + 本文件(≤2 份);L2 深度文件按需且单份读完即停。
53
-
54
- ---
55
-
56
- ## 三、页型选型(意图 → 页型 → 关键约束)
57
-
58
- > 穷举表(内容形态 → 版式 → PPTX 页型)见 `components.md` §46;密度档适配见 `components.md` §46b;组合见下节 §四。
59
-
60
- | 我要表达 | 首选页型 | 次选 | 关键约束 |
61
- |---------|---------|------|---------|
62
- | 要点式并列主张(默认页) | `points` | `cards` | 每卡 ≤4 条(research ≤5) |
63
- | 现状基线 / 指标快照 | `metrics` | `kpi` | 4–6 个;单数压场用 `kpi` |
64
- | 单个核心数字压场 | `kpi` | `metrics` | hero 一数一结论 |
65
- | 多维对标清单 | `table` | `halftable` | ≤8 行(research ≤16) |
66
- | 时间趋势 / 爬坡 | `bar`(chart.type=line/area/dualline) | `exhibit` | 时间点 >8 改折线 |
67
- | 构成占比 | `donut`(pie/multidonut/waffle) | `halftable` / **V3 KPI** | 扇区 ≤5,最小扇区 ≥8%;**极偏(min<5% 或 max/min>20)禁 donut→V3** |
68
- | 排名 / 大小对比 | `bar`(chart.type=hbar/lollipop/pareto) | `table` | 类别 >8 取 Top 7 + 附录 |
69
- | 现状 vs 目标 | `bullet` / `comparison` | `bar`(vsbar/bulletchart) | 目标线与实际条同量纲 |
70
- | 两期升降(谁升谁降) | `bar`(slope/dumbbell) | `table` | 两端都要标数值 |
71
- | 双维分布 / 优先级 | `bar`(scatter/bubble) | `matrix` | 气泡半径 ∝ √值 |
72
- | 分布 / 离散度 | `boxplot` | `bar`(dotplot) | 组数 ≤8;箱线四件齐备 |
73
- | 增减归因(A→B) | `bar`(waterfall) | `table` | 每段标变化量 + 合计收口 |
74
- | 转化 / 筛选漏斗 | `bar`(funnel) | `sankey` | 层数 ≤5 |
75
- | 计划排期(并行) | `bar`(gantt) | `timeline` | 里程碑叙事用 `timeline`,勿混 |
76
- | 里程碑 / 路线叙事 | `timeline` | `steps` | 3–5 个,每个 ≤2 行 |
77
- | 步骤 / 实施节奏 | `steps` | `timeline` | 3–6 步;高亮步 ≤2 处 |
78
- | 二维强度对标 | `heatmap` | `matrix` | 行列 ≤5×5;只用强调色明度阶梯 |
79
- | 定位 / 优先级 / 象限 | `matrix` | `bar`(scatter) | ≤3×3 |
80
- | 层级递进 / 价值阶梯 | `pyramid` | `diagram` | 3–5 层;强调层 ≤1 |
81
- | 关键判断 / 金句休止 | `quote` | `points` | 全文 1–2 处,多了廉价 |
82
- | 完整论述(发现→证据→含义) | `twocol`(research R1) | `threecol` | 段 ≤200 字;标题必须结论句 |
83
- | 数据证据页(主力) | `exhibit`(R2) | `split` | 全篇 Exhibit 连续编号 |
84
- | 三栏并列论点 | `threecol`(R6) | `cards` | 每栏 ≤150 字 |
85
- | 系统分层架构 | `diagram` | `bar`(chart.type=network) | 节点 ≤24;层 ≤4 |
86
- | 流程 / 职责协作 | `lane` | `diagram` | 每行 ≤6 步;正交折线优先 |
87
- | 素材图片(实拍/截图) | `image` | `split` | 六版式;无图用 `image.placeholder` |
88
- | 待核实项收口 | `flags` 字段 | `table` | 标色必须配说明 |
89
-
90
- ---
91
-
92
- ## 三-b、图文演讲版式 V1–V4(演示材料默认构图)
93
-
94
- > **何时用**:A presentation 默认;任何「要上台讲」的图文页。目标:**3 秒看清主张,30 秒讲完证据**。
95
- > 简单数据禁止全幅大图;极偏占比禁 donut/pie。
96
-
97
- | 版式 | 结构 | 适用 | 视觉:注解 |
98
- |------|------|------|-----------|
99
- | **V1 主视觉+右注解** | 图/照片 55–60% + 3–4 条要点 + so-what | 场景、产品、对比 | 6:4 |
100
- | **V2 上图下带** | 通栏图 50–55% + 指标带/三卡 | 总览→分解 | 55:45 |
101
- | **V3 大数+佐证** | KPI 40% + 小图/迷你表 + 口径 | 极偏占比、单点结论 | 不用 donut |
102
- | **V4 双图对照** | A/B 各 40% + 中缝结论条 | 前后、方案、竞品 | 8:2 |
103
-
104
- **硬规则**:
105
- 1. ≤2 类占比或 max/min ≥20 或最小扇区 <5% → **V3(KPI/进度/对比条)**,禁 donut/pie。
106
- 2. 图旁必须有口头注解 3–4 条(每条 ≤2 行);禁止「一张图+标题」独页(金句/章节幕除外)。
107
- 3. 环图/饼图数值放**图例行**,禁止叠在弧上(治标签叠字)。
108
- 4. 全幅图仅限:架构总览 / ≥8 节点结构 / ≥8 系列趋势 / 用户素材大图。
109
- 5. 简单图表永不截图;照片只承担情绪/场景。
110
- 6. 每 4–6 页插 V3/金句/指标带作节奏休止。
111
-
112
- > 废除旧契约「presentation 每页 1 张大图」。图表面积随信息复杂度走(`layout-constants.json` `charts.sizeByComplexity`)。
113
-
114
- ---
115
-
116
- ## 四、组合版式矩阵("内容丰富"的落地方式)
117
-
118
- > **先选骨架**:P1–P12(`layout-grammar.md`);下表是「主件+从件+注释」内容组合,必须落在某 P__ 上。
119
-
120
- > **默认一页 = 主件 + 从件 + 注释层**。单件页(只有一张图/一张表)是**例外**(金句/大数/章节幕),不是默认。
121
- > **复杂内容页可扩展组合**:主件 + 双从件、或 `split`/`halftable` 双区并置、或信息图 + 指标带 + so-what + flags——不必强行「一主一从」。先定主件(视觉重心),再从本表挑从件与注释层;表外自由组合须落在已登记页型字段上(否则 PPTX 无法交付)。
122
-
123
- | 主件(视觉重心) | 从件(辅助承载) | 注释层 | 页型 | 适用 |
124
- |-----------------|----------------|--------|------|------|
125
- | 图表 | 要点 3–4 条 | so-what / 来源行 | `exhibit` | 证据页主力 |
126
- | 图表 | 要点(左文右图) | so-what | `split` | 结论先行 |
127
- | 图表 | 表格(互证) | 口径行 | `halftable` | 表图对照 |
128
- | 表格(密表) | 图表 | so-what | `halftable` / `split` | 多维对标 |
129
- | 指标带 4–6 个 | 图表 / 小表 | 口径行 | `metrics` | 现状基线 |
130
- | 要点列表 | 指标带 | — | `points`(`metrics` 字段) | 主张 + 基线 |
131
- | 分层架构图 | 图例 chips | 图注 1–2 行 | `diagram`(`legend`) | 架构页 |
132
- | 图片 | 要点 3–4 条 | 图注 + 来源 | `image`(layout=half) | 图文互证 |
133
- | 卡片网格 | 结论条 | — | `cards` / `points` | 并列观察 |
134
- | 双区自由组合 | 左/右各可为 图表·表格·图片·要点·指标 | so-what / flags | `split`(双区升级版) | **组合页通用解** |
135
- | 信息图(桑基/树图/流带…) | 小指标 2–3 / 要点 | 数据表 notes + so-what | 同名信息图页型 | 复杂结构页 |
136
- | 密表 + 图表互证 | 要点摘要 + 指标 | flags | `halftable` + 通用可选件 | 复杂对标页 |
137
-
138
- **组合纪律**:
139
- 1. **一屏一个视觉重心**——主件明显大于从件;两个并列大件走 `split` 明确左右分工,或拆页。
140
- 2. **从件不是装饰**:从件必须承载主件表达不了的信息(趋势、对比、含义),不得复述主件数字。
141
- 3. **注释层必写口径**:so-what ≤60 字、来源行写清期间与口径、待核实项走 `flags`。
142
- 4. **复杂页允许三承载及以上**:信息图 + 指标 + 要点 + so-what 是合法组合;校验器的「组合版式」按「内容页含 ≥2 种承载」计。
143
- 5. 放不下时的顺序是 **优化内容形态 → 升级承载 → 换/扩组合 → 分区 → 拆页 → 有限缩字号**(见 §六与 `containers.fontShrink`)。
144
-
145
- ---
146
-
147
- ## 五、图表选型决策树(先问"要回答什么",再选图)
148
-
149
- > 穷举代码见 `charts.md` §16–§31、§35、§52–§70;误用反例与多样性纪律见 `charts.md` §66。
150
- > **默认生成面(P1 收敛)**:优先 `bar / hbar / line / donut / progress / area / stack / dualline`。
151
- > **高级图型**(waterfall/gantt/funnel/slope/… 与 6 类信息图)按需选用,不进默认轮换。
152
- > **纪律**:全篇不同 `data-chart` 类型 ≥ `min(模式上限, ⌈图表页数 × 0.6⌉)`(上限:research 6 / presentation 4 / architecture 3);**相邻图表页不得同型**。
153
-
154
- | 分析意图(读者要得出的结论) | 首选 | 次选 | 禁用 / 改判条件 |
155
- |---------------------------|------|------|----------------|
156
- | 谁大谁小 | `hbar` | `lollipop` / `bar` | 类别 >8 → Top7 + 附录 |
157
- | 随时间怎么变 | `line` | `area` / `dualline` | 时间点 >8 不标点值 |
158
- | 占比是多少 | `donut` | `pie` / `multidonut` | 扇区 >5 → 合并"其他"或 `treemap` |
159
- | 每 1% 的直觉 | `waffle` | `donut` | 类别 >3 改 `marimekko` |
160
- | 结构在变形 | `streamgraph` | `stackline` | 系列 >6 合并 |
161
- | 总量 × 构成双编码 | `marimekko` | `treemap` | 列 >6 / 段 >4 → 拆 |
162
- | 份额悬殊(头部集中) | `treemap` | `donut` | 叶 >16 → 合并小项 |
163
- | 从 A 到 B 是谁贡献的 | `waterfall` | `pareto` | 段 >6 → 合并 |
164
- | 主要矛盾是哪几个 | `pareto` | `waterfall` | 类别 >7 → 合并 |
165
- | 转化/流失在哪一环 | `funnel` | `sankey` | 层 >5 → 改 `hbar` |
166
- | 多对多的流向 | `sankey` | `network` | 节点 >12 / 流带 >24 → 拆页 |
167
- | 谁和谁相连 | `network` | `diagram` | 节点 >18 / 边 >30 → 拆页 |
168
- | 两期谁升谁降 | `slope` | `dumbbell` | 系列 >6 → 取 Top 6 |
169
- | 单指标前后对比(多对象) | `dumbbell` | `vsbar` | 行 >6 → 拆页 |
170
- | 实际 vs 目标(含区间) | `bulletchart` | `bullet` | 行 >6 → 拆页 |
171
- | 达成率(多指标同心) | `radialbar` | `gauge` | 环 >5 → 改 `bullet` |
172
- | 一个值够不够 | `gauge` | `radialbar` | 单值叙事,勿与图并存 |
173
- | 分布不是均值 | `boxplot` | `dotplot` | 组 >8 → 拆页 |
174
- | 双维定位 + 第三维权重 | `bubble` | `scatter` | 气泡 >8 → 标注关键项 |
175
- | 六维能力画像 | `radar` | `rose` | 维度 >6 → 拆两组 |
176
- | 区间波动(开高低收) | `candlestick` | `line` | 蜡烛 >12 → 聚合 |
177
- | 多项目完成度 | `progress` | `bullet` | 行 >6 → 拆页 |
178
- | 迷你趋势(卡内) | `sparkline` | — | 只用于指标卡,不与大图并存 |
179
-
180
- **七种最常见的误用(出现即改判)**:
181
- 1. 用 `bar` 表达占比 → 改 `donut`/`stackline`/`waffle`。
182
- 2. 用 `donut` 表达 8 个类别 → 合并或改 `treemap`。
183
- 3. 用 `line` 表达类别对比(无时间轴)→ 改 `hbar`。
184
- 4. 用 `table` 表达趋势 → 改 `line`/`area`。
185
- 5. 用均值型图表表达分布 → 改 `boxplot`/`dotplot`。
186
- 6. 同一页放两张同型图 → 改 `split`/`halftable` 并让两图**编码不同维度**。
187
- 7. 多系列图用单色明度阶梯(分不清) → 用 `f-c1~c5` 编码色板(见 §八)。
188
-
189
- ---
190
-
191
- ## 六、内容规则(先保全,后呈现 · 细则在 content-rules.md)
192
-
193
- **核心判据**:先问 **"这条信息是决策必需的吗?"** —— 是 → **必须进主页面**,再想用什么形态承载;不是但需可查 → 沉图注/来源行/附录;都不是 → 才允许删。**禁止**为排版方便砍口径列/时间列。
194
-
195
- **减量顺序(唯一)**:优化内容形态(列表化/精炼)→ 升级承载(文字→表→图)→ 换/扩组合 → 分区 → 拆页 → **最后才**有限缩字号(`containers.fontShrink`)。拆页必须保持信息完整。
196
-
197
- **生成时必守五条**:① research 标题即结论(≥12 字,含数字/判断)② 表格正文用 `body` 字号,禁无限缩字号装下 ③ 容器级溢出即失败 ④ 连续语义句不得拆多文本框 ⑤ `.tbd` 必须配图例/flagbar。
198
-
199
- > 字数上限、段落→列表转换、表格语义字号、密度三档、去 AI 味写法 → **只读** `content-rules.md`(本节不展开)。
200
-
201
- ---
202
-
203
- ## 七、信息图页型族(一张图说清"一整套结构")
204
-
205
- **判据**:普通图表回答"一个数是多少";信息图页型回答"一整套结构长什么样"。边界表与通用铁律见 `infographics.md`。
206
-
207
- | 族 | 页型 | 代码/规格 |
208
- |----|------|----------|
209
- | 统计图形 | `sankey` `treemap` `boxplot` `network` `marimekko` `streamgraph` | `infographics-stats.md` |
210
- | 结构图形 | `flow` `tree` `sequence` `loop`(HTML 主图 SVG);PPTX 映射 `diagram`/`steps` | `infographics-structure.md` |
211
- | 架构主图 | `diagram`(层≤4/节点≤24)`lane`(每行≤6步) | `layouts-architecture.md` |
212
-
213
- **共用纪律(摘要)**:一页一图;采样 ≥16(流带 ≥24)且双边界;禁预设形状;`dataTable` 至少 `notes`;超上限**拆页**。完整上限与写法用 `extract_snippet --chart <类型>` 或上表物理文件。
214
-
215
- ---
216
-
217
- ## 八、配色与主题
218
-
219
- - **9 套风格**(`styles.md`):覆盖 8 个色族(蓝 / 藏青 / 蓝青深色 / 黑白 / 红 / 金棕 / 墨绿 / 紫)+ 1 个彩色数据板;`data-style` 即换皮肤,header 可实时切换(交付前切回选定值)。**刻意不再扩张**——新增门槛见 `styles.md` §10。
220
- - **两套颜色职能,纪律不同**:
221
- - **结构色**(标题/正文/边框/按钮/大面积底色)= **永远中性 + 单一强调色**;层次靠表面明度差 + 1px 边框。禁止渐变、彩色阴影、用红/绿/紫区分模块。
222
- - **编码色**(图表数据系列 / 图例色点 / 小段标签)= 用 `f-c1~c5` / `s-c1~c5` 语义类,**9 套风格各自有可区分的 `c1..c5`**(不写死 hex,随主题切换);同屏彩色系列 ≤5。
223
- - **亮暗双主题**:`data-theme="light|dark"`,与 `REPORT_MODEL.theme` 一致;石墨深灰为深色优先(架构模板出厂 dark);HTML 与 PPTX 同主题导出。
224
- - **强调带**:收尾/CTA 用 `band--accent`(accent-soft);金句可 `band--accent--solid`;**禁止**用 `band--deep` 作末页(浅色主题下会变深色页)。
225
-
226
- ---
227
-
228
- ## 九、校验与交付(命令)
229
-
230
- ```bash
231
- python scripts/scaffold_report.py --mode research --style mckinsey --theme light \
232
- --title "报告标题" --sections 8 --out 2026-09-15-主题.html # 起点(不要手抄模板)
233
- # 或用黄金节奏包:--preset consulting|diagnostic|pitch|ops-review|layered-arch|flow-arch
234
- python scripts/validate_report.py 2026-09-15-主题.html --strict # HTML 硬门禁(0 FAIL / 0 WARN)
235
- python scripts/extract_model.py 2026-09-15-主题.html # → .model.json
236
- node scripts/build_pptx.js 2026-09-15-主题.pptx --model=….model.json
237
- python scripts/validate_pptx.py 2026-09-15-主题.pptx --strict --model=….model.json # 0/0
238
- ```
239
-
240
- **交付前必过**:`validate_report.py --strict` 0/0;含 PPTX 时 `validate_pptx.py --strict --model=` 0/0(`pictures` 数 = 声明数)。
241
- **推荐一键门禁**:`python scripts/quality_gate.py 报告.html [--pptx x.pptx --model x.model.json]`(strict + evals + rubric 启发式五维;交付时加 `--deliver` 开关自动产出七要素说明,不要手拼)。
242
- **失败自修复**:按输出逐条修 → 重跑,直到 0/0;修复顺序见 `failure-modes.md`。
243
-
244
- ---
245
-
246
- ## 十、L2 节级路由(按任务只读这些,读完即停)
247
-
248
- > **不要整读** `components.md` / `charts.md` 背后的物理拆分大文件。需要代码时优先:
249
- > `python scripts/extract_snippet.py --list` · `--task <名>` · `--chart <类型>` · `--page-type <页型>` · `--file components.md --section 46`(逻辑名自动路由)
250
-
251
- | 任务 | 只读 |
252
- |------|------|
253
- | research 证据页 / Exhibit / 密表 | `components.md` §36d/§46/§46c · 本文件 §三/§四 · `extract_snippet.py --task research-evidence` |
254
- | 演示组合版式 | `components.md` §39–§42/§46/§46b/§46c · `--task presentation-combo` |
255
- | 架构 / 泳道 / 分层 | `components.md` §37–§38b · `infographics.md` §78–§80 · `--task architecture-diagram` |
256
- | 选图 / 取图表代码 | 本文件 §五 · `--chart <类型>` · 误用见 `charts.md` §66 |
257
- | 密度 / 字数 / 去 AI 味 | `content-rules.md` §一/§四 · 本文件 §六 · `--task content-rules` |
258
- | 素材图片 / 占位 | `components.md` §11c · `--task image-layout` |
259
- | PPTX 精导字段 | `pptx-export.md` · 本文件 §九 · `--task pptx-export` |
260
- | 高保真 / 锚点 | `high-fidelity.md` · `--task high-fidelity` |
261
- | 配色 / 风格 | `styles.md` · `design-system.md` §1a–§1b/§9 · `--task style-theme` |
262
- | 图标 / 语义速查 | `icons.md` · `--task icons` |
263
- | 起骨架用节奏包 | `scaffold_report.py --list-types` → `--preset consulting` 等 |
264
-
265
- **纪律**:L0+L1 是默认全部所需;上表命中才开 L2;**读完即执行,不预读下一份**。页型语义槽位见 `scripts/layout_slots.json`(双通道同源 IR)。
266
- **维护者**:改常量/schema/引擎后必跑 `sync_runtime.py` → `audit_styles.py` → `audit_docs.py` → `audit_skill.py` → `build_examples.py` → `regression.py`。
1
+ # 作战手册 · Playbook(唯一常读入口 · L1)
2
+
3
+ > **每次生成都读这一份,通常就够了。**
4
+ > 本文件是**决策层**:定模式、选页型、选版式组合、选图表、定配色、跑校验。
5
+ > **代码、几何、穷举表不在本文件**——需要时按 `SKILL.md` 的 L2 路由读深度文件,**读完即停,不预读**。
6
+
7
+ ---
8
+
9
+ ## 〇、排版总序(先骨架后内容 · 整齐优雅)
10
+
11
+ ```
12
+ 角色 → 预设骨架 P1–P12(layout-grammar.md)→ 元素落位 → 间距 token → 对齐/填充率 → LAYOUT_* 门禁
13
+ ```
14
+
15
+ **禁止**临场发明栅格、写死间距、同页两个视觉重心。详规 `references/layout-grammar.md`。
16
+
17
+ ---
18
+
19
+ ## 一、三模式契约(生成时锁定,页面无切换)
20
+
21
+ | | A 演示汇报 | B 研究报告 | C 信息架构图 |
22
+ |--|--|--|--|
23
+ | `data-mode` | `presentation` | `research` | `architecture` |
24
+ | 阅读契约 | 3 秒一屏,听讲 | 30 秒一页,深读 | 一眼看全结构 |
25
+ | 版心 / 正文 | 1400px / 17–18px | 1240px / 14–15px | 1600px / 图注级 |
26
+ | 单页文字 | ≤1800 预警(密卡/列表可偏密;超限先拆页) | ≤3200 | ≤600 |
27
+ | 并列单元 | ≤8(更多→拆屏/改表,勿删条) | ≤12 | 节点 ≤24 |
28
+ | 表格行 | ≤8 | ≤16 | 表转图 |
29
+ | 每页图表 | **按复杂度定面积**(V1–V4;简单图禁全幅) | 1–2 个(取尺寸下限) | 1 张全幅(宽 ≥85% 版心) |
30
+ | 论证结构 | 主张 → 证据 → 休止 | 发现 → 证据 → 含义 + so-what | 标题 → 图 → 图注 |
31
+ | Exhibit 编号 | 不用 | **全篇连续 + 来源行** | 不用 |
32
+ | 篇幅 | 8–15 页 | 12–25 页 | 1–3 张图(6–8 页) |
33
+ | PPTX 正文 | 13pt | 10.5pt | 13pt |
34
+
35
+ **密度选错的症状**:A 出现双栏小字墙(投影看不清)→ 拆页/换形态;A 为「疏朗」删证据/so-what → **反模式**,按 content-rules §四-c 恢复;B 大面积留白 → 合页或补证据;C 成段正文 → 转图注。
36
+ **节奏**:禁止连续 3 页同密度档;同一版式不连用超过 2 页;research 每 3–4 页插一个低密度页(指标带/金句/大数)。
37
+ **反截断**:溢出顺序 = 重构承载 → 拆页/分章 → 换布局 → 有限 fontShrink;禁静默截断(见 `presentation-craft.md`)。
38
+
39
+ ---
40
+
41
+ ## 二、两条生成路径(先判定,再动手)
42
+
43
+ **轻量路径**(默认)——同时满足:≤12 页 · 材料单一完整 · 无未敲定关键判断 · 用户没要求看框架。
44
+ ```
45
+ Gate 0 参考图 → 六项问询(1 轮)→ 1 张规划卡 → scaffold_report.py
46
+ → **只填 REPORT_MODEL** → render_from_model.py --inplace → validate_report.py --strict → 交付
47
+ ```
48
+ (Fast Mode 跳过 Gate 0/六项,其余同链;**禁止**手改 HTML 正文与模型双写。)
49
+
50
+ **完整路径**(任一命中)——研究 ≥20 页 / 演示 ≥12 页 / 材料量大且杂 / 含未敲定关键判断 / 用户要看框架。
51
+ ```
52
+ Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴 → SCR+主张树 → 逐页规划卡 → 大纲确认(1 轮)
53
+ → scaffold_report.py → **只填 REPORT_MODEL** → render_from_model.py --inplace → validate_report.py --strict → 交付
54
+ ```
55
+
56
+ **预算(硬)**:交互轮次 ≤3;必读文件 = `SKILL.md` + 本文件(≤2 份);L2 深度文件按需且单份读完即停。
57
+
58
+ ---
59
+
60
+ ## 三、页型选型(意图 → 页型 → 关键约束)
61
+
62
+ > 自动选型:`python scripts/recommend_layout.py --mode A --intent "路演" --pages 10 --json`(或 `--from-model report.model.json`)→ `{pageType,skel,chart,rationale}`;Mode A 交付 `--strict` 已含 layout-qa。
63
+
64
+ > 穷举表(内容形态 → 版式 → PPTX 页型)见 `components.md` §46;密度档适配见 `components.md` §46b;组合见下节 §四。
65
+
66
+ | 我要表达 | 首选页型 | 次选 | 关键约束 |
67
+ |---------|---------|------|---------|
68
+ | 要点式并列主张(默认页) | `points` | `cards` | 每卡宜 3–5 条;更多拆卡/跟进页,勿截断条目 |
69
+ | 现状基线 / 指标快照 | `metrics` | `kpi` | 4–6 个;单数压场用 `kpi` |
70
+ | 单个核心数字压场 | `kpi` | `metrics` | hero 一数一结论 |
71
+ | 多维对标清单 | `table` | `halftable` | ≤8 行(research ≤16) |
72
+ | 时间趋势 / 爬坡 | `bar`(chart.type=line/area/dualline) | `exhibit` | 时间点 >8 改折线 |
73
+ | 构成占比 | `donut`(pie/multidonut/waffle) | `halftable` / **V3 KPI** | 扇区 ≤5,最小扇区 ≥8%;**极偏(min&lt;5% 或 max/min&gt;20)禁 donut→V3** |
74
+ | 排名 / 大小对比 | `bar`(chart.type=hbar/lollipop/pareto) | `table` | 类别 >8 取 Top 7 + 附录 |
75
+ | 现状 vs 目标 | `bullet` / `comparison` | `bar`(vsbar/bulletchart) | 目标线与实际条同量纲 |
76
+ | 两期升降(谁升谁降) | `bar`(slope/dumbbell) | `table` | 两端都要标数值 |
77
+ | 双维分布 / 优先级 | `bar`(scatter/bubble) | `matrix` | 气泡半径 ∝ √值 |
78
+ | 分布 / 离散度 | `boxplot` | `bar`(dotplot) | 组数 ≤8;箱线四件齐备 |
79
+ | 增减归因(A→B) | `bar`(waterfall) | `table` | 每段标变化量 + 合计收口 |
80
+ | 转化 / 筛选漏斗 | `bar`(funnel) | `sankey` | 层数 ≤5 |
81
+ | 计划排期(并行) | `bar`(gantt) | `timeline` | 里程碑叙事用 `timeline`,勿混 |
82
+ | 里程碑 / 路线叙事 | `timeline` | `steps` | 3–5 个,每个 ≤2 行 |
83
+ | 步骤 / 实施节奏 | `steps` | `timeline` | 3–6 步;高亮步 ≤2 处 |
84
+ | 二维强度对标 | `heatmap` | `matrix` | 行列 ≤5×5;只用强调色明度阶梯 |
85
+ | 定位 / 优先级 / 象限 | `matrix` | `bar`(scatter) | ≤3×3 |
86
+ | 层级递进 / 价值阶梯 | `pyramid` | `diagram` | 3–5 层;强调层 ≤1 |
87
+ | 关键判断 / 金句休止 | `quote` | `points` | 全文 1–2 处,多了廉价 |
88
+ | 完整论述(发现→证据→含义) | `twocol`(research R1) | `threecol` | 段 ≤200 字;标题必须结论句 |
89
+ | 数据证据页(主力) | `exhibit`(R2) | `split` | 全篇 Exhibit 连续编号 |
90
+ | 三栏并列论点 | `threecol`(R6) | `cards` | 每栏 ≤150 字 |
91
+ | 系统分层架构 | `diagram` | `bar`(chart.type=network) | 节点 ≤24;层 ≤4 |
92
+ | 流程 / 职责协作 | `lane` | `diagram` | 每行 ≤6 步;正交折线优先 |
93
+ | 素材图片(实拍/截图) | `image` | `split` | 六版式;无图用 `image.placeholder` |
94
+ | 待核实项收口 | `flags` 字段 | `table` | 标色必须配说明 |
95
+
96
+ ---
97
+
98
+ ## 三-b、图文演讲版式 V1–V4(演示材料默认构图)
99
+
100
+ > **何时用**:A presentation 默认;任何「要上台讲」的图文页。目标:**3 秒看清主张,30 秒讲完证据**。
101
+ > 简单数据禁止全幅大图;极偏占比禁 donut/pie。
102
+
103
+ | 版式 | 结构 | 适用 | 视觉:注解 |
104
+ |------|------|------|-----------|
105
+ | **V1 主视觉+右注解** | 图/照片 55–60% + 3–4 条要点 + so-what | 场景、产品、对比 | 6:4 |
106
+ | **V2 上图下带** | 通栏图 50–55% + 指标带/三卡 | 总览→分解 | 55:45 |
107
+ | **V3 大数+佐证** | KPI 40% + 小图/迷你表 + 口径 | 极偏占比、单点结论 | 不用 donut |
108
+ | **V4 双图对照** | A/B 各 40% + 中缝结论条 | 前后、方案、竞品 | 8:2 |
109
+
110
+ **硬规则**:
111
+ 1. ≤2 类占比或 max/min ≥20 或最小扇区 <5% → **V3(KPI/进度/对比条)**,禁 donut/pie。
112
+ 2. 图旁必须有口头注解 3–4 条(每条 ≤2 行);禁止「一张图+标题」独页(金句/章节幕除外)。
113
+ 3. 环图/饼图数值放**图例行**,禁止叠在弧上(治标签叠字)。
114
+ 4. 全幅图仅限:架构总览 / ≥8 节点结构 / ≥8 系列趋势 / 用户素材大图。
115
+ 5. 简单图表永不截图;照片只承担情绪/场景。
116
+ 6. 每 4–6 页插 V3/金句/指标带作节奏休止。
117
+
118
+ > 废除旧契约「presentation 每页 1 张大图」。图表面积随信息复杂度走(`layout-constants.json` `charts.sizeByComplexity`)。
119
+
120
+ ---
121
+
122
+ ## 四、组合版式矩阵("内容丰富"的落地方式)
123
+
124
+ > **先选骨架**:P1–P12(`layout-grammar.md`)。Mode A **主力** P1–P4+P6/P10;**次级** P7–P9/P11–P12(意图命中);画廊/示例外举主力。下表是「主件+从件+注释」组合,必须落在某 P__ 上。
125
+
126
+ > **默认一页 = 主件 + 从件 + 注释层**。单件页(只有一张图/一张表)是**例外**(金句/大数/章节幕),不是默认。
127
+ > **复杂内容页可扩展组合**:主件 + 双从件、或 `split`/`halftable` 双区并置、或信息图 + 指标带 + so-what + flags——不必强行「一主一从」。先定主件(视觉重心),再从本表挑从件与注释层;表外自由组合须落在已登记页型字段上(否则 PPTX 无法交付)。
128
+
129
+ | 主件(视觉重心) | 从件(辅助承载) | 注释层 | 页型 | 适用 |
130
+ |-----------------|----------------|--------|------|------|
131
+ | 图表 | 要点 3–4 条 | so-what / 来源行 | `exhibit` | 证据页主力 |
132
+ | 图表 | 要点(左文右图) | so-what | `split` | 结论先行 |
133
+ | 图表 | 表格(互证) | 口径行 | `halftable` | 表图对照 |
134
+ | 表格(密表) | 图表 | so-what | `halftable` / `split` | 多维对标 |
135
+ | 指标带 4–6 个 | 图表 / 小表 | 口径行 | `metrics` | 现状基线 |
136
+ | 要点列表 | 指标带 | — | `points`(`metrics` 字段) | 主张 + 基线 |
137
+ | 分层架构图 | 图例 chips | 图注 1–2 行 | `diagram`(`legend`) | 架构页 |
138
+ | 图片 | 要点 3–4 条 | 图注 + 来源 | `image`(layout=half) | 图文互证 |
139
+ | 卡片网格 | 结论条 | — | `cards` / `points` | 并列观察 |
140
+ | 双区自由组合 | 左/右各可为 图表·表格·图片·要点·指标 | so-what / flags | `split`(双区升级版) | **组合页通用解** |
141
+ | 信息图(桑基/树图/流带…) | 小指标 2–3 / 要点 | 数据表 notes + so-what | 同名信息图页型 | 复杂结构页 |
142
+ | 密表 + 图表互证 | 要点摘要 + 指标 | flags | `halftable` + 通用可选件 | 复杂对标页 |
143
+
144
+ **组合纪律**:
145
+ 1. **一屏一个视觉重心**——主件明显大于从件;两个并列大件走 `split` 明确左右分工,或拆页。
146
+ 2. **从件不是装饰**:从件必须承载主件表达不了的信息(趋势、对比、含义),不得复述主件数字。
147
+ 3. **注释层必写口径**:so-what ≤60 字、来源行写清期间与口径、待核实项走 `flags`。
148
+ 4. **复杂页允许三承载及以上**:信息图 + 指标 + 要点 + so-what 是合法组合;校验器的「组合版式」按「内容页含 ≥2 种承载」计。
149
+ 5. 放不下时的顺序是 **优化内容形态 → 升级承载 → 换/扩组合 → 分区 → 拆页 → 有限缩字号**(见 §六与 `containers.fontShrink`)。
150
+
151
+ ---
152
+
153
+ ## 五、图表选型决策树(先问"要回答什么",再选图)
154
+
155
+ > **默认面(8 核心图)**:`bar` · `hbar` · `line` · `donut` · `progress` · `area` · `stack` · `dualline`
156
+ > (= `layoutSystem.defaultCharts`)。完整登记与代码 → `extract_snippet.py --chart <类型>`;误用纪律 → `charts.md`(先 `charts-discipline`,核图 8,extended 按需)。
157
+ > 下表仍保留决策提示;**生成默认只从 8 核心里选**,扩展图仅在意图明确命中时用。
158
+
159
+
160
+ > 穷举代码见 `charts.md` §16–§31、§35、§52–§70;误用反例与多样性纪律见 `charts.md` §66(facade:纪律→核图→extended)。
161
+ > **默认生成面(P1 收敛)**:优先 `bar / hbar / line / donut / progress / area / stack / dualline`。
162
+ > **高级图型**(waterfall/gantt/funnel/slope/… 与 6 类信息图)按需选用,不进默认轮换。
163
+ > **纪律**:全篇不同 `data-chart` 类型 ≥ `min(模式上限, ⌈图表页数 × 0.6⌉)`(上限:research 6 / presentation 4 / architecture 3);**相邻图表页不得同型**。多样性 **preferCoreFirst**:先拉开核图 8;advanced 计入 minTypes(不罚)但只在意图命中时用,**禁止预读** `charts-extended.md`;**禁**为凑下限硬上冷门图、简单图全幅、极偏 donut/pie。
164
+
165
+ | 分析意图(读者要得出的结论) | 首选 | 次选 | 禁用 / 改判条件 |
166
+ |---------------------------|------|------|----------------|
167
+ | 谁大谁小 | `hbar` | `lollipop` / `bar` | 类别 >8 → Top7 + 附录 |
168
+ | 随时间怎么变 | `line` | `area` / `dualline` | 时间点 >8 不标点值 |
169
+ | 占比是多少 | `donut` | `pie` / `multidonut` | 扇区 >5 → 合并"其他"或 `treemap` |
170
+ | 每 1% 的直觉 | `waffle` | `donut` | 类别 >3 改 `marimekko` |
171
+ | 结构在变形 | `streamgraph` | `stackline` | 系列 >6 合并 |
172
+ | 总量 × 构成双编码 | `marimekko` | `treemap` | 列 >6 / 段 >4 → 拆 |
173
+ | 份额悬殊(头部集中) | `treemap` | `donut` | 叶 >16 → 合并小项 |
174
+ | 从 A 到 B 是谁贡献的 | `waterfall` | `pareto` | 段 >6 → 合并 |
175
+ | 主要矛盾是哪几个 | `pareto` | `waterfall` | 类别 >7 → 合并 |
176
+ | 转化/流失在哪一环 | `funnel` | `sankey` | 层 >5 → 改 `hbar` |
177
+ | 多对多的流向 | `sankey` | `network` | 节点 >12 / 流带 >24 → 拆页 |
178
+ | 谁和谁相连 | `network` | `diagram` | 节点 >18 / 边 >30 → 拆页 |
179
+ | 两期谁升谁降 | `slope` | `dumbbell` | 系列 >6 → 取 Top 6 |
180
+ | 单指标前后对比(多对象) | `dumbbell` | `vsbar` | 行 >6 → 拆页 |
181
+ | 实际 vs 目标(含区间) | `bulletchart` | `bullet` | 行 >6 → 拆页 |
182
+ | 达成率(多指标同心) | `radialbar` | `gauge` | 环 >5 → 改 `bullet` |
183
+ | 一个值够不够 | `gauge` | `radialbar` | 单值叙事,勿与图并存 |
184
+ | 分布不是均值 | `boxplot` | `dotplot` | 组 >8 → 拆页 |
185
+ | 双维定位 + 第三维权重 | `bubble` | `scatter` | 气泡 >8 → 标注关键项 |
186
+ | 六维能力画像 | `radar` | `rose` | 维度 >6 → 拆两组 |
187
+ | 区间波动(开高低收) | `candlestick` | `line` | 蜡烛 >12 → 聚合 |
188
+ | 多项目完成度 | `progress` | `bullet` | 行 >6 → 拆页 |
189
+ | 迷你趋势(卡内) | `sparkline` | — | 只用于指标卡,不与大图并存 |
190
+
191
+ **七种最常见的误用(出现即改判)**:
192
+ 1. 用 `bar` 表达占比 → 改 `donut`/`stackline`/`waffle`。
193
+ 2. 用 `donut` 表达 8 个类别 → 合并或改 `treemap`。
194
+ 3. 用 `line` 表达类别对比(无时间轴)→ 改 `hbar`。
195
+ 4. 用 `table` 表达趋势 → 改 `line`/`area`。
196
+ 5. 用均值型图表表达分布 → 改 `boxplot`/`dotplot`。
197
+ 6. 同一页放两张同型图 → 改 `split`/`halftable` 并让两图**编码不同维度**。
198
+ 7. 多系列图用单色明度阶梯(分不清) → 用 `f-c1~c5` 编码色板(见 §八)。
199
+
200
+ ---
201
+
202
+ ## 六、内容规则(先保全,后呈现 · 细则在 content-rules.md)
203
+
204
+ **核心判据**:先问 **"这条信息是决策必需的吗?"** —— 是 → **必须进主页面**,再想用什么形态承载;不是但需可查 → 沉图注/来源行/附录;都不是 → 才允许删。**禁止**为排版方便砍口径列/时间列。
205
+
206
+ **减量顺序(唯一)**:优化内容形态(列表化/精炼)→ 升级承载(文字→表→图)→ 换/扩组合 → 分区 → 拆页 → **最后才**有限缩字号(`containers.fontShrink`)。拆页必须保持信息完整。
207
+
208
+ **生成时必守五条**:① research 标题即结论(≥12 字,含数字/判断)② 表格正文用 `body` 字号,禁无限缩字号装下 ③ 容器级溢出即失败 ④ 连续语义句不得拆多文本框 ⑤ `.tbd` 必须配图例/flagbar。
209
+
210
+ > 字数上限、段落→列表转换、表格语义字号、密度三档、去 AI 味写法 → **只读** `content-rules.md`(本节不展开)。
211
+
212
+ ---
213
+
214
+ ## 七、信息图页型族(一张图说清"一整套结构")
215
+
216
+ **判据**:普通图表回答"一个数是多少";信息图页型回答"一整套结构长什么样"。边界表与通用铁律见 `infographics.md`。
217
+
218
+ | 族 | 页型 | 代码/规格 |
219
+ |----|------|----------|
220
+ | 统计图形 | `sankey` `treemap` `boxplot` `network` `marimekko` `streamgraph` | `infographics-stats.md` |
221
+ | 结构图形 | `flow` `tree` `sequence` `loop`(HTML 主图 SVG);PPTX 映射 `diagram`/`steps` | `infographics-structure.md` |
222
+ | 架构主图 | `diagram`(层≤4/节点≤24)`lane`(每行≤6步) | `layouts-architecture.md` |
223
+
224
+ **共用纪律(摘要)**:一页一图;采样 ≥16(流带 ≥24)且双边界;禁预设形状;`dataTable` 至少 `notes`;超上限**拆页**。完整上限与写法用 `extract_snippet --chart <类型>` 或上表物理文件。
225
+
226
+ ---
227
+
228
+ ## 八、配色与主题
229
+
230
+ - **9 套风格**(`styles.md`):覆盖 8 个色族(蓝 / 藏青 / 蓝青深色 / 黑白 / 红 / 金棕 / 墨绿 / 紫)+ 1 个彩色数据板;`data-style` 即换皮肤,header 可实时切换(交付前切回选定值)。**刻意不再扩张**——新增门槛见 `styles.md` §10。
231
+ - **两套颜色职能,纪律不同**:
232
+ - **结构色**(标题/正文/边框/按钮/大面积底色)= **永远中性 + 单一强调色**;层次靠表面明度差 + 1px 边框。禁止渐变、彩色阴影、用红/绿/紫区分模块。
233
+ - **编码色**(图表数据系列 / 图例色点 / 小段标签)= 用 `f-c1~c5` / `s-c1~c5` 语义类,**9 套风格各自有可区分的 `c1..c5`**(不写死 hex,随主题切换);同屏彩色系列 ≤5。
234
+ - **亮暗双主题**:`data-theme="light|dark"`,与 `REPORT_MODEL.theme` 一致;石墨深灰为深色优先(架构模板出厂 dark);HTML 与 PPTX 同主题导出。
235
+ - **强调带**:收尾/CTA 用 `band--accent`(accent-soft);金句可 `band--accent--solid`;**禁止**用 `band--deep` 作末页(浅色主题下会变深色页)。
236
+
237
+ ---
238
+
239
+ ## 九、校验与交付(命令)
240
+
241
+ ```bash
242
+ python scripts/scaffold_report.py --mode research --style mckinsey --theme light \
243
+ --title "报告标题" --sections 8 --out 2026-09-15-主题.html # 起点(不要手抄模板)
244
+ # 或用黄金节奏包:--preset consulting|diagnostic|pitch|ops-review|layered-arch|flow-arch
245
+ # 只填 window.REPORT_MODEL(禁止手改 HTML 正文),然后回填:
246
+ python scripts/render_from_model.py 2026-09-15-主题.html --inplace
247
+ python scripts/validate_report.py 2026-09-15-主题.html --strict # presentation 自动 --layout-qa;B/C 可显式加
248
+ # 可选:python scripts/recommend_layout.py --from-model 报告.model.json
249
+ python scripts/extract_model.py 2026-09-15-主题.html # → .model.json
250
+ node scripts/build_pptx.js 2026-09-15-主题.pptx --model=….model.json
251
+ python scripts/validate_pptx.py 2026-09-15-主题.pptx --strict --model=….model.json # 0/0
252
+ ```
253
+
254
+ **交付前必过**:`validate_report.py --strict` 0/0(**Mode A / presentation 隐含 `--layout-qa`**;research/architecture 不强制);含 PPTX 时 `validate_pptx.py --strict --model=` 0/0。
255
+ **推荐一键门禁**:`python scripts/quality_gate.py 报告.html [--pptx x.pptx --model x.model.json]`(presentation 同口径附带 layout-qa;交付加 `--deliver` 出七要素,不要手拼)。
256
+ **A/B 全文对等**:`cross_verify.py` 默认 SKIP,仅 `python scripts/cross_verify.py --full-ab` 或 `regression.py --full-ab` 时启用。
257
+ **PPTX 冒烟**:`bash scripts/smoke_pptx.sh`(extract_model → build_pptx → validate_pptx --strict)。
258
+ **失败自修复**:按输出逐条修 → 重跑,直到 0/0;修复顺序见 `failure-modes.md`。
259
+
260
+ ---
261
+
262
+ ## 十、L2 节级路由(按任务只读这些,读完即停)
263
+
264
+ > 默认生成面:`default-surface.md`(12 页型 + 8 图 + V1–V4)。Mode A 工艺清单:`presentation-craft.md`。
265
+ > **不要整读** `components.md` / `charts.md` 背后的物理拆分大文件。需要代码时优先:
266
+ > `python scripts/extract_snippet.py --list` · `--task <名>` · `--chart <类型>` · `--page-type <页型>` · `--file components.md --section 46`(逻辑名自动路由)
267
+
268
+ | 任务 | 只读 |
269
+ |------|------|
270
+ | research 证据页 / Exhibit / 密表 | `components.md` §36d/§46/§46c · 本文件 §三/§四 · `extract_snippet.py --task research-evidence` |
271
+ | 正式演示 / Mode A 工艺 | `default-surface.md` · `presentation-craft.md` · 本文件 §三-b/§五 |
272
+ | 演示组合版式 | `components.md` §39–§42/§46/§46b/§46c · `--task presentation-combo` |
273
+ | 架构 / 泳道 / 分层 | `components.md` §37–§38b · `infographics.md` §78–§80 · `--task architecture-diagram` |
274
+ | 选图 / 取图表代码 | 本文件 §五 · `--chart <类型>` · 误用见 `charts.md` §66 |
275
+ | 密度 / 字数 / 去 AI 味 | `content-rules.md` §一/§四 · 本文件 §六 · `--task content-rules` |
276
+ | 素材图片 / 占位 | `components.md` §11c · `--task image-layout` |
277
+ | PPTX 精导字段 | `pptx-export.md` · 本文件 §九 · `--task pptx-export` |
278
+ | 高保真 / 锚点 | `high-fidelity.md` · `--task high-fidelity` |
279
+ | 配色 / 风格 | `styles.md` · `design-system.md` §1a–§1b/§9 · `--task style-theme` |
280
+ | 图标 / 语义速查 | `icons.md` · `--task icons` |
281
+ | 起骨架用节奏包 | `scaffold_report.py --list-types` → `--preset consulting` 等 |
282
+
283
+ **纪律**:L0+L1 是默认全部所需;上表命中才开 L2;**读完即执行,不预读下一份**。页型语义槽位见 `layout-constants.json` → `layoutSlots`(双通道同源 IR)。
284
+ **维护者**:改常量/schema/引擎后必跑 `sync_runtime.py` → `audit_styles.py` → `audit_docs.py` → `audit_skill.py` → `build_examples.py` → `regression.py`。