Keep non-goal conflicts out of active Ranker lanes
This commit is contained in:
@@ -593,11 +593,13 @@ function normalizeLaneHint(value = '') {
|
||||
function laneFor(option, rankIndex, total) {
|
||||
const hintedLane = normalizeLaneHint(option.factors?.recommendedLane || '');
|
||||
// Ranker should defend build order, not blindly obey Scattermind. Positive
|
||||
// hints can nudge scoring, but explicit negative hints are safety rails:
|
||||
// if the source already marked something as defer/park, never promote it
|
||||
// hints can nudge scoring, but explicit negative hints and source non-goals
|
||||
// are safety rails: if the source already marked something as not-now, or
|
||||
// if the candidate conflicts with the source guardrails, never promote it
|
||||
// into the active proof slice just because keyword scoring liked it.
|
||||
if (hintedLane === 'park') return { id: 'park', label: 'Park / cut', action: 'Keep out of the active plan', source: 'hint' };
|
||||
if (hintedLane === 'defer') return { id: 'defer', label: 'Defer', action: 'Sequence after proof', source: 'hint' };
|
||||
if (option.metrics?.nonGoalConflicts?.length) return { id: 'defer', label: 'Defer', action: 'Resolve source guardrail first', source: 'source-non-goal' };
|
||||
if (rankIndex === 0) return { id: 'do', label: 'Do first', action: 'Build/test now' };
|
||||
if (hintedLane === 'test') return { id: 'test', label: 'Validate next', action: 'Find evidence', source: 'hint' };
|
||||
if (rankIndex < Math.max(2, Math.ceil(total * 0.32))) return { id: 'test', label: 'Validate next', action: 'Find evidence' };
|
||||
|
||||
Reference in New Issue
Block a user