--- id: ORC-5 family: RT-ORC level: extended profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-orc/orc-5 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # ORC-5 — A strategy's capabilities are declared, not asked for *RT-ORC (Part II) · level: extended · profiles: runtime · added in 1.0* The declaration is the single source. A strategy that behaves statefully but does not declare it is treated as stateless, and the behaviours gated on the capability (checkpoint storage among them) are chosen accordingly. ## The rule > **Normative.** This is the rule. > > 1. A strategy declares its capabilities as part of its definition. > > 2. Whether a strategy is treated as stateful, and whether it is treated as synchronous, is determined from those declarations alone: stateful means the capability is declared, synchronous means synchronous execution is declared and stateful is not. > > 3. Behaviour that depends on a strategy's nature is gated on the declared capabilities and not on the strategy's identity. ## What it means Whether a strategy is treated as stateful comes only from its own declaration: nothing infers it from behaviour, and nothing infers it from which strategy it is. "Synchronous", as a capability query, means something narrower than "runs synchronously": it is the declared capability for synchronous execution *and* the absence of the stateful capability. State graph is synchronous in its mechanics, but it also declares itself stateful, so the synchronous query answers false for it — the two capabilities are read together, not as alternatives. A strategy with no declaration at all, or a declaration that carries no capabilities, answers every capability query the same way: false. There is no separate "unknown" outcome. ## Example Two strategy declarations, queried for the same two capabilities: ```json title="A definition declaring both capabilities" verdict="stateful" ["synchronous_execution", "stateful"] ``` ```json title="A definition declaring only one" verdict="synchronous" ["synchronous_execution"] ``` The first answers true for stateful and false for synchronous; the second answers the other way round. ## Related rules - Names: ORC-1 - Referenced by: ORC-1 --- 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.