Observation from PR #12997's patch round (2026-08-28), recorded with measurements by the dev on #12881:
scripts/pm/dispatch-gates.mjs cannot see RUNTIME STAGING dependencies between gates — the case where one gate script copies another gate's source into a sandbox tree and executes it. Concrete instance: scripts/objectui-changeset-digest.mjs stages scripts/check-adr-0087-registration.mjs into a fw-gate/ sandbox; a PR that added an import (js-comment-mask.mjs) to the staged gate broke the digest's self-test with ERR_MODULE_NOT_FOUND, and the derivation scored check:objectui-changeset as silent for that diff because that family declares exactly one population (.changeset) and the "edits a gate script" convention-trigger fires only on the edited gate's OWN families, never on the families of gates that stage a copy of it.
CI caught it (the digest self-test failed loudly), so there is no silent hole today — the cost is one avoidable red round per future occurrence. Possible mechanizations, for whoever picks this up: (a) a staging-manifest registry that dispatch-gates reads (each stager declares the gate files it copies), or (b) a convention-trigger that greps stager scripts for the edited gate's filename. Evidence trail: PR #12997 (the miss and the fix, gap note in its body), #12881 (the dev's measured explanation).
Observation from PR #12997's patch round (2026-08-28), recorded with measurements by the dev on #12881:
scripts/pm/dispatch-gates.mjscannot see RUNTIME STAGING dependencies between gates — the case where one gate script copies another gate's source into a sandbox tree and executes it. Concrete instance:scripts/objectui-changeset-digest.mjsstagesscripts/check-adr-0087-registration.mjsinto afw-gate/sandbox; a PR that added an import (js-comment-mask.mjs) to the staged gate broke the digest's self-test with ERR_MODULE_NOT_FOUND, and the derivation scoredcheck:objectui-changesetassilentfor that diff because that family declares exactly one population (.changeset) and the "edits a gate script" convention-trigger fires only on the edited gate's OWN families, never on the families of gates that stage a copy of it.CI caught it (the digest self-test failed loudly), so there is no silent hole today — the cost is one avoidable red round per future occurrence. Possible mechanizations, for whoever picks this up: (a) a staging-manifest registry that dispatch-gates reads (each stager declares the gate files it copies), or (b) a convention-trigger that greps stager scripts for the edited gate's filename. Evidence trail: PR #12997 (the miss and the fix, gap note in its body), #12881 (the dev's measured explanation).