Repository navigation
feat(graph-rag): add LightRAG extraction parity - #30
Conversation
|
Warning Review limit reached
Next review available in: 14 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (20)
📝 WalkthroughWalkthroughThis PR adds LightRAG-based multi-round extraction, permission-scoped graph views and summarization, contribution-level types and weights, updated PostgreSQL/AGE persistence, and worker indexing diagnostics, configuration, and evidence-aware embeddings. ChangesGraph extraction and summarization
Contribution persistence and indexing
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant Worker
participant SpringAiEntityRelationExtractor
participant SpringAiExtractionModel
participant GraphContributionAssembler
participant PostgresGraphProjectionStore
Worker->>SpringAiEntityRelationExtractor: submit ExtractionRequest
SpringAiEntityRelationExtractor->>SpringAiExtractionModel: execute extraction rounds
SpringAiExtractionModel-->>SpringAiEntityRelationExtractor: return candidate entities and relations
SpringAiEntityRelationExtractor-->>Worker: return ExtractionResult with diagnostics
Worker->>GraphContributionAssembler: assemble evidence contributions
GraphContributionAssembler->>PostgresGraphProjectionStore: persist canonical entities and contributions
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
integrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.java (1)
1387-1398: 🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick winBatch-size estimate omits the
search_contentcolumn.
search_content(inserted at column 14 viarelationSearchContent(contribution), lines 1417-1418) concatenatestype+description+keywords— fields already counted in the estimator — but the estimator itself doesn't addsearch_content's length. This underestimates actual row payload by roughly the size of those three fields again, risking batches larger thanmaxBatchPayloadBytesintends.🛠️ Proposed fix
BoundedBatcher.forEachBatch( contributions, options.maxBatchRecords(), options.maxBatchPayloadBytes(), contribution -> 448L + utf8Bytes(contribution.type()) + utf8Bytes(contribution.description()) + contribution.keywords().stream() .mapToLong(PostgresGraphProjectionStore::utf8Bytes) - .sum(), + .sum() + + utf8Bytes(relationSearchContent(contribution)), batch -> insertRelationContributionBatch(sql, batch));🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@integrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.java` around lines 1387 - 1398, Update the BoundedBatcher size estimator in the relation contribution batching flow to include the UTF-8 byte length of the derived search_content value produced by relationSearchContent(contribution), in addition to the existing fields and overhead. Reuse the existing relationSearchContent and utf8Bytes symbols so the estimate matches the value inserted by insertRelationContributionBatch.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@components/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphView.java`:
- Around line 92-100: Update RelationView construction to receive the resolved
source and target CanonicalEntity.normalizedName values from the shared
contribution snapshots, then change summaryInput() to compose the subject name
from those entity names instead of relation.sourceEntityId() and
relation.targetEntityId().
In
`@components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateEntity.java`:
- Around line 20-26: Duplicate requireText helpers should be centralized into
one shared graph-rag-core text-validation utility, preserving null rejection,
stripping, blank rejection, and IllegalArgumentException behavior. Replace the
local helpers with calls to that utility in
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateEntity.java:20-26,
ExtractionCandidateRelation.java:35-41, ExtractionRoundRequest.java:28-34,
authorization/PermissionScopedGraphView.java:109-115,
summarization/ScopedDescriptionSet.java:32-38,
summarization/DescriptionSummaryRequest.java:36-42,
integrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiExtractionModel.java:140-146,
and SpringAiDescriptionSummaryModel.java:69-75; remove each duplicated private
requireText implementation and update imports as needed.
In
`@components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionProfile.java`:
- Around line 114-128: Update ExtractionProfile.fingerprint() to add a literal
field-boundary marker immediately before iterating entityTypeGuidance, matching
the existing examples marker. Keep the entityTypeGuidance values and subsequent
examples hashing order unchanged so the fingerprint distinguishes list
boundaries.
In
`@components/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizer.java`:
- Around line 45-75: Ensure every invocation in IterativeDescriptionSummarizer
stays within options.contextTokenLimit(): before the current.size() <= 2 fast
path calls invoke, validate or reduce the combined input, and update groups(...)
so singleton fragments are not appended to an oversized group. Handle individual
fragments larger than the limit by rejecting or safely splitting them before any
invoke(scopedDescriptions, ...) call, while preserving singleton content without
model invocation when appropriate.
In
`@core/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sql`:
- Line 54: Update the extraction_profile_fingerprint columns in the migration to
use text with a CHECK constraint enforcing the 64-character fingerprint length,
replacing char(64) while preserving the NOT NULL requirement. Apply the same
change to both occurrences in the migration.
- Line 20: Update the affected index drop/create statements in migrations V32,
V33–V34, V36, V50–V51, V76, V89–V90, and V92 to use concurrent index operations.
Split these operations into non-transactional Flyway migrations or otherwise
configure the relevant migrations with executeInTransaction = false, ensuring no
CONCURRENTLY statement runs inside a transaction.
- Around line 26-31: Replace the generated STORED search_vector columns in
migration V32, including the additional occurrences noted in the comment, with a
non-blocking rollout: add each column as nullable, backfill existing rows in
batches, and maintain future values with a trigger, or compute them at read
time. Avoid any ADD COLUMN ... GENERATED ALWAYS ... STORED definition that
forces a full-table rewrite under an exclusive lock.
- Line 14: Update migration V32’s constraint changes to avoid immediate
full-table scans and blocking locks: remove the affected ALTER COLUMN ... SET
NOT NULL statements, add equivalent CHECK constraints with NOT VALID for the
non-null/non-blank guarantees, then validate each constraint separately with
VALIDATE CONSTRAINT. Apply this consistently to the referenced constraint
locations while preserving their existing validation semantics.
In
`@integrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStoreIntegrationTests.java`:
- Around line 151-155: Update
InMemoryGraphProjection.loadVisibleRelationWeights() to aggregate each visible
contribution using contribution.weight() rather than
contribution.provenance().confidence(). Preserve the existing visibility
filtering and relation grouping so its results match
PostgresGraphProjectionStore.
In
`@integrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiExtractionModel.java`:
- Line 62: Update extract() and its item-mapping helpers mapEntity, mapRelation,
and requireConfidence so null elements, missing confidence values, and
converter.convert failures are caught and surfaced as GraphExtractionException
rather than raw NullPointerException. Preserve the existing domain exception
behavior and include the original failure as the cause where supported.
---
Outside diff comments:
In
`@integrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.java`:
- Around line 1387-1398: Update the BoundedBatcher size estimator in the
relation contribution batching flow to include the UTF-8 byte length of the
derived search_content value produced by relationSearchContent(contribution), in
addition to the existing fields and overhead. Reuse the existing
relationSearchContent and utf8Bytes symbols so the estimate matches the value
inserted by insertRelationContributionBatch.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: e9b91a6a-41f7-4827-8a74-f456469c9ff1
⛔ Files ignored due to path filters (3)
docs/increments/active/2026-07-23-full-lightrag-semantic-port/design.mdis excluded by!docs/**docs/increments/active/2026-07-23-full-lightrag-semantic-port/plan.mdis excluded by!docs/**docs/research/lightrag-v1.5.4-parity-manifest.mdis excluded by!docs/**
📒 Files selected for processing (52)
apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.javaapps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.javaapps/worker/src/main/resources/application.ymlapps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMerger.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphView.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateEntity.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateRelation.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionConversationMessage.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundResponse.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractor.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/CanonicalEntity.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/CanonicalRelation.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EntityContribution.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EvidenceProvenance.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractedRelation.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionDiagnostics.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionProfile.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRoundMetrics.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/RelationContribution.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/DescriptionSummaryModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/ExtractionModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryOptions.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizer.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/ScopedDescriptionSet.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMergerTests.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractorTests.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/GraphContributionAssemblerTests.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizerTests.javacomponents/graph-rag-testkit/src/main/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjection.javacomponents/graph-rag-testkit/src/test/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjectionSecurityTests.javacore/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.javacore/src/main/java/com/orgmemory/core/knowledge/KnowledgeChunkProjectionStore.javacore/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sqlintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjection.javaintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjectionIntegrationTests.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStoreIntegrationTests.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/GraphExtractionPrompt.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModel.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractor.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiExtractionModel.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/StructuredExtractionResponse.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModelTests.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractorTests.java
💤 Files with no reviewable changes (2)
- integrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/GraphExtractionPrompt.java
- components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/CanonicalRelation.java
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
- GitHub Check: Backend · Java 25
🧰 Additional context used
📓 Path-based instructions (6)
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
**/*: Before changing unfamiliar Spring Boot 4, Spring Modulith 2, Spring AI 2, Gradle, React, Vite, Tailwind, or TypeScript APIs, consult Context7/current official documentation and the projectorgmemory-*verification skills.
Readdocs/guidelines/agent-safety.mdbefore retrieval, AI, MCP, permission, upload, graph, or export work.
Never commit.envfiles, provider keys, tokens, or customer data.
Run the relevant gates fromdocs/guidelines/testing-harness.md; use a terminating clean test as the context gate, and do not treatbootRunas verification.
Current behavior belongs in architecture/specs only after it exists in code; intent belongs in vision, roadmap, or an active increment, and repository state must not be duplicated across documents.
Files:
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/CanonicalEntity.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/DescriptionSummaryModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/ExtractionModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRoundMetrics.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionConversationMessage.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryOptions.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateEntity.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModelTests.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizerTests.javacore/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.javaapps/worker/src/main/resources/application.ymlcomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EntityContribution.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundResponse.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateRelation.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionDiagnostics.javacore/src/main/java/com/orgmemory/core/knowledge/KnowledgeChunkProjectionStore.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizer.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/ScopedDescriptionSet.javaapps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractedRelation.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/StructuredExtractionResponse.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRequest.javacomponents/graph-rag-testkit/src/main/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjection.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/RelationContribution.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/GraphContributionAssemblerTests.javaintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjection.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphView.javacore/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sqlapps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionProfile.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiExtractionModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EvidenceProvenance.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractorTests.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractorTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMerger.javaapps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMergerTests.javacomponents/graph-rag-testkit/src/test/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjectionSecurityTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractor.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjectionIntegrationTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStoreIntegrationTests.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractor.javaintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.java
**/*.{java,sql}
📄 CodeRabbit inference engine (CLAUDE.md)
Pair JPA schema changes with a Flyway migration.
Files:
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/CanonicalEntity.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/DescriptionSummaryModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/ExtractionModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRoundMetrics.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionConversationMessage.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryOptions.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateEntity.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModelTests.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizerTests.javacore/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EntityContribution.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundResponse.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateRelation.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionDiagnostics.javacore/src/main/java/com/orgmemory/core/knowledge/KnowledgeChunkProjectionStore.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizer.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/ScopedDescriptionSet.javaapps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractedRelation.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/StructuredExtractionResponse.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRequest.javacomponents/graph-rag-testkit/src/main/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjection.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/RelationContribution.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/GraphContributionAssemblerTests.javaintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjection.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphView.javacore/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sqlapps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionProfile.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiExtractionModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EvidenceProvenance.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractorTests.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractorTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMerger.javaapps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMergerTests.javacomponents/graph-rag-testkit/src/test/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjectionSecurityTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractor.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjectionIntegrationTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStoreIntegrationTests.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractor.javaintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.java
**/*.java
📄 CodeRabbit inference engine (CLAUDE.md)
JetBrains IDE inspection is a Java-backend gate only.
Files:
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/CanonicalEntity.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/DescriptionSummaryModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/ExtractionModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRoundMetrics.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionConversationMessage.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryOptions.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateEntity.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModelTests.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizerTests.javacore/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryRequest.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EntityContribution.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundResponse.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateRelation.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionDiagnostics.javacore/src/main/java/com/orgmemory/core/knowledge/KnowledgeChunkProjectionStore.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizer.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/ScopedDescriptionSet.javaapps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractedRelation.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/StructuredExtractionResponse.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionResult.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRequest.javacomponents/graph-rag-testkit/src/main/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjection.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/RelationContribution.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/GraphContributionAssemblerTests.javaintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjection.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphView.javaapps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionProfile.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiExtractionModel.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EvidenceProvenance.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractorTests.javaintegrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractorTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMerger.javaapps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.javacomponents/graph-rag-core/src/test/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMergerTests.javacomponents/graph-rag-testkit/src/test/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjectionSecurityTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractor.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjectionIntegrationTests.javacomponents/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.javaintegrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStoreIntegrationTests.javaintegrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractor.javaintegrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.java
core/src/main/java/com/orgmemory/core/{authorization,knowledge,permission}/**/*.java
⚙️ CodeRabbit configuration file
core/src/main/java/com/orgmemory/core/{authorization,knowledge,permission}/**/*.java: Treat PostgreSQL ACL evidence as canonical and OpenFGA as the relationship
authorization decision point. Authorization must fail closed. Filtering
must happen before ranking, LIMIT, graph traversal, answer generation,
export, and citation rendering. Flag metadata or timing leak paths.
Files:
core/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.javacore/src/main/java/com/orgmemory/core/knowledge/KnowledgeChunkProjectionStore.java
**/*.{yml,yaml,properties}
📄 CodeRabbit inference engine (CLAUDE.md)
Keep
ddl-auto=validatein application configuration.
Files:
apps/worker/src/main/resources/application.yml
core/src/main/resources/db/migration/*.sql
⚙️ CodeRabbit configuration file
core/src/main/resources/db/migration/*.sql: Flyway migrations are immutable after release. Check tenant isolation,
foreign keys, uniqueness, indexes, append-only evidence semantics, safe
defaults, and compatibility with PostgreSQL 18 plus pgvector.
Files:
core/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sql
🪛 ast-grep (0.44.1)
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionProfile.java
[warning] 155-155: Use a randomly-generated IV
Context: byte[] bytes = value.getBytes(StandardCharsets.UTF_8);
Note: [CWE-329] Generation of Predictable IV with CBC Mode.
(random-iv)
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMerger.java
[warning] 168-168: Use a randomly-generated IV
Context: byte[] bytes = value.getBytes(StandardCharsets.UTF_8);
Note: [CWE-329] Generation of Predictable IV with CBC Mode.
(random-iv)
🪛 SQLFluff (4.2.2)
core/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sql
[error] 20-20: DROP statement should use CONCURRENTLY to avoid locking the table.
(PG01)
[error] 33-34: CREATE INDEX should use CONCURRENTLY to avoid locking the table during the build.
(PG01)
[error] 36-36: DROP statement should use CONCURRENTLY to avoid locking the table.
(PG01)
[error] 50-51: CREATE INDEX should use CONCURRENTLY to avoid locking the table during the build.
(PG01)
[error] 76-76: DROP statement should use CONCURRENTLY to avoid locking the table.
(PG01)
[error] 89-90: CREATE INDEX should use CONCURRENTLY to avoid locking the table during the build.
(PG01)
[error] 92-92: DROP statement should use CONCURRENTLY to avoid locking the table.
(PG01)
🪛 Squawk (2.59.0)
core/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sql
[warning] 5-5: Changing the size of a varchar field requires an ACCESS EXCLUSIVE lock, that will prevent all reads and writes to the table. Use a TEXT field with a CHECK constraint.
(prefer-text-field)
[warning] 14-14: Setting a column NOT NULL blocks reads while the table is scanned. Make the field nullable and use a CHECK constraint instead.
(adding-not-nullable-field)
[warning] 17-18: By default new constraints require a table scan and block writes to the table while that scan occurs. Use NOT VALID with a later VALIDATE CONSTRAINT call.
(constraint-missing-not-valid)
[warning] 20-20: A normal DROP INDEX acquires an ACCESS EXCLUSIVE lock on the table, blocking other accesses until the index drop can complete. Drop the index CONCURRENTLY.
(require-concurrent-index-deletion)
[warning] 23-23: Dropping a column may break existing clients.
(ban-drop-column)
[warning] 26-31: Adding a generated column requires a table rewrite with an ACCESS EXCLUSIVE lock. In Postgres versions 11+, non-VOLATILE DEFAULTs can be added without a rewrite. Add the column as nullable, backfill existing rows, and add a trigger to update the column on write instead.
(adding-field-with-default)
[warning] 33-34: During normal index creation, table updates are blocked, but reads are still allowed. Use concurrently to avoid blocking writes.
(require-concurrent-index-creation)
[warning] 36-36: A normal DROP INDEX acquires an ACCESS EXCLUSIVE lock on the table, blocking other accesses until the index drop can complete. Drop the index CONCURRENTLY.
(require-concurrent-index-deletion)
[warning] 40-40: Dropping a column may break existing clients.
(ban-drop-column)
[warning] 41-41: Dropping a column may break existing clients.
(ban-drop-column)
[warning] 44-46: Adding a generated column requires a table rewrite with an ACCESS EXCLUSIVE lock. In Postgres versions 11+, non-VOLATILE DEFAULTs can be added without a rewrite. Add the column as nullable, backfill existing rows, and add a trigger to update the column on write instead.
(adding-field-with-default)
[warning] 47-48: By default new constraints require a table scan and block writes to the table while that scan occurs. Use NOT VALID with a later VALIDATE CONSTRAINT call.
(constraint-missing-not-valid)
[warning] 50-51: During normal index creation, table updates are blocked, but reads are still allowed. Use concurrently to avoid blocking writes.
(require-concurrent-index-creation)
[warning] 54-54: Using character is likely a mistake and should almost always be replaced by text or varchar.
(ban-char-field)
[warning] 55-55: Adding a generated column requires a table rewrite with an ACCESS EXCLUSIVE lock. In Postgres versions 11+, non-VOLATILE DEFAULTs can be added without a rewrite. Add the column as nullable, backfill existing rows, and add a trigger to update the column on write instead.
(adding-field-with-default)
[warning] 59-60: By default new constraints require a table scan and block writes to the table while that scan occurs. Use NOT VALID with a later VALIDATE CONSTRAINT call.
(constraint-missing-not-valid)
[warning] 63-63: Changing the size of a varchar field requires an ACCESS EXCLUSIVE lock, that will prevent all reads and writes to the table. Use a TEXT field with a CHECK constraint.
(prefer-text-field)
[warning] 72-72: Setting a column NOT NULL blocks reads while the table is scanned. Make the field nullable and use a CHECK constraint instead.
(adding-not-nullable-field)
[warning] 73-74: By default new constraints require a table scan and block writes to the table while that scan occurs. Use NOT VALID with a later VALIDATE CONSTRAINT call.
(constraint-missing-not-valid)
[warning] 76-76: A normal DROP INDEX acquires an ACCESS EXCLUSIVE lock on the table, blocking other accesses until the index drop can complete. Drop the index CONCURRENTLY.
(require-concurrent-index-deletion)
[warning] 79-79: Dropping a column may break existing clients.
(ban-drop-column)
[warning] 82-87: Adding a generated column requires a table rewrite with an ACCESS EXCLUSIVE lock. In Postgres versions 11+, non-VOLATILE DEFAULTs can be added without a rewrite. Add the column as nullable, backfill existing rows, and add a trigger to update the column on write instead.
(adding-field-with-default)
[warning] 89-90: During normal index creation, table updates are blocked, but reads are still allowed. Use concurrently to avoid blocking writes.
(require-concurrent-index-creation)
[warning] 92-92: A normal DROP INDEX acquires an ACCESS EXCLUSIVE lock on the table, blocking other accesses until the index drop can complete. Drop the index CONCURRENTLY.
(require-concurrent-index-deletion)
[warning] 96-96: Dropping a column may break existing clients.
(ban-drop-column)
[warning] 97-97: Dropping a column may break existing clients.
(ban-drop-column)
[warning] 103-104: By default new constraints require a table scan and block writes to the table while that scan occurs. Use NOT VALID with a later VALIDATE CONSTRAINT call.
(constraint-missing-not-valid)
[warning] 110-110: Using character is likely a mistake and should almost always be replaced by text or varchar.
(ban-char-field)
[warning] 111-111: Adding a generated column requires a table rewrite with an ACCESS EXCLUSIVE lock. In Postgres versions 11+, non-VOLATILE DEFAULTs can be added without a rewrite. Add the column as nullable, backfill existing rows, and add a trigger to update the column on write instead.
(adding-field-with-default)
[warning] 115-116: By default new constraints require a table scan and block writes to the table while that scan occurs. Use NOT VALID with a later VALIDATE CONSTRAINT call.
(constraint-missing-not-valid)
🔇 Additional comments (56)
integrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModelTests.java (1)
1-52: LGTM!apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java (4)
19-28: LGTM!Also applies to: 83-88
118-148: LGTM!
223-239: LGTM!
254-264: LGTM!Also applies to: 301-345
apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.java (2)
4-4: LGTM!Also applies to: 17-37
51-83: LGTM!apps/worker/src/main/resources/application.yml (1)
87-90: LGTM!apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java (2)
56-56: LGTM!Also applies to: 66-113, 136-139
312-336: LGTM!Also applies to: 351-356
core/src/main/java/com/orgmemory/core/knowledge/GraphIndexChunk.java (1)
6-6: LGTM!Also applies to: 17-21
core/src/main/java/com/orgmemory/core/knowledge/KnowledgeChunkProjectionStore.java (1)
156-156: LGTM!Also applies to: 175-176
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateEntity.java (1)
5-18: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionCandidateRelation.java (1)
7-33: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundRequest.java (1)
7-26: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionResult.java (1)
8-43: LGTM!integrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiDescriptionSummaryModel.java (1)
14-67: LGTM!integrations/graph-rag-spring-ai/src/test/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractorTests.java (1)
24-156: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryRequest.java (1)
7-34: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/ScopedDescriptionSet.java (1)
15-30: 🎯 Functional CorrectnessNo change needed for description deduplication.
IterativeDescriptionSummarizerdedupes before invoking the model and returns a single sanitized description when only one unique description remains, so it does not construct aDescriptionSummaryRequestwith fewer than two descriptions.components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractor.java (3)
202-249: Deterministic round-merge logic (normalize-then-merge-by-key, sorted output, self-loop rejection) looks correct and consistent with the "deterministic correction merging" objective.
251-310: LGTM!
64-93: 🎯 Functional CorrectnessNo change needed for this gleaning round count.
maxGleaningRoundsis intentionally bounded to0or1for LightRAG v1.5.4 parity:ExtractionProfile,GraphIndexingProperties, andExtractionRoundRequestall reject or enforce> 1; the current code runs one optional continuation round when enabled.> Likely an incorrect or invalid review comment.components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.java (1)
74-117: Prompt-version gate and template argument counts check out (verified each.formatted()call against its placeholder count).integrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/SpringAiEntityRelationExtractor.java (2)
18-31: Delegate wiring toLightRagEntityRelationExtractorwith tokenizer injection looks correct;PROMPT_VERSIONsourced fromLightRagExtractionPrompt.VERSIONkeeps a single source of truth.
33-50: LGTM!integrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/PostgresGraphProjectionStore.java (4)
137-181: Column projection changes correctly reflect the entity/relation-type-as-contribution-metadata model and align with the assembler's provenance fingerprint.
334-353: LGTM!Also applies to: 421-428
449-495: LGTM!Also applies to: 510-562, 586-629, 653-721
1413-1415: 🗄️ Data Integrity & IntegrationNo schema mismatch here.
graph_relation_contributions.keywordsis declared asvarchar(255)[], socreateArrayOf("varchar", ...)matches the migration type name.components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionConversationMessage.java (1)
1-19: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/ExtractionRoundResponse.java (1)
6-24: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionDiagnostics.java (1)
6-24: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRoundMetrics.java (1)
6-27: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractedRelation.java (1)
6-52: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/ExtractionRequest.java (1)
7-48: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/ExtractionModel.java (1)
1-11: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.java (1)
151-152: LGTM!Also applies to: 171-178, 262-262, 276-301, 308-342
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/DescriptionSummaryModel.java (1)
5-8: LGTM!integrations/graph-rag-spring-ai/src/main/java/com/orgmemory/integrations/graphrag/springai/StructuredExtractionResponse.java (1)
5-23: LGTM!components/graph-rag-core/src/test/java/com/orgmemory/graphrag/extraction/LightRagEntityRelationExtractorTests.java (1)
23-286: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryOptions.java (1)
6-26: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/DescriptionSummaryResult.java (1)
5-19: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizer.java (1)
16-34: LGTM!Also applies to: 80-93, 124-146
components/graph-rag-core/src/test/java/com/orgmemory/graphrag/summarization/IterativeDescriptionSummarizerTests.java (1)
17-74: LGTM!integrations/graph-rag-postgres/src/main/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjection.java (1)
242-278: LGTM!components/graph-rag-testkit/src/main/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjection.java (1)
250-277: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMerger.java (1)
1-275: LGTM!components/graph-rag-core/src/test/java/com/orgmemory/graphrag/authorization/PermissionScopedGraphMergerTests.java (1)
1-187: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/CanonicalEntity.java (1)
6-10: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EntityContribution.java (1)
6-19: LGTM!components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/RelationContribution.java (1)
7-29: LGTM!integrations/graph-rag-postgres/src/test/java/com/orgmemory/graphrag/postgres/ApacheAgeGraphTopologyProjectionIntegrationTests.java (1)
120-168: LGTM!components/graph-rag-testkit/src/test/java/com/orgmemory/graphrag/testkit/InMemoryGraphProjectionSecurityTests.java (1)
37-52: LGTM!Also applies to: 199-288
components/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/GraphContributionAssemblerTests.java (1)
34-62: LGTM!Also applies to: 79-167
components/graph-rag-core/src/main/java/com/orgmemory/graphrag/model/EvidenceProvenance.java (1)
33-51: 🎯 Functional CorrectnessDefault fingerprint literal length is valid.
The all-zero literal is exactly 64 hex characters, so it does not trigger the existing
[0-9a-f]{64}fingerprint validation rule.> Likely an incorrect or invalid review comment.
Summary
Architecture
Verification
./gradlew.bat --no-daemon compileJava compileTestJava./gradlew.bat --no-daemon checkIntegration flow
This PR targets
light-rag. It must not merge directly intomain.Summary by CodeRabbit
New Features
Bug Fixes