Explorar el Código

feat(tdd): S-cfc-122 guhe.report.personalAssert 个人层双断言键名/内容断言入口与 ND 参考常量(契约 9/9 绿)

E2E Test Bot hace 4 días
padre
commit
b3206dcf2b

+ 28 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/attribution/PersonalLayerDualAssertion.java

@@ -74,6 +74,9 @@ public class PersonalLayerDualAssertion {
     public static final Pattern KNOWLEDGE_LEAK_KEY_PATTERN =
             Pattern.compile("缺[\\u4e00-\\u9fff]{1,10}补[\\u4e00-\\u9fff]{1,10}");
 
+    /** 「ND 参考」标记(低于检出丰度标注,ND = not detected),内容级扫全文锚点(§2.1 / T2 内容级)。 */
+    public static final String ND_REFERENCE_MARK = "ND 参考";
+
     private static final Pattern[] CONTENT_PATTERNS = {
             PAGE_TAIL_PATTERN, ND_TOKEN_PATTERN, KNOWLEDGE_LEAK_KEY_PATTERN
     };
@@ -168,6 +171,31 @@ public class PersonalLayerDualAssertion {
         return true;
     }
 
+    /**
+     * 键名级断言入口(写库前):待入库个人层键须 ∈ {@link #PERSONAL_KEYS} 白名单。
+     *
+     * <p>知识层键 / 未知键 / 分页残段伪键返回 {@code false},写库前应拒绝写入个人层
+     * (T2 个人层双断言-键名级,L2-4)。</p>
+     *
+     * @param key 待入库键名(如「大肠杆菌改善方式」)
+     * @return true = 个人层键(通过键名级断言)
+     */
+    public static boolean assertPersonalKey(String key) {
+        return isPersonalKey(key);
+    }
+
+    /**
+     * 字符串内容级断言入口(写库前):对个人层串值扫全文,不含分页残段 / {@code ND 参考} 即通过。
+     *
+     * <p>正样本「大肠杆菌改善方式以『苦丁茶』开头」必须放行(T2 正样本,不得误杀合法干预文本)。</p>
+     *
+     * @param content 个人层条目内容(可空)
+     * @return true = 内容干净(无分页残段 {@code 34/167 …} / {@code ND 参考} / 知识层泄漏桥接词)
+     */
+    public static boolean assertContentClean(String content) {
+        return isCleanContent(content);
+    }
+
     // ==================== 违规载体 ====================
 
     /** 单条断言违规 */