From 2eebdf2a479f856faa469a36ae0104edf340277b Mon Sep 17 00:00:00 2001 From: matevip Date: Tue, 21 Apr 2026 17:34:34 +0800 Subject: [PATCH] fix(memory): HiL edit uses exact key match, not substring contains --- .../java/vip/mate/memory/controller/DreamController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mateclaw-server/src/main/java/vip/mate/memory/controller/DreamController.java b/mateclaw-server/src/main/java/vip/mate/memory/controller/DreamController.java index 195a825d..ca247fdd 100644 --- a/mateclaw-server/src/main/java/vip/mate/memory/controller/DreamController.java +++ b/mateclaw-server/src/main/java/vip/mate/memory/controller/DreamController.java @@ -152,8 +152,14 @@ public class DreamController { .ge(MemoryRecallEntity::getLastRecalledAt, report.getStartedAt()) .le(MemoryRecallEntity::getLastRecalledAt, report.getFinishedAt()) .eq(MemoryRecallEntity::getDeleted, 0)); + // Exact match on the section key (part after # in filename) boolean keyBelongsToReport = candidates.stream() - .anyMatch(c -> c.getFilename() != null && c.getFilename().contains(decodedKey)); + .anyMatch(c -> { + if (c.getFilename() == null) return false; + int hash = c.getFilename().indexOf('#'); + String entryKey = hash >= 0 ? c.getFilename().substring(hash + 1) : c.getFilename(); + return entryKey.equals(decodedKey); + }); if (!keyBelongsToReport) { return R.fail("Entry '" + decodedKey + "' does not belong to report " + reportId); }