宜搭聚合表技能
触发条件
用户明确提到“聚合表”“虚拟视图”“virtualView”,或要检查、预览、保存、发布已有聚合表时使用本技能。普通统计报表使用 yida-report;自定义看板使用 yida-dashboard / yida-rechart,不要混用。
本技能只编排 openyida aggregate-table 已有的确定性窄命令,不生成通用高层 DSL,不复刻聚合公式引擎,不调用前端 AI authoring 接口。
安全边界
- 写操作前必须从当前资源上下文取得精确
appType和聚合表formUuid,不得按名称猜 ID。 preview是远端计算请求但不持久化;save写草稿;publish写 live 配置并触发构建。save的并发轴是stashGmtModified,publish的并发轴是gmtModified。对应 GET readback 轴必须存在且前进;响应包含 revision 时还必须与该 readback 轴一致,不能用响应替代回读证据。- 设计 JSON 的六个顶层数组是
relationForms、relationships、aggregatedFields、auxFields、formulaFields、validators。显式错误类型必须失败,不能改成空数组继续写。 - 不实现或猜测整表 delete。当前没有固定前端证据证明删除 API;物理 cleanup 必须报告
remote_cleanup_unsupported,不能声称删除成功。域内真实 E2E 只能在 exact runId/name ownership 证明成立后写入,并以 live revision 条件恢复至写前 canonical 配置;并发或归属证据变化时必须restore_blocked,不得覆盖。 - 动态租户 limits、真实公式语法、stash/live 可见性延迟、published runtime 查询和删除协议均为
PLATFORM_PROBE_REQUIRED。
工作流
1. 读取目标与现状
openyida aggregate-table list <appType> --json
openyida aggregate-table inspect <appType> <formUuid> --json
需要新建资源且用户已授权时,才执行:
openyida aggregate-table create-empty <appType> "<名称>" --no-open
2. 准备设计 JSON
设计 JSON 放在 <projectRoot>/.cache/openyida/<任务名>/aggregate-design.json,通过结构化文件写入工具创建。不要用 shell heredoc、cat、echo、printf、tee 或重定向生成。
发布前至少满足:
- 每个 relationship 的
relationshipInfos数量与relationForms数量一致。 relationId唯一,并与aggregatedFields[].id一一对应。- 指标包含唯一
id、非空name和formula。 - validator 同时包含
formula与非空text.zh_CN。 - filter rules 不超过固定前端默认上限 10,且每条 rule 有
operator。 - aux field 包含唯一
id与非空name。
以上只做结构与引用完整性校验,不在本地判断聚合公式业务语义。
3. 预览、保存与发布
openyida aggregate-table preview <appType> <formUuid> <design.json> --json
openyida aggregate-table save <appType> <formUuid> <design.json> --json --no-open
openyida aggregate-table publish <appType> <formUuid> <design.json> --json --no-open
openyida aggregate-table status <appType> <formUuid> --json
不要跳过 preview 后直接发布未经平台计算验证的复杂配置。发布成功只证明配置持久化;构建状态还必须精确读取到 SUCCESS。FAIL 时保留 errorMsg,不要无修改重复发布。
完成契约
- 只读任务:返回精确
appType/formUuid、当前六数组摘要与 revision 状态。 - 草稿任务:
revisionAxis=stashGmtModified、stash readback revision 已前进且六数组 canonical readback 一致;响应 revision 存在时须与 stash readback 一致。 - 发布任务:
revisionAxis=gmtModified、live readback revision 已前进且六数组 canonical readback 一致;响应 revision 存在时须与 live readback 一致,并读取构建终态。 - 真实运行态结果与物理 cleanup 在平台协议未探明前必须明确标注
PLATFORM_PROBE_REQUIRED/remote_cleanup_unsupported;域内 E2E 的 conditional restore 还必须单独给出 exact readback 证据,不能用命令退出 0 替代。
WHEN NOT(明确不做)
- 整表 delete、模糊名称清理或跨 run 清理。
- AI 文生聚合表、拖拽设计器复制、每个 UI 动作一个 CLI 子命令。
- 通用 high-level DSL、动态 limits 平台或本地公式引擎。