A final checklist rolls several workflow booleans into a release-ready status.

checklist Named booleans make a release gate easier to inspect than unrelated loose variables.
status Counting completed items creates an intermediate value that explains the final ready flag.

Checklist Status

packaged
checklist_status.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

struct Checklist {
    bool built;
    bool tested;
    bool packaged;
};

int completedCount(const Checklist& checklist) {
    int count = 0;
    if (checklist.built) {
        count += 1;
    }
    if (checklist.tested) {
        count += 1;
    }
    if (checklist.packaged) {
        count += 1;
    }
    return count;
}

int main() {
    bool packaged = false;

    Checklist checklist{true, true, packaged};
    int complete = completedCount(checklist);
    bool ready = complete == 3;

    std::cout << "packaged=" << packaged << std::endl;
    std::cout << "complete=" << complete << std::endl;
    std::cout << "ready=" << ready << std::endl;
    return 0;
}
#include <iostream>

struct Checklist {
    bool built;
    bool tested;
    bool packaged;
};

int completedCount(const Checklist& checklist) {
    int count = 0;
    if (checklist.built) {
        count += 1;
    }
    if (checklist.tested) {
        count += 1;
    }
    if (checklist.packaged) {
        count += 1;
    }
    return count;
}

int main() {
    bool packaged = true;

    Checklist checklist{true, true, packaged};
    int complete = completedCount(checklist);
    bool ready = complete == 3;

    std::cout << "packaged=" << packaged << std::endl;
    std::cout << "complete=" << complete << std::endl;
    std::cout << "ready=" << ready << std::endl;
    return 0;
}
  1. packaged ← 0, checklist ← (empty)

    23int main() {24    bool packaged→ 0 = false; //@packaged=true2526    Checklist checklist→ (empty){true, true, packaged0};27    int complete = completedCount(checklist(empty));28    bool ready = complete == 3;
  2. count ← 0

    9int completedCount(const Checklist& checklist(empty)) {10    int count→ 0 = 0;11    if (checklist.built) {
  3. count ← 1

    10int count = 0;11if (checklist.built1) {12    count→ 1 += 1;13}
  4. count ← 2

    13}14if (checklist.tested1) {15    count→ 2 += 1;16}
  5. return count;

    19    }20    return count2;21}
  6. complete ← 2, ready ← 0

    26    Checklist checklist{true, true, packaged};27    int complete→ 2 = completedCount(checklist(empty));28    bool ready→ 0 = complete2 == 3;2930    std::cout << "packaged=" << packaged0 << std::endl;31    std::cout << "complete=" << complete2 << std::endl;32    std::cout << "ready=" << ready0 << std::endl;33    return 0;34}
    outputpackaged=0
    complete=2
    ready=0
  1. packaged ← 1, checklist ← (empty)

    23int main() {24    bool packaged→ 1 = true;2526    Checklist checklist→ (empty){true, true, packaged1};27    int complete = completedCount(checklist(empty));28    bool ready = complete == 3;
  2. count ← 0

    9int completedCount(const Checklist& checklist(empty)) {10    int count→ 0 = 0;11    if (checklist.built) {
  3. count ← 1

    10int count = 0;11if (checklist.built1) {12    count→ 1 += 1;13}
  4. count ← 2

    13}14if (checklist.tested1) {15    count→ 2 += 1;16}
  5. count ← 3

    16}17if (checklist.packaged1) {18    count→ 3 += 1;19}
  6. return count;

    19    }20    return count3;21}
  7. complete ← 3, ready ← 1

    26    Checklist checklist{true, true, packaged};27    int complete→ 3 = completedCount(checklist(empty));28    bool ready→ 1 = complete3 == 3;2930    std::cout << "packaged=" << packaged1 << std::endl;31    std::cout << "complete=" << complete3 << std::endl;32    std::cout << "ready=" << ready1 << std::endl;33    return 0;34}
    outputpackaged=1
    complete=3
    ready=1