补充安全权限日志与草稿状态约定

This commit is contained in:
talesofzes
2026-06-22 17:30:59 +08:00
parent df0b3fa267
commit a41e2c28d4
19 changed files with 451 additions and 129 deletions
+16 -2
View File
@@ -12,6 +12,7 @@ AI 生成或修改后端代码前后都要检查本清单。checklists 是 Revie
- [ ] 涉及老板 AI 秘书、Agent、BotContext 或对话记忆时已读 `docs/specs/01_老板AI秘书与AI草稿.md`
- [ ] 涉及状态流转时已读 `docs/contracts/状态流转约定.md`
- [ ] 涉及飞书时已读 `docs/specs/03_飞书通知与反馈.md`
- [ ] 涉及权限、安全、日志脱敏、飞书验签或幂等时已读 `docs/contracts/安全权限日志约定.md`
## 2. 范围控制
@@ -35,7 +36,7 @@ AI 生成或修改后端代码前后都要检查本清单。checklists 是 Revie
- [ ] 老板消息统一走 `POST /api/secretary/handle-message`
- [ ] `source + message_id` 幂等,不重复调用模型、不重复创建草稿、不重复写 `secretary_messages`
- [ ] AI 输出 JSON 已做结构校验。
- [ ] `qa/realtime_qa/note/need_more_info/unsupported` 不创建事项、提醒或通知。
- [ ] `qa/realtime_qa/note/need_more_info/unknown/unsupported` 不创建事项、提醒或通知。
- [ ] 实时问答第一版只做暂不支持提示,不做交易判断。
- [ ] `need_more_info` 最多 3 个问题、最多 3 轮追问。
- [ ] PostgreSQL AI 对话记忆只辅助理解和草稿修订,不替代任务、提醒、通知等正式业务表。
@@ -55,8 +56,9 @@ AI 生成或修改后端代码前后都要检查本清单。checklists 是 Revie
## 6. 飞书
- [ ] 飞书回调必须验签。
- [ ] 飞书事件使用 `event_id` 幂等。
- [ ] 飞书事件使用 `event_id``idempotency_key` 幂等。
- [ ] 卡片重复点击不会重复创建事项、提醒或反馈。
- [ ] 旧卡片、失效卡片、已替代草稿和已过期通知只记录事件,不写业务对象。
- [ ] 飞书通知只发送摘要和链接。
- [ ] 非老板机器人访问不会调用 AI。
- [ ] 回调失败会写 `feishu_events``failure_records`
@@ -84,6 +86,8 @@ AI 生成或修改后端代码前后都要检查本清单。checklists 是 Revie
- [ ] 普通日志不包含 API Key、App Secret、飞书 token。
- [ ] 普通日志不包含完整手机号或完整邮箱。
- [ ] 原始错误摘要不包含密钥。
- [ ] OAuth code/state、回调验签密钥、一次性操作 token 明文不进入日志或业务表。
- [ ] `model_call_logs` 原始请求/响应和 `feishu_events.raw_payload` 访问范围受限。
## 10. 测试
@@ -93,3 +97,13 @@ AI 生成或修改后端代码前后都要检查本清单。checklists 是 Revie
- [ ] 定时测试覆盖重复触发防护。
- [ ] 事务测试覆盖通知失败不留下半截数据。
- [ ] AI 测试覆盖解析失败、实时问答和人工确认边界。
- [ ] 每个 plan 完成前已说明新增或修改了哪些 tests、覆盖哪些 spec / contract 约定、如何运行。
## 11. 文档同步
- [ ] 改接口同步 `docs/contracts/API接口约定.md`
- [ ] 改字段同步 `docs/contracts/数据对象约定.md`
- [ ] 改状态同步 `docs/contracts/状态流转约定.md`
- [ ] 改权限、安全、日志脱敏、飞书验签或幂等同步 `docs/contracts/安全权限日志约定.md`
- [ ] 改飞书逻辑同步 `docs/specs/03_飞书通知与反馈.md`
- [ ] 改 AI 规则同步 `docs/specs/01_老板AI秘书与AI草稿.md`
+8 -2
View File
@@ -11,6 +11,7 @@
- [ ] 飞书身份没有直接绕过平台角色权限。
- [ ] 非老板机器人私聊不会触发 AI。
- [ ] 失败记录仅管理员 / AI 团队和必要管理角色可见。
- [ ] 权限、安全、日志脱敏、验签和幂等符合 `docs/contracts/安全权限日志约定.md`
## 2. 状态流转
@@ -31,8 +32,9 @@
## 4. 飞书
- [ ] 回调已验签。
- [ ] `event_id` 幂等。
- [ ] `event_id``idempotency_key` 幂等。
- [ ] 卡片重复点击幂等。
- [ ] 旧卡片、失效卡片、已替代草稿和已过期通知不会继续写业务对象。
- [ ] 通知内容只包含摘要和链接。
- [ ] 飞书 token、App Secret 不进入日志。
- [ ] 找不到通知、草稿、事项、提醒时有失败记录。
@@ -43,7 +45,7 @@
- [ ] 老板消息统一走 `POST /api/secretary/handle-message`
- [ ] `source + message_id` 幂等覆盖模型调用、草稿创建和 `secretary_messages`
- [ ] 模型 JSON 有 validator。
- [ ] `qa` / `realtime_qa` / `note` / `need_more_info` / `unsupported` 不创建事项或提醒。
- [ ] `qa` / `realtime_qa` / `note` / `need_more_info` / `unknown` / `unsupported` 不创建事项或提醒。
- [ ] 实时问答不做交易判断。
- [ ] PromptContext 版本被记录。
- [ ] PostgreSQL AI 对话记忆只辅助理解和草稿修订,不替代正式业务表。
@@ -66,6 +68,8 @@
- [ ] 失败记录包含类型、关联对象、原因、处理状态。
- [ ] 失败处理必须有处理结果。
- [ ] 日志包含操作人和渠道。
- [ ] OAuth code/state、回调验签密钥、一次性操作 token、完整手机号和完整邮箱没有进入普通日志。
- [ ] 模型原始请求/响应和飞书原始 payload 的访问范围受限。
## 8. 测试
@@ -73,11 +77,13 @@
- [ ] 失败路径有测试。
- [ ] 测试没有依赖真实飞书或真实百炼网络调用。
- [ ] 测试 fixture 不包含真实手机号、邮箱、token 或密钥。
- [ ] 每个 plan 完成前说明了新增或修改的 tests、覆盖的 spec / contract 约定和运行方式。
## 9. 文档同步
- [ ] 改接口同步 `docs/contracts/API接口约定.md`
- [ ] 改字段同步 `docs/contracts/数据对象约定.md`
- [ ] 改状态同步 `docs/contracts/状态流转约定.md`
- [ ] 改权限、安全、日志脱敏、飞书验签或幂等同步 `docs/contracts/安全权限日志约定.md`
- [ ] 改飞书逻辑同步 `docs/specs/03_飞书通知与反馈.md`
- [ ] 改 AI 规则同步 `docs/specs/01_老板AI秘书与AI草稿.md`
+10 -3
View File
@@ -16,17 +16,19 @@
- [ ] AI 可以把老板一句话解析为结构化草稿。
- [ ] AI 草稿可以展示原始输入、类型、内容、接收人候选、时间、反馈要求和缺失字段。
- [ ] 草稿必须人工确认后才创建事项或提醒。
- [ ] 普通聊天、普通记录、实时问答兜底不会创建草稿、事项提醒。
- [ ] 普通聊天、普通记录、实时问答兜底`note``unknown` 不会创建事项提醒或通知
- [ ] 老板可以确认、补充/重说、取消草稿。
- [ ] 补充/重说 30 分钟上下文可以生效并过期。
- [ ] 补充/重说后旧确认卡片失效,新草稿能追溯 `parent_draft_id`
- [ ] PostgreSQL 中可以查看 `secretary_messages` 和当前 `BotContext`
- [ ] 实时问答不会创建事项、提醒或通知。
## 3. 事项闭环
- [ ] 简单事项可以从草稿生成。
- [ ] 复杂事项可以转程经理确认
- [ ] 复杂事项在老板确认后创建 `pending_manager_confirm` 事项壳
- [ ] 程经理收到飞书提醒后进入平台确认。
- [ ] 程经理补齐事项壳后才通知最终接收人。
- [ ] 事项可以飞书通知接收人。
- [ ] 接收人可以反馈已收到、处理中、已完成、有问题。
- [ ] 有问题反馈必须留下原因。
@@ -41,7 +43,7 @@
- [ ] 自己提醒自己默认不需要反馈。
- [ ] 老板 / 程经理给别人设置的提醒默认需要反馈。
- [ ] 暂停、恢复、取消按状态约定生效。
- [ ] 同一提醒不会重复触发同一通知。
- [ ] 同一提醒同一触发时间同一接收人同一渠道不会重复触发同一通知。
- [ ] 演示 / 联调环境同一应用库只启动一个 scheduler 进程。
## 5. 飞书通知和回调
@@ -51,6 +53,9 @@
- [ ] 卡片按钮回调可以被平台接收。
- [ ] 回调验签失败不会执行业务动作。
- [ ] 重复点击卡片不会重复创建反馈或转换草稿。
- [ ] 没有稳定 `event_id` 的回调使用 `idempotency_key` 幂等。
- [ ] 旧卡片、失效卡片、已替代草稿和已过期通知只记录事件,不写业务对象。
- [ ] 飞书手机端平台反馈页可以提交“有问题”原因,并拒绝过期或失效链接。
- [ ] 通知成功和失败都有记录。
## 6. 失败复盘
@@ -69,5 +74,7 @@
- [ ] 飞书通知只发摘要和链接。
- [ ] 普通日志不含 API Key、App Secret、飞书 token。
- [ ] 普通日志不含完整手机号和完整邮箱。
- [ ] 普通日志不含 OAuth code/state、回调验签密钥和一次性操作 token 明文。
- [ ] 模型原始请求/响应和飞书原始 payload 只对管理员 / AI 团队开放排查。
- [ ] 不自动操作交易系统、历史数据库、后台管理系统或其他外部业务系统。
- [ ] 第一版明确不做的功能没有混入主线。