@topmindspace/tms-skills 0.1.1 → 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 (54) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/package.json +1 -1
  3. package/top-ppt-html/README.md +38 -130
  4. package/top-ppt-html/SKILL.md +34 -19
  5. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  6. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  7. package/top-ppt-html/assets/theme-overview.png +0 -0
  8. package/top-ppt-html/package.json +1 -1
  9. package/top-ppt-html/references/charts-discipline.md +3 -1
  10. package/top-ppt-html/references/charts.md +24 -15
  11. package/top-ppt-html/references/content-rules.md +54 -34
  12. package/top-ppt-html/references/default-surface.md +61 -0
  13. package/top-ppt-html/references/design-system.md +2 -2
  14. package/top-ppt-html/references/failure-modes.md +14 -1
  15. package/top-ppt-html/references/icons.md +56 -277
  16. package/top-ppt-html/references/layout-grammar.md +16 -6
  17. package/top-ppt-html/references/modes.md +16 -11
  18. package/top-ppt-html/references/playbook.md +31 -13
  19. package/top-ppt-html/references/pptx-export.md +20 -2
  20. package/top-ppt-html/references/presentation-craft.md +69 -0
  21. package/top-ppt-html/references/tech-design.md +5 -5
  22. package/top-ppt-html/scripts/audit_skill.py +13 -2
  23. package/top-ppt-html/scripts/build_examples.py +39 -2260
  24. package/top-ppt-html/scripts/build_pptx.js +6 -0
  25. package/top-ppt-html/scripts/checks_html.py +39 -0
  26. package/top-ppt-html/scripts/cross_verify.py +5 -1
  27. package/top-ppt-html/scripts/extract_snippet.py +2 -2
  28. package/top-ppt-html/scripts/layout-constants.json +111 -18
  29. package/top-ppt-html/scripts/lib_layout_regions.js +7 -9
  30. package/top-ppt-html/scripts/negative_tests.py +127 -1
  31. package/top-ppt-html/scripts/package_skill.py +13 -10
  32. package/top-ppt-html/scripts/quality_gate.py +11 -3
  33. package/top-ppt-html/scripts/recommend_layout.py +384 -0
  34. package/top-ppt-html/scripts/regression.py +1 -1
  35. package/top-ppt-html/scripts/smoke_pptx.sh +30 -0
  36. package/top-ppt-html/scripts/sync_runtime.py +22 -25
  37. package/top-ppt-html/scripts/validate_pptx.py +69 -0
  38. package/top-ppt-html/scripts/validate_report.py +309 -10
  39. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.html +0 -3926
  40. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +0 -168
  41. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +0 -4325
  42. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +0 -321
  43. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +0 -4325
  44. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +0 -321
  45. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +0 -5527
  46. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +0 -914
  47. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +0 -5527
  48. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +0 -914
  49. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +0 -5527
  50. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +0 -914
  51. package/top-ppt-html/references/design-system-engine.md +0 -235
  52. package/top-ppt-html/references/industry-benchmark.md +0 -105
  53. package/top-ppt-html/references/reform-plan.md +0 -252
  54. package/top-ppt-html/scripts/layout_slots.json +0 -830
@@ -23,8 +23,8 @@
23
23
  | `data-mode` | `presentation` | `research` | `architecture` |
24
24
  | 阅读契约 | 3 秒一屏,听讲 | 30 秒一页,深读 | 一眼看全结构 |
25
25
  | 版心 / 正文 | 1400px / 17–18px | 1240px / 14–15px | 1600px / 图注级 |
26
- | 单页文字 | ≤1500 | ≤3200 | ≤600 |
27
- | 并列单元 | ≤8 | ≤12 | 节点 ≤24 |
26
+ | 单页文字 | ≤1800 预警(密卡/列表可偏密;超限先拆页) | ≤3200 | ≤600 |
27
+ | 并列单元 | ≤8(更多→拆屏/改表,勿删条) | ≤12 | 节点 ≤24 |
28
28
  | 表格行 | ≤8 | ≤16 | 表转图 |
29
29
  | 每页图表 | **按复杂度定面积**(V1–V4;简单图禁全幅) | 1–2 个(取尺寸下限) | 1 张全幅(宽 ≥85% 版心) |
30
30
  | 论证结构 | 主张 → 证据 → 休止 | 发现 → 证据 → 含义 + so-what | 标题 → 图 → 图注 |
@@ -32,8 +32,9 @@
32
32
  | 篇幅 | 8–15 页 | 12–25 页 | 1–3 张图(6–8 页) |
33
33
  | PPTX 正文 | 13pt | 10.5pt | 13pt |
34
34
 
35
- **密度选错的症状**:A 出现双栏小字(投影看不清)→ 拆页;B 出现大面积留白(坐读信息量不足)→ 合页或补证据;C 出现成段正文 → 转图注。
35
+ **密度选错的症状**:A 出现双栏小字墙(投影看不清)→ 拆页/换形态;A 为「疏朗」删证据/so-what → **反模式**,按 content-rules §四-c 恢复;B 大面积留白 → 合页或补证据;C 成段正文 → 转图注。
36
36
  **节奏**:禁止连续 3 页同密度档;同一版式不连用超过 2 页;research 每 3–4 页插一个低密度页(指标带/金句/大数)。
37
+ **反截断**:溢出顺序 = 重构承载 → 拆页/分章 → 换布局 → 有限 fontShrink;禁静默截断(见 `presentation-craft.md`)。
37
38
 
38
39
  ---
39
40
 
@@ -41,12 +42,15 @@
41
42
 
42
43
  **轻量路径**(默认)——同时满足:≤12 页 · 材料单一完整 · 无未敲定关键判断 · 用户没要求看框架。
43
44
  ```
44
- Gate 0 参考图 → 六项问询(1 轮)→ 1 张规划卡 → scaffold_report.py → 填内容+模型 → 校验 → 交付
45
+ Gate 0 参考图 → 六项问询(1 轮)→ 1 张规划卡 → scaffold_report.py
46
+ → **只填 REPORT_MODEL** → render_from_model.py --inplace → validate_report.py --strict → 交付
45
47
  ```
48
+ (Fast Mode 跳过 Gate 0/六项,其余同链;**禁止**手改 HTML 正文与模型双写。)
46
49
 
47
50
  **完整路径**(任一命中)——研究 ≥20 页 / 演示 ≥12 页 / 材料量大且杂 / 含未敲定关键判断 / 用户要看框架。
48
51
  ```
49
- Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴 → SCR+主张树 → 逐页规划卡 → 大纲确认(1 轮)→ 生成 → 校验 → 交付
52
+ Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴 → SCR+主张树 → 逐页规划卡 → 大纲确认(1 轮)
53
+ → scaffold_report.py → **只填 REPORT_MODEL** → render_from_model.py --inplace → validate_report.py --strict → 交付
50
54
  ```
51
55
 
52
56
  **预算(硬)**:交互轮次 ≤3;必读文件 = `SKILL.md` + 本文件(≤2 份);L2 深度文件按需且单份读完即停。
@@ -55,11 +59,13 @@ Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴
55
59
 
56
60
  ## 三、页型选型(意图 → 页型 → 关键约束)
57
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
+
58
64
  > 穷举表(内容形态 → 版式 → PPTX 页型)见 `components.md` §46;密度档适配见 `components.md` §46b;组合见下节 §四。
59
65
 
60
66
  | 我要表达 | 首选页型 | 次选 | 关键约束 |
61
67
  |---------|---------|------|---------|
62
- | 要点式并列主张(默认页) | `points` | `cards` | 每卡 ≤4 条(research ≤5) |
68
+ | 要点式并列主张(默认页) | `points` | `cards` | 每卡宜 3–5 条;更多拆卡/跟进页,勿截断条目 |
63
69
  | 现状基线 / 指标快照 | `metrics` | `kpi` | 4–6 个;单数压场用 `kpi` |
64
70
  | 单个核心数字压场 | `kpi` | `metrics` | hero 一数一结论 |
65
71
  | 多维对标清单 | `table` | `halftable` | ≤8 行(research ≤16) |
@@ -115,7 +121,7 @@ Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴
115
121
 
116
122
  ## 四、组合版式矩阵("内容丰富"的落地方式)
117
123
 
118
- > **先选骨架**:P1–P12(`layout-grammar.md`);下表是「主件+从件+注释」内容组合,必须落在某 P__ 上。
124
+ > **先选骨架**:P1–P12(`layout-grammar.md`)。Mode A **主力** P1–P4+P6/P10;**次级** P7–P9/P11–P12(意图命中);画廊/示例外举主力。下表是「主件+从件+注释」组合,必须落在某 P__ 上。
119
125
 
120
126
  > **默认一页 = 主件 + 从件 + 注释层**。单件页(只有一张图/一张表)是**例外**(金句/大数/章节幕),不是默认。
121
127
  > **复杂内容页可扩展组合**:主件 + 双从件、或 `split`/`halftable` 双区并置、或信息图 + 指标带 + so-what + flags——不必强行「一主一从」。先定主件(视觉重心),再从本表挑从件与注释层;表外自由组合须落在已登记页型字段上(否则 PPTX 无法交付)。
@@ -146,10 +152,15 @@ Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴
146
152
 
147
153
  ## 五、图表选型决策树(先问"要回答什么",再选图)
148
154
 
149
- > 穷举代码见 `charts.md` §16–§31、§35、§52–§70;误用反例与多样性纪律见 `charts.md` §66。
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)。
150
161
  > **默认生成面(P1 收敛)**:优先 `bar / hbar / line / donut / progress / area / stack / dualline`。
151
162
  > **高级图型**(waterfall/gantt/funnel/slope/… 与 6 类信息图)按需选用,不进默认轮换。
152
- > **纪律**:全篇不同 `data-chart` 类型 ≥ `min(模式上限, ⌈图表页数 × 0.6⌉)`(上限:research 6 / presentation 4 / architecture 3);**相邻图表页不得同型**。
163
+ > **纪律**:全篇不同 `data-chart` 类型 ≥ `min(模式上限, ⌈图表页数 × 0.6⌉)`(上限:research 6 / presentation 4 / architecture 3);**相邻图表页不得同型**。多样性 **preferCoreFirst**:先拉开核图 8;advanced 计入 minTypes(不罚)但只在意图命中时用,**禁止预读** `charts-extended.md`;**禁**为凑下限硬上冷门图、简单图全幅、极偏 donut/pie。
153
164
 
154
165
  | 分析意图(读者要得出的结论) | 首选 | 次选 | 禁用 / 改判条件 |
155
166
  |---------------------------|------|------|----------------|
@@ -231,26 +242,33 @@ Gate 0 参考图 → 六项问询(1 轮)→ 证据表 → 故事线脑暴
231
242
  python scripts/scaffold_report.py --mode research --style mckinsey --theme light \
232
243
  --title "报告标题" --sections 8 --out 2026-09-15-主题.html # 起点(不要手抄模板)
233
244
  # 或用黄金节奏包:--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)
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
235
249
  python scripts/extract_model.py 2026-09-15-主题.html # → .model.json
236
250
  node scripts/build_pptx.js 2026-09-15-主题.pptx --model=….model.json
237
251
  python scripts/validate_pptx.py 2026-09-15-主题.pptx --strict --model=….model.json # 0/0
238
252
  ```
239
253
 
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` 开关自动产出七要素说明,不要手拼)。
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)。
242
258
  **失败自修复**:按输出逐条修 → 重跑,直到 0/0;修复顺序见 `failure-modes.md`。
243
259
 
244
260
  ---
245
261
 
246
262
  ## 十、L2 节级路由(按任务只读这些,读完即停)
247
263
 
264
+ > 默认生成面:`default-surface.md`(12 页型 + 8 图 + V1–V4)。Mode A 工艺清单:`presentation-craft.md`。
248
265
  > **不要整读** `components.md` / `charts.md` 背后的物理拆分大文件。需要代码时优先:
249
266
  > `python scripts/extract_snippet.py --list` · `--task <名>` · `--chart <类型>` · `--page-type <页型>` · `--file components.md --section 46`(逻辑名自动路由)
250
267
 
251
268
  | 任务 | 只读 |
252
269
  |------|------|
253
270
  | research 证据页 / Exhibit / 密表 | `components.md` §36d/§46/§46c · 本文件 §三/§四 · `extract_snippet.py --task research-evidence` |
271
+ | 正式演示 / Mode A 工艺 | `default-surface.md` · `presentation-craft.md` · 本文件 §三-b/§五 |
254
272
  | 演示组合版式 | `components.md` §39–§42/§46/§46b/§46c · `--task presentation-combo` |
255
273
  | 架构 / 泳道 / 分层 | `components.md` §37–§38b · `infographics.md` §78–§80 · `--task architecture-diagram` |
256
274
  | 选图 / 取图表代码 | 本文件 §五 · `--chart <类型>` · 误用见 `charts.md` §66 |
@@ -262,5 +280,5 @@ python scripts/validate_pptx.py 2026-09-15-主题.pptx --strict --model=….mode
262
280
  | 图标 / 语义速查 | `icons.md` · `--task icons` |
263
281
  | 起骨架用节奏包 | `scaffold_report.py --list-types` → `--preset consulting` 等 |
264
282
 
265
- **纪律**:L0+L1 是默认全部所需;上表命中才开 L2;**读完即执行,不预读下一份**。页型语义槽位见 `scripts/layout_slots.json`(双通道同源 IR)。
283
+ **纪律**:L0+L1 是默认全部所需;上表命中才开 L2;**读完即执行,不预读下一份**。页型语义槽位见 `layout-constants.json` → `layoutSlots`(双通道同源 IR)。
266
284
  **维护者**:改常量/schema/引擎后必跑 `sync_runtime.py` → `audit_styles.py` → `audit_docs.py` → `audit_skill.py` → `build_examples.py` → `regression.py`。
@@ -24,7 +24,20 @@
24
24
  - **智能体精导**:正式 PPTX 的唯一交付路径——从报告抽模型 → 生成 → **过 strict 质检** → 交付。生成时用户选了「HTML+PPTX」交付格式的,交付时一并生成;交付后用户随时可通过页面提示词回来补生成。
25
25
  - **双单源**:页面几何/三模式独立比例尺(`typeScale` 基准 + `modeTypeScale` 模式取值)/页型几何/9 风格 token 全在 `scripts/layout-constants.json`;**页型 DSL schema(字段/必填/适用模式)在 `scripts/model-schema.json`**。通道 B 直接 `require`;页面运行时由 `sync_runtime.py` 注入(同时注入三模板的引擎/UI/运行时内联副本)。**改常量只改 JSON,改 schema 只改 schema JSON,然后跑 `python scripts/sync_runtime.py`**。
26
26
 
27
- ## 内容模型(生成报告时与正文同步填写)
27
+ ### 会场与字号(venue · P1-4)
28
+
29
+ PPTX `modeTypeScale` 以**中型会议室投影**为默认(presentation 正文 13pt)。按会场微调,**不要**用无限缩字号塞字:
30
+
31
+ | 会场 | 建议 | 做法 |
32
+ |------|------|------|
33
+ | 小会议室 / 桌面投屏 | 默认可略紧 | 保持 mode 比例尺;密卡页走拆页而非降到 floor 下 |
34
+ | 中型会议室(默认) | presentation body 13pt / research 10.5pt | `modeTypeScale` 原值 |
35
+ | 礼堂 / 大报告厅 | 提高可读性 | 演示稿优先更大标题档与更少每页单元;必要时整体上移一档角色映射,**仍禁**为塞字破 fontShrink floor |
36
+
37
+ HTML 侧仍用 MD3 clamp;双端都以「最后一排可读」为准(`presentation-craft` back-of-room)。
38
+
39
+
40
+ ## 内容模型(只填模型 · render_from_model 回填正文)
28
41
 
29
42
  三份模式模板(`assets/templates/{presentation|research|architecture}.html`)尾部已带对应模式的占位。字段:
30
43
 
@@ -122,7 +135,7 @@
122
135
 
123
136
  ## 页面预览(已内置三模板)
124
137
 
125
- 三份模式模板均已集成:header 工具组「预览 PPTX」(快捷键 P)+「?」PPT 生成指引弹窗(快捷键 H,精导通道说明 + 可复制提示词)+ 内嵌预览运行时 + 对应模式模型占位。**生成报告时只需做一件事:把 `window.REPORT_MODEL` 填成与正文一致的内容(mode 用模板默认值,勿改)。**
138
+ 三份模式模板均已集成:header 工具组「预览 PPTX」(快捷键 P)+「?」PPT 生成指引弹窗(快捷键 H,精导通道说明 + 可复制提示词)+ 内嵌预览运行时 + 对应模式模型占位。**生成报告时只填 `window.REPORT_MODEL`,再跑 `render_from_model.py --inplace` 回填正文(mode 用模板默认值,勿改;禁止双写)。**
126
139
 
127
140
  - 预览模态读取 `slidesXml`(与精导同一序列化输出)渲染 16:9 页序列——所见即所得
128
141
  - 打开即自检(schema 单源驱动):模型完整 → 正常预览 + 提示词;不完整 → 尽力渲染 + 缺失清单 + 提示词
@@ -207,3 +220,8 @@ python scripts/validate_pptx.py "报告.pptx" --strict --model="报告.model.jso
207
220
  - **Node + pptxgenjs**:仅精导通道与回归双裁判需要。在技能目录执行 `npm install pptxgenjs`,或把 `NODE_PATH` 指向任意已含 pptxgenjs 的 node_modules;`regression.py` 会自动探测(`TOP_PPT_NODE_PATH` / `NODE_PATH` / 仓库内 node_modules / 全局 npm root)。
208
221
  - **Python(标准库)**:跑 `validate_report.py` / `validate_pptx.py` / `extract_model.py`(读 `model-schema.json` 单源)/ `sync_runtime.py` / `audit_styles.py`,无第三方依赖;`cross_verify.py` 可选依赖 python-pptx(未装则自动跳过该第三方裁判,不影响交付判定)。
209
222
  - 页面预览运行时零依赖(浏览器纯序列化,无 ZIP 打包)。
223
+
224
+ ### Chrome 一致性(P1-6)
225
+
226
+ 跨页页眉/页脚/页码(chrome)应**锁死同一几何**:同 y、同字号角色、同边距(`layoutSystem.zones.chromePct`)。禁止逐页漂移页码位置或交替有无页脚。HTML 用模板页脚;PPTX 由 `pageTypes` chrome 槽位同源落位。便宜门禁:`validate_pptx` 对页脚/页码 y 漂移做 WARN(见 `qualityGates.chromeDriftIn`)。
227
+
@@ -0,0 +1,69 @@
1
+ # 演示工艺清单 · Presentation Craft(L2 · Mode A)
2
+
3
+ > **何时读**:Mode A / 正式演示 / 路演 / 演讲 / Fast 演示路径。与 `default-surface.md` 同级常读。
4
+ > **何时不读**:Mode B 密排、Mode C 架构深读(能力保留,不反向污染 A)。
5
+ > **定位**:大气、演讲友好;一屏一主张;图标/图表克制配文——非 gadget deck、非咨询 dump。
6
+
7
+ ## 铁律速查(Hard rules)
8
+
9
+ | 中文原则 | English | 可执行 |
10
+ |----------|---------|--------|
11
+ | 一屏一主张 | one idea per slide | 标题即结论;第二主张拆页 |
12
+ | 三秒可读 | 3-second / glance rule | 主信息 3 秒可抓;广告牌不是文档 |
13
+ | 留白即设计 | whitespace as design | 合法空:封面/章节幕/金句/收尾;内容页半空 = underfill |
14
+ | 最后一排 | back of the room | 投影正文宜大;少字号档(display/h1 · body · caption) |
15
+ | CRAP | Contrast / Repetition / Alignment / Proximity | 强焦点;跨页 chrome 锁死;左缘顶边齐;相关成组 |
16
+ | 行动标题 | action / claim title | 主张句,非「现状分析」式话题标签 |
17
+ | 少色单强调 | single accent | 2–3 主色 + 灰阶;1 accent;红仅警示 |
18
+ | 图表克制 | restrain / reduce / emphasize | 8 核图优先;简单图禁全幅;极偏禁 donut→V3 |
19
+ | 图标语义 | icons as meaning | 约 3–8/屏;固定 px 档;禁表内/图内乱插 |
20
+ | **默认无动画** | **motion = none** | 禁炫技转场/飞入作默认;HTML 翻页即可 |
21
+ | 无障碍对比 | WCAG AA | 正文 ≥4.5:1;大字/图形 ≥3:1;不靠颜色单独编码 |
22
+ | 舞台纪律 | 16:9 stage | 安全边距;一屏一重心;同页双大件 FAIL |
23
+
24
+ ## 默认面(与 default-surface 对齐)
25
+
26
+ - **页型**:12 默认页型;**主力骨架 P1–P4 + P6/P10**(≈V1–V4)覆盖约 80% 页。
27
+ - **次级骨架 P7–P9 / P11–P12**:合法保留;A 下仅密表/全幅结构/一主两从等意图命中再用,**不进默认轮换**。P5 为常用扩展。
28
+ - **核图 8**:`bar` · `hbar` · `line` · `donut` · `progress` · `area` · `stack` · `dualline`。默认读面 = 纪律 + 核图;**不预读** `charts-extended.md`。
29
+ - **多样性**:先拉开核图;advanced **计入** `minTypes`(不罚)但**只按内容需要**选用,绝不为凑下限垫冷门图。
30
+
31
+ ## 交付门禁(Mode A)
32
+
33
+ ```
34
+ validate_report.py --strict # presentation 自动隐含 --layout-qa
35
+ quality_gate.py … --deliver # 同口径
36
+ ```
37
+
38
+ 检查:V 契约 · 简单全幅 · 骨架连用 · 截断/溢出未拆页 · 半空卡 · 对齐节奏 · 主张标题 WARN · 核图多样性 · WCAG。
39
+
40
+ ## 自检(上台前 30 秒)
41
+
42
+ - [ ] 标题是主张句,不是话题词
43
+ - [ ] 眯眼可见:一条左线、一条顶线、一块重心
44
+ - [ ] 休止页有意留白;内容页不无故半空
45
+ - [ ] 无多强调色、无动画墙、无冷门图硬凑
46
+ - [ ] `motion = none`;翻页靠内容节奏
47
+
48
+
49
+ ## 长文与信息承载(anti-truncation)
50
+
51
+ > **硬原则**:大量文字**不得**为了「看起来像稀疏 demo 甲板」而被故意压缩或删除。留白是设计;**删掉证据 / so-what / 口径不是设计**。
52
+
53
+ **Mode A 仍主张一屏一主张**——但「一主张」可以带充分证据:次要卡、列表、表、跟进页。内容密时优先**加结构**,不砍实质。
54
+
55
+ ### 溢出处置顺序(铁律 · 与 `containers.overflowRule` 同源)
56
+
57
+ 1. **重构承载**:段落 → 列表 / 卡片 / 表 / 图 / 组合版式
58
+ 2. **拆页 / 分章**:议程→主张→证据卡→明细列表等多页序列;01a/01b;多部分章节
59
+ 3. **换布局形态**:V1–V4 · 多列 · 卡栅格 · `g-side` / `g-bento`
60
+ 4. **有限 `fontShrink`**(阶梯内、模式 floor 以上,最多 4 档)
61
+ 5. **禁止**静默截断、砍 so-what、砍证据、为审美稀疏而删决策必需信息
62
+
63
+ ### 密度许可
64
+
65
+ - 卡片/列表页在主张清楚时可**偏密**(多卡、多条),仍须可读、对齐、一重心。
66
+ - 单页字数预算是**溢出预警**,不是「字数太多就删」的许可证;超预算先走 1–3 步。
67
+ - 校验:`overflow-without-split` / 截断迹象 → FAIL 或 WARN;**不为「字多」单独 FAIL**。
68
+
69
+ > *Hard rules protect the stage; adaptive choices serve the content.*
@@ -30,7 +30,7 @@
30
30
  |------|------|--------|
31
31
  | `scripts/layout-constants.json` | 页面几何 `page` / **12 列网格 `grid`** / **语义字阶 `typography` C0–T14** / 三模式比例尺 `typeScale`+`modeTypeScale` / 页型几何 `pageTypes`+`pageTypeGeometry` / **9 风格 token `styles`+`stylesDark`+`styleAccents`** / **编码色板 `styleDataColors`+`styleDataColorsDark`(9 套 × 亮暗 × c1–c5)** / **图表登记四元组 `charts.registry`** / 图表最小尺寸 `charts.minSize` / **图表多样性预算 `charts.variety`** / **容器内边距 `containers`** / **锚点容差 `anchorTolerance`** / **图片准入门 `imageAdmission`** / **图片规格 `imageSpec`**(版式 `layouts` / 比例 `ratioDefault`+`ratioCssClass` / 建议尺寸 / 占位标签 / 体积上限) / **深度模式 `deepMode`** / 校验预算 `checkBudgets` / 强调带 `emphasis` / 待核实 `annotations` / 去AI味词 `aiFlavor` / **内容级质量 `contentQuality`**(版式节奏 / so-what 实质 / research 标题判断) | `build_pptx.js`(require)、`pptx-export.js`(注入常量块)、三模板、`style-gallery.html`、`validate_report.py`、`validate_pptx.py`、`audit_styles.py`、`audit_skill.py`、`prepare_images.py`、`evals/run_evals.py` |
32
32
  | `scripts/model-schema.json` | 29 种页型的字段与必填约束 / **图表类型白名单 `chartTypes`(30 类:16 原生 + 14 形状)** / **数据表策略 `chartDataTable`** / 通用可选字段 `commonSectionFields` | `extract_model.py`(本地校验)、`pptx-export.js`(浏览器端 `validateModel`) |
33
- | `scripts/layout_slots.json` | **页型布局 IR(29 页型全量)**:语义槽位(head/primary/secondary/annotation + required)——双通道按同一槽位语义落位 | `sync_runtime.py`(完整性校验);`lib_layout_regions.js`(槽位→英寸矩形);`extract_snippet.py --page-type` |
33
+ | `layout-constants.json` → `layoutSlots` | **页型布局 IR(29 页型全量)**:语义槽位(head/primary/secondary/annotation + required)——双通道按同一槽位语义落位 | `sync_runtime.py`(完整性校验);`lib_layout_regions.js`(槽位→英寸矩形);`extract_snippet.py --page-type` |
34
34
  | 交付一键 | `quality_gate.py` | `validate_report --strict` + 可选 `validate_pptx` + `evals --score` + **rubric 启发式五维**(content/layout/chart/infographic/tone) |
35
35
 
36
36
  **纪律**:改常量只改 JSON,改 schema 只改 schema JSON,然后跑 `python scripts/sync_runtime.py`(注入 + 完整性校验 + 哈希摘要)。**禁止手改** `pptx-export.js` / 三模板 / `style-gallery.html` 的标记块。
@@ -43,7 +43,7 @@
43
43
  5. **页型实现可达性(冒烟)**:schema 每个页型都应出现在 `build_pptx.js` 与 `pptx-export.js` 源码中(子串级,拦「schema 加了页型、引擎没实现」)
44
44
  6. **骨架尺寸单源不变量**:`charts.scaffold`(scaffold_report.py 骨架尺寸唯一事实源)键 ⊆ registry,且默认值 ≥ `charts.minSize` 同口径阈值——拦「脚本硬编码第二源漂移」
45
45
  7. **语义字阶**:每个 level 的 `role` 在 `modeTypeScale` 中存在
46
- 8. **页型布局 IR**:`layout_slots.json` 每个页型在 schema 中存在,且含 head + primary 槽位
46
+ 8. **页型布局 IR**:`layoutSlots(LC)` 每个页型在 schema 中存在,且含 head + primary 槽位
47
47
 
48
48
  > **图表计数的两种口径**(同一事实的两种切法,勿混用):`registry` 视角 **36 = 16 原生 + 20 形状**(SKILL.md 铁律 9 用此口径);`chartTypes` 视角 **30 = 16 原生 + 14 形状**(可作 `chart.type` 的形状类,`pptx-export.md` 页型表用此口径)——差额 6 类是信息图专属页型(sankey/treemap/boxplot/network/marimekko/streamgraph),它们只作 `sections[].type`,不作 `chart.type`。
49
49
 
@@ -110,7 +110,7 @@
110
110
 
111
111
  - **发布版**:**v0.1**(布局语法 + 模型单写 + 硬门禁 + 风格语汇层)。**版本唯一事实源 = `layout-constants.json` `version`**;`model-schema.json` / `layoutSlots` 同步该值、技能 `package.json` 为 `0.1.x`;`sync_runtime.py` 校验一致。变更流水见仓库根 `CHANGELOG.md`。
112
112
  - **兼容回落**:排版比例尺只有 `modeTypeScale` 一套;未知模式回落 `presentation` 档。环境变量 `TOP_PPT_NODE_EXE` / `TOP_PPT_NODE_PATH`(旧名已移除)。
113
- - **文档分工**:本文件管架构与机制;日常规范见 `references/*`,业界对标依据见 `industry-benchmark.md`。
113
+ - **文档分工**:本文件管架构与机制;日常规范见 `references/*`,业界对标依据见 `docs/archive/refs/industry-benchmark.md`。
114
114
 
115
115
  ## 八、目录职责
116
116
 
@@ -121,7 +121,7 @@
121
121
  | `references/modes.md` | 三模式密度契约与锁定版式(L2:定模式细节时读) |
122
122
  | `references/outline-design.md` | 内容架构七步法 + 跨页叙事节奏 + 细节保全 |
123
123
  | `references/design-system.md` | MD3 对齐、设计原理(CRAP/7:2:1/字体矩阵)、页高模型、12 列网格、语义字阶、SVG 语义类(生成时主读) |
124
- | `references/design-system-engine.md` | 顶栏/卡片/列表/表格/页脚/动效等 CSS 类实现目录(维护者;生成时勿读) |
124
+ | `docs/archive/refs/design-system-engine.md` | 顶栏/卡片/列表/表格/页脚/动效等 CSS 类实现目录(维护者;生成时勿读) |
125
125
  | `references/styles.md` | 9 套风格定义与选型 |
126
126
  | `references/content-rules.md` | 页内写作规则、密度三档、表格语义字号、容器内边距、连续文本流 |
127
127
  | `references/components.md` | 结构组件与锁定版式(`components.md` §1–§15c、§32–§50)+ 版式选型表 + **组合版式矩阵(§46c)** |
@@ -131,7 +131,7 @@
131
131
  | `references/pptx-export.md` | PPTX 导出通道、模型字段、双单源、29 页型、图表双通道 |
132
132
  | `references/high-fidelity.md` | 按需深度模式规范(触发、容差、manifest、渲染对照) |
133
133
  | `references/failure-modes.md` | 十四类失败模式 + 修复顺序铁律 + 错误解释纠正表 |
134
- | `references/industry-benchmark.md` | 业界对标与采纳/不采纳决策依据 |
134
+ | `docs/archive/refs/industry-benchmark.md` | 业界对标与采纳/不采纳决策依据 |
135
135
  | `scripts/*` | 校验器、**骨架生成器 `scaffold_report.py`**、注入器、回归、**三项审计(styles / docs / skill)**、打包(全部标准库;PPTX 精导需 Node + pptxgenjs) |
136
136
  | `evals/*` | Eval 框架:`prompts.csv`(14 条,含负对照)+ `rubric.schema.json`(风格目标评分契约)+ `run_evals.py`(结果/过程/风格/效率四类目标) |
137
137
  | `assets/templates/*` | 三模式模板 + 公共引擎/UI(标记块由 `sync_runtime.py` 注入) |
@@ -15,7 +15,7 @@
15
15
  ① 体积预算 —— SKILL.md / 常读入口 playbook.md / 单份 reference / 模式模板 的上限
16
16
  ② 元数据 —— frontmatter name 与技能名一致;description ≤ DESC_HARD,且 ≤ DESC_SOFT(触发精度)
17
17
  ③ 披露分层 —— SKILL.md 必须声明 L0/L1/L2 三档,且 L1(常读入口)恰好 1 份
18
- ④ 交互门禁 —— SKILL.md 必须含「Gate 0 参考图先行」,且其出现位置在「六项问询」之前
18
+ ④ 交互门禁 —— SKILL.md 必须含「Gate 0 参考图先行」,且其出现位置在「六项问询」之前;若声明 Fast Mode,须同时有豁免句且标准路径仍为硬门禁
19
19
  ⑤ 效率预算 —— SKILL.md 必须显式声明交互轮次上限与必读文件数上限
20
20
  ⑥ 引用完整性 —— SKILL.md 与 playbook.md 提到的 references/*.md 必须存在
21
21
  ⑦ 冗余报告 —— SKILL.md ↔ 全部 references(含 playbook)的归一化共同片段
@@ -159,12 +159,23 @@ def main() -> int:
159
159
  chk('③ 常读入口存在', bool(l1_files) and all((ROOT / f).exists() for f in l1_files),
160
160
  f'L1={l1_files} 不存在', f'{l1_files} 存在')
161
161
 
162
- # ④ Gate 0(参考图先行)
162
+ # ④ Gate 0(参考图先行)——标准路径硬门禁;Fast Mode 可声明豁免
163
163
  g0 = sk.find('Gate 0')
164
164
  ask = sk.find('六项问询')
165
+ has_fast = bool(re.search(r'Fast\s*Mode|快速模式', sk))
165
166
  chk('④ Gate 0 存在', g0 >= 0, '未找到「Gate 0」标记', '已就位')
166
167
  chk('④ Gate 0 在问询之前', g0 >= 0 and ask >= 0 and g0 < ask,
167
168
  f'Gate0@{g0} 未在六项问询@{ask} 之前', f'位置正确({g0} < {ask})')
169
+ if has_fast:
170
+ ok_exempt = bool(re.search(
171
+ r'(?:Fast\s*Mode|快速模式).{0,400}(?:跳过|豁免).{0,120}(?:Gate\s*0|参考图|六项)',
172
+ sk, re.S)) or bool(re.search(
173
+ r'(?:跳过|豁免).{0,60}(?:Gate\s*0|参考图|六项问询)', sk))
174
+ chk('④ Fast Mode 豁免声明', ok_exempt,
175
+ '有 Fast Mode 但未声明 Gate 0/六项豁免', '已声明豁免')
176
+ ok_std = bool(re.search(r'标准.{0,24}(?:硬门禁|强制)|Gate\s*0.{0,48}硬门禁', sk))
177
+ chk('④ 标准路径 Gate 0 仍为硬门禁', ok_std,
178
+ '有 Fast Mode 但标准路径未保留 Gate 0 硬门禁表述', '已保留')
168
179
 
169
180
  # ⑤ 效率预算声明
170
181
  chk('⑤ 交互轮次预算', bool(re.search(r'交互轮次|轮次上限|≤\s*3\s*轮', sk)),