Store independent task results in typed slots before summarizing them.

Task Slot Summary

task_slots.ts
type Slot = {
    name: "read" | "write";
    value: number;
};

const seed: number = ;
const slots: Slot[] = [
    { name: "read", value: 0 },
    { name: "write", value: 0 }
];

function fillReadSlot(value: number): void {
    slots[0].value = value + 10;
}

function fillWriteSlot(value: number): void {
    slots[1].value = value * 3;
}

fillReadSlot(seed);
fillWriteSlot(seed);

const total: number = slots[0].value + slots[1].value;

console.log(`read=${slots[0].value}`);
console.log(`write=${slots[1].value}`);
console.log(`total=${total}`);
type Slot = {
    name: "read" | "write";
    value: number;
};

const seed: number = ;
const slots: Slot[] = [
    { name: "read", value: 0 },
    { name: "write", value: 0 }
];

function fillReadSlot(value: number): void {
    slots[0].value = value + 10;
}

function fillWriteSlot(value: number): void {
    slots[1].value = value * 3;
}

fillReadSlot(seed);
fillWriteSlot(seed);

const total: number = slots[0].value + slots[1].value;

console.log(`read=${slots[0].value}`);
console.log(`write=${slots[1].value}`);
console.log(`total=${total}`);
type Slot = {
    name: "read" | "write";
    value: number;
};

const seed: number = ;
const slots: Slot[] = [
    { name: "read", value: 0 },
    { name: "write", value: 0 }
];

function fillReadSlot(value: number): void {
    slots[0].value = value + 10;
}

function fillWriteSlot(value: number): void {
    slots[1].value = value * 3;
}

fillReadSlot(seed);
fillWriteSlot(seed);

const total: number = slots[0].value + slots[1].value;

console.log(`read=${slots[0].value}`);
console.log(`write=${slots[1].value}`);
console.log(`total=${total}`);
task slots Separate result slots make interleaved or filtered replay easier to reason about because each task has its own state.