@topmindspace/tms-skills 0.1.1 → 0.1.3

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 (64) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/README.md +13 -3
  3. package/bin/tms-skills.js +7 -2
  4. package/package.json +1 -1
  5. package/top-ppt-html/README.md +69 -148
  6. package/top-ppt-html/SKILL.md +42 -23
  7. package/top-ppt-html/agents/openai.yaml +5 -0
  8. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  9. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  10. package/top-ppt-html/assets/theme-overview.png +0 -0
  11. package/top-ppt-html/evals/trigger-queries.json +181 -0
  12. package/top-ppt-html/package.json +3 -2
  13. package/top-ppt-html/references/chart-decision-tree.md +42 -0
  14. package/top-ppt-html/references/charts-discipline.md +3 -1
  15. package/top-ppt-html/references/charts.md +24 -15
  16. package/top-ppt-html/references/content-rules.md +54 -34
  17. package/top-ppt-html/references/default-surface.md +62 -0
  18. package/top-ppt-html/references/design-system.md +2 -2
  19. package/top-ppt-html/references/failure-modes.md +14 -1
  20. package/top-ppt-html/references/icons.md +56 -277
  21. package/top-ppt-html/references/illustration-layout.md +39 -0
  22. package/top-ppt-html/references/layout-grammar.md +16 -6
  23. package/top-ppt-html/references/modes.md +16 -11
  24. package/top-ppt-html/references/outline-design.md +24 -0
  25. package/top-ppt-html/references/page-type-matrix.md +35 -0
  26. package/top-ppt-html/references/playbook.md +42 -86
  27. package/top-ppt-html/references/pptx-export.md +20 -2
  28. package/top-ppt-html/references/presentation-craft.md +77 -0
  29. package/top-ppt-html/references/tech-design.md +11 -5
  30. package/top-ppt-html/scripts/audit_docs.py +1 -1
  31. package/top-ppt-html/scripts/audit_skill.py +45 -6
  32. package/top-ppt-html/scripts/build_examples.py +39 -2260
  33. package/top-ppt-html/scripts/build_pptx.js +6 -0
  34. package/top-ppt-html/scripts/check_triggers.py +153 -0
  35. package/top-ppt-html/scripts/checks_html.py +39 -0
  36. package/top-ppt-html/scripts/cross_verify.py +5 -1
  37. package/top-ppt-html/scripts/extract_snippet.py +2 -2
  38. package/top-ppt-html/scripts/layout-constants.json +111 -18
  39. package/top-ppt-html/scripts/lib_layout_regions.js +7 -9
  40. package/top-ppt-html/scripts/negative_tests.py +137 -1
  41. package/top-ppt-html/scripts/package_skill.py +29 -10
  42. package/top-ppt-html/scripts/quality_gate.py +11 -3
  43. package/top-ppt-html/scripts/recommend_layout.py +384 -0
  44. package/top-ppt-html/scripts/regression.py +1 -1
  45. package/top-ppt-html/scripts/smoke_pptx.sh +30 -0
  46. package/top-ppt-html/scripts/sync_runtime.py +22 -25
  47. package/top-ppt-html/scripts/validate_pptx.py +69 -0
  48. package/top-ppt-html/scripts/validate_report.py +336 -10
  49. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.html +0 -3926
  50. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +0 -168
  51. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +0 -4325
  52. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +0 -321
  53. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +0 -4325
  54. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +0 -321
  55. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +0 -5527
  56. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +0 -914
  57. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +0 -5527
  58. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +0 -914
  59. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +0 -5527
  60. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +0 -914
  61. package/top-ppt-html/references/design-system-engine.md +0 -235
  62. package/top-ppt-html/references/industry-benchmark.md +0 -105
  63. package/top-ppt-html/references/reform-plan.md +0 -252
  64. package/top-ppt-html/scripts/layout_slots.json +0 -830
@@ -0,0 +1,181 @@
1
+ {
2
+ "version": 1,
3
+ "skill": "top-ppt-html",
4
+ "description": "Keyword/heuristic trigger coverage against SKILL.md frontmatter description. Not an LLM eval — CI gates regressions when trigger keywords drift.",
5
+ "how_to_extend": [
6
+ "Add a positive query that should select this skill (报告/路演/PPT/HTML/调研…).",
7
+ "Add a negative query that must NOT select it (coding/video/edit-existing-pptx…).",
8
+ "Each entry: {id, query, expect: 'hit'|'miss', notes?}",
9
+ "Runner: python3 scripts/check_triggers.py — matches query tokens against description keywords extracted from SKILL.md.",
10
+ "Wire: package_skill.py --check invokes check_triggers; also npm run check."
11
+ ],
12
+ "positive": [
13
+ {
14
+ "id": "P01",
15
+ "query": "帮我做一份季度经营分析报告",
16
+ "expect": "hit"
17
+ },
18
+ {
19
+ "id": "P02",
20
+ "query": "明天路演用的融资 PPT,10页左右",
21
+ "expect": "hit"
22
+ },
23
+ {
24
+ "id": "P03",
25
+ "query": "生成一份可翻页的 HTML 演示文稿",
26
+ "expect": "hit"
27
+ },
28
+ {
29
+ "id": "P04",
30
+ "query": "把调研材料做成 slides deck",
31
+ "expect": "hit"
32
+ },
33
+ {
34
+ "id": "P05",
35
+ "query": "写一份麦肯锡风格的对标分析研究报告",
36
+ "expect": "hit"
37
+ },
38
+ {
39
+ "id": "P06",
40
+ "query": "项目复盘汇报 PPTX,要能编辑",
41
+ "expect": "hit"
42
+ },
43
+ {
44
+ "id": "P07",
45
+ "query": "画一张系统架构拓扑图,图为王",
46
+ "expect": "hit"
47
+ },
48
+ {
49
+ "id": "P08",
50
+ "query": "泳道流程图 + 方案说明页",
51
+ "expect": "hit"
52
+ },
53
+ {
54
+ "id": "P09",
55
+ "query": "白皮书大纲做成网页报告",
56
+ "expect": "hit"
57
+ },
58
+ {
59
+ "id": "P10",
60
+ "query": "评测报告可视化,导出 HTML 和 PPT",
61
+ "expect": "hit"
62
+ },
63
+ {
64
+ "id": "P11",
65
+ "query": "商务汇报用的一页一主张演示",
66
+ "expect": "hit"
67
+ },
68
+ {
69
+ "id": "P12",
70
+ "query": "快速模式一键出稿,少问一句",
71
+ "expect": "hit"
72
+ },
73
+ {
74
+ "id": "P13",
75
+ "query": "fast mode generate a pitch deck",
76
+ "expect": "hit"
77
+ },
78
+ {
79
+ "id": "P14",
80
+ "query": "咨询报告:发现、证据、so-what",
81
+ "expect": "hit"
82
+ },
83
+ {
84
+ "id": "P15",
85
+ "query": "优化这份报告的排版版式和配色密度",
86
+ "expect": "hit"
87
+ },
88
+ {
89
+ "id": "P16",
90
+ "query": "把数据做成可视化经营分析 deck",
91
+ "expect": "hit"
92
+ },
93
+ {
94
+ "id": "P17",
95
+ "query": "发布会演讲 PPT,亮暗双主题",
96
+ "expect": "hit"
97
+ },
98
+ {
99
+ "id": "P18",
100
+ "query": "行业调研 + 对标分析 HTML 报告",
101
+ "expect": "hit"
102
+ },
103
+ {
104
+ "id": "P19",
105
+ "query": "直接生成项目汇报 slides",
106
+ "expect": "hit"
107
+ },
108
+ {
109
+ "id": "P20",
110
+ "query": "高保真 1:1 导出可编辑 PPTX",
111
+ "expect": "hit"
112
+ },
113
+ {
114
+ "id": "P21",
115
+ "query": "做个信息架构图和分层带",
116
+ "expect": "hit"
117
+ },
118
+ {
119
+ "id": "P22",
120
+ "query": "董事会汇报材料,正式演示风格",
121
+ "expect": "hit"
122
+ }
123
+ ],
124
+ "negative": [
125
+ {
126
+ "id": "N01",
127
+ "query": "帮我写一个 React 组件库并跑单测",
128
+ "expect": "miss"
129
+ },
130
+ {
131
+ "id": "N02",
132
+ "query": "debug 这段 Python 报错",
133
+ "expect": "miss"
134
+ },
135
+ {
136
+ "id": "N03",
137
+ "query": "生成一段产品宣传视频脚本并渲染成 mp4",
138
+ "expect": "miss"
139
+ },
140
+ {
141
+ "id": "N04",
142
+ "query": "用 Midjourney 生成一张产品海报图",
143
+ "expect": "miss"
144
+ },
145
+ {
146
+ "id": "N05",
147
+ "query": "直接改这个已有的 pptx 里第三页的字号",
148
+ "expect": "miss"
149
+ },
150
+ {
151
+ "id": "N06",
152
+ "query": "打开 Word 文档把第二段改成被动语态",
153
+ "expect": "miss"
154
+ },
155
+ {
156
+ "id": "N07",
157
+ "query": "搭建一个电商官网前端,不要报告",
158
+ "expect": "miss"
159
+ },
160
+ {
161
+ "id": "N08",
162
+ "query": "给我写 SQL 迁移脚本",
163
+ "expect": "miss"
164
+ },
165
+ {
166
+ "id": "N09",
167
+ "query": "配置 nginx 反向代理",
168
+ "expect": "miss"
169
+ },
170
+ {
171
+ "id": "N10",
172
+ "query": "把这段代码 refactor 成 TypeScript",
173
+ "expect": "miss"
174
+ },
175
+ {
176
+ "id": "N11",
177
+ "query": "剪辑这段会议录像加字幕",
178
+ "expect": "miss"
179
+ }
180
+ ]
181
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "top-ppt-html",
3
- "version": "0.1.0",
3
+ "version": "0.1.3",
4
4
  "private": true,
5
5
  "description": "TopPPT HTML:报告 / 演示 / 信息架构图技能。单文件 HTML + 版式保真的可编辑 PPTX;布局骨架 P1–P12;模型单写;strict 0/0 交付。",
6
6
  "license": "MIT",
@@ -24,7 +24,8 @@
24
24
  "regression": "python3 scripts/regression.py",
25
25
  "negative": "python3 scripts/negative_tests.py",
26
26
  "package": "python3 scripts/package_skill.py",
27
- "check": "python3 scripts/package_skill.py --check"
27
+ "check": "python3 scripts/package_skill.py --check",
28
+ "triggers": "python3 scripts/check_triggers.py"
28
29
  },
29
30
  "dependencies": {
30
31
  "pptxgenjs": "^4.0.0"
@@ -0,0 +1,42 @@
1
+ # 图表选型决策树(L2)
2
+
3
+ > **何时读**:选图 / 分析意图→图型;常读入口仍是 `playbook.md` §五(核图 8 + 多样性摘要)。读完即停。
4
+ > 完整登记与代码 → `extract_snippet.py --chart <类型>`;误用纪律 → `charts.md`(先 `charts-discipline`,核图 8,extended 按需)。
5
+
6
+ ## 决策表
7
+
8
+ | 分析意图(读者要得出的结论) | 首选 | 次选 | 禁用 / 改判条件 |
9
+ |---------------------------|------|------|----------------|
10
+ | 谁大谁小 | `hbar` | `lollipop` / `bar` | 类别 >8 → Top7 + 附录 |
11
+ | 随时间怎么变 | `line` | `area` / `dualline` | 时间点 >8 不标点值 |
12
+ | 占比是多少 | `donut` | `pie` / `multidonut` | 扇区 >5 → 合并"其他"或 `treemap` |
13
+ | 每 1% 的直觉 | `waffle` | `donut` | 类别 >3 改 `marimekko` |
14
+ | 结构在变形 | `streamgraph` | `stackline` | 系列 >6 合并 |
15
+ | 总量 × 构成双编码 | `marimekko` | `treemap` | 列 >6 / 段 >4 → 拆 |
16
+ | 份额悬殊(头部集中) | `treemap` | `donut` | 叶 >16 → 合并小项 |
17
+ | 从 A 到 B 是谁贡献的 | `waterfall` | `pareto` | 段 >6 → 合并 |
18
+ | 主要矛盾是哪几个 | `pareto` | `waterfall` | 类别 >7 → 合并 |
19
+ | 转化/流失在哪一环 | `funnel` | `sankey` | 层 >5 → 改 `hbar` |
20
+ | 多对多的流向 | `sankey` | `network` | 节点 >12 / 流带 >24 → 拆页 |
21
+ | 谁和谁相连 | `network` | `diagram` | 节点 >18 / 边 >30 → 拆页 |
22
+ | 两期谁升谁降 | `slope` | `dumbbell` | 系列 >6 → 取 Top 6 |
23
+ | 单指标前后对比(多对象) | `dumbbell` | `vsbar` | 行 >6 → 拆页 |
24
+ | 实际 vs 目标(含区间) | `bulletchart` | `bullet` | 行 >6 → 拆页 |
25
+ | 达成率(多指标同心) | `radialbar` | `gauge` | 环 >5 → 改 `bullet` |
26
+ | 一个值够不够 | `gauge` | `radialbar` | 单值叙事,勿与图并存 |
27
+ | 分布不是均值 | `boxplot` | `dotplot` | 组 >8 → 拆页 |
28
+ | 双维定位 + 第三维权重 | `bubble` | `scatter` | 气泡 >8 → 标注关键项 |
29
+ | 六维能力画像 | `radar` | `rose` | 维度 >6 → 拆两组 |
30
+ | 区间波动(开高低收) | `candlestick` | `line` | 蜡烛 >12 → 聚合 |
31
+ | 多项目完成度 | `progress` | `bullet` | 行 >6 → 拆页 |
32
+ | 迷你趋势(卡内) | `sparkline` | — | 只用于指标卡,不与大图并存 |
33
+
34
+ ## 七种最常见的误用(出现即改判)
35
+
36
+ 1. 用 `bar` 表达占比 → 改 `donut`/`stackline`/`waffle`。
37
+ 2. 用 `donut` 表达 8 个类别 → 合并或改 `treemap`。
38
+ 3. 用 `line` 表达类别对比(无时间轴)→ 改 `hbar`。
39
+ 4. 用 `table` 表达趋势 → 改 `line`/`area`。
40
+ 5. 用均值型图表表达分布 → 改 `boxplot`/`dotplot`。
41
+ 6. 同一页放两张同型图 → 改 `split`/`halftable` 并让两图**编码不同维度**。
42
+ 7. 多系列图用单色明度阶梯(分不清) → 用 `f-c1~c5` 编码色板(见 playbook §八)。
@@ -45,7 +45,9 @@
45
45
  | 同页放两张同型图 | 两个视觉重心互相打架 | 改 `split` / `halftable` 并让两图**编码不同维度** |
46
46
  | 多系列图用单色明度阶梯 | 三条线分不清谁是谁 | `f-c1~c5` / `s-c1~c5` 编码色板(见 `design-system.md` §9b) |
47
47
 
48
- ### 66-2 多样性纪律(校验器硬拦 · 阈值单源 `layout-constants.json` `charts.variety`)
48
+ ### 66-2 多样性纪律(校验器硬拦 · 参数单源 `layout-constants.json` `charts.variety`)
49
+
50
+ > **preferCoreFirst**:优先用核图 8 拉开多样性;`charts-extended` / advanced **意图命中才加载**。advanced 一旦使用即计入类型数下限(不罚);**禁止**为过 `minTypes` 硬上冷门图。
49
51
 
50
52
  1. **类型数下限**:全篇不同 `data-chart` 类型数 ≥ `min(minTypes[mode], ⌈图表页数 × 0.6⌉)`(research 上限 6 / presentation 4 / architecture 3)。
51
53
  2. **不连续同型**:相邻图表页不得使用同一 `data-chart` 类型——读者视角就是"又一张一样的图"。
@@ -1,28 +1,37 @@
1
- # 图表全库(逻辑索引 · 节级物理文件)
1
+ # 图表全库(逻辑索引 · 纪律优先 · 按需取码)
2
2
 
3
- > 本文件已拆分,**禁止整读**。§编号保持不变。取码入口:
3
+ > 本文件已拆分,**禁止整读**物理大文件。§编号跨文件稳定。取码:
4
4
  > `python scripts/extract_snippet.py --file charts.md --section <编号>`
5
+ > 或 `--chart <类型>`(自动路由)。
5
6
 
6
- | § 范围 | 物理文件 |
7
- |--------|----------|
8
- | §16、17、18、19、20、21 … | `charts-basic.md` |
9
- | §52、53、54、55、57、58 … | `charts-extended.md` |
10
- | §64、66 … | `charts-discipline.md` |
7
+ ## 读序(P1-3 facade · 不缩减 registry)
11
8
 
12
- 原始前言与说明保留如下(规范正文已迁出)。
9
+ 1. **先纪律**:`charts-discipline.md`(§64 合理性 · §66 误用与多样性)——选型与反模式。
10
+ 2. **核图 8**(Mode A / Fast 默认池):`bar` · `hbar` · `line` · `donut` · `progress` · `area` · `stack` · `dualline` → 代码在 `charts-basic.md`。
11
+ 3. **基础扩展**:其余 basic 类型按意图取节(仍属 `charts-basic.md`)。
12
+ 4. **高级 / extended**:waterfall、sankey 相关形状、boxplot… → **意图命中才读** `charts-extended.md`;勿预读。
13
+ 5. **信息图页型**(非 `chart.type`):`infographics.md` §71–§77。
14
+
15
+ **多样性地板不变**:`charts.variety.minTypes.presentation ≥ 4`(及 B/C 对应下限);registry 36 种不删。
16
+ **preferCoreFirst**:先拉开核图 8;advanced 使用时**计入** minTypes(不罚),但**禁止预读/默认选用** `charts-extended.md`——仅意图命中时 `extract_snippet.py --chart`;**禁**为凑下限垫冷门图。
17
+
18
+ | § 范围 | 物理文件 | 何时读 |
19
+ |--------|----------|--------|
20
+ | §64、§66 | `charts-discipline.md` | **默认先读**(误用/多样性) |
21
+ | §16–§31、§29b、§35 等 | `charts-basic.md` | 核图与常规图代码 |
22
+ | §52–§70(除纪律节) | `charts-extended.md` | advanced / 意图命中 |
13
23
 
14
24
  # 图表全库(纯 SVG · `data-chart` 标记)
15
25
 
16
- 复制即用。所有类名依赖 `design-system.md` 的 token;版式与页型见 `components.md`,复杂信息图页型见 `infographics.md`。
26
+ 复制即用。类名依赖 `design-system.md` token;版式见 `components.md`;复杂信息图见 `infographics.md`。
17
27
 
18
- **约定**:图表 svg 一律加 `class="chart" data-chart="类型"`(**36 种登记类型**:donut / multidonut / pie / radar / gauge / rose / bar / stack / stackline / waterfall / line / dualline / area / scatter / bubble / funnel / gantt / hbar / vsbar / treemap / progress / sparkline / sankey / slope / dumbbell / lollipop / marimekko / dotplot / bulletchart / waffle / boxplot / pareto / radialbar / streamgraph / candlestick / network),供动效脚本与 `validate_report.py` 识别。**类型登记表与最小尺寸的唯一事实源 = `scripts/layout-constants.json` 的 `charts`**(新增类型必须同时登记 `types` 与 `minSize`)。
28
+ **约定**:图表 svg 一律 `class="chart" data-chart="类型"`(**36 种登记**:donut / multidonut / pie / radar / gauge / rose / bar / stack / stackline / waterfall / line / dualline / area / scatter / bubble / funnel / gantt / hbar / vsbar / treemap / progress / sparkline / sankey / slope / dumbbell / lollipop / marimekko / dotplot / bulletchart / waffle / boxplot / pareto / radialbar / streamgraph / candlestick / network)。事实源 = `scripts/layout-constants.json` → `charts`(`types` + `minSize`)。
19
29
 
20
- > **编号说明**:跨文件唯一稳定编号(§1–§77)。本文件收录图表 §16–§31、§29b、§35、§52–§70。
21
- > **六类信息图**(sankey / treemap / boxplot / network / marimekko / streamgraph)**不作为 `chart.type`**——它们是**专属页型**,HTML 写法见 `infographics.md` §71–§77。
30
+ > **编号说明**:跨文件唯一稳定编号(§1–§77)。图表 §16–§31、§29b、§35、§52–§70。
31
+ > **六类信息图**(sankey / treemap / boxplot / network / marimekko / streamgraph)**不是** `chart.type`——专属页型见 `infographics.md`。
22
32
 
23
33
  ---
24
34
 
25
- # 第一部分 · 基础图表
26
-
27
- > 单维对比 / 趋势 / 占比 / 分布等常规图表;多系列配色见 §29b。
35
+ # 第一部分 · 基础图表(核图优先)
28
36
 
37
+ > 单维对比 / 趋势 / 占比 / 分布;多系列配色见 §29b。Mode A 默认从核图 8 起选。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **何时读**:写正文、调密度、去 AI 味、处理引用与待核实标注时。**何时不读**:定模式/选版式阶段(用 `playbook.md`)。
4
4
  > **取节**:`python scripts/extract_snippet.py --task content-rules`(密度/字数/去AI味打包)。整读 30KB 视为浪费。
5
- > **目录**:一 文字 · 一-b 图标 · 一-c 彩色 · 二 去AI味 · 三 数据化 · 四 密度 · 四-b 复杂布局 · 四-c 内容过多 · 四-d 丰富度分级 · 四-e 细节保全 · 四-f 表格字号与内边距 · 五 引用 · 五-b 待核实 · 六 章节骨架 · 七 交付自查 · 八 research 规则
5
+ > **目录**:一 文字 · 一-b 图标 · 一-c 彩色 · 二 去AI味 · 三 数据化 · 四 密度 · 四-b 复杂布局 · 四-c 溢出处置(禁截断) · 四-d 丰富度分级 · 四-e 细节保全 · 四-f 表格字号与内边距 · 五 引用 · 五-b 待核实 · 六 章节骨架 · 六-b Mode A 主张标题 · 七 交付自查 · 八 research 规则
6
6
 
7
7
  ## 核心判断标准(v8:先保全,后呈现)
8
8
 
@@ -18,15 +18,17 @@
18
18
 
19
19
  ---
20
20
 
21
- ## 一、文字:短、断、可念
21
+ ## 一、文字:短、断、可念(结构优先 · 禁为疏朗而删)
22
22
 
23
- | 位置 | 上限 |
23
+ > **反截断**:下列是**结构引导**,不是「超字数就删掉」的硬砍刀。长文先列表化 / 拆卡 / 拆页,**禁止**静默截断或丢掉 so-what / 证据。详规见 `presentation-craft.md`「长文与信息承载」。
24
+
25
+ | 位置 | 结构引导(非删除许可证) |
24
26
  |------|------|
25
- | 章节导语(lead) | ≤ 2 行,≤ 60 字 |
26
- | 卡片内正文 | **禁止超过 3 行纯段落**,超过一律转列表 |
27
- | 单句长度 | ≤ 40 字,超过必须断句 |
28
- | 单个列表项 | ≤ 2 行,≤ 45 字 |
29
- | 一屏核心主张 | 只能有 **1 个** |
27
+ | 章节导语(lead) | 宜 ≤2 行;超长 → 拆成导语 + 列表,或挪到下一页主张页 |
28
+ | 卡片内正文 | 纯段落宜短;**超过约 3 行 → 转列表 / 拆成多卡**,勿压行删义 |
29
+ | 单句长度 | 宜断句(约 40 字换气);超长 → 断句或分条,勿删判断 |
30
+ | 单个列表项 | 宜 1–2 行可读;证据句可略长——放不下就**加行/拆项/拆页**,勿截断加省略号充数 |
31
+ | 一屏核心主张 | 只能有 **1 个**;证据可用次要卡/列表/跟进页承载 |
30
32
 
31
33
  句式:主动句;数字前置;结论前置;把长定语拆成并列。
32
34
 
@@ -150,26 +152,28 @@ DGIG: 数据 = 能自我增强的生产资料
150
152
 
151
153
  **目标:充实但不拥挤,留白但不空旷。**
152
154
 
153
- ### 密度基准
155
+ ### 密度基准(建议量 · 超限先改结构)
154
156
 
155
- | 元素 | 建议量 |
157
+ | 元素 | 结构建议 |
156
158
  |------|--------|
157
- | 每屏并列单元(卡片/图/表) | ≤ 8 个(research ≤12) |
158
- | 单卡片列表项 | ≤ 4 条(research ≤5) |
159
- | 单卡片正文行数 | ≤ 3 行 |
159
+ | 每屏并列单元(卡片/图/表) | 演示宜 ≤8(research ≤12);更多 → **拆屏或改表**,勿删条目凑数 |
160
+ | 单卡片列表项 | 宜 3–5 条;更多 → 拆卡 / 两组 / 跟进页,**勿截断条目文字** |
161
+ | 单卡片正文 | 纯段落宜短;长论证 → 列表化或多卡,不靠删句疏朗 |
160
162
  | 指标卡一屏 | 4–6 个 |
161
- | 表格一屏行数 | ≤ 8 行(research 密表 ≤16) |
162
- | 单个列表项 | ≤ 2 行 |
163
+ | 表格一屏行数 | ≤8 行(research 密表 ≤16);超限 → Top N + 附录全表 |
164
+ | 单个列表项 | 宜可读完整;投影场景避免墙式长句,但**完整证据优先于字数帽** |
163
165
 
164
166
  ### 空间利用
165
167
 
166
- - **避免大面积空白**:卡片内容太少时,减少卡高或改 2 列为 3 列;不要为凑满栅格留半空卡。
167
- - **避免塞爆**:并列单元超 8 个就分两屏;列表超 4 条就拆成两组或提炼。
168
+ - **避免大面积空白**:卡片内容太少时,减少卡高或改 2 列为 3 列;不要为凑满栅格留半空卡(半空与塞爆**同样不合格**)。
169
+ - **避免塞爆**:并列单元超上限 → 分两屏 / 改密表;列表过长 → 拆组或跟进页——**提炼≠删除决策必需信息**。
170
+ - **Mode A 密度许可**:主张清楚时,卡片/列表页允许偏密;一主张可带充分证据卡,证据装不下就加页,不砍 so-what。
168
171
  - **留白节奏**:章节上下留白一致(`clamp(56px,8.5vh,116px)`),栅格间距一致(`clamp(16px,1.6vw,28px)`),卡片内边距一致(`clamp(20px,2vw,30px)`)。
169
- - **对齐**:同类元素左对齐同一轴线;数字列右对齐或 `tabular-nums`;标题与正文左缘对齐。
172
+ - **对齐**:同类元素左对齐同一轴线(共享左缘/顶边);数字列右对齐或 `tabular-nums`;标题与正文左缘对齐;列节奏跨页稳定。
170
173
 
171
174
  **✗ 塞爆(一屏 10 卡 × 每卡 6 条,投影不可读)** → 拆两屏各 5 卡,或 10 卡压成一张 `table`(research 密表 ≤16 行)。
172
175
  **✗ 半空卡(2 条内容占 4 条的卡高)** → 减卡高或改 2 列为 3 列,不留"凑数卡"。
176
+ **✗ 为疏朗而截断**(条目末「…」、证据消失、so-what 被砍)→ 按 §四-c 重排/拆页,禁止静默丢内容。
173
177
 
174
178
  ### 一页好报告的观感
175
179
 
@@ -220,7 +224,7 @@ DGIG: 数据 = 能自我增强的生产资料
220
224
  - 金字塔:层级递进 3–5 层,自上而下逐层加宽,强调层 ≤1。
221
225
 
222
226
  9. **拼贴页(`.g-bento`,`components.md` §46b)/ 交错图文页(`.stagger`)/ 键值对照(`.kv`)/ 素材图片族(`.media*`,`components.md` §11c)**
223
- - 拼贴:一屏 4–7 个**不等大**单元(主卡跨 2 列/2 行),适合经营快照 / 能力矩阵;单格内容 ≤3 行。
227
+ - 拼贴:一屏 4–7 个**不等大**单元(主卡跨 2 列/2 行),适合经营快照 / 能力矩阵;单格宜短(约 3 行);更长 → 拆格或跟进页,勿截断。
224
228
  - 交错图文:3–4 组「图 ↔ 文」交替,一组只说一件事;比左右分栏更有节奏,但**组数 ≤4**(多了变流水账)。
225
229
  - 键值对照:≤6 组,适合口径/参数/对照项的轻量表达,比表格省空间。
226
230
  - 素材图片(`components.md` §11c):**六版式**按内容选——单张实拍/横幅用 `full`(3:1)|图文互证用 `half`(左图右注,注解 3–4 条)|章节情绪页用 `bleed`(21:9)|多张并列互证用 `grid`(2/3/4/6 张,4:3)|前后/方案对照用 `compare`(恰好 2 张 + A/B 角标)|客户生态用 `wall`(Logo 墙)。
@@ -237,18 +241,20 @@ DGIG: 数据 = 能自我增强的生产资料
237
241
 
238
242
  ---
239
243
 
240
- ## 四-c、内容过多怎么办(先升级承载形态,最后才精简)
244
+ ## 四-c、内容过多怎么办(溢出铁律 · 禁止静默截断)
245
+
246
+ > **用户硬原则**:Lots of text **must NOT** be deliberately compressed or deleted just to look like a sparse demo deck. 优先合理卡片、列表、分节、换形态、多页分解。
241
247
 
242
- 一页放不下时,按顺序处理(高度预算表见 `design-system.md` §1c:1080p 内容预算 ≈830px,768p ≈570px):
248
+ 一页放不下时,按**此顺序**处理(高度预算见 `design-system.md` §1c;常量 `containers.overflowRule`):
243
249
 
244
- 1. **升级承载形态**:文字列举 → 列表 → 密表 → 图(矩阵→散点、清单→密表)。**同一份信息换更省空间的形态,而不是丢掉它。**
245
- 2. **换组合版式**:单件页改**组合页**(主件 + 从件 + 注释层,见 `components.md` §46c 与 `references/playbook.md` §四)——把两张单件页的内容合进一页的主从结构。
246
- 3. **分区**:一页分上下/左右区,各区独立收敛(`rows-2/3`、`g-3`、`g-aside`、`g-hero-full`)。
247
- 4. **拆页**:仍不行就拆两页(01a/01b)。**拆页必须保持信息完整**——续表 / 附录 / `note` 交代,否则拆页 = 信息损失。**宁拆勿挤、勿溢出页边界。**
248
- 5. **精简(最后手段)**:只删**决策非必需**的信息;口径列 / 时间列 / 维度**不许砍**。
250
+ 1. **重构承载**:段落 → 列表 / 卡片 / 表 / 图 / 组合版式。**同一份信息换形态,不丢掉。**
251
+ 2. **拆页 / 分章**:追加页、01a/01b、多部分章节;推荐序列 **议程 → 主张 → 证据卡 → 明细列表**(`recommend_layout` 高容量意图会建议多页)。拆页须信息完整(续表 / 附录 / `note` 交代)。
252
+ 3. **换布局形态**:V1–V4、多列、卡栅格、`g-side` / `g-bento` / `rows-2/3`;单件改组合页(主件+从件+注释层,`playbook` §四)。
253
+ 4. **有限 `fontShrink`**:仅在 1–3 步之后;最多 4 档;floor presentation/arch 10pt、research 9pt。
254
+ 5. **禁止**:静默截断(省略号充数)/ 砍 so-what / 砍证据与口径列 / 为「看起来疏」删决策必需信息。**精简只允许删决策非必需项,且永不作为第一步。**
249
255
 
250
- **禁止**:① **无限**缩字号 / 缩图表硬塞(允许按 `containers.fontShrink` 有限下探:最多 4 档、模式 floor presentation/arch 10pt / research 9pt);② 让内容超出页面被裁;③ **把"精简"当第一手段**(这是"内容变简单、细节丢失"的根因)。
251
- **说明**:第 2 步是 v8 新增——组合版式让"更多内容"落在**版式结构**上,而不是落在"删掉"或"缩小字号"上。
256
+ **禁止**:① **无限**缩字号硬塞;② 内容越出页面或归属容器被裁;③ 把"精简/压缩"当第一手段;④ **溢出却不拆页**(校验 `LAYOUT_QA_OVERFLOW_NO_SPLIT`)。
257
+ **单页字数预算**(`checkBudgets.char`)是预警与结构提示,**不是**「字多→删字」许可证;字多而结构合理(卡/列表)的 Mode A 页允许偏密。
252
258
 
253
259
  > 反向情况——内容明显不足一屏且接近满屏观感更好时(Hero/Agenda/收尾章/大指标页),给该页加 `band--fit` 垂直居中,避免"上半页挤、下半页空"。
254
260
 
@@ -401,25 +407,39 @@ DGIG: 数据 = 能自我增强的生产资料
401
407
 
402
408
  ```
403
409
  [eyebrow 小标] 0X · 关键词
404
- [主标题] 一句主张(≤ 20 字)
410
+ [主标题] 一句主张/行动句(≤ 20 字;禁纯话题标签)
405
411
  [导语] ≤ 2 行,说明本章回答什么问题
406
412
  [主体] 图 / 表 / 列表
407
413
  ```
408
414
 
409
415
  结尾章:**下一步 3 条**(列表)+ 参考资料。
410
416
 
417
+
418
+ ## 六-b、Mode A 主张 / 行动标题(action title)
419
+
420
+ > 仅 `data-mode="presentation"`。与 research「结论句 ≥12 字」同向,但演示可更短口语——**仍须是主张,不是话题**。
421
+
422
+ - ✗ 话题标签:「现状分析」「市场格局」「风险与挑战」「项目概述」「总结」
423
+ - ✓ 主张/行动句:「试点卡在治理——规模化分水岭已现」「Q3 增速转正,渠道贡献六成」「先守利润,再谈扩张」
424
+ - 一页标题 = 一页最重要的那个判断;写不出主张 → 先想清楚再排版。
425
+ - 校验:`validate_report` 对纯话题标题 **WARN**(硬 FAIL 过脆);正式交付宜清零。
426
+
427
+
411
428
  ---
412
429
 
413
430
  ## 七、交付前自查(内容侧)
414
431
 
415
- - [ ] 卡片里出现 4 行以上连续文字 → 转列表
416
- - [ ] 一句话超过 40 字 → 断句
432
+ - [ ] 卡片里出现大段连续文字 → **转列表 / 拆卡**(勿删义凑疏朗)
433
+ - [ ] 一句话过长难念 → 断句或分条(勿截断加「…」)
417
434
  - [ ] 外部数字没有 `[n]` → 补标记
418
435
  - [ ] 占比数据只用文字 → 改环形图/条
419
- - [ ] 同一屏 3 个以上主张 → 拆屏
436
+ - [ ] 同一屏 3 个以上主张 → 拆屏(证据可留作次要卡或跟进页)
437
+ - [ ] Mode A 标题是话题词(「现状分析」等)→ 改主张/行动句
420
438
  - [ ] 出现"赋能/彰显/格局/不仅…而且/大幅提升" → 替换
421
439
  - [ ] 结尾是"未来可期"式空话 → 换具体下一步
422
- - [ ] 有半空卡片或塞爆的一屏 → 调整密度
440
+ - [ ] 半空卡 **或** 塞爆一屏 → 调结构(两者都不合格);禁止靠删证据「变空」
441
+ - [ ] 条目/结论被静默截断或 so-what 失踪 → 按 §四-c 重排/拆页,恢复实质
442
+ - [ ] 页高溢出却未拆页/未换形态 → FAIL 级缺陷,先结构后字号
423
443
  - [ ] 图表小于尺寸下限(环形 <140px / 柱折线 <200px 高)→ 放大或减图
424
444
  - [ ] 接近满屏的页(Hero/Agenda/收尾)没加 `band--fit` → 补上垂直居中
425
445
  - [ ] 图表 svg 没有 `data-chart` 类型标记 → 补上(校验脚本要用)
@@ -429,7 +449,7 @@ DGIG: 数据 = 能自我增强的生产资料
429
449
  - [ ] 一屏图标 >8 个 → 减到只保留路标性图标
430
450
  - [ ] 内容约六七成屏的页悬空居中 → 改 `band--top`;长结构页(参考资料/附录)→ 加 `band--flow`
431
451
  - [ ] 混排栅格(图+卡/图+文)没写对齐 → 加 `a-start` 或 `a-c`
432
- - [ ] 某页内容超一屏(校验器「页高溢出估算」FAIL)→ 按四-c 顺序:列表化/精炼 → 换组合/拆页 → 最后才有限缩字号(`fontShrink`)
452
+ - [ ] 某页内容超一屏(「页高溢出估算」FAIL)→ 按四-c:**重构→拆页→换形态→有限 fontShrink**;禁静默截断
433
453
  - [ ] 图表 `data-chart` 类型未在 `layout-constants.json` `charts.types` 登记 → 补登记并配 `minSize`
434
454
  - [ ] 热力矩阵/达成对比用了第二色相(红绿)→ 改回强调色明度阶梯(`--1/--2/--3` + 中性)
435
455
  - [ ] **无法核实/待确认的数字与判断没用 `.tbd` 标色** → 标出来,并加 `.tbd-legend` 或 `.flagbar` 说明
@@ -0,0 +1,62 @@
1
+ # 默认生成面(L1.5 · Mode A 主读 · ≤6KB)
2
+
3
+ > **Mode A / Fast 演示的首要读面**(正式场合 · 大气演讲)。完整决策见 `playbook.md`;工艺清单见 `presentation-craft.md`;插画/配图见 `illustration-layout.md`;代码用 `extract_snippet.py`。
4
+ > Mode B/C 能力保留——**需要时**再读 modes / layouts-*;勿把密排/架构默认反向污染 A。
5
+
6
+ ## A 默认三件套
7
+
8
+ 1. **12 默认页型**(下表)
9
+ 2. **8 核心图**(核图池;advanced 按需)
10
+ 3. **V1–V4** 演讲构图(≈ P1–P4)
11
+
12
+ **骨架分层(A)**:**主力** P1–P4 + P6/P10;**扩展** P5;**次级** P7–P9、P11–P12(意图命中再用,勿默认轮换)。
13
+ **图表**:**核图 8** 为默认池;`charts-extended.md` / advanced **仅意图命中才读/才用**(禁为凑多样性硬上)。
14
+ **按需**:Mode B Exhibit/密表 · Mode C 全幅架构——意图命中再读 modes / layouts-*。
15
+
16
+ ## 12 默认页型
17
+
18
+ | 意图 | pageType | A 主力 skel | 备注 |
19
+ |------|----------|-------------|------|
20
+ | 封面 | cover | **P1** | |
21
+ | 议程 | agenda | **P2** | |
22
+ | 大数/KPI | kpi | **P3** | V3 |
23
+ | 要点 | points | **P4** | |
24
+ | 卡片 | cards | P5 | 扩展(非默认轮换) |
25
+ | 指标带 | metrics | **P2** | |
26
+ | 对比 | comparison | **P4** | V4 |
27
+ | 表 | table / halftable | **P4** / P1 | A 少用次级 P8;密表意图才 P8 |
28
+ | 图证 | exhibit / bar | **P1** / P2 | A 演讲图文;P8 为 B 证据次级 |
29
+ | 双栏论述 | twocol | **P6** | 主力 |
30
+ | 结构/泳道 | diagram / lane | **P10** | 全幅结构次级 P9;一主两从次级 P11 |
31
+ | 收尾 | closing | **P1** | |
32
+
33
+ 选型:`recommend_layout.py --mode A|B|C`;矩阵见 playbook §三/§四。演示优先 V1–V4 对应页。
34
+
35
+ ## 8 核心图
36
+
37
+ `bar` · `hbar` · `line` · `donut` · `progress` · `area` · `stack` · `dualline`
38
+
39
+ 极偏占比 → **禁 donut/pie**,改 KPI/进度/对比条(V3)。简单图禁全幅。
40
+ **多样性**:先拉开核图 8;advanced 用了也计入 `minTypes`(不罚),但**只在内容需要时选**,绝不为凑下限垫冷门图。默认**不**预读 `charts-extended.md`。
41
+
42
+ ## V1–V4(演示默认)
43
+
44
+ | V | 结构 | 何时 |
45
+ |---|------|------|
46
+ | V1 | 主视觉 + 右注解 | 默认图文 |
47
+ | V2 | 上图下带 | 总览→分解 |
48
+ | V3 | 大数 + 佐证 | 极偏/单点结论 |
49
+ | V4 | 双图对照 | 前后/方案 |
50
+
51
+ ## 命令链(模型单写 · Mode A 含 layout-qa)
52
+
53
+ ```
54
+ scaffold_report → 只填 REPORT_MODEL → render_from_model --inplace
55
+ → validate_report --strict # presentation 自动 --layout-qa
56
+ → quality_gate --deliver →(可选)pptx
57
+ ```
58
+
59
+ ## 长文与密度(Mode A)
60
+
61
+ 一屏一主张;证据用卡/列表或跟进页。**禁止**为稀疏 demo 感删实质。溢出顺序:重构 → 拆页 → 换 V/栅格 → 有限 fontShrink。详见 `presentation-craft.md`「长文与信息承载」。
62
+ 配图/插画页:caption+so-what、安全边距、勿与大图双重心——`illustration-layout.md`。
@@ -2,12 +2,12 @@
2
2
 
3
3
  > **生成报告时读本文件**:设计哲学、CRAP/MD3、页面高度模型、PPTX 比例尺、12 列网格、语义字阶、
4
4
  > 结构 token、排版类、布局工具、**SVG 主题语义类**(图表配色必读)。
5
- > **组件 CSS 实现目录**(顶栏/卡片/列表/表格/页脚/动效等)在 `design-system-engine.md`——
5
+ > **组件 CSS 实现目录**(顶栏/卡片/列表/表格/页脚/动效等)在 `docs/archive/refs/design-system-engine.md`——
6
6
  > 生成时用 `components-atoms.md` 的组件写法即可,**勿整读 engine 文件**。
7
7
 
8
8
  本文件提供**设计哲学、Token、栅格、语义字阶、SVG 语义类**——全部风格复用。
9
9
  **颜色 / 字体 / 圆角 / 阴影的实际值不在此文件**,由 `references/styles.md` 中你所选的那套风格通过 `data-style` 覆盖块注入。
10
- **组件 CSS 类实现目录**(顶栏/卡片/列表/表格/页脚/动效)在 `design-system-engine.md`——生成时用 `components-atoms.md` 写法即可。
10
+ **组件 CSS 类实现目录**(顶栏/卡片/列表/表格/页脚/动效)在 `docs/archive/refs/design-system-engine.md`——生成时用 `components-atoms.md` 写法即可。
11
11
 
12
12
  配合方式(三模式独立模板):
13
13
  1. 从 `assets/templates/{presentation|research|architecture}.html` 复制对应模式模板起步(模板自带模式密度层与专属组件)。
@@ -117,7 +117,7 @@
117
117
  - **识别**:正文或模型里出现 `<a class="cite">` 字面量;整页只有标题;0.5% vs 99.5% 还用 donut;简单 2 类图占满整页。
118
118
  - **错误码**:`HTML_TAG_IN_TEXT` / `TITLE_ONLY_PAGE` / `UNDERFILL_PAGE` / `CHART_SKEW_INVALID` / `CHART_OVERSIZE` / `TEXT_INCOMPLETE`
119
119
  - **根因**:双写未净化(标签进模型);过空页只 WARN;图表面积与信息复杂度脱钩;极偏数据误用占比图。
120
- - **修复**:① 模型字段纯文本,引用写 `[n]`;② 空页补证据与承载或并页;③ 极偏改 V3(KPI/进度/对比条);④ 简单图缩到 18–28% 高并配注解带(V1–V4)。详见 `reform-plan.md` 与 `playbook.md` §三-b。
120
+ - **修复**:① 模型字段纯文本,引用写 `[n]`;② 空页补证据与承载或并页;③ 极偏改 V3(KPI/进度/对比条);④ 简单图缩到 18–28% 高并配注解带(V1–V4)。详见 `layout-constants.qualityGates` 与 `playbook.md` §三-b。
121
121
 
122
122
  ### F16 已登记图表静默降级 `chart_fallback_forgery`
123
123
 
@@ -212,3 +212,16 @@
212
212
  - so-what 连续 3 页空缺或套话(→ F15);引用 0 条且内容含外部数字(→ §五 引用纪律,补 `[n]` 或标 `.tbd`)。
213
213
 
214
214
  > 自查后重跑 `quality_gate.py`;rubric 启发式只覆盖可静态判定的部分,最终以 LLM 按 `evals/rubric.schema.json` 复评或人眼对照为准。
215
+
216
+ ## F18 · 长文截断 / 溢出未拆页 / 半空卡(v9.1)
217
+
218
+ | 信号 | 错误码 | 修复 |
219
+ |------|--------|------|
220
+ | 列表/卡/结论以「…」砍义 | `LAYOUT_QA_TRUNCATION` | 恢复完整表述;改列表化/拆卡/拆页,禁止省略号充数 |
221
+ | 页高溢出且无续页/换形态信号 | `LAYOUT_QA_OVERFLOW_NO_SPLIT` | 按 overflowRule:重构→拆页→换形态→fontShrink |
222
+ | 同页多卡过半正文过短 | `LAYOUT_QA_HALF_EMPTY` | 减卡高/改列数,或合并卡;勿留凑数半空卡 |
223
+ | 图卡混排无对齐类 | `LAYOUT_QA_ALIGN_RHYTHM` | 加 `a-start` / `a-c`;共享左缘顶边 |
224
+ | PPTX 页脚 y 跨页漂移 | `CHROME_DRIFT` | 锁死 chrome 槽位几何(pageTypes) |
225
+
226
+ 反模式:为稀疏 demo 感删证据 / so-what。原则见 `presentation-craft.md`「长文与信息承载」。
227
+