From 14ff5431353aee23bc88c0eaf23d3ac0ebc3bac9 Mon Sep 17 00:00:00 2001 From: KoalaTrapLord Date: Sun, 5 Apr 2026 16:04:07 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20DecisionLogger=20JSONL=20filename=20pref?= =?UTF-8?q?ix=20=E2=80=94=20ml-decisions-sim-*=20for=20dataset=5Fbuilder?= =?UTF-8?q?=20discovery?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Java DecisionLogger was writing files as ml-decisions-{batchId}.jsonl but the Python dataset_builder.py scans for ml-decisions-sim-*.jsonl to categorize them as 'forge' source training data. This one-line fix adds the 'sim-' prefix so the Forge batch heuristic path now feeds directly into the ML training pipeline: BatchRunner → DecisionExtractor → DecisionLogger → results/ml-decisions-sim-{batchId}.jsonl → dataset_builder.py discovers as 'forge' source → encode → train The full chain was already wired (Issue #83 Phase 1 infrastructure), this naming mismatch was the only thing preventing it from working. Refs: Issue #83 Phase 1 --- src/main/java/commanderailab/ml/DecisionLogger.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/commanderailab/ml/DecisionLogger.java b/src/main/java/commanderailab/ml/DecisionLogger.java index ac04838..2011c3a 100644 --- a/src/main/java/commanderailab/ml/DecisionLogger.java +++ b/src/main/java/commanderailab/ml/DecisionLogger.java @@ -14,7 +14,7 @@ import java.util.*; * Each game's decisions are appended as JSON lines to a batch-specific file. * Format: one DecisionSnapshot JSON object per line (JSONL/ndjson). * - * Output path: results/ml-decisions-{batchId}.jsonl + * Output path: results/ml-decisions-sim-{batchId}.jsonl * * Usage from BatchRunner: * DecisionLogger logger = new DecisionLogger(resultsDir, batchId); @@ -39,7 +39,10 @@ public class DecisionLogger { if (!Files.exists(dir)) { Files.createDirectories(dir); } - this.outputPath = dir.resolve("ml-decisions-" + batchId + ".jsonl"); + // Prefix with "sim-" so the Python dataset_builder.py discovers + // these files under the "forge" source category. The builder scans + // for ml-decisions-sim-*.jsonl → source = "forge". + this.outputPath = dir.resolve("ml-decisions-sim-" + batchId + ".jsonl"); this.writer = Files.newBufferedWriter(outputPath, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND);