From e71babca1c4071c13f2d3181be2476a23e2f832c Mon Sep 17 00:00:00 2001 From: Marcos Paulo Date: Tue, 18 Aug 2026 22:00:42 -0300 Subject: [PATCH] fix(memory): align substring index with trimmed input in extractHeuristicFact --- src/main/java/dev/marcospaulo/canalhandia/PlayerMemory.java | 5 +++-- .../java/dev/marcospaulo/canalhandia/PlayerMemoryTest.java | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/marcospaulo/canalhandia/PlayerMemory.java b/src/main/java/dev/marcospaulo/canalhandia/PlayerMemory.java index dac22b5..347b4ae 100644 --- a/src/main/java/dev/marcospaulo/canalhandia/PlayerMemory.java +++ b/src/main/java/dev/marcospaulo/canalhandia/PlayerMemory.java @@ -205,7 +205,8 @@ final class PlayerMemory { if (text == null) { return null; } - String lower = text.toLowerCase(Locale.ROOT).trim(); + String clean = text.trim(); + String lower = clean.toLowerCase(Locale.ROOT); String[] triggers = { "minha base", "meu spawn", "minha casa", "estou construindo", "meu plano", "meu objetivo", "sou especialista em", "moro em" @@ -213,7 +214,7 @@ final class PlayerMemory { for (String trigger : triggers) { int idx = lower.indexOf(trigger); if (idx >= 0) { - String candidate = text.substring(idx).trim(); + String candidate = clean.substring(idx).trim(); candidate = candidate.replaceAll("[?!.]+$", "").trim(); if (candidate.length() > 60) { candidate = candidate.substring(0, 60) + "…"; diff --git a/src/test/java/dev/marcospaulo/canalhandia/PlayerMemoryTest.java b/src/test/java/dev/marcospaulo/canalhandia/PlayerMemoryTest.java index a3b0d3f..c3aab39 100644 --- a/src/test/java/dev/marcospaulo/canalhandia/PlayerMemoryTest.java +++ b/src/test/java/dev/marcospaulo/canalhandia/PlayerMemoryTest.java @@ -143,6 +143,10 @@ class PlayerMemoryTest { assertNotNull(fact); assertTrue(fact.contains("estou construindo uma pirâmide gigante")); assertNull(PlayerMemory.extractHeuristicFact("quantos blocos tem o mundo?")); + + // Leading / trailing whitespace index alignment + assertEquals("minha base fica no topo", PlayerMemory.extractHeuristicFact(" minha base fica no topo! ")); + assertEquals("estou construindo uma ponte", PlayerMemory.extractHeuristicFact(" oi, estou construindo uma ponte...")); } @Test