```
feat(feishu): 添加飞书入站事件inbox和混合数据库协调功能 - 实现飞书入站事件持久化inbox机制,支持状态管理、租约锁定和重试退避 - 添加混合数据库基线协调工具,确保平台PostgreSQL结构安全对齐 - 增加运行组件心跳检测和readiness就绪检查机制 - 实现app_ticket事件的安全轮换和验证处理 - 添加生产环境运行编排和fail-closed安全机制 - 支持webhook快速确认和长连接独立进程处理 - 完善个人数据擦除时的待处理事件清理功能 ```
This commit is contained in:
@@ -211,3 +211,57 @@
|
||||
飞书非零业务码和数据库迁移一致性。
|
||||
6. WHEN 完整验证运行 THEN Ruff、Python 编译检查、Alembic 元数据一致性测试和全部 pytest
|
||||
测试 SHALL 通过。
|
||||
|
||||
### 需求 11:混合数据库安全基线
|
||||
|
||||
**用户故事:** 作为维护人员,我希望现有未登记 Alembic 版本的混合平台数据库可以安全
|
||||
协调到当前模型,而不丢失已有平台数据或误操作业务数据库。
|
||||
|
||||
#### 验收条件
|
||||
|
||||
1. WHEN 协调工具连接数据库 THEN 系统 SHALL 只接受平台 PostgreSQL,且不得连接或修改
|
||||
`LEGACY_DATABASE_URL`。
|
||||
2. WHEN 数据库版本为空且结构符合已审核的混合基线 THEN 系统 SHALL 在事务锁内仅执行
|
||||
允许列表中的结构补齐、旧约束替换和已确认空表清理。
|
||||
3. IF 实际结构指纹、数据行数、依赖关系、权限或 Alembic 版本不符合预检 THEN 系统 SHALL
|
||||
中止且不得留下部分 DDL 或版本记录。
|
||||
4. WHEN 协调完成 THEN 系统 SHALL 验证 SQLAlchemy metadata 无漂移,再原子登记 Alembic
|
||||
版本;IF 任一步失败 THEN 全部变更 SHALL 回滚。
|
||||
5. WHEN 常规数据库已经位于受支持 revision THEN 系统 SHALL 继续使用标准 Alembic 升级,
|
||||
不得重复执行一次性基线协调。
|
||||
|
||||
### 需求 12:生产运行与就绪判定
|
||||
|
||||
**用户故事:** 作为运维人员,我希望 API、飞书事件、调度器和任务执行进程可以持续运行,
|
||||
且系统只在依赖和迁移真正就绪时接收流量。
|
||||
|
||||
#### 验收条件
|
||||
|
||||
1. WHEN 启用飞书用户功能 THEN 系统 SHALL 明确选择 `webhook` 或 `long_connection` 事件入口;
|
||||
IF 对应凭据或进程未就绪 THEN production 配置或 readiness SHALL 失败关闭。
|
||||
2. WHEN 使用长连接部署 THEN 运行编排 SHALL 启动独立飞书事件进程,并为 API、事件进程、
|
||||
scheduler 和 worker 配置重启策略。
|
||||
3. WHEN scheduler、worker 或长连接属于当前配置期望组件 THEN 系统 SHALL 要求其存在新鲜
|
||||
heartbeat;缺失或过期 SHALL 使 readiness 返回 HTTP 503。
|
||||
4. WHEN readiness 检查平台数据库 THEN 系统 SHALL 验证当前 Alembic revision 与 head 一致,
|
||||
而不只执行 `SELECT 1`。
|
||||
5. WHEN 生成部署配置样例 THEN 系统 SHALL 只包含占位符和安全默认值,不得提交真实密钥;
|
||||
外部 PostgreSQL 部署 SHALL 能避免被 Compose 内部数据库 URL 强制覆盖。
|
||||
|
||||
### 需求 13:可靠的飞书入站事件
|
||||
|
||||
**用户故事:** 作为飞书用户,我希望机器人在临时故障或进程重启后仍能处理我的消息,
|
||||
同时不会因飞书重复投递而重复执行命令。
|
||||
|
||||
#### 验收条件
|
||||
|
||||
1. WHEN webhook 或长连接收到已经验证的事件 THEN 系统 SHALL 先以唯一事件键持久化 inbox
|
||||
状态,再快速确认接收,不得在 webhook 请求内同步等待 AI 或飞书回复。
|
||||
2. IF 多个进程并发接收相同事件 THEN 系统 SHALL 只创建一个 inbox 记录,并只允许一个
|
||||
有效租约执行命令。
|
||||
3. IF 命令执行发生可重试失败或执行进程在完成前退出 THEN 事件 SHALL 回到持久化重试状态,
|
||||
不得因为 receipt 已登记而永久丢失。
|
||||
4. WHEN 命令执行成功 THEN 系统 SHALL 原子标记成功;后续重复事件 SHALL 返回已接收且不得
|
||||
再次执行命令。
|
||||
5. WHEN 重试超过上限 THEN 系统 SHALL 标记最终失败、保存最小错误摘要并提供运行指标,
|
||||
不得记录密钥或完整敏感消息内容。
|
||||
|
||||
Reference in New Issue
Block a user