维护者 2026-08-02 裁决(按四轴框架:长远合理性 / 防 AI 静默犯错 / 实际业务 / 不扩边界):四处现场各自发明「系统在操作」的表示法,需要一份平台级 ADR 统一,在 #4556 / #2991 派发前定稿,让执行 PR 照同一张图纸施工。
四个现场(执行项)
| 现场 | 现状 | ADR 决策 |
|---|
#4556sys_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:框架令牌永不下沉存储层 |
#3166isSystem | 引擎惯例成立但自愿声明 | 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。