Context
packages/loopover-engine/src/advisory/gate-advisory.ts:73-75 documents mergeReadinessGateMode as:
Master "merge-readiness" composite (#551). When set (advisory/block) it OVERRIDES all four sub-gates — linked-issue, duplicate, quality/readiness, slop — to its mode, so a maintainer flips ONE switch instead of four...
The actual implementation, applyMergeReadinessGate (gate-advisory.ts:657-666), only escalates three sub-gates:
function applyMergeReadinessGate(policy: GateCheckPolicy): GateCheckPolicy {
const composite = gateMode(policy.mergeReadinessGateMode ?? "off");
if (composite === "off") return policy;
return {
...policy,
linkedIssueGateMode: composite,
duplicatePrGateMode: composite,
slopGateMode: composite,
};
}
qualityGateMode (readiness) is never touched. This isn't an oversight in the code — the call site's own inline comment (gate-advisory.ts:467-468) correctly documents the real behavior: "Merge-readiness composite (#551): when set, escalate enforceable sub-gates to its mode... Readiness/quality stays advisory-only." So the code and the call-site comment agree with each other, but the field-level doc comment on mergeReadinessGateMode (lines 73-75) is stale/wrong — it still claims a fourth sub-gate ("quality/readiness") that was deliberately never wired into the composite (buildQualityGateWarning structurally can only ever produce a warning, never a blocker).
A maintainer reading only the field doc (the type is the public consumer-facing contract of this package) would reasonably expect setting mergeReadinessGateMode: "block" to make a low-readiness-score PR a hard blocker. It does not, and there is no code path that would ever make it one.
Requirements
- Fix the doc comment on
mergeReadinessGateMode in packages/loopover-engine/src/advisory/gate-advisory.ts (around line 73-75) so it accurately lists only the three sub-gates the composite actually escalates: linked-issue, duplicate, slop.
- The doc comment must explicitly state that quality/readiness is NOT part of the composite and always stays advisory-only, matching
applyMergeReadinessGate's real behavior and the correct call-site comment already in the file (gate-advisory.ts:467-468).
- Do not change
applyMergeReadinessGate's behavior — this is a documentation-only fix. If, after reading the code, you believe readiness/quality genuinely should be folded into the composite as a behavior change, do not make that change here — comment on this issue instead so a maintainer can decide; this issue's scope is the doc/comment mismatch only.
Deliverables
Test Coverage Requirements
This repo's Codecov patch gate is 99%+ hard (branch-counted) on every changed line/branch in src/**/packages/**. Add the regression test described above; a pure doc-comment change plus one assertion should trivially clear the gate.
Expected Outcome
A maintainer reading mergeReadinessGateMode's doc comment gets an accurate description of what the composite gate actually does — no false expectation that a low readiness/quality score can become a hard merge blocker via this switch.
Links & Resources
packages/loopover-engine/src/advisory/gate-advisory.ts:73-75 (the stale doc), :657-666 (applyMergeReadinessGate, the real behavior), :467-468 (the correct call-site comment to match).
Context
packages/loopover-engine/src/advisory/gate-advisory.ts:73-75documentsmergeReadinessGateModeas:The actual implementation,
applyMergeReadinessGate(gate-advisory.ts:657-666), only escalates three sub-gates:qualityGateMode(readiness) is never touched. This isn't an oversight in the code — the call site's own inline comment (gate-advisory.ts:467-468) correctly documents the real behavior: "Merge-readiness composite (#551): when set, escalate enforceable sub-gates to its mode... Readiness/quality stays advisory-only." So the code and the call-site comment agree with each other, but the field-level doc comment onmergeReadinessGateMode(lines 73-75) is stale/wrong — it still claims a fourth sub-gate ("quality/readiness") that was deliberately never wired into the composite (buildQualityGateWarningstructurally can only ever produce a warning, never a blocker).A maintainer reading only the field doc (the type is the public consumer-facing contract of this package) would reasonably expect setting
mergeReadinessGateMode: "block"to make a low-readiness-score PR a hard blocker. It does not, and there is no code path that would ever make it one.Requirements
mergeReadinessGateModeinpackages/loopover-engine/src/advisory/gate-advisory.ts(around line 73-75) so it accurately lists only the three sub-gates the composite actually escalates: linked-issue, duplicate, slop.applyMergeReadinessGate's real behavior and the correct call-site comment already in the file (gate-advisory.ts:467-468).applyMergeReadinessGate's behavior — this is a documentation-only fix. If, after reading the code, you believe readiness/quality genuinely should be folded into the composite as a behavior change, do not make that change here — comment on this issue instead so a maintainer can decide; this issue's scope is the doc/comment mismatch only.Deliverables
mergeReadinessGateModeingate-advisory.tsdescribing exactly the three sub-gates it overridesapplyMergeReadinessGatewithmergeReadinessGateMode: "block"does NOT changequalityGateMode, locking in the documented (and actual) behavior so a future edit can't silently reintroduce the mismatchTest Coverage Requirements
This repo's Codecov patch gate is 99%+ hard (branch-counted) on every changed line/branch in
src/**/packages/**. Add the regression test described above; a pure doc-comment change plus one assertion should trivially clear the gate.Expected Outcome
A maintainer reading
mergeReadinessGateMode's doc comment gets an accurate description of what the composite gate actually does — no false expectation that a low readiness/quality score can become a hard merge blocker via this switch.Links & Resources
packages/loopover-engine/src/advisory/gate-advisory.ts:73-75(the stale doc),:657-666(applyMergeReadinessGate, the real behavior),:467-468(the correct call-site comment to match).