You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* fix(automation,objectql,spec): attribute runAs:'system' flow writes as svc:flow:<name> in the audit log (#4366)
A runAs:'system' flow's data writes carried no attribution: the run context
resolved to { isSystem: true } with no userId and no service principal, so
the audit writer recorded user_id=null, actor=null and the record-history UI
rendered "Unknown user". The svc:* channel (ADR-0014 D2,
ExecutionContext.actor) existed for exactly this writer class but was never
wired end-to-end:
- service-automation: resolveRunContext stamps flowName alongside
runAs/flowRunId; resolveRunDataContext labels a system run's data context
actor: 'svc:flow:<flowName>' (fallback svc:flow:automation).
- objectql: buildSession propagates ExecutionContext.actor onto the hook
session — without this hop the audit writer's `userId ?? session.actor`
fallback was unreachable from the engine path.
- spec: AutomationContext.flowName (engine-stamped provenance) and the hook
session's optional `actor` field document the contract.
userId still wins wherever present; the label is attribution only — no
security middleware keys on it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(approvals,spec): structured reassign hand-off parties on sys_approval_action (#4365)
A reassign's audit row encoded "who handed the slot to whom" only inside a
default free-text comment — "<from_id> → <to_id>", two raw user ids — which
clients could neither parse reliably nor render readably.
- sys_approval_action gains reassign_from / reassign_to
(lookup('sys_user')), written by ApprovalService.reassign().
- comment is pure user input again: nothing is invented when the actor
supplies none.
- listActions() resolves both parties' display names into
reassign_from_name / reassign_to_name alongside actor_name, so timelines
render "from A to B" without extra lookups.
- ApprovalActionRow (spec contract) declares the four new fields; i18n
bundles regenerated with zh-CN/ja-JP/es-ES translations.
Pre-existing rows keep their legacy comment; clients should prefer the
structured fields and fall back to comment otherwise.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
0 commit comments