Skip to content

Complete secure GraphRAG assistant experience#40

Merged
kl3inIT merged 3 commits into
light-ragfrom
kl3inIT/light-rag-pr12-assistant-experience
Jul 24, 2026
Merged

Complete secure GraphRAG assistant experience#40
kl3inIT merged 3 commits into
light-ragfrom
kl3inIT/light-rag-pr12-assistant-experience

Conversation

@kl3inIT

@kl3inIT kl3inIT commented Jul 24, 2026

Copy link
Copy Markdown
Owner

Summary

  • complete the secure GraphRAG assistant pipeline with server-declared citations and a protected same-origin preview flow
  • pin immutable LightRAG processing profiles through indexing, publication, retrieval, and observability
  • add upstream LightRAG parity oracles plus an offline/online RAGAS evaluation harness
  • add OpenTelemetry graph-pipeline telemetry and end-to-end assistant browser coverage
  • derive upload and citation media types from closed server-side allowlists to prevent same-origin active-content execution

Security and latency boundary

  • authorization is resolved during secure retrieval with canonical state checks before model generation
  • citation content is independently reauthorized when opened and returns 404 on denial
  • no per-token authorization call is added to streaming; it would increase latency and outage coupling without materially tightening the seconds-wide answer window
  • citation responses use nosniff, no-store, and inline/attachment allowlists

Verification

  • ./gradlew --no-daemon clean build — 109 tasks, successful
  • web lint, typecheck, build — successful
  • Playwright assistant pipeline — 6/6
  • OpenFGA model — 7/7 tests, 31/31 checks, 8/8 ListObjects
  • RAGAS evaluator — Ruff clean, 11/11 tests
  • OpenAPI contract check — successful
  • git diff --check — clean

Notes

  • JetBrains semantic inspection was unavailable in this environment; Gradle compile/test/check plus focused static and contract gates were used as the documented fallback.
  • The live RAGAS smoke was synthetic wiring validation, not a product benchmark; no raw evidence or prompts are persisted.

Summary by CodeRabbit

  • New Features

    • Assistant answers now display numbered, clickable citations linked to source previews.
    • Added safer previews for supported documents, images, and text files, with downloads for unsupported formats.
    • Added an option to re-index knowledge assets using the current processing settings.
  • Improvements

    • Graph indexing now tracks processing versions for more consistent results.
    • Added monitoring for retrieval and indexing activity without recording prompts or responses.
  • Tests

    • Expanded browser, evaluation, and citation coverage to improve reliability.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kl3inIT, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 33 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: eb115bc0-145a-4900-aaf6-9f5d4dd9c68e

📥 Commits

Reviewing files that changed from the base of the PR and between b5d2042 and 7e84c5c.

📒 Files selected for processing (10)
  • .coderabbit.yaml
  • apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java
  • core/src/main/java/com/orgmemory/core/knowledge/KnowledgeContentType.java
  • core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java
  • core/src/test/java/com/orgmemory/core/knowledge/KnowledgeContentTypeTests.java
  • evaluation/src/orgmemory_eval/models.py
  • evaluation/src/orgmemory_eval/ragas_runner.py
  • evaluation/tests/test_models.py
  • evaluation/tests/test_ragas_runner.py
📝 Walkthrough

Walkthrough

The change adds immutable graph-processing profiles, profile-aware graph indexing, citation-number propagation through assistant responses, OpenTelemetry GraphRAG events, secure media-type handling, offline evaluation tooling, and CI jobs for evaluation and browser tests.

Changes

Assistant citations and source previews

Layer / File(s) Summary
Citation contract and streaming
core/src/main/java/com/orgmemory/core/assistant/*, apps/api/src/main/java/com/orgmemory/api/assistant/*
Assistant evidence is wrapped in ordered AssistantCitation records and streamed with citation numbers and provider metadata.
Citation rendering and previews
web/src/features/assistant/components/*, web/src/components/ai-elements/message-response.tsx
Markdown citation markers become source buttons, source URLs are validated, and citation previews use React Query.
Assistant E2E coverage
web/test/e2e/assistant-pipeline.spec.ts
Playwright tests cover citation access, revoked sources, PDF previews, text-only answers, retry behavior, and stream cancellation.

Graph-processing profiles and indexing

Layer / File(s) Summary
Profile canonicalization and persistence
components/graph-rag-core/src/main/java/.../processing/*, core/src/main/java/com/orgmemory/core/knowledge/*, core/src/main/resources/db/migration/V1__baseline.sql
Processing profiles are canonically serialized, hashed, restored, persisted, and associated with graph index jobs.
Profile-aware job lifecycle
core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob*.java, core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java, core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java
Graph job enqueueing and status views include profile identity, while lifecycle operations enqueue the current profile.
Profile-bound indexing and publication
apps/worker/src/main/java/com/orgmemory/worker/graph/*, components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/*
Indexing validates pinned profiles, uses fixed LightRAG payload formats, emits staged events, and includes profile hashes in publication metadata and fingerprints.

Observability and upload handling

Layer / File(s) Summary
GraphRAG telemetry
components/graph-rag-core/src/main/java/.../observability/*, core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrieval*.java, integrations/graph-rag-observability/*
Retrieval and indexing emit validated events, and the OpenTelemetry adapter records payload-free spans.
Canonical media handling
core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java, apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java, core/src/main/java/com/orgmemory/core/knowledge/CreateUploadSourceCommand.java
Upload and citation content types are derived from allowlisted filename extensions rather than caller-provided media types.

Evaluation and CI

Layer / File(s) Summary
Offline evaluation tooling
evaluation/src/*, evaluation/oracle/*, evaluation/pyproject.toml, evaluation/README.md
Strict Pydantic evaluation models, deterministic LightRAG oracle generation, and bounded multi-trial RAGAS scoring are added.
Evaluation fixtures and tests
evaluation/baselines/*, evaluation/fixtures/*, evaluation/tests/*, components/graph-rag-core/src/test/java/...
Checked-in fixtures and tests validate oracle outputs, evaluation schemas, scoring bounds, profile canonicalization, and LightRAG payload contracts.
CI and browser test wiring
.github/workflows/ci.yml, web/package.json, web/playwright.config.ts, .gitignore
CI installs and runs Playwright tests, adds a Python evaluation job, requires it in the gate, and ignores Python artifacts.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Sequence Diagram(s)

Assistant citation flow

sequenceDiagram
  participant AssistantService
  participant AssistantController
  participant UiMessageStream
  participant AssistantAnswer
  AssistantService->>AssistantController: return numbered citations
  AssistantController->>UiMessageStream: emit source-url metadata
  UiMessageStream->>AssistantAnswer: deliver citation number and source URL
  AssistantAnswer->>AssistantAnswer: render citation marker as button
Loading

Graph indexing flow

sequenceDiagram
  participant GraphIndexLifecycleService
  participant GraphIndexJobQueue
  participant GraphProcessingProfileRegistry
  participant GraphIndexingProcessor
  participant GraphRagEventSink
  GraphIndexLifecycleService->>GraphIndexJobQueue: enqueue current profile
  GraphIndexJobQueue->>GraphProcessingProfileRegistry: resolve profile
  GraphIndexJobQueue->>GraphIndexJobQueue: persist profile-aware job
  GraphIndexingProcessor->>GraphIndexingProcessor: execute extraction, merge, embed, publish
  GraphIndexingProcessor->>GraphRagEventSink: emit stage events
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.82% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is clearly related to the PR’s main change: completing the secure GraphRAG assistant experience.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch kl3inIT/light-rag-pr12-assistant-experience

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)
apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java (1)

88-89: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove the now-unused routes.resolve(GRAPH_EXTRACTION) stub.

GraphIndexingProcessor builds the extraction route directly from extractionProfile.provider() and extractionProfile.model(), so routes.resolve(AiWorkload.GRAPH_EXTRACTION) is not exercised by this happy path. The stub that returns "gpt-5.6-sol" can be removed and replaced, if needed by strict stubbing, with never(routes.resolve(AiWorkload.GRAPH_EXTRACTION)) or another intentional assertion. Applies to line 112-113 as well, where the stubbed extractors.create(...) target has changed.

🤖 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
`@apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java`
around lines 88 - 89, Remove the unused
routes.resolve(AiWorkload.GRAPH_EXTRACTION) stub from
GraphIndexingProcessorTests, including the corresponding occurrence near the
later test lines. Update the affected extractors.create(...) stubbing to target
the route built from extractionProfile.provider() and extractionProfile.model();
if strict stubbing requires an explicit expectation, assert that
routes.resolve(AiWorkload.GRAPH_EXTRACTION) is never called.
🤖 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 @.github/workflows/ci.yml:
- Line 126: Update every GitHub Actions uses reference in the ci workflow from
mutable tags to the corresponding full immutable commit SHA, including
actions/checkout@v7.0.1. Add or preserve an adjacent Dependabot version comment
for each pinned action so future updates remain discoverable.

In
`@apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java`:
- Around line 71-93: Extract the extension-to-media-type allowlist from
CitationContentController.safeMediaType into a shared core utility, enum, or
map, including the canonical .md mapping. Update
apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java:71-93
to consume it, and update
core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java:135-144
so canonicalMediaType uses the same mapping instead of its local literals;
ensure both sites resolve every supported extension consistently.

In `@core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java`:
- Around line 67-102: Replace the hand-written SQL insert in the job enqueue
method with construction of a GraphIndexJob entity and persistence through
jobs.save(...), preserving the existing field values, defaults,
conflict/idempotency behavior, and scheduling data. Use GraphIndexJob’s entity
mapping as the single source of truth instead of duplicating its column list.

In
`@core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java`:
- Around line 84-95: Update the asset and version lookups in the relevant
GraphIndexLifecycleService method to replace both bare orElseThrow() calls with
descriptive IllegalStateException failures. Distinguish missing or archived
assets from assets whose current version is missing or not ACTIVE, while
preserving the existing filtering and currentVersionId validation.

In `@core/src/main/resources/db/migration/V1__baseline.sql`:
- Around line 367-374: Leave the existing V1 migration unchanged to preserve
Flyway checksums. Move the graph_processing_profiles table and all related
column, uniqueness, and foreign-key changes from the affected V1 sections into a
new versioned migration. In that migration, safely handle and backfill
pre-existing graph_index_jobs rows before enforcing the non-null profile
reference, then apply the constraints and indexes.

In `@evaluation/oracle/generate_lightrag_v1_5_4.py`:
- Around line 79-97: The load_upstream_weighted_polling function currently
executes only the extracted function, omitting upstream module context required
by pick_by_weighted_polling. Update it to load lightrag/utils.py through the
same importlib-based flow used by load_upstream_chunker, or execute the complete
module globals, then retrieve and return pick_by_weighted_polling from that
context.

In `@evaluation/src/orgmemory_eval/models.py`:
- Around line 9-15: Update the model containing case_id, question,
reference_answer, answer, contexts, citation_ids, and latency_ms to reject
whitespace-only semantic strings, including case IDs, questions, answers, and
citation IDs, while preserving existing length constraints. Add validation that
ensures latency_ms is finite as well as nonnegative, and apply equivalent
whitespace validation to relevant context/reference fields without altering
valid nonblank inputs.
- Line 15: Update the latency_ms field definition in the relevant model to
retain the non-negative constraint while setting allow_inf_nan=False, rejecting
both positive infinity and NaN before serialization. Add validation coverage for
inf and nan inputs.

In `@evaluation/src/orgmemory_eval/ragas_runner.py`:
- Around line 62-69: Update the argument validation in the parser flow to reject
timeout-seconds values below 1, alongside the existing max-workers validation.
Use parser.error with a clear --timeout-seconds message, while preserving valid
positive timeout values.
- Around line 51-69: Update the argument validation in the parser setup before
returning from the argument-parsing function to resolve args.input and
args.output and reject them when they refer to the same path, including
equivalent relative and absolute paths. Use parser.error with a clear message,
while preserving the existing trials and max-workers validation.

---

Outside diff comments:
In
`@apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java`:
- Around line 88-89: Remove the unused
routes.resolve(AiWorkload.GRAPH_EXTRACTION) stub from
GraphIndexingProcessorTests, including the corresponding occurrence near the
later test lines. Update the affected extractors.create(...) stubbing to target
the route built from extractionProfile.provider() and extractionProfile.model();
if strict stubbing requires an explicit expectation, assert that
routes.resolve(AiWorkload.GRAPH_EXTRACTION) is never called.
🪄 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: ad1c43d8-7a27-4c33-8c5e-9fb45bc7d980

📥 Commits

Reviewing files that changed from the base of the PR and between 626adb8 and b5d2042.

⛔ Files ignored due to path filters (9)
  • contracts/openapi.json is excluded by !contracts/openapi.json
  • docs/research/lightrag-v1.5.4-parity-manifest.md is excluded by !docs/**
  • docs/runbooks/graph-rag-production-hardening.md is excluded by !docs/**
  • docs/specs/domains/assistant-and-mcp.md is excluded by !docs/**
  • docs/specs/domains/knowledge-ingestion.md is excluded by !docs/**
  • docs/specs/domains/secure-graph-rag.md is excluded by !docs/**
  • docs/tests/domains/assistant-and-mcp.md is excluded by !docs/**
  • evaluation/uv.lock is excluded by !**/*.lock
  • web/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml, !**/pnpm-lock.yaml
📒 Files selected for processing (91)
  • .github/workflows/ci.yml
  • .gitignore
  • apps/api/build.gradle.kts
  • apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantController.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantStreamPart.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/UiMessageStream.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java
  • apps/api/src/main/java/com/orgmemory/api/source/SourceController.java
  • apps/api/src/main/resources/application.yml
  • apps/api/src/test/java/com/orgmemory/api/assistant/AssistantControllerStreamingTests.java
  • apps/api/src/test/java/com/orgmemory/api/assistant/UiMessageStreamTests.java
  • apps/api/src/test/java/com/orgmemory/api/knowledge/CitationContentControllerTests.java
  • apps/api/src/test/java/com/orgmemory/api/source/SourceUploadIntegrationTests.java
  • apps/worker/build.gradle.kts
  • apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/SpringAiGraphExtractorFactory.java
  • apps/worker/src/main/resources/application.yml
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java
  • apps/worker/src/test/java/com/orgmemory/worker/ingestion/SourceIngestionPipelineIntegrationTests.java
  • components/graph-rag-core/build.gradle.kts
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloads.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/observability/GraphRagEventSink.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphProjectionManifest.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphRevisionProjection.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/GraphProcessingProfile.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/LightRagGraphProcessingProfiles.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloadsTests.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/observability/GraphRagEventSinkTests.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/port/GraphProjectionManifestTests.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/processing/GraphProcessingProfileTests.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/query/LightRagUpstreamOracleTests.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantCitation.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantPromptFactory.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantService.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantTurn.java
  • core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java
  • core/src/main/java/com/orgmemory/core/knowledge/CreateUploadSourceCommand.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobView.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalConfiguration.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalService.java
  • core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java
  • core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java
  • core/src/main/resources/db/migration/V1__baseline.sql
  • core/src/test/java/com/orgmemory/core/assistant/AssistantServiceTests.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexLifecycleServiceTests.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexingCoordinatorTests.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java
  • core/src/test/java/com/orgmemory/core/knowledge/SourceUploadServiceTests.java
  • evaluation/README.md
  • evaluation/baselines/lightrag-v1.5.4-oracle.json
  • evaluation/fixtures/sample-evaluation.json
  • evaluation/oracle/generate_lightrag_v1_5_4.py
  • evaluation/pyproject.toml
  • evaluation/src/orgmemory_eval/__init__.py
  • evaluation/src/orgmemory_eval/models.py
  • evaluation/src/orgmemory_eval/ragas_runner.py
  • evaluation/tests/test_models.py
  • evaluation/tests/test_ragas_runner.py
  • evaluation/tests/test_upstream_oracle.py
  • integrations/ai-openai-compatible/src/main/java/com/orgmemory/integrations/ai/openai/OpenAiCompatibleChatModelProvider.java
  • integrations/graph-rag-observability/build.gradle.kts
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/GraphRagObservabilityAutoConfiguration.java
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSink.java
  • integrations/graph-rag-observability/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  • integrations/graph-rag-observability/src/test/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSinkTests.java
  • settings.gradle.kts
  • web/package.json
  • web/playwright.config.ts
  • web/src/components/ai-elements/message-response.tsx
  • web/src/features/assistant/components/assistant-answer.tsx
  • web/src/features/assistant/components/assistant-page.tsx
  • web/src/features/assistant/components/assistant-sources-panel.tsx
  • web/test/e2e/assistant-pipeline.spec.ts
💤 Files with no reviewable changes (3)
  • apps/api/src/test/java/com/orgmemory/api/source/SourceUploadIntegrationTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/CreateUploadSourceCommand.java
  • apps/api/src/main/java/com/orgmemory/api/source/SourceController.java
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Backend · Java 25
🧰 Additional context used
📓 Path-based instructions (11)
**/*

📄 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 project orgmemory-* verification skills.
Read docs/guidelines/agent-safety.md before retrieval, AI, MCP, permission, upload, graph, or export work.
Never commit .env files, provider keys, tokens, or customer data.
Run the relevant gates from docs/guidelines/testing-harness.md; use a terminating clean test as the context gate, and do not treat bootRun as 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:

  • evaluation/src/orgmemory_eval/__init__.py
  • core/src/main/java/com/orgmemory/core/assistant/AssistantCitation.java
  • evaluation/pyproject.toml
  • integrations/graph-rag-observability/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  • evaluation/baselines/lightrag-v1.5.4-oracle.json
  • settings.gradle.kts
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobView.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/observability/GraphRagEventSinkTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/LightRagGraphProcessingProfiles.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/GraphRagObservabilityAutoConfiguration.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java
  • evaluation/tests/test_upstream_oracle.py
  • apps/api/src/main/resources/application.yml
  • apps/api/src/test/java/com/orgmemory/api/assistant/AssistantControllerStreamingTests.java
  • integrations/graph-rag-observability/build.gradle.kts
  • apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java
  • apps/api/build.gradle.kts
  • core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloadsTests.java
  • core/src/test/java/com/orgmemory/core/assistant/AssistantServiceTests.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/UiMessageStream.java
  • apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java
  • apps/api/src/test/java/com/orgmemory/api/assistant/UiMessageStreamTests.java
  • components/graph-rag-core/build.gradle.kts
  • core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/query/LightRagUpstreamOracleTests.java
  • web/playwright.config.ts
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantStreamPart.java
  • evaluation/README.md
  • core/src/main/java/com/orgmemory/core/assistant/AssistantTurn.java
  • integrations/graph-rag-observability/src/test/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSinkTests.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java
  • integrations/ai-openai-compatible/src/main/java/com/orgmemory/integrations/ai/openai/OpenAiCompatibleChatModelProvider.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexLifecycleServiceTests.java
  • web/src/components/ai-elements/message-response.tsx
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/port/GraphProjectionManifestTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloads.java
  • evaluation/fixtures/sample-evaluation.json
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantController.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/SpringAiGraphExtractorFactory.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantPromptFactory.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphProjectionManifest.java
  • apps/worker/src/main/resources/application.yml
  • apps/worker/build.gradle.kts
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/processing/GraphProcessingProfileTests.java
  • web/package.json
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSink.java
  • web/src/features/assistant/components/assistant-answer.tsx
  • evaluation/oracle/generate_lightrag_v1_5_4.py
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/observability/GraphRagEventSink.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalConfiguration.java
  • evaluation/tests/test_models.py
  • evaluation/src/orgmemory_eval/models.py
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphRevisionProjection.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantService.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexingCoordinatorTests.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java
  • core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java
  • evaluation/tests/test_ragas_runner.py
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java
  • web/src/features/assistant/components/assistant-sources-panel.tsx
  • core/src/main/resources/db/migration/V1__baseline.sql
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java
  • web/test/e2e/assistant-pipeline.spec.ts
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/GraphProcessingProfile.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java
  • core/src/test/java/com/orgmemory/core/knowledge/SourceUploadServiceTests.java
  • apps/api/src/test/java/com/orgmemory/api/knowledge/CitationContentControllerTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalService.java
  • apps/worker/src/test/java/com/orgmemory/worker/ingestion/SourceIngestionPipelineIntegrationTests.java
  • evaluation/src/orgmemory_eval/ragas_runner.py
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.java
  • web/src/features/assistant/components/assistant-page.tsx
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java
**/*.{java,sql}

📄 CodeRabbit inference engine (CLAUDE.md)

Pair JPA schema changes with a Flyway migration.

Files:

  • core/src/main/java/com/orgmemory/core/assistant/AssistantCitation.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobView.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/observability/GraphRagEventSinkTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/LightRagGraphProcessingProfiles.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/GraphRagObservabilityAutoConfiguration.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java
  • apps/api/src/test/java/com/orgmemory/api/assistant/AssistantControllerStreamingTests.java
  • apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java
  • core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloadsTests.java
  • core/src/test/java/com/orgmemory/core/assistant/AssistantServiceTests.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/UiMessageStream.java
  • apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java
  • apps/api/src/test/java/com/orgmemory/api/assistant/UiMessageStreamTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/query/LightRagUpstreamOracleTests.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantStreamPart.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantTurn.java
  • integrations/graph-rag-observability/src/test/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSinkTests.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java
  • integrations/ai-openai-compatible/src/main/java/com/orgmemory/integrations/ai/openai/OpenAiCompatibleChatModelProvider.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexLifecycleServiceTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/port/GraphProjectionManifestTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloads.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantController.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/SpringAiGraphExtractorFactory.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantPromptFactory.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphProjectionManifest.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/processing/GraphProcessingProfileTests.java
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSink.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/observability/GraphRagEventSink.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalConfiguration.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphRevisionProjection.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantService.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexingCoordinatorTests.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java
  • core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java
  • core/src/main/resources/db/migration/V1__baseline.sql
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/GraphProcessingProfile.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java
  • core/src/test/java/com/orgmemory/core/knowledge/SourceUploadServiceTests.java
  • apps/api/src/test/java/com/orgmemory/api/knowledge/CitationContentControllerTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalService.java
  • apps/worker/src/test/java/com/orgmemory/worker/ingestion/SourceIngestionPipelineIntegrationTests.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.java
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java
**/*.java

📄 CodeRabbit inference engine (CLAUDE.md)

JetBrains IDE inspection is a Java-backend gate only.

Files:

  • core/src/main/java/com/orgmemory/core/assistant/AssistantCitation.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobView.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/observability/GraphRagEventSinkTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/LightRagGraphProcessingProfiles.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/GraphRagObservabilityAutoConfiguration.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java
  • apps/api/src/test/java/com/orgmemory/api/assistant/AssistantControllerStreamingTests.java
  • apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java
  • core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloadsTests.java
  • core/src/test/java/com/orgmemory/core/assistant/AssistantServiceTests.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/UiMessageStream.java
  • apps/worker/src/main/java/com/orgmemory/worker/OrgMemoryWorkerApplication.java
  • apps/api/src/test/java/com/orgmemory/api/assistant/UiMessageStreamTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/extraction/LightRagExtractionPrompt.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/query/LightRagUpstreamOracleTests.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantStreamPart.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantTurn.java
  • integrations/graph-rag-observability/src/test/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSinkTests.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java
  • integrations/ai-openai-compatible/src/main/java/com/orgmemory/integrations/ai/openai/OpenAiCompatibleChatModelProvider.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexLifecycleServiceTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/GraphContributionAssembler.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/port/GraphProjectionManifestTests.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/indexing/LightRagEmbeddingPayloads.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantController.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/SpringAiGraphExtractorFactory.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantPromptFactory.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphProjectionManifest.java
  • components/graph-rag-core/src/test/java/com/orgmemory/graphrag/processing/GraphProcessingProfileTests.java
  • integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSink.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/observability/GraphRagEventSink.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalConfiguration.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/port/GraphRevisionProjection.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalServiceTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java
  • core/src/main/java/com/orgmemory/core/assistant/AssistantService.java
  • core/src/test/java/com/orgmemory/core/knowledge/GraphIndexingCoordinatorTests.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java
  • core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphPublicationCommitterTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphPublicationCommitter.java
  • components/graph-rag-core/src/main/java/com/orgmemory/graphrag/processing/GraphProcessingProfile.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProcessor.java
  • core/src/test/java/com/orgmemory/core/knowledge/SourceUploadServiceTests.java
  • apps/api/src/test/java/com/orgmemory/api/knowledge/CitationContentControllerTests.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalService.java
  • apps/worker/src/test/java/com/orgmemory/worker/ingestion/SourceIngestionPipelineIntegrationTests.java
  • apps/worker/src/main/java/com/orgmemory/worker/graph/GraphIndexingProperties.java
  • apps/worker/src/test/java/com/orgmemory/worker/graph/GraphIndexingProcessorTests.java
**/*.{ts,tsx,js,jsx,json,html,css,scss}

📄 CodeRabbit inference engine (CLAUDE.md)

Do not run JetBrains IDE inspection on TypeScript, TSX, or web configuration files.

Files:

  • evaluation/baselines/lightrag-v1.5.4-oracle.json
  • web/playwright.config.ts
  • web/src/components/ai-elements/message-response.tsx
  • evaluation/fixtures/sample-evaluation.json
  • web/package.json
  • web/src/features/assistant/components/assistant-answer.tsx
  • web/src/features/assistant/components/assistant-sources-panel.tsx
  • web/test/e2e/assistant-pipeline.spec.ts
  • web/src/features/assistant/components/assistant-page.tsx
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/GraphIndexJobView.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRef.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRepository.java
  • core/src/main/java/com/orgmemory/core/knowledge/PersistedGraphProcessingProfile.java
  • core/src/main/java/com/orgmemory/core/knowledge/ClaimedGraphIndex.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileResolver.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProperties.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobRepository.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphProcessingProfileRegistry.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalConfiguration.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJob.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexJobQueue.java
  • core/src/main/java/com/orgmemory/core/knowledge/SourceUploadService.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphIndexingCoordinator.java
  • core/src/main/java/com/orgmemory/core/knowledge/GraphRagKnowledgeRetrievalService.java
**/*.{yml,yaml,properties}

📄 CodeRabbit inference engine (CLAUDE.md)

Keep ddl-auto=validate in application configuration.

Files:

  • apps/api/src/main/resources/application.yml
  • apps/worker/src/main/resources/application.yml
apps/api/src/main/java/**/*.java

⚙️ CodeRabbit configuration file

apps/api/src/main/java/**/*.java: Enforce the browser-BFF and resource-server boundaries. Authentication
must resolve an active internal actor through the explicit issuer and
subject binding. Reject identity, tenant, roles, or permissions supplied
by request payloads, JWT email, or untrusted JWT role claims.

Files:

  • apps/api/src/main/java/com/orgmemory/api/OrgMemoryApiApplication.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/UiMessageStream.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantStreamPart.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/KnowledgeAssetLifecycleController.java
  • apps/api/src/main/java/com/orgmemory/api/assistant/AssistantController.java
  • apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

For frontend files, use Oxlint, TypeScript typecheck, the production build, and browser tests when the UI flow matters.

Files:

  • web/playwright.config.ts
  • web/src/components/ai-elements/message-response.tsx
  • web/src/features/assistant/components/assistant-answer.tsx
  • web/src/features/assistant/components/assistant-sources-panel.tsx
  • web/test/e2e/assistant-pipeline.spec.ts
  • web/src/features/assistant/components/assistant-page.tsx
web/src/**/*.{ts,tsx}

⚙️ CodeRabbit configuration file

web/src/**/*.{ts,tsx}: OAuth access and refresh tokens must never enter browser JavaScript or
browser storage. Use the HttpOnly BFF session, CSRF-protected mutations,
generated Hey API data clients, accessible states, and both light and
dark themes. Handwritten transport is reserved for documented protocol
flows such as navigation redirects and streaming.

Files:

  • web/src/components/ai-elements/message-response.tsx
  • web/src/features/assistant/components/assistant-answer.tsx
  • web/src/features/assistant/components/assistant-sources-panel.tsx
  • web/src/features/assistant/components/assistant-page.tsx
.github/**/*.{yml,yaml}

⚙️ CodeRabbit configuration file

.github/**/*.{yml,yaml}: Require least-privilege permissions, immutable action SHAs, bounded job
timeouts, concurrency cancellation, frozen lockfiles, and no secrets in
pull-request workflows. Keep Dependabot comments beside pinned action
SHAs so action updates remain discoverable.

Files:

  • .github/workflows/ci.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/V1__baseline.sql
🧠 Learnings (1)
📚 Learning: 2026-07-23T23:30:44.585Z
Learnt from: kl3inIT
Repo: kl3inIT/OrgMemory PR: 30
File: core/src/main/resources/db/migration/V32__evidence_scoped_graph_semantics.sql:0-0
Timestamp: 2026-07-23T23:30:44.585Z
Learning: For OrgMemory PostgreSQL Flyway migrations under core/src/main/resources/db/migration, do not recommend using `CREATE INDEX CONCURRENTLY` or `DROP INDEX CONCURRENTLY` inside application-owned Flyway migration SQL. Flyway’s schema-history connection may hold a transaction that can cause concurrent index operations to wait indefinitely (e.g., on a `virtualxid`), and docs/conventions.md forbids this pattern. If you need large production-table index replacement, pre-stage online index operations via the deployment pipeline (outside Flyway) rather than inside the migration; “ordinary” index replacement is acceptable for unreleased projections before production traffic.

Applied to files:

  • core/src/main/resources/db/migration/V1__baseline.sql
🪛 ast-grep (0.44.1)
integrations/graph-rag-observability/src/main/java/com/orgmemory/integrations/graphrag/observability/OpenTelemetryGraphRagEventSink.java

[warning] 60-60: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(OPERATION_ID, event.operationId().toString())
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 61-61: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(ORGANIZATION_ID, event.organizationId().toString())
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 62-62: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(STAGE, enumValue(event.stage()))
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 63-63: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(OUTCOME, enumValue(event.outcome()))
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 64-64: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(DURATION_NANOS, event.duration().toNanos())
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 65-65: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(INPUT_COUNT, event.inputCount())
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 66-66: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(OUTPUT_COUNT, event.outputCount())
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 68-70: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(
MODEL_ROUTE_FINGERPRINT,
event.modelRouteFingerprint())
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)


[warning] 73-73: Avoid using untrusted input as a setAttribute() name (trust boundary violation)
Context: span.setAttribute(FAILURE_CODE, event.failureCode())
Note: [CWE-501] Trust Boundary Violation.

(trust-boundaries-java)

evaluation/oracle/generate_lightrag_v1_5_4.py

[error] 95-95: The use of exec can be insecure
Context: exec(compile(module, str(source_path), "exec"), namespace)
Note: [CWE-94] Improper Control of Generation of Code ('Code Injection').

(no-exec)


[warning] 95-95: The use of compile can be insecure
Context: compile(module, str(source_path), "exec")
Note: [CWE-94] Improper Control of Generation of Code ('Code Injection').

(no-compile)


[info] 115-120: use jsonify instead of json.dumps for JSON output
Context: json.dumps(
payload,
ensure_ascii=False,
separators=(",", ":"),
sort_keys=True,
)
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)


[info] 203-203: use jsonify instead of json.dumps for JSON output
Context: json.dumps(payload, ensure_ascii=False, indent=2)
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)


[error] 41-47: Command coming from incoming request
Context: subprocess.run(
["git", "rev-parse", "HEAD"],
cwd=upstream,
check=True,
capture_output=True,
text=True,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)

evaluation/src/orgmemory_eval/ragas_runner.py

[info] 284-284: use jsonify instead of json.dumps for JSON output
Context: json.dumps(payload, ensure_ascii=False, indent=2)
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)

🪛 LanguageTool
evaluation/README.md

[style] ~32-~32: Consider replacing this word to strengthen your wording.
Context: ...ases. It is a stochastic external judge and must be run in at least two trials; the...

(AND_THAT)


[grammar] ~53-~53: Use a hyphen to join words.
Context: ... ` --trials 3 ``` The API key is read only from the environment. Prompts, retr...

(QB_NEW_EN_HYPHEN)

🪛 Squawk (2.59.0)
core/src/main/resources/db/migration/V1__baseline.sql

[warning] 369-369: Using character is likely a mistake and should almost always be replaced by text or varchar.

(ban-char-field)


[warning] 1481-1481: Adding a primary key constraint requires an ACCESS EXCLUSIVE lock that will block all reads and writes to the table while the primary key index is built. Add the PRIMARY KEY constraint USING an index.

(adding-serial-primary-key-field)

🪛 zizmor (1.26.1)
.github/workflows/ci.yml

[error] 126-126: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 131-131: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 136-136: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

Comment thread .github/workflows/ci.yml
Comment thread apps/api/src/main/java/com/orgmemory/api/knowledge/CitationContentController.java Outdated
Comment thread core/src/main/java/com/orgmemory/core/knowledge/GraphIndexLifecycleService.java Outdated
Comment thread core/src/main/resources/db/migration/V1__baseline.sql
Comment thread evaluation/oracle/generate_lightrag_v1_5_4.py
Comment thread evaluation/src/orgmemory_eval/models.py Outdated
Comment thread evaluation/src/orgmemory_eval/models.py
Comment thread evaluation/src/orgmemory_eval/ragas_runner.py
Comment thread evaluation/src/orgmemory_eval/ragas_runner.py
@kl3inIT
kl3inIT merged commit d6cfb83 into light-rag Jul 24, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant