namespace Aging.ResourceContracts { public enum OperationState { Succeeded, Failed, /// 栅栏校验失败:Grant 的 epoch/generation 已失效(含 Broker 重启)。 RejectedStaleLease, /// INV-04 雏形:客户端 configHash 与 Broker 生效配置不一致。 RejectedConfigMismatch, /// 会话队列满。 RejectedQueueFull, /// 已发送但结果未知(INV-06:禁止当未执行)。 Unknown } /// 一次有界设备动作(MVP=OneShot)。Grants 必须覆盖 resources。 public sealed class DeviceOperation { /// 白名单操作码,如 "CAN_SEND"/"CAN_RECV"/"CAN_AUTO_RESPONSE"/"CAN_STATUS"。 public string OperationCode { get; set; } = ""; public string ParametersJson { get; set; } = "{}"; public string IdempotencyKey { get; set; } = ""; public string ConfigHash { get; set; } = ""; public LeaseGrant[] Grants { get; set; } = new LeaseGrant[0]; public long DeadlineUtcMs { get; set; } } public sealed class OperationResult { public string RequestId { get; set; } = ""; public OperationState State { get; set; } public string ErrorCode { get; set; } = ""; public string ReadbackJson { get; set; } = "{}"; public long ServerEpoch { get; set; } } }