ai 全域零 Meta Schema 引用:AI 上下文 / prompt 构建不读 schema 字段可见性(aiContext); + * "metadataFields" 是向量库(Redis/Milvus)字段定义,非 Meta Schema。schema 侧 aiContext 可见性仅在 meta 域定义、 + * 不在 ai 实例持久化,运行时注入不留痕 → 已验证真实 0。 + * (若未来 AI 运行时按 schema aiContext 裁剪并留痕计数,须重评,见 execution §九.5。) + * 机械化断言见 {@code AiContextUsageContributorTest}。
+ */ +@Service +public class AiContextUsageContributor implements MetaSchemaUsageContributor { + + @Override + public MetaImpactDimension dimension() { + return MetaImpactDimension.AI_CONTEXT; + } + + @Override + public MetaSchemaDimensionImpact previewDimensionImpact(MetaSchemaImpactProbe probe) { + return MetaSchemaDimensionImpact.verifiedZero(MetaImpactDimension.AI_CONTEXT); + } +} diff --git a/muse-cloud/muse-module-ai/muse-module-ai-server/src/test/java/cn/iocoder/muse/module/ai/application/impact/AiContextUsageContributorTest.java b/muse-cloud/muse-module-ai/muse-module-ai-server/src/test/java/cn/iocoder/muse/module/ai/application/impact/AiContextUsageContributorTest.java new file mode 100644 index 00000000..155034a1 --- /dev/null +++ b/muse-cloud/muse-module-ai/muse-module-ai-server/src/test/java/cn/iocoder/muse/module/ai/application/impact/AiContextUsageContributorTest.java @@ -0,0 +1,35 @@ +package cn.iocoder.muse.module.ai.application.impact; + +import cn.iocoder.muse.module.meta.api.impact.MetaImpactDimension; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaDimensionImpact; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaImpactProbe; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * AIContext 维度 VERIFIED_ZERO 贡献者测试 + 机械化漂移断言。 + */ +class AiContextUsageContributorTest { + + @Test + void isVerifiedZero() { + AiContextUsageContributor contributor = new AiContextUsageContributor(); + assertEquals(MetaImpactDimension.AI_CONTEXT, contributor.dimension()); + MetaSchemaDimensionImpact impact = contributor.previewDimensionImpact( + new MetaSchemaImpactProbe(1L, "k", 1, "h", Set.of("a"), Set.of(), Set.of())); + assertEquals(MetaSchemaDimensionImpact.RealityKind.VERIFIED_ZERO, impact.realityKind()); + assertEquals(0, impact.affectedInstanceCount()); + } + + @Test + void hasNoDataDependency() { + // 机械化断言:VERIFIED_ZERO 贡献者不得注入数据依赖;一旦出现字段说明开始读 ai 数据,须改 REAL_COUNT 重评。 + long fields = Arrays.stream(AiContextUsageContributor.class.getDeclaredFields()) + .filter(f -> !f.isSynthetic()).count(); + assertEquals(0, fields, "VERIFIED_ZERO 贡献者出现字段依赖,疑似开始消费 schema,须重新评估真实计数"); + } +} diff --git a/muse-cloud/muse-module-content/muse-module-content-server/src/main/java/cn/iocoder/muse/module/content/application/impact/ContentExportUsageContributor.java b/muse-cloud/muse-module-content/muse-module-content-server/src/main/java/cn/iocoder/muse/module/content/application/impact/ContentExportUsageContributor.java new file mode 100644 index 00000000..b4457c99 --- /dev/null +++ b/muse-cloud/muse-module-content/muse-module-content-server/src/main/java/cn/iocoder/muse/module/content/application/impact/ContentExportUsageContributor.java @@ -0,0 +1,29 @@ +package cn.iocoder.muse.module.content.application.impact; + +import cn.iocoder.muse.module.meta.api.impact.MetaImpactDimension; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaDimensionImpact; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaImpactProbe; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaUsageContributor; +import org.springframework.stereotype.Service; + +/** + * Export 维度 Meta Schema 用量贡献者(content 域)。 + * + *{@code ExportTaskDO} 零 schema 引用,导出按 work 正文内容生成(非 schema 字段投影); + * schema 侧的 exportable 可见性仅在 meta 域定义、不在 export 任务实例持久化——故「已验证真实 0」。 + * (若未来导出改为按 schema exportable 字段裁剪并记录字段级用量,须改置 meta-server 真实计数, + * 见 execution §三 Export 行。)机械化断言见 {@code ContentVerifiedZeroContributorTest}。
+ */ +@Service +public class ContentExportUsageContributor implements MetaSchemaUsageContributor { + + @Override + public MetaImpactDimension dimension() { + return MetaImpactDimension.EXPORT; + } + + @Override + public MetaSchemaDimensionImpact previewDimensionImpact(MetaSchemaImpactProbe probe) { + return MetaSchemaDimensionImpact.verifiedZero(MetaImpactDimension.EXPORT); + } +} diff --git a/muse-cloud/muse-module-content/muse-module-content-server/src/main/java/cn/iocoder/muse/module/content/application/impact/ContentWorkUsageContributor.java b/muse-cloud/muse-module-content/muse-module-content-server/src/main/java/cn/iocoder/muse/module/content/application/impact/ContentWorkUsageContributor.java new file mode 100644 index 00000000..4b164d7d --- /dev/null +++ b/muse-cloud/muse-module-content/muse-module-content-server/src/main/java/cn/iocoder/muse/module/content/application/impact/ContentWorkUsageContributor.java @@ -0,0 +1,29 @@ +package cn.iocoder.muse.module.content.application.impact; + +import cn.iocoder.muse.module.meta.api.impact.MetaImpactDimension; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaDimensionImpact; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaImpactProbe; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaUsageContributor; +import org.springframework.stereotype.Service; + +/** + * Work 维度 Meta Schema 用量贡献者(content 域)。 + * + *work 仅通过 work_schema_id 绑定 schema(关联引用),不在 work 表持久化任何 schema 字段值—— + * 删 / 改 schema 字段不破坏 work 实例数据,故为「已验证真实 0」(非 unknown)。 + * 机械化断言见 {@code ContentVerifiedZeroContributorTest}:work 域不得出现承载 schema 字段值的动态列, + * 漂移即测试失败,强制重评 VERIFIED_ZERO。
+ */ +@Service +public class ContentWorkUsageContributor implements MetaSchemaUsageContributor { + + @Override + public MetaImpactDimension dimension() { + return MetaImpactDimension.WORK; + } + + @Override + public MetaSchemaDimensionImpact previewDimensionImpact(MetaSchemaImpactProbe probe) { + return MetaSchemaDimensionImpact.verifiedZero(MetaImpactDimension.WORK); + } +} diff --git a/muse-cloud/muse-module-content/muse-module-content-server/src/test/java/cn/iocoder/muse/module/content/application/impact/ContentVerifiedZeroContributorTest.java b/muse-cloud/muse-module-content/muse-module-content-server/src/test/java/cn/iocoder/muse/module/content/application/impact/ContentVerifiedZeroContributorTest.java new file mode 100644 index 00000000..4d9feb0c --- /dev/null +++ b/muse-cloud/muse-module-content/muse-module-content-server/src/test/java/cn/iocoder/muse/module/content/application/impact/ContentVerifiedZeroContributorTest.java @@ -0,0 +1,70 @@ +package cn.iocoder.muse.module.content.application.impact; + +import cn.iocoder.muse.module.content.dal.dataobject.ExportTaskDO; +import cn.iocoder.muse.module.content.dal.dataobject.WorkDO; +import cn.iocoder.muse.module.meta.api.impact.MetaImpactDimension; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaDimensionImpact; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaImpactProbe; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * Work / Export 维度 VERIFIED_ZERO 贡献者测试 + 机械化漂移断言。 + * + *机械化断言:一旦 work / export 实例表出现承载 schema 字段值的动态列,说明该域开始消费 schema, + * VERIFIED_ZERO 假设失效,断言失败以强制重新评估(防止静默漂移放行错误的 0)。
+ */ +class ContentVerifiedZeroContributorTest { + + /** 承载「按 schema fieldKey 的字段值」的典型列名;出现任一即视为该域开始消费 schema。 */ + private static final Setknowledge 全域零 Meta Schema 引用:其 "projection" 是跨来源 CQRS 读模型 + * (MuseKnowledgeSourceBindingProjection),与 Meta Schema 字段投影无关;KB 自有 visibilityPolicy 是知识域概念, + * 非 schema 可见性。删 / 改 schema 字段不影响 knowledge 任何实例 → 已验证真实 0(非 unknown)。 + * 机械化断言见 {@code KnowledgeProjectionUsageContributorTest}:本贡献者无数据依赖字段(漂移即失败)。
+ */ +@Service +public class KnowledgeProjectionUsageContributor implements MetaSchemaUsageContributor { + + @Override + public MetaImpactDimension dimension() { + return MetaImpactDimension.KNOWLEDGE_PROJECTION; + } + + @Override + public MetaSchemaDimensionImpact previewDimensionImpact(MetaSchemaImpactProbe probe) { + return MetaSchemaDimensionImpact.verifiedZero(MetaImpactDimension.KNOWLEDGE_PROJECTION); + } +} diff --git a/muse-cloud/muse-module-knowledge/muse-module-knowledge-server/src/test/java/cn/iocoder/muse/module/knowledge/application/impact/KnowledgeProjectionUsageContributorTest.java b/muse-cloud/muse-module-knowledge/muse-module-knowledge-server/src/test/java/cn/iocoder/muse/module/knowledge/application/impact/KnowledgeProjectionUsageContributorTest.java new file mode 100644 index 00000000..0f4da7bf --- /dev/null +++ b/muse-cloud/muse-module-knowledge/muse-module-knowledge-server/src/test/java/cn/iocoder/muse/module/knowledge/application/impact/KnowledgeProjectionUsageContributorTest.java @@ -0,0 +1,35 @@ +package cn.iocoder.muse.module.knowledge.application.impact; + +import cn.iocoder.muse.module.meta.api.impact.MetaImpactDimension; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaDimensionImpact; +import cn.iocoder.muse.module.meta.api.impact.MetaSchemaImpactProbe; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * KnowledgeProjection 维度 VERIFIED_ZERO 贡献者测试 + 机械化漂移断言。 + */ +class KnowledgeProjectionUsageContributorTest { + + @Test + void isVerifiedZero() { + KnowledgeProjectionUsageContributor contributor = new KnowledgeProjectionUsageContributor(); + assertEquals(MetaImpactDimension.KNOWLEDGE_PROJECTION, contributor.dimension()); + MetaSchemaDimensionImpact impact = contributor.previewDimensionImpact( + new MetaSchemaImpactProbe(1L, "k", 1, "h", Set.of("a"), Set.of(), Set.of())); + assertEquals(MetaSchemaDimensionImpact.RealityKind.VERIFIED_ZERO, impact.realityKind()); + assertEquals(0, impact.affectedInstanceCount()); + } + + @Test + void hasNoDataDependency() { + // 机械化断言:VERIFIED_ZERO 贡献者不得注入数据依赖;一旦出现字段说明开始查 knowledge 数据,须改 REAL_COUNT 重评。 + long fields = Arrays.stream(KnowledgeProjectionUsageContributor.class.getDeclaredFields()) + .filter(f -> !f.isSynthetic()).count(); + assertEquals(0, fields, "VERIFIED_ZERO 贡献者出现字段依赖,疑似开始消费 schema,须重新评估真实计数"); + } +}