Files
X-Financial/document/development/2026-07-16/feature/ai-release-real-telemetry/TODO.md
caoxiaozhu 787bc3a481 feat(platform): close AI expense value loop
Add tenant-safe value, telemetry, connector, commercial, and production-readiness foundations.
2026-07-17 14:14:08 +08:00

121 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI 分阶段发布真实遥测 开发 TODO
更新时间2026-07-17
## 使用规则
- 每项必须回链 `CONCEPT.md` 对应章节;没有代码、迁移、接口或容器证据不得勾选。
- observation、label、聚合和 Release Guard 输入必须按证据层分开,不能用 HMAC 请求或客户端汇总值替代数据库事实。
- `collecting` 不得包装成通过recall/false-negative 没有达到独立盲审证据阈值时必须保持 unavailable。
- 所有后端、迁移和并发验证只在 `local-x-financial-linux` 容器内执行,单条命令最长 60 秒。
## 1. 调研与边界
- [x] [CONCEPT: 背景与问题] 审计 Loader、平台风险评测、shadow_evaluations、风险处置和 AI workflow feedback/outcome 链路,确认线上发布评测缺少持久真实样本。
证据:`expense_claim_risk_rule_loader.py``expense_claim_platform_risk.py``risk_dispositions.py``expense_workflow_learning.py``ai_learning.py` 只读审计。
- [x] [CONCEPT: 背景与问题] 确认 `RiskDispositionEvent confirm/false_positive` 是当前可绑定风险命中的可信人工结论,通用 feedback/outcome 缺少完整 release 身份。
证据:`risk_disposition.py``risk_dispositions.py``agent_asset_release_telemetry.py` 的可信事件查询和关联校验。
- [x] [CONCEPT: HMAC 与数据真实性边界] 冻结 HMAC 只负责传输认证、防篡改和防重放,不证明汇总指标的数据真实性。
证据:`CONCEPT.md`“HMAC 与数据真实性边界”;现有 `agent_asset_release_monitor_auth.py``ReleaseEvaluationInput` 契约对照审计。
- [x] [CONCEPT: 目标与非目标] 明确未标注 collecting、敏感数据不落遥测表、线上 recall/FN 证据不足不可用。
证据:`CONCEPT.md`“目标与非目标”“Recall 与 false negative”。
## 2. 契约与设计
- [x] [CONCEPT: 数据] 定义 observation 与 label 的 tenant/asset/release/stage/version 复合身份、稳定幂等键和只追加边界。
证据:`server/src/app/models/agent_asset_release_telemetry.py`
- [x] [CONCEPT: 证据链与自动判定] 定义 observation → trusted label → aggregate → ReleaseEvaluationInput → Release Guard 的证据链。
证据:`CONCEPT.md`“证据链与自动判定”、`ReleaseTelemetryAggregate.to_release_evaluation_input()`
- [x] [CONCEPT: 算法/规则] 分开定义运行失败、业务误报、candidate precision、baseline precision 和缺失负样本真值。
证据:`agent_asset_release_telemetry.py``aggregate()``test_agent_asset_release_telemetry.py` 的 collecting、baseline 和 FN 不可用断言。
- [x] [CONCEPT: 权限] 冻结专用发布复核接口的角色矩阵、双人复核阈值和跨租户 HTTP 错误契约。
证据:`require_rule_reviewer_user` 只允许 manager/admin跨租户 404、非角色 403、
发布人自审 400`reviewer_quorum` 限制 1..2 且按不同 actor 指纹计票。
## 3. 独立模型与服务
- [x] [CONCEPT: 数据] 新增 append-only observation/label ORM 模型、复合租户/release 外键和更新/删除拒绝。
证据:`server/src/app/models/agent_asset_release_telemetry.py`
- [x] [CONCEPT: 后端] 实现真实 shadow 结果、Canary/active 命中和 manifest 执行循环样本生产器。
证据:`AgentAssetReleaseTelemetryService.record_expense_risk_result()``record_manifest_evaluation()`
- [x] [CONCEPT: 后端] 实现专用发布复核标签和可信 `RiskDispositionEvent` 标签转换,不接收自由评论。
证据:`record_review_label()``record_risk_disposition_label()`
- [x] [CONCEPT: 后端] 实现租户隔离、陈旧 release/stage/version 拒绝、来源关联校验和稳定幂等冲突。
证据:`_require_current_release()``_observation_replay()``_label_replay()` 及对应测试。
- [x] [CONCEPT: 算法与公式] 实现保守聚合;未标注候选命中保持 collecting基线标签不完整时 baseline precision 不可用。
证据:`ReleaseTelemetryAggregate``aggregate()``to_release_evaluation_input()`
- [x] [CONCEPT: 数据] 实现 claim、事件、actor 来源指纹化,不保存业务正文、评论和账号原值。
证据:模型无自由文本业务字段;`_fingerprint()`;脱敏测试断言。
## 4. 共享注册、迁移与运行接入
- [x] [CONCEPT: 数据] 在 `db/base.py``models/__init__.py` 注册 `AgentAssetReleaseObservation``AgentAssetReleaseLabel`,保证主应用 metadata 与迁移所有权检查可见。
证据:`db/base.py``models/__init__.py``schema_ownership.py``migration_preflight.py` 已登记两张迁移自有表;前置检查 77 项通过。
- [x] [CONCEPT: 数据] 新增后继 `20260716_0018` Alembic 迁移,创建两张表、复合租户/release 约束、检查约束、索引和数据库级 append-only UPDATE/DELETE 触发器。
证据:`20260716_0018_agent_asset_release_telemetry.py`;一次性 PostgreSQL 17 完整升级/降级循环 1 项通过,静态迁移/schema owner 回归 112 项通过。
- [x] [CONCEPT: 算法/规则] 在真实候选 manifest 执行循环接入 `record_manifest_evaluation()`,完整记录 shadow/Canary hit、miss 和结构化执行失败。
证据:`expense_claim_platform_risk.py``expense_claim_release_telemetry.py``test_agent_asset_release_runtime.py` 覆盖 shadow、Canary、active 和损坏快照,`test_agent_asset_release_telemetry.py` 覆盖结构化运行失败。
- [x] [CONCEPT: 后端] 在类型化风险处置事务接入 release label按同租户、同 claim/rule、当前 release 精确关联 observation关联失败保守拒绝。
证据:`agent_asset_release_disposition_labels.py``risk_disposition_release_sync.py`;风险确认/误报会追加标签,误报越界自动回滚 stable。
- [x] [CONCEPT: 后端] 将现有 Release Monitor 从“提交外部汇总数字”改为“触发服务端聚合”,只在 aggregate ready 时构造 `ReleaseEvaluationInput`
证据:`AgentAssetReleaseMonitor.evaluate_current()` 只接受 release 身份HTTP body 为禁止额外字段的空触发契约,真实聚合未 ready 时不调用 Guard。
- [x] [CONCEPT: HMAC 与数据真实性边界] 保留 HMAC 作为 Monitor 传输认证,但禁止签名请求覆盖数据库聚合结果,并补充签名通过但汇总伪造的反向测试。
证据:`agent_asset_releases.py``AgentAssetReleaseMonitorTriggerWrite`;带有效签名的伪造 `precision/total` 请求仍返回 422。
- [x] [CONCEPT: 降级策略] 遥测持久化或聚合失败时保持 stable 规则、停止晋级并记录结构化告警,不让观测故障阻断正常报销。
证据:`ExpenseClaimReleaseTelemetryRecorder``risk_disposition_release_sync.py` 将遥测/标签/监控故障隔离并记录日志;未获得 ready 真实聚合不会写 passed也不会改变 stable 路由。
- [x] [CONCEPT: 后端] 按职责拆分 Agent 资产接口、版本只读投影和 Release Guard 纯策略计算,保持公开 API 与状态机行为稳定。
证据:`agent_assets.py` endpoint 714 行、`agent_asset_risk_rules.py` 534 行、`agent_assets.py` service 675 行、`agent_asset_serialization.py` 217 行、`agent_asset_release_guard.py` 636 行、`agent_asset_release_policy.py` 201 行,相关核心文件均低于 800 行;纯策略模块保存范围为 1..2 的 `reviewer_quorum`,第 5 节已完成复核执行与运营闭环。
## 5. 自动聚合、告警与运营闭环
- [x] [CONCEPT: 证据链与自动判定] 实现按 tenant/asset/release/stage/version 的周期聚合作业与幂等快照。
证据:`agent_asset_release_scheduler.py` 按租户有界扫描;`AgentAssetReleaseMonitor._existing_evaluation()` 复用相同 release 聚合快照,不重复生成测试运行。
- [x] [CONCEPT: 证据链与自动判定] aggregate ready 后自动调用 Release Guardcollecting 只更新采集状态,不写虚假 passed test run。
证据:人工标签提交后即时触发 monitor后台 scheduler 提供失败补偿;`test_agent_asset_release_monitor.py` 覆盖 collecting 不调用 Guard、低 precision/运行失败自动回滚与相同快照幂等。
- [x] [CONCEPT: 降级策略] 增加待标注数量/时长、运行失败率、precision 下降、baseline 不可用、聚合失败和自动回滚告警。
证据:`agent_asset_release_alerts.py``AgentAssetReleaseMonitor._metrics()`24 小时
待审逾期和单资产聚合失败均返回结构化告警,定向 Monitor/Telemetry/Runtime 29 项通过。
- [x] [CONCEPT: 前端] 在发布控制台展示 observed/hit/labeled/pending、候选/基线 precision、运行失败和召回证据。
证据:`AuditReleaseMonitorPanel.vue` 展示负样本池、抽样进度、积压、实际/估计 FN、FN 上界、recall 点估计/下界/置信方法;空值不渲染为零。
- [x] [CONCEPT: 权限] 实现认证发布复核队列、操作审计和需要时的双人复核,不允许规则发布人独自伪造所有标签。
证据:`agent_asset_release_review.py``agent_asset_release_label_votes.py`、专用 GET/POST
API`X-Request-Id`、append-only label、actor HMAC 指纹、发布人隔离和独立双人同意均有测试。
- [x] [CONCEPT: Recall 与 false negative] 实现独立分层负样本抽样、预测盲化、双人标注、冲突保持 collecting 和保守召回估计。
证据:`agent_asset_release_sampling.py``agent_asset_release_review.py`
`agent_asset_release_aggregation.py``agent_asset_release_recall.py`;前端只发送
`risk_present / risk_absent`,负样本要求两个不同 actor门禁只读取 recall 下界。
- [x] [CONCEPT: 数据] 完成 `0023` audit sample 迁移注册、数据库标签组合约束、append-only 触发器和无损降级验证。
证据:`20260716_0023_agent_asset_release_blind_audit.py``release_telemetry_migration_assertions.py`fresh PostgreSQL 完整迁移链、约束、触发器及降级/再升级均通过。
## 6. 测试与验证
- [x] [CONCEPT: 测试方案] 独立模型/服务测试覆盖 shadow、Canary、baseline、真实 typed disposition、脱敏、幂等、租户、陈旧 release、append-only、collecting 和 FN 不可用。
证据:容器内 `test_agent_asset_release_telemetry.py` 7 项通过。
- [x] [CONCEPT: 测试方案] 与现有 Release Guard 和 Runtime 组合回归通过。
证据:容器内 `test_agent_asset_release_guard.py``test_agent_asset_release_runtime.py``test_agent_asset_release_telemetry.py` 共 19 项通过Ruff 通过,`git diff --check` 通过。
- [x] [CONCEPT: 测试方案] 新增 0018 upgrade/downgrade、schema owner、复合外键和数据库 append-only PostgreSQL 验证。
证据:一次性 `pgvector/pgvector:pg17` 数据库中完整迁移循环 1 项通过;迁移运行探针验证复合租户外键、幂等唯一约束和两张表的数据库级 UPDATE/DELETE 拒绝。
- [x] [CONCEPT: 测试方案] 新增 PostgreSQL 并发同 observation、同 label、标签与阶段晋级竞争和幂等冲突测试。
证据:一次性 PostgreSQL 17 中 `test_agent_asset_release_telemetry_concurrency_postgres.py` 4 项通过;相同重放只保留一条,不同载荷单赢家,阶段转换持锁后旧标签保守拒绝。
- [x] [CONCEPT: 测试方案] 验证 audit sample 并发单赢家、同 actor 重复不增加负样本法定票、第二独立 actor 完成双人复核,以及预测字段不进入前端队列状态。
证据:`test_agent_asset_release_telemetry_concurrency_postgres.py` 覆盖单赢家和独立双人票;`test_agent_asset_release_telemetry.py``agent-release-monitor-panel.test.mjs` 验证队列不暴露 candidate/baseline 命中预测。
- [x] [CONCEPT: 测试方案] 跑通真实风险循环 → observation → disposition label → aggregate → Release Guard 回滚端到端。
证据:`test_agent_asset_release_runtime.py``test_risk_dispositions.py` 覆盖真实执行样本、类型化处置标签、服务端聚合、低 precision 自动恢复 stable发布组合回归 44 项通过。
- [x] [CONCEPT: 测试方案] 验证职责拆分后的资产服务、风险规则子路由、Release Guard/Runtime、Monitor/Scheduler/Telemetry 和 API schema 兼容性。
证据:容器内资产服务 27 项、Guard/Runtime 13 项、Monitor/Scheduler/Telemetry 22 项、风险规则生成/解释 30 项、修订/反馈 14 项通过;迁移后的既有 publish HTTP 防绕过用例通过Ruff 与 `git diff --check` 通过。
- [x] [CONCEPT: 指标与验收] 验证 HMAC 失败、遥测库失败、标签积压和聚合失败均停止晋级但不破坏 stable 业务保护。
证据:`test_agent_asset_release_runtime.py` 覆盖签名失败;`test_agent_asset_release_monitor.py` 覆盖 collecting、积压和聚合失败`ExpenseClaimReleaseTelemetryRecorder` 隔离遥测持久化异常stable 报销路径继续服务。
- [x] [CONCEPT: 指标与验收] 完成相关后端全量回归、Ruff、迁移完整循环和 `git diff --check`,逐项回填 A1-A8 证据。
证据:遥测组合 45 项通过fresh PostgreSQL 总探针 `87 passed / 0 skipped / 0 failed`,其中发布遥测并发 7 项Web 全量 815 项及 Vite build 通过;新增 Python 文件 Ruff 与 `git diff --check` 通过。全仓既有 Ruff 基线债不伪装为本轮新增错误。
## 7. 文档收尾
- [x] [CONCEPT: 本轮实现记录] 新建独立 CONCEPT/TODO记录证据边界、已实现切片和共享集成缺口。
证据:`document/development/2026-07-16/feature/ai-release-real-telemetry/CONCEPT.md``TODO.md`
- [x] [CONCEPT: 风险与开放问题] 共享集成完成后回填 0018、运行 hook、自动作业、PostgreSQL 和端到端证据。
证据:本 TODO 第 4-6 节与 `CONCEPT.md`“本轮实现记录”已回填发布面板已展示积压、失败、precision 和 recall生产运营效果由下一条真实流量验收单独保留。
- [x] [CONCEPT: 指标与验收] 与上位 AI 闭环 TODO 对齐代码与容器验证状态。
证据:`document/development/2026-07-13/feature/ai-expense-closed-loop-and-value-proof/TODO.md` 已回填 Golden、Canary、盲审和回滚的工程证据。
- [ ] [CONCEPT: 指标与验收] 使用生产真实流量、独立复核样本和试点阈值验证 Golden/Canary/自动回滚运营效果。
证据要求:目标企业生产 observation/label、盲审样本、阈值签字和真实回滚演练本地测试不得替代。