Let a boolean guard claim a single owner and report how many of the contending claims were granted.

guard flag A guard flag grants the first claim and blocks the rest, so the granted count and owner stay deterministic scalars.

Guard Flag Coordination Report

claims
guard_flag_coordination.js
Replay: real traced execution (multi-file project)
const claims = 2;
let owner = "none";
let granted = 0;
let blocked = 0;

function coordinate(count) {
    let claimed = false;
    for (let i = 1; i <= count; i++) {
        if (!claimed) {
            claimed = true;
            owner = "task" + i;
            granted += 1;
        } else {
            blocked += 1;
        }
    }
    let outcome = "open";
    if (granted >= 1 && blocked >= 1) {
        outcome = "contended";
    } else if (granted >= 1) {
        outcome = "held";
    }
    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);
}

coordinate(claims);
const claims = 0;
let owner = "none";
let granted = 0;
let blocked = 0;

function coordinate(count) {
    let claimed = false;
    for (let i = 1; i <= count; i++) {
        if (!claimed) {
            claimed = true;
            owner = "task" + i;
            granted += 1;
        } else {
            blocked += 1;
        }
    }
    let outcome = "open";
    if (granted >= 1 && blocked >= 1) {
        outcome = "contended";
    } else if (granted >= 1) {
        outcome = "held";
    }
    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);
}

coordinate(claims);
const claims = 1;
let owner = "none";
let granted = 0;
let blocked = 0;

function coordinate(count) {
    let claimed = false;
    for (let i = 1; i <= count; i++) {
        if (!claimed) {
            claimed = true;
            owner = "task" + i;
            granted += 1;
        } else {
            blocked += 1;
        }
    }
    let outcome = "open";
    if (granted >= 1 && blocked >= 1) {
        outcome = "contended";
    } else if (granted >= 1) {
        outcome = "held";
    }
    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);
}

coordinate(claims);
  1. claims ← 2, owner ← none, granted ← 0, blocked ← 0

    1const claims→ 2 = 2;  //@claims=0, 12let owner→ none = "none";3let granted→ 0 = 0;4let blocked→ 0 = 0;56function coordinate(count) {7    let claimed = false;8    for (let i = 1; i <= count; i++) {9        if (!claimed) {10            claimed = true;11            owner = "task" + i;12            granted += 1;13        } else {14            blocked += 1;15        }16    }17    let outcome = "open";18    if (granted >= 1 && blocked >= 1) {19        outcome = "contended";20    } else if (granted >= 1) {21        outcome = "held";22    }23    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims2);
  2. claimed ← false

    3let granted = 0;4let blocked = 0;56function coordinate(count2) {7    let claimed→ false = false;8    for (let i = 1; i <= count; i++) {
  3. for (let i = 1; i <= count; i++)

    pass 1 of 2
    6function coordinate(count) {7    let claimed = false;8    for (let i1 = 1; i <= count2; i++) {9        if (!claimed) {
  4. if (!claimed)

    7let claimed = false;8for (let i = 1; i <= count; i++) {9    if (!claimedfalse) {10        claimed = true;11        owner = "task" + i1;12        granted += 1;13    } else {
  5. for (let i = 1; i <= count; i++)

    pass 2 of 2
    6function coordinate(count) {7    let claimed = false;8    for (let i2 = 1; i <= count2; i++) {9        if (!claimed) {
  6. outcome ← open

    15    }16}17let outcome→ open = "open";18if (granted >= 1 && blocked >= 1) {
  7. if (granted >= 1 && blocked >= 1)

    16}17let outcome = "open";18if (granted1 >= 1 && blocked1 >= 1) {19    outcome = "contended";20} else if (granted >= 1) {
  8. console.log(`claims=${count} granted=${granted} blocked=${blocked} own…

    21        outcome = "held";22    }23    console.log(`claims=${count2} granted=${granted1} blocked=${blocked1} owner=${ownertask1} status=${outcomecontended}`);24}
    outputclaims=2 granted=1 blocked=1 owner=task1 status=contended
  9. coordinate(claims);

    23    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims2);
  1. claims ← 0, owner ← none, granted ← 0, blocked ← 0

    1const claims→ 0 = 0;2let owner→ none = "none";3let granted→ 0 = 0;4let blocked→ 0 = 0;56function coordinate(count) {7    let claimed = false;8    for (let i = 1; i <= count; i++) {9        if (!claimed) {10            claimed = true;11            owner = "task" + i;12            granted += 1;13        } else {14            blocked += 1;15        }16    }17    let outcome = "open";18    if (granted >= 1 && blocked >= 1) {19        outcome = "contended";20    } else if (granted >= 1) {21        outcome = "held";22    }23    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims0);
  2. claimed ← false, outcome ← open

    3let granted = 0;4let blocked = 0;56function coordinate(count0) {7    let claimed→ false = false;8    for (let i = 1; i <= count; i++) {9        if (!claimed) {10            claimed = true;11            owner = "task" + i;12            granted += 1;13        } else {14            blocked += 1;15        }16    }17    let outcome→ open = "open";18    if (granted >= 1 && blocked >= 1) {19        outcome = "contended";20    } else if (granted >= 1) {21        outcome = "held";22    }23    console.log(`claims=${count0} granted=${granted0} blocked=${blocked0} owner=${ownernone} status=${outcomeopen}`);24}
    outputclaims=0 granted=0 blocked=0 owner=none status=open
  3. coordinate(claims);

    23    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims0);
  1. claims ← 1, owner ← none, granted ← 0, blocked ← 0

    1const claims→ 1 = 1;2let owner→ none = "none";3let granted→ 0 = 0;4let blocked→ 0 = 0;56function coordinate(count) {7    let claimed = false;8    for (let i = 1; i <= count; i++) {9        if (!claimed) {10            claimed = true;11            owner = "task" + i;12            granted += 1;13        } else {14            blocked += 1;15        }16    }17    let outcome = "open";18    if (granted >= 1 && blocked >= 1) {19        outcome = "contended";20    } else if (granted >= 1) {21        outcome = "held";22    }23    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims1);
  2. claimed ← false

    3let granted = 0;4let blocked = 0;56function coordinate(count1) {7    let claimed→ false = false;8    for (let i = 1; i <= count; i++) {
  3. for (let i = 1; i <= count; i++)

    6function coordinate(count) {7    let claimed = false;8    for (let i1 = 1; i <= count1; i++) {9        if (!claimed) {
  4. if (!claimed)

    7let claimed = false;8for (let i = 1; i <= count; i++) {9    if (!claimedfalse) {10        claimed = true;11        owner = "task" + i1;12        granted += 1;13    } else {
  5. outcome ← open

    15    }16}17let outcome→ open = "open";18if (granted >= 1 && blocked >= 1) {
  6. if (granted >= 1)

    19    outcome = "contended";20} else if (granted1 >= 1) {21    outcome = "held";22}
  7. console.log(`claims=${count} granted=${granted} blocked=${blocked} own…

    21        outcome = "held";22    }23    console.log(`claims=${count1} granted=${granted1} blocked=${blocked0} owner=${ownertask1} status=${outcomeheld}`);24}
    outputclaims=1 granted=1 blocked=0 owner=task1 status=held
  8. coordinate(claims);

    23    console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims1);