@topmindspace/tms-skills 2.0.0 → 2.0.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 (99) hide show
  1. package/CHANGELOG.md +139 -123
  2. package/README.md +126 -103
  3. package/bin/tms-skills.js +160 -160
  4. package/package.json +48 -48
  5. package/top-ppt-html/README.md +254 -253
  6. package/top-ppt-html/SKILL.md +111 -111
  7. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +3873 -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-architecture-spectrum.html +3873 -3926
  10. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +167 -167
  11. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +4272 -4325
  12. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +320 -320
  13. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +4272 -4325
  14. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +320 -320
  15. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +4272 -4325
  16. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.model.json +320 -320
  17. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +5474 -5527
  18. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +913 -913
  19. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +5474 -5527
  20. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +913 -913
  21. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +5474 -5527
  22. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.model.json +913 -913
  23. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +5474 -5527
  24. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +913 -913
  25. package/top-ppt-html/assets/pptx-export.js +1944 -1944
  26. package/top-ppt-html/assets/style-gallery.html +559 -589
  27. package/top-ppt-html/assets/templates/architecture.html +3675 -3728
  28. package/top-ppt-html/assets/templates/engine.css +787 -840
  29. package/top-ppt-html/assets/templates/presentation.html +3685 -3738
  30. package/top-ppt-html/assets/templates/research.html +3964 -4017
  31. package/top-ppt-html/assets/templates/ui.js +520 -520
  32. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  33. package/top-ppt-html/assets/theme-overview-presentation.png +0 -0
  34. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  35. package/top-ppt-html/assets/theme-overview.png +0 -0
  36. package/top-ppt-html/evals/prompts.csv +15 -15
  37. package/top-ppt-html/evals/rubric.schema.json +25 -25
  38. package/top-ppt-html/evals/run_evals.py +220 -220
  39. package/top-ppt-html/evals/trace.example.json +16 -16
  40. package/top-ppt-html/package-lock.json +175 -0
  41. package/top-ppt-html/package.json +30 -35
  42. package/top-ppt-html/references/charts-basic.md +624 -624
  43. package/top-ppt-html/references/charts-discipline.md +108 -108
  44. package/top-ppt-html/references/charts-extended.md +482 -482
  45. package/top-ppt-html/references/charts.md +28 -28
  46. package/top-ppt-html/references/components-atoms.md +624 -624
  47. package/top-ppt-html/references/components.md +30 -30
  48. package/top-ppt-html/references/content-rules.md +490 -490
  49. package/top-ppt-html/references/design-system-engine.md +235 -235
  50. package/top-ppt-html/references/design-system.md +471 -478
  51. package/top-ppt-html/references/failure-modes.md +214 -214
  52. package/top-ppt-html/references/high-fidelity.md +127 -127
  53. package/top-ppt-html/references/icons.md +397 -397
  54. package/top-ppt-html/references/industry-benchmark.md +105 -105
  55. package/top-ppt-html/references/infographics-stats.md +308 -308
  56. package/top-ppt-html/references/infographics-structure.md +226 -226
  57. package/top-ppt-html/references/infographics.md +43 -43
  58. package/top-ppt-html/references/layout-grammar.md +315 -315
  59. package/top-ppt-html/references/layouts-architecture.md +108 -108
  60. package/top-ppt-html/references/layouts-combo.md +600 -600
  61. package/top-ppt-html/references/layouts-research.md +160 -160
  62. package/top-ppt-html/references/modes.md +254 -254
  63. package/top-ppt-html/references/outline-design.md +275 -275
  64. package/top-ppt-html/references/playbook.md +266 -266
  65. package/top-ppt-html/references/pptx-export.md +209 -209
  66. package/top-ppt-html/references/reform-plan.md +252 -252
  67. package/top-ppt-html/references/styles.md +336 -370
  68. package/top-ppt-html/references/tech-design.md +138 -138
  69. package/top-ppt-html/scripts/audit_css.py +109 -109
  70. package/top-ppt-html/scripts/audit_docs.py +176 -176
  71. package/top-ppt-html/scripts/audit_skill.py +220 -220
  72. package/top-ppt-html/scripts/audit_styles.py +293 -351
  73. package/top-ppt-html/scripts/build_examples.py +2276 -2276
  74. package/top-ppt-html/scripts/build_pptx.js +2380 -2380
  75. package/top-ppt-html/scripts/capture_theme_overview.js +78 -78
  76. package/top-ppt-html/scripts/checks_html.py +127 -127
  77. package/top-ppt-html/scripts/cross_verify.py +294 -294
  78. package/top-ppt-html/scripts/env_probe.py +158 -158
  79. package/top-ppt-html/scripts/extract_model.py +210 -210
  80. package/top-ppt-html/scripts/extract_snippet.py +374 -374
  81. package/top-ppt-html/scripts/gen_channel_a.js +214 -214
  82. package/top-ppt-html/scripts/layout-constants.json +3309 -3377
  83. package/top-ppt-html/scripts/layout_slots.json +830 -830
  84. package/top-ppt-html/scripts/lib_layout_regions.js +412 -412
  85. package/top-ppt-html/scripts/measure_height.py +178 -178
  86. package/top-ppt-html/scripts/model-schema.json +547 -547
  87. package/top-ppt-html/scripts/negative_tests.py +307 -307
  88. package/top-ppt-html/scripts/package_skill.py +291 -291
  89. package/top-ppt-html/scripts/prepare_images.py +341 -341
  90. package/top-ppt-html/scripts/probe_image_export.py +188 -188
  91. package/top-ppt-html/scripts/quality_gate.py +301 -301
  92. package/top-ppt-html/scripts/regression.py +307 -308
  93. package/top-ppt-html/scripts/render_compare.py +275 -275
  94. package/top-ppt-html/scripts/render_from_model.py +698 -698
  95. package/top-ppt-html/scripts/scaffold_report.py +1054 -1054
  96. package/top-ppt-html/scripts/section-file-map.json +104 -104
  97. package/top-ppt-html/scripts/sync_runtime.py +662 -662
  98. package/top-ppt-html/scripts/validate_pptx.py +1510 -1510
  99. package/top-ppt-html/scripts/validate_report.py +1456 -1456
@@ -1,127 +1,127 @@
1
- # 按需深度模式(高保真交付规范)
2
-
3
- > **何时读本文**:用户提出「高保真 / 1:1 / 精确还原 / 按图还原 / 正式交付 / 不能偏移 / 像素级 / 严格对照 / 逐页验收」,
4
- > 或页面含**复杂信息图**(桑基 / 流带 / 树图 / 马赛克 / 箱线 / 网络 / 玫瑰 / 径向条 / K 线 / 漏斗)时。
5
- >
6
- > **定位**:默认流程保持轻量(一次问询 + 自动生成 + 校验闭环)。深度模式是**自动升级**的加强档——
7
- > 多跑三道检查(容器级溢出已默认开启,深度模式再加**连续文本流**与**空间锚点**)、产出 manifest、并准备渲染对照材料。
8
- > **不引入** SHA-256 冻结签名与逐页人工验收确认(会显著拖慢生成,与本技能"一次问询 + 自动生成"的定位冲突)。
9
-
10
- ---
11
-
12
- ## 一、触发条件
13
-
14
- | 触发 | 判据 |
15
- |------|------|
16
- | **用户明示** | 命中 `layout-constants.json` `deepMode.triggers`:高保真 / 1:1 / 一比一 / 精确还原 / 按图还原 / 正式交付 / 不能偏移 / 像素级 / 严格对照 / 逐页验收 |
17
- | **内容含复杂信息图** | 页面用到 `deepMode.complexCharts` 中的图表类型(sankey / streamgraph / treemap / marimekko / boxplot / network / rose / radialbar / candlestick / funnel) |
18
-
19
- 命中任一 → 交付时按 §四 跑深度模式校验链。**不命中则不要跑**(保持轻量,避免无谓开销)。
20
-
21
- ---
22
-
23
- ## 二、深度模式多做的三件事
24
-
25
- 1. **连续文本流检查**(`CONTINUOUS_TEXT_FLOW`):语义连续句不得拆成多个独立文本框。
26
- 2. **空间锚点注册**(`ANCHOR_TITLE_MISALIGNED`):页头标题左边距必须对齐版心左边界。
27
- 3. **manifest + 渲染对照材料**:把可复现的事实登记下来,并准备人眼对照的产物。
28
-
29
- > 容器级溢出(`CONTAINER_OVERFLOW`)、表格语义字号(`TABLE_SEMANTIC_TYPE`)、表格密度(`TABLE_DENSITY`)
30
- > **默认就开启**(属交付基线,不属于深度模式)。
31
-
32
- ---
33
-
34
- ## 三、锚点容差(`layout-constants.json` `anchorTolerance`)
35
-
36
- | 项 | 值 | 含义 |
37
- |----|----|------|
38
- | `centerPct` | 2.0 | 中心点偏差上限(占参考框局部宽高比例)——用于人眼对照时的判据 |
39
- | `keyPx` | 6 | 关键锚点(图标 / 标签 / 箭头端点 / **页头标题左边距**)偏差上限(px @96dpi ≈ 0.0625in) |
40
- | `exactPx` | 3 | 用户要求 1:1 时的上限 |
41
-
42
- **优先级与容差**(人眼对照时按此判级):
43
-
44
- | 级别 | 元素 | 容差 | 超差等级 |
45
- |------|------|------|---------|
46
- | **P0** | 标题 / 主图 / so-what / 页脚 / 关键数字 / 核心面板 | 3px(最大 6px) | Critical |
47
- | **P1** | 普通卡片 / 图标 / 标签 / 箭头 / 表格 / 分隔线 | 4px(最大 8px) | High(正式交付不得存在) |
48
- | **P2** | 装饰线 / 点阵 / 纹理 / 重复刻度 / 背景纹样 | 6px(最大 12px) | Medium |
49
-
50
- **自动化部分**:`validate_pptx.py --deep` 自动核对**页头标题锚点**(`ANCHOR_TITLE_MISALIGNED`)——
51
- 这是"相对位置还原"的确定性代理,不需要参考图即可复现;其余 P0/P1/P2 元素在渲染对照页上人眼核对。
52
-
53
- ---
54
-
55
- ## 四、深度模式校验链
56
-
57
- ```bash
58
- # 1. 生成(同默认流程)
59
- python scripts/extract_model.py "<输出目录>/YYYY-MM-DD-主题.html"
60
- NODE_PATH=<pptxgenjs 所在 node_modules> <node> scripts/build_pptx.js "报告.pptx" --model="报告.model.json"
61
-
62
- # 2. 深度校验(--deep 把连续文本流与空间锚点纳入 strict 门禁;--emit-manifest 产出登记)
63
- python scripts/validate_pptx.py "报告.pptx" --strict --deep \
64
- --model="报告.model.json" --emit-manifest="报告.manifest.json"
65
-
66
- # 3. 渲染对照(可选,缺 LibreOffice 自动跳过)
67
- python scripts/render_compare.py "报告.pptx" --html "报告.html" --out "render-compare"
68
- ```
69
-
70
- ---
71
-
72
- ## 五、manifest 字段(`报告.manifest.json`)
73
-
74
- | 字段 | 内容 | 用途 |
75
- |------|------|------|
76
- | `chartChannels` | `expectedNative` / `expectedShape` / `actualChartParts` / `nativeOk` | 原生通道图表是否真的落成 chart part(可编辑数据) |
77
- | `dataTables` | 模型侧每个图表的 `pageType` / `chart` / `channel` / `dataTable` 策略 + PPTX 侧每页表格数 | 数据可追溯(非原生图表至少 `notes`) |
78
- | `images` | `declared`(模型声明的真实图片数)/ `actual`(PPTX 实际图片数)/ `placeholders`(配图占位数)/ `layouts`(每页版式 / `fit` / 图数 / 是否占位) | 默认零图片、声明式放行;占位符走原生形状不计入图片数 |
79
- | `anchors` | 每页 `title` / `left_in` / `expected_left_in` / `delta_in` / `tolerance_in` / `status` | 空间锚点注册(passed / failed / no-title-anchor) |
80
- | `containers` | 每页 `text_shapes` + `min_pad_in` | 容器清单(配合 `CONTAINER_OVERFLOW` 判定) |
81
- | `counts` | `errors` / `warnings` | 门禁结果摘要 |
82
-
83
- > manifest 只登记**可复现的事实**,不做签名冻结——需要复核时重跑即可得到同样结果。
84
-
85
- ---
86
-
87
- ## 六、渲染对照(`scripts/render_compare.py`)
88
-
89
- **产物**(默认输出到 `<pptx 同目录>/render-compare/`):
90
-
91
- | 文件 | 内容 |
92
- |------|------|
93
- | `deck.pdf` | LibreOffice 渲染的 PPTX PDF(`soffice --headless --convert-to pdf`) |
94
- | `page-01.png …` | PDF 逐页位图(需 `pdftoppm` / `mutool` / `magick` 之一) |
95
- | `compare.html` | **并排对照页**:左栏 HTML 报告(iframe)、右栏 PPTX(PDF 内嵌或位图)、上方自动偏差登记表 |
96
- | `deviations.json` | 自动可算偏差(页数区间 / 页数差 / 图表通道) |
97
-
98
- **依赖与降级**:
99
-
100
- - 无 LibreOffice → 跳过渲染,打印安装指引(可用 `SOFFICE` 环境变量指定可执行文件),**不阻断交付**。
101
- - 无 PDF 位图工具 → 保留 PDF,对照页右栏内嵌 PDF。
102
- - **视觉语义(底色系统 / 图表形态 / 留白节奏 / 曲线几何)仍需人眼在对照页上逐页确认**——脚本负责准备材料与算可量化偏差,不假装能自动判断"好不好看"。
103
-
104
- ---
105
-
106
- ## 七、人眼对照清单(渲染对照页上逐页过)
107
-
108
- - [ ] **底色系统**:页面底色 / 面板底色 / 结论条底色 / 页脚底色是否与 HTML 一致?有没有把内容区默认变成大面积纯白卡片?
109
- - [ ] **主图形态**:图表类型是否与 HTML 一致(柱是柱、环是环、流带是流带)?有没有被矩形化?
110
- - [ ] **曲线几何**:桑基流带 / 流带图的弯曲幅度与上下边界是否贴合?双边界是否都在(不是只画中心线)?
111
- - [ ] **标签避让**:标签有没有压住图标 / 节点 / 箭头 / 曲线 / 圆环?
112
- - [ ] **锚点位置**:页头标题、主图区、so-what、页脚是否落在与 HTML 相同的位置(P0 ≤3px、P1 ≤4px)?
113
- - [ ] **容器边界**:文字有没有越过卡片 / 单元格 / 结论条(不是只看页面边)?
114
- - [ ] **密度节奏**:整篇有没有连续 3 页同密度 / 同版式?
115
- - [ ] **可编辑性**:双击原生图表能"编辑数据";非原生图表的数据表在备注或页内表格里。
116
-
117
- ---
118
-
119
- ## 八、明确不采纳(及原因)
120
-
121
- | 业界做法 | 不采纳原因 |
122
- |---------|-----------|
123
- | ImageGen 逐页蓝图(生成 16:9 位图再逐页还原) | 环境依赖重;且与"单文件零外链 + pictures=0 默认"冲突。本技能以「锁定版式 + 常量单源 + 形状还原规则」达成同等的版式可复现性。 |
124
- | PowerPoint COM 渲染回归作为**硬门禁** | 需本机 PowerPoint;降级为可选路径(本文 §六),日常由 A 通道预览 + python-pptx 双裁判覆盖。 |
125
- | SHA-256 冻结签名 + 逐页人工验收确认 | 交互轮次与耗时显著增加,与「一次问询 + 自动生成 + 校验闭环」定位冲突;改为 manifest 登记(可复现、无需冻结)。 |
126
- | 禁止 `python-pptx`(必须只用 pptxgenjs) | 本技能用 pptxgenjs 做**生成**,用 python-pptx 做**第三方裁判**(`cross_verify.py`)——职责分离比"单一引擎"更能暴露问题(实测抓出两处 OOXML 规范缺陷)。 |
127
- | 联网检索素材(web_search 脚本) | 越出"报告生成"边界;外部数据由用户提供或由 AI 在对话中检索,来源须可追溯(`[n]` + 参考资料)。 |
1
+ # 按需深度模式(高保真交付规范)
2
+
3
+ > **何时读本文**:用户提出「高保真 / 1:1 / 精确还原 / 按图还原 / 正式交付 / 不能偏移 / 像素级 / 严格对照 / 逐页验收」,
4
+ > 或页面含**复杂信息图**(桑基 / 流带 / 树图 / 马赛克 / 箱线 / 网络 / 玫瑰 / 径向条 / K 线 / 漏斗)时。
5
+ >
6
+ > **定位**:默认流程保持轻量(一次问询 + 自动生成 + 校验闭环)。深度模式是**自动升级**的加强档——
7
+ > 多跑三道检查(容器级溢出已默认开启,深度模式再加**连续文本流**与**空间锚点**)、产出 manifest、并准备渲染对照材料。
8
+ > **不引入** SHA-256 冻结签名与逐页人工验收确认(会显著拖慢生成,与本技能"一次问询 + 自动生成"的定位冲突)。
9
+
10
+ ---
11
+
12
+ ## 一、触发条件
13
+
14
+ | 触发 | 判据 |
15
+ |------|------|
16
+ | **用户明示** | 命中 `layout-constants.json` `deepMode.triggers`:高保真 / 1:1 / 一比一 / 精确还原 / 按图还原 / 正式交付 / 不能偏移 / 像素级 / 严格对照 / 逐页验收 |
17
+ | **内容含复杂信息图** | 页面用到 `deepMode.complexCharts` 中的图表类型(sankey / streamgraph / treemap / marimekko / boxplot / network / rose / radialbar / candlestick / funnel) |
18
+
19
+ 命中任一 → 交付时按 §四 跑深度模式校验链。**不命中则不要跑**(保持轻量,避免无谓开销)。
20
+
21
+ ---
22
+
23
+ ## 二、深度模式多做的三件事
24
+
25
+ 1. **连续文本流检查**(`CONTINUOUS_TEXT_FLOW`):语义连续句不得拆成多个独立文本框。
26
+ 2. **空间锚点注册**(`ANCHOR_TITLE_MISALIGNED`):页头标题左边距必须对齐版心左边界。
27
+ 3. **manifest + 渲染对照材料**:把可复现的事实登记下来,并准备人眼对照的产物。
28
+
29
+ > 容器级溢出(`CONTAINER_OVERFLOW`)、表格语义字号(`TABLE_SEMANTIC_TYPE`)、表格密度(`TABLE_DENSITY`)
30
+ > **默认就开启**(属交付基线,不属于深度模式)。
31
+
32
+ ---
33
+
34
+ ## 三、锚点容差(`layout-constants.json` `anchorTolerance`)
35
+
36
+ | 项 | 值 | 含义 |
37
+ |----|----|------|
38
+ | `centerPct` | 2.0 | 中心点偏差上限(占参考框局部宽高比例)——用于人眼对照时的判据 |
39
+ | `keyPx` | 6 | 关键锚点(图标 / 标签 / 箭头端点 / **页头标题左边距**)偏差上限(px @96dpi ≈ 0.0625in) |
40
+ | `exactPx` | 3 | 用户要求 1:1 时的上限 |
41
+
42
+ **优先级与容差**(人眼对照时按此判级):
43
+
44
+ | 级别 | 元素 | 容差 | 超差等级 |
45
+ |------|------|------|---------|
46
+ | **P0** | 标题 / 主图 / so-what / 页脚 / 关键数字 / 核心面板 | 3px(最大 6px) | Critical |
47
+ | **P1** | 普通卡片 / 图标 / 标签 / 箭头 / 表格 / 分隔线 | 4px(最大 8px) | High(正式交付不得存在) |
48
+ | **P2** | 装饰线 / 点阵 / 纹理 / 重复刻度 / 背景纹样 | 6px(最大 12px) | Medium |
49
+
50
+ **自动化部分**:`validate_pptx.py --deep` 自动核对**页头标题锚点**(`ANCHOR_TITLE_MISALIGNED`)——
51
+ 这是"相对位置还原"的确定性代理,不需要参考图即可复现;其余 P0/P1/P2 元素在渲染对照页上人眼核对。
52
+
53
+ ---
54
+
55
+ ## 四、深度模式校验链
56
+
57
+ ```bash
58
+ # 1. 生成(同默认流程)
59
+ python scripts/extract_model.py "<输出目录>/YYYY-MM-DD-主题.html"
60
+ NODE_PATH=<pptxgenjs 所在 node_modules> <node> scripts/build_pptx.js "报告.pptx" --model="报告.model.json"
61
+
62
+ # 2. 深度校验(--deep 把连续文本流与空间锚点纳入 strict 门禁;--emit-manifest 产出登记)
63
+ python scripts/validate_pptx.py "报告.pptx" --strict --deep \
64
+ --model="报告.model.json" --emit-manifest="报告.manifest.json"
65
+
66
+ # 3. 渲染对照(可选,缺 LibreOffice 自动跳过)
67
+ python scripts/render_compare.py "报告.pptx" --html "报告.html" --out "render-compare"
68
+ ```
69
+
70
+ ---
71
+
72
+ ## 五、manifest 字段(`报告.manifest.json`)
73
+
74
+ | 字段 | 内容 | 用途 |
75
+ |------|------|------|
76
+ | `chartChannels` | `expectedNative` / `expectedShape` / `actualChartParts` / `nativeOk` | 原生通道图表是否真的落成 chart part(可编辑数据) |
77
+ | `dataTables` | 模型侧每个图表的 `pageType` / `chart` / `channel` / `dataTable` 策略 + PPTX 侧每页表格数 | 数据可追溯(非原生图表至少 `notes`) |
78
+ | `images` | `declared`(模型声明的真实图片数)/ `actual`(PPTX 实际图片数)/ `placeholders`(配图占位数)/ `layouts`(每页版式 / `fit` / 图数 / 是否占位) | 默认零图片、声明式放行;占位符走原生形状不计入图片数 |
79
+ | `anchors` | 每页 `title` / `left_in` / `expected_left_in` / `delta_in` / `tolerance_in` / `status` | 空间锚点注册(passed / failed / no-title-anchor) |
80
+ | `containers` | 每页 `text_shapes` + `min_pad_in` | 容器清单(配合 `CONTAINER_OVERFLOW` 判定) |
81
+ | `counts` | `errors` / `warnings` | 门禁结果摘要 |
82
+
83
+ > manifest 只登记**可复现的事实**,不做签名冻结——需要复核时重跑即可得到同样结果。
84
+
85
+ ---
86
+
87
+ ## 六、渲染对照(`scripts/render_compare.py`)
88
+
89
+ **产物**(默认输出到 `<pptx 同目录>/render-compare/`):
90
+
91
+ | 文件 | 内容 |
92
+ |------|------|
93
+ | `deck.pdf` | LibreOffice 渲染的 PPTX PDF(`soffice --headless --convert-to pdf`) |
94
+ | `page-01.png …` | PDF 逐页位图(需 `pdftoppm` / `mutool` / `magick` 之一) |
95
+ | `compare.html` | **并排对照页**:左栏 HTML 报告(iframe)、右栏 PPTX(PDF 内嵌或位图)、上方自动偏差登记表 |
96
+ | `deviations.json` | 自动可算偏差(页数区间 / 页数差 / 图表通道) |
97
+
98
+ **依赖与降级**:
99
+
100
+ - 无 LibreOffice → 跳过渲染,打印安装指引(可用 `SOFFICE` 环境变量指定可执行文件),**不阻断交付**。
101
+ - 无 PDF 位图工具 → 保留 PDF,对照页右栏内嵌 PDF。
102
+ - **视觉语义(底色系统 / 图表形态 / 留白节奏 / 曲线几何)仍需人眼在对照页上逐页确认**——脚本负责准备材料与算可量化偏差,不假装能自动判断"好不好看"。
103
+
104
+ ---
105
+
106
+ ## 七、人眼对照清单(渲染对照页上逐页过)
107
+
108
+ - [ ] **底色系统**:页面底色 / 面板底色 / 结论条底色 / 页脚底色是否与 HTML 一致?有没有把内容区默认变成大面积纯白卡片?
109
+ - [ ] **主图形态**:图表类型是否与 HTML 一致(柱是柱、环是环、流带是流带)?有没有被矩形化?
110
+ - [ ] **曲线几何**:桑基流带 / 流带图的弯曲幅度与上下边界是否贴合?双边界是否都在(不是只画中心线)?
111
+ - [ ] **标签避让**:标签有没有压住图标 / 节点 / 箭头 / 曲线 / 圆环?
112
+ - [ ] **锚点位置**:页头标题、主图区、so-what、页脚是否落在与 HTML 相同的位置(P0 ≤3px、P1 ≤4px)?
113
+ - [ ] **容器边界**:文字有没有越过卡片 / 单元格 / 结论条(不是只看页面边)?
114
+ - [ ] **密度节奏**:整篇有没有连续 3 页同密度 / 同版式?
115
+ - [ ] **可编辑性**:双击原生图表能"编辑数据";非原生图表的数据表在备注或页内表格里。
116
+
117
+ ---
118
+
119
+ ## 八、明确不采纳(及原因)
120
+
121
+ | 业界做法 | 不采纳原因 |
122
+ |---------|-----------|
123
+ | ImageGen 逐页蓝图(生成 16:9 位图再逐页还原) | 环境依赖重;且与"单文件零外链 + pictures=0 默认"冲突。本技能以「锁定版式 + 常量单源 + 形状还原规则」达成同等的版式可复现性。 |
124
+ | PowerPoint COM 渲染回归作为**硬门禁** | 需本机 PowerPoint;降级为可选路径(本文 §六),日常由 A 通道预览 + python-pptx 双裁判覆盖。 |
125
+ | SHA-256 冻结签名 + 逐页人工验收确认 | 交互轮次与耗时显著增加,与「一次问询 + 自动生成 + 校验闭环」定位冲突;改为 manifest 登记(可复现、无需冻结)。 |
126
+ | 禁止 `python-pptx`(必须只用 pptxgenjs) | 本技能用 pptxgenjs 做**生成**,用 python-pptx 做**第三方裁判**(`cross_verify.py`)——职责分离比"单一引擎"更能暴露问题(实测抓出两处 OOXML 规范缺陷)。 |
127
+ | 联网检索素材(web_search 脚本) | 越出"报告生成"边界;外部数据由用户提供或由 AI 在对话中检索,来源须可追溯(`[n]` + 参考资料)。 |