Files
Neo-ZQYY/docs/audit
Neo 421e193041 fix(ai): F1-5a 沙箱 batch-run 接入 runtime_context (W1 / 阶段 A 主体)
Neo F1-5 反馈: "让沙箱起到其真正的作用. 真正的模拟日期, 仅能看到沙箱设定日期
及之前日期的数据, 并运行 AI 的各个业务."

调研发现 (4 个并行子代理): batch-run 端点 _run_batch 是空壳 stub
(只 logger.info, 实际不跑 AI), GUC apply_runtime_session_vars 0 处调用
(dead code), 7 张业务表 6 张有 runtime 复合索引唯独 ai_run_logs 漏建,
App2/2a 3 行 _calc_date_range 漏传 ref_date.

本 commit (F1-5a 阶段 A 主体, F1-5b 后续完整 zqyy_app RLS 视图层):

后端核心:
- admin_service.py: _run_batch 真实化 (Semaphore(5)+asyncio.gather+
  return_exceptions=True+ctx_snapshot 防漂移); estimate 入口抓
  RuntimeContext 快照, confirm 取出传给 worker
- admin_ai.py: confirm_batch_run lazy 注入 dispatcher
- admin_service.retry_trigger_job: INSERT 落 runtime_mode +
  sandbox_instance_id 列 (用 runtime_insert_columns helper)
- runtime_context.py: get_runtime_context 加 bind_to_session 参数,
  激活 GUC app.current_business_date / app.current_runtime_mode
- run_log_service.create_log: 启用 bind_to_session=True 试点

App2/2a 3 行 ref_date 修复:
- app2_finance_prompt.py:817 储值卡余额变化板块
- app2_finance_prompt.py:841 日粒度 series + 异常检测窗口
- app2a_finance_area_prompt.py:466 区域日粒度 series

DB:
- migrations/20260505__ai_run_logs_runtime_index.sql:
  补 (site_id, runtime_mode, sandbox_instance_id, created_at DESC) 复合索引

前端:
- AIOperations.tsx: 顶部加 sandbox 模式提示条 (Alert 显示 sandbox_date +
  sandbox_instance_id + 影响范围 + 切回 live 入口)

未做 (留 F1-5b 完整 zqyy_app RLS 视图层一并):
- B1 admin_service 6 处 CURRENT_DATE -> business_date
- B2 fdw_queries 异常分支兜底
- GUC 完整传递 (fdw_queries / page_context 等)
- 测试 3 套 (.gitignore:71 排除, F2-2 入仓时 commit)
- P20 SPEC \xa76/\xa710/\xa711/\xa715 (F1-5b 完整收口后同步更准确)

Neo 决策: docs/_overview/wave1-findings/F1-5-impl-decisions.md

详见 docs/audit/changes/2026-05-05__wave1_f1_5a_sandbox_batch_run.md
2026-05-05 03:01:48 +08:00
..

审计目录docs/audit/

项目级统一审计落地点。所有模块ETL、后端、小程序、管理后台等的审计产物均写入此目录。

子目录与文件

目录/文件 说明
changes/ AI 逐次变更审计记录(<YYYY-MM-DD>__<slug>.md
prompt_logs/ Prompt 日志文件(每次 prompt 生成一个独立文件,按时间戳命名)
session_logs/ 全量会话记录(按 YYYY-MM/DD/ 分层),含双索引和 LLM 操作摘要。详见 SESSION-LOG-GUIDE.md
audit_dashboard.md 审计一览表(自动生成,勿手动编辑)
SESSION-LOG-GUIDE.md Session 日志使用指南(索引字段、查询方法、典型场景)

维护约定

  • prompt_logs/prompt-audit-log Hook 自动管理,请勿手动编辑
  • session_logs/agentStop Hook 自动提取,索引由提取脚本自动更新
  • audit_dashboard.md/audit 流程自动刷新,也可通过 python scripts/audit/gen_audit_dashboard.py 手动重新生成
  • 变更审计记录由 /audit 流程audit-writer 子代理)生成,包含 session_id 字段与 Session 日志双向关联
  • 历史记录(迁移前 ETL 子项目的审计)已合并至此目录

审计追溯链

Prompt 日志 ←→ Session 日志 ←→ 变更审计记录
(用户说了什么)   (AI 做了什么)   (正式变更文档)

通过 Prompt-ID 和 Session-ID 可在三者之间双向追溯。详见 SESSION-LOG-GUIDE.md