UNOFFICIAL/EXPERIMENTAL
It exists to finish the matrix faster by separating the kind of work each cell needs, so the next effort goes where it pays off instead of re-running rows that are already decided or that need a model change first.
The four completion classes
| Class | What it means | Who acts | How to clear it |
|---|---|---|---|
needs-run | A command exists; the cell just hasn't been run yet. | the live lane | Run it - the exact command is in the row (and grouped in live-run-blocks). |
needs-target-or-prereq-fix | Blocked on a target prerequisite, an unpullable image, or tooling - a user/target action, not a model change. | user / target | Stage the prerequisite, resolve the image, or fix the tooling, then re-run. |
needs-modeling | The catalog/model has to change before the cell can pass. | catalog | Reconcile the base, render context, target facts, or semantic contract, then re-run. |
already-decided | A watch cell with a recorded product decision: evidence plus a named residue. | nobody (it's recorded) | Nothing to run - it's usable today with the named caveat; revisit only if the residue changes. |
The split matters because the three "needs" buckets consume very different effort: a needs-run cell is cheap (one serial command), a needs-target-or-prereq-fix cell needs a target/user action, and a needs-modeling cell needs catalog work before any run will help. already-decided cells need nothing - counting them as "unfinished" would overstate the remaining work.
How it helps finish the matrix
- Run the
needs-runcells first - they converttodotopass/watch/blockedwith a committed receipt for the cost of one command. Use live-run-blocks for the ordered blocks. - Batch the
needs-target-or-prereq-fixcells by the fix (image retention, CRD/Secret/Namespace staging, tooling) - one fix often clears several cells. - Queue the
needs-modelingcells for catalog work - these will not move on a re-run alone; they need a model change first. - Leave the
already-decidedcells alone - they are recorded decisions, not gaps.
What it is (and isn't)
It is a read-only projection over committed surfaces - the per-cell scoring from disposition-frontier, the live-parity and kind-parity decisions, the burn-down, the run-blocks, base-outcomes, and the matrix's own lifecycle/promotion columns. The residue families it references are defined in residue-families.
It changes no status and runs nothing. A completion class is a triage hint, not a claim; a watch cell is a recorded decision and is never silently rounded up to a pass. Because it projects the live burn-down, it regenerates with the lane: run npm run matrix-completion-audit when a live row lands.