@lark-apaas/coding-miaoda-sandbox-skills 0.1.0-dev.9dbf919 → 0.1.0-dev.a04167f

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 (101) hide show
  1. package/miaoda/ai-data-processing/SKILL.md +4 -1
  2. package/miaoda/charts-skill/SKILL.md +1 -1
  3. package/miaoda/creative-to-fullstack/SKILL.md +249 -149
  4. package/miaoda/creative-to-fullstack/references/artifact-signals.md +2 -1
  5. package/miaoda/creative-to-fullstack/references/ui-to-function.md +5 -69
  6. package/miaoda/feishu/SKILL.md +4 -4
  7. package/miaoda/forms-skill/SKILL.md +9 -0
  8. package/miaoda/lark-apps-db/SKILL.md +23 -28
  9. package/miaoda/lark-apps-db/references/full-reference.md +126 -6
  10. package/miaoda/lark-apps-ops/SKILL.md +7 -5
  11. package/miaoda/lark-apps-ops/references/lark-apps-access-scope-get.md +1 -1
  12. package/miaoda/lark-apps-ops/references/lark-apps-local-dev.md +3 -2
  13. package/miaoda/lark-apps-ops/references/lark-apps-mcp.md +26 -0
  14. package/miaoda/lark-apps-ops/references/lark-apps-release-create.md +1 -1
  15. package/miaoda/lark-apps-ops/references/lark-apps-user-id-convert.md +63 -0
  16. package/miaoda/lark-design-prototype/DESIGN.md +603 -0
  17. package/miaoda/lark-design-prototype/SKILL.md +85 -0
  18. package/miaoda/lark-design-prototype/references/assets/card-illustration-library.md +113 -0
  19. package/miaoda/lark-design-prototype/references/case-matching.md +53 -0
  20. package/miaoda/lark-design-prototype/references/cases/conversational-ai-home.md +27 -0
  21. package/miaoda/lark-design-prototype/references/cases/data-table.md +30 -0
  22. package/miaoda/lark-design-prototype/references/cases/official-home.md +26 -0
  23. package/miaoda/lark-design-prototype/references/cases/workspace-home.md +34 -0
  24. package/miaoda/lark-design-prototype/references/color-roles.md +163 -0
  25. package/miaoda/lark-design-prototype/references/component-selection.md +134 -0
  26. package/miaoda/lark-design-prototype/references/design-quality-checklist.md +156 -0
  27. package/miaoda/lark-design-prototype/references/form-shell-patterns.md +77 -0
  28. package/miaoda/lark-design-prototype/references/icon-semantics.md +237 -0
  29. package/miaoda/lark-design-prototype/references/layout-interaction.md +164 -0
  30. package/miaoda/lark-design-prototype/references/page-contract.md +281 -0
  31. package/miaoda/lark-design-prototype/references/product-patterns.md +93 -0
  32. package/miaoda/lark-design-prototype/references/prompt-expansion.md +107 -0
  33. package/miaoda/lark-design-prototype/references/restoration-traps.md +113 -0
  34. package/miaoda/lark-design-prototype/references/token-semantics.md +112 -0
  35. package/miaoda/lark-design-prototype/references/visual-brief.md +125 -0
  36. package/miaoda/lark-design-prototype/references/visual-style-prompts.md +61 -0
  37. package/miaoda/lark-design-prototype/scripts/icon-query.mjs +272 -0
  38. package/miaoda/lark-design-prototype/scripts/token-query.mjs +76 -0
  39. package/miaoda/lark-design-prototype/scripts/verify-static-html.mjs +117 -0
  40. package/miaoda/miaoda-sql/SKILL.md +9 -0
  41. package/miaoda/semantic-search/SKILL.md +6 -4
  42. package/miaoda/table-skill/SKILL.md +2 -0
  43. package/miaoda/testing-guide/SKILL.md +109 -13
  44. package/miaoda-design/lark-apps-comment/SKILL.md +44 -35
  45. package/miaoda-modern/charts-skill/SKILL.md +1 -1
  46. package/miaoda-modern/forms-skill/SKILL.md +33 -3
  47. package/miaoda-modern/lark-apps-ops/SKILL.md +7 -5
  48. package/miaoda-modern/lark-apps-ops/references/lark-apps-access-scope-get.md +1 -1
  49. package/miaoda-modern/lark-apps-ops/references/lark-apps-local-dev.md +3 -2
  50. package/miaoda-modern/lark-apps-ops/references/lark-apps-mcp.md +26 -0
  51. package/miaoda-modern/lark-apps-ops/references/lark-apps-release-create.md +1 -1
  52. package/miaoda-modern/lark-apps-ops/references/lark-apps-user-id-convert.md +63 -0
  53. package/miaoda-modern/lark-design-prototype/DESIGN.md +603 -0
  54. package/miaoda-modern/lark-design-prototype/SKILL.md +85 -0
  55. package/miaoda-modern/lark-design-prototype/references/assets/card-illustration-library.md +113 -0
  56. package/miaoda-modern/lark-design-prototype/references/case-matching.md +53 -0
  57. package/miaoda-modern/lark-design-prototype/references/cases/conversational-ai-home.md +27 -0
  58. package/miaoda-modern/lark-design-prototype/references/cases/data-table.md +30 -0
  59. package/miaoda-modern/lark-design-prototype/references/cases/official-home.md +26 -0
  60. package/miaoda-modern/lark-design-prototype/references/cases/workspace-home.md +34 -0
  61. package/miaoda-modern/lark-design-prototype/references/color-roles.md +163 -0
  62. package/miaoda-modern/lark-design-prototype/references/component-selection.md +134 -0
  63. package/miaoda-modern/lark-design-prototype/references/design-quality-checklist.md +156 -0
  64. package/miaoda-modern/lark-design-prototype/references/form-shell-patterns.md +77 -0
  65. package/miaoda-modern/lark-design-prototype/references/icon-semantics.md +237 -0
  66. package/miaoda-modern/lark-design-prototype/references/layout-interaction.md +164 -0
  67. package/miaoda-modern/lark-design-prototype/references/page-contract.md +281 -0
  68. package/miaoda-modern/lark-design-prototype/references/product-patterns.md +93 -0
  69. package/miaoda-modern/lark-design-prototype/references/prompt-expansion.md +107 -0
  70. package/miaoda-modern/lark-design-prototype/references/restoration-traps.md +113 -0
  71. package/miaoda-modern/lark-design-prototype/references/token-semantics.md +112 -0
  72. package/miaoda-modern/lark-design-prototype/references/visual-brief.md +125 -0
  73. package/miaoda-modern/lark-design-prototype/references/visual-style-prompts.md +61 -0
  74. package/miaoda-modern/lark-design-prototype/scripts/icon-query.mjs +272 -0
  75. package/miaoda-modern/lark-design-prototype/scripts/token-query.mjs +76 -0
  76. package/miaoda-modern/lark-design-prototype/scripts/verify-static-html.mjs +117 -0
  77. package/miaoda-modern/reviewer-usage/SKILL.md +2 -0
  78. package/package.json +1 -1
  79. package/shared/attachment/SKILL.md +5 -1
  80. package/shared/lark-cli/SKILL.md +4 -4
  81. package/shared/lark-cli/lark-doc/references/lark-doc-fetch.md +3 -3
  82. package/shared/lark-cli/lark-drive/README.md +36 -7
  83. package/shared/lark-cli/lark-drive/references/lark-drive-batch-query-comments.md +44 -0
  84. package/shared/lark-cli/lark-drive/references/lark-drive-list-replies.md +49 -0
  85. package/shared/lark-cli/lark-im/README.md +0 -14
  86. package/shared/lark-cli/lark-sheets/README.md +5 -4
  87. package/shared/lark-cli/lark-sheets/references/lark-sheets-read-data.md +73 -3
  88. package/shared/lark-cli/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  89. package/shared/lark-cli/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  90. package/shared/lark-cli/lark-sheets/scripts/lark_profile_table.py +614 -0
  91. package/shared/lark-cli/lark-sheets/scripts/lark_sheet_range.py +176 -0
  92. package/shared/lark-cli/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  93. package/shared/lark-cli/lark-sheets/scripts/sheets_df.py +21 -3
  94. package/shared/lark-cli/lark-slides/README.md +16 -15
  95. package/shared/lark-cli/lark-slides/references/lark-slides-history.md +32 -20
  96. package/shared/lark-cli/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
  97. package/shared/lark-cli/lark-whiteboard/README.md +1 -2
  98. package/shared/lark-cli/lark-wiki/references/lark-wiki-node-get.md +11 -0
  99. package/shared/lark-cli/lark-wiki/references/lark-wiki-node-list.md +1 -1
  100. package/miaoda-modern/testing-guide/SKILL.md +0 -218
  101. package/shared/dev-channel-probe/SKILL.md +0 -40
@@ -47,6 +47,8 @@ SELECT * FROM rds_ai.list_model();
47
47
 
48
48
  按业务需求选定模型,取其 `model_name` 作为第二个参数。
49
49
 
50
+ ⚠️ **模型可用性由租户管理后台管控。** `list_model()` 返回的是平台预置清单;管理员下架或停用其中某个模型后,平台自动在其余可用预置模型中选择,业务 SQL 无需改动。因此除非用户明确要求锁定模型,否则不传 `model_name`;锁定的模型被停用时,加工结果可能出现风格波动。预置模型全部不可用时调用直接失败,处置见「关键注意事项」。
51
+
50
52
  ## 实现步骤
51
53
 
52
54
  以下 SQL 使用 `tickets` / `priority` 作为示例。Agent 生成实际方案时,必须替换成用户应用里的真实表名、字段名、主键和 `task_kind`。
@@ -378,10 +380,11 @@ LIMIT 20;
378
380
  | ❌ 业务事务路径(同步 trigger / 大批量 UPDATE)里直接调 `rds_ai.ai_query` | HTTP 调用会因网络抖动、限流、超时、模型异常抛错,阻塞业务写入、占锁并产生大额模型调用 | trigger 只入队,模型调用统一由 `ai_run_pending_jobs()` 的 EXCEPTION 块兜住;批量场景先小样本验证,再经 `ai_job` 分批处理 |
379
381
  | ❌ 422 / `quota_exceeded` 报错后继续重试 | 当前应用 AI 调用额度已用完,重试只会继续报错 | 任务直接置 `failed`、停止入队,续费后批量重跑;提示用户「AI 调用额度已耗尽,请联系应用 Owner 在控制台续费或升级套餐后再试」 |
380
382
  | ❌ 429 / `rate_limit_exceeded` 报错后原速重跑 | 调用过于密集触发限流 | 保持重试 + 指数退避;调小 `ai_run_pending_jobs` 单次批量、放慢 worker 节奏;提示用户「AI 调用过于频繁触发了限流,已自动放慢节奏,稍后会继续跑完」 |
383
+ | ❌ 500 / `model_unavailable` 报错后继续重试或继续入队 | 租户预置模型已被全部下架或停用,平台无模型可选,重试不会恢复 | 任务置 `failed` 并停止入队;提示用户「当前租户无可用 AI 模型,请联系租户管理员恢复后再试」;模型恢复后重跑失败任务即可 |
381
384
  | ❌ prompt 不约束输出格式 | 解释性文本会作为脏值写回业务表 | 分类任务写清枚举值并在 SQL 函数里校验结果;JSON 抽取写清 JSON schema |
382
385
  | ❌ trigger 只靠 `UPDATE OF <col>` 判断变化 | 无关更新会重复入队、重复消耗 | 函数里再用 `IS NOT DISTINCT FROM` 判断源字段变化 |
383
386
 
384
- `rds_ai.ai_query` 抛错时,PG 错误信息通常带 HTTP 状态码或 `quota_exceeded` / `rate_limit_exceeded` 关键字;失败任务停在 `ai_job` 表,错误码可从 `error_message` 字段读出供 UI 展示和告警归类。
387
+ `rds_ai.ai_query` 抛错时,PG 错误信息通常带 HTTP 状态码(422 / 429 / 500)或 `quota_exceeded` / `rate_limit_exceeded` / `model_unavailable` 关键字;失败任务停在 `ai_job` 表,错误码可从 `error_message` 字段读出供 UI 展示和告警归类。
385
388
 
386
389
  **禁止**的写法(会阻塞业务写入事务):
387
390
 
@@ -5,7 +5,7 @@ description: "shadcn/ui + ReactECharts 图表开发规范。Use when creating or
5
5
 
6
6
  ## L0 基础配置
7
7
 
8
- - **库**: `import ReactECharts from 'echarts-for-react'` (v5.6.0)
8
+ - **库**: `import ReactECharts from 'echarts-for-react'` (echarts v6.1.x)
9
9
  - **主题**: `theme="ud"`
10
10
  - **颜色**: 🚨 只能用 hex(如 `#1890ff`),禁止 hsl/rgb
11
11
  - **高度**: ≥300px (`className='h-[300px]'`)
@@ -6,152 +6,252 @@ workspace-contains:
6
6
  - source_package/creative/.upgrade-manifest.json
7
7
  ---
8
8
 
9
- # 根据创意设计稿生成全栈应用
10
-
11
- `source_package/creative/` 是一份创意模式产物(UX 设计稿),它定义了应用的外观和功能,两者都要交付:视觉效果原样照抄源稿,功能实现为真实链路。架构从源稿分析得出,数据从源稿原样复制得出,都不允许自行设计或编造。
12
-
13
- 术语约定:**初始数据**指源稿默认展示的内容写入数据库后形成的记录;**源稿定位**指源稿文件路径加行号区间。
14
-
15
- ## Quick Reference
16
-
17
- | 阶段 | 做什么 | 细则 |
18
- |------|--------|------|
19
- | 第 0 步 | 确认素材:读 manifest,写 AGENTS.md 溯源 | 本文档 |
20
- | 第 1 步 | 判定产物类型与支持范围 | `references/artifact-signals.md` |
21
- | 第 2 步 | 分析源稿,产出实现方案(2.1 至 2.7 七份产物) | 本文档 |
22
- | 第 3 步 | 实现:共享骨架、建表与初始数据、插件、并行页面开发 | 本文档 |
23
- | 第 4 步 | 验收:逐字段对照、逐表计数、逐项功能核对 | 本文档 |
24
-
25
- ## 禁止事项
26
-
27
- | 禁止 | 原因 |
28
- |------|------|
29
- | 修改、删除或让构建引用 `source_package/creative/` | 该目录是 UX 权威规格,只读,实现期间要反复对照 |
30
- | 派 Worker 实现却不带源文件、只给文字概述 | Worker 看不到源码必然按概述重画;必须带源文件并命令读源(见 3.5) |
31
- | 交付前端写死业务数据的页面 | 稿内示例数据应写入数据库成为初始数据,页面走真实查询 |
32
- | 改写可见文案、示例数据、条目数量或顺序,或用生成图片替换稿内已有素材 | 默认展示内容和素材也是 UX 规格,不只是布局与配色 |
33
- | 照抄创意稿里用假逻辑模拟的 AI 能力和飞书能力 | 这类能力必须用真实插件实现(见 2.6 与 plugin-guide skill) |
34
- | 把可交互控件做成无事件处理、空链接、占位或假成功反馈 | 可见功能必须产生真实、可验证的结果 |
35
- | 跳过页面清单直接写代码 | 多屏产物不拆清单必然漏页、导航断链 |
36
- | 对范围外产物(deck 演示稿、纯动画、报表看板)做任何生成或转换 | 产品仅支持产品设计与可交互原型,范围外一律停止并告知 |
37
-
38
- ## 第 0 步:确认素材
39
-
40
- 1. 读 `source_package/creative/.upgrade-manifest.json`(字段:`sourceAppId`、`archiveName`、`checkpointId`、`exportedAt`、`fileCount`)。
41
- 2. 目录不存在或为空时,用源应用 ID 重试一次:`miaoda app export <source-app-id> --out source_package/creative --json`;仍失败则告知用户源应用没有可用的设计内容,停止,不要虚构设计稿。
42
- 3. 追加 `AGENTS.md`(不存在则创建)溯源说明:
43
-
44
- > 本应用根据创意设计稿 `<应用名>`(`<sourceAppId>`)生成。`source_package/creative/` 是 UX 权威规格:只读,勿改勿删,勿让构建引用。稿内 `data-miaoda-*` 属性与 `<script type="text/babel">` 是创意平台预览机制,本工程不使用。
45
-
46
- ## 第 1 步:判定产物类型与支持范围
47
-
48
- 读 `source_package/creative/index.html`(及 `components/`、`screens/`,若存在),按 `references/artifact-signals.md` 的信号表判定类型。产品仅支持「产品设计」(多屏设计稿、移动端 mockup 等画布类)与「可交互原型」两类;范围外类型(deck 演示稿、纯动画、报表看板)停止:告知用户不支持,不做静态转换、不虚构功能、不产出代码。
49
-
50
- ## 第 2 步:分析源稿,制定实现方案
51
-
52
- 方案必须包含 2.1 至 2.7 全部产物,任何一项缺失都不得进入第 3 步。
53
-
54
- - 2.1 **页面、路由与导航清单**
55
- - 2.1.1 逐屏扫描源稿,为每一屏(每一个画板)规划一个路由页面,并记录该页面的源稿定位。
56
- - 2.1.2 产出全局路由表并指定默认页。每条路由写明四项:路径模板、对应页面、每个路由参数的真实来源(哪个接口返回的哪个字段)、入口(用户从哪里到达该路由)。全局路由表是唯一权威:后续所有任务接入路由、编写跳转都以它为准,不得自行发明路径。
57
- - 2.1.3 入口规则:每个页面至少有一个入口。带参数的路由,入口必须传入真实数据的参数值(如列表项点击传当前数据的 id);静态导航项只能指向无参数路由,禁止用占位值(demo、default、写死的 ID)拼路径;需要从导航进入带参数页面时,规划无参数的列表页或在路由表写明取哪条真实数据。
58
- - 2.1.4 导航栏、页脚等出现在多个页面上的共享组件单独列出,同样记录源稿定位。
59
- - 2.1.5 清单完成后对照源稿逐屏检查:每一屏都有对应页面、每个页面都有入口、每个路由参数都有真实来源;缺任何一项即清单不完整,立即补齐。
60
- - 2.1.6 页面拆分、导航项处理、设备框处理的细则见 `references/artifact-signals.md`。
61
- - 2.2 **主题 token**
62
- - 2.2.1 把源稿中的 `:root` CSS 变量或主题常量对象整套提取为工程主题 token,色值、字体、间距保持原值。
63
- - 2.3 **数据模型与存放位置**
64
- - 2.3.1 根据源稿中的数据结构推导数据库表、字段和关联关系,推导方法见 `references/ui-to-function.md`。
65
- - 2.3.2 为每一个页面可见的值判定存放位置。存入数据库:需要参与查询、筛选、聚合的值,以及属于单条数据自身内容的视觉值(例如每门课程的封面渐变、每条路径的标识色)。写在前端代码里(组件常量或主题 token):仅用于展示、集合由设计稿固定、不参与任何后端逻辑的纯视觉值(例如分类的字符图标、装饰 emoji、固定区块配色)。
66
- - 2.3.3 统计数字和图表逐项写明展示文案、接口字段、数据库聚合口径和比较周期。文案和口径必须与源稿一致;聚合得出的数值随真实数据变化,不要求等于源稿中的数字。
67
- - 2.4 **初始数据清单**
68
- - 2.4.1 逐页登记每一块默认展示的内容,写明五件事:源稿定位、全部可见字段(文案、字符图标、色值、数值、单位、顺序、默认选中状态)、写入哪张表、经过哪个接口、显示在哪个页面。
69
- - 2.4.2 导航、页脚等共享组件的可见内容(项数、文案、顺序)同样登记,不因为不属于某一个页面而遗漏。
70
- - 2.4.3 清单登记字段名和源稿定位即可,不把大段源码复制进方案。
71
- - 2.5 **可见功能清单**
72
- - 2.5.1 逐页登记源稿中每一个可交互元素,写明四件事:用户做什么操作、应看到什么结果、经过哪条前后端链路实现、如何验收。
73
- - 2.5.2 控件类型与易漏场景的枚举见 `references/ui-to-function.md`。
74
- - 2.6 **插件能力清单**
75
- - 2.6.1 找出源稿中用假逻辑模拟的 AI 能力和飞书能力,逐项登记,实现时调用真实插件。识别信号见 `references/ui-to-function.md`,插件目录与调用规范读取 `plugin-guide` skill。
76
- - 2.6.2 数据库和文件存储不是插件,使用平台内置服务。
77
- - 2.7 **架构边界与验收标准**
78
- - 2.7.1 规划 Layout、shared 类型入口和服务端模块入口(路由与导航结构已在 2.1)。
79
- - 2.7.2 为每一个后续任务写明允许修改的目录范围;多个并行任务不得修改同一个共享文件。
80
- - 2.7.3 为每一个后续任务写一句可验证的完成标准,标准落在真实能力上(如「提交后写入数据库且刷新后仍可见」),不得写成「页面渲染正常」「按钮可以点击」。
81
-
82
- **方案完整性门禁**:用模拟、占位、静态展示、仅 Toast、仅记录日志代替真实功能的方案不完整,必须改为真实实现;能力不可用时写明阻塞原因。方案确认后按方案执行,用 TodoWrite 追踪进度。
83
-
84
- ## 第 3 步:实现
85
-
86
- **任务依赖**:
87
-
88
- - 串行:3.1 共享骨架、3.2 数据库与初始数据、3.3 插件依次完成,然后进入 3.4。
89
- - 并行:3.4 的页面任务相互独立、可以并行;每个页面任务只依赖 3.1 的骨架、自己用到的表和初始数据、自己用到的插件;页面任务之间不得互相依赖。
90
- - 第 4 步验收在全部开发任务完成后进行。
91
-
92
- **通用要求**:动手写任何会产生页面可见内容的代码(页面、组件、初始数据、共享组件)之前,必须重新读取对应的源稿定位。探索阶段读过不算数;上下文经过压缩或大量其他实现之后必须重读。
93
-
94
- - 3.1 **共享骨架**
95
- - 3.1.1 按 2.1 的全局路由表和 2.7 的规划一次性建好全局路由、Layout、shared 类型入口和服务端模块入口;后续任务不得再修改这些共享文件。
96
- - 3.1.2 编写导航、页脚等共享组件之前,先读取 2.1.2 登记的源稿定位;组件的项数、文案、顺序必须与源稿一致。
97
- - 3.1.3 本任务提交时工程必须可以运行:前端有最小可渲染页面,服务端可以编译启动;不得引用后续任务才会创建的文件。
98
- - 3.2 **数据库与初始数据**
99
- - 3.2.1 按 2.3 的数据模型建表。
100
- - 3.2.2 建表完成后立即写入初始数据。按 2.4 清单**一块一块地**处理,每一块都执行同一套动作序列:
101
- - 第一步:读取这一块登记的源稿定位,让这段源稿内容出现在当前上下文里。
102
- - 第二步:立即把这一块的默认展示内容逐字段原样复制成 INSERT 语句,用 `miaoda db sql` 执行。此时源稿内容就在眼前,照着源稿写,不凭记忆写。不改文案,不换近义词,不改数值和单位,色值保持原样,字符图标保持原字符。
103
- - 第三步:用 SELECT 查回刚写入的记录,与第一步读到的源稿逐字段核对(文案、数值、单位、色值、字符图标、顺序);发现不一致立即修正,核对通过后再处理下一块。
104
- - 3.2.3 两条禁止:禁止读完全部源稿后一次性批量写入所有表;禁止不读源稿、凭方案摘要或记忆直接写 INSERT。
105
- - 3.2.4 初始数据必须在本步全部写入数据库,进入页面开发之前已经在库。禁止把初始数据做成运行时接口,禁止由页面在浏览器加载时写入数据,禁止依赖第一个访问者触发写入。
106
- - 3.3 **插件**
107
- - 3.3.1 按 2.6 清单逐个创建插件实例,自检参数与调用方式;禁止手工修改 `server/capabilities/` 目录。
108
- - 3.4 **页面开发**(每个源稿页面一个任务,可并行)
109
- - 3.4.1 读取本页的源稿定位对应内容。本任务只读本页源稿定位与相关 shared 契约文件,缺了按需补读,不得重新推导架构。
110
- - 3.4.2 实现本页的服务端 service 和 controller:做真实查询、写入和聚合,遵守 2.7 的模块边界,不写只做转发的空壳接口。
111
- - 3.4.3 实现本页前端页面:写每个页面和组件之前先读对应源稿定位,按下方视觉还原规则原样还原;页面数据一律来自真实接口调用,禁止在前端写死业务数据。发现本页数据缺失或与源稿不符时,按 3.2.2 的方式补写数据库并在结果中说明,不得在前端内置数据。
112
- - 3.4.4 页面内的组件可以并行开发,完成后集成到页面。
113
- - 3.4.5 自查:前后端类型一致、shared 契约一致、未越出文件边界;本页每个跳转的路径与参数和 2.1 路由表一致,参数值来自真实数据;把本页源稿值与实现值逐字段并排列出对照。
114
- - 3.5 **派工规则**
115
- - 3.5.1 派给 Worker 的每个任务必须把对应的 `source_package/creative/` 源文件放进 `include_files`。
116
- - 3.5.2 任务提示词的第一条指令必须是:先读取该源文件的指定区段,以源码为视觉、文案、布局、数据的唯一权威;提示词文字仅作辅助,与源码冲突时以源码为准。
117
- - 3.5.3 禁止只用文字概述替代源文件;禁止在提示词里改写源稿中的文案、数值和字段。
118
- - 3.5.4 Worker 完成后回传读取过的源稿定位和验收证据;主 Agent 检查代码本身,不能只凭文字汇报下结论。
119
-
120
- ### 视觉还原规则(3.1.2 与 3.4.3 遵守)
121
-
122
- - 布局用 flex 或 grid 加 gap 直接转写源稿布局,不重新设计。
123
- - 页面上一切可见内容(文案、条目数量与顺序、示例值与单位、字符图标、色值、选中状态、素材)与源稿逐字段一致。存入数据库的内容经由初始数据和接口到达页面;写在前端的内容直接从源稿代码复制。
124
- - 字符图标保持原字符,不改成图标库的图标名称。
125
- - 源稿中已有的图片、SVG 和 CSS 渐变必须复用或等价转写,不得用生成的图片替换。
126
- - 内联 SVG、文案、字体声明保留;`miaoda.feishu.cn/fonts` 字体镜像在生产环境可用。
127
- - 确有必要的转换(例如固定画布改响应式)必须在方案中登记转换前后的形态并验证视觉等价;响应式转换不得改变源稿参考尺寸下的构图。
128
-
129
- ### 可见功能规则(3.4 遵守)
130
-
131
- - 源稿中具有交互语义的可见元素必须全部实现;只有源代码和视觉上都明确是装饰的元素可以不实现;不得添加源稿没有展示的功能。
132
- - 页面跳转、Tab 和弹窗必须到达正确的路由或状态;搜索、筛选、排序、分页的参数必须传入真实查询。
133
- - 写操作必须走完「前端事件、接口、数据库或外部能力、界面反馈」的完整链路;写入的结果在刷新后必须仍能读到。
134
- - 持久化的业务结果由服务端校验前提并原子写入,前端只展示重新读取到的事实;可能重复触发的操作要定义重复、并发、超时和中断时的行为。
135
- - 禁止用没有事件处理的控件、空链接、错误路由、只切换图标、写死的结果或假的成功提示冒充功能完成。
136
-
137
- ## 第 4 步:验收与完成标准
138
-
139
- 交付前逐条核验并写进交付说明,任何一条不达标都不算完成:
140
-
141
- - 4.1 **页面**:2.1 清单中的页面全部实现,且沿路由表登记的入口实际操作可以到达;导航项的数量、文案、顺序与源稿逐项一致;没有占位页,没有用空状态冒充的正式页。
142
- - 4.2 **视觉与数据对照**:逐页把源稿和实现并排重读,按 2.4 清单逐字段核对,并列出「源稿值、数据库值、页面渲染值」三列对照;导航、页脚等共享组件单独对照一次。数据库非空、接口 200、条数正确、结构相似都不能代替逐字段核对。
143
- - 4.3 **初始数据**:对 2.4 清单涉及的每张表执行 COUNT 查询,行数与清单登记的条目数一致;页面首次真实查询即可展示源稿的默认内容,不允许交付空表。
144
- - 4.4 **可见功能**:按 2.5 清单逐项从页面入口操作核对,用页面实际发送的参数和响应确认达到约定结果;只验证接口成功不算通过。持久化结果验证正常、重复、不满足前提的操作及刷新后重读;插件验证真实调用结果。
145
- - 4.5 **数据链路**:全部功能走真实查询和写入;前端没有写死的业务数据、没有用 localStorage/sessionStorage 冒充持久化;grep 确认 simulate、setTimeout 写死结果、picsum、假 toast、Math.random 零残留。
146
- - 4.6 **结果汇报**:报告读取过的源稿定位、逐字段对照结论、功能清单通过情况、必要转换清单、未完成项及原因(没有则写「无」);不得只报文件列表或笼统声称完成。
147
- - 4.7 **摘除注入标记**:4.1–4.6 全部通过后执行 `rm -f source_package/creative/.upgrade-manifest.json`。该文件是本指引的注入门控(兼 export 幂等标记与第 0 步信息源,验收通过时后两者已完成使命:溯源已固化进 AGENTS.md,工程侧在应用初始化后也不再重复导出)——删除后本指引停止注入,后续迭代不再受建应用流程干扰;源稿其余文件保留,供以后对照参考。任何一条验收未通过时**不得删除**(下轮修复仍需本指引在场)。
148
-
149
- > 注:commit 静态检查(CheckTask)只覆盖编译、类型和 lint,不能证明视觉一致、功能可用和数据持久化,必须按上表逐项自检。
150
-
151
- ## Common Mistakes
152
-
153
- | 错误 | 正确做法 |
154
- |------|----------|
155
- | 把设备框(iPhone 壳)实现进产品 UI | 只取框内内容做响应式页面 |
156
- | 声明用了某接口就当按钮已实现 | 按 2.5 清单逐项检查事件处理、前后端链路和可观察结果 |
157
- | 生成后仍保留 `source_package/creative/` 的构建引用 | 该目录只读留档,工程代码不依赖它 |
9
+ # 把创意设计稿实现为全栈应用
10
+
11
+ `source_package/creative/` 是创意模式设计稿,是本次开发的唯一视觉规格。交付标准:
12
+
13
+ 1. **视觉与源稿一致**:每个页面的文案、数值、色值、条目与顺序与设计稿逐字段一致。
14
+ 2. **可见功能真实可用**:设计稿上每个可交互组件(可点、可输入、可筛选)都产生真实、闭环的结果。
15
+ 3. **数据动态可变**:会随业务数据而变的内容一律由业务事实现场算出——禁止前端写死常量、接口返回字面量、库内预置统计字段或独立统计快照。业务事实变化后,所有相关页面重新查询都得到一致的新结果;算出的值与源稿数字不一致是预期结果,只对齐单位与格式。
16
+
17
+ 两条核心规则:**一切视觉内容直接从源稿代码照抄,不经过任何文字转述**;**动手实现前先完成业务设计并写入 `docs/business-design.md`,后续每个阶段以该文件为执行依据**。
18
+
19
+ ### 第 1 步:通读源稿
20
+
21
+ 读取 `source_package/creative/` 下全部页面源文件(index.html、pages/、components/ 等)。该目录只读,是实现期间反复对照的唯一视觉权威;工程代码不得引用它,也不要修改它。
22
+
23
+ ### 第 2 步:业务设计(主 Agent 的核心职责)
24
+
25
+ 从源稿可见信息推断应用的业务模型。完成以下四项设计并通过门禁,**写入工程文件 `docs/business-design.md`**,作为第 3/4/5 步的执行依据:
26
+
27
+ **2.1 业务域划分**。按「业务模块闭环拆解规则」(见下方规则章节)从源稿划分业务域,产出各域的名称、覆盖的源稿页面与功能、服务端模块归属。候选业务域包含多个可独立闭环的子业务,或预计单个 Worker 难以一次完整实现时,继续拆为更小的业务域;每个子域仍包含完整的前后端闭环。
28
+
29
+ 同时单列「全局 Layout 与跨页面公共组件」清单:登记导航、侧栏、页眉、页脚等全局框架,以及被两个以上页面共同使用或重复出现的组件,并记录源稿文件和使用页面。该清单是共享视觉资产,不是业务域,不纳入任何域任务,在公共视觉层统一实现。
30
+
31
+ **2.2 数据模型**。以 2.1 划定的业务域为单位,先设计合理的业务数据模型,再单独规划初始数据。表结构设计不承担视觉内容分流职责,不得为了复刻某个页面或某组展示值而增删实体和字段。
32
+
33
+ 1. **设计表结构**:从业务对象、行为和生命周期识别实体,产出表名、业务含义、字段(含类型与语义)、主键与业务唯一键、表间关系及基数、状态与时间字段、必要约束。按以下不变量建模:
34
+ - 一个实体具有可解释的业务身份或生命周期;页面、卡片、图表不是实体边界,禁止按页面或展示区块机械建表;
35
+ - 字段保存原子业务事实,关系通过稳定标识表达;多值关系、历史记录和状态流转按其业务语义建关系表或历史表,不用展示字符串代替关联;
36
+ - 对业务唯一性、引用完整性、必填、合法枚举、数值范围和不允许重复的关系设置相应约束;索引服务于 2.3 的查询、筛选、排序和关联;
37
+ - 表结构与 2.3 相互校验:每个持久化写操作有承载实体,每个查询条件有明确事实字段,需持久化的插件结果归属到对应业务实体;平台内置服务已管理的数据不重复建表;
38
+ - **派生数据不作为独立真源**:会随业务事实变化的统计值、汇总值、进度、余额、排名、趋势和状态概览,不设冗余字段,不为展示单独建立统计或快照记录,由 2.3 的接口基于事实现场计算。同一业务概念跨页面复用同一事实来源和计算口径;
39
+ - 只有当汇总或快照本身具有独立业务身份、生命周期,并且 2.3 定义了它的真实生成、更新和消费链路时,才作为业务实体建模;“页面需要展示”不构成建表理由。
40
+
41
+ 2. **确定建表顺序**:存在引用关系的表,被引用的表先建;该顺序只服务于后续建表和初始数据写入,不改变实体边界。
42
+
43
+ 3. **规划初始数据**:表结构确定后,再为需要种子数据的表标注源稿中的业务事实记录位置和字段映射。该部分与表结构分开书写:
44
+ - 只标注源稿文件、区块和字段到表字段的映射;同一实体散落在多个页面时列全位置并按稳定业务标识合并;
45
+ - 源稿展示格式与存储类型不同时,写明格式解析和单位、枚举、时间的转换规则;初始数据写入严格按该规则执行,不自行改变语义;
46
+ - 只使用源稿明确给出的业务事实,不补充源稿没有的字段值、记录或关系;源稿只有汇总数字而没有对应事实时,不将汇总数字作为初始数据,也不编造明细凑数;
47
+ - `docs/business-design.md` 只写来源位置和映射规则,**禁止写实际初始值、示例记录或数据摘要**;实际值由负责初始数据写入的 CodeAct 重新读取源稿后写入。
48
+
49
+ **2.3 可见功能业务模型与 API 设计**。按 2.1 的业务域逐域进行,为每个域产出核心功能清单与接口设计。
50
+
51
+ 对每个业务域依次完成:
52
+
53
+ 1. **识别核心功能**。以源稿的可点控件为识别依据:每个可点控件必须归入一条核心功能,功能内容取该控件的预期结果。识别前先读 `.agent/skills/creative-to-fullstack/references/ui-to-function.md`,按其中「UI→功能映射表」与「UI→capability 常见信号示例」对照组件类型与功能信号。
54
+
55
+ **按功能族登记,不做逐控件矩阵**:触发语义、输入、结果和状态变化相同,仅作用对象不同的重复控件合并为一条功能;不同页面复用同一能力时也只登记一次,并列出覆盖页面。不同结果、不同状态变化或不同目标页面的控件不得因文案相近而合并。源稿未展示也未暗示的功能不补造。
56
+
57
+ 每条功能记录为:「功能名称 + 覆盖页面 + 触发方式与输入 + 用户可见结果 + 状态变化或目标页面」。操作结果需要跳转到另一个页面时一并写明目标页面,目标页面不在源稿里时标注为新增页面,在共享结构骨架中补齐路由与页面壳。业务设计只写功能族;逐个控件的覆盖关系在 2.5 通过源稿反查校验,只有漏项才展开记录。
58
+
59
+ **源稿未画出点击后的页面不构成豁免**:该控件仍识别为核心功能,目标页面按新增页面登记。可点控件是否构成核心功能存疑时,按构成处理。
60
+
61
+ 2. **能力选型**。对每条核心功能按以下顺序判定实现方式:
62
+ - 预期结果仅为同一页面内的呈现变化,不涉及库内数据与外部能力 → 随页面视觉还原实现,不设接口,不进第 3 条;
63
+ - 平台内置服务(用户、文件、权限、消息、自动化/定时)可满足 → 直接使用,标注「使用平台内置服务:[服务名]」,禁止自建同等能力;
64
+ - 功能涉及 AI、智能、自动生成、大模型、文本生成、图片生成、飞书、消息通知、群组、机器人等能力 → 判定为插件能力,登记进 2.4 做插件设计;普通前后端能可靠实现的不硬凑插件;
65
+ - 以上都不满足 → 自建服务端 API,进入第 3 条。
66
+
67
+ 判定时对照源稿补漏,两种都登记进 2.4:以假逻辑模拟、未以可交互组件呈现的(定时提醒、自动通知);把智能产出画成已完成结果的(已生成的摘要、已提取的条目、带 AI 标记的内容块)。判据是这段内容真实使用中由谁产生——由模型产生就不能当初始数据誊写入库。
68
+
69
+ 3. **API 设计**。为自建 API 的功能设计接口:
70
+ - 同一数据实体的操作合并设计:列表查询一个接口,入参覆盖该页全部筛选维度、搜索关键词与分页参数;新建、更新、删除、详情各一个接口;
71
+ - 随业务数据而变的出参必须在接口条目内就地写明「事实来源 + 计算/筛选口径 + 哪类事实写入会使它变化」;共用同一口径的多个出参可合并说明,不另建全量数据血缘矩阵;
72
+ - 派生出参只能从事实表或真实外部能力结果计算,禁止读取为展示而单独预置的统计/快照记录;事实写入成功后,相关查询不得依赖人工同步第二套数据;
73
+ - 每个接口写明:方法与路径、入参与出参、读写的表、支撑的功能;字段类型、业务语义和必要的格式转换与 2.2 保持一致,不另起一套。
74
+
75
+ 本节产出是第 4 步各域任务服务端子步骤的实现范围(域任务的 Service/Controller 按 API 清单逐接口实现),也是第 5 步验收目标的选取来源。
76
+
77
+ **2.4 插件设计(条件步骤,仅当 2.3 判定出插件能力时执行)**。先读取 `plugin-guide` skill 了解插件目录与调用规范,然后对 2.3 登记的插件需求逐项设计。
78
+
79
+ 设计原则:
80
+
81
+ - **原子化拆分**:一个插件实例只做一件事——不同输出类型(文本/图片/消息)建独立实例,不同业务语义(如标题与正文)建独立实例;
82
+ - **链路完整性**:从用户输入到展示/落库,每一步都有对应插件——链式场景如文档解析→结构化提取需要两个插件;
83
+ - **调用方式选择**:默认前端 capabilityClient 直接调用;以下情形改为服务端调用并说明原因:调用前需验证权限、需记录调用日志、结果需先落库、定时任务或 Webhook 无前端上下文、需聚合多个插件结果。
84
+
85
+ 输出格式,每个插件一行:
86
+
87
+ | 插件名称 | 基础插件 | 用途 | 调用方式 | 关联页面/接口 | 输入参数 | 输出类型 |
88
+ | --- | --- | --- | --- | --- | --- | --- |
89
+
90
+ **2.5 业务设计门禁(主 Agent,进入第 3 步前执行)**。门禁只检查通用不变量,不要求输出逐控件矩阵或全量血缘表。逐条检查并在 `docs/business-design.md` 末尾记录五项结论;通过项只写一句依据,失败项列出具体漏项并修正设计,全部通过前禁止建表或派发实现:
91
+
92
+ 1. **交互覆盖**:从全部源稿页面反查 `button`、链接、表单、筛选、Tab、行操作和其他可点外观,每个都能归入 2.3 的某个功能族;重复实例只核对是否复用同一行为,不逐项写入设计文档。不存在因“目标页没画”“接口还没有”而取消的可见功能。
93
+ 2. **闭环成立**:每个功能族都有明确输入、用户可见结果、状态变化或目标页面;写操作包含真实写入、反馈和重新读取,失败时有可理解、可恢复的反馈。
94
+ 3. **模型合理**:每张表都能说明对应业务实体及生命周期;主键、业务唯一键、关系基数、引用完整性、状态和必要约束齐全,不按页面或展示区块机械建表,不用展示字符串代替实体关系。
95
+ 4. **数据可推导**:每个动态出参都在所属接口内写清事实来源、口径和变化触发;不存在仅为页面展示而保存的派生字段、统计表或快照记录,不存在为凑源稿数字而编造的业务事实。
96
+ 5. **单一真源**:同一业务概念跨页面、接口和状态流转使用同一事实来源与口径;不存在需要人工双写、定时补齐或前端自行修正才能一致的第二套数据。
97
+
98
+ `docs/business-design.md` 写完后,用 TodoWrite 建执行清单,条目至少覆盖:每个基建项、每个业务域实现任务、**验收任务**(此刻即加入清单)。
99
+
100
+ ### 第 3 步:基建
101
+
102
+ 共享结构骨架完成后,主 Agent 完成建表并生成 schema,再同批并发派发三项:公共视觉层 Worker、初始数据 CodeAct、插件实例 Worker(2.4 有产出时)。三项全部完成后,派发所有无数据依赖的业务域 Worker 并发开发,验收前必须全部完成。
103
+
104
+ **3.1 共享结构骨架(主 Agent)**。先读取 coding-guide skill 了解项目规范,再依据 `docs/business-design.md` 基于现有工程一次性补齐后续任务共同依赖的最小结构:
105
+
106
+ - 确定页面、业务域及 2.1 共享视觉资产的代码目录归属;为每个源稿页面和 2.3 记录的新增页面补齐语义化路由,复用已有页面壳,只为缺失页面创建最小可渲染页面壳;
107
+ - 配置默认页,以及包含页面内容容器和路由出口的 Layout 骨架;
108
+ - 按 2.2 和 2.3 定义 shared 实体类型及 API 请求/响应契约;
109
+ - 按 2.1 为每个业务域注册空 Module、Service 和 Controller 骨架。
110
+
111
+ 完成后确认工程可编译,且每个页面都有路由和目录归属、每项共享视觉资产都有目标目录、每个业务域都有模块边界与 shared 契约。
112
+
113
+ **3.2 建表(主 Agent)**。确认 2.5 五项门禁全部通过后,按 `docs/business-design.md` 2.2 确定的建表顺序逐张建表,被引用的表先建。表结构取自 2.2 设计,不涉及源稿内容誊写。只建真实业务实体和关系表;仅服务于页面展示的派生字段、统计表、排行表、趋势表或快照表不得创建,除非 2.2 已证明它本身是具有真实生成和更新链路的业务实体。建完后跑数据库 schema 代码生成刷新 `server/database/schema.ts`,后续 CodeAct 与业务域 Worker 均以该文件中的真实列名和类型为准。
114
+
115
+ **3.3 全局 Layout 与跨页面公共组件(派发 Worker)**。按共享视觉资产清单读取对应源稿,写入共享结构骨架确定的目标目录,只实现全局视觉框架和跨页面复用的展示组件:
116
+
117
+ - 在 Layout 骨架上实现并装配导航、侧栏、页眉、页脚等全局框架,对齐源稿的结构、固定文案、色值、字体、间距和内容区域约束;导航目标只使用已注册路由;
118
+ - 每个跨页面公共组件只实现一份。固定文案、图标和视觉结构照源稿实现;业务实体、状态和动态值改为由 props 传入,业务操作通过事件回调暴露,不在公共组件内调用业务 API、插件或维护领域状态;
119
+ - 页面专属组件和页面内容不在本步实现,由所属业务域任务完成。
120
+
121
+ 完成后确认全局 Layout 已实际挂载、所有路由页面使用同一套全局框架、公共组件可被域任务直接引用且工程可编译;只创建组件文件但未接入应用不算完成。
122
+
123
+ **3.4 初始数据插入(**必须**派 `CodeAct` 执行)**。数据内容**必须**由读到源稿原文的执行者当场写入,读源与写库之间不经过任何交接——**通读阶段读过源稿不算**,隔了若干轮之后凭记忆写出的记录必然是编造的。
124
+
125
+ 派发对象:`CodeAct`——它同时具备读文件与执行 SQL 的能力,读完源稿即可落库,报错时源稿仍在上下文中可直接改正。
126
+
127
+ **派发内容**:本次负责的表清单、每张表在 2.2 的源稿位置标注、建表顺序、`server/database/schema.ts` 的路径。
128
+
129
+ **任务要求**:
130
+
131
+ - 按标注打开源稿文件、定位到该区块后再写;区块落在文件后段时读到该区块为止,禁止只凭文件开头写数据;
132
+ - 列名与类型照 `server/database/schema.ts`;`_` 前缀的系统字段与主键不写,由数据库默认值生成;
133
+ - 字段值来自读到的源稿业务事实,**这是映射不是创作**:除 2.2 初始数据规划明确声明的格式与类型转换外,不改写语义、不增删记录、不补充源稿没有的字段值或关系;
134
+ - 只写具有独立业务身份、能参与查询或状态变化的源稿事实记录;KPI、汇总、趋势、占比、排名、进度、余额等派生展示值不作为初始记录写入,源稿事实不足时不得编造明细使其对上;
135
+ - 素材字段写本应用内取得到的地址:源稿的引用指向源应用运行时存储,本应用取不到时,生成替代图后写它的地址;
136
+ - 2.2 初始数据规划标注的业务事实记录全部写入,一条不漏;同一实体在多个页面出现时按稳定业务标识去重并合并已明确的事实字段,不重复插入;
137
+ - 子表外键用 `SELECT` 子查询按业务键(标题、名称等)关联父行,禁止硬编码 UUID。
138
+
139
+ 达标标准:2.2 初始数据规划中的每条业务事实均按映射写入,表间关系正确,首次查询可返回且业务语义与源稿一致。禁止把初始数据做成运行时 mock 接口或前端写死;页面视觉是否完整由页面实现与验收单独检查。
140
+
141
+ **3.5 插件实例(条件步骤,2.4 有产出时执行;派发 Worker)**。整份 2.4 清单交给一个 Worker 建实例并确认契约,调用代码由所属业务域任务实现:
142
+
143
+ 1. 调用 `plugin_instance` 工具创建插件实例,彼此无依赖的实例在同一批次并发创建,只有输出需作为下一实例入参的链式实例才顺序建;禁止手工修改 `server/capabilities/` 目录;
144
+ 2. 获取运行时 schema,逐字段确认 inputSchema 与 outputSchema 的字段名、类型、是否必填;
145
+ 3. 回传每个实例的实例名与 schema 摘要(字段名、类型、必填)。主 Agent 把摘要写进该插件所属域的派发指令,供域任务按 schema 编写调用代码。
146
+
147
+ 规则:
148
+
149
+ - 禁止只创建实例而不在域任务中安排调用代码——未生成调用代码的插件实例是无效的;
150
+ - 域任务编写调用代码时,入参出参的字段名与类型以运行时 schema 为准,禁止从设计文档推测(设计可能与插件实际 schema 不一致);入参中的动态配置值(接收人、通知模板、阈值等)禁止硬编码,从配置表或平台 API 获取;
151
+ - 插件结果需要持久化时,优先在该域 Service 内调用插件并在同一方法内落库;保持前端调用的,成功后通过已有业务 CRUD 接口保存结果,不为此单独新建 API;
152
+ - 后续任一阶段发现缺插件实例,主 Agent 立即用 `plugin_instance` 工具补建,禁止用 pluginKey 冒充 instanceId 调用或跳过该功能。
153
+
154
+ ### 第 4 步:按业务域派发实现(Worker)
155
+
156
+ 确认全局 Layout、跨页面公共组件、初始数据和所需插件实例全部完成后,按「业务模块闭环拆解规则」把每个业务域派发为一个 Worker 任务。派发前重读 `docs/business-design.md`,按其中的业务域划分逐域生成任务。
157
+
158
+ **核心原则**
159
+
160
+ - 任务范围是该域的前后端完整实现:Service、Controller、页面内容、页面专属组件与接口集成都在同一个任务内;共享结构骨架、全局 Layout 与跨页面公共组件不在域任务中重复实现;
161
+ - 服务端代码不得摘出来由主 Agent 代写——Worker 跑不了接口测试与运行时日志是预期的,运行时验证统一在第 5 步做;
162
+ - **派发指令不写源稿的具体内容**: 避免实现时没有按照原稿而是按照指令开发。
163
+
164
+ **每个任务必须携带**:
165
+
166
+ - 权威文件位置:该域相关的源稿文件、`docs/business-design.md`、该域的 shared 契约文件与既定路由文件——只给路径,禁止用文字概述替代源文件,由 Worker 自行读取;
167
+ - 双权威声明:视觉结构、固定文案、布局与呈现格式以源稿源码为唯一权威;业务数据以真实接口返回为准;表结构、API、插件调用以 `docs/business-design.md` 该域章节为准;
168
+ - 全局 Layout 与公共组件位置:全局框架已统一接入,域任务只填充页面内容;公共组件直接 import,**禁止在页面内重新实现同名组件**;清单之外且只属于本域的组件才在页面内实现;
169
+ - 一句话验收标准(acceptance),落在真实能力层(如「提交后经真实接口落库且刷新后可回查」),达标即完成,禁止超出标准的冗余自查;
170
+ - 只写任务目标、源稿位置、验收标准,源稿的具体内容由 Worker 按位置自己读;
171
+ - 让 Worker 在开工前感知到「任务内执行顺序」以及「视觉一致性」「功能真实性」两节规则。
172
+
173
+ **任务内执行顺序**
174
+
175
+ 1. 读取 coding-guide 及与本域相关的 skill;
176
+ 2. 读源稿该域文件,读 `docs/business-design.md` 该域章节(功能清单、表结构、API 清单);
177
+ 3. 检查 shared 契约与该域表结构、接口设计一致;按既定目录结构落文件,不另建与之平行的目录;
178
+ 4. Service 层:业务编排、落库、插件调用聚合、内置服务调用;服务端调用的插件逐条写明「调用 [实例名],触发条件为 [条件]」;
179
+ 5. Controller 层:REST API,按该域 API 清单逐接口实现,避免纯透传接口;
180
+ 6. 在已注册路由与页面壳内实现页面,不重新配置全局路由或 Layout;
181
+ 7. 页面与组件实现:打开源稿对应区段对照实现,固定文案、色值、条目结构与顺序照源码转写;业务实体、状态和动态值来自本域真实接口,禁止 mock 业务数据;复用公共组件,只在本域实现页面专属组件,组件不拆出独立任务;
182
+ 8. 可点元素处置:落在 2.3 功能清单里的全部接上行为。发现清单外的可点元素说明 2.5 门禁漏项,**不得自行去掉交互、补造接口或把它静默留空**;写入 `docs/design-gaps/[域名].md`(文案、页面、预期行为、需要补齐的设计项)并回报主 Agent。主 Agent 更新 2.2/2.3、路由与契约后重新派发;只有源稿本身明确为纯装饰、且不存在可点语义的元素才可保持非交互。该文件是本任务交付物,无则写「无」;
183
+ 9. 前端插件集成(2.4 设计为前端调用的插件):获取插件运行时 schema,按 schema 调用 [实例名],字段名与类型以运行时 schema 为准、不从设计文档推测;结果需持久化的,调用成功后通过已有业务接口保存;
184
+ 10. 代码级自查:类型一致性、契约覆盖、shared 定义对齐。禁止运行时验证——接口冒烟、起服务联调、读运行时日志、E2E 一概不做,统一在第 5 步由主 Agent 执行。
185
+
186
+ 指令里给出的文件路径是**必读下限,不是可读上限**:实现中需要的其他工程文件(既有组件、工具函数、全局配置、路由表)一律按需自行读取。禁止的是重新推导架构:不重新规划目录与路由结构,不反复 glob 全工程。
187
+
188
+ Worker 回传后,主 Agent 至少读一个关键产物文件抽查(页面是否调真实 API、功能链路是否接通);回传中的「已完成、已验证」不作为核验依据。
189
+
190
+ `docs/design-gaps/[域名].md` 非空说明 2.3 或 2.5 漏了元素,主 Agent 逐条补齐功能、接口、页面、表或插件设计后重新派发;禁止把源稿可见功能以“无法实现”或“无目标页”为由降级掉。
191
+
192
+ **自动化任务**:2.3 中选型为平台自动化内置服务的功能(定时触发、数据变更触发),作为独立任务实现,依赖其用到的表与插件:
193
+
194
+ 1. 读取 trigger-guide skill 了解触发器配置与代码开发规范;
195
+ 2. 创建触发器,实现任务逻辑:触发条件判断、去重、插件调用、状态更新;
196
+ 3. 完成后验证代码可编译。
197
+
198
+
199
+ ### 第 5 步:验收(清单里的任务,不是可选动作)
200
+
201
+ commit 的静态检查只覆盖编译与 lint,证明不了功能可用与视觉一致。验收开始前先读取 testing-guide skill 了解 E2E 验收流程,并重读 `docs/business-design.md`,以其中的 2.3 功能与 API 清单为验收目标来源。按以下结构执行,完成前不得提交收尾:
202
+
203
+ 1. **架构与入口检查**:检查路由、页面归属、shared 契约和模块边界,再对照源稿检查全局 Layout 是否挂载以及导航项数、文案、顺序、主题色值和内容区域约束,发现偏离先修对应层再继续。再做三项核对:
204
+ - **链接目标可达**:枚举代码中全部跳转目标(导航项、按钮、卡片、搜索、面包屑)与路由表比对,任一指向未注册路由即未通过;
205
+ - **页面均有入口**:每个已注册页面至少有一个应用内可达入口,只能手输 URL 到达的页面即未通过;
206
+ - 应用入口页面可正常打开,打不开(白屏 / Page not found)则停止验收,只记录阻塞问题。
207
+ 2. **功能族覆盖验收**:从 2.3 生成验收目标,不设全应用固定数量上限。每个会写数据或改变业务状态的功能族至少实操一次;纯查询类按不同查询机制(搜索、筛选、排序、分页、切换、跳转)各选一个代表实操,行为相同的重复控件不重复测。每个目标写成「验收对象 —— 应用内点击路径 —— 可判定的通过标准」,必须从应用可见入口开始逐步点击,禁止手输内部 URL 代替可达性验证。通过标准必须包含状态更新、刷新回读、列表/详情变化、真实结果或可恢复错误之一;「页面渲染正常」「控件可见」「按钮可点击」不构成通过标准。派发 E2E agent 实际执行。
208
+ 3. **业务闭环验收**:每个独立业务域至少选一条包含起点、过程和业务结果的主链路;若多个域共享同一条跨域链路可合并执行。链路中不得从预置中间态开始来替代创建或触发步骤,源稿未画出的新增页面也必须通过应用内入口到达。
209
+ 4. **可降级范围**:AI 内容质量、真实消息送达、复杂批量数据一致性、导出文件内容正确性、低风险视觉细节可降级不阻塞;但被降级能力在应用内的触发、状态与错误反馈仍必须纳入对应功能族验收,不得完全消失。
210
+ 5. **初始事实核对**:只对 2.2 建模的业务事实表做 COUNT 与文案抽查,与源稿实体记录对照;条数或文案不符即为未通过。逐个打开源稿画了实体数据的列表与区块,看应用里是否真的渲染出行:**库里有行而页面为空即未通过**。KPI、图表、排行、趋势等派生值不与源稿数字做入库对账。
211
+ 6. **动态联动核验**:按 2.3 中不同的「事实来源 + 计算口径 + 变化触发」组合各选一个代表,不按页面或组件重复测试。先记录动态输出,通过应用内真实功能写入或变更一条可唯一识别的事实,刷新并重新查询,确认相关输出按口径变化、跨页面结果一致,且无关输出不被错误改动;再核对数据库只新增或修改事实记录,没有人工同步的统计/快照记录。没有任何可执行写入口能触发变化,说明功能或数据模型未闭环,按未通过处理。
212
+ 7. **假实现与派生快照 grep**:命中即未通过——simulate、写死结果的 setTimeout、picsum、假 toast、Math.random 业务值。再 grep 成组出现的业务数值字面量和疑似派生/统计持久化字段或表;不能证明其具有独立业务身份及真实生成更新链路的,改为基于事实的实时计算。
213
+ 8. **跨应用素材引用 grep**:在工程代码与初始数据里搜 `/spark/app/`,出现的 appid 不是本应用的即未通过——换成本应用内的地址后重跑。再逐页确认图片真的加载出来(`naturalWidth > 0`),加载失败的按未通过处理。
214
+ 9. **公共组件边界与唯一性**:grep 组件定义(`function X(`、`const X = (`、`const X: React.FC`),同名组件在两处及以上定义即未通过——合并到公共组件目录、页面改为 import 后重跑。再检查公共组件不得包含业务数据常量、业务 API 或插件调用、领域状态;命中时把业务逻辑移回所属域,公共组件只保留 props 与事件回调。
215
+ 10. **假可点对账(门禁,grep 判不了)**:逐页在浏览器里枚举「有可点外观(`button`、`a`、`role=button`、`role=tab`、`cursor:pointer`)但取不到事件绑定或 `href`」的元素,并反查 2.3 功能族与各域 `docs/design-gaps/*.md`。**存在未归属或未接通的元素即未通过**:先补业务设计,再补接口、页面、插件或行为并重跑;禁止仅为通过验收而撤掉源稿已有的交互外观。功能族数量、浏览器发现的交互实例数、未归属数写进对照表,无需输出逐控件矩阵。
216
+ 11. **验收对照表**:列出功能族覆盖、业务主链路、动态推导组合及其通过/失败结果,再列出其余门禁结论。未执行的项写明原因,不得笼统声称“验收通过”;任一必要功能族、主链路或动态推导组合未覆盖,均不得判定完整通过。
217
+ 12. **摘除注入标记**:以上各项全部通过后执行 `rm -f source_package/creative/.upgrade-manifest.json`。该文件是本指引的 SessionStart 注入门控,删除后本指引停止注入,后续迭代不再重复进入升级流程;源稿其余文件保留供以后对照。任一项未通过时不得删除——下轮修复仍需本指引在场。
218
+
219
+ ## 业务模块闭环拆解规则
220
+
221
+ 按业务域(Module)拆分实现任务,每个任务同时覆盖该域的服务端实现(Service + Controller + DTO)与对应前端页面(路由 + 页面 + 组件 + 接口集成),命名为 `[业务模块名]模块开发(含前后端)`。**同一业务域的前后端禁止拆成独立任务**。与通用全栈开发的唯一差异:拆解依据是**创意模式的源稿代码**(页面结构与可见交互组件),而非需求文档。
222
+
223
+ 1. **模块边界判定**:任务拆分优先服从代码所有权边界,而非仅按页面归属或功能语义拆分。若多个页面、功能最终落在同一个 server module 中实现,必须合并为同一个模块任务,不得拆成多个并行任务。
224
+ 2. **server module 判定口径**:同一个 server module 包括但不限于同一业务目录下的 Service、Controller、DTO、Repository、模块注册文件、聚合导出文件,以及需要共同修改的 shared 契约文件。
225
+ 3. **纯展示/即时场景**:若某业务功能已规划在前端使用插件实现,且不需要数据库存储,则该模块任务中无需包含服务端 Service/Controller 子步骤,仅保留前端 + 插件集成。
226
+ 4. **需持久化场景**:若插件调用的结果需要保存到数据库,优先在该模块的 Service 中调用插件并落库;或在已有业务 CRUD 接口中扩展字段接收前端传来的插件结果。禁止为"保存插件结果"单独新建模块。
227
+ 5. **平台内置服务**:模块内需使用的平台内置服务,在该模块的 Service 部分完成配置与调用。
228
+ 6. **入口模块优先**:将承载入口页(列表页/首页)的模块任务置于全部模块任务的第一项。
229
+ 7. **并行安全**:模块任务内**禁止包含运行时验证**(接口冒烟测试、启动前后端服务联调、读取服务端/前端运行时错误日志、E2E 测试),统一推迟到第 5 步验收阶段。允许保留的验证限定为代码级静态自查(类型一致性、契约覆盖、shared 定义对齐)。
230
+ 8. **启动条件**:结构骨架、schema、公共组件、初始数据和所需插件实例全部就绪后才派发模块任务;模块任务之间无数据依赖时全部可并行,禁止链式依赖。
231
+ 9. **公共组件不进域任务**:共享视觉资产清单中的全局 Layout 和跨页面公共组件统一实现,域任务只 import 和传入业务数据、事件,不重写视觉结构;发现清单漏项时先补充清单并完成公共组件实现,不在多个域中各写一份。
232
+ 10. **超大域拆分**:命中业务域划分中拆分条件的业务域不得作为单一任务,按子域分别派发;无数据依赖的子域按规则 8 并发执行。
233
+
234
+ ## 视觉一致性原则
235
+
236
+ - 布局用 flex/grid 加 gap 直接转写源稿结构,不重新设计。
237
+ - **数据模型与视觉承载分开处理**:不得为了复刻页面而反向增删业务实体和字段。固定文案、导航、区块标题、装饰、图标和样式直接按源稿实现;业务实体字段、状态和动态值经真实接口呈现。
238
+ - 页面固定内容、初始业务事实的呈现、条目结构与顺序、色值、字符图标和选中状态与源稿逐项一致;动态值只对齐单位、格式和排布。
239
+ - 动态获取的内容只对齐源稿的呈现形式(单位、格式、排布),值由真实数据决定。
240
+ - 字符图标保持原字符;源稿已有的 SVG、CSS 渐变复用或等价转写。
241
+ - 源稿素材在本应用内取不到时(如图片指向源应用的运行时存储),不照抄原引用——自行生成替代图并使用,同一位置的图只生成一次;生成不了的报回主 Agent,不留坏链。
242
+ - **公共组件只有一份**:共享视觉资产清单中的全局 Layout 和跨页面公共组件只实现一份;域页面直接 import 并传入业务数据和事件,不在页面内复制视觉结构。只属于单个业务域的页面专属组件才就地实现。
243
+ - 写任何产生页面可见内容的代码之前,重新打开源稿对应位置读取。
244
+ - 确有必要的转换(如固定画布改响应式)需说明转换前后形态,且不改变源稿参考尺寸下的构图。
245
+
246
+ ## 功能真实性原则
247
+
248
+ - 写操作必须走完「前端事件 → 接口 → 数据库/插件 → 界面反馈」全链路,写入结果刷新后仍能读到。
249
+ - 搜索、筛选、排序、分页的参数必须传入真实查询;跳转、Tab、弹窗到达正确的路由或状态。
250
+ - **链接目标必须存在**:写任何跳转前先读既定路由文件,目标只能是已注册路由;源稿有可见入口但没有承载页面时,必须先按功能设计补齐新增页面与路由,禁止以缺少目标页为由取消功能或指向未注册路由。
251
+ - 持久化业务结果由服务端校验前提并写入,前端只展示重新读取的事实。
252
+ - 有数据库时禁止用 mock 数据代替真实查询;插件返回值严禁 mock,前端用 capabilityClient 真实调用,或调用集成了插件的真实服务端接口。
253
+ - 自建 HTTP API 不实现 SSE/WebSocket;插件链路的流式输出(outputMode=stream)不受此限。
254
+ - **有可点外观就必须有行为**:行为的目标照 2.3 的功能清单与既定路由文件接;只有源稿明确为纯装饰且不存在交互语义的元素才去掉手型与悬停态,禁止因为实现成本或缺少目标页撤掉源稿已有功能。
255
+ - **随业务数据而变的值一律算出**:在 service 内从业务事实聚合,不落成前端常量、`return` 的字面量、冗余派生字段或独立统计快照;事实变化后相关页面重新查询使用同一口径。算出的值与源稿数字不一致是预期结果,源稿事实不足时不得编造明细凑数。
256
+ - **媒体控件绑真实媒体**:播放、进度、倍速挂在真实媒体元素上,时间由它驱动;无媒体资源时整组去掉可点外观。
257
+ - 禁止:空链接、只切换图标不产生数据变化、写死的"成功"提示。
@@ -1,12 +1,13 @@
1
1
  # 创意产物类型信号表与分类型拆分细则
2
2
 
3
- 创意模式产物是 design-html 技术栈的静态工程:`index.html` 为入口,可能带 `components/` 或 `screens/` 目录(`.jsx` 经 `<script type="text/babel">` 在浏览器内编译)。先读 `index.html` 全文 + 目录清单,再按下表判类型。**支持生成的只有前三行**(产品设计=多屏设计稿/移动端 mockup、可交互原型);报表/deck/动画为产品范围外,判中即停止并告知用户(入口层正常会拦截,此为防御兜底)。若会话上下文提供了「当前选中的设计稿文件」路径,判型与拆分优先以该文件为主入口。
3
+ 创意模式产物是 design-html 技术栈的静态工程:`index.html` 为入口,可能带 `components/` 或 `screens/` 目录(`.jsx` 经 `<script type="text/babel">` 在浏览器内编译)。先读 `index.html` 全文 + 目录清单,再按下表判类型。**支持生成的只有三类**:多屏设计稿(artboard)、移动端 mockup、可交互原型;报表 / deck / 图文卡片 / 动画为产品范围外,判中即停止并告知用户(入口层正常会拦截,此为防御兜底)。若会话上下文提供了「当前选中的设计稿文件」路径,判型与拆分优先以该文件为主入口。
4
4
 
5
5
  ## 类型判定信号表
6
6
 
7
7
  | 类型 | 判定信号(任一命中) | 实现形态 |
8
8
  |------|---------------------|----------|
9
9
  | 演示稿(deck) | `<deck-stage>` / 翻页控件 / 每屏是「第 N 页」式幻灯结构 | **范围外,停止并告知** |
10
+ | 图文卡片(social card) | `<card-stage>` / 一组固定竖版 `<section>` 卡片(1080×1440 这类上传规格)+ 每卡独立成图 | **范围外,停止并告知** |
10
11
  | 多屏设计稿(artboard) | `<DCArtboard>` / `design-canvas` 缩放壳 / 多画板平铺 + 画板 label | 每画板 → 路由页 |
11
12
  | 移动端 mockup | 设备框组件(iOS/Android 壳:`width:390` + 圆角 + 状态栏/灵动岛) + `screens/` 或 `screen-*.jsx` 多屏 | 每屏 → 路由页;框内 tab → 应用导航 |
12
13
  | 交互原型 | `useState` / 事件处理驱动页面切换,无画布壳,本身像单页应用 | 按其内部「视图状态」拆路由页 |