> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encorekit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# outcomes

> AsyncStream of every placement resolution, for passive observers

`Encore.shared.outcomes` is an `AsyncStream` that every placement resolution lands on, plus late events. Use it for anything that wants to watch results without owning a call site: analytics forwarding, a debug overlay, cross-screen state. Control flow at the call site should use the result returned by [`show()`](./placement) instead.

## Signature

```swift theme={null}
@MainActor
public var outcomes: AsyncStream<PlacementOutcome> { get }

public enum PlacementOutcome: Sendable {
    /// A placement resolved. Yielded for every show(), including .notPresented outcomes.
    case presentation(placementId: String, result: PresentationResult)
    /// A strict-unlock claim verified after its flow ended, possibly on a later launch.
    case strictUnlockVerified(transactionId: String)
}
```

Each access to `outcomes` returns an independent stream; any number of observers can listen concurrently.

## Usage

```swift theme={null}
.task {
    for await outcome in Encore.shared.outcomes {
        switch outcome {
        case .presentation(let placementId, let result):
            analytics.log("encore_outcome", placementId, "\(result)")
        case .strictUnlockVerified(let transactionId):
            // Entitlements are already refreshed; gate on isActive / isActivePublisher.
            print("late verification for \(transactionId)")
        }
    }
}
```

## Late strict-unlock verification

With `unlock: .strict`, a claim that ends unverified persists across process death. When verification completes later, possibly on a subsequent launch, entitlements are refreshed first and then `.strictUnlockVerified(transactionId:)` is emitted. The `transactionId` matches the `ClaimedOffer.transactionId` recorded on the original result, so you can join the two events.

## Related

* [PresentationResult](./presentation-result), the payload of `.presentation` events.
* [isActivePublisher()](./is-active-publisher), the reactive entitlement state to gate UI on.
