namespace ZB.MOM.WW.OtOpcUa.Core.Abstractions;

/// <summary>
///     Opts a tag-definition record into auto-retry on <see cref="IWritable.WriteAsync"/> failures.
///     Absence of this attribute means writes are <b>not</b> retried — a timed-out write may have
///     already succeeded at the device, and replaying pulses, alarm acks, counter increments, or
///     recipe-step advances can duplicate irreversible field actions.
/// </summary>
/// <remarks>
///     Per <c>docs/v2/plan.md</c> decisions #44, #45, and #143. Applied to tag-definition POCOs
///     (e.g. <c>ModbusTagDefinition</c>, <c>S7TagDefinition</c>, OPC UA client tag rows) at the
///     property or record level. The <c>CapabilityInvoker</c> in <c>ZB.MOM.WW.OtOpcUa.Core.Resilience</c>
///     reads this attribute via reflection once at driver-init time and caches the result; no
///     per-write reflection cost.
/// </remarks>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = true)]
public sealed class WriteIdempotentAttribute : Attribute
{
}
