using NodaTime; namespace FictionArchive.Service.Shared.MassTransit.Contracts; /// /// Published by sagas on state transitions for centralized job tracking /// public record JobStateChangedEvent : IEvent { public Guid JobId { get; init; } public required string JobType { get; init; } public required string FromState { get; init; } public required string ToState { get; init; } public string? Message { get; init; } public string? Error { get; init; } public Instant Timestamp { get; init; } public Dictionary? Metadata { get; init; } }