Found in the fifth review pass of #285, and explicitly deferred there rather than held for another round.
The not invoked guard catches a pure dependency-only recipe. A recipe with dependencies and a script body makes invoked non-empty, takes the normal path, and its dependencies are never followed — no silent entry, no BlindGate.
That shape already exists in this justfile: gen-qc-dashboard: (_require-claw "kg_microbe_qc") and knowledge-gap-scan *args: (_require-claw …) both carry a dependency and a body. Neither is in the qc chain today.
Narrower than the composite case that was fixed in #285: the recipe is examined and its own script's reads are collected, so this is partial coverage rather than blindness.
Fix: resolve qc_chain transitively — for each chain member, parse its own dependency list out of its recipe header and walk those too, guarding against cycles. The existing not invoked guard then still catches a leaf that reads nothing. No-op on the current tree, since none of the eleven chain recipes declares a dependency.
Found in the fifth review pass of #285, and explicitly deferred there rather than held for another round.
The
not invokedguard catches a pure dependency-only recipe. A recipe with dependencies and a script body makesinvokednon-empty, takes the normal path, and its dependencies are never followed — nosilententry, noBlindGate.That shape already exists in this justfile:
gen-qc-dashboard: (_require-claw "kg_microbe_qc")andknowledge-gap-scan *args: (_require-claw …)both carry a dependency and a body. Neither is in theqcchain today.Narrower than the composite case that was fixed in #285: the recipe is examined and its own script's reads are collected, so this is partial coverage rather than blindness.
Fix: resolve
qc_chaintransitively — for each chain member, parse its own dependency list out of its recipe header and walk those too, guarding against cycles. The existingnot invokedguard then still catches a leaf that reads nothing. No-op on the current tree, since none of the eleven chain recipes declares a dependency.