Apply at most one idempotent write and turn the accepted and skipped counts into a commit, skip, or retry remediation action.

idempotent write Only the first write is accepted and later writes are counted as skipped, so the remediation action is reproducible without a live one-shot value guard.

Once Value Remediation Report

writes
once_value.ts
Replay: real traced execution (multi-file project)
const writes: number = 1;
let accepted: number = 0;
let skipped: number = 0;
for (let i = 0; i < writes; i++) {
    if (accepted === 0) {
        accepted += 1;
    } else {
        skipped += 1;
    }
}

let action: string = "retry";
if (accepted >= 1) {
    action = "commit";
}
if (skipped >= 1) {
    action = "skip";
}

console.log(`writes=${writes} accepted=${accepted} skipped=${skipped} ${action}`);
const writes: number = 0;
let accepted: number = 0;
let skipped: number = 0;
for (let i = 0; i < writes; i++) {
    if (accepted === 0) {
        accepted += 1;
    } else {
        skipped += 1;
    }
}

let action: string = "retry";
if (accepted >= 1) {
    action = "commit";
}
if (skipped >= 1) {
    action = "skip";
}

console.log(`writes=${writes} accepted=${accepted} skipped=${skipped} ${action}`);
const writes: number = 2;
let accepted: number = 0;
let skipped: number = 0;
for (let i = 0; i < writes; i++) {
    if (accepted === 0) {
        accepted += 1;
    } else {
        skipped += 1;
    }
}

let action: string = "retry";
if (accepted >= 1) {
    action = "commit";
}
if (skipped >= 1) {
    action = "skip";
}

console.log(`writes=${writes} accepted=${accepted} skipped=${skipped} ${action}`);
  1. writes ← 1, accepted ← 0, skipped ← 0

    1const writes→ 1: number = 1;  //@writes=2, 02let accepted→ 0: number = 0;3let skipped→ 0: number = 0;4for (let i = 0; i < writes; i++) {
  2. for (let i = 0; i < writes; i++)

    2let accepted: number = 0;3let skipped: number = 0;4for (let i0 = 0; i < writes1; i++) {5    if (accepted === 0) {
  3. if (accepted === 0)

    3let skipped: number = 0;4for (let i = 0; i < writes; i++) {5    if (accepted0 === 0) {6        accepted += 1;7    } else {
  4. action ← retry

    9    }10}1112let action→ retry: string = "retry";13if (accepted >= 1) {
  5. if (accepted >= 1)

    12let action: string = "retry";13if (accepted1 >= 1) {14    action = "commit";15}
  6. console.log(`writes=${writes} accepted=${accepted} skipped=${skipped} …

    17    action = "skip";18}1920console.log(`writes=${writes1} accepted=${accepted1} skipped=${skipped0} ${actioncommit}`);
    outputwrites=1 accepted=1 skipped=0 commit
  1. writes ← 0, accepted ← 0, skipped ← 0, action ← retry

    1const writes→ 0: number = 0;2let accepted→ 0: number = 0;3let skipped→ 0: number = 0;4for (let i = 0; i < writes; i++) {5    if (accepted === 0) {6        accepted += 1;7    } else {8        skipped += 1;9    }10}1112let action→ retry: string = "retry";13if (accepted >= 1) {14    action = "commit";15}16if (skipped >= 1) {17    action = "skip";18}1920console.log(`writes=${writes0} accepted=${accepted0} skipped=${skipped0} ${actionretry}`);
    outputwrites=0 accepted=0 skipped=0 retry
  1. writes ← 2, accepted ← 0, skipped ← 0

    1const writes→ 2: number = 2;2let accepted→ 0: number = 0;3let skipped→ 0: number = 0;4for (let i = 0; i < writes; i++) {
  2. for (let i = 0; i < writes; i++)

    pass 1 of 2
    2let accepted: number = 0;3let skipped: number = 0;4for (let i0 = 0; i < writes2; i++) {5    if (accepted === 0) {
  3. if (accepted === 0)

    3let skipped: number = 0;4for (let i = 0; i < writes; i++) {5    if (accepted0 === 0) {6        accepted += 1;7    } else {
  4. for (let i = 0; i < writes; i++)

    pass 2 of 2
    2let accepted: number = 0;3let skipped: number = 0;4for (let i1 = 0; i < writes2; i++) {5    if (accepted === 0) {
  5. action ← retry

    9    }10}1112let action→ retry: string = "retry";13if (accepted >= 1) {
  6. if (accepted >= 1)

    12let action: string = "retry";13if (accepted1 >= 1) {14    action = "commit";15}
  7. if (skipped >= 1)

    14    action = "commit";15}16if (skipped1 >= 1) {17    action = "skip";18}
  8. console.log(`writes=${writes} accepted=${accepted} skipped=${skipped} …

    17    action = "skip";18}1920console.log(`writes=${writes2} accepted=${accepted1} skipped=${skipped1} ${actionskip}`);
    outputwrites=2 accepted=1 skipped=1 skip