dsh-ppt-studio 1.1.0
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.
- package/LICENSE +21 -0
- package/README.md +480 -0
- package/agent-presets/ppt/agent.cordis.yml +308 -0
- package/agent-presets/ppt/preset.yml +3 -0
- package/cordis.patch.yml +29 -0
- package/docs/00-/350/256/276/350/256/241/346/272/220.md +537 -0
- package/docs/01-/351/234/200/346/261/202/344/270/216/347/233/256/346/240/207.md +136 -0
- package/docs/02-/346/212/200/346/234/257/346/212/245/345/221/212.md +483 -0
- package/docs/03-/346/233/264/346/226/260/346/227/245/345/277/227.md +2898 -0
- package/docs/04-/350/267/257/347/272/277/345/233/276/344/270/216/351/207/214/347/250/213/347/242/221.md +113 -0
- package/docs/05-/350/277/255/344/273/243/346/265/201/347/250/213.md +210 -0
- package/docs/06-/350/257/204/345/256/241/344/270/216/346/265/213/350/257/225.md +296 -0
- package/docs/fidelity-report.md +225 -0
- package/examples/fx/fx-mini/deck.yaml +39 -0
- package/examples/fx/fx-mini/pages/01.yaml +6 -0
- package/examples/fx/fx-mini/pages/02.yaml +2 -0
- package/examples/fx/fx-mini/pages/03.yaml +6 -0
- package/examples/fx/fx-pro/deck.yaml +48 -0
- package/examples/fx/fx-pro/pages/01_cover.yaml +40 -0
- package/examples/fx/fx-pro/pages/02_arch.yaml +55 -0
- package/examples/fx/fx-pro/pages/03_table.yaml +20 -0
- package/examples/fx/fx-pro/pages/04_chart.yaml +40 -0
- package/examples/fx/fx-pro/pages/05_timeline.yaml +71 -0
- package/examples/fx/fx-pro/pages/06_longtext.yaml +13 -0
- package/examples/fx/fx-pro/pages/07_safearea.yaml +33 -0
- package/examples/fx/fx-pro/pages/08_contrast.yaml +22 -0
- package/examples/fx/fx-pro/pages/09_custgeom.yaml +32 -0
- package/examples/fx/fx-pro/pages/10_numbers.yaml +25 -0
- package/examples/fx/fx-pro/pages/11_section.yaml +20 -0
- package/examples/fx/fx-pro/pages/12_summary.yaml +57 -0
- package/examples/fx/fx-pro/preview/01_pages_01_cover.html +1 -0
- package/examples/fx/fx-pro/preview/02_pages_02_arch.html +3 -0
- package/examples/fx/fx-pro/preview/03_pages_03_table.html +1 -0
- package/examples/fx/fx-pro/preview/04_pages_04_chart.html +3 -0
- package/examples/fx/fx-pro/preview/05_pages_05_timeline.html +2 -0
- package/examples/fx/fx-pro/preview/06_pages_06_longtext.html +4 -0
- package/examples/fx/fx-pro/preview/07_pages_07_safearea.html +2 -0
- package/examples/fx/fx-pro/preview/08_pages_08_contrast.html +1 -0
- package/examples/fx/fx-pro/preview/09_pages_09_custgeom.html +1 -0
- package/examples/fx/fx-pro/preview/10_pages_10_numbers.html +1 -0
- package/examples/fx/fx-pro/preview/11_pages_11_section.html +1 -0
- package/examples/fx/fx-pro/preview/12_pages_12_summary.html +1 -0
- package/examples/fx/fx-pro/preview/deck.html +10 -0
- package/examples/fx/fx-pro/preview/layout.json +2325 -0
- package/examples/fx/fx-pro/preview/measured.json +814 -0
- package/examples/fx/fx-pro.pptx +0 -0
- package/examples/fx/ren-single/01.png +0 -0
- package/examples/fx/ren-spliced/01.png +0 -0
- package/examples/fx/ren-spliced/03.png +0 -0
- package/examples/fx/seed.pptx +0 -0
- package/examples/fx/single.pptx +0 -0
- package/examples/fx/spliced.pptx +0 -0
- package/examples/smoke/deck.yaml +26 -0
- package/examples/smoke/imported/deck.yaml +30 -0
- package/examples/smoke/imported/import-styles.json +126 -0
- package/examples/smoke/imported/pages/slide_01.yaml +31 -0
- package/examples/smoke/imported/pages/slide_02.yaml +38 -0
- package/examples/smoke/imported/pages/slide_03.yaml +55 -0
- package/examples/smoke/imported/preview-rt/01_pages_slide_01.html +1 -0
- package/examples/smoke/imported/preview-rt/02_pages_slide_02.html +1 -0
- package/examples/smoke/imported/preview-rt/03_pages_slide_03.html +1 -0
- package/examples/smoke/imported/preview-rt/deck.html +1 -0
- package/examples/smoke/imported/preview-rt/layout.json +434 -0
- package/examples/smoke/imported/reference/previews/01.png +0 -0
- package/examples/smoke/imported/reference/previews/02.png +0 -0
- package/examples/smoke/imported/reference/previews/03.png +0 -0
- package/examples/smoke/imported/source.pptx +0 -0
- package/examples/smoke/media-test.png +0 -0
- package/examples/smoke/out-smoke.pptx +0 -0
- package/examples/smoke/pages/01_cover.yaml +27 -0
- package/examples/smoke/pages/02_content.yaml +42 -0
- package/examples/smoke/pages/03_chart.yaml +35 -0
- package/examples/smoke/preview/01_pages_01_cover.html +1 -0
- package/examples/smoke/preview/02_pages_02_content.html +1 -0
- package/examples/smoke/preview/03_pages_03_chart.html +1 -0
- package/examples/smoke/preview/deck.html +1 -0
- package/examples/smoke/preview/layout.json +378 -0
- package/lib/autodeclare.js +40 -0
- package/lib/commands.js +161 -0
- package/lib/crosscheck.js +300 -0
- package/lib/imgmeta.js +55 -0
- package/lib/index.js +239 -0
- package/lib/measurement.js +209 -0
- package/lib/msrender.js +123 -0
- package/lib/pptd/export-pptx.js +686 -0
- package/lib/pptd/import-pptx.js +774 -0
- package/lib/pptd/layout.js +209 -0
- package/lib/pptd/render-html.js +254 -0
- package/lib/pptd/schema.js +518 -0
- package/lib/pptd/svgCharts.js +147 -0
- package/lib/pptxPy.js +205 -0
- package/lib/preset-delivery.js +195 -0
- package/lib/preview-server.js +164 -0
- package/lib/router.js +165 -0
- package/lib/scaffold.js +315 -0
- package/lib/skill.js +174 -0
- package/lib/splice.js +219 -0
- package/lib/state.js +88 -0
- package/lib/surgical.js +369 -0
- package/lib/templates.js +400 -0
- package/lib/tools.js +955 -0
- package/lib/verify.js +828 -0
- package/lib/xmljs.js +112 -0
- package/lib/zips.js +117 -0
- package/package.json +81 -0
- package/scripts/audit-manual-facts.mjs +294 -0
- package/scripts/audit-template-fidelity.mjs +162 -0
- package/scripts/bench-m2.mjs +48 -0
- package/scripts/build-templates.mjs +63 -0
- package/scripts/build.mjs +14 -0
- package/scripts/build.sh +7 -0
- package/scripts/check-lib-freshness.mjs +70 -0
- package/scripts/check-preset.mjs +189 -0
- package/scripts/check-tracked-lf.mjs +84 -0
- package/scripts/dbg-import.mjs +13 -0
- package/scripts/dbg-media.mjs +10 -0
- package/scripts/dbg-tpl-inventory.mjs +23 -0
- package/scripts/dump-workflow-baseline.mjs +38 -0
- package/scripts/e2e-1.0.mjs +129 -0
- package/scripts/eval-skills-blind.mjs +91 -0
- package/scripts/eval-skills-score.mjs +129 -0
- package/scripts/export-orig-templates.ps1 +17 -0
- package/scripts/fixtures/workflow-baseline.json +300 -0
- package/scripts/fixtures.mjs +501 -0
- package/scripts/import-user-templates.mjs +60 -0
- package/scripts/install-desktop.mjs +312 -0
- package/scripts/install.mjs +209 -0
- package/scripts/migrate-templates-dualtrack.mjs +71 -0
- package/scripts/preflight-1.0.mjs +198 -0
- package/scripts/probe-asset-freshness.mjs +57 -0
- package/scripts/probe-effect-semantics.mjs +69 -0
- package/scripts/probe-reparse-safety.mjs +32 -0
- package/scripts/rebuild-templates-c11.mjs +69 -0
- package/scripts/regression-real.mjs +84 -0
- package/scripts/release-sync.mjs +425 -0
- package/scripts/shot-templates.mjs +49 -0
- package/scripts/smoke.mjs +2512 -0
- package/scripts/verify-bundle-install.mjs +281 -0
- package/scripts/verify-fresh-install.mjs +260 -0
- package/skills/ppt-studio-copy/SKILL.md +139 -0
- package/skills/ppt-studio-craft/SKILL.md +171 -0
- package/skills/ppt-studio-data/SKILL.md +173 -0
- package/skills/ppt-studio-manual/SKILL.md +104 -0
- package/templates/academic-white/deck.yaml +24 -0
- package/templates/academic-white/pages/_chart.yaml +43 -0
- package/templates/academic-white/pages/_compare.yaml +37 -0
- package/templates/academic-white/pages/_content.yaml +35 -0
- package/templates/academic-white/pages/_cover.yaml +28 -0
- package/templates/academic-white/pages/_ending.yaml +28 -0
- package/templates/academic-white/pages/_flow.yaml +61 -0
- package/templates/academic-white/preview.png +0 -0
- package/templates/academic-white/template.yaml +14 -0
- package/templates/business-blue/deck.yaml +28 -0
- package/templates/business-blue/pages/_chart.yaml +36 -0
- package/templates/business-blue/pages/_compare.yaml +45 -0
- package/templates/business-blue/pages/_content.yaml +80 -0
- package/templates/business-blue/pages/_cover.yaml +39 -0
- package/templates/business-blue/pages/_ending.yaml +32 -0
- package/templates/business-blue/pages/_flow.yaml +87 -0
- package/templates/business-blue/preview.png +0 -0
- package/templates/business-blue/template.yaml +14 -0
- package/templates/pitch-bold/deck.yaml +23 -0
- package/templates/pitch-bold/pages/_chart.yaml +32 -0
- package/templates/pitch-bold/pages/_compare.yaml +36 -0
- package/templates/pitch-bold/pages/_content.yaml +58 -0
- package/templates/pitch-bold/pages/_cover.yaml +31 -0
- package/templates/pitch-bold/pages/_ending.yaml +27 -0
- package/templates/pitch-bold/pages/_flow.yaml +46 -0
- package/templates/pitch-bold/preview.png +0 -0
- package/templates/pitch-bold/template.yaml +14 -0
- package/templates/tech-dark/deck.yaml +24 -0
- package/templates/tech-dark/pages/_chart.yaml +27 -0
- package/templates/tech-dark/pages/_compare.yaml +38 -0
- package/templates/tech-dark/pages/_content.yaml +51 -0
- package/templates/tech-dark/pages/_cover.yaml +30 -0
- package/templates/tech-dark/pages/_ending.yaml +25 -0
- package/templates/tech-dark/pages/_flow.yaml +80 -0
- package/templates/tech-dark/preview.png +0 -0
- package/templates/tech-dark/template.yaml +14 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# 06 · 发布前评审与测试(v1.0.0 收口)
|
|
2
|
+
|
|
3
|
+
> 生成:2026-09-05 | 对象:dsh-ppt-studio(三轮真实端到端测试后的 1.0.0 基线)
|
|
4
|
+
> 输入:docs/00 设计源 / docs/01 需求目标 / docs/03 更新日志 / 三轮测试反馈 / 本轮五原则审查 + 自设计测试
|
|
5
|
+
> 结论一句话:**达到发布标准。** 五项原则均"良好"及以上;发现并修复 3 个严谨性问题;自包含测试体系(smoke 181 + preflight 11 + E2E 13 + real 2)可在无外部资产下复现全部验证。
|
|
6
|
+
|
|
7
|
+
> **计数说明(2026-09-14 加)**:§一 是生成于 2026-09-05 的**历史快照**,其中 `smoke 181` 是当时的套件规模,**不改写**。
|
|
8
|
+
> 套件规模会随每轮增量断言增长;**当前规模与最新结果只认 §二 2.1(持续维护)与 §六 发布标准核对**——现为 **smoke 245**。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 一、五原则审查
|
|
13
|
+
|
|
14
|
+
### 1.1 鲁棒性(适应不同用户/场景)—— 评级:良好(有明确边界)
|
|
15
|
+
|
|
16
|
+
**已具备的防线**:
|
|
17
|
+
|
|
18
|
+
| 维度 | 机制 |
|
|
19
|
+
|---|---|
|
|
20
|
+
| 能力探测 | Office / Edge / python 全部探测后降级(无浏览器→标注"未实测/未经视觉审阅";无 Office→真渲染通道自动隐藏;无 python→兜底链路不可用提示) |
|
|
21
|
+
| 引擎回退 | auto=pptd 主引擎;硬失败→python-pptx 兜底**醒目标注**;显式指定引擎绝不静默降级 |
|
|
22
|
+
| 文件兼容 | UTF-8/UTF-16(WPS)XML 自动识别;store/deflate zip;媒体缺失→占位图(导入/导出双侧) |
|
|
23
|
+
| 坏输入 | 缺 deck.yaml / YAML 语法错误(附笔误指引)/ 元素级样式键 / 声明 id 防呆 / 空 pages / 0 元素页 / 2000 字长文——preflight A1-A6 全绿:**报错不崩溃,且报错带指引** |
|
|
24
|
+
| 幂等 | 路由(双源单装配 + refcount + 表判据)、autoDeclare、重复导出、重复 splice |
|
|
25
|
+
|
|
26
|
+
**已知边界(诚实声明,均有替代路径)**:字体观感假设(估算档;加粗 CJK 已×1.06 补偿);EMF 媒体;跨平台(COM/Edge 探测面向 Windows);pptxgenjs 未实现(D6 决策);动画/阴影/超链接/母版继承不导入。**跨用户风险**:新用户首次遇到的"隐形契约"(样式键层级)已由 ppt_check 报错 + 手册 + skill 覆盖。
|
|
27
|
+
|
|
28
|
+
### 1.2 泛用性(功能/场景覆盖)—— 评级:良好(主线全覆盖,纵深有边界)
|
|
29
|
+
|
|
30
|
+
- 四类任务(from-scratch/augment/edit/summarize)语义路由 + quick/normal/audit 三档。
|
|
31
|
+
- 保真三通道(参考双轨 / 手术 patch / 替换 splice+slice)——"像 / 贴 / 保"全覆盖。
|
|
32
|
+
- 输入:.pptx 导入(参考层 + 全量色板 + safeArea 探测);图表(bar/line/pie 矢量拼绘);custGeom/渐变/alpha/prst。
|
|
33
|
+
- 覆盖盲区(文档化,不阻塞):summarize 无"特殊化形态"(通用能力,C8 未实现);多源内容合并/PDF 字典导入无;图表类型有限;line 仅 2 点。
|
|
34
|
+
- **E2E 佐证**:自建高难度夹具 12 页(声明制/安全区/渐变/alpha/custGeom/嵌套卡/表格/图表/跨页数字/来源标注)门禁 0 错误。
|
|
35
|
+
|
|
36
|
+
### 1.3 可维护性 —— 评级:优秀(本轮再加固)
|
|
37
|
+
|
|
38
|
+
- 免 tsc(src→lib)、无外部运行时依赖(yaml 唯一例外)、docs/ 五文件 + 本次 docs/06、git semver 约定。
|
|
39
|
+
- 测试四层:smoke 181(全链路)→ preflight 11(坏输入/边界/幂等/性能/媒体 splice)→ **e2e-1.0 13(自包含端到端:real browser measure + real Office COM render + 自产 seed 回导)** → regression-real 2(真实 WPS 资产)。
|
|
40
|
+
- **自包含化(本轮)**:历史外部资产已清理 → 夹具生成器 examples/fx + fixtures.mjs,`npm run test:e2e` 一条命令复现全部真机验证。
|
|
41
|
+
- 文档链同步约定(docs/05);README 更新为手册(含开发维护 §10)。
|
|
42
|
+
|
|
43
|
+
### 1.4 可用性 —— 评级:良好 → 优秀(1.0.0 手册 + skill 后)
|
|
44
|
+
|
|
45
|
+
- 用户侧:四类任务自动路由;`ppt_schema` 自述;`ppt_new` 兜底样例;`ppt_preview` 同源链接对话内看稿;audit 档自动化(真渲染 + 回读断言)。
|
|
46
|
+
- 易踩坑点(本轮修复/覆盖):样式键层级(报错+指引);YAML flow 嵌引号;声明 id 防呆;隐藏契约不再静默。
|
|
47
|
+
- **1.0.0 新增**:README 使用手册(10 章,含 FAQ/边界/维护)+ **内置 skill `ppt-studio-manual`**(提问式学习:不用读完文档)。
|
|
48
|
+
- 已知摩擦(诚实):Office COM 窗口闪现;20 个工具面名字多(工作流提示词引导降低迷路率);估算保守产生"宁多不放过"的 warning(意图:防漏)。
|
|
49
|
+
|
|
50
|
+
### 1.5 严谨性 —— 评级:良好(本轮抓出 3 处并修复)
|
|
51
|
+
|
|
52
|
+
**本轮发现并修复(测试即审查)**:
|
|
53
|
+
|
|
54
|
+
| # | 发现 | 性质 | 修复 |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| G1 | `expectedOverlaps` 声明 id 无存在性防呆(对照 expectedOutOfSafeArea/contrastExempt 都有)——声明指向幽灵元素 = "以为声明了还报错" | 防呆缺口 | validatePage 同款校验 + preflight A4 |
|
|
57
|
+
| G2 | 空 `pages: []` 静默产出 0 页 pptx(PowerPoint 打不开) | 静默坏产物 | validateDeck ≥1 页拦截 + preflight A2 |
|
|
58
|
+
| G3 | README 三处过期("实测档下一阶段/pptx 截图未实现/改一页手工姿势"——均为已实现历史) | 文档失真 | 手册重写为 v1.0.0 状态 |
|
|
59
|
+
| G4 | router 工作流提示词未含 splice/slice(编辑既有页的正确姿势) | 提示词缺口 | 铁律 7 增补交付路径指引 |
|
|
60
|
+
|
|
61
|
+
**核对未发现捷径的证据**:度量链真实闭环(textMetricsOf.overflowY = textH−boxH;verify 与 export 同一阈值,实测档交叉 D3);声明制无豁免洞(content-collision 硬底线、decoration 不豁免出界、audit 禁 autoDeclare);zip 手术(splice/slice)自证(SHA256 逐条目)+ Office 打开真值;无静默引擎切换(auto 语义写死);ERROR 级从未降级(docs/05 底线)。
|
|
62
|
+
|
|
63
|
+
**尚存的"掩盖可能"(诚实)**:浏览器实测档默认关闭(老行为优先——跨字体环境差异时"估算通过但实测出错"需显式 `measured=true` 暴露;已在手册/提示词明示);EMF/跨实现未验证;百页 deck 的 measure 是分钟级(文档标注);autoDeclare 的"意图自证"是提示词约束(模型自律)而非机器验证(D1 设计如此,audit 档已机器禁用)。
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 二、测试矩阵与结果(本轮执行 + 历轮汇总)
|
|
68
|
+
|
|
69
|
+
### 2.1 本轮执行(全部通过)
|
|
70
|
+
|
|
71
|
+
| 场景 | 类型 | 结果 |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| smoke.mjs(262 断言:全链路 + 路由幂等 + autodeclare 回归 + splice/slice zip 级 + 度量/声明/防呆 + **连线方向/箭头/包围盒** + **内置技能包与"老用户不受影响"超集断言** + **手册 vs 源码事实一致性 13 条** + **讲稿备注/实体解码/图表配色** + **答疑手册触发纪律 3 条** + **lib/ 入库一致性** + **M2 真产物页号契约与注入自证 4 条** + **python-pptx 兜底生成物过真消费者 2 条** + **表格字号三层同源与 audit 下限 2 条** + **质量档降级可见 3 条** + **引擎不静默切换 3 条** + **出界分级两码可分 1 条** + **surgicalMap 消费自证 2 条** + **工具描述页数守卫 1 条** + **表格门禁 2 条** + **换行鲁棒(CRLF+BOM)3 条** + **用户模板库两层目录与入库/物化/删除 5 条** + **DSH 0.1.7:预设声明 / 门禁新参照格式 / 安装器路径** + **桌面端安装器(桩工具链 dry-run,不碰真桌面端)**) | 自动化 | 262/262 |
|
|
74
|
+
| **讲稿(备注)真消费者验证**(2026-09-14):① **真 PowerPoint COM** 打开带备注的导出件并逐页读回讲稿文本(多行 18 字 / 无备注页 NONE / 单行含 `<特殊> &` 15 字);② **python-pptx 1.0.2** 独立读回同样三页文本 + 重新打包成功(smoke 里以可选断言固化,缺 python 时跳过) | 真机/第三方 | ✓ 两路一致 |
|
|
75
|
+
| **python-pptx 兜底引擎真消费者验证**(2026-09-18 新增,smoke §43):生成一段覆盖「shape 无填充 / 对象填充 `{color,alpha}` / 带描边 + line 连接线 + table + text」的 deck → `genPythonScript` → ① `python -m py_compile` 必须过;② `runPythonExport` 必须真跑出 .pptx,且 **python-pptx 自己打开它并读回**(1 页 ≥ 6 形状)。**为什么必须补**:这条路径此前在 `scripts/` 里**零调用**,而它是"pptd 硬失败时"的最后保险;python 是可选依赖,"跳过"与"通过"印同一个颜色,于是它连编译都过不去也没人知道 | 真机/第三方 | 2 条全绿 |
|
|
76
|
+
| 文档计数自证(smoke 内):README/docs02/docs06/手册里所有"smoke N 断言 / N/N"必须等于真实断言数 | 自动化 | 245 全中 |
|
|
77
|
+
| **M2 通道真产物自证**(2026-09-18 新增,smoke §27.4~27.7):由 `ppt_render` + `ppt_measure` 真跑产出的 `layout.json`/`measured.json` 驱动——① 两档 1 基 `pageNo` 一一对应;② 在真产物上给**真实元素**注入溢出,必被捕获且 id 正确;③ 第 1 页的注入**不得串到第 2 页**(错位一页是原 bug 最危险的形态);④ 缺 `pageNo` 的旧版产物必须报 `measured-unpaired` 而不是静默返空。**为什么必须真产物**:原 bug 的全部成因就是"夹具照着函数期望的形状写、从没调用过真生产者"(夹具两侧同写 `index: 1` 掩盖了 0 基 vs 1 基的错配)| 自动化(真产物) | 4 条全绿 |
|
|
78
|
+
| **安装路径真机自证**(`npm run test:bundle`,2026-09-14):隔离 `DSH_HOME` 起临时 profile → 真 `dsh plugin --profile web add <spec>` → 断言"无 no-dsh.bundle 警告 / 已自动进 `dsh.profile.bundles` / 已物化 / `--dump-config` 出现 ppt-studio 行";**两种 spec 都验过**:本地 tgz,**GitHub 资产 URL(用户实际命令)**。**2026-09-15 补升级路径**:同版本号、内容不同的第二个 tgz 再 add → 真换成新字节(marker 在位)+ 依赖规格改指新包 + bundles 不丢 + dump-config 仍在(**不碰用户 profiles**)。**2026-09-18 补 `--local` 迭代模式**:同一个隔离 profile 里跑 `release-sync --local` → 全程无上传 + 状态文件 `mode=local`/`mount=bundle-local`/`mountMatch`/`ok` + 规格变成指向 `_artifacts/` 的 `file:`(且恰好只留当前那一个)+ **挂载副本 `lib/index.js` 与仓库刚构建的逐字节相同**。**同日再补「预设行 + junction」模式**(用户要求"只有 PPT 工作室预设才有这些工具")→ **2026-09-18 事故后作废并重写为「预设健康」判据**:那条路在本 DSH 版本上**必然产出 broken 预设**(行的裸包名从 harness 解析,不是 profile)⇒ 前端选择器只渲染健康预设 ⇒ **用户根本选不到该预设**,而 profile 里又没 bundle ⇒ 两边都没工具(现场:245 个会话里 `agentPreset=ppt` 的 **0** 个,而所有文件级检查全绿)。**2026-09-24 再为 DSH 0.1.7 重写第 7 步**(预设改为向 `agentPresets` 注册表**声明**,目录发现被上游删除;`discoverPresets` 那个包已不存在):① 安装器 bundle 模式 exit 0 且**不再产出** `.agent-presets/`、并清理 0.1.6 遗留目录;② 校验"声明预设"所需的包内资产(`agent-presets/ppt/*` + `lib/preset-delivery.js`);③ `--isolate` **明确拒绝**(exit 1 + 两处源码依据);④ 它**不**把 pnpm 物化的包目录换成 junction;⑤ **预设健康的新判据**——组合里每一行的 `name` 都能从**注册表 mount 的 baseUrl**(= `dsh-web-app` 包目录)解析(实测 29 行全解析成功);⑥ 默认不镜像技能、显式 `--mirror-skills` 才镜像 | 真机/launcher | 28/28 |
|
|
79
|
+
| **质量档降级可见**(2026-09-18 新增,smoke §45):把项目 `state.json` 写成非法 JSON → ① 必须**上报**而不是静默回落 `standard`;② 诊断必须 `degraded=true` 且带原因(供工具输出提示"audit 额外门禁未生效");③ **反例**:文件不存在必须 `error=null`(防把每个新工程都判成降级) | 自动化 | 3 条全绿 |
|
|
80
|
+
| **表格门禁**(2026-09-18 新增,smoke §50):① 单元格长文案 + 矮表格 → 必须报 `table-overflow` ERROR;② **给足高度的表格不得误报**,且快照确实带 `overflowY`(防"估算没跑也算通过")。接入前先做**影响面实测**:全部夹具 2 张表、0 张被判溢出(余量 -228 / -52.8)⇒ 按 error 档接入对既有工程零影响;e2e 的 fx-pro 0 错误仍绿 | 自动化 | 2 条全绿 |
|
|
81
|
+
| **装配防重行为断言**(smoke §40):同进程第二次 `apply()` 不重复注册工具/命令/监听器(按 `ctx.effect` 真语义 + `globalThis` refcount) | 自动化 | ✓ |
|
|
82
|
+
| preflight-1.0.mjs(11 断言:坏输入 6 + 边界 2 + 幂等 1 + 性能 1 + 媒体 splice 1) | 自动化 | 11/11 |
|
|
83
|
+
| check-preset.mjs(预设行 vs 随包 standard 逐行比对;**允许声明过的有意差异**——目前只有 persona 一行,理由写在脚本白名单里) | 自动化 | 漂移 0 / 缺行 0 / 有意差异 1 |
|
|
84
|
+
| **e2e-1.0.mjs(13 断言,自包含夹具)**:fx-pro 12 页门禁 0 错误 / 声明命中 10 条 / 装饰豁免 / A8 无误报 / **材料包覆盖全 12 页正文且无 groups·status 判定字段(M3 重写 2026-09-18)** / **M2 实测 12 页零分歧(真浏览器)** / export 12 slide 无 chart 部件 + **parity 自证(表·图·线方向)** / **splice 2 条目变化 32 不变 / slice 单页 / Office COM 真渲染 spliced[3]+single[1] / 自产 seed 回导无重复 id** | 端到端真机 | 13/13 |
|
|
85
|
+
| regression-real.mjs | 真实资产 | 2/2(19 页 deck 缺资产跳过) |
|
|
86
|
+
|
|
87
|
+
### 2.2 测试场景设计(自包含案例 = examples/fx)
|
|
88
|
+
|
|
89
|
+
| 类别 | 案例 | 覆盖 |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| 常用任务模式 | fx-mini 3 页快速路径;fx-pro 从零 12 页全流程(封面/架构/表格/图表/时间线/长文/安全区/对比度/几何/数字/分隔/总结) | 渲染/审阅/导出/预览 |
|
|
92
|
+
| 高难度 | 三层嵌套卡+声明闭包(panel→box→text 隔层免声明);custGeom 弧带+alpha;渐变承载面白字;长文本保守估算恰好容纳;跨页数字对账;安全区/页脚带出界声明 | 声明制/度量/几何/M3 |
|
|
93
|
+
| 能力边界 | 单页 deck;空白页;2000 字文本;wrap=false 水平溢出;坏 YAML/缺失 deck.yaml/元素级样式键/幽灵声明/空 pages | 鲁棒性 |
|
|
94
|
+
| 刁钻需求 | 装饰 role 豁免 vs 出界不豁免(09 页 deco 不豁免出界=arc 需声明);对比度误报场景(A8);声明 id 防呆;同路径重复导出;splice 同源工程替换 | 严谨性/幂等 |
|
|
95
|
+
| 保真链路 | 自产 seed(12 页)→ splice 页 6→3 替换 → slice → COM 渲染 → 回导去重 | A3/A9 全链 |
|
|
96
|
+
|
|
97
|
+
### 2.3 历史真实任务(主观数据;本轮起以自包含为准)
|
|
98
|
+
|
|
99
|
+
三轮端到端(萨尔浒 10 页 / AIC5 第 15 页 / 产能 19 页):用户链路成熟;两轮暴力的插件缺陷(autodeclare 崩溃、保真缺专项)已修复并被回归锁定。
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 三、对照初始目标与计划(docs/01)
|
|
104
|
+
|
|
105
|
+
| 初始目标 | 状态 | 证据 |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| R1 预设 = standard 全量 + 插件行 | ✅ | agent.cordis.yml;标准模式行为不变(非 PPT 任务零干扰,语义路由不误切) |
|
|
108
|
+
| R2 PPT 任务专用工作流 / 非 PPT 一致 | ✅ | 语义 + /ppt 双通道;smoke 路由断言 |
|
|
109
|
+
| R3 四类任务兼容(差异化亮点) | ✅ | detectTaskType 语义;workflowSection 四型;edit 专用 splice 路径(1.0.0 提示词) |
|
|
110
|
+
| R4 核心:避免元素区块冲突 | ✅ | 声明制 + 出界分级 + 溢出门禁;**三轮真实任务零冲突错误交付**;本轮夹具 0 错误验收 |
|
|
111
|
+
| R5 复杂场景可做且质量可验证 | ✅(边框证据) | audit 档(禁声明+强制目检+回读断言+真渲染);M2 实测=终审;M3 跨页对账;100 页 79ms render 上限 |
|
|
112
|
+
| R6 尊重模板/题材 | ✅ | 双轨(骨架 + 真相层);参考双轨;手术;splice;全量色板 |
|
|
113
|
+
| R7 交付可编辑 pptx + 中间层 | ✅ | 交付链 export/splice/slice/patch;预览链接 |
|
|
114
|
+
| R8 与生态独立共存 | ✅ | 无外部运行时依赖;独立包/预设 |
|
|
115
|
+
| 目标 1 可验证工作流 | ✅ | 三轨 + 四层测试 |
|
|
116
|
+
| 目标 2 同一中间层 | ✅ | PPTD v1 唯一事实源;两引擎 + 保真手术共享 |
|
|
117
|
+
| 目标 3 迭代友好 | ✅ | smoke/preflight/e2e/real + docs + git |
|
|
118
|
+
| 目标 4 人人可用 | ✅(达成) | 手册 + skill + 自述工具 + 报错指引(三轮测试"熟练工"→1.0.0 手册覆盖) |
|
|
119
|
+
|
|
120
|
+
**未达/暂缓(诚实)**:C8(总结任务特殊形态)未实现;D6 的"评测集过审"改为"三轮真实端到端视为过审"(用户决策,本报告即评审底稿);M4 client 内嵌面板 / 证据状态机 v2 归 1.0.0 之后。~~**npm registry 发布**(2026-09-14 用户决定不做)~~ → 2026-09-26 用户注册账号并跑通 `npm login`,**但首次 `npm publish` 被 2FA 策略挡下(E403),包仍未发布**(见下方清单)。
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 四、核心亮点(1.0.0 叙事)
|
|
125
|
+
|
|
126
|
+
1. **声明制(设计意图)胜过元素类型制**:唯一让"有意叠层"合法的方式;content-collision 硬底线 + 声明闭包 + autoDeclare。这是"避免元素区块冲突"的机器化答案。
|
|
127
|
+
2. **可验证的生产线(三轨)**:数字门禁(快)/ 视觉审阅(慢但必要)/ Office 真渲染(有条件终极真值)+ M2 浏览器实测=终审——"质量不是靠运气"。
|
|
128
|
+
3. **保真交付一个命令**:splice(替换进原稿,其余页 SHA256 逐字节自证)/ slice(单页+完整母版)/ patch(贴模板)——"编辑既有精美 PPT"从手工 zip 手术变成工具。
|
|
129
|
+
4. **自包含范例生态**:内置模板(4 版权自研 + 外部模板双轨)、ppt_new 样例、examples/fx 高难度夹具——新人可学、可验、可复现。
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 五、老用户习惯影响评估
|
|
134
|
+
|
|
135
|
+
| 维度 | 影响 | 结论 |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| 既有路径 | 四类任务工作流、声明制语义、双轨/手术、预览链接、/ppt 命令——**全部保留**;新能力均为**新工具/新参数/新字段**(splice/slice/pages/colors 扩展) | ✅ 零破坏 |
|
|
138
|
+
| 严格性 | 无 ERROR→warning 降级;新增两条**报错**(元素级样式键、声明 id 防呆、空 pages)——只对**本来就会出错**的输入生效 | ✅ 更早暴露 |
|
|
139
|
+
| 度量 | 加粗 CJK ×1.06 全局保守化 → 存量 deck 的加粗标题/正文可能新增 warning(估算更严)——宁多不放过;不影响门禁(估算溢出为 warn/auto-fit 报告) | ⚠ 知会(1.0.0 日志已载明) |
|
|
140
|
+
| 工具面 | +2 工具(spice/slice)+ 参数(pages);README 从开发日志改为手册(信息全保留并更新) | ✅ |
|
|
141
|
+
| 开发链 | 装配单源化(preset 行);dev_reload_package 诊断化;注入器 0.3.4 | ✅(诊断更好) |
|
|
142
|
+
|
|
143
|
+
**结论**:老用户只需知道"改原稿某页现在该用 splice"(提示词、手册、skill 三处直达),其余无感。
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 六、发布标准核对
|
|
148
|
+
|
|
149
|
+
- [x] smoke 245 / preflight 11 / e2e-1.0 13 / real 2 全绿
|
|
150
|
+
- [x] 预设自检(`node scripts/check-preset.mjs`)0 漂移
|
|
151
|
+
- [x] 手册(README v1.0.0)+ 内置技能 4 本(手册 + 叙事版式 + 图表数据 + 中文文案)+ docs 链同步
|
|
152
|
+
- [x] 自包含测试(不依赖已清理的外部资产)
|
|
153
|
+
- [x] 版本 1.0.0 + GitHub Release 资产(`release-sync` 达成机器 == GitHub 字节级)
|
|
154
|
+
- [ ] npm 通道(v1.0.3 起准备;**2026-09-26 仍未发布**):命令已定——**用发版时那个 tgz 发布**
|
|
155
|
+
`npm publish "<.sync-state.json 里 localTgz 指向的文件>"`(**别在 main 前进后跑裸 `npm publish`**:
|
|
156
|
+
那会按当前工作区打包,同名版本内容却与 Release 资产不同)。
|
|
157
|
+
**阻塞**:首次 `npm publish` 返回 **E403** — `Two-factor authentication or granular access token with bypass 2fa
|
|
158
|
+
enabled is required to publish packages`。账号开了 2FA,而 `npm login` 的普通登录凭据不能写入;
|
|
159
|
+
需账号持有人二选一:发布时给 `--otp=<6 位码>`,或建一个勾了 **Bypass 2FA** 的 granular token
|
|
160
|
+
(Read and write;首次发布要覆盖"全部包"才能建新包)。命令执行后复查 `npm view dsh-ppt-studio` 仍是 **404** ⇒ 确认没发出去。
|
|
161
|
+
→ 发布**成功之后**才做(这两条**尚未执行**):`npm view dsh-ppt-studio version dist.integrity` 与 Release 资产比对;
|
|
162
|
+
隔离 `DSH_HOME` 里 `dsh plugin --profile web add dsh-ppt-studio` 真装一遍
|
|
163
|
+
> **发布者网络前提(2026-09-18 实测)**:npm 的**网站**曾对共享/数据中心出口 IP 直接 403
|
|
164
|
+
> (本机出口 `141.11.133.158` 命中,界面显示"访问暂时受限 / 我不是机器人"),而 **registry API 一直正常**
|
|
165
|
+
> (`registry.npmjs.org` 对包名查询返回 404 = 可用)。2026-09-26 用户换出口**注册成功**并完成 `npm login`
|
|
166
|
+
> (`npm whoami` = `zbsph`)⇒ 网站这一关过了,卡点转到了 2FA 写入策略。
|
|
167
|
+
> 另一条教训要分清:**注册账号 ≠ 这台机器被授权**。`~/.npmrc` 不存在时 `npm whoami` 是 `need auth`,
|
|
168
|
+
> 必须由账号持有人跑一次 `npm login`(或给一个带 publish 权限的 token)——这一步没法由插件作者代做。
|
|
169
|
+
> **还有一条(2026-09-26 独立审阅抓到的)**:不要把"下一步要跑的命令"写成"已经跑过的验证"。
|
|
170
|
+
> 本轮就犯过:`npm publish` 还没试,更新日志先写了"已发布 + 字节已核对 + 干净 HOME 已真装",并提交发布,
|
|
171
|
+
> 直到审阅比对工具输出 `npm view … 404` 才暴露。**未执行的验证一律写成计划,不写进验证表。**
|
|
172
|
+
- [x] 发行产物真进程验证:4 本内嵌技能 `registered:true`、`visible: runtime/runtime/len=N`
|
|
173
|
+
- [x] 已知边界/暂缓项全部文档化(无隐藏债务)
|
|
174
|
+
|
|
175
|
+
**1.0.0 判定:通过。**
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 七、内置技能的对照评测(2026-09-14)
|
|
180
|
+
|
|
181
|
+
### 7.1 方法
|
|
182
|
+
- **两臂只切换插件包来源**:A = 当时发布版(`D:\plugins\package`,**无**三本新技能,工作流提示词无新指引行);B = 源码版(含三本技能 + 一行"何时加载"指引)。
|
|
183
|
+
- 输入为**同一份 `brief.md`**(把 6 条原始记录整理成 5 页汇报 + 导出 pptx),同一台机器、同一模型、同一 headless 装配(`dsh --profile headless --patch <overlay>`),两臂各跑 **2 轮**。
|
|
184
|
+
- 门禁指标由**同一个 lib**事后复算(`resolveDeck → renderDeck → verifyDeck`),避免"自己评自己"。
|
|
185
|
+
- 指标:元素数 / 文本字数 / 图表表格数 / `[✗]`错误 / `[⚠]`警告 / `[·]`建议 / AI 味信号命中数(按 `ppt-studio-copy` §4-5 的信号表扫描页面文本)/ 标注来源的页数。
|
|
186
|
+
|
|
187
|
+
### 7.2 结果
|
|
188
|
+
|
|
189
|
+
**有效轮次**(A = 无新技能、工作流无新指引行;B = 含 4 本内嵌技能 + 指引行):
|
|
190
|
+
|
|
191
|
+
| 指标 | R1 A | R1 B | R3 A(as-shipped) | R3 B(as-shipped) |
|
|
192
|
+
|---|---|---|---|---|
|
|
193
|
+
| 元素数 | 103 | 92 | 94 | **85** |
|
|
194
|
+
| 文本总字数 | 1202 | **1073** | 1524 | **860** |
|
|
195
|
+
| 图表 / 表格 | 0 / 1 | 0 / 1 | 1 / 1 | 0 / 0 |
|
|
196
|
+
| `[✗]` 错误 | 0 | 0 | 0 | 0 |
|
|
197
|
+
| `[·]` 建议 | 12 | **8** | 13 | 14 |
|
|
198
|
+
| AI 味信号命中 | 1 | 1 | 0 | 0 |
|
|
199
|
+
| 标注 `source:` 的页数 | 5 | 5 | 5 | 5 |
|
|
200
|
+
|
|
201
|
+
**结论(按证据强度排序)**:
|
|
202
|
+
1. **没有回退**:两轮有效对照里,B 在全部指标上都不比 A 差(建议项 R1 更少、R3 持平;文本量两轮都显著更少)。
|
|
203
|
+
2. **文本更省**:−11%(R1)与 −44%(R3)——与"页面文字是结论+证据,解释进讲稿"的定位一致。
|
|
204
|
+
3. **一处定性改进**(R1 人工比对):B 把"行业报告显示…专家认为…"改写成页内**「来源提醒」**("没有机构、样本量与年份,对外引用前必须补上")并在 `source:` 写明"暂不可对外引用";A 把这句原样搬进了页面。
|
|
205
|
+
4. **不要夸大的部分**:门禁错误四臂全为 0——差异在**风格与冗余度**,不是"过不过门禁"。这与用户自己的判断一致:技能是**锦上添花**,不是质量闸门。
|
|
206
|
+
5. 技能真正的不可替代价值,是**基座模型无从知道的插件事实**(例如"导出的 pptx 里 chart 只画几何、没有标签"),这类内容 A 臂无从获得。
|
|
207
|
+
|
|
208
|
+
**无效/受污染的轮次(如实记录)**:
|
|
209
|
+
- R2:A 臂跑之前,B 臂的 `install.mjs` 已把新技能镜像到 `<dshHome>/skills/`,**A 臂也能看到技能**(transcript 命中技能名)→ 不是"before/after",作废。
|
|
210
|
+
- R3-first-attempt:同样受镜像污染,且 arm A 包由 `git archive` 构造时丢了 `lib/`(被 gitignore),未真正运行 → 作废。
|
|
211
|
+
- 受污染轮次仍有一条有用的副产物:**它证明文件镜像通道有效**——即使插件包内没有技能,模型也会从 `~/.dsh/skills/` 拿到同名技能。
|
|
212
|
+
|
|
213
|
+
**定性差异**(人工比对两臂产物原文):
|
|
214
|
+
- B 臂把材料里的模糊归因("行业报告显示…专家认为…")改写成页内**「来源提醒」**("没有机构、样本量与年份,对外引用前必须补上"),并在 `source:` 写明"暂不可对外引用";A 臂把这句原样搬进了页面。
|
|
215
|
+
- B 臂页标题更常写成"**结论 + 影响/动作**"(如"团队 6 人下月只剩 4 人,11 月后人均要覆盖 1.5 个园区"),A 臂更常是"栏目名:事实"(如"进度与团队:2 个园区待接入")。
|
|
216
|
+
- B 臂有一页显式标注图表口径("柱长按 100% 等比缩放")。
|
|
217
|
+
|
|
218
|
+
### 7.3 诚实边界
|
|
219
|
+
- **n=2 有效轮次、单一 brief**:这是方向性证据,不是统计结论;且**没有出现"全指标一致更优"**,只有"不回退 + 文本更省 + 一处定性改进"。
|
|
220
|
+
- 所有有效轮次 `[✗]` 都是 0——差异出现在**风格/冗余度**,不是门禁通过率。
|
|
221
|
+
- 评测跑在**评审修补之前**的版本上;评审后的改动是标注与措辞收敛(不影响上述行为差异)。
|
|
222
|
+
- AI 味信号用短语扫描做粗度量:两臂都可能命中同一个短语而**处理方式完全不同**(A 复述 / B 标注),计数需与定性读法一起看。
|
|
223
|
+
- **对照实验的污染源(本轮实测发现)**:技能有两条交付通道——**内嵌注册**(插件层)与**文件镜像**(`<dshHome>/skills/`,全局层)。
|
|
224
|
+
只要机器上跑过一次新版 `install.mjs`,镜像就会让**两臂都能看到**新技能,A 臂不再"无技能"(R2 与 R3 第一次尝试都栽在这)。
|
|
225
|
+
干净做法:跑 A 臂前把 `~/.dsh/skills/ppt-studio-{craft,data,copy}` 移走,跑完再恢复;否则只能得到"上界"而非"增量"。
|
|
226
|
+
更稳的造包方式见 §7.5:**用普通复制 + 手工删技能/删指引行**,不要用 `install.mjs` 造对照包(它会建 junction)。
|
|
227
|
+
|
|
228
|
+
### 7.4 独立评审(同轮)
|
|
229
|
+
三本技能另交独立评审员逐条对照源码核对,发现 7 类真实缺陷并全部修补(清单见 `docs/03` 同日条目)。
|
|
230
|
+
结论:**机器守卫能挡住"写死数值",挡不住"语义偏移/不可执行/重复"——两者必须并存**(已写入 docs/05 纪律)。
|
|
231
|
+
|
|
232
|
+
**第二轮(2026-09-14 全面自检)**:用户要求"充分完善的自检",于是同一套协议再跑一次,但这次是**四本手册全量**、且要求每条缺陷给**两侧 file:line 证据**、
|
|
233
|
+
并把"确认缺陷"与"存疑待验"分开写。结果:**1 blocker + 6 major + 11 minor + 8 条无机制经验值 + 4 条源码侧缺陷**(处置清单见 `docs/03` 同日条目)。
|
|
234
|
+
两条方法论收获:
|
|
235
|
+
- **blocker 也可能被判错**:评审把 data §2 的 `role: background/decoration` 判为"教模型逃 content-collision",
|
|
236
|
+
但铁律 2 自己就写了"纯装饰元素可加 `role: decoration` 豁免**重叠**"——`role` 是层叠语义声明而非豁免开关,
|
|
237
|
+
故**不采纳"删除路径"的处方**,改为把判据写死(承载结论 → 只能 A)+ 明写"`role` 不是消错开关",张力入库 docs/01 C15。
|
|
238
|
+
**独立评审的价值在"证据",结论仍要自己复核**——照单全收会把手册砍得更差。
|
|
239
|
+
- **证据必须落在字节上**:评审自述它对 `skills/*` 的**首次读取拿到的是旧版本**(read 缓存),它是靠 node 按字节复核才定稿的。
|
|
240
|
+
凡"手册 vs 源码"的结论(含本仓库自己的自检),都要以**当次读取的字节/哈希**为准,不能只信一次读取。
|
|
241
|
+
- 本轮之后,"工具名/错误码/严重度标记/DSL 形状/预览阈值/引用计数"六类已进机器防线(smoke §37/§38,13 条);§7.4 仍需覆盖"裸阈值当建议写、语义偏移、不可执行指令、跨本重复"。
|
|
242
|
+
|
|
243
|
+
### 7.5 复现方法(随包提供两个脚本)
|
|
244
|
+
```powershell
|
|
245
|
+
# ① 造"前一版"包:**普通复制**当前包,再删掉新技能与工作流指引行(不要用 install.mjs,它会建 junction)
|
|
246
|
+
# 记得带上 node_modules/yaml(install.mjs 平时负责这一步)
|
|
247
|
+
Copy-Item <repo>\{lib,skills,templates,scripts,docs,agent-presets,package.json,README.md} <tmpA>\ -Recurse
|
|
248
|
+
Copy-Item <repo>\node_modules\yaml <tmpA>\node_modules\yaml -Recurse
|
|
249
|
+
Remove-Item <tmpA>\skills\ppt-studio-{craft,data,copy} -Recurse
|
|
250
|
+
# 删掉 lib/router.js 里含 ppt-studio-craft 的那一行(≈186 字符)
|
|
251
|
+
# ② 跑 A 臂前移走技能镜像(否则 A 也能看到技能)
|
|
252
|
+
Move-Item $env:USERPROFILE\.dsh\skills\ppt-studio-{craft,data,copy} <backup>\
|
|
253
|
+
cmd /c rmdir <profile>\node_modules\dsh-ppt-studio # 只用 rmdir,不要 Remove-Item -Recurse
|
|
254
|
+
cmd /c mklink /J <profile>\node_modules\dsh-ppt-studio <tmpA>
|
|
255
|
+
:: 注:v1.0.2 及更早的包名是 @dsh-external/dsh-ppt-studio(路径多一层),命令同理
|
|
256
|
+
dsh --profile headless --patch <overlay.yml> "<任务>" # A 臂
|
|
257
|
+
# ③ B 臂:junction 改指 repo,重跑同一任务
|
|
258
|
+
# ④ 恢复镜像、删 junction,然后同口径复算 + 生成盲评材料:
|
|
259
|
+
node scripts/eval-skills-score.mjs --a <deckA> --b <deckB> --out RESULT.md
|
|
260
|
+
node scripts/eval-skills-blind.mjs <deckA> <deckB> --out <盲评目录>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 7.6 结构化盲评(协议 + 结果)
|
|
264
|
+
**协议**(为什么必须盲:技能是"软收益",自评必然有偏;且两份产物的目录名/命名习惯会泄露来源):
|
|
265
|
+
1. 用 `scripts/eval-skills-blind.mjs` 把两臂产物**匿名化 + 随机分配**成「盲评-1 / 盲评-2」,真实映射只写进 `mapping.json`(不给评审员)。
|
|
266
|
+
2. 材料只含**产物本身**:源描述 `deck.yaml + pages/*.yaml` + Office 真渲染整页 PNG(不含 transcript、不含任何生成过程记录)。
|
|
267
|
+
3. 评审员(独立 agent)按**固定 6 维**打分并给证据:叙事结构 / 标题质量 / 信息密度与可读性 / 数据呈现 / 版式与视觉一致性 / 文案;每维 1–5 分,必须引"第几页、哪句话"。
|
|
268
|
+
4. 评审员**不得猜测来源**;最后给总分、更适合交付的一份、以及"把握度 + 不确定在哪"。
|
|
269
|
+
5. 结果落档后**再揭示映射**(避免事后编故事)。
|
|
270
|
+
|
|
271
|
+
**结果(2026-09-14,R4 两臂产物)**:`盲评-1 = B(含技能)`、`盲评-2 = A(无技能)`(映射见当轮 `mapping.json`)。
|
|
272
|
+
|
|
273
|
+
| 维度 | 盲评-1(**B 含技能**) | 盲评-2(A 无技能) |
|
|
274
|
+
|---|---|---|
|
|
275
|
+
| 叙事结构 | 4 | 3 |
|
|
276
|
+
| 标题质量 | **5** | 4 |
|
|
277
|
+
| 信息密度与可读性 | 4 | 4 |
|
|
278
|
+
| 数据呈现 | 4 | 4 |
|
|
279
|
+
| 版式与视觉一致性 | 4 | 4 |
|
|
280
|
+
| 文案 | **5** | 3 |
|
|
281
|
+
| **合计** | **26 / 30** | 22 / 30 |
|
|
282
|
+
|
|
283
|
+
**独立结论**:更适合直接交付的是**盲评-1(含技能)**。评审员给的三条关键证据,正好命中三本技能的原定目标:
|
|
284
|
+
- 标题 5/5:"五条全是带数字的结论句、无栏目名…只读标题即得结论链"(`ppt-studio-craft` §4);
|
|
285
|
+
- 文案 5/5:"无排比/破折号/升华;材料 4 的'里程碑·重塑'改成可核对句"(`ppt-studio-copy` §2/§4);
|
|
286
|
+
- 数据 4/4 的关键加分:"第 3 页把'93% vs 78%'的口径不可比写在页面上('此处只作并列对照'),并注明 78% 报告名/样本未注、专家评价仅转述"(`ppt-studio-data` §3)。
|
|
287
|
+
- 反过来,A 臂被指出**夹了一句材料里没有的结论**("系统已承接大部分重复巡检工作")——正是 `ppt-studio-copy §2 只改文风不动事实` 要挡的失效模式。
|
|
288
|
+
|
|
289
|
+
**两点说明(用户事后判定,已据此修订技能)**:
|
|
290
|
+
- 评审员把"含技能那份第 2 页柱图没有类别/数值标签"当作硬伤、把"无技能那份标全了"当作优点——这**不是**缺陷判定:
|
|
291
|
+
图表常常就是装饰/示意/背景,本来就不需要标签。已把 `ppt-studio-data` §0 从"交付级图表必须补标签"改成
|
|
292
|
+
**"先分清这张图是证据还是装饰"**的判据(承载数据 → 标签四件齐;装饰性 → 允许无标签,但交付说明标注"仅作示意"、页面结论不得依赖它),
|
|
293
|
+
并**撤销**了"给 `ppt_verify` 加图表标签建议"的候选(不把风格偏好变成机器提示)。
|
|
294
|
+
- 同理,评审员的"该拆/该合""该不该有标签"这类判断都属**内容量/风格判断**,不是门禁口径;本条结论只作方向性参考。
|
|
295
|
+
|
|
296
|
+
**把握度**:评审员自评"中",不确定处:小字(12pt)靠预览辨认可能误读;页数无硬性上限时"该拆/该合"属内容量判断;未见讲稿备注。
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# 模板导入保真审计报告(v0.7.1 对照)
|
|
2
|
+
|
|
3
|
+
> 生成时间:2026-09-04T14:26:19.698Z|源:C:/Users/11867/Desktop/ppt模板库|导入版:templates/<id>/
|
|
4
|
+
>
|
|
5
|
+
> **2026-09-18 状态说明(1.0.4)**:本报告审计的 4 套"导入版"模板(实用毕业设计论文答辩 / 极简实用部门工作总结 /
|
|
6
|
+
> 深蓝质感论文答辩 / 简约商务)**已从随包发行物移除**(46.2 MB,占安装包 96%,实测从未被使用)。
|
|
7
|
+
> 本报告**保留为历史证据**(它是 custGeom/prst/文本保真这些结论的实证来源);报告里提到的 `templates/<id>/`
|
|
8
|
+
> 现在只存在于 **v1.0.3 的 Release 资产**与 git 历史中(`previews/` 是 Office 渲染产物、未被 git 跟踪,
|
|
9
|
+
> 只在资产里)。重建脚本需要原始 pptx,而桌面源目录 `C:/Users/11867/Desktop/ppt模板库` 已不存在。
|
|
10
|
+
|
|
11
|
+
## 说明
|
|
12
|
+
- **源计数**:原始 pptx XML(pptx 内部结构,权威)逐页统计;**导入计数**:模板工程 yaml。
|
|
13
|
+
- **保真率** = 导入元素数 / 源形状级元素数(sp/pic/cxnSp/grpSp 内子元素合并为"形状级元素";grpSp 嵌套子元素计入源侧计数)。
|
|
14
|
+
- 文本保真 = 导入文本字符数 / 源文本字符数(tl 文本 run 汇总;不含表格/图表内文本)。
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## 实用毕业设计论文答辩PPT模板.pptx → 模板「实用毕业设计论文答辩ppt模板」(24 页源 vs 24 页导入)
|
|
18
|
+
|
|
19
|
+
| 类别 | 源(XML) | 导入(yaml) | 备注 |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| 形状级元素 | 691 | 359 | **保真率约 52%**(组合子元素并入源计数) |
|
|
22
|
+
| sp(含矩形/自选) | 471 | 303 | 自选形状(箭头/圆角等 prst)按 rect 近似 |
|
|
23
|
+
| pic(图片) | 27 | 27 | 裁剪图(crop ×27)拉伸处理 |
|
|
24
|
+
| cxnSp(连接线) | 29 | 29 | v0.7.1 起解析 |
|
|
25
|
+
| 组合 grpSp 子元素 | 164 | (并入上) | v0.7.1 起展开 |
|
|
26
|
+
| 自定义几何(custGeom) | 145 | 0 | 自选图形按矩形近似 |
|
|
27
|
+
| 渐变填充(gradFill) | 0 | 0 | 归一为主色(stops 在 import-styles.json) |
|
|
28
|
+
| 占位符(placeholder) | 0 | 0 | 占位符元素并入形状近似 |
|
|
29
|
+
| SmartArt(diagram) | 0 | 0 | 降级为文本占位 |
|
|
30
|
+
| 表格 / 图表 | 0 / 3 | 保留近似 | chart→占位 |
|
|
31
|
+
| 页面背景(图片/纯色) | 0 图 / 0 色 | 0 | 背景提取(满页图≥95% 提升) |
|
|
32
|
+
| 文本字符数 | 2977 | 3072 | **文本保真率约 103%** |
|
|
33
|
+
| 媒体文件 | — | 3 | 组合内图片 v0.7.1 起提取 |
|
|
34
|
+
|
|
35
|
+
### 页级明细(源侧特征)
|
|
36
|
+
|
|
37
|
+
| 页 | 元素 | 特征 | 背景 |
|
|
38
|
+
|---|---|---|---|
|
|
39
|
+
| 第1页 | 34 | 1图/10自/0渐/0智/0占 | |
|
|
40
|
+
| 第2页 | 15 | 1图/0自/0渐/0智/0占 | |
|
|
41
|
+
| 第3页 | 24 | 1图/8自/0渐/0智/0占 | |
|
|
42
|
+
| 第4页 | 54 | 1图/12自/0渐/0智/0占 | |
|
|
43
|
+
| 第5页 | 58 | 1图/13自/0渐/0智/0占 | |
|
|
44
|
+
| 第6页 | 11 | 2图/1自/0渐/0智/0占 | |
|
|
45
|
+
| 第7页 | 24 | 1图/7自/0渐/0智/0占 | |
|
|
46
|
+
| 第8页 | 15 | 0图/5自/0渐/0智/0占 | |
|
|
47
|
+
| 第9页 | 27 | 1图/5自/0渐/0智/0占 | |
|
|
48
|
+
| 第10页 | 39 | 1图/10自/0渐/0智/0占 | |
|
|
49
|
+
| 第11页 | 11 | 2图/1自/0渐/0智/0占 | |
|
|
50
|
+
| 第12页 | 28 | 1图/7自/0渐/0智/0占 | |
|
|
51
|
+
| 第13页 | 23 | 1图/5自/0渐/0智/0占 | |
|
|
52
|
+
| 第14页 | 34 | 1图/5自/0渐/0智/0占 | |
|
|
53
|
+
| 第15页 | 11 | 2图/1自/0渐/0智/0占 | |
|
|
54
|
+
| 第16页 | 33 | 1图/4自/0渐/0智/0占 | |
|
|
55
|
+
| 第17页 | 29 | 1图/4自/0渐/0智/0占 | |
|
|
56
|
+
| 第18页 | 36 | 1图/7自/0渐/0智/0占 | |
|
|
57
|
+
| 第19页 | 11 | 2图/1自/0渐/0智/0占 | |
|
|
58
|
+
| 第20页 | 30 | 1图/4自/0渐/0智/0占 | |
|
|
59
|
+
| 第21页 | 22 | 1图/1自/0渐/0智/0占 | |
|
|
60
|
+
| 第22页 | 56 | 1图/16自/0渐/0智/0占 | |
|
|
61
|
+
| 第23页 | 32 | 1图/8自/0渐/0智/0占 | |
|
|
62
|
+
| 第24页 | 34 | 1图/10自/0渐/0智/0占 | |
|
|
63
|
+
|
|
64
|
+
## 极简实用部门工作总结PPT模板.pptx → 模板「极简实用部门工作总结ppt模板」(22 页源 vs 22 页导入)
|
|
65
|
+
|
|
66
|
+
| 类别 | 源(XML) | 导入(yaml) | 备注 |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| 形状级元素 | 547 | 212 | **保真率约 39%**(组合子元素并入源计数) |
|
|
69
|
+
| sp(含矩形/自选) | 349 | 174 | 自选形状(箭头/圆角等 prst)按 rect 近似 |
|
|
70
|
+
| pic(图片) | 0 | 0 | 裁剪图(crop ×0)拉伸处理 |
|
|
71
|
+
| cxnSp(连接线) | 38 | 38 | v0.7.1 起解析 |
|
|
72
|
+
| 组合 grpSp 子元素 | 160 | (并入上) | v0.7.1 起展开 |
|
|
73
|
+
| 自定义几何(custGeom) | 65 | 0 | 自选图形按矩形近似 |
|
|
74
|
+
| 渐变填充(gradFill) | 0 | 0 | 归一为主色(stops 在 import-styles.json) |
|
|
75
|
+
| 占位符(placeholder) | 0 | 0 | 占位符元素并入形状近似 |
|
|
76
|
+
| SmartArt(diagram) | 0 | 0 | 降级为文本占位 |
|
|
77
|
+
| 表格 / 图表 | 0 / 4 | 保留近似 | chart→占位 |
|
|
78
|
+
| 页面背景(图片/纯色) | 0 图 / 0 色 | 0 | 背景提取(满页图≥95% 提升) |
|
|
79
|
+
| 文本字符数 | 3174 | 3290 | **文本保真率约 104%** |
|
|
80
|
+
| 媒体文件 | — | 0 | 组合内图片 v0.7.1 起提取 |
|
|
81
|
+
|
|
82
|
+
### 页级明细(源侧特征)
|
|
83
|
+
|
|
84
|
+
| 页 | 元素 | 特征 | 背景 |
|
|
85
|
+
|---|---|---|---|
|
|
86
|
+
| 第1页 | 5 | 0图/0自/0渐/0智/0占 | |
|
|
87
|
+
| 第2页 | 11 | 0图/0自/0渐/0智/0占 | |
|
|
88
|
+
| 第3页 | 6 | 0图/0自/0渐/0智/0占 | |
|
|
89
|
+
| 第4页 | 19 | 0图/0自/0渐/0智/0占 | |
|
|
90
|
+
| 第5页 | 3 | 0图/0自/0渐/0智/0占 | |
|
|
91
|
+
| 第6页 | 39 | 0图/0自/0渐/0智/0占 | |
|
|
92
|
+
| 第7页 | 17 | 0图/0自/0渐/0智/0占 | |
|
|
93
|
+
| 第8页 | 49 | 0图/7自/0渐/0智/0占 | |
|
|
94
|
+
| 第9页 | 56 | 0图/0自/0渐/0智/0占 | |
|
|
95
|
+
| 第10页 | 10 | 0图/0自/0渐/0智/0占 | |
|
|
96
|
+
| 第11页 | 3 | 0图/0自/0渐/0智/0占 | |
|
|
97
|
+
| 第12页 | 28 | 0图/0自/0渐/0智/0占 | |
|
|
98
|
+
| 第13页 | 50 | 0图/16自/0渐/0智/0占 | |
|
|
99
|
+
| 第14页 | 27 | 0图/8自/0渐/0智/0占 | |
|
|
100
|
+
| 第15页 | 16 | 0图/0自/0渐/0智/0占 | |
|
|
101
|
+
| 第16页 | 3 | 0图/0自/0渐/0智/0占 | |
|
|
102
|
+
| 第17页 | 25 | 0图/6自/0渐/0智/0占 | |
|
|
103
|
+
| 第18页 | 67 | 0图/18自/0渐/0智/0占 | |
|
|
104
|
+
| 第19页 | 3 | 0图/0自/0渐/0智/0占 | |
|
|
105
|
+
| 第20页 | 47 | 0图/6自/0渐/0智/0占 | |
|
|
106
|
+
| 第21页 | 60 | 0图/4自/0渐/0智/0占 | |
|
|
107
|
+
| 第22页 | 3 | 0图/0自/0渐/0智/0占 | |
|
|
108
|
+
|
|
109
|
+
## 深蓝质感论文答辩PPT模板.pptx → 模板「深蓝质感论文答辩ppt模板」(24 页源 vs 24 页导入)
|
|
110
|
+
|
|
111
|
+
| 类别 | 源(XML) | 导入(yaml) | 备注 |
|
|
112
|
+
|---|---|---|---|
|
|
113
|
+
| 形状级元素 | 1530 | 749 | **保真率约 49%**(组合子元素并入源计数) |
|
|
114
|
+
| sp(含矩形/自选) | 905 | 707 | 自选形状(箭头/圆角等 prst)按 rect 近似 |
|
|
115
|
+
| pic(图片) | 16 | 14 | 裁剪图(crop ×6)拉伸处理 |
|
|
116
|
+
| cxnSp(连接线) | 28 | 28 | v0.7.1 起解析 |
|
|
117
|
+
| 组合 grpSp 子元素 | 581 | (并入上) | v0.7.1 起展开 |
|
|
118
|
+
| 自定义几何(custGeom) | 577 | 0 | 自选图形按矩形近似 |
|
|
119
|
+
| 渐变填充(gradFill) | 2 | 0 | 归一为主色(stops 在 import-styles.json) |
|
|
120
|
+
| 占位符(placeholder) | 0 | 0 | 占位符元素并入形状近似 |
|
|
121
|
+
| SmartArt(diagram) | 0 | 0 | 降级为文本占位 |
|
|
122
|
+
| 表格 / 图表 | 0 / 0 | 保留近似 | chart→占位 |
|
|
123
|
+
| 页面背景(图片/纯色) | 0 图 / 1 色 | 3 | 背景提取(满页图≥95% 提升) |
|
|
124
|
+
| 文本字符数 | 5111 | 5079 | **文本保真率约 99%** |
|
|
125
|
+
| 媒体文件 | — | 13 | 组合内图片 v0.7.1 起提取 |
|
|
126
|
+
|
|
127
|
+
### 页级明细(源侧特征)
|
|
128
|
+
|
|
129
|
+
| 页 | 元素 | 特征 | 背景 |
|
|
130
|
+
|---|---|---|---|
|
|
131
|
+
| 第1页 | 163 | 1图/72自/0渐/0智/0占 | |
|
|
132
|
+
| 第2页 | 21 | 1图/0自/0渐/0智/0占 | |
|
|
133
|
+
| 第3页 | 142 | 0图/65自/0渐/0智/0占 | 背景色 |
|
|
134
|
+
| 第4页 | 26 | 1图/6自/0渐/0智/0占 | |
|
|
135
|
+
| 第5页 | 31 | 0图/8自/0渐/0智/0占 | |
|
|
136
|
+
| 第6页 | 12 | 2图/0自/0渐/0智/0占 | |
|
|
137
|
+
| 第7页 | 142 | 0图/65自/0渐/0智/0占 | |
|
|
138
|
+
| 第8页 | 64 | 0图/22自/0渐/0智/0占 | |
|
|
139
|
+
| 第9页 | 66 | 0图/10自/0渐/0智/0占 | |
|
|
140
|
+
| 第10页 | 123 | 0图/53自/1渐/0智/0占 | |
|
|
141
|
+
| 第11页 | 45 | 0图/20自/0渐/0智/0占 | |
|
|
142
|
+
| 第12页 | 142 | 0图/65自/0渐/0智/0占 | |
|
|
143
|
+
| 第13页 | 20 | 4图/0自/0渐/0智/0占 | |
|
|
144
|
+
| 第14页 | 37 | 0图/8自/0渐/0智/0占 | |
|
|
145
|
+
| 第15页 | 39 | 1图/10自/0渐/0智/0占 | |
|
|
146
|
+
| 第16页 | 142 | 0图/65自/0渐/0智/0占 | |
|
|
147
|
+
| 第17页 | 14 | 2图/0自/0渐/0智/0占 | |
|
|
148
|
+
| 第18页 | 14 | 0图/2自/0渐/0智/0占 | |
|
|
149
|
+
| 第19页 | 22 | 1图/7自/0渐/0智/0占 | |
|
|
150
|
+
| 第20页 | 59 | 0图/24自/0渐/0智/0占 | |
|
|
151
|
+
| 第21页 | 8 | 0图/2自/0渐/0智/0占 | |
|
|
152
|
+
| 第22页 | 15 | 1图/1自/0渐/0智/0占 | |
|
|
153
|
+
| 第23页 | 20 | 1图/0自/1渐/0智/0占 | |
|
|
154
|
+
| 第24页 | 163 | 1图/72自/0渐/0智/0占 | |
|
|
155
|
+
|
|
156
|
+
## 简约商务.pptx → 模板「简约商务」(20 页源 vs 20 页导入)
|
|
157
|
+
|
|
158
|
+
| 类别 | 源(XML) | 导入(yaml) | 备注 |
|
|
159
|
+
|---|---|---|---|
|
|
160
|
+
| 形状级元素 | 509 | 200 | **保真率约 39%**(组合子元素并入源计数) |
|
|
161
|
+
| sp(含矩形/自选) | 369 | 176 | 自选形状(箭头/圆角等 prst)按 rect 近似 |
|
|
162
|
+
| pic(图片) | 15 | 8 | 裁剪图(crop ×2)拉伸处理 |
|
|
163
|
+
| cxnSp(连接线) | 16 | 16 | v0.7.1 起解析 |
|
|
164
|
+
| 组合 grpSp 子元素 | 109 | (并入上) | v0.7.1 起展开 |
|
|
165
|
+
| 自定义几何(custGeom) | 95 | 0 | 自选图形按矩形近似 |
|
|
166
|
+
| 渐变填充(gradFill) | 0 | 0 | 归一为主色(stops 在 import-styles.json) |
|
|
167
|
+
| 占位符(placeholder) | 0 | 0 | 占位符元素并入形状近似 |
|
|
168
|
+
| SmartArt(diagram) | 0 | 0 | 降级为文本占位 |
|
|
169
|
+
| 表格 / 图表 | 0 / 0 | 保留近似 | chart→占位 |
|
|
170
|
+
| 页面背景(图片/纯色) | 0 图 / 0 色 | 7 | 背景提取(满页图≥95% 提升) |
|
|
171
|
+
| 文本字符数 | 4257 | 4135 | **文本保真率约 97%** |
|
|
172
|
+
| 媒体文件 | — | 4 | 组合内图片 v0.7.1 起提取 |
|
|
173
|
+
|
|
174
|
+
### 页级明细(源侧特征)
|
|
175
|
+
|
|
176
|
+
| 页 | 元素 | 特征 | 背景 |
|
|
177
|
+
|---|---|---|---|
|
|
178
|
+
| 第1页 | 17 | 2图/0自/0渐/0智/0占 | |
|
|
179
|
+
| 第2页 | 35 | 3图/0自/0渐/0智/0占 | |
|
|
180
|
+
| 第3页 | 16 | 2图/0自/0渐/0智/0占 | |
|
|
181
|
+
| 第4页 | 31 | 0图/10自/0渐/0智/0占 | |
|
|
182
|
+
| 第5页 | 28 | 0图/0自/0渐/0智/0占 | |
|
|
183
|
+
| 第6页 | 23 | 0图/0自/0渐/0智/0占 | |
|
|
184
|
+
| 第7页 | 16 | 2图/0自/0渐/0智/0占 | |
|
|
185
|
+
| 第8页 | 39 | 0图/18自/0渐/0智/0占 | |
|
|
186
|
+
| 第9页 | 34 | 0图/12自/0渐/0智/0占 | |
|
|
187
|
+
| 第10页 | 18 | 0图/3自/0渐/0智/0占 | |
|
|
188
|
+
| 第11页 | 26 | 0图/10自/0渐/0智/0占 | |
|
|
189
|
+
| 第12页 | 16 | 2图/0自/0渐/0智/0占 | |
|
|
190
|
+
| 第13页 | 44 | 0图/13自/0渐/0智/0占 | |
|
|
191
|
+
| 第14页 | 30 | 0图/0自/0渐/0智/0占 | |
|
|
192
|
+
| 第15页 | 20 | 0图/6自/0渐/0智/0占 | |
|
|
193
|
+
| 第16页 | 16 | 2图/0自/0渐/0智/0占 | |
|
|
194
|
+
| 第17页 | 12 | 0图/0自/0渐/0智/0占 | |
|
|
195
|
+
| 第18页 | 12 | 0图/1自/0渐/0智/0占 | |
|
|
196
|
+
| 第19页 | 59 | 0图/22自/0渐/0智/0占 | |
|
|
197
|
+
| 第20页 | 17 | 2图/0自/0渐/0智/0占 | |
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
## 视觉抽查发现(原版 vs 导入版对照,1920×1080 同规格)
|
|
201
|
+
|
|
202
|
+
对照图集:`C:\Users\11867\.dsh\ppt-studio\fidelity\orig\<模板>\NN.png`(原版,Office COM 导出)vs `...\fidelity\imp\<模板>\NN.png`(导入版,Edge 渲染)。
|
|
203
|
+
|
|
204
|
+
| 抽查页 | 原版 | 导入版 | 差异 |
|
|
205
|
+
|---|---|---|---|
|
|
206
|
+
| 简约商务 01(封面) | 柔和的青蓝渐变波纹背景;LOGO 位于左上;"简约风部门 ——"带横线;"汇报人:第一PPT"圆角胶囊白字 | 波纹弧带更宽更饱和(渐变→主色);LOGO 位移到中部偏右;横线元素丢失、标题断行不同;胶囊显示为空心描边框、内部文字丢失 | 渐变归一 / logo 群组坐标近似 / 圆角形状上的文字被判为 shape 未提取 / 断行度量差 |
|
|
207
|
+
| 简约商务 10 | 页面四角青蓝渐变压边;两个大箭头(upArrow 自选图形);左侧手机/耳机/电话图标;"34%~39"单行 | 背景渐变带丢失(白底);箭头变蓝色矩形;图标变描边方框;"%"被折行 | 背景组图/渐变形丢失 / 自选图形按 rect / 度量折行 |
|
|
208
|
+
| 深蓝质感 01(封面) | 校园照片背景(带白色蒙层);浙大校徽(图+书法字+英文);日历/人像小图标;深蓝顶带角图形 | 纯白底 + 描边矩形框;校徽区域显示为几何描边 + 一排方框(特殊字体回退 tofu);图标变黑圆点;无蒙层 | 背景图未识别(非 ≥95% 满页/非 p:bg 通道)/ 字体缺失回退 / 图标形状近似 |
|
|
209
|
+
|
|
210
|
+
## 汇总
|
|
211
|
+
|
|
212
|
+
- **实用毕业设计论文答辩PPT模板.pptx**:元素保真率 52%(359/691)|文本保真率 103%
|
|
213
|
+
- **极简实用部门工作总结PPT模板.pptx**:元素保真率 39%(212/547)|文本保真率 104%
|
|
214
|
+
- **深蓝质感论文答辩PPT模板.pptx**:元素保真率 49%(749/1530)|文本保真率 99%
|
|
215
|
+
- **简约商务.pptx**:元素保真率 39%(200/509)|文本保真率 97%
|
|
216
|
+
|
|
217
|
+
## 已知导致视觉失真的因素(按影响排序)
|
|
218
|
+
|
|
219
|
+
1. **自选图形 prst → 矩形**(箭头/圆角/图标等 100+ 形状按 rect;custGeom 同理)——影响图标/箭头/装饰形状。
|
|
220
|
+
2. **渐变填充归一为末 stop 主色**(gradFill → 单色;stops 记录在 import-styles.json)——影响按钮/胶囊/背景弧带。
|
|
221
|
+
3. **特殊字体回退**(PPT 内置字体/手写体缺失 → 浏览器渲染 tofu □□□)——文本内容保留,视觉字形不同。
|
|
222
|
+
4. **背景层不完整**:仅识别 slide 级 p:bg 与 ≥95% 满页图;蒙层/前景盖图/背景组图按元素近似。
|
|
223
|
+
5. **SmartArt → 文本占位**;图表 → 文本占位(数据在 xml 中,可重建)。
|
|
224
|
+
6. **文本块宽度 vs 字体度量差** → 断行位置与源不同(制作时可调框宽)。
|
|
225
|
+
7. **裁剪图 srcRect 忽略**(按 fit 拉伸)。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 迷你夹具(快速路径)
|
|
2
|
+
version: 1
|
|
3
|
+
title: "迷你演示"
|
|
4
|
+
size: [960, 540]
|
|
5
|
+
theme:
|
|
6
|
+
colors:
|
|
7
|
+
ink: "#1F2937" # 主墨
|
|
8
|
+
primary: "#2563EB" # 主蓝
|
|
9
|
+
accent: "#F59E0B" # 强调橙
|
|
10
|
+
danger: "#C0392B" # 警示红
|
|
11
|
+
steel: "#64748B" # 辅助灰蓝
|
|
12
|
+
bg: "#F8FAFC" # 页面底
|
|
13
|
+
deep: "#0F172A" # 深底(白字承载)
|
|
14
|
+
# 扩展档(夹具调色:蓝/紫/绿阶 + 浅底)
|
|
15
|
+
blue-soft: "#DBEAFE"
|
|
16
|
+
blue-deep: "#1E3A8A"
|
|
17
|
+
blue-mid: "#3B82F6"
|
|
18
|
+
slate-deep: "#334155"
|
|
19
|
+
slate-soft: "#CBD5E1"
|
|
20
|
+
slate-lite: "#E2E8F0"
|
|
21
|
+
amber-soft: "#FEF3C7"
|
|
22
|
+
amber-deep: "#92400E"
|
|
23
|
+
amber-dark: "#78350F"
|
|
24
|
+
violet: "#8B5CF6"
|
|
25
|
+
green: "#10B981"
|
|
26
|
+
green-soft: "#D1FAE5"
|
|
27
|
+
green-deep: "#065F46"
|
|
28
|
+
textStyles:
|
|
29
|
+
title: {fontSize: 32, color: "$ink", bold: true, fontFamily: "微软雅黑"}
|
|
30
|
+
h1: {fontSize: 22, color: "$ink", bold: true, fontFamily: "微软雅黑"}
|
|
31
|
+
h2: {fontSize: 16, color: "$ink", bold: true, fontFamily: "微软雅黑"}
|
|
32
|
+
body: {fontSize: 14, color: "$ink", fontFamily: "微软雅黑"}
|
|
33
|
+
small: {fontSize: 12, color: "$steel", fontFamily: "微软雅黑"}
|
|
34
|
+
safeArea: {top: 34, bottom: 26, left: 40, right: 40}
|
|
35
|
+
minFontSize: 12
|
|
36
|
+
pages:
|
|
37
|
+
- pages/01.yaml
|
|
38
|
+
- pages/02.yaml
|
|
39
|
+
- pages/03.yaml
|