返回 ppt-master
templates-architecture.md
根目录 / docs / zh / templates-architecture.md
1 # 模板架构:Brand / Style / Layout / Deck 四分类
2
3 [English](../templates-architecture.md) | [Chinese](./templates-architecture.md)
4
5 ---
6
7 > 本文是**架构对齐文档**,定义“模板”在数据模型层面的四种身份、各自的 `design_spec.md` 字段集、以及多路径安装与片段所有权规则。面向贡献者与 AI 工作流,回答“一个模板目录里应该写什么、不写什么;多个模板同时给时怎么协同”。
8 >
9 > 用户视角的用法(怎么选、怎么提供精确路径)见 [`templates-guide.md`](./templates-guide.md);本文不重复。
10
11 ---
12
13 ## 一、四分类
14
15 | 分类 | 全局库工作区根目录 | 写什么 | 不写什么 | 出处工作流 |
16 |---|---|---|---|---|
17 | **Brand** | `templates/brands/<id>/` | 仅身份段:color / typography / logo / voice / icon style | 不写 canvas、page structure、SVG roster | `workflows/create-template/create-brand.md` |
18 | **Style** | `templates/styles/<id>/` | 可移植方向/方法段:沟通方法、页面角色词汇、证据/数据表达、视觉默认值、图片/图标方向、审阅关注点 | 不写身份真值、应用契约、canvas、页面结构或 SVG roster | `workflows/create-template/create-style.md` |
19 | **Layout** | `templates/layouts/<id>/` | 仅品牌中立的结构段:canvas / page structure / 语义文字角色 / page types / SVG roster | 不写品牌身份,也不拥有可重复沟通场景 | `workflows/create-template/create-layout.md` |
20 | **Deck** | `templates/decks/<id>/` | 一类可重复演示:描述性应用语境 + 一体化身份与结构 | —— | `workflows/create-template/create-deck.md` |
21
22 每张新建的 Layout/Deck SVG 都是完整预览,并在根节点声明 Master/Layout key 与选择器名称;固定 Master/Layout 视觉是直接原子元素;语义槽位是顶层 group。普通槽位必须有正数设计区域 bounds 和恰好一个兼容 carrier;复合 `object` 区域走显式 proxy 绑定,零槽 Layout 也合法。这些专用标记具有最高优先级;最小 `data-pptx-role` 只补充它们无法表达的页面框架行为。Create Template 根据自然语言意图与来源证据在内部推导 `standard` / `fidelity` / `mirror`;Strategist 再根据真实原型与当前内容推导 strict/adaptive 导出行为。这些实现值都不是用户必选项。仅 Brand/Layout/Deck 的旧式平铺目录可在满足当前 kind 合同时继续读取;Style 没有平铺兼容形态。带旧结构语义的包必须替换为新建模板工作区,不能原地升级。
23
24 四者是**四种并列的可复用规则包**,不是 PowerPoint 包对象类型。在全局库范围内,物理目录与前置元数据中的 `kind` 字段双向对齐:
25
26 每份已装 spec 各自保留自己的 `kind` 与 id;不存在合并后的项目 spec,也没有组合出来的能力标签。路由结果在读取时推导:结构优先来自 Layout,没有 Layout 时才来自 Deck;身份来自 Brand 或 Deck,方向来自 Style。项目内临时组合的 Brand + Layout 因此只是“两种能力都已安装”,不会被自动提升为可注册的 Deck,也不会凭空生成应用语境;当前项目的 Stage 1 沟通契约负责提供场景。Strategist 在内部生成模板应用计划,确认页不显示模板模式控件。
27
28 ```yaml
29 # templates/brands/anthropic/templates/design_spec.md
30 ---
31 kind: brand
32 ...
33 ---
34
35 # templates/styles/consulting-decision/templates/design_spec.md
36 ---
37 kind: style
38 ...
39 ---
40
41 # templates/layouts/presentation_core/templates/design_spec.md
42 ---
43 kind: layout
44 native_structure_mode: structured
45 ...
46 ---
47
48 # templates/decks/中国电信/templates/design_spec.md
49 ---
50 kind: deck
51 native_structure_mode: structured
52 ...
53 ---
54 ```
55
56 ### PowerPoint 原生对象是编译目标
57
58 项目模板 kind 与 PresentationML 对象不是一一对应关系:
59
60 | 项目合同 | 原生投影 |
61 |---|---|
62 | **Brand** | Theme 的颜色、字体与效果,以及 Logo 等固定身份资产规则 |
63 | **Style** | 不提供可复用包结构;已确认的方法和视觉默认值指导 flat Slide-local 创作 |
64 | **Layout** | Master/Layout/Placeholder 拓扑、可复用几何、语义文字角色与槽位空间行为 |
65 | **Deck** | Brand 与 Layout 的投影,再加描述性重复应用语境和真实原型 |
66
67 一个 Slide Master 可以同时包含结构几何和品牌视觉。来源规则仍分开归属:Layout 决定拓扑、位置、语义文字角色与空间行为,Brand 决定身份值与资产。下游选择 `layout` 时,导出结合已确认的阅读模式和字号体系解析最终 placeholder 格式;选择 `mirror` 时则保留来源的字面格式与文字拓扑。最后再把适用规则编译进同一套 Master/Layout 图谱。因此 Theme 是已解析身份的实现投影——身份可以来自 Brand、Deck 或当前项目——而不是另一种模板 kind;Style 的色彩/字体 fallback 也不是 Theme 身份真值。
68
69 ### 输出范围与 kind 相互独立
70
71 `create-template` 会确认工作区放在哪里。这个执行选择不会增加另一种 kind,也不会增加新的 PPTX 结构模式:
72
73 | 范围 | 工作区根目录 | 核心结构 | 发现行为 |
74 |---|---|---|---|
75 | `library`(默认) | `skills/ppt-master/templates/<kind>/<id>/` | 必需 `templates/`;可选 `images/`、`icons/` 与按需 `exports/` | 写入对应全局索引 |
76 | `project` | `projects/<name>/` | 完全相同的路由合同 | 不更新全局索引 |
77
78 两种根目录都保持相同的核心形态:
79
80 ```text
81 <template_workspace>/
82 ├── templates/
83 │ ├── design_spec.md
84 │ └── *.svg
85 ├── images/ # 可选;SVG 统一引用 ../images/<name>
86 ├── icons/
87 │ └── imported/ # 可选;导入向量素材的唯一规范副本
88 └── exports/ # 可选;用户要求审阅或多 Master 包需要证据时创建
89 └── <id>_template_preview.pptx
90 ```
91
92 空的可选目录直接省略,不添加占位文件。预览 PPTX 是派生审阅证据,不是模板
93 源资产;单 Master 按需生成,多 Master 必须通过该 package gate。Step 3 只把
94 工作区 root 记录为候选输入,不读取其内容;Stage 1 选中后,apply 阶段才消费
95 `templates/` 及实际存在的 `images/`、`icons/`,不会复制或使用 `exports/`;
96 全局库下的 `exports/` 统一由 Git 忽略。
97
98 导入向量统一使用 `data-icon="imported/<name>"`,唯一规范文件位于 `icons/imported/<name>.svg`。具备工作区感知的校验与导出会直接解析这个根目录路径;`templates/icons/` 不属于模板包结构。
99
100 原生形状 metadata 采用两级模型。完整导入 SVG 保存 native metadata、隐藏 carrier 和预览证据,并作为不可变原生载荷后备;`svg_authoring_view.py` 生成可编辑 authoring IR,其中轻量 SVG 使用文档内 source ref 标识对象,manifest 只保存路径和初始 hash。创作模式使用项目规范化 SVG,只有精确匹配已登记 preset 时才使用 compact authored-preset 组。Mirror 从 IR 物化模板,仅为未改且 hash 匹配的 Slide-local/slot ref 重新接入转换器已支持的载荷;固定结构层保持直接原子,不支持或已修改的对象保留 SVG fallback,最终模板不包含 IR 专用 ref。导出只编译声明的结构,不推断归属。
101
102 两种范围都在可移植前置元数据中保留所选 `kind`。`output_scope` 与 `target_project` 只属于工作流简报,不写入 `design_spec.md`。
103
104 任何范围第一次写最终文件前,都必须解析 Design Spec 和全部真实目标。Library 范围要求 `templates/` 为空。Project 范围要求目标项目已初始化,并拒绝裸名、同 kind spec 或无效的限定名集合;不同 kind 可以共存。Layout 与 Deck 同时存在时,Layout 拥有有效 roster:新增 Deck 不改变已有 Layout roster,新增 Layout 则先隔离校验,再原子替换已有 Deck 结构载荷。两种范围都会检查计划素材和预览目标冲突。任一失败都在写入前停止,不覆盖、不留下半套输出。
105
106 ### 四段的字段切分
107
108 为了让多路径所有权干净解析,所有字段按段归属,**片段整段应用是默认粒度**:
109
110 | 段 | 包含的章节 | 归属(覆盖优先级)|
111 |---|---|---|
112 | **身份段** | Color Scheme / Typography / Logo / Voice & Tone / Icon Style | brand 覆盖 |
113 | **方向/方法段** | Communication Method / Page Role Vocabulary / Evidence & Data Expression / Visual System Defaults / Image & Icon Direction / Review Focus | style;默认值低于用户确认及身份/结构所有者 |
114 | **结构段** | 可移植 canvas/page-type 元数据、结构归属的 Signature 规则、SVG Page Roster,以及 SVG Master/Layout/slot 合同 | layout 覆盖 |
115 | **应用段** | Template Overview:重复场景、受众与结果、交付假设及代表性叙事/页面角色 | deck 独有;brand / layout 不写 |
116
117 ### 为什么需要 Deck 这一类
118
119 Deck 编码的是**一类可重复演示**,而不只是预先组合好的 Brand 和 Layout。它描述模板服务哪些沟通场景、支持哪些受众结果,以及常见的叙事或页面角色。身份与结构围绕这份语境形成一个整体;具体选哪些原型、如何处理内容,由当前 Strategist 决定。
120
121 `standard` / `fidelity` 根据已确认的证据创作新完整系统;mirror 把已验证的来源身份与父子关系一对一映射进新工作区。Mirror 能保留来源事实,但不能单独证明来源就是可复用 Deck:创建时仍要识别稳定的应用规则。只得到身份时创建 Brand;方法与视觉方向需要脱离原型复用时创建 Style;得到品牌中立的可复用结构时创建 Layout;结构带品牌身份,或者包含场景叙事与内容语法时创建 Deck。
122
123 这也约束创建模式:只有来源合同本身已经品牌中立且应用中立时,Layout mirror 才成立。删除品牌色、字体、Logo、固定身份对象或可复用应用规则都属于重新创作;越过这条边界的来源要么使用 `standard` / `fidelity` 创作新的 Layout,要么保留这些事实并创建 Deck mirror。
124
125 ---
126
127 ## 二、各分类的 `design_spec.md` 结构定义
128
129 字段集只规定**必须写**的部分。「非必要不表明」——当前结构定义没列出的字段,不写。
130
131 ### Brand 结构定义
132
133 **前置元数据**
134
135 ```yaml
136 ---
137 brand_id: <slug>
138 kind: brand
139 summary: <一句话描述用途,含主色>
140 primary_color: "<HEX>"
141 ---
142 ```
143
144 **正文章节**(身份段全集)
145
146 | 节 | 标题 | 必写字段 |
147 |---|---|---|
148 | I | Brand Overview | Brand Name / Use Cases / Tone |
149 | II | Color Scheme | role / HEX / provenance(`fact` 官方真值 \| `approx` 推导)/ notes |
150 | III | Typography | role / family / weight |
151 | IV | Logo | file / form / usage + clearspace 与组合规则 |
152 | V | Voice & Tone | formality / person / emoji / abbreviation 策略 |
153 | VI | Icon Style | preference(stroke / filled / duotone …)+ 推荐字库 |
154
155 **不允许出现**:canvas viewBox、page types、SVG roster——这些是 layout 的职责。
156
157 ### Style 结构定义
158
159 **前置元数据**
160
161 ```yaml
162 ---
163 style_id: <slug>
164 kind: style
165 summary: <一句话描述可移植方法与视觉方向>
166 keywords: [tag1, tag2, tag3]
167 ---
168 ```
169
170 **正文章节**(方向/方法段)
171
172 | 节 | 标题 | 必写内容 |
173 |---|---|---|
174 | I | Style Overview | 名称、宽泛适用语境、复用意图与来源;不绑定受众/结果 |
175 | II | Communication Method | mode 候选、论证流、页面信息纪律与证据纪律 |
176 | III | Page Role Vocabulary | 开放角色及其沟通任务、证据义务和构图倾向;不规定顺序/页数 |
177 | IV | Evidence & Data Expression | 主张/证据、事实/假设/含义/建议区分,以及图表/表格/来源规则 |
178 | V | Visual System Defaults | visual-style 候选、构图、密度、装饰、节奏及可选色彩/字体 fallback |
179 | VI | Image & Icon Direction | 渲染、使用与处理方向;不写 inventory 或逐页映射 |
180 | VII | Review Focus | 仅在用户另行开启 visual review 后追加的检查点 |
181
182 Style 不写 SVG,也不拥有 Brand 官方身份、Deck 应用契约、canvas、页数/
183 顺序、Master/Layout/placeholder 结构或逐页资源。其色彩与字体只是可覆盖
184 fallback:用户最终确认及 Brand/Deck 身份优先。Review Focus 不能启动
185 visual review。`kind: style` 表示可复用包类型,区别于最终 Stage 2 的
186 `visual_style` 选择和内部 flat 导出值 `template_reuse_scope: style`。
187
188 ### Layout 结构定义
189
190 **前置元数据**
191
192 ```yaml
193 ---
194 layout_id: <slug>
195 kind: layout
196 category: general | scenario | government | special
197 native_structure_mode: structured
198 summary: <一句话描述用途>
199 keywords: [tag1, tag2, tag3]
200 canvas_format: <ppt169 | ppt43 | a4 | ...>
201 canvas_width: <像素>
202 canvas_height: <像素>
203 canvas_viewbox: "0 0 <width> <height>"
204 source_canvas_width: <像素> # 已知 PPTX/SVG 来源画布时填写
205 source_canvas_height: <像素>
206 source_viewbox: "0 0 <width> <height>"
207 replication_mode: standard | fidelity | mirror
208 page_count: <N>
209 page_types: [<cover, toc, chapter, content, ending, ...>]
210 ---
211 ```
212
213 **正文章节**(该包特有的结构段)
214
215 | 节 | 标题 | 必写字段 |
216 |---|---|---|
217 | IV | Signature Design Elements | 该 Layout 特有的网格、区域、图片行为、密度节奏、中性框架、语义文字角色、对齐/换行/容量行为和 slot 约定 |
218 | V | Page Roster | 每个 SVG 文件、Layout key、picker name、适用内容与 slot 行为 |
219
220 只有 Layout 改写规范占位词汇时才增加 `Placeholder Overrides`。前置元数据
221 `summary` 承担简短的选型语境;Layout 不写 deck 独有的 Template Overview。
222
223 `category: scenario` 只表示发现时的适配标签。Layout 可以针对某种内容形态或交付环境优化几何,但不能规定沟通目的、受众结果、必需叙事顺序、固定措辞或示例内容;如果这些规则也要重复使用,应创建 Deck。
224
225 **不允许出现**:Color Scheme、品牌字体家族/字重身份、最终字号体系、品牌 logo、品牌 voice & tone、Icon Style 或官方真值色(`provenance: fact`)。Layout 可以保留语义文字角色、对齐、换行与容量规则,因为它们属于结构;SVG 中性 paint、字体和字号只用于审阅。最终色彩与字体由策略师确认阶段或其他模板 kind 解析。
226
227 ### Deck 结构定义
228
229 **前置元数据**
230
231 ```yaml
232 ---
233 deck_id: <slug>
234 kind: deck
235 category: brand | general | scenario | government | special
236 native_structure_mode: structured
237 summary: <一句话描述可重复演示类型与预期结果>
238 keywords: [tag1, tag2, tag3]
239 canvas_format: <ppt169 | ...>
240 canvas_width: <像素>
241 canvas_height: <像素>
242 canvas_viewbox: "0 0 <width> <height>"
243 source_canvas_width: <像素> # 已知 PPTX/SVG 来源画布时填写
244 source_canvas_height: <像素>
245 source_viewbox: "0 0 <width> <height>"
246 replication_mode: standard | fidelity | mirror
247 page_count: <N>
248 primary_color: "<HEX>"
249 ---
250 ```
251
252 **正文章节**(应用契约 + 一体化身份/结构)
253
254 | 节 | 标题 | 归属段 |
255 |---|---|---|
256 | I | Template Overview | 应用段 |
257 | II | Color Scheme | 身份段 |
258 | III | Typography | 身份段;只有使用共享默认字体栈时才省略 |
259 | IV | Signature Design Elements | 模板特有的身份图形与可复用结构语法 |
260 | V | Page Roster | 结构段 |
261 | VI | Assets | 身份/支撑资产;无资产时省略 |
262 | VII | Placeholder Overrides | 结构词汇;无覆盖时省略 |
263
264 Template Overview 写明可重复演示类型、目标受众与结果、交付/阅读假设及代表性叙事或页面角色。Page Roster 只需如实描述每个原型的 Master/Layout/slot 合同、视觉特征、用途和容量,不得添加必需/可选/可重复或固定/可替换/仅示例政策;当前 Strategist 会按实际内容推导这些决定。
265
266 可移植 canvas 字段、`page_count` 和显式 SVG roster 承载其余结构合同。通用间距、字号比例、SVG 和 placeholder 规则保持集中管理,不复制进每个 deck spec。省略条件章节只表示“采用共享默认值或没有资产”,不表示该段改由其他 kind 所有。
267
268 ---
269
270 ## 三、四套 index 文件
271
272 这四份 index 都与各自物理目录一一对应,字段只保留 Strategist 选择可复用 workspace 所需的信息。Visualization 采用另一条边界:规划读取客观的 [`chart-vocabulary.md`](../../skills/ppt-master/templates/charts/chart-vocabulary.md) 与 [`table-vocabulary.md`](../../skills/ppt-master/templates/tables/table-vocabulary.md),[`charts_index.json`](../../skills/ppt-master/templates/charts/charts_index.json) 和 [`tables_index.json`](../../skills/ppt-master/templates/tables/tables_index.json) 只保留为机器 registry。定性 Structure 没有 index,因为 Executor 会根据当前页关系现场生成。
273
274 四套索引只覆盖全局库范围。项目根工作区有意不进入任何索引,仍可通过显式 `projects/<name>/` 路径使用。因为两种范围采用相同工作区形态,完整核心工作区可在两者之间移动或复制,不需要重写素材路径;只有全局库注册不同。
275
276 ### `templates/brands/brands_index.json`
277
278 ```json
279 {
280 "<brand_id>": {
281 "summary": "Anthropic brand identity — AI/LLM tech talks, developer conferences",
282 "primary_color": "#D97757"
283 }
284 }
285 ```
286
287 - 保留 `primary_color` —— Strategist 选 brand 时第一眼就要知道主色
288 - 去掉 keywords —— summary 自带英文等价词,AI 用自然语言匹配(沿用 charts 经验)
289
290 ### `templates/styles/styles_index.json`
291
292 ```json
293 {
294 "<style_id>": {
295 "summary": "Answer-first、证据驱动的决策文档默认值,不含页面原型或品牌身份",
296 "keywords": ["consulting", "decision-support", "evidence"]
297 }
298 }
299 ```
300
301 - 保留 `keywords`:方法/方向没有结构 roster,发现主要依赖语义
302 - 不写 canvas、page count 或 primary color;Style 不拥有结构或身份真值
303
304 ### `templates/layouts/layouts_index.json`
305
306 ```json
307 {
308 "<layout_id>": {
309 "summary": "Standard academic defense layout — cover/toc/chapter/content/ending",
310 "canvas_format": "ppt169",
311 "page_count": 5,
312 "page_types": ["cover", "toc", "chapter", "content", "ending"]
313 }
314 }
315 ```
316
317 - 加 `canvas_format` / `page_count` / `page_types` —— Strategist 选 layout 时要快速判断"页面骨架能不能装下我的 deck"
318 - 无 `primary_color` —— layout 无身份
319
320 ### `templates/decks/decks_index.json`
321
322 ```json
323 {
324 "<deck_id>": {
325 "summary": "中国电信政企方案说明与下一步对齐汇报",
326 "canvas_format": "ppt169",
327 "page_count": 5,
328 "primary_color": "#XXXXXX"
329 }
330 }
331 ```
332
333 - 含 `primary_color`(deck 自带身份)+ 结构元数据
334 - `summary` 优先描述可重复演示类型与预期结果,而不只是视觉气质
335 - 详细应用契约留在 Template Overview;紧凑索引不重复整份契约
336
337 ---
338
339 ## 四、多路径安装与片段所有权
340
341 ### 安装只复制,不合并
342
343 Step 3 确认已注册和/或指定工作区根目录后,会解析每个 root 的真实 `kind`,
344 并把每个选中的工作区安装为**各自独立**的一份项目内文件:
345
346 ```
347 <project>/templates/design_spec.brand.mckinsey.md
348 <project>/templates/design_spec.style.consulting-decision.md
349 <project>/templates/design_spec.layout.presentation_core.md
350 ```
351
352 正文原样复制,只在 H1 下补一行来源标注:
353
354 ```markdown
355 > **Installed from**: `skills/ppt-master/templates/brands/mckinsey/` (library)
356 ```
357
358 不存在合并后的项目 spec,也没有组合出来的能力标签。裸的
359 `<project>/templates/design_spec.md` 含义完全不同:那表示该项目**自身就是**
360 project scope 的 Create Template 产物,永远不会被当作已安装模板消费。
361
362 `library` / `explicit` 只记录发现来源,不改变所有权。
363
364 ### 片段所有权在读取时解析
365
366 消费方——Default 的最终 Stage 2,或 Quick 在创作前的当前 agent——读取全部已装
367 spec,并在上下文中解析下列片段:
368
369 | 片段 | 起始所有者 |
370 |---|---|
371 | Identity | Brand,其次 Deck;都没有则留到最终 Stage 2;Style 只提供候选回退值 |
372 | 方向/方法 | Style;没有则留到最终 Stage 2;Deck 的实际原型与 Signature 事实只用于兼容性判断 |
373 | Structure | 有 Layout 时由 Layout 提供,否则由 Deck 提供;都没有则留到最终 Stage 2 或自由设计 |
374 | 可复用应用语境 | 仅 Deck 拥有;保留供最终 Stage 2 比对,绝不作为当前项目的应用契约 |
375
376 当前用户指令与最终确认覆盖任何起始所有者。Brand 身份对 Style 的色彩/字体回退值
377 始终具有权威性。Style 单独、或 Style 加 Brand,走扁平页面创作;Style 与 Layout
378 或 Deck 同装时follow所选结构来源。Style 自身不会升级或降级结构。
379
380 **被拥有的片段管的是视觉权重,不只是取值。** 当片段所有者声明某个值应当主导、
381 退居次要或保持稀有时,该指令与取值本身具有同等权威——Style 的留白或构图倾向
382 绝不能把 Brand 声明的主导色降格为偶然点缀。
383
384 把 Style 与 Layout/Deck 组合前,先确认其沟通方法与构图预期
385 能够被该可复用语境与结构兑现。不兼容时显式报告模板片段冲突,不能静默混合字段
386 或保留一份当前结构无法兑现的承诺。当前项目的适配只在 Stage 1 确认后的最终
387 Stage 2 开始。
388
389 ### 段级整段应用(默认粒度)
390
391 解析出的片段**整段应用**——例如 deck + brand 时,整个 Color Scheme / Typography /
392 Logo / Voice / Icon Style 五段从 brand 拿,**不做字段级混搭**(即不会发生
393 "primary 从 brand 拿、secondary 从 deck 拿"这类隐式混合)。
394
395 字段级微调走策略师确认阶段这条已有路径——用户在 chat 里说"用 anthropic brand,
396 但 primary 改成 #FF0000",由 Strategist 在 e/g 现场调整;安装层不加字段级语法。
397
398 ### 选择冲突
399
400 完整选择中每个 kind 最多一份;Layout 与 Deck 可以同时存在,结构由 Layout
401 优先提供。指定的多 kind root 必须原子选择,只能与 kind 不重叠的已注册 root 共存。Default 在 Stage-1
402 选择器和服务端回执中拒绝冲突;Quick 要求先在 chat 中缩小精确 root 集合。
403 安装阶段不会平均同 kind spec,也不会按路径顺序替用户选择。
404
405 ### 可追溯性
406
407 因为不做任何合并,已装集合本身即自描述:文件名带 kind 与 id,来源行带源 root,
408 其余正文保持不变。追溯哪一段来自哪里,看目录列表即可,不需要重建合并过程。
409
410 让 AI 和人类都能回溯每段来自哪。
411
412 ---
413
414 ## 五、与 Generate PPTX Stage 1 的关系
415
416 Default Generate 的 [Step 3](../../skills/ppt-master/workflows/generate-pptx.md#step-3-template-candidate-preparation)
417 只准备候选输入。Stage 1 把沟通契约与可切换的自由设计/使用模板选择同屏呈现。
418 普通请求默认自由设计并收起详细控件;明确要求使用模板或提供任意精确 root 时
419 默认展开模板模式。只提供一个 root 时会预选,多 root 仍只作为未选候选。裸
420 模板/品牌名称或风格词不会解析或预选工作区。对于每个已选 root,确认后的
421 apply 阶段解析一份 library 裸 spec 或全部 project 限定名 spec;为兼容目录形态,也接受根目录直接包含 `<workspace>/design_spec.md`、且满足当前 kind 合同的旧式平铺 Brand/Layout/Deck 工作区。Layout/Deck 还必须带有当前 structured SVG;Style 没有平铺形态。若包仍使用 `native_structure_mode: template`、缺 Master 身份、原子 placeholder 或蒸馏时代标记等旧语义,apply 阶段必须拒绝;先由 `create-template` 产出新工作区,再继续生成。`kind` 字段决定**AI 如何处理已选路径**:
422
423 | 用户路径指向 | Stage-1 确认后的 apply 行为(按 kind 分支)|
424 |---|---|
425 | `kind: brand` | 安装限定名身份 spec 与 root 自有素材;除非同时选择 Layout/Deck,否则结构自由 |
426 | `kind: style` | 安装限定名方向/方法 spec;Style 自身不得带 roster 或素材,无 Layout/Deck 时页面保持 flat |
427 | `kind: layout` | 安装限定名结构 spec、SVG roster 与素材;结构优先于 Deck |
428 | `kind: deck` | 安装限定名应用/身份/结构 spec 与素材;仅在没有 Layout 时安装其 SVG roster |
429 | 多 kind root | 保留全部限定名 spec,共享素材只映射一次,并只保留有效 Layout-or-Deck roster |
430 | 选择冲突 | 安装前拒绝同 kind 重复 |
431
432 位图统一进入工作区 `images/`,模板 SVG 通过 `../images/` 引用。如果显式输入根目录本来就是目标项目根目录,apply 阶段原地消费:不得复制到自身,也不得再次移动素材。项目 root 可以被其他项目直接复用;把其中一项移入全局库时,spec 正文保持不变,但要从项目限定名路径放到单 kind 库工作区的裸 spec 路径,并完成注册。
433
434 ### 策略师确认阶段在不同 kind 下的行为
435
436 安装模板不会让沟通问题消失。Stage 1 把同一份开放式沟通契约与模板选择同时确认,但两者相互独立:沟通推荐只使用当前请求、源材料事实、对话约束和项目初始化状态,连模板画布也不能参与。Stage 1 完成且所选模板安装后,最终 Stage 2 才读取该状态,并确认完整方案与制作计划。Brand 提供身份约束、结构仍然自由;Style 提供方法和视觉默认值候选并保持 flat;Layout 提供结构能力;Deck 提供描述性的可复用应用语境供对照,但不充当当前项目契约。Style-only 时 Strategist 不读取原型,固定写入 `template_reuse_scope: style` 与 flat 结构;其他情况只读取有效原型(有 Layout 时用 Layout,否则用 Deck)和当前内容,生成页面/原型计划,并把 `mirror`、`layout` 或 `style` 记录为内部导出值。按 mirror 创建的工作区因此只提供原样复用能力,不会强制使用;Confirm UI 会显示自由设计/使用模板和候选控件,但不显示内部复用/遵循字段。规划语义由 `references/strategist.md` 与 `references/strategist-template.md` 负责,机器结构由 `templates/schemas/spec_lock.schema.json` 负责。
437
438 ---
439
440 ## 六、与路线和子工作流的关系
441
442 | 路线或子工作流 | 产出 |
443 |---|---|
444 | `workflows/create-template.md` | 固定 Create Template 入口,以及范围、确认、预检、结构创作、注册、完成和交接的共享合同;只分派一个子工作流 |
445 | `workflows/create-template/create-brand.md` | 仅身份的 Brand 工作区;无 SVG roster,空的可选目录省略 |
446 | `workflows/create-template/create-style.md` | 仅方向/方法的 Style 工作区;无 SVG roster、身份真值、应用契约、原生结构或预览 PPTX |
447 | `workflows/create-template/create-layout.md` | 品牌中立、带结构化 SVG roster 的 Layout 工作区 |
448 | `workflows/create-template/create-deck.md` | 应用契约与身份/结构一体化、带结构化 SVG roster 的 Deck 工作区;可复用成果带品牌身份或场景语义时选择,不能只因来源是一份完整 PPTX 就默认选择 |
449
450 **一套结构定义,两个落点。** 模板是同一份合同落在两个层面,唯一的差别是 Design Spec 叫什么:
451
452 | 层 | 容器 | Design Spec |
453 |---|---|---|
454 | skill 库 | `templates/<kind_dir>/<template_id>/` 已经说明了 kind 和 id | `templates/design_spec.md` |
455 | 项目 | 一个平铺、多 kind 共用的 `templates/` | `templates/design_spec.<kind>.<id>.md` |
456
457 消歧责任归容器,容器给不了的才写进文件名。因此一个项目根同一 kind 至多一份 spec,四种 kind 可以共存,且文件名里的 kind/id 必须分别与前置元数据中的 `kind` 及对应 `<kind>_id` 一致;裸名与限定名不得在同一目录混用。一个 `templates/` 只保留一份有效 SVG roster:有 Layout 时用 Layout,否则用 Deck;Deck 的其他片段不会因结构被覆盖而丢失。由于结构定义不随层面变化,项目里的 spec 进库不需要补字段、出库也不需要删字段,安装进来的与就地创作的在形态上不可区分。
458
459 选择遵循同一条原则:单位是工作区 **root**,不是 kind。一个 root 会贡献它暴露的全部 kind,所以指向一个同时装了 Brand 和 Style 的项目,两者都会生效。按 kind 浏览全局库只是找到 root 的一种方式——`library` 与 `explicit` 记录的是 root 如何被发现,而不是它拥有什么。
460
461 在全局库范围,前置元数据中的 `kind` 字段决定工作区父目录位于 `templates/brands/` / `templates/styles/` / `templates/layouts/` / `templates/decks/`。项目范围在项目工作区根目录保留同一 kind 语义。项目到项目复用保持完整 root;单项进出全局库时保留 spec 的结构定义与素材,但会改变 spec 文件名落点及索引注册。
462
463 ---
464
465 ## 七、不做(与本文叙述框架配套的拒绝列表)
466
467 - **不在安装层支持字段级覆盖语法** —— 字段级微调走 策略师确认阶段这条已有路径
468 - **不接受同 kind 重复** —— 安装前先缩小 root 集合;Layout + Deck 按结构优先级解析
469 - **不引入双名映射表** —— 模板命名按其品牌/场景母语(中文模板用中文名,英文模板用 snake_case),不强制统一
470 - **不为输出范围新增结构分支或 CLI flag** —— 输出范围是 `create-template` 简报里的执行选择;两种范围的 Layout/Deck 都声明 `native_structure_mode: structured`,Brand/Style 均无 roster
471 - **不增加 Theme kind** —— Theme 投影 Brand、Deck 或当前项目解析后的身份;Style fallback 不是身份真值
472 - **不让 Style 自动触发 visual review** —— Review Focus 只补充已启用的审阅阶段
473 - **不把 Brand + Layout 自动提升成可注册的 Deck** —— 项目内组合可以按同时具备身份/结构能力来路由,但可复用 Deck 仍必须包含应用契约
474
474 lines MARKDOWN