Skip to content

[automation/audit] runAs:'system' 流回写的审计行无归因(user_id/actor 双空),console 历史显示「未知用户」 #4366

Closed

Description

@baozhoutao

现象

审批流(runAs:'system')自动回写业务记录(如镜像「当前审批节点」字段)后,记录详情「历史」页签里这些 UPDATE 条目显示 「未知用户」+ "?" 头像,和真实用户条目交错出现。下游业务用户的原话:「历史中的未知用户,是指系统吗?」——看起来像数据错乱,而不是系统自动化。

根因链

  1. packages/services/service-automation/src/runtime-identity.ts:runAs:'system' 解析为 { isSystem: true } —— 不带 userId,也没有放 actor 服务主体。
  2. packages/plugins/plugin-audit/src/audit-writers.ts writeAudit():user_id = sess.userId ?? null;归因回退读 sess.actor(ADR-0014 D2 专门为非用户写入准备的 svc:* 通道)。流引擎没设 actor,于是审计行 user_id=null、actor=null,完全无归因。
  3. console RecordDetailView 历史归因链(user 目录解析 → actor 列回退)全落空 → HistoryTimeline 渲染 unknownUserText(「未知用户」)。

即:audit 侧的服务主体归因通道是现成的,流引擎在 system 上下文里漏了标注自己。

建议

  • framework:流引擎构造 runAs:'system' 数据上下文时带上服务主体 actor,如 svc:flow:<flowName>(或至少 svc:automation),现有 audit writer 无需改动即可归因;顺带 flowRunId 已在 context 上,可进 actor 标签方便追查是哪次运行写的。
  • console(锦上添花):把 svc:*/system 主体渲染成本地化的「系统」徽标而非裸主体串——RecordDetailView.tsx L1442 已有 detail.systemActor(默认 'System')的先例,历史时间线可复用。

版本 / 下游

  • @objectstack/*@17.0.0-rc.0
  • 下游项目 steedos-labs/os-project-titanwind-ehr#662(有截图)

Activity

  1. self-assigned this
    on Jul 31, 2026
  2. added a commit that references this issue on Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions