feat(audit): ScriptTrace channel + RouteCall/ScriptRun/AttributeWrite/AttributeWait kinds

Flow Debugger (design 2026-09-05 §5.1): trace steps are audit rows. New
AuditChannel.ScriptTrace appended after Cluster and four kinds appended after
ManualFailover so stored ordinals never move; lock-in tests + alog.md §4 updated.

Claude-Session: https://claude.ai/code/session_01GSLkkHKz9JrAtmJjmQK3cP
This commit is contained in:
Joseph Doherty
2026-09-05 23:41:50 -04:00
parent 61d1785fcb
commit 352e0bfa37
5 changed files with 62 additions and 6 deletions
@@ -21,5 +21,13 @@ public enum AuditChannel
/// restarted the active node, which is exactly the kind of act an audit log exists to
/// attribute. (decision 2026-07-22)
/// </summary>
Cluster
Cluster,
/// <summary>
/// Flow Debugger trace rows (design 2026-09-05): a script run, an attribute write, an
/// attribute wait or a central route call, emitted only for traced executions
/// (plus the always-on <see cref="AuditKind.RouteCall"/>). Appended last so stored
/// ordinals of existing channels never move.
/// </summary>
ScriptTrace
}
@@ -49,5 +49,17 @@ public enum AuditKind
/// is issued (the acting node is usually not the one that goes away, but the audit must
/// survive either outcome). (decision 2026-07-22)
/// </summary>
ManualFailover
ManualFailover,
/// <summary>Central <c>Route.To().Call</c> round-trip (always-on; <see cref="AuditChannel.ScriptTrace"/> channel).</summary>
RouteCall,
/// <summary>One site script run completed/failed/timed out (traced executions only; <see cref="AuditChannel.ScriptTrace"/>).</summary>
ScriptRun,
/// <summary>One attribute write or batch write made by a traced script (traced executions only; <see cref="AuditChannel.ScriptTrace"/>).</summary>
AttributeWrite,
/// <summary>One <c>WaitAsync</c>/<c>WaitForAsync</c> outcome in a traced script (traced executions only; <see cref="AuditChannel.ScriptTrace"/>).</summary>
AttributeWait
}