⚠️ Definition of Done: this issue must be completed in full, in a single PR. Do not split this
work across multiple PRs, and do not defer any Deliverable below to a follow-up issue. A PR that
satisfies only some of the Deliverables, stubs a required test, or leaves a checkbox
partially-done does NOT resolve this issue and will be closed.
Context
packages/loopover-engine/src/goal-model.ts's computeLaneFit (lines 116-120) explicitly documents the rule: no configured preference returns a fixed 0.5, "never 0 or 1." packages/loopover-engine/src/miner-goal-lane-fit.ts's computeMinerGoalLaneFit (lines 37-39), reached from the identical dispatcher (opportunity-metadata.ts:212) when an issue merely lacks candidatePaths metadata, returns 1 for the same conceptual "no preference" case -- an unexplained 2x scoring divergence feeding laneFit, which ranks candidate issues for autonomous targeting.
Requirements
Align the zero-preferredLabels/no-metadata branch in computeMinerGoalLaneFit to return 0.5, matching computeLaneFit's documented rule, and update test/miner-goal-lane-fit.test.ts:12 accordingly. If there is in fact a deliberate reason for the divergence, do not silently align the values -- instead add an explicit, cross-referenced comment in both files justifying why they differ. Default to alignment unless you find and document such a reason.
Deliverables
All of the above Deliverables are required in the same PR unless the deliverable text itself states otherwise.
Test Coverage Requirements
packages/loopover-engine/** -- 99%+ patch coverage, branch-counted, on the corrected/documented branch.
Expected Outcome
computeMinerGoalLaneFit and computeLaneFit agree on the neutral score for a candidate with no configured preference, removing an unexplained 2x scoring divergence in issue-ranking.
Links & Resources
packages/loopover-engine/src/goal-model.ts:116-120
packages/loopover-engine/src/miner-goal-lane-fit.ts:37-39
packages/loopover-engine/src/opportunity-metadata.ts:212
test/miner-goal-lane-fit.test.ts:12
Context
packages/loopover-engine/src/goal-model.ts'scomputeLaneFit(lines 116-120) explicitly documents the rule: no configured preference returns a fixed0.5, "never 0 or 1."packages/loopover-engine/src/miner-goal-lane-fit.ts'scomputeMinerGoalLaneFit(lines 37-39), reached from the identical dispatcher (opportunity-metadata.ts:212) when an issue merely lackscandidatePathsmetadata, returns1for the same conceptual "no preference" case -- an unexplained 2x scoring divergence feedinglaneFit, which ranks candidate issues for autonomous targeting.Requirements
Align the zero-
preferredLabels/no-metadata branch incomputeMinerGoalLaneFitto return0.5, matchingcomputeLaneFit's documented rule, and updatetest/miner-goal-lane-fit.test.ts:12accordingly. If there is in fact a deliberate reason for the divergence, do not silently align the values -- instead add an explicit, cross-referenced comment in both files justifying why they differ. Default to alignment unless you find and document such a reason.Deliverables
computeMinerGoalLaneFit's no-preference-configured branch returns0.5, matchingcomputeLaneFit, OR both functions carry an explicit cross-referenced comment justifying a real, deliberate divergencetest/miner-goal-lane-fit.test.ts:12is updated to assert the corrected valueAll of the above Deliverables are required in the same PR unless the deliverable text itself states otherwise.
Test Coverage Requirements
packages/loopover-engine/**-- 99%+ patch coverage, branch-counted, on the corrected/documented branch.Expected Outcome
computeMinerGoalLaneFitandcomputeLaneFitagree on the neutral score for a candidate with no configured preference, removing an unexplained 2x scoring divergence in issue-ranking.Links & Resources
packages/loopover-engine/src/goal-model.ts:116-120packages/loopover-engine/src/miner-goal-lane-fit.ts:37-39packages/loopover-engine/src/opportunity-metadata.ts:212test/miner-goal-lane-fit.test.ts:12