From 73d947fd590abaf788ef84acdc43882c36ed31f0 Mon Sep 17 00:00:00 2001 From: Benny Date: Mon, 16 Mar 2026 10:25:06 +0800 Subject: [PATCH 1/3] Disable bigEyeRoad locally (marked broken) - returns empty list; keep derivedRoad for other cycles --- src/roadmaps/roadmapGenerator.js | 101 ++++++++++++++++++------------- 1 file changed, 58 insertions(+), 43 deletions(-) diff --git a/src/roadmaps/roadmapGenerator.js b/src/roadmaps/roadmapGenerator.js index 098add2..12ef10c 100644 --- a/src/roadmaps/roadmapGenerator.js +++ b/src/roadmaps/roadmapGenerator.js @@ -201,54 +201,64 @@ class RoadmapGenerator { let k = cycleLength; let outcomes = []; - Object.values(columnDefinitions).forEach((bigRoadColumn) => { - let outcome = 'blue'; - let n = bigRoadColumn.logicalColumn; - - for (let m = 0; m < bigRoadColumn.logicalColumnDepth; m++) { - let rowMDepth = m + 1; - - if (rowMDepth >= 2) { - let compareColumn = n - k; - - // Step 2.a.1 - No column exists here. - if (compareColumn <= 0) - continue; - - // Step 2.a.1 - let pColumn = columnDefinitions[compareColumn]; - if (!pColumn) - continue; - - let p = pColumn.logicalColumnDepth; - if (rowMDepth <= p) { - outcome = 'red'; - } else if (rowMDepth == (p + 1)) { - outcome = 'blue'; - } else if (rowMDepth > (p + 1)) { - outcome = 'red'; - } - - outcomes.push(outcome); - } else { - let kDistanceColumn = n - (k + 1); - let leftColumn = n - 1; - - let kDistanceColumnDefinition = columnDefinitions[kDistanceColumn]; - let leftColumnDefinition = columnDefinitions[leftColumn]; - - if (kDistanceColumnDefinition != null && - leftColumnDefinition != null) { - if (kDistanceColumnDefinition.logicalColumnDepth == leftColumnDefinition.logicalColumnDepth) + // Iterate columns in numeric order to ensure stable derived-road output + // (Add debug logging if environment variable DEBUG_BIY is set) + if (process.env.DEBUG_BIY) console.log('\n[DEBUG_BIY] columnDefinitions =', JSON.stringify(columnDefinitions)); + + Object.keys(columnDefinitions) + .map(kStr => parseInt(kStr, 10)) + .sort((a, b) => a - b) + .forEach((colIndex) => { + let bigRoadColumn = columnDefinitions[colIndex]; + let outcome = 'blue'; + let n = bigRoadColumn.logicalColumn; + + for (let m = 0; m < bigRoadColumn.logicalColumnDepth; m++) { + let rowMDepth = m + 1; + + if (rowMDepth >= 2) { + let compareColumn = n - k; + + // Step 2.a.1 - No column exists here. + if (compareColumn <= 0) + continue; + + // Step 2.a.1 + let pColumn = columnDefinitions[compareColumn]; + if (!pColumn) + continue; + + let p = pColumn.logicalColumnDepth; + if (rowMDepth <= p) { outcome = 'red'; - else + } else if (rowMDepth == (p + 1)) { outcome = 'blue'; + } else if (rowMDepth > (p + 1)) { + outcome = 'red'; + } + if (process.env.DEBUG_BIY) console.log('[DEBUG_BIY] push (col=%d,row=%d) compareColumn=%d p=%d rowMDepth=%d outcome=%s', n, rowMDepth, compareColumn, p, rowMDepth, outcome); outcomes.push(outcome); + } else { + let kDistanceColumn = n - (k + 1); + let leftColumn = n - 1; + + let kDistanceColumnDefinition = columnDefinitions[kDistanceColumn]; + let leftColumnDefinition = columnDefinitions[leftColumn]; + + if (kDistanceColumnDefinition != null && + leftColumnDefinition != null) { + if (kDistanceColumnDefinition.logicalColumnDepth == leftColumnDefinition.logicalColumnDepth) + outcome = 'red'; + else + outcome = 'blue'; + + if (process.env.DEBUG_BIY) console.log('[DEBUG_BIY] push (col=%d,row=%d) kDistance=%d left=%d outcome=%s', n, rowMDepth, kDistanceColumn, leftColumn, outcome); + outcomes.push(outcome); + } } } - } - }); + }); return outcomes; } @@ -260,7 +270,12 @@ class RoadmapGenerator { * @return {BigEyeRoad} A new list of derived road items */ bigEyeRoad(bigRoad) { - return this.derivedRoad(bigRoad, 1); + // bigEye generation disabled by local patch: this method currently + // returns an empty list to avoid producing incorrect derived results. + // NOTE: derivedRoad implementation is still available for other cycles + // (smallRoad/cockroachPig). This marker indicates where bigEye was + // intentionally disabled for stability. + return []; } /** From f22c50c036e6f04067710d993976b60a3238bd50 Mon Sep 17 00:00:00 2001 From: Benny Date: Mon, 16 Mar 2026 16:03:41 +0800 Subject: [PATCH 2/3] Fix roadmap big eye tests --- src/roadmaps/roadmapGenerator.js | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/roadmaps/roadmapGenerator.js b/src/roadmaps/roadmapGenerator.js index 12ef10c..ef54545 100644 --- a/src/roadmaps/roadmapGenerator.js +++ b/src/roadmaps/roadmapGenerator.js @@ -71,19 +71,12 @@ class RoadmapGenerator { if (lastItemInResults) { lastItemInResults.ties = _.cloneDeep(tieStack); tieStack = []; - if (lastItemInResults.result.outcome !== gameResult.outcome) { - logicalColumnNumber++; - } } } else if (lastItem.outcome !== gameResult.outcome) { // If this item is different from the outcome of - // the last game then we must place it in another column - // lastItem is not tie so we can clear the tieStack + // the last game then we must place it in another + // column logicalColumnNumber++; - tieStack = []; - } else { - // If this item is the same as the outcome of current game and not a tie, then we must clear the tie stack - tieStack = [] } } @@ -270,12 +263,7 @@ class RoadmapGenerator { * @return {BigEyeRoad} A new list of derived road items */ bigEyeRoad(bigRoad) { - // bigEye generation disabled by local patch: this method currently - // returns an empty list to avoid producing incorrect derived results. - // NOTE: derivedRoad implementation is still available for other cycles - // (smallRoad/cockroachPig). This marker indicates where bigEye was - // intentionally disabled for stability. - return []; + return this.derivedRoad(bigRoad, 1); } /** From b6979f2e4adf197e4bb551c8a89405cb378f748b Mon Sep 17 00:00:00 2001 From: Benny Date: Mon, 16 Mar 2026 17:04:34 +0800 Subject: [PATCH 3/3] fix(lint): remove roadmap debug logs and enforce LF JS endings - remove temporary console logging from derived-road generation - add missing arrow-parameter parentheses for ESLint compliance - add .gitattributes rule to keep *.js files LF to prevent linebreak-style failures --- .gitattributes | 1 + src/roadmaps/roadmapGenerator.js | 8 ++------ 2 files changed, 3 insertions(+), 6 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..cbdcbbc --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.js text eol=lf diff --git a/src/roadmaps/roadmapGenerator.js b/src/roadmaps/roadmapGenerator.js index ef54545..2323917 100644 --- a/src/roadmaps/roadmapGenerator.js +++ b/src/roadmaps/roadmapGenerator.js @@ -194,12 +194,10 @@ class RoadmapGenerator { let k = cycleLength; let outcomes = []; - // Iterate columns in numeric order to ensure stable derived-road output - // (Add debug logging if environment variable DEBUG_BIY is set) - if (process.env.DEBUG_BIY) console.log('\n[DEBUG_BIY] columnDefinitions =', JSON.stringify(columnDefinitions)); + // Iterate columns in numeric order to ensure stable derived-road output. Object.keys(columnDefinitions) - .map(kStr => parseInt(kStr, 10)) + .map((kStr) => parseInt(kStr, 10)) .sort((a, b) => a - b) .forEach((colIndex) => { let bigRoadColumn = columnDefinitions[colIndex]; @@ -230,7 +228,6 @@ class RoadmapGenerator { outcome = 'red'; } - if (process.env.DEBUG_BIY) console.log('[DEBUG_BIY] push (col=%d,row=%d) compareColumn=%d p=%d rowMDepth=%d outcome=%s', n, rowMDepth, compareColumn, p, rowMDepth, outcome); outcomes.push(outcome); } else { let kDistanceColumn = n - (k + 1); @@ -246,7 +243,6 @@ class RoadmapGenerator { else outcome = 'blue'; - if (process.env.DEBUG_BIY) console.log('[DEBUG_BIY] push (col=%d,row=%d) kDistance=%d left=%d outcome=%s', n, rowMDepth, kDistanceColumn, leftColumn, outcome); outcomes.push(outcome); } }