Skip to content

ADR-0118:平台级「非用户 actor」契约 —— null 表示 / fail-closed / 显式 isSystem(#4556 #2991 #4560 #3166 的对齐规范) #4608

Closed

Description

@os-zhuang

维护者 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)

  1. D1 表示法:用户 lookup 列中系统 actor = null;不造魔法账号(sys_user 归 better-auth 管,ADR-0092)、不存哨兵;UI 渲染「系统」是渲染规则不是数据。
  2. D2 授权:缺 actor 一律 fail-closed(匿名、RLS 开、什么都看不见),isSystem: true 是唯一显式提权入口。
  3. D3 传播:系统上下文只在入口点(boot/迁移/调度器/生命周期扫描)显式构造,跨异步边界显式重建。
  4. D5 归因:actor 二分(用户/系统);「哪个自动化」由 flow run id / job 名等关联字段回答,不设 actor_kind。
  5. D6 非目标:不动 owner_id(ownership 轴);不做多态 actor 引用。

交付物:docs/adr/0118-non-user-actor-contract.md。

Activity

  1. self-assigned this
    on Aug 2, 2026
  2. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    认领:本 session 开始起草 ADR。

    • Session: claude/code/session_01PRJtkgUAaVG11FsJQbvZWA
    • Branch: claude/v17-protocol-changes-ubk7pk

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentation

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions