State check becomes stale across await
Rule ID: concurrency.state-freshness-across-suspension@1.0.0. Availability below refers to source-scan at product 524fa07e.
V-ASYNC-01 — State check becomes stale across await#
State check becomes stale across await. It examines task ordering, suspension, cancellation, progress, and async obligations.
Availability#
Not available in source-scan. There is no source-scan flag to activate this condition.
A separate experimental source preview recognizes a limited local pattern for this condition:
"$ANALYZER" experimental-scan <path> --rule async.actor-state-check-before-await --format jsonUse the terminal from Installation, with ANALYZER set, and replace <path> with a Swift file or directory. This preview is not compiler-backed source-scan coverage.
Example and action#
Illustrative pattern only. This is not a complete runnable package or a reproduced source-scan result. Helper APIs and omitted context must be supplied by the application.
guard balance >= amount else { return }
await authorize()
balance -= amountMake the lifecycle or state transition explicit. Review cancellation, suspension and error paths before applying the illustrative change.
await authorize()
guard balance >= amount else { return }
balance -= amountIntended analysis#
Intended reasoning: Follow the relevant state, task or synchronization events across control-flow and suspension boundaries. The intended decision needs the complete event ordering and the operation contract; opaque events can leave the result unknown. Required evidence: task, suspension, cancellation, ordering, and progress facts
Assumptions and unknown#
The relevant facts must be admitted for the selected immutable build world. Unknown aliases, external effects, unsupported source forms or incomplete consumers can prevent a conclusion. Availability in this workflow is stated above; the illustration does not expand that availability.
Evidence and interpretation#
The target catalog describes the intended condition. It is not evidence of an active source-scan diagnostic.
Historical evidence at 4558458d: recovery-required (historical qualification is incomplete and needs further evidence). That evidence has not been requalified for this product revision.
How we validate checks explains the evidence boundary. Foundations separates method assumptions from implementation claims.