diff --git a/.tegami/knowledge-graph-module.md b/.tegami/knowledge-graph-module.md new file mode 100644 index 000000000..6d39c7066 --- /dev/null +++ b/.tegami/knowledge-graph-module.md @@ -0,0 +1,11 @@ +--- +packages: + orgmemory: patch +subject: Isolate Knowledge Graph lifecycle and processing boundaries +--- + +## Improvements + +Knowledge Graph indexing, processing profiles, lifecycle operations, curation, +exploration, and export now share an explicit module boundary, reducing coupling +and making future graph changes safer to verify and release. diff --git a/apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java b/apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java index 97d656900..7f1fee6e1 100644 --- a/apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java +++ b/apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java @@ -2,8 +2,8 @@ import com.orgmemory.core.knowledge.sourceledger.SourceIngestionProperties; -import com.orgmemory.core.knowledge.GraphExplorerProperties; -import com.orgmemory.core.knowledge.GraphProcessingProperties; +import com.orgmemory.core.knowledge.graph.GraphExplorerProperties; +import com.orgmemory.core.knowledge.graph.GraphProcessingProperties; import com.orgmemory.core.knowledge.KnowledgeEmbeddingProperties; import com.orgmemory.core.knowledge.KnowledgeRetrievalProperties; import com.orgmemory.core.shared.secret.SecretCipherProperties; diff --git a/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java b/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java index 6fb821002..5e15f74a7 100644 --- a/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java +++ b/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java @@ -1,8 +1,8 @@ package com.orgmemory.api.knowledge; import com.orgmemory.api.security.CurrentActorProvider; -import com.orgmemory.core.knowledge.GraphIndexJobView; -import com.orgmemory.core.knowledge.GraphIndexLifecycleService; +import com.orgmemory.core.knowledge.graph.GraphIndexJobView; +import com.orgmemory.core.knowledge.graph.GraphIndexLifecycleService; import com.orgmemory.core.knowledge.asset.KnowledgeAssetLifecycleService; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRef; import io.swagger.v3.oas.annotations.Operation; diff --git a/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphExplorerController.java b/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphExplorerController.java index 555c1b5ab..cc374c4b1 100644 --- a/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphExplorerController.java +++ b/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphExplorerController.java @@ -1,8 +1,8 @@ package com.orgmemory.api.knowledge; import com.orgmemory.api.security.CurrentActorProvider; -import com.orgmemory.core.knowledge.KnowledgeGraphExplorerService; -import com.orgmemory.core.knowledge.KnowledgeGraphView; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphExplorerService; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphView; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletResponse; import java.util.UUID; diff --git a/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementController.java b/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementController.java index 2052cab1b..48ed55b9f 100644 --- a/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementController.java +++ b/apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementController.java @@ -2,9 +2,9 @@ import com.orgmemory.api.ApiRequestException; import com.orgmemory.api.security.CurrentActorProvider; -import com.orgmemory.core.knowledge.KnowledgeGraphCurationCommand; -import com.orgmemory.core.knowledge.KnowledgeGraphCurationService; -import com.orgmemory.core.knowledge.KnowledgeGraphExportService; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphCurationCommand; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphCurationService; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphExportService; import com.orgmemory.core.organization.CurrentActor; import com.orgmemory.graphrag.curation.GraphCurationRecord; import com.orgmemory.graphrag.curation.GraphIdentityKind; diff --git a/apps/api/src/test/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementControllerTests.java b/apps/api/src/test/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementControllerTests.java index 971335c2d..82ae5ee17 100644 --- a/apps/api/src/test/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementControllerTests.java +++ b/apps/api/src/test/java/com/orgmemory/api/knowledge/KnowledgeGraphManagementControllerTests.java @@ -7,9 +7,9 @@ import static org.mockito.Mockito.when; import com.orgmemory.api.security.CurrentActorProvider; -import com.orgmemory.core.knowledge.KnowledgeGraphCurationCommand; -import com.orgmemory.core.knowledge.KnowledgeGraphCurationService; -import com.orgmemory.core.knowledge.KnowledgeGraphExportService; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphCurationCommand; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphCurationService; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphExportService; import com.orgmemory.core.organization.CurrentActor; import java.util.UUID; import org.junit.jupiter.api.Test; diff --git a/apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java b/apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java index 008ac295f..6214790b4 100644 --- a/apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java +++ b/apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java @@ -3,8 +3,8 @@ import com.orgmemory.core.knowledge.sourceledger.SourceIngestionProperties; import com.orgmemory.core.knowledge.CanonicalHybridKnowledgeSearch; -import com.orgmemory.core.knowledge.GraphProcessingProperties; -import com.orgmemory.core.knowledge.KnowledgeGraphExplorerConfiguration; +import com.orgmemory.core.knowledge.graph.GraphProcessingProperties; +import com.orgmemory.core.knowledge.graph.KnowledgeGraphExplorerConfiguration; import com.orgmemory.core.knowledge.KnowledgeRetrievalProperties; import com.orgmemory.core.shared.secret.SecretCipherProperties; import com.orgmemory.worker.authorization.AssetAuthorizationConvergenceProperties; diff --git a/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java b/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java index 791600f59..92c45fddd 100644 --- a/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java +++ b/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java @@ -3,10 +3,10 @@ import com.orgmemory.core.ai.AiRoute; import com.orgmemory.core.ai.AiRouteResolver; import com.orgmemory.core.ai.AiWorkload; -import com.orgmemory.core.knowledge.ClaimedGraphIndex; -import com.orgmemory.core.knowledge.GraphIndexChunk; -import com.orgmemory.core.knowledge.GraphIndexingCoordinator; -import com.orgmemory.core.knowledge.GraphIndexingStoppedException; +import com.orgmemory.core.knowledge.graph.ClaimedGraphIndex; +import com.orgmemory.core.knowledge.graph.GraphIndexChunk; +import com.orgmemory.core.knowledge.graph.GraphIndexingCoordinator; +import com.orgmemory.core.knowledge.graph.GraphIndexingStoppedException; import com.orgmemory.graphrag.indexing.ExtractedChunk; import com.orgmemory.graphrag.indexing.GraphContributionAssembler; import com.orgmemory.graphrag.indexing.LightRagEmbeddingPayloads; diff --git a/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java b/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java index 5d2baeca9..ce0d6eeaf 100644 --- a/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java +++ b/apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java @@ -1,8 +1,8 @@ package com.orgmemory.worker.graph; -import com.orgmemory.core.knowledge.ClaimedGraphIndex; -import com.orgmemory.core.knowledge.GraphIndexChunk; -import com.orgmemory.core.knowledge.GraphIndexingCoordinator; +import com.orgmemory.core.knowledge.graph.ClaimedGraphIndex; +import com.orgmemory.core.knowledge.graph.GraphIndexChunk; +import com.orgmemory.core.knowledge.graph.GraphIndexingCoordinator; import com.orgmemory.graphrag.cache.CanonicalCacheKeyHasher; import com.orgmemory.graphrag.cache.ModelInvocationCache; import com.orgmemory.graphrag.cache.RetrievalResultCache; diff --git a/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java b/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java index 240dd82fc..afd245a41 100644 --- a/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java +++ b/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java @@ -19,12 +19,12 @@ import com.orgmemory.core.ai.AiRoute; import com.orgmemory.core.ai.AiRouteResolver; import com.orgmemory.core.ai.AiWorkload; -import com.orgmemory.core.knowledge.ClaimedGraphIndex; +import com.orgmemory.core.knowledge.graph.ClaimedGraphIndex; import com.orgmemory.core.knowledge.EmbeddingDistanceMetric; import com.orgmemory.core.knowledge.EmbeddingProfileRef; -import com.orgmemory.core.knowledge.GraphIndexChunk; -import com.orgmemory.core.knowledge.GraphIndexingCoordinator; -import com.orgmemory.core.knowledge.GraphProcessingProfileRef; +import com.orgmemory.core.knowledge.graph.GraphIndexChunk; +import com.orgmemory.core.knowledge.graph.GraphIndexingCoordinator; +import com.orgmemory.core.knowledge.graph.GraphProcessingProfileRef; import com.orgmemory.graphrag.extraction.LightRagExtractionPrompt; import com.orgmemory.graphrag.model.ExtractedEntity; import com.orgmemory.graphrag.model.ExtractedRelation; diff --git a/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java b/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java index 0205fded5..3ab7fe69c 100644 --- a/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java +++ b/apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java @@ -9,12 +9,12 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.orgmemory.core.knowledge.ClaimedGraphIndex; +import com.orgmemory.core.knowledge.graph.ClaimedGraphIndex; import com.orgmemory.core.knowledge.EmbeddingDistanceMetric; import com.orgmemory.core.knowledge.EmbeddingProfileRef; -import com.orgmemory.core.knowledge.GraphIndexChunk; -import com.orgmemory.core.knowledge.GraphIndexingCoordinator; -import com.orgmemory.core.knowledge.GraphProcessingProfileRef; +import com.orgmemory.core.knowledge.graph.GraphIndexChunk; +import com.orgmemory.core.knowledge.graph.GraphIndexingCoordinator; +import com.orgmemory.core.knowledge.graph.GraphProcessingProfileRef; import com.orgmemory.graphrag.cache.ModelInvocationCache; import com.orgmemory.graphrag.cache.RetrievalResultCache; import com.orgmemory.graphrag.model.FloatVector; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfile.java b/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfile.java index 123cd7662..bf5acb9c0 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfile.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfile.java @@ -41,7 +41,7 @@ public class EmbeddingProfile { protected EmbeddingProfile() { } - EmbeddingProfileRef toRef() { + public EmbeddingProfileRef toRef() { return new EmbeddingProfileRef( id, organizationId, diff --git a/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfileRepository.java b/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfileRepository.java index ca9c97ce4..41cc79c47 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfileRepository.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/EmbeddingProfileRepository.java @@ -4,7 +4,7 @@ import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; -interface EmbeddingProfileRepository extends JpaRepository { +public interface EmbeddingProfileRepository extends JpaRepository { Optional findByOrganizationIdAndProfileKey(UUID organizationId, String profileKey); diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeResolver.java b/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeResolver.java index 1e0b07fbc..87d1abc7d 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeResolver.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeResolver.java @@ -34,7 +34,7 @@ * permission-aware retrieval, graph and citation use cases. */ @Service -class KnowledgeEvidenceScopeResolver { +public class KnowledgeEvidenceScopeResolver { private static final PermissionKey CAN_VIEW = PermissionKey.of("can_view"); private static final String RESOURCE_TYPE = "knowledge_asset"; @@ -65,7 +65,7 @@ class KnowledgeEvidenceScopeResolver { } @Transactional(readOnly = true) - ResolvedKnowledgeEvidenceScope resolve( + public ResolvedKnowledgeEvidenceScope resolve( CurrentActor actor, String expectedAuthorizationModelId) { Objects.requireNonNull(actor, "actor"); diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeUnavailableException.java b/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeUnavailableException.java index 4a14ac397..734b5ca55 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeUnavailableException.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeEvidenceScopeUnavailableException.java @@ -1,11 +1,11 @@ package com.orgmemory.core.knowledge; -final class KnowledgeEvidenceScopeUnavailableException extends RuntimeException { +public final class KnowledgeEvidenceScopeUnavailableException extends RuntimeException { private final String reasonCode; private final String policyVersion; - KnowledgeEvidenceScopeUnavailableException( + public KnowledgeEvidenceScopeUnavailableException( String reasonCode, String policyVersion) { super("Knowledge evidence authorization scope is unavailable"); diff --git a/core/src/main/java/com/orgmemory/core/knowledge/ResolvedKnowledgeEvidenceScope.java b/core/src/main/java/com/orgmemory/core/knowledge/ResolvedKnowledgeEvidenceScope.java index e319fdc4d..f48a968e0 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/ResolvedKnowledgeEvidenceScope.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/ResolvedKnowledgeEvidenceScope.java @@ -9,7 +9,7 @@ import java.util.Set; import java.util.UUID; -record ResolvedKnowledgeEvidenceScope( +public record ResolvedKnowledgeEvidenceScope( UUID organizationId, UUID actorUserId, UUID actorDepartmentId, @@ -19,7 +19,7 @@ record ResolvedKnowledgeEvidenceScope( Map> assetIdsByKnowledgeSpace, Map aclGenerationByKnowledgeSpace) { - ResolvedKnowledgeEvidenceScope { + public ResolvedKnowledgeEvidenceScope { Objects.requireNonNull(organizationId, "organizationId"); Objects.requireNonNull(actorUserId, "actorUserId"); authorizationModelId = required( @@ -42,17 +42,17 @@ record ResolvedKnowledgeEvidenceScope( } } - Set allAssetIds() { + public Set allAssetIds() { LinkedHashSet all = new LinkedHashSet<>(); assetIdsByKnowledgeSpace.values().forEach(all::addAll); return Set.copyOf(all); } - Set knowledgeSpaceIds() { + public Set knowledgeSpaceIds() { return assetIdsByKnowledgeSpace.keySet(); } - SecureKnowledgeRetrievalStore.RetrievalScope toRetrievalScope() { + public SecureKnowledgeRetrievalStore.RetrievalScope toRetrievalScope() { return new SecureKnowledgeRetrievalStore.RetrievalScope( organizationId, actorUserId, @@ -63,7 +63,7 @@ SecureKnowledgeRetrievalStore.RetrievalScope toRetrievalScope() { evaluatedAt); } - AuthorizedEvidenceScope forKnowledgeSpace(UUID knowledgeSpaceId) { + public AuthorizedEvidenceScope forKnowledgeSpace(UUID knowledgeSpaceId) { Objects.requireNonNull(knowledgeSpaceId, "knowledgeSpaceId"); return new AuthorizedEvidenceScope( organizationId, diff --git a/core/src/main/java/com/orgmemory/core/knowledge/SecureKnowledgeRetrievalStore.java b/core/src/main/java/com/orgmemory/core/knowledge/SecureKnowledgeRetrievalStore.java index c13077864..8d295ca7c 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/SecureKnowledgeRetrievalStore.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/SecureKnowledgeRetrievalStore.java @@ -272,7 +272,7 @@ List semantic( return jdbc.query(sql, parameters, SecureKnowledgeRetrievalStore::mapCandidate); } - List recheck( + public List recheck( RetrievalScope scope, Collection chunkIds) { if (chunkIds.isEmpty()) { diff --git a/core/src/main/java/com/orgmemory/core/knowledge/SecureRetrievalCandidate.java b/core/src/main/java/com/orgmemory/core/knowledge/SecureRetrievalCandidate.java index 4b5565026..54a2c3080 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/SecureRetrievalCandidate.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/SecureRetrievalCandidate.java @@ -2,7 +2,7 @@ import java.util.UUID; -record SecureRetrievalCandidate( +public record SecureRetrievalCandidate( UUID organizationId, UUID chunkId, UUID knowledgeAssetId, diff --git a/core/src/main/java/com/orgmemory/core/knowledge/asset/KnowledgeChunkProjection.java b/core/src/main/java/com/orgmemory/core/knowledge/asset/KnowledgeChunkProjection.java new file mode 100644 index 000000000..7a3582bc4 --- /dev/null +++ b/core/src/main/java/com/orgmemory/core/knowledge/asset/KnowledgeChunkProjection.java @@ -0,0 +1,30 @@ +package com.orgmemory.core.knowledge.asset; + +import com.orgmemory.graphrag.model.FloatVector; +import java.util.Objects; +import java.util.UUID; + +public record KnowledgeChunkProjection( + UUID id, + int index, + String content, + String heading, + int tokenCount, + FloatVector embedding) { + + public KnowledgeChunkProjection { + Objects.requireNonNull(id, "id"); + if (index < 0) { + throw new IllegalArgumentException("index must be non-negative"); + } + content = Objects.requireNonNull(content, "content").strip(); + if (content.isEmpty()) { + throw new IllegalArgumentException("content must not be blank"); + } + heading = heading == null || heading.isBlank() ? null : heading.strip(); + if (tokenCount < 0) { + throw new IllegalArgumentException("tokenCount must be non-negative"); + } + Objects.requireNonNull(embedding, "embedding"); + } +} diff --git a/core/src/main/java/com/orgmemory/core/knowledge/asset/KnowledgeChunkProjectionStore.java b/core/src/main/java/com/orgmemory/core/knowledge/asset/KnowledgeChunkProjectionStore.java index 296f3bd1a..d9152be10 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/asset/KnowledgeChunkProjectionStore.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/asset/KnowledgeChunkProjectionStore.java @@ -1,7 +1,6 @@ package com.orgmemory.core.knowledge.asset; import com.orgmemory.core.knowledge.EmbeddingProfileRef; -import com.orgmemory.core.knowledge.GraphIndexChunk; import com.orgmemory.core.knowledge.PgVectorLiteral; import java.sql.Types; @@ -149,7 +148,7 @@ public int activate( } @Transactional(readOnly = true) - public List loadActive( + public List loadActive( UUID organizationId, UUID sourceRevisionId, UUID knowledgeAssetId, @@ -173,7 +172,7 @@ public List loadActive( .addValue("knowledgeAssetId", knowledgeAssetId) .addValue("knowledgeAssetVersionId", knowledgeAssetVersionId) .addValue("projectionGeneration", projectionGeneration), - (resultSet, rowNumber) -> new GraphIndexChunk( + (resultSet, rowNumber) -> new KnowledgeChunkProjection( resultSet.getObject("id", UUID.class), resultSet.getInt("chunk_index"), resultSet.getString("content"), diff --git a/core/src/main/java/com/orgmemory/core/knowledge/connector/ConnectorSourceRevisionCoordinator.java b/core/src/main/java/com/orgmemory/core/knowledge/connector/ConnectorSourceRevisionCoordinator.java index 27cefc7d2..7b77b1d99 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/connector/ConnectorSourceRevisionCoordinator.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/connector/ConnectorSourceRevisionCoordinator.java @@ -1,7 +1,7 @@ package com.orgmemory.core.knowledge.connector; import com.orgmemory.core.knowledge.EmbeddingProfileRef; -import com.orgmemory.core.knowledge.GraphIndexJobQueue; +import com.orgmemory.core.knowledge.graph.GraphIndexJobQueue; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRef; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/ClaimedGraphIndex.java similarity index 95% rename from core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/ClaimedGraphIndex.java index 5d8e9c857..b3cc7070a 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/ClaimedGraphIndex.java @@ -1,5 +1,6 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.EmbeddingProfileRef; import java.util.List; import java.util.Objects; import java.util.UUID; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphExplorerProperties.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphExplorerProperties.java similarity index 95% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphExplorerProperties.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphExplorerProperties.java index c88fbe1ff..7ee74b17e 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphExplorerProperties.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphExplorerProperties.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexChunk.java similarity index 95% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexChunk.java index c4b9ea8d4..368839a63 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexChunk.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.graphrag.model.FloatVector; import java.util.Objects; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJob.java similarity index 99% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJob.java index 0ba9af498..2d8f18a1a 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJob.java @@ -1,5 +1,6 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.SourceFailureMessage; import com.orgmemory.core.shared.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobQueue.java similarity index 99% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobQueue.java index f4227b651..defa64538 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobQueue.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRef; import com.orgmemory.core.knowledge.asset.KnowledgeAssetVersion; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobRepository.java similarity index 96% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobRepository.java index dc484494c..bff72b4c1 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobRepository.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import java.time.Instant; import java.util.Optional; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobStatus.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobStatus.java similarity index 72% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobStatus.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobStatus.java index 0462bb2cf..1a1d758d9 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobStatus.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobStatus.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; enum GraphIndexJobStatus { PENDING, diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobView.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobView.java similarity index 92% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobView.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobView.java index d0bd6d291..af19a07eb 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobView.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexJobView.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import java.time.Instant; import java.util.UUID; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexLifecycleService.java similarity index 99% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexLifecycleService.java index ce7bf76f5..27da63c4a 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexLifecycleService.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.core.knowledge.asset.KnowledgeAsset; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRef; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexingCoordinator.java similarity index 93% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexingCoordinator.java index 5583a25b9..800b14856 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexingCoordinator.java @@ -1,5 +1,8 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.EmbeddingProfile; +import com.orgmemory.core.knowledge.EmbeddingProfileRef; +import com.orgmemory.core.knowledge.EmbeddingProfileRepository; import com.orgmemory.core.knowledge.asset.KnowledgeAsset; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRepository; import com.orgmemory.core.knowledge.asset.KnowledgeAssetVersion; @@ -179,11 +182,20 @@ private Optional currentClaim(GraphIndexJob job) { GraphProcessingProfileRef graphProcessingProfile = graphProcessingProfiles.get(job.getGraphProcessingProfileId()); var activeChunks = chunks.loadActive( - job.getOrganizationId(), - job.getSourceRevisionId(), - job.getKnowledgeAssetId(), - job.getKnowledgeAssetVersionId(), - job.getProjectionGeneration()); + job.getOrganizationId(), + job.getSourceRevisionId(), + job.getKnowledgeAssetId(), + job.getKnowledgeAssetVersionId(), + job.getProjectionGeneration()) + .stream() + .map(chunk -> new GraphIndexChunk( + chunk.id(), + chunk.index(), + chunk.content(), + chunk.heading(), + chunk.tokenCount(), + chunk.embedding())) + .toList(); if (activeChunks.isEmpty()) { throw new IllegalStateException( "Graph index source has no active chunks for the pinned generation"); diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingStoppedException.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexingStoppedException.java similarity index 92% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingStoppedException.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexingStoppedException.java index c8ccb44b8..0c4910aa4 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingStoppedException.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphIndexingStoppedException.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import java.util.Objects; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRef.java similarity index 93% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRef.java index 7034f2f25..ef8d54907 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRef.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.graphrag.processing.GraphProcessingProfile; import java.util.Objects; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRegistry.java similarity index 98% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRegistry.java index d68b28c50..880b53155 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRegistry.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.graphrag.processing.GraphProcessingProfile; import java.nio.charset.StandardCharsets; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRepository.java similarity index 88% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRepository.java index 122af068d..82bb4b448 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileRepository.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import java.util.Optional; import java.util.UUID; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileResolver.java similarity index 97% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileResolver.java index 6ce3f4559..e5d430d62 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProfileResolver.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.core.ai.AiRoute; import com.orgmemory.core.ai.AiRouteResolver; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProperties.java similarity index 98% rename from core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProperties.java index 188196bc4..bba059ed1 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/GraphProcessingProperties.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationCommand.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationCommand.java similarity index 99% rename from core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationCommand.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationCommand.java index 6ae4f4544..9ba34a809 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationCommand.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationCommand.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.core.shared.error.BusinessValidationException; import com.orgmemory.graphrag.curation.GraphIdentityKind; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationService.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationService.java similarity index 96% rename from core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationService.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationService.java index 79a88a094..9903a941f 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationService.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationService.java @@ -1,5 +1,12 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeUnavailableException; +import com.orgmemory.core.knowledge.KnowledgeProjectionNamespaces; +import com.orgmemory.core.knowledge.KnowledgeResourceNotFoundException; +import com.orgmemory.core.knowledge.KnowledgeRetrievalUnavailableException; +import com.orgmemory.core.knowledge.ResolvedKnowledgeEvidenceScope; +import com.orgmemory.core.knowledge.SecureKnowledgeRetrievalStore; import com.orgmemory.core.knowledge.asset.KnowledgeAsset; import com.orgmemory.core.knowledge.asset.KnowledgeAssetNotFoundException; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRepository; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerConfiguration.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerConfiguration.java similarity index 91% rename from core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerConfiguration.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerConfiguration.java index 615d3afd6..b0ca02d10 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerConfiguration.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerConfiguration.java @@ -1,5 +1,6 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver; import com.orgmemory.core.authorization.RelationshipAuthorizationPort; import com.orgmemory.core.knowledge.space.KnowledgeSpaceRepository; import com.orgmemory.core.permission.PermissionAuditService; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerService.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerService.java similarity index 97% rename from core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerService.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerService.java index dfded4228..aa57a03a7 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerService.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerService.java @@ -1,5 +1,10 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeUnavailableException; +import com.orgmemory.core.knowledge.KnowledgeProjectionNamespaces; +import com.orgmemory.core.knowledge.KnowledgeRetrievalUnavailableException; +import com.orgmemory.core.knowledge.ResolvedKnowledgeEvidenceScope; import com.orgmemory.core.authorization.AuthorizationDecision; import com.orgmemory.core.authorization.PermissionKey; import com.orgmemory.core.authorization.RelationshipAuthorizationPort; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExportService.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExportService.java similarity index 93% rename from core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExportService.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExportService.java index 0c365fad5..48fca4184 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphExportService.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExportService.java @@ -1,5 +1,10 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeUnavailableException; +import com.orgmemory.core.knowledge.KnowledgeProjectionNamespaces; +import com.orgmemory.core.knowledge.KnowledgeRetrievalUnavailableException; +import com.orgmemory.core.knowledge.ResolvedKnowledgeEvidenceScope; import com.orgmemory.core.authorization.PermissionKey; import com.orgmemory.core.authorization.RelationshipAuthorizationPort; import com.orgmemory.core.authorization.RelationshipAuthorizationQuery; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphView.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphView.java similarity index 98% rename from core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphView.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphView.java index 1bfaf7922..fbdf3d81e 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/KnowledgeGraphView.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphView.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.graphrag.model.EvidenceReference; import java.util.List; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/PersistedGraphProcessingProfile.java similarity index 95% rename from core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java rename to core/src/main/java/com/orgmemory/core/knowledge/graph/PersistedGraphProcessingProfile.java index d03e7430b..645e08827 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/PersistedGraphProcessingProfile.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.graphrag.processing.GraphProcessingProfile; import jakarta.persistence.Column; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/graph/package-info.java b/core/src/main/java/com/orgmemory/core/knowledge/graph/package-info.java new file mode 100644 index 000000000..5f054434c --- /dev/null +++ b/core/src/main/java/com/orgmemory/core/knowledge/graph/package-info.java @@ -0,0 +1,9 @@ +/** + * Knowledge graph indexing, processing profiles, exploration, curation, and export. + * + *

This nested module remains open while direct Knowledge Asset and source-ledger dependencies + * are replaced with intentional APIs. + */ +@org.springframework.modulith.ApplicationModule( + type = org.springframework.modulith.ApplicationModule.Type.OPEN) +package com.orgmemory.core.knowledge.graph; diff --git a/core/src/main/java/com/orgmemory/core/knowledge/sourceledger/SourceIngestionCoordinator.java b/core/src/main/java/com/orgmemory/core/knowledge/sourceledger/SourceIngestionCoordinator.java index fc0a90f2e..b174f8fad 100644 --- a/core/src/main/java/com/orgmemory/core/knowledge/sourceledger/SourceIngestionCoordinator.java +++ b/core/src/main/java/com/orgmemory/core/knowledge/sourceledger/SourceIngestionCoordinator.java @@ -1,7 +1,7 @@ package com.orgmemory.core.knowledge.sourceledger; import com.orgmemory.core.knowledge.EmbeddingProfileRef; -import com.orgmemory.core.knowledge.GraphIndexJobQueue; +import com.orgmemory.core.knowledge.graph.GraphIndexJobQueue; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRef; import java.time.Duration; diff --git a/core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java b/core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java index ad230e679..955afda3d 100644 --- a/core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java +++ b/core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java @@ -53,6 +53,37 @@ void knowledgeAssetIsAnOpenNestedModuleDuringTheRefactor() { assertTrue(asset.isOpen()); } + @Test + void knowledgeGraphIsAnOpenNestedModuleDuringTheRefactor() { + var graph = modules.getModuleByName("knowledge.graph").orElseThrow(); + + assertTrue(graph.isOpen()); + } + + @Test + void knowledgeGraphTemporaryOpenBoundaryDoesNotGainNewConsumers() { + var graph = modules.getModuleByName("knowledge.graph").orElseThrow(); + var dependencies = modules.stream() + .flatMap(module -> module.getDirectDependencies(modules).stream()) + .filter(dependency -> dependency.getTargetModule().equals(graph)) + .toList(); + var consumerTypes = dependencies.stream() + .map(dependency -> dependency.getSourceType().getName()) + .collect(TreeSet::new, Set::add, Set::addAll); + var consumedInternalTypes = dependencies.stream() + .map(dependency -> dependency.getTargetType().getName()) + .collect(TreeSet::new, Set::add, Set::addAll); + + assertEquals( + Set.of( + "com.orgmemory.core.knowledge.connector.ConnectorSourceRevisionCoordinator", + "com.orgmemory.core.knowledge.sourceledger.SourceIngestionCoordinator"), + consumerTypes); + assertEquals( + Set.of("com.orgmemory.core.knowledge.graph.GraphIndexJobQueue"), + consumedInternalTypes); + } + @Test void knowledgeAssetTemporaryOpenBoundaryDoesNotGainNewConsumers() { var asset = modules.getModuleByName("knowledge.asset").orElseThrow(); @@ -70,12 +101,12 @@ void knowledgeAssetTemporaryOpenBoundaryDoesNotGainNewConsumers() { assertEquals( Set.of( "com.orgmemory.core.knowledge.AuthorizationResourceDirectory", - "com.orgmemory.core.knowledge.GraphIndexingCoordinator", - "com.orgmemory.core.knowledge.GraphIndexJobQueue", - "com.orgmemory.core.knowledge.GraphIndexLifecycleService", + "com.orgmemory.core.knowledge.graph.GraphIndexingCoordinator", + "com.orgmemory.core.knowledge.graph.GraphIndexJobQueue", + "com.orgmemory.core.knowledge.graph.GraphIndexLifecycleService", "com.orgmemory.core.knowledge.KnowledgeCatalogService", "com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver", - "com.orgmemory.core.knowledge.KnowledgeGraphCurationService", + "com.orgmemory.core.knowledge.graph.KnowledgeGraphCurationService", "com.orgmemory.core.knowledge.connector.ConnectorReconciler", "com.orgmemory.core.knowledge.connector.ConnectorSourceRevisionCoordinator", "com.orgmemory.core.knowledge.sourceledger.KnowledgeIngestionService", @@ -97,6 +128,7 @@ void knowledgeAssetTemporaryOpenBoundaryDoesNotGainNewConsumers() { "com.orgmemory.core.knowledge.asset.KnowledgeAssetVersionRepository", "com.orgmemory.core.knowledge.asset.KnowledgeAssetVersionStatus", "com.orgmemory.core.knowledge.asset.KnowledgeChunkDraft", + "com.orgmemory.core.knowledge.asset.KnowledgeChunkProjection", "com.orgmemory.core.knowledge.asset.KnowledgeChunkProjectionStore", "com.orgmemory.core.knowledge.asset.KnowledgeContentType", "com.orgmemory.core.knowledge.asset.PublishKnowledgeAssetCommand"), diff --git a/core/src/test/java/com/orgmemory/core/knowledge/CanonicalHybridKnowledgeSearchTests.java b/core/src/test/java/com/orgmemory/core/knowledge/CanonicalHybridKnowledgeSearchTests.java index a932e3af5..4a5f75993 100644 --- a/core/src/test/java/com/orgmemory/core/knowledge/CanonicalHybridKnowledgeSearchTests.java +++ b/core/src/test/java/com/orgmemory/core/knowledge/CanonicalHybridKnowledgeSearchTests.java @@ -202,7 +202,8 @@ List semantic( } @Override - List recheck(RetrievalScope scope, Collection chunkIds) { + public List recheck( + RetrievalScope scope, Collection chunkIds) { return rechecked; } } diff --git a/core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java b/core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java index 824a910c2..f09ba0977 100644 --- a/core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java +++ b/core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java @@ -890,7 +890,7 @@ private NeverRecheckedStore() { } @Override - List recheck( + public List recheck( RetrievalScope scope, java.util.Collection chunkIds) { recheckCount++; @@ -911,7 +911,7 @@ private RecordingRecheckedStore( } @Override - List recheck( + public List recheck( RetrievalScope scope, java.util.Collection chunkIds) { recheckedChunkIds = List.copyOf(chunkIds); diff --git a/core/src/test/java/com/orgmemory/core/knowledge/GraphIndexLifecycleServiceTests.java b/core/src/test/java/com/orgmemory/core/knowledge/graph/GraphIndexLifecycleServiceTests.java similarity index 99% rename from core/src/test/java/com/orgmemory/core/knowledge/GraphIndexLifecycleServiceTests.java rename to core/src/test/java/com/orgmemory/core/knowledge/graph/GraphIndexLifecycleServiceTests.java index 647c720f4..42f7d904c 100644 --- a/core/src/test/java/com/orgmemory/core/knowledge/GraphIndexLifecycleServiceTests.java +++ b/core/src/test/java/com/orgmemory/core/knowledge/graph/GraphIndexLifecycleServiceTests.java @@ -1,4 +1,4 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; import com.orgmemory.core.knowledge.asset.KnowledgeAsset; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRef; diff --git a/core/src/test/java/com/orgmemory/core/knowledge/GraphIndexingCoordinatorTests.java b/core/src/test/java/com/orgmemory/core/knowledge/graph/GraphIndexingCoordinatorTests.java similarity index 96% rename from core/src/test/java/com/orgmemory/core/knowledge/GraphIndexingCoordinatorTests.java rename to core/src/test/java/com/orgmemory/core/knowledge/graph/GraphIndexingCoordinatorTests.java index 936cc4920..99ee251c7 100644 --- a/core/src/test/java/com/orgmemory/core/knowledge/GraphIndexingCoordinatorTests.java +++ b/core/src/test/java/com/orgmemory/core/knowledge/graph/GraphIndexingCoordinatorTests.java @@ -1,10 +1,15 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.EmbeddingDistanceMetric; +import com.orgmemory.core.knowledge.EmbeddingProfile; +import com.orgmemory.core.knowledge.EmbeddingProfileRef; +import com.orgmemory.core.knowledge.EmbeddingProfileRepository; import com.orgmemory.core.knowledge.asset.KnowledgeAsset; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRepository; import com.orgmemory.core.knowledge.asset.KnowledgeAssetVersion; import com.orgmemory.core.knowledge.asset.KnowledgeAssetVersionRepository; import com.orgmemory.core.knowledge.asset.KnowledgeAssetVersionStatus; +import com.orgmemory.core.knowledge.asset.KnowledgeChunkProjection; import com.orgmemory.core.knowledge.asset.KnowledgeChunkProjectionStore; import com.orgmemory.core.knowledge.acl.SourceAclSnapshot; @@ -133,7 +138,7 @@ void setUpCurrentTarget() { ASSET_ID, VERSION_ID, 1)) - .thenReturn(List.of(new GraphIndexChunk( + .thenReturn(List.of(new KnowledgeChunkProjection( CHUNK_ID, 0, "Current chunk", @@ -152,6 +157,9 @@ void claimsOnlyPinnedCurrentInputsAndRetriesTheSameDurableJob() { assertEquals(REVISION_ID, claim.sourceRevisionId()); assertEquals(ACL_SNAPSHOT_ID, claim.aclSnapshotId()); assertEquals(9L, claim.aclGeneration()); + assertEquals(CHUNK_ID, claim.chunks().getFirst().id()); + assertEquals("Current chunk", claim.chunks().getFirst().content()); + assertEquals(1536, claim.chunks().getFirst().embedding().dimensions()); assertEquals(GraphIndexJobStatus.PROCESSING, job.getStatus()); coordinator.fail( diff --git a/core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationServiceTests.java b/core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationServiceTests.java similarity index 95% rename from core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationServiceTests.java rename to core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationServiceTests.java index 92007cb33..65077c10b 100644 --- a/core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphCurationServiceTests.java +++ b/core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphCurationServiceTests.java @@ -1,5 +1,10 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver; +import com.orgmemory.core.knowledge.KnowledgeResourceNotFoundException; +import com.orgmemory.core.knowledge.ResolvedKnowledgeEvidenceScope; +import com.orgmemory.core.knowledge.SecureKnowledgeRetrievalStore; +import com.orgmemory.core.knowledge.SecureRetrievalCandidate; import com.orgmemory.core.knowledge.asset.KnowledgeAsset; import com.orgmemory.core.knowledge.asset.KnowledgeAssetRepository; diff --git a/core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerServiceTests.java b/core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerServiceTests.java similarity index 98% rename from core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerServiceTests.java rename to core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerServiceTests.java index a3d5c8119..8288b29a2 100644 --- a/core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphExplorerServiceTests.java +++ b/core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExplorerServiceTests.java @@ -1,5 +1,8 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver; +import com.orgmemory.core.knowledge.KnowledgeRetrievalUnavailableException; +import com.orgmemory.core.knowledge.ResolvedKnowledgeEvidenceScope; import com.orgmemory.core.knowledge.space.KnowledgeSpaceRepository; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphExportServiceTests.java b/core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExportServiceTests.java similarity index 93% rename from core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphExportServiceTests.java rename to core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExportServiceTests.java index a1aa819be..ae6605eb2 100644 --- a/core/src/test/java/com/orgmemory/core/knowledge/KnowledgeGraphExportServiceTests.java +++ b/core/src/test/java/com/orgmemory/core/knowledge/graph/KnowledgeGraphExportServiceTests.java @@ -1,5 +1,9 @@ -package com.orgmemory.core.knowledge; +package com.orgmemory.core.knowledge.graph; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeResolver; +import com.orgmemory.core.knowledge.KnowledgeEvidenceScopeUnavailableException; +import com.orgmemory.core.knowledge.KnowledgeRetrievalUnavailableException; +import com.orgmemory.core.knowledge.ResolvedKnowledgeEvidenceScope; import com.orgmemory.core.knowledge.space.KnowledgeSpaceRepository; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/docs/increments/active/2026-07-31-spring-modulith-package-refactor/design.md b/docs/increments/active/2026-07-31-spring-modulith-package-refactor/design.md index d2b40f45d..f513a2134 100644 --- a/docs/increments/active/2026-07-31-spring-modulith-package-refactor/design.md +++ b/docs/increments/active/2026-07-31-spring-modulith-package-refactor/design.md @@ -118,6 +118,23 @@ indexing, and the PostgreSQL vector literal utility shared by chunk projection and retrieval. These dependencies must be replaced or declared intentionally before `knowledge.asset`, `knowledge.graph`, and `knowledge.retrieval` close. +## Seventh Delivery Slice + +The Knowledge Graph pull request moves graph-index jobs and claiming, +processing-profile persistence and resolution, lifecycle orchestration, +curation, exploration, and export into `knowledge.graph`. GraphRAG query +retrieval remains in the future retrieval slice because it owns authorized +evidence resolution and result assembly rather than graph lifecycle. + +The compiler exposes temporary graph edges to the embedding-profile registry, +retrieval evidence scope and canonical recheck, Knowledge Asset chunk +projection, connector reconciliation, and source ingestion. The nested module +starts open, and structural tests pin both its current consumer types and the +internal graph types they consume so this migration debt cannot grow silently. +The asset-owned projection store returns a graph-neutral +`KnowledgeChunkProjection`; `knowledge.graph` maps that value into +`GraphIndexChunk`, preventing a reciprocal Asset-to-Graph dependency. + ## Strongest Counterargument Ordinary internal subpackages would reduce directory size immediately and diff --git a/docs/increments/active/2026-07-31-spring-modulith-package-refactor/plan.md b/docs/increments/active/2026-07-31-spring-modulith-package-refactor/plan.md index 5b1539893..e32db5b7e 100644 --- a/docs/increments/active/2026-07-31-spring-modulith-package-refactor/plan.md +++ b/docs/increments/active/2026-07-31-spring-modulith-package-refactor/plan.md @@ -116,7 +116,7 @@ tests passed; `:core:test` passed; and the terminating repository-wide operating-model and mechanical source checks passed. The pull request contains 44 changed files. -## Current Pull Request Gates +## Sixth Pull Request Evidence - Knowledge Asset aggregate/version/evidence, lifecycle and publication orchestration, authorization convergence, and chunk projection form the open @@ -128,3 +128,39 @@ operating-model and mechanical source checks passed. The pull request contains - `:core:test` and the repository terminating `clean test` gate pass. - The pull request changes fewer than 100 files and completes the normal CI/review/merge loop before the next Knowledge slice starts. + +Local verification on 2026-08-01: focused asset, publication/convergence, +graph-edge, ingestion, retrieval, catalog, vector-literal, and Modulith tests +passed; the terminating repository-wide `clean test` completed successfully; +the docs operating-model and mechanical source checks passed; and both +CodeRabbit findings were resolved. The pull request contains 60 changed files. + +## Current Pull Request Gates + +- Graph-index jobs and claiming, processing profiles, lifecycle orchestration, + curation, exploration, and export form the open `knowledge.graph` nested + module. +- GraphRAG query retrieval remains with the future retrieval slice. +- Compiler-forced embedding-profile and retrieval-scope visibility is tracked + as temporary edge debt, while a structural allowlist prevents the graph + module's open boundary from gaining consumers or deeper internal coupling. +- Focused graph, retrieval-regression, worker, API, and Modulith tests pass. +- `:core:test` and the repository terminating `clean test` gate pass. +- The pull request changes fewer than 100 files and completes the normal + CI/review/merge loop before the retrieval slice starts. + +Local verification on 2026-08-01: production and test sources compiled; +focused graph, retrieval-regression, API, worker, and Modulith tests passed; +`:core:test` passed; and the terminating repository-wide `clean test` +completed successfully in 5m13s across 108 tasks. The docs operating-model +and mechanical source checks passed. The pull request contains 56 changed +files. After merging current `origin/main` at `e088e9c9`, a second `clean test` +completed successfully in 6m18s across 99 tasks and the docs check passed +against 378 Markdown files. After merging current `origin/main` again at +`f99afb9f`, resolving the retrieval-scope helper seam, and rerunning focused +tests, a third `clean test` completed successfully in 6m46s across 108 tasks. +The product release contract check passed with the required Tegami entry. +Review identified and removed the reciprocal Asset-to-Graph projection type +dependency; Asset now returns a graph-neutral projection that Graph maps at its +own boundary. Focused and core tests passed after that repair, and the final +repository-wide `clean test` completed successfully in 6m26s across 99 tasks.