Record write-once builds against repeated reads and report the cache state.

write-once value A coordination report can record how a write-once value is shared. A nil cache slot is filled on the first read by a `build` step that bumps a build counter, and every later read finds the slot already set and reuses the one cached value, so the initializer runs at most once. This scalar cache models the write-once guarantee deterministically, since Swift has no top-level lazy primitive that the trace bridge can record cleanly. With no reads the slot stays unset, with one read it is set, and with repeated reads it is locked to the single build. The status line summarizes the state while the build counter confirms one build.

Once Value Coordination Report

reads
once_value_coordination_report.swift
Replay: real traced execution (multi-file project)
let reads = 1
var cached: Int? = nil
var builds = 0
var served = 0

func build() -> Int {
    builds += 1
    return 7
}

for _ in 0..<reads {
    if cached == nil {
        cached = build()
    }
    if let value = cached, value > 0 {
        served += 1
    }
}

var status = "set"
if builds == 0 {
    status = "unset"
}
if served > 1 {
    status = "locked"
}

let line = "reads=\(reads) served=\(served) builds=\(builds) \(status)"

print(line)
let reads = 0
var cached: Int? = nil
var builds = 0
var served = 0

func build() -> Int {
    builds += 1
    return 7
}

for _ in 0..<reads {
    if cached == nil {
        cached = build()
    }
    if let value = cached, value > 0 {
        served += 1
    }
}

var status = "set"
if builds == 0 {
    status = "unset"
}
if served > 1 {
    status = "locked"
}

let line = "reads=\(reads) served=\(served) builds=\(builds) \(status)"

print(line)
let reads = 2
var cached: Int? = nil
var builds = 0
var served = 0

func build() -> Int {
    builds += 1
    return 7
}

for _ in 0..<reads {
    if cached == nil {
        cached = build()
    }
    if let value = cached, value > 0 {
        served += 1
    }
}

var status = "set"
if builds == 0 {
    status = "unset"
}
if served > 1 {
    status = "locked"
}

let line = "reads=\(reads) served=\(served) builds=\(builds) \(status)"

print(line)
  1. reads ← 1, cached ← nil, builds ← 0, served ← 0

    1let reads→ 1 = 1  //@reads=0, 22var cached→ nil: Int? = nil3var builds→ 0 = 04var served→ 0 = 0
  2. for _ in 0..<reads

    11for _ in 0..<reads1 {12    if cached == nil {
  3. if cached == nil

    11for _ in 0..<reads {12    if cachednil == nil {13        cached = build()14    }
  4. builds ← 1

    6func build() -> Int {7    builds→ 1 += 18    return 79}
  5. if let value = cached, value > 0

    14}15if let value7 = cachedOptional(7), value > 0 {16    served0 += 117}
  6. status ← set, line ← reads=1 served=1 builds=1 set

    20var status→ set = "set"21if builds == 0 {22    status = "unset"23}24if served > 1 {25    status = "locked"26}2728let line→ reads=1 served=1 builds=1 set = "reads=\(reads1) served=\(served1) builds=\(builds1) \(statusset)"2930print(linereads=1 served=1 builds=1 set)
    outputreads=1 served=1 builds=1 set
  1. reads ← 0, cached ← nil, builds ← 0, served ← 0, status ← set

    1let reads→ 0 = 02var cached→ nil: Int? = nil3var builds→ 0 = 04var served→ 0 = 056func build() -> Int {7    builds += 18    return 79}1011for _ in 0..<reads {12    if cached == nil {13        cached = build()14    }15    if let value = cached, value > 0 {16        served += 117    }18}1920var status→ set = "set"21if builds == 0 {
  2. if builds == 0

    20var status = "set"21if builds0 == 0 {22    status = "unset"23}
  3. line ← reads=0 served=0 builds=0 unset

    28let line→ reads=0 served=0 builds=0 unset = "reads=\(reads0) served=\(served0) builds=\(builds0) \(statusunset)"2930print(linereads=0 served=0 builds=0 unset)
    outputreads=0 served=0 builds=0 unset
  1. reads ← 2, cached ← nil, builds ← 0, served ← 0

    1let reads→ 2 = 22var cached→ nil: Int? = nil3var builds→ 0 = 04var served→ 0 = 0
  2. for _ in 0..<reads

    pass 1 of 2
    11for _ in 0..<reads2 {12    if cached == nil {
  3. if cached == nil

    11for _ in 0..<reads {12    if cachednil == nil {13        cached = build()14    }
  4. builds ← 1

    6func build() -> Int {7    builds→ 1 += 18    return 79}
  5. if let value = cached, value > 0

    pass 1 of 2
    14}15if let value7 = cachedOptional(7), value > 0 {16    served0 += 117}
  6. for _ in 0..<reads

    pass 2 of 2
    11for _ in 0..<reads2 {12    if cached == nil {
  7. if let value = cached, value > 0

    pass 2 of 2
    14}15if let value7 = cachedOptional(7), value > 0 {16    served1 += 117}
  8. status ← set

    20var status→ set = "set"21if builds == 0 {
  9. if served > 1

    23}24if served2 > 1 {25    status = "locked"26}
  10. line ← reads=2 served=2 builds=1 locked

    28let line→ reads=2 served=2 builds=1 locked = "reads=\(reads2) served=\(served2) builds=\(builds1) \(statuslocked)"2930print(linereads=2 served=2 builds=1 locked)
    outputreads=2 served=2 builds=1 locked