@lark-apaas/coding-miaoda-sandbox-skills 0.1.0-dev.4e64c13 → 0.1.0-dev.5abff3b
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/miaoda/creative-to-fullstack/SKILL.md +239 -144
- package/miaoda/lark-apps-db/SKILL.md +20 -27
- package/miaoda/lark-apps-db/references/full-reference.md +113 -2
- package/miaoda/lark-apps-ops/SKILL.md +5 -4
- package/miaoda/lark-apps-ops/references/lark-apps-access-scope-get.md +1 -1
- package/miaoda/lark-apps-ops/references/lark-apps-local-dev.md +3 -2
- package/miaoda/lark-apps-ops/references/lark-apps-release-create.md +1 -1
- package/miaoda/lark-apps-ops/references/lark-apps-user-id-convert.md +63 -0
- package/miaoda/miaoda-sql/SKILL.md +9 -0
- package/miaoda/semantic-search/SKILL.md +0 -1
- package/miaoda/table-skill/SKILL.md +2 -0
- package/miaoda/testing-guide/SKILL.md +3 -1
- package/miaoda-design/lark-apps-comment/SKILL.md +44 -35
- package/miaoda-modern/lark-apps-ops/SKILL.md +5 -4
- package/miaoda-modern/lark-apps-ops/references/lark-apps-access-scope-get.md +1 -1
- package/miaoda-modern/lark-apps-ops/references/lark-apps-local-dev.md +3 -2
- package/miaoda-modern/lark-apps-ops/references/lark-apps-release-create.md +1 -1
- package/miaoda-modern/lark-apps-ops/references/lark-apps-user-id-convert.md +63 -0
- package/package.json +1 -1
- package/shared/lark-cli/SKILL.md +4 -4
- package/shared/lark-cli/lark-doc/references/lark-doc-fetch.md +3 -3
- package/shared/lark-cli/lark-drive/README.md +36 -7
- package/shared/lark-cli/lark-drive/references/lark-drive-batch-query-comments.md +44 -0
- package/shared/lark-cli/lark-drive/references/lark-drive-list-replies.md +49 -0
- package/shared/lark-cli/lark-im/README.md +0 -14
- package/shared/lark-cli/lark-sheets/README.md +5 -4
- package/shared/lark-cli/lark-sheets/references/lark-sheets-read-data.md +73 -3
- package/shared/lark-cli/lark-sheets/scripts/lark_detect_subtables.py +593 -0
- package/shared/lark-cli/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
- package/shared/lark-cli/lark-sheets/scripts/lark_profile_table.py +614 -0
- package/shared/lark-cli/lark-sheets/scripts/lark_sheet_range.py +176 -0
- package/shared/lark-cli/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
- package/shared/lark-cli/lark-sheets/scripts/sheets_df.py +21 -3
- package/shared/lark-cli/lark-slides/README.md +16 -15
- package/shared/lark-cli/lark-slides/references/lark-slides-history.md +32 -20
- package/shared/lark-cli/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
- package/shared/lark-cli/lark-whiteboard/README.md +1 -2
- package/shared/lark-cli/lark-wiki/references/lark-wiki-node-get.md +11 -0
- package/shared/lark-cli/lark-wiki/references/lark-wiki-node-list.md +1 -1
- package/shared/dev-channel-probe/SKILL.md +0 -40
|
@@ -6,152 +6,247 @@ workspace-contains:
|
|
|
6
6
|
- source_package/creative/.upgrade-manifest.json
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# 把创意设计稿实现为全栈应用
|
|
10
10
|
|
|
11
|
-
`source_package/creative/`
|
|
11
|
+
`source_package/creative/` 是创意模式设计稿,是本次开发的唯一视觉规格。交付标准:
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
1. **视觉与源稿一致**:每个页面的文案、数值、色值、条目与顺序与设计稿逐字段一致。
|
|
14
|
+
2. **可见功能真实可用**:设计稿上每个可交互组件(可点、可输入、可筛选)都产生真实、闭环的结果。
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
两条核心规则:**一切视觉内容直接从源稿代码照抄,不经过任何文字转述**;**动手实现前先完成业务设计并写入 `docs/business-design.md`,后续每个阶段以该文件为执行依据**。
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
## 流程
|
|
19
|
+
|
|
20
|
+
| 步骤 | 做什么 | 谁做 |
|
|
18
21
|
|------|--------|------|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
- 2.
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- 2.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
22
|
+
| 1 | 通读源稿 | 主 Agent |
|
|
23
|
+
| 2 | 业务设计(写入 docs/business-design.md) | 主 Agent |
|
|
24
|
+
| 3 | 基建:结构骨架、建表、初始数据、共享视觉文件、插件实例 | 主 Agent + Worker |
|
|
25
|
+
| 4 | 按业务域派发前后端完整实现 | Worker |
|
|
26
|
+
| 5 | 验收 | 主 Agent + E2E |
|
|
27
|
+
|
|
28
|
+
### 第 1 步:通读源稿
|
|
29
|
+
|
|
30
|
+
读取 `source_package/creative/` 下全部页面源文件(index.html、pages/、components/ 等)。该目录只读,是实现期间反复对照的唯一视觉权威;工程代码不得引用它,也不要修改它。稿内 `data-miaoda-*` 属性与 `<script type="text/babel">` 是创意平台预览机制,本工程不使用。
|
|
31
|
+
|
|
32
|
+
### 第 2 步:业务设计(主 Agent 的核心职责)
|
|
33
|
+
|
|
34
|
+
从源稿可见信息推断应用的业务模型。完成以下四项分析,**写入工程文件 `docs/business-design.md`**,作为第 3/4/5 步的执行依据:
|
|
35
|
+
|
|
36
|
+
**2.1 业务域划分**。按「业务模块闭环拆解规则」(见下方规则章节)从源稿划分业务域,产出各域的名称、覆盖的源稿页面与功能、服务端模块归属。
|
|
37
|
+
|
|
38
|
+
**2.2 数据模型**。以 2.1 划定的业务域为单位设计数据库。源稿页面上的展示数据分两类去向:与服务端逻辑相关的写入数据库、经服务端接口回到页面;不相关的以前端代码的形式展示。按以下顺序执行:
|
|
39
|
+
|
|
40
|
+
1. **设计表结构**:为每个业务域设计该域的业务实体表,产出表名、字段(含类型)、表间关联。字段以支撑 2.3 的功能为准:筛选器的每个筛选维度要有对应字段,状态流转的状态字段枚举值从源稿可见的状态文案提取,插件结果需落库的(见拆解规则第 4 条)预留对应字段。建模范围按以下两条判据裁剪,**命中任一即入库**:
|
|
41
|
+
|
|
42
|
+
- 参与服务端逻辑:查询、筛选、排序、聚合、写入、状态变化;
|
|
43
|
+
- 属于开放集合实体的页面可见内容:实体会随业务增长(人、内容条目、业务记录等)时,该实体在页面上呈现的一切内容都入库,包含纯展示的长文本与列表——页面按实体标识渲染,写死会让所有实体呈现同一份内容。
|
|
44
|
+
|
|
45
|
+
两条都不命中的留在前端代码中:
|
|
46
|
+
|
|
47
|
+
- 与页面结构绑定的固定文案:区块标题、页脚文案、静态导航项;
|
|
48
|
+
- 封闭枚举实体的装饰字段:实体是页面上固定的少数几项且不随业务增长时,其图标、配色不入库;该实体因参与筛选等逻辑而入库时也不带这些字段,由前端按实体标识映射;
|
|
49
|
+
- 平台内置服务已覆盖的数据(如用户信息、文件存储)不建表,使用内置服务。
|
|
50
|
+
|
|
51
|
+
2. **确定建表顺序**:存在引用关系的表,被引用的表先建;该顺序供 3.2 建表与 3.3 数据写入按序执行。
|
|
52
|
+
|
|
53
|
+
3. **标注数据来源**:为第 1 步建模的每张表标注初始数据取自哪个源稿文件、哪个区块;同一张表的数据散落在多个页面时逐条列全。只写位置指针,**设计文档中禁止出现任何初始数据内容**——不写字段值、不写示例记录、不做数据摘要;数据内容只在 3.3 执行时由 Worker 从源稿誊写,设计文档中出现的数据值一律不作为写入依据。
|
|
54
|
+
|
|
55
|
+
**2.3 可见功能业务模型与 API 设计**。按 2.1 的业务域逐域进行,为每个域产出核心功能清单与接口设计。范围界定:仅涉及页面内交互、不读写业务数据的行为(Tab 切换、折叠展开、弹窗开关、表单字段校验)随页面视觉还原自然实现,不进入本节设计。
|
|
56
|
+
|
|
57
|
+
对每个业务域依次完成:
|
|
58
|
+
|
|
59
|
+
1. **识别核心功能**。从该域覆盖的源稿页面中,按以下类型识别核心功能(组件类型与功能信号的对照见 [references/ui-to-function.md](references/ui-to-function.md)):
|
|
60
|
+
- 业务数据的写操作:新建、编辑、删除、提交、状态变更;
|
|
61
|
+
- 影响数据展示范围与形态的读操作:搜索、筛选、排序、分页;
|
|
62
|
+
- 页面间的业务流转:列表项进详情、详情进编辑等携带真实数据的跳转;
|
|
63
|
+
- 涉及外部能力的操作:上传、AI 处理、消息通知、定时任务。
|
|
64
|
+
|
|
65
|
+
每条功能记录为:「功能名称 + 所在页面 + 用户操作与预期结果」;操作结果需要跳转到另一个页面时一并写明目标页面,目标页面不在源稿里时标注为新增页面,由 3.1 规划路由与占位。
|
|
66
|
+
|
|
67
|
+
2. **能力选型**。对每条核心功能按以下顺序判定实现方式:
|
|
68
|
+
- 平台内置服务(用户、文件、权限、消息、自动化/定时)可满足 → 直接使用,标注「使用平台内置服务:[服务名]」,禁止自建同等能力;
|
|
69
|
+
- 功能涉及 AI、智能、自动生成、大模型、文本生成、图片生成、飞书、消息通知、群组、机器人等能力 → 判定为插件能力,登记进 2.4 做插件设计;普通前后端能可靠实现的不硬凑插件;
|
|
70
|
+
- 两者都不满足 → 自建服务端 API,进入第 3 条。
|
|
71
|
+
|
|
72
|
+
判定插件能力时同时对照源稿代码补漏:用假逻辑模拟、但未以可交互组件呈现的此类能力(如定时提醒、自动通知),一并登记进 2.4。
|
|
73
|
+
|
|
74
|
+
3. **API 设计**。为自建 API 的功能设计接口:
|
|
75
|
+
- 同一数据实体的操作合并设计:列表查询一个接口,入参覆盖该页全部筛选维度、搜索关键词与分页参数;新建、更新、删除、详情各一个接口;
|
|
76
|
+
- 每个接口写明:方法与路径、入参与出参、读写的表、支撑的功能。
|
|
77
|
+
|
|
78
|
+
本节产出是第 4 步各域任务服务端子步骤的实现范围(域任务的 Service/Controller 按 API 清单逐接口实现),也是第 5 步核心验收目标的选取来源。
|
|
79
|
+
|
|
80
|
+
**2.4 插件设计(条件步骤,仅当 2.3 判定出插件能力时执行)**。先读取 `plugin-guide` skill 了解插件目录与调用规范,然后对 2.3 登记的插件需求逐项设计。
|
|
81
|
+
|
|
82
|
+
设计原则:
|
|
83
|
+
|
|
84
|
+
- **原子化拆分**:一个插件实例只做一件事——不同输出类型(文本/图片/消息)建独立实例,不同业务语义(如标题与正文)建独立实例;
|
|
85
|
+
- **链路完整性**:从用户输入到展示/落库,每一步都有对应插件——链式场景如文档解析→结构化提取需要两个插件;
|
|
86
|
+
- **调用方式选择**:默认前端 capabilityClient 直接调用;以下情形改为服务端调用并说明原因:调用前需验证权限、需记录调用日志、结果需先落库、定时任务或 Webhook 无前端上下文、需聚合多个插件结果。
|
|
87
|
+
|
|
88
|
+
输出格式,每个插件一行:
|
|
89
|
+
|
|
90
|
+
| 插件名称 | 基础插件 | 用途 | 调用方式 | 关联页面/接口 | 输入参数 | 输出类型 |
|
|
91
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
92
|
+
|
|
93
|
+
`docs/business-design.md` 写完后,用 TodoWrite 建执行清单,条目至少覆盖:每个基建项、每个业务域实现任务、**验收任务**(此刻即加入清单)。
|
|
94
|
+
|
|
95
|
+
### 第 3 步:基建
|
|
96
|
+
|
|
97
|
+
**执行者划分(不可调整)**:凡产出承载源稿可见内容(文案、色值、条目、数值、素材)的,一律派 Worker 实现——Worker 的任务范围窄、开工即按标注读取源稿,写前必然读到原文;主 Agent 亲写的范围只有纯结构骨架与数据库 DDL,这两类没有任何内容取自源稿。初始数据既承载源稿内容、又需要执行 SQL,派 `CodeAct`——它兼具读文件与执行能力,读源与写库在同一上下文内完成。主 Agent 不得亲自编写页面、组件、导航、页脚、主题色板、Service、Controller,也不得凭通读记忆写入任何源稿可见内容。
|
|
98
|
+
|
|
99
|
+
**派发指令的内容边界(所有派发通用)**:派发指令只写任务目标、源稿位置、验收标准。**禁止在指令里复述源稿的任何具体内容**——色值、文案、条目、名称、数值一律不写,主 Agent 通读源稿形成的记忆不得以任何形式进入指令;Worker 需要的源稿内容由它自己按位置读取。每个派发任务都要带**双权威声明**:视觉、文案、色值、数据以源稿源码为唯一权威,工程契约(路由、表结构、接口、插件实例)以落盘文件为准,指令中的文字描述仅作辅助,与两者冲突时以文件为准——**指令里出现的源稿内容不作为实现依据**。
|
|
100
|
+
|
|
101
|
+
**3.1 代码架构设计与结构骨架(主 Agent)**。先读取 coding-guide skill 了解项目编码规范与目录结构。本步分先后两段:先完成全部规划,再一次性落盘所有会被多个后续任务共同引用或修改的结构文件;禁止边实现边定结构。
|
|
102
|
+
|
|
103
|
+
第一段,规划内容:
|
|
104
|
+
|
|
105
|
+
- 前端目录结构:pages、页面内组件、跨页面公共组件、hooks/api/types/utils 的文件归属,明确入口页文件位置;
|
|
106
|
+
- 路由与导航结构:源稿每个页面一条路由,加上 2.3 记录的新增页面(路径语义化,不用查询参数冒充路由)、默认页、Layout 承载方式与菜单入口;
|
|
107
|
+
- 服务端模块边界:按 2.1 的业务域确定各模块的目录与内部文件结构;
|
|
108
|
+
|
|
109
|
+
第二段,落盘结构文件——**只落结构,不写任何源稿可见内容**:
|
|
110
|
+
|
|
111
|
+
- 全局路由配置与默认页;
|
|
112
|
+
- Layout 容器:只搭出页面容器与内容插槽,**不写导航项、logo、搜索框、按钮文案与色值**(这些属于 3.4);
|
|
113
|
+
- 占位页面:为源稿每个页面与 2.3 记录的新增页面创建最小可渲染的占位页并接入路由,路由挂载不得引用不存在的页面;页面真实内容由第 4 步实现;
|
|
114
|
+
- shared 契约类型:按 2.2 表结构与 2.3 接口设计,定义实体类型和各接口的请求/响应类型;
|
|
115
|
+
- 服务端模块注册骨架:每个业务域一个空 Module + 空 Service/Controller 类,**类体保持为空**——不写任何方法、查询或业务逻辑,这些属于第 4 步域任务。
|
|
116
|
+
|
|
117
|
+
规则:
|
|
118
|
+
|
|
119
|
+
- 提交时工程可编译运行,禁止引用后续任务才会创建的页面或模块;
|
|
120
|
+
- 完成后对照源稿检查:每个页面都有路由与目录归属、每个业务域都有模块边界与契约类型,发现缺失在本步补齐;
|
|
121
|
+
|
|
122
|
+
**3.2 建表(主 Agent)**。按 `docs/business-design.md` 2.2 确定的建表顺序逐张建表,被引用的表先建。表结构取自 2.2 设计,不涉及源稿内容誊写。只建 2.2 建模的表——不参与服务端逻辑的展示数据没有对应表,保留在前端代码中。建完后跑数据库 schema 代码生成刷新 `server/database/schema.ts`:它是真实列名与类型的唯一来源,3.3 的 Worker 无法查库,只能靠这个文件。
|
|
123
|
+
|
|
124
|
+
**3.3 初始数据插入(派 CodeAct)**。数据内容必须由读到源稿原文的执行者当场写入,读源与写库之间不经过任何交接。
|
|
125
|
+
|
|
126
|
+
派发对象:`CodeAct`——它同时具备读文件与执行 SQL 的能力,读完源稿即可落库,报错时源稿仍在上下文中可直接改正。
|
|
127
|
+
|
|
128
|
+
**派发内容**:本次负责的表清单、每张表在 2.2 的源稿位置标注、建表顺序、`server/database/schema.ts` 的路径。
|
|
129
|
+
|
|
130
|
+
**任务要求**:
|
|
131
|
+
|
|
132
|
+
- 按标注打开源稿文件、定位到该区块后再写;区块落在文件后段时读到该区块为止,禁止只凭文件开头写数据;
|
|
133
|
+
- 列名与类型照 `server/database/schema.ts`;`_` 前缀的系统字段与主键不写,由数据库默认值生成;
|
|
134
|
+
- 字段值逐字原样来自读到的源稿原文,**这是誊写不是创作**:不改写措辞、不缩写字段值、不换算数值、不增删记录、不补充源稿没有的条目;
|
|
135
|
+
- 源稿里属于该表的可见记录全部写入,一条不漏;同一实体在多个页面出现时按标识字段去重、合并各页可见字段,不重复插入;
|
|
136
|
+
- 子表外键用 `SELECT` 子查询按业务键(标题、名称等)关联父行,禁止硬编码 UUID。
|
|
137
|
+
|
|
138
|
+
**权限边界**:只允许对 2.2 建模的表执行 `INSERT` 与必要的 `SELECT`。出现 `DDL` / `UPDATE` / `DELETE`、或写入 2.2 未建模的表,均为越界。
|
|
139
|
+
|
|
140
|
+
达标标准:每张表在源稿页面上可见的记录,首次查询即可返回且内容与源稿一致。禁止把初始数据做成运行时 mock 接口或前端写死。
|
|
141
|
+
|
|
142
|
+
**3.4 共享视觉文件(派发 Worker,域任务之前串行完成)**。导航、页脚、主题色板承载源稿可见内容,且被所有页面引用,必须由单一 Worker 一次写完,禁止主 Agent 代写、禁止拆给多个域任务并行写。
|
|
143
|
+
|
|
144
|
+
派发时给出源稿共享组件文件与设计 token 文件的位置,由 Worker 自行读取。任务范围:
|
|
145
|
+
|
|
146
|
+
- 导航:项数、文案、顺序、logo 形态、搜索框、操作区按钮全部照源稿组件转写;链接先读既定路由文件,只指向已注册路由,无承载页面的项保持不可跳转;
|
|
147
|
+
- 页脚:源稿有页脚的页面共用同一个页脚组件,分栏、项数、文案照抄;
|
|
148
|
+
- 主题文件:源稿设计 token 的色值、字体逐条写入,色值原样,不做近似换算或色彩空间转换。
|
|
149
|
+
|
|
150
|
+
回传后主 Agent 打开源稿对应位置核对导航项数、文案、顺序与主题色值,不一致立刻退回重做;核对通过后,第 4 步各域页面直接复用这些组件与主题变量,不再逐页另行实现。
|
|
151
|
+
|
|
152
|
+
**3.5 插件实例(条件步骤,2.4 有产出时执行;主 Agent)**。按 2.4 清单逐个建实例并确认契约,调用代码由第 4 步域任务实现:
|
|
153
|
+
|
|
154
|
+
1. 调用 `plugin_instance` 工具创建插件实例;禁止手工修改 `server/capabilities/` 目录;
|
|
155
|
+
2. 获取运行时 schema,逐字段确认 inputSchema 与 outputSchema 的字段名、类型、是否必填;
|
|
156
|
+
3. 把实例名与 schema 摘要(字段名、类型、必填)写进该插件所属域的派发指令,供域任务按 schema 编写调用代码。
|
|
157
|
+
|
|
158
|
+
规则:
|
|
159
|
+
|
|
160
|
+
- 禁止只创建实例而不在域任务中安排调用代码——未生成调用代码的插件实例是无效的;
|
|
161
|
+
- 域任务编写调用代码时,入参出参的字段名与类型以运行时 schema 为准,禁止从设计文档推测(设计可能与插件实际 schema 不一致);入参中的动态配置值(接收人、通知模板、阈值等)禁止硬编码,从配置表或平台 API 获取;
|
|
162
|
+
- 插件结果需要持久化时,优先在该域 Service 内调用插件并在同一方法内落库;保持前端调用的,成功后通过已有业务 CRUD 接口保存结果,不为此单独新建 API;
|
|
163
|
+
- 后续任一阶段发现缺插件实例,主 Agent 立即用 `plugin_instance` 工具补建,禁止用 pluginKey 冒充 instanceId 调用或跳过该功能。
|
|
164
|
+
|
|
165
|
+
### 第 4 步:按业务域派发实现(Worker)
|
|
166
|
+
|
|
167
|
+
按「业务模块闭环拆解规则」把每个业务域派发为一个 Worker 任务。派发前重读 `docs/business-design.md`,按其中的业务域划分逐域生成任务。
|
|
168
|
+
|
|
169
|
+
**核心原则**
|
|
170
|
+
|
|
171
|
+
- 任务范围是该域的前后端完整实现:Service、Controller、页面、组件、接口集成都在同一个任务内;
|
|
172
|
+
- 服务端代码不得摘出来由主 Agent 代写——Worker 跑不了接口测试与运行时日志是预期的,运行时验证统一在第 5 步做;
|
|
173
|
+
- **派发指令不写源稿的具体内容**: 避免实现时没有按照原稿而是按照指令开发。
|
|
174
|
+
|
|
175
|
+
**每个任务必须携带**:
|
|
176
|
+
|
|
177
|
+
- 权威文件位置:该域相关的源稿文件、`docs/business-design.md`、该域的 shared 契约文件与既定路由文件——只给路径,禁止用文字概述替代源文件,由 Worker 自行读取;
|
|
178
|
+
- 双权威声明:视觉、文案、布局、数据以源稿源码为唯一权威;表结构、API、插件调用以 `docs/business-design.md` 该域章节为准;
|
|
179
|
+
- 一句话验收标准(acceptance),落在真实能力层(如「提交后经真实接口落库且刷新后可回查」),达标即完成,禁止超出标准的冗余自查。
|
|
180
|
+
|
|
181
|
+
**任务内执行顺序**
|
|
182
|
+
|
|
183
|
+
1. 读取 coding-guide 及与本域相关的 skill;
|
|
184
|
+
2. 读源稿该域文件,读 `docs/business-design.md` 该域章节(功能清单、表结构、API 清单);
|
|
185
|
+
3. 检查 shared 契约与该域表结构、接口设计一致;按 3.1 既定的目录结构落文件,不另建与之平行的目录;
|
|
186
|
+
4. Service 层:业务编排、落库、插件调用聚合、内置服务调用;服务端调用的插件逐条写明「调用 [实例名],触发条件为 [条件]」;
|
|
187
|
+
5. Controller 层:REST API,按该域 API 清单逐接口实现,避免纯透传接口;
|
|
188
|
+
6. 页面接入既定路由,不改全局结构;
|
|
189
|
+
7. 页面与组件实现:打开源稿对应区段对照实现,文案、色值、条目数量与顺序、示例值照源码转写;页面数据一律来自本域真实接口,禁止 mock 业务数据;组件不拆出独立任务;
|
|
190
|
+
8. 前端插件集成(2.4 设计为前端调用的插件):获取插件运行时 schema,按 schema 调用 [实例名];结果需持久化的,调用成功后通过已有业务接口保存;
|
|
191
|
+
9. 代码级自查:类型一致性、契约覆盖、shared 定义对齐;禁止运行时验证(见拆解规则第 7 条)。
|
|
192
|
+
|
|
193
|
+
指令里给出的文件路径是**必读下限,不是可读上限**:实现中需要的其他工程文件(既有组件、工具函数、全局配置、路由表)一律按需自行读取。禁止的是重新推导架构:不重新规划目录与路由结构、不反复 glob 全工程、不修改允许范围外的文件。
|
|
194
|
+
|
|
195
|
+
Worker 回传后,主 Agent 至少读一个关键产物文件抽查(页面是否调真实 API、功能链路是否接通);回传中的「已完成、已验证」不作为核验依据。
|
|
196
|
+
|
|
197
|
+
**自动化任务**:2.3 中选型为平台自动化内置服务的功能(定时触发、数据变更触发),作为独立任务实现,依赖其用到的表与插件:
|
|
198
|
+
|
|
199
|
+
1. 读取 trigger-guide skill 了解触发器配置与代码开发规范;
|
|
200
|
+
2. 创建触发器,实现任务逻辑:触发条件判断、去重、插件调用、状态更新;
|
|
201
|
+
3. 完成后验证代码可编译。
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
### 第 5 步:验收(清单里的任务,不是可选动作)
|
|
205
|
+
|
|
206
|
+
commit 的静态检查只覆盖编译与 lint,证明不了功能可用与视觉一致。验收开始前先读取 testing-guide skill 了解 E2E 验收流程,并重读 `docs/business-design.md`,以其中的 2.3 功能与 API 清单为验收目标来源。按以下结构执行,完成前不得提交收尾:
|
|
207
|
+
|
|
208
|
+
1. **架构与入口检查**:先对照 3.1 检查路由、shared 契约、模块边界是否被遵守,对照 3.4 检查导航、页脚、主题色值是否与源稿一致,发现偏离先修结构再继续。再做三项核对:
|
|
209
|
+
- **链接目标可达**:枚举代码中全部跳转目标(导航项、按钮、卡片、搜索、面包屑)与路由表比对,任一指向未注册路由即未通过;
|
|
210
|
+
- **页面均有入口**:每个已注册页面至少有一个应用内可达入口,只能手输 URL 到达的页面即未通过;
|
|
211
|
+
- 应用入口页面可正常打开,打不开(白屏 / Page not found)则停止验收,只记录阻塞问题。
|
|
212
|
+
2. **核心验收目标 1~3 个**(超过 3 个属于错误输出):从 2.3 的功能映射中选取最核心的业务链路,每个目标写成「验收对象 —— 可判定的通过标准」。通过标准必须是应用内可判定的结果:状态更新、提交后列表刷新、成功/失败提示、结果区出现内容或错误态、确认弹窗、详情数据变化;「页面渲染正常」「控件可见」「按钮可点击」不构成通过标准。派发 E2E agent 实际执行这些目标。
|
|
213
|
+
3. **非核心降级范围**:AI 内容质量、真实消息送达、复杂批量数据一致性、导出文件内容正确性、低风险视觉细节可降级不阻塞;但被降级能力在应用内的触发、状态与错误反馈仍必须保留在核心验收目标中,不得完全消失。
|
|
214
|
+
4. **数据核对**:对每张初始数据表做 COUNT 与文案抽查,与源稿对照;条数或文案不符即为未通过。
|
|
215
|
+
5. **静态残留检查**:grep 两类问题,任一命中即未通过——
|
|
216
|
+
- 假实现:simulate、写死结果的 setTimeout、picsum、假 toast、Math.random 业务值;
|
|
217
|
+
- 无行为的可点击元素:按钮与带可点击外观的元素是否都有事件处理或路由跳转。
|
|
218
|
+
6. **验收对照表**:把以上结果逐项列出后再提交。未执行的项写明原因,不得笼统声称"验收通过"。
|
|
219
|
+
7. **摘除注入标记**:以上各项全部通过后执行 `rm -f source_package/creative/.upgrade-manifest.json`。该文件是本指引的 SessionStart 注入门控,删除后本指引停止注入,后续迭代不再重复进入升级流程;源稿其余文件保留供以后对照。任一项未通过时不得删除——下轮修复仍需本指引在场。
|
|
220
|
+
|
|
221
|
+
## 业务模块闭环拆解规则
|
|
222
|
+
|
|
223
|
+
按业务域(Module)拆分实现任务,每个任务同时覆盖该域的服务端实现(Service + Controller + DTO)与对应前端页面(路由 + 页面 + 组件 + 接口集成),命名为 `[业务模块名]模块开发(含前后端)`。**同一业务域的前后端禁止拆成独立任务**。与通用全栈开发的唯一差异:拆解依据是**创意模式的源稿代码**(页面结构与可见交互组件),而非需求文档。
|
|
224
|
+
|
|
225
|
+
1. **模块边界判定**:任务拆分优先服从代码所有权边界,而非仅按页面归属或功能语义拆分。若多个页面、功能最终落在同一个 server module 中实现,必须合并为同一个模块任务,不得拆成多个并行任务。
|
|
226
|
+
2. **server module 判定口径**:同一个 server module 包括但不限于同一业务目录下的 Service、Controller、DTO、Repository、模块注册文件、聚合导出文件,以及需要共同修改的 shared 契约文件。
|
|
227
|
+
3. **纯展示/即时场景**:若某业务功能已规划在前端使用插件实现,且不需要数据库存储,则该模块任务中无需包含服务端 Service/Controller 子步骤,仅保留前端 + 插件集成。
|
|
228
|
+
4. **需持久化场景**:若插件调用的结果需要保存到数据库,优先在该模块的 Service 中调用插件并落库;或在已有业务 CRUD 接口中扩展字段接收前端传来的插件结果。禁止为"保存插件结果"单独新建模块。
|
|
229
|
+
5. **平台内置服务**:模块内需使用的平台内置服务,在该模块的 Service 部分完成配置与调用。
|
|
230
|
+
6. **入口模块优先**:将承载入口页(列表页/首页)的模块任务置于全部模块任务的第一项。
|
|
231
|
+
7. **并行安全**:模块任务内**禁止包含运行时验证**(接口冒烟测试、启动前后端服务联调、读取服务端/前端运行时错误日志、E2E 测试),统一推迟到第 5 步验收阶段。允许保留的验证限定为代码级静态自查(类型一致性、契约覆盖、shared 定义对齐)。
|
|
232
|
+
8. **精确依赖**:每个模块任务只依赖基建(结构骨架 + 共享视觉文件 + 自身所需的表与初始数据 + 插件实例);模块任务之间无数据依赖时全部可并行,禁止链式依赖。
|
|
233
|
+
9. **粒度保底**:单个模块子步骤明显超限时,允许拆为 `[模块名]服务端开发` + `[模块名]前端开发` 两个任务,前端任务依赖同模块服务端任务,仅此一种拆法。
|
|
234
|
+
|
|
235
|
+
## 视觉一致性规则(全程适用)
|
|
236
|
+
|
|
237
|
+
- 布局用 flex/grid 加 gap 直接转写源稿结构,不重新设计。
|
|
238
|
+
- 页面一切可见内容(文案、数值与单位、条目数量与顺序、色值、字符图标、选中状态、素材)与源稿逐字段一致:入库的经初始数据与接口到达页面,前端的直接从源稿代码复制。
|
|
239
|
+
- 字符图标保持原字符;源稿已有的图片、SVG、CSS 渐变复用或等价转写,不得用生成图替换。
|
|
240
|
+
- 写任何产生页面可见内容的代码之前,重新打开源稿对应位置读取。
|
|
241
|
+
- 确有必要的转换(如固定画布改响应式)需说明转换前后形态,且不改变源稿参考尺寸下的构图。
|
|
242
|
+
|
|
243
|
+
## 功能真实性规则(全程适用)
|
|
244
|
+
|
|
245
|
+
- 写操作必须走完「前端事件 → 接口 → 数据库/插件 → 界面反馈」全链路,写入结果刷新后仍能读到。
|
|
246
|
+
- 搜索、筛选、排序、分页的参数必须传入真实查询;跳转、Tab、弹窗到达正确的路由或状态。
|
|
247
|
+
- **链接目标必须存在**:写任何跳转前先读既定路由文件,目标只能是已注册路由。源稿有入口但应用内无承载页面时,只有两条出路——回到 2.3 的功能记录里补上新增页面并在 3.1 注册路由后实现,或让该元素保持不可跳转;禁止指向未注册路由。
|
|
248
|
+
- 持久化业务结果由服务端校验前提并写入,前端只展示重新读取的事实。
|
|
249
|
+
- 有数据库时禁止用 mock 数据代替真实查询;插件返回值严禁 mock,前端用 capabilityClient 真实调用,或调用集成了插件的真实服务端接口。
|
|
250
|
+
- 自建 HTTP API 不实现 SSE/WebSocket;插件链路的流式输出(outputMode=stream)不受此限。
|
|
251
|
+
- **可点击外观与真实行为必须同时存在**:转写源稿的按钮与可点击元素时,能用 2.3 已设计的接口或既定路由接上的直接接上;接不上的改成非交互形态——去掉指针手型与按钮态、或呈现禁用态,并在回传中列出这些元素与接不上的原因,由主 Agent 决定是否回到 2.3 补设计。禁止保留看起来能点、点了没反应的元素。
|
|
252
|
+
- 禁止:空链接、只切换图标不产生数据变化、写死的"成功"提示。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lark-apps-db
|
|
3
|
-
description: "Use when 在妙搭沙箱里用 `lark-cli apps +db-*` 管理【当前这个已存在的】妙搭应用的 PostgreSQL 数据库:建表/改表、写或排查 RLS policy、用 +db-execute 执行 SQL(SELECT/DML/DDL)、灌 mock 数据、数据导入导出、dev/online 多环境初始化与发布、DDL 变更历史(changelog)、行级审计(audit)、PITR 时间点恢复、DB 配额。触发词:应用数据库, SQL, 建表, 改表, mock 数据, 示例数据, 数据审计, 变更历史, 数据恢复, PITR, 时间点恢复, 多环境发布, RLS, policy, pgPolicy, 行级权限, 权限策略, 42501, +db-, db-table-list, db-execute."
|
|
3
|
+
description: "Use when 在妙搭沙箱里用 `lark-cli apps +db-*` 管理【当前这个已存在的】妙搭应用的 PostgreSQL 数据库:建表/改表、写或排查 RLS policy、用 +db-execute 执行 SQL(SELECT/DML/DDL)、灌 mock 数据、数据导入导出、Base(多维表格)→应用数据库同步任务(+db-sync-*)、dev/online 多环境初始化与发布、DDL 变更历史(changelog)、行级审计(audit)、PITR 时间点恢复、DB 配额。触发词:应用数据库, SQL, 建表, 改表, mock 数据, 示例数据, 数据审计, 变更历史, 数据恢复, PITR, 时间点恢复, 多环境发布, RLS, policy, pgPolicy, 行级权限, 权限策略, 42501, Base 同步, +db-, db-table-list, db-execute."
|
|
4
4
|
metadata:
|
|
5
5
|
requires:
|
|
6
6
|
bins: ["lark-cli"]
|
|
@@ -30,12 +30,12 @@ gate-tools:
|
|
|
30
30
|
|
|
31
31
|
### 高风险写操作审批(exit 10)
|
|
32
32
|
|
|
33
|
-
`risk: high-risk-write` 的命令(`+db-env-create` / `+db-data-import` / `+db-env-migrate` / `+db-recovery-apply` / `+db-execute`)不带 `--yes` 会 **exit 10** 并返回 `confirmation_required`。处理:
|
|
33
|
+
`risk: high-risk-write` 的命令(`+db-env-create` / `+db-data-import` / `+db-env-migrate` / `+db-recovery-apply` / `+db-execute` / `+db-sync-create/update/delete`)不带 `--yes` 会 **exit 10** 并返回 `confirmation_required`。处理:
|
|
34
34
|
|
|
35
35
|
1. 识别 exit code=10 且 `error.type=="confirmation_required"`;
|
|
36
36
|
2. 把 `error.risk.action` + 关键参数给用户,明确"高风险/不可逆",等显式同意;
|
|
37
37
|
3. 同意 → 原始 argv 末尾加 `--yes` 重试;拒绝 → 终止;
|
|
38
|
-
4. 想先看请求 → `--dry-run`(不触发门禁、不需 `--yes
|
|
38
|
+
4. 想先看请求 → `--dry-run`(不触发门禁、不需 `--yes`);发布/恢复/Base 同步先跑对应预览(`+db-env-diff` / `+db-recovery-diff` / `+db-sync-create --preview`,均免确认)。
|
|
39
39
|
|
|
40
40
|
**绝不**看到 exit 10 就默认补 `--yes` 静默重试。
|
|
41
41
|
|
|
@@ -44,19 +44,20 @@ gate-tools:
|
|
|
44
44
|
| 场景 | 首选命令 | 关键规则 |
|
|
45
45
|
|---|---|---|
|
|
46
46
|
| 列表 / 查表结构 | `lark-cli apps +db-table-list --app-id "$app_id"` / `+db-table-get --app-id "$app_id" --table <table>` | 禁止用 `information_schema` / `pg_indexes` 模拟常规结构查询 |
|
|
47
|
-
| 执行 DDL / DML / SELECT |
|
|
48
|
-
| 批量导入 CSV / JSON |
|
|
49
|
-
| 批量导出 |
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
| dev
|
|
54
|
-
|
|
|
55
|
-
|
|
|
47
|
+
| 执行 DDL / DML / SELECT | `+db-execute --app-id "$app_id" --sql "<query>" --yes` | 不自动包事务,原子性自己写 `BEGIN…COMMIT` |
|
|
48
|
+
| 批量导入 CSV / JSON | `+db-data-import --app-id "$app_id" --file ./<file> --table <table> --yes` | 目标表已存在;表头 / key 与列名完全一致;≤1 MB / ≤5000 行;无 upsert |
|
|
49
|
+
| 批量导出 | `+db-data-export --app-id "$app_id" --table <table> --output ./<file>` | 格式由 `--output` 扩展名决定(.csv/.json/.sql);5000 行守卫 + 1 MB 上限 |
|
|
50
|
+
| Base(多维表格)→ 应用数据库同步(高危;本地 csv/json 才走 `+db-data-import`) | `+db-sync-create --app-id "$app_id" --config @sync.json --preview` → 确认后去 `--preview` 加 `--yes`;任务管理 `+db-sync-list/get/enable/disable/update/delete` | 一次只同步**一张 Base 表**;`batch_...` 任务一次性、**不能重新 enable**;enable/disable/update/delete 仅 `streaming_...` |
|
|
51
|
+
| 表结构变更历史 | `+db-changelog-list --app-id "$app_id"` | DDL 维度:CREATE / ALTER / DROP / INDEX |
|
|
52
|
+
| 表数据变更历史 | `+db-audit-status --app-id "$app_id"`;enable / disable / list 另需 `--table <table>` | DML 维度:INSERT / UPDATE / DELETE;需按表启用。两者都禁止直查 `pg_audit` 模拟 |
|
|
53
|
+
| 单库拆 dev/online 多环境(高危) | `+db-env-create --app-id "$app_id" [--sync-data] --yes` | 不可逆;新建 full_stack 应用一般已自带多环境;执行后必须回读 `+db-table-list --environment dev` 确认结构已同步 |
|
|
54
|
+
| dev→online 结构发布(高危) | `+db-env-diff --app-id "$app_id"` → `+db-env-migrate --app-id "$app_id" --yes` | 只发布 DDL |
|
|
55
|
+
| PITR 恢复(高危) | `+db-recovery-diff --app-id "$app_id" --target <时间点>` → `+db-recovery-apply --app-id "$app_id" --target <时间点> --yes` | `--target` 必填;覆盖式不可逆;窗口最长 7 天 |
|
|
56
|
+
| DB 用量 | `+db-quota-get --app-id "$app_id"` | 查容量、表数、视图数 |
|
|
56
57
|
|
|
57
|
-
**环境**:`--environment dev|online`
|
|
58
|
+
**环境**:`--environment dev|online` **默认不传**——省略时服务端按应用形态自动选分支(多环境应用走 `dev`,未开多环境走 `online`);要固定环境才显式传。**唯一会报错的组合是对未开多环境的应用显式传 `dev`**(无 `dev` 分支,报 `Invalid DB Branch`)。旧名 `--env` 已移除。`+db-env-diff` / `+db-env-migrate`(dev→online 语义)与 `+db-recovery-*` 没有 `--environment`。**例外:`+db-sync-*` 不走自动选分支**——省略默认落 **online**;多环境应用建表(`action=create`)必须显式 `--environment dev`,否则撞 online 禁 DDL(`k_dl_4000001`)。
|
|
58
59
|
|
|
59
|
-
**何时打开 reference**:各命令完整 flags / 分页 / 输出契约、`+db-execute` 多语句与事务语义、导入导出边界与限额、audit/changelog/env/recovery/quota 参数、时间格式、系统表白名单、user_profile 唯一表达式、pg function、JSONB 复杂注释等长尾限制 → 见 [full-reference.md](references/full-reference.md)。
|
|
60
|
+
**何时打开 reference**:各命令完整 flags / 分页 / 输出契约、`+db-execute` 多语句与事务语义、导入导出边界与限额、Base 同步的配置格式与生命周期 / 错误恢复、audit/changelog/env/recovery/quota 参数、时间格式、系统表白名单、user_profile 唯一表达式、pg function、JSONB 复杂注释等长尾限制 → 见 [full-reference.md](references/full-reference.md)。
|
|
60
61
|
|
|
61
62
|
## Hard Rules
|
|
62
63
|
|
|
@@ -72,7 +73,7 @@ gate-tools:
|
|
|
72
73
|
| `--yes` 边界 | 只跳过 CLI 确认关卡,不能代替用户授权 |
|
|
73
74
|
| 线上发布 / 恢复 | `+db-env-migrate` / `+db-recovery-apply` 前先跑 `+db-env-diff` / `+db-recovery-diff` 预览并给用户确认 |
|
|
74
75
|
| 已有数据安全 | 已有表 / 已有数据禁止直接 DROP / DELETE;优先 ALTER / UPDATE;不确定先问用户 |
|
|
75
|
-
| 环境选择 |
|
|
76
|
+
| 环境选择 | 默认不传 `--environment`(服务端自动选分支);确认应用开了多环境才显式传 `dev` 验写操作 |
|
|
76
77
|
| 平台保留对象 | 禁止创建或修改 `auth`、`users` 等平台保留表;禁止 DROP 平台审计列 |
|
|
77
78
|
| 业务人员字段 | 业务需要“创建人 / 负责人”字段时命名为 `creator` / `owner` / `author`,避免与审计列混淆 |
|
|
78
79
|
| 本地文件路径 | `--file` / `--output` 用工作目录内相对路径;绝对路径或经 `..`/符号链接越出工作目录会被拒 |
|
|
@@ -120,13 +121,11 @@ CREATE POLICY "修改本人数据" ON <table>
|
|
|
120
121
|
);
|
|
121
122
|
```
|
|
122
123
|
|
|
123
|
-
建表流程:`+db-table-list/get` 确认不存在或需变更 -> 生成 DDL -> 用户授权 -> `+db-execute --sql "<ddl>" --yes` 执行 -> 插入 mock -> 必要时重跑 codegen 刷新 `schema.ts`。
|
|
124
|
-
|
|
125
124
|
## DDL Rules
|
|
126
125
|
|
|
127
126
|
### DDL Workflow
|
|
128
127
|
|
|
129
|
-
1. 先
|
|
128
|
+
1. 先 `+db-table-list` 判断表是否存在;已有表再 `+db-table-get --table <table>` 看 DDL / columns / indexes / comments(`--format pretty` 直接给建表 DDL)。
|
|
130
129
|
2. 生成 DDL 时只写裸表名,不写 `public.` 或 workspace schema。
|
|
131
130
|
3. CREATE TABLE 必须带审计列、RLS、4 条默认 policy;JSONB 字段必须在同一次调用里写 `COMMENT ON COLUMN ... IS '@type { ... }'`。
|
|
132
131
|
4. CREATE TABLE / CREATE INDEX / ALTER TABLE ADD COLUMN 必须带 `IF NOT EXISTS`,避免重复执行失败。
|
|
@@ -184,13 +183,13 @@ CREATE POLICY "修改本人数据" ON <table>
|
|
|
184
183
|
|
|
185
184
|
测试用户(**只用于数据库 `user_profile` 列**):`1847292357012580` 张伟、`1847292986161210` 李明、`1838411738368010` 刘洋、`1847292458018820` 赵丽、`1847286122258458` 孙强、`1846114399229988` John Smith、`1847298549409911` Emma Johnson、`1847291727560708` Michael Brown、`1848568929333380` Robert Wilson、`1847751107397639` Maria Garcia。
|
|
186
185
|
|
|
187
|
-
> ⚠️ 这些是妙搭数字 user_id,**不是飞书 open_id
|
|
186
|
+
> ⚠️ 这些是妙搭数字 user_id,**不是飞书 open_id**:禁止传给 `+role-member-add/remove` 的 `--users`(只收 `ou_`)或任何要 open_id 的飞书接口。
|
|
188
187
|
|
|
189
188
|
### `user_id` / `user_profile`
|
|
190
189
|
|
|
191
190
|
- `user_id` 是高频写入规则,不是长尾 reference:只能来自上下文明确给定、`env.userId` / `env.user.id`,或上方测试用户列表,禁止编造。
|
|
192
191
|
- 写入 `user_profile` 字段用 `ROW('<user_id>')::user_profile`;更新复合类型时替换整个字段。
|
|
193
|
-
-
|
|
192
|
+
- 查询 / 过滤 / 索引只用 `(field).user_id`,不依赖 `name` / `email` 等其它子字段。
|
|
194
193
|
|
|
195
194
|
## SELECT Rules
|
|
196
195
|
|
|
@@ -213,13 +212,7 @@ CREATE POLICY "修改本人数据" ON <table>
|
|
|
213
212
|
| UPDATE | 必须有明确 WHERE,禁止无条件 UPDATE;用户说"修改 / 更新 / 改一下"数据时用 UPDATE,禁止 DELETE + INSERT;修改业务字段时同步 `_updated_at = CURRENT_TIMESTAMP` 和 `_updated_by`;影响范围不明先 `SELECT count(*)` 给用户确认 |
|
|
214
213
|
| DELETE / TRUNCATE | 当前会话中 Agent 自己插入的 mock 可删;已有表 / 已有数据默认禁止,必须先 `SELECT count(*)` 展示命中行数并取得用户明确授权;`TRUNCATE` 影响整表,视同高风险删除 |
|
|
215
214
|
|
|
216
|
-
|
|
217
|
-
INSERT INTO task (title, status, assignee, _created_by, _updated_by)
|
|
218
|
-
VALUES
|
|
219
|
-
('梳理需求', 'open', ROW('1847292357012580')::user_profile, ROW('1847292357012580')::user_profile, ROW('1847292357012580')::user_profile),
|
|
220
|
-
('完成设计', 'doing', ROW('1847292986161210')::user_profile, ROW('1847292357012580')::user_profile, ROW('1847292357012580')::user_profile)
|
|
221
|
-
ON CONFLICT (title) DO NOTHING;
|
|
222
|
-
```
|
|
215
|
+
`user_profile` 列的 INSERT / UPDATE 写法示例见 [full-reference.md](references/full-reference.md) 的 `user_profile` compound type 一节。
|
|
223
216
|
|
|
224
217
|
## Import / Export
|
|
225
218
|
|