# 后台报销与 Steward 可信租户上下文缺失

日期：2026-07-17
文档路径：document/development/2026-07-17/dev-logs/bugs/steward-linked-reimbursement-tenant-context.md

## 修复记录
- 02:09：记录 bug 修复：后台报销与 Steward 可信租户上下文缺失。（bug-log:242d68c3）
  - Git 提交检查：已执行 `git fetch --all --prune`；upstream `origin/main` 无新提交；本地 ahead 17 条，包含 `242d68c3 feat(approval): add task workflow and waiver decisions`、`28b834ed fix(approval): replay immutable action responses`、`4940ebc4 feat(approval): add safe risk disposition workflow`、`ee88a36b feat(ai): add tenant-safe hierarchical expense learning` 等共享工作区既有提交，本次未改写这些提交。
  - 修改：`linked_reimbursement_draft_jobs.py` 将已认证 `current_user` 显式传给 Orchestrator，避免后台 AgentRun 丢失 tenant；`steward.py` 为 plans、slot-decisions、runtime-decisions、plans/stream 注入认证用户，用登录态覆盖 payload 身份字段，并补充会话归属校验和申请候选单租户过滤；对应测试覆盖未认证、空 tenant、伪造 tenant、跨租户会话及候选单隔离。
  - 操作：所有静态检查和测试均在 Docker 容器 `local-x-financial-linux` 的 `/app` 下执行；没有修改 commercial、迁移、连接器、AI 发布或 Savings 代码，也没有提交或推送。
  - 验证：容器内定向 pytest 两组共 54 项通过；Ruff 排除目标旧文件既有 E501 长行后全部规则通过。完整 Ruff 仍报告目标旧文件历史 E501，不涉及本次新增安全逻辑。
  - 影响：后台报销任务不再因漏传登录态落入缺失/default tenant；四类 Steward AI 入口统一要求登录，客户端伪造 tenant、用户或权限字段不能覆盖服务端身份，跨租户会话和申请候选单读取会 fail-closed。
