diff --git a/src/main/java/com/codechecker/cache/report/ReportBuilder.java b/src/main/java/com/codechecker/cache/report/ReportBuilder.java
index d0e12d4..b1dd8de 100644
--- a/src/main/java/com/codechecker/cache/report/ReportBuilder.java
+++ b/src/main/java/com/codechecker/cache/report/ReportBuilder.java
@@ -40,7 +40,7 @@ public class ReportBuilder {
sb.append("未检测到缓存序列化结构变更。\n");
} else {
for (SchemaChange c : report.getChanges()) {
- sb.append("- `").append(nvl(c.getKeyPattern())).append("`\n");
+ appendKeyLine(sb, c.getKeyPattern());
if (c.getMessage() != null) {
sb.append(" ").append(c.getMessage()).append('\n');
}
@@ -50,21 +50,39 @@ public class ReportBuilder {
}
for (KeyStructureChange kc : keys) {
- sb.append("- `").append(nvl(kc.getKeyPattern())).append("`\n");
+ appendKeyLine(sb, kc.getKeyPattern());
String oldJson = nvl(kc.getOldSkeletonJson());
String newJson = nvl(kc.getNewSkeletonJson());
if (oldJson.isEmpty() && !newJson.isEmpty()) {
- sb.append(" value 新增为 “").append(newJson).append("”\n\n");
+ sb.append(" value 新增为 “").append(fontWarning(newJson)).append("”\n\n");
} else if (!oldJson.isEmpty() && newJson.isEmpty()) {
- sb.append(" value 原结构 “").append(oldJson).append("” 已删除写入\n\n");
+ sb.append(" value 原结构 “").append(fontInfo(oldJson)).append("” 已删除写入\n\n");
} else {
- sb.append(" value 值从 “").append(oldJson).append("”\n");
- sb.append(" 变更为 “").append(newJson).append("”\n\n");
+ sb.append(" value 值从 “").append(fontInfo(oldJson)).append("”\n");
+ sb.append(" 变更为 “").append(fontWarning(newJson)).append("”\n\n");
}
}
return sb.toString();
}
+ /**
+ * Key 行:加粗「Key -->」+ 加粗 key 文本。
+ * 避免 key 末尾 * 与 markdown ** 冲突,结尾加零宽空格再闭合。
+ */
+ private void appendKeyLine(StringBuilder sb, String keyPattern) {
+ sb.append("- **Key --> ").append(nvl(keyPattern)).append("\u200b**\n");
+ }
+
+ /** 企微 markdown:绿色(旧骨架)。 */
+ private String fontInfo(String text) {
+ return "" + text + "";
+ }
+
+ /** 企微 markdown:warning 橙红(新骨架)。 */
+ private String fontWarning(String text) {
+ return "" + text + "";
+ }
+
/**
* CI 控制台:字段明细 + 完整企微 Markdown。
*/
diff --git a/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java b/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java
index 0b9d492..23bcd7a 100644
--- a/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java
+++ b/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java
@@ -40,9 +40,9 @@ class ReportBuilderTest {
assertTrue(md.startsWith("## [缓存结构变更] jnpf-java-cloud"));
assertTrue(md.contains("> **分支**: code/redis_change_detection_v1.0"));
assertTrue(md.contains("> **时间**: 2026-07-13 16:54:17"));
- assertTrue(md.contains("`tenant:db:content:*`"));
- assertTrue(md.contains("value 值从 “{\"dbName\":\"\""));
- assertTrue(md.contains("变更为 “{\"vo\":"));
+ assertTrue(md.contains("- **Key --> tenant:db:content:*\u200b**"));
+ assertTrue(md.contains("{\"dbName\":\"\",\"linkList\":[{\"id\":\"\"}]}"));
+ assertTrue(md.contains("{\"vo\":{\"dbName\":\"\",\"linkList\":[{\"id\":\"\"}]},\"expiresAtMs\":0}"));
assertFalse(md.contains("### P0"));
assertFalse(md.contains("位置"));
assertFalse(md.contains("模式"));
@@ -75,5 +75,8 @@ class ReportBuilderTest {
assertTrue(console.contains("**删除字段**: x"));
assertTrue(console.contains("======== 企微 Markdown ========"));
assertTrue(console.contains("value 值从"));
+ assertTrue(console.contains("- **Key --> k1\u200b**"));
+ assertTrue(console.contains(""));
+ assertTrue(console.contains(""));
}
}