feat(platform): close AI expense value loop

Add tenant-safe value, telemetry, connector, commercial, and production-readiness foundations.
This commit is contained in:
caoxiaozhu
2026-07-17 14:14:08 +08:00
parent 242d68c36f
commit 787bc3a481
507 changed files with 82072 additions and 6344 deletions

View File

@@ -0,0 +1,120 @@
# 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、盲审样本、阈值签字和真实回滚演练本地测试不得替代。