Compare joined tasks against the needed quorum and turn the pending count into a release, wait, or escalate remediation action.

join quorum The needed quorum and joined count are scalars, so the pending work that drives the remediation action stays deterministic without awaiting live promises.

Promise All Remediation Report

taskCount
promise_all_remediation.js
Replay: real traced execution (multi-file project)
const taskCount = 3;
const needed = 3;

function remediate(count) {
    let joined = count;
    if (joined > needed) {
        joined = needed;
    }
    const pending = needed - joined;
    let action = "release";
    if (pending === 1) {
        action = "wait";
    } else if (pending >= 2) {
        action = "escalate";
    }
    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);
}

remediate(taskCount);
const taskCount = 0;
const needed = 3;

function remediate(count) {
    let joined = count;
    if (joined > needed) {
        joined = needed;
    }
    const pending = needed - joined;
    let action = "release";
    if (pending === 1) {
        action = "wait";
    } else if (pending >= 2) {
        action = "escalate";
    }
    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);
}

remediate(taskCount);
const taskCount = 2;
const needed = 3;

function remediate(count) {
    let joined = count;
    if (joined > needed) {
        joined = needed;
    }
    const pending = needed - joined;
    let action = "release";
    if (pending === 1) {
        action = "wait";
    } else if (pending >= 2) {
        action = "escalate";
    }
    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);
}

remediate(taskCount);
  1. taskCount ← 3, needed ← 3

    1const taskCount→ 3 = 3;  //@taskCount=2, 02const needed→ 3 = 3;34function remediate(count) {5    let joined = count;6    if (joined > needed) {7        joined = needed;8    }9    const pending = needed - joined;10    let action = "release";11    if (pending === 1) {12        action = "wait";13    } else if (pending >= 2) {14        action = "escalate";15    }16    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);17}1819remediate(taskCount3);
  2. joined ← 3, count ← 3, pending ← 0, needed ← 3, action ← release

    1const taskCount = 3;  //@taskCount=2, 02const needed = 3;34function remediate(count3) {5    let joined→ 3 = count→ 3;6    if (joined > needed) {7        joined = needed;8    }9    const pending→ 0 = needed→ 3 - joined3;10    let action→ release = "release";11    if (pending === 1) {12        action = "wait";13    } else if (pending >= 2) {14        action = "escalate";15    }16    console.log(`tasks=${count3} joined=${joined3} pending=${pending0} ${actionrelease}`);17}
    outputtasks=3 joined=3 pending=0 release
  3. remediate(taskCount);

    16    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);17}1819remediate(taskCount3);
  1. taskCount ← 0, needed ← 3

    1const taskCount→ 0 = 0;2const needed→ 3 = 3;34function remediate(count) {5    let joined = count;6    if (joined > needed) {7        joined = needed;8    }9    const pending = needed - joined;10    let action = "release";11    if (pending === 1) {12        action = "wait";13    } else if (pending >= 2) {14        action = "escalate";15    }16    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);17}1819remediate(taskCount0);
  2. joined ← 0, count ← 0, pending ← 3, needed ← 3, action ← release

    1const taskCount = 0;2const needed = 3;34function remediate(count0) {5    let joined→ 0 = count→ 0;6    if (joined > needed) {7        joined = needed;8    }9    const pending→ 3 = needed→ 3 - joined0;10    let action→ release = "release";11    if (pending === 1) {
  3. if (pending >= 2)

    12    action = "wait";13} else if (pending3 >= 2) {14    action = "escalate";15}
  4. console.log(`tasks=${count} joined=${joined} pending=${pending} ${acti…

    14        action = "escalate";15    }16    console.log(`tasks=${count0} joined=${joined0} pending=${pending3} ${actionescalate}`);17}
    outputtasks=0 joined=0 pending=3 escalate
  5. remediate(taskCount);

    16    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);17}1819remediate(taskCount0);
  1. taskCount ← 2, needed ← 3

    1const taskCount→ 2 = 2;2const needed→ 3 = 3;34function remediate(count) {5    let joined = count;6    if (joined > needed) {7        joined = needed;8    }9    const pending = needed - joined;10    let action = "release";11    if (pending === 1) {12        action = "wait";13    } else if (pending >= 2) {14        action = "escalate";15    }16    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);17}1819remediate(taskCount2);
  2. joined ← 2, count ← 2, pending ← 1, needed ← 3, action ← release

    1const taskCount = 2;2const needed = 3;34function remediate(count2) {5    let joined→ 2 = count→ 2;6    if (joined > needed) {7        joined = needed;8    }9    const pending→ 1 = needed→ 3 - joined2;10    let action→ release = "release";11    if (pending === 1) {
  3. if (pending === 1)

    9const pending = needed - joined;10let action = "release";11if (pending1 === 1) {12    action = "wait";13} else if (pending >= 2) {
  4. console.log(`tasks=${count} joined=${joined} pending=${pending} ${acti…

    14        action = "escalate";15    }16    console.log(`tasks=${count2} joined=${joined2} pending=${pending1} ${actionwait}`);17}
    outputtasks=2 joined=2 pending=1 wait
  5. remediate(taskCount);

    16    console.log(`tasks=${count} joined=${joined} pending=${pending} ${action}`);17}1819remediate(taskCount2);