Stop processing a fixed batch once a scalar abort threshold is reached and report the final state.

abort flag This report models cancellation as a scalar abort flag rather than a live signal object, so the stopping point traces deterministically.

Abort Flag Coordination Report

limit
abort_flag_coordination.js
Replay: real traced execution (multi-file project)
const limit = 5;
let processed = 0;
let aborted = false;

function coordinate(threshold) {
    const batchSize = 6;
    while (processed < batchSize) {
        if (processed >= threshold) {
            aborted = true;
            break;
        }
        processed += 1;
    }
    let outcome = "complete";
    if (aborted && processed >= 3) {
        outcome = "aborted";
    } else if (aborted) {
        outcome = "halted";
    }
    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);
}

coordinate(limit);
const limit = 2;
let processed = 0;
let aborted = false;

function coordinate(threshold) {
    const batchSize = 6;
    while (processed < batchSize) {
        if (processed >= threshold) {
            aborted = true;
            break;
        }
        processed += 1;
    }
    let outcome = "complete";
    if (aborted && processed >= 3) {
        outcome = "aborted";
    } else if (aborted) {
        outcome = "halted";
    }
    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);
}

coordinate(limit);
const limit = 8;
let processed = 0;
let aborted = false;

function coordinate(threshold) {
    const batchSize = 6;
    while (processed < batchSize) {
        if (processed >= threshold) {
            aborted = true;
            break;
        }
        processed += 1;
    }
    let outcome = "complete";
    if (aborted && processed >= 3) {
        outcome = "aborted";
    } else if (aborted) {
        outcome = "halted";
    }
    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);
}

coordinate(limit);
  1. limit ← 5, processed ← 0, aborted ← false

    1const limit→ 5 = 5;  //@limit=2, 82let processed→ 0 = 0;3let aborted→ false = false;45function coordinate(threshold) {6    const batchSize = 6;7    while (processed < batchSize) {8        if (processed >= threshold) {9            aborted = true;10            break;11        }12        processed += 1;13    }14    let outcome = "complete";15    if (aborted && processed >= 3) {16        outcome = "aborted";17    } else if (aborted) {18        outcome = "halted";19    }20    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);21}2223coordinate(limit5);
  2. batchSize ← 6

    2let processed = 0;3let aborted = false;45function coordinate(threshold5) {6    const batchSize→ 6 = 6;7    while (processed < batchSize) {
  3. processed ← 1

    pass 1 of 6
    5function coordinate(threshold) {6    const batchSize = 6;7    while (processed0 < batchSize6) {8        if (processed >= threshold) {9            aborted = true;10            break;11        }12        processed += 1;13    }
    All 6 passes — pass 1 is the card above
    passthresholdprocessed
    10 1
    21 2
    32 3
    43 4
    54 5
    655
  4. if (processed >= threshold)

    6const batchSize = 6;7while (processed < batchSize) {8    if (processed5 >= threshold5) {9        aborted = true;10        break;11    }
  5. outcome ← complete

    12    processed += 1;13}14let outcome→ complete = "complete";15if (aborted && processed >= 3) {
  6. if (aborted && processed >= 3)

    13}14let outcome = "complete";15if (abortedtrue && processed5 >= 3) {16    outcome = "aborted";17} else if (aborted) {
  7. console.log(`limit=${threshold} processed=${processed} aborted=${abort…

    18        outcome = "halted";19    }20    console.log(`limit=${threshold5} processed=${processed5} aborted=${abortedtrue} status=${outcomeaborted}`);21}
    outputlimit=5 processed=5 aborted=true status=aborted
  8. coordinate(limit);

    20    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);21}2223coordinate(limit5);
  1. limit ← 2, processed ← 0, aborted ← false

    1const limit→ 2 = 2;2let processed→ 0 = 0;3let aborted→ false = false;45function coordinate(threshold) {6    const batchSize = 6;7    while (processed < batchSize) {8        if (processed >= threshold) {9            aborted = true;10            break;11        }12        processed += 1;13    }14    let outcome = "complete";15    if (aborted && processed >= 3) {16        outcome = "aborted";17    } else if (aborted) {18        outcome = "halted";19    }20    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);21}2223coordinate(limit2);
  2. batchSize ← 6

    2let processed = 0;3let aborted = false;45function coordinate(threshold2) {6    const batchSize→ 6 = 6;7    while (processed < batchSize) {
  3. processed ← 1

    pass 1 of 3
    5function coordinate(threshold) {6    const batchSize = 6;7    while (processed0 < batchSize6) {8        if (processed >= threshold) {9            aborted = true;10            break;11        }12        processed += 1;13    }
    All 3 passes — pass 1 is the card above
    passthresholdprocessed
    10 1
    21 2
    322
  4. if (processed >= threshold)

    6const batchSize = 6;7while (processed < batchSize) {8    if (processed2 >= threshold2) {9        aborted = true;10        break;11    }
  5. outcome ← complete

    12    processed += 1;13}14let outcome→ complete = "complete";15if (aborted && processed >= 3) {
  6. if (aborted)

    16    outcome = "aborted";17} else if (abortedtrue) {18    outcome = "halted";19}
  7. console.log(`limit=${threshold} processed=${processed} aborted=${abort…

    18        outcome = "halted";19    }20    console.log(`limit=${threshold2} processed=${processed2} aborted=${abortedtrue} status=${outcomehalted}`);21}
    outputlimit=2 processed=2 aborted=true status=halted
  8. coordinate(limit);

    20    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);21}2223coordinate(limit2);
  1. limit ← 8, processed ← 0, aborted ← false

    1const limit→ 8 = 8;2let processed→ 0 = 0;3let aborted→ false = false;45function coordinate(threshold) {6    const batchSize = 6;7    while (processed < batchSize) {8        if (processed >= threshold) {9            aborted = true;10            break;11        }12        processed += 1;13    }14    let outcome = "complete";15    if (aborted && processed >= 3) {16        outcome = "aborted";17    } else if (aborted) {18        outcome = "halted";19    }20    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);21}2223coordinate(limit8);
  2. batchSize ← 6

    2let processed = 0;3let aborted = false;45function coordinate(threshold8) {6    const batchSize→ 6 = 6;7    while (processed < batchSize) {
  3. processed ← 1

    pass 1 of 6
    5function coordinate(threshold) {6    const batchSize = 6;7    while (processed0 < batchSize6) {8        if (processed >= threshold) {9            aborted = true;10            break;11        }12        processed += 1;13    }
    All 6 passes — pass 1 is the card above
    passprocessed
    10 1
    21 2
    32 3
    43 4
    54 5
    65 6
  4. outcome ← complete

    12        processed += 1;13    }14    let outcome→ complete = "complete";15    if (aborted && processed >= 3) {16        outcome = "aborted";17    } else if (aborted) {18        outcome = "halted";19    }20    console.log(`limit=${threshold8} processed=${processed6} aborted=${abortedfalse} status=${outcomecomplete}`);21}
    outputlimit=8 processed=6 aborted=false status=complete
  5. coordinate(limit);

    20    console.log(`limit=${threshold} processed=${processed} aborted=${aborted} status=${outcome}`);21}2223coordinate(limit8);