--- id: RT-GATE-2 family: RT-GATE level: core profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-gate/rt-gate-2 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # RT-GATE-2 — Consent is consumed exactly once, declines included *RT-GATE (Part II) · level: core · profiles: runtime · added in 1.0* An approval authorises one execution. An agent loop re-issuing the same call is asked again every time, which is the point. ## The rule > **Normative.** This is the rule. > > 1. The first execution that finds a confirmed, hash-matching consent marks it consumed and proceeds; a second execution of the same call finds no unconsumed consent and asks again with a fresh interrupt. > > 2. A decline is consumed the same way, so a decline never re-fires. > > 3. Checking and consuming a consent must be atomic against concurrent execution of the same call: a copy of the consent read before the check began must never authorise a second execution. > > 4. An execution that loses that race pauses on the pending interrupt raised by the winner rather than raising a duplicate question; a contended entry and an unconsented one are distinct causes of the same pause. ## What it means An approval is not the only verdict that gets consumed exactly once. A consent that was declined, one whose question was cancelled, and one left to lapse all settle the same way as an approval: consumed the moment they are read, never re-fired on a later entry, and never mistaken for authorization either. What repeats is the question, not the answer — the same call, entered again, finds nothing left to reuse and pauses on a fresh question of its own. ## Example The same node, called again with arguments that have not changed at all: ```json title="A call already answered, entered again unchanged" verdict="paused" { "message": "send it", "level": "info" } ``` ## Related rules - Names: RT-GATE-1, RT-GATE-3 - Referenced by: RT-GATE-1, RT-GATE-3 --- Rule identifiers are permanent and are never renumbered. This specification carries no implementation status: each implementation publishes its own standing against these rules. Licensed CC BY 4.0.