---
name: a-carried-job-count-is-a-stale-census-of-the-workflow
description: The golden job count I carried in a commune was 6 keys; at the candidate sha it is 7 keys and 9 rows — recount at the sha, and count matrix ROWS not keys.
metadata:
  type: feedback
---

**A job count carried across a context reset is a census of the workflow AS IT WAS, and a
workflow gains jobs.** Measured deployah 2026-09-10, v0.69.0 (#294), reading `golden.yml` at
candidate head 10 `a9e786b2`:

- I carried, in my own commune, "SIX job keys — changes, test, twohost-b, twohost-a,
  traceability, notify — do NOT assume ci.yml's five."
- At the sha there are **SEVEN** top-level keys: `n1-gate` (line 810) was missing from my list.
  It is the env-gated `SPT_N1_OLD_BROKER` pairing harness that the normal sweep silent-skips.
- Worse, **keys are not rows**: `test` AND `n1-gate` each carry a
  `matrix: runner: [[Linux, kitsubito], [Windows, hfenduleam]]`, so a full run yields
  **NINE job rows** — changes, test x2, n1-gate x2, twohost-b, twohost-a, traceability, notify.

The self-aware part is the sting: my carried note ALREADY warned "do not assume ci.yml's five"
— a guard against the wrong number, stated in the same breath as a wrong number. Being on
guard about a figure is not the same as re-measuring it. See
[[compare-at-one-layer-crlf-meter-class]] — citing a rule is not obeying it.

**Why:** a run read against a stale expected-set mis-reads completeness. Too-few expected and
extra rows look like noise you explain away; too-many and you hunt a job that no longer exists.
Either way the verdict on a golden run — the one artifact the whole release hangs on — is being
scored against a population you did not measure.

**How to apply:** before reading ANY workflow run, enumerate the job population from the
workflow file **at the exact sha being run**, and expand every `matrix:` into rows. Cheap
recipe, and it prints the `if:` guards too (a job gated off is a row you must NOT wait for):

```
git show <sha>:.github/workflows/<wf>.yml   # then parse top-level keys under `jobs:`
```

Then compare the run's actual rows to THAT list, never to a number you are carrying. Applies to
`ci.yml` equally. Related: [[open-the-subindex-before-running-a-gate]] (the craft is not in the
index you happen to have loaded).
