Every attribute Trax reads, and what each one changes. They all live in Trax.Effect.Attributes, in the Trax.Effect package, so a train library can carry them without referencing the API, scheduler or GraphQL packages that act on them.
using Trax.Effect.Attributes;[TraxMutation][TraxAuthorize(Roles = "Admin")][TraxConcurrencyLimit(10)]public class RefundOrderTrain : ServiceTrain<RefundInput, RefundResult>, IRefundOrderTrain { ... }public record RefundInput(long OrderId, [property: TraxSensitive] string ApprovalCode);