维护者 2026-08-02 裁决(按四轴框架:长远合理性 / 防 AI 静默犯错 / 实际业务 / 不扩边界):四处现场各自发明「系统在操作」的表示法,需要一份平台级 ADR 统一,在 #4556 / #2991 派发前定稿,让执行 PR 照同一张图纸施工。
四个现场(执行项)
| 现场 |
现状 |
ADR 决策 |
#4556 sys_metadata_history.recorded_by |
lookup('sys_user') 存哨兵 'system' |
D1:系统 actor = null,列放宽可空,迁移存量 |
#2991 AI ToolExecutionContext |
契约文本已改 fail-closed(ai-service.ts:394-404),执行面待验证 |
D2:缺席 ≠ 系统,全平台规则 |
| #4560 SQL driver |
current_user 令牌下沉为列 DEFAULT |
D4:框架令牌永不下沉存储层 |
#3166 isSystem |
引擎惯例成立但自愿声明 |
D3:入口点显式构造,可检查化 |
决策要点(正文见 ADR)
- D1 表示法:用户 lookup 列中系统 actor =
null;不造魔法账号(sys_user 归 better-auth 管,ADR-0092)、不存哨兵;UI 渲染「系统」是渲染规则不是数据。
- D2 授权:缺 actor 一律 fail-closed(匿名、RLS 开、什么都看不见),
isSystem: true 是唯一显式提权入口。
- D3 传播:系统上下文只在入口点(boot/迁移/调度器/生命周期扫描)显式构造,跨异步边界显式重建。
- D5 归因:actor 二分(用户/系统);「哪个自动化」由 flow run id / job 名等关联字段回答,不设 actor_kind。
- D6 非目标:不动
owner_id(ownership 轴);不做多态 actor 引用。
交付物:docs/adr/0118-non-user-actor-contract.md。
维护者 2026-08-02 裁决(按四轴框架:长远合理性 / 防 AI 静默犯错 / 实际业务 / 不扩边界):四处现场各自发明「系统在操作」的表示法,需要一份平台级 ADR 统一,在 #4556 / #2991 派发前定稿,让执行 PR 照同一张图纸施工。
四个现场(执行项)
sys_metadata_history.recorded_bylookup('sys_user')存哨兵'system'ToolExecutionContextai-service.ts:394-404),执行面待验证current_user令牌下沉为列 DEFAULTisSystem决策要点(正文见 ADR)
null;不造魔法账号(sys_user归 better-auth 管,ADR-0092)、不存哨兵;UI 渲染「系统」是渲染规则不是数据。isSystem: true是唯一显式提权入口。owner_id(ownership 轴);不做多态 actor 引用。交付物:
docs/adr/0118-non-user-actor-contract.md。