Skip to content

1.8.1 rc - #240

Merged
rostilos merged 8 commits into
mainfrom
1.8.1-rc
Aug 3, 2026
Merged

1.8.1 rc#240
rostilos merged 8 commits into
mainfrom
1.8.1-rc

Conversation

@rostilos

Copy link
Copy Markdown
Owner

No description provided.

rostilos added 2 commits July 31, 2026 03:06
- add bounded deterministic full-PR evidence alongside incremental scope
- prevent unsupported task-coverage findings
- persist structured task evidence in a dedicated database model
- retrieve prior task evidence without parsing PR or Jira comments
- keep evidence persistence and retrieval fail-open
- handle retries and cached analysis copies idempotently
- add regression tests and update review documentation
- centralize GitLab API, authentication, and OAuth logic in vcs-client
- use shared authorized VCS clients across analysis and pipeline services
- reuse the shared GitLab client inside the MCP process
- propagate connection base URLs through analysis and MCP requests
- preserve GitLab.com defaults for all existing connections
- cover self-hosted routing and legacy compatibility with tests
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 211 files, which is 111 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: b270e2ac-0d98-43ed-bc4e-3191db66915a

📥 Commits

Reviewing files that changed from the base of the PR and between c963634 and d2dbcb5.

📒 Files selected for processing (211)
  • .github/workflows/coverage.yml
  • .gitignore
  • README.md
  • deployment/config/rag-pipeline/.env.sample
  • frontend
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/aiclient/AiAnalysisClient.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/aiclient/AiCommandClient.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/dto/request/ai/AiAnalysisRequest.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/dto/request/ai/AiAnalysisRequestImpl.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/processor/analysis/BranchAnalysisProcessor.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/processor/analysis/PullRequestAnalysisProcessor.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/service/PullRequestStatusSyncService.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/service/branch/BranchDiffFetcher.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/service/branch/BranchFileOperationsService.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/service/branch/BranchIssueReconciliationService.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/service/vcs/VcsOperationsService.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/service/vcs/VcsReportingService.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/service/vcs/VcsServiceFactory.java
  • java-ecosystem/libs/analysis-engine/src/main/java/org/rostilos/codecrow/analysisengine/util/VcsDiffUtils.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/aiclient/AiCommandClientRecordsTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/aiclient/AiCommandClientTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/processor/analysis/BranchAnalysisProcessorTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/processor/analysis/PullRequestAnalysisProcessorTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/service/PullRequestStatusSyncServiceTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/service/branch/BranchDiffFetcherTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/service/branch/BranchFileOperationsServiceTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/service/vcs/VcsReportingServiceDefaultMethodsTest.java
  • java-ecosystem/libs/analysis-engine/src/test/java/org/rostilos/codecrow/analysisengine/service/vcs/VcsServiceFactoryTest.java
  • java-ecosystem/libs/core/src/main/java/org/rostilos/codecrow/core/dto/gitlab/GitLabDTO.java
  • java-ecosystem/libs/core/src/main/java/org/rostilos/codecrow/core/dto/project/ProjectDTO.java
  • java-ecosystem/libs/core/src/main/java/org/rostilos/codecrow/core/model/codeanalysis/TaskImplementationEvidence.java
  • java-ecosystem/libs/core/src/main/java/org/rostilos/codecrow/core/model/vcs/config/gitlab/GitLabConfig.java
  • java-ecosystem/libs/core/src/main/java/org/rostilos/codecrow/core/persistence/repository/branch/BranchRepository.java
  • java-ecosystem/libs/core/src/main/java/org/rostilos/codecrow/core/persistence/repository/codeanalysis/TaskImplementationEvidenceRepository.java
  • java-ecosystem/libs/core/src/main/java/org/rostilos/codecrow/core/service/TaskImplementationEvidenceService.java
  • java-ecosystem/libs/core/src/main/resources/db/migration/managed/R__task_implementation_evidence.sql
  • java-ecosystem/libs/core/src/test/java/org/rostilos/codecrow/core/dto/gitlab/GitLabDTOTest.java
  • java-ecosystem/libs/core/src/test/java/org/rostilos/codecrow/core/dto/project/ProjectDTOTest.java
  • java-ecosystem/libs/core/src/test/java/org/rostilos/codecrow/core/model/vcs/config/gitlab/GitLabConfigTest.java
  • java-ecosystem/libs/core/src/test/java/org/rostilos/codecrow/core/service/TaskImplementationEvidenceServiceTest.java
  • java-ecosystem/libs/rag-engine/src/main/java/org/rostilos/codecrow/ragengine/service/VcsRagIndexingService.java
  • java-ecosystem/libs/rag-engine/src/test/java/org/rostilos/codecrow/ragengine/service/VcsRagIndexingServiceTest.java
  • java-ecosystem/libs/task-management/src/main/java/org/rostilos/codecrow/taskmanagement/TaskManagementClient.java
  • java-ecosystem/libs/task-management/src/main/java/org/rostilos/codecrow/taskmanagement/jira/cloud/JiraCloudClient.java
  • java-ecosystem/libs/task-management/src/test/java/org/rostilos/codecrow/taskmanagement/jira/cloud/JiraCloudClientTest.java
  • java-ecosystem/libs/vcs-client/src/main/java/module-info.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/HttpAuthorizedClientFactory.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/VcsClient.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/VcsClientFactory.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/VcsClientProvider.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/bitbucket/cloud/BitbucketCloudClient.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/bitbucket/cloud/actions/CommentOnBitbucketCloudAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/github/GitHubClient.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/github/actions/CheckRunAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/github/actions/CommentOnPullRequestAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabClient.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabClientFactory.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabConfig.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabOAuthClient.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabOAuthConfigurationException.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabOAuthProvider.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabOAuthTokens.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/CheckFileExistsInBranchAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/CommentOnMergeRequestAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetCommitDiffAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetCommitRangeDiffAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetMergeRequestAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetMergeRequestDiffAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/SearchRepositoriesAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/actions/ValidateConnectionAction.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/api/GitLabApiContext.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/api/GitLabDiffApi.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/api/GitLabMergeRequestApi.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/api/GitLabRepositoryApi.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/gitlab/api/package-info.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/model/VcsPullRequest.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/model/VcsPullRequestComment.java
  • java-ecosystem/libs/vcs-client/src/main/java/org/rostilos/codecrow/vcsclient/utils/VcsConnectionCredentialsExtractor.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/VcsClientFactoryTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/VcsClientProviderTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/VcsClientPullRequestStateTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/bitbucket/cloud/BitbucketCloudClientCommentThreadTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/bitbucket/cloud/actions/CommentOnBitbucketCloudActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/github/GitHubClientCommentThreadTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/github/actions/CheckRunActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/github/actions/CommentOnPullRequestActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabClientTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabOAuthClientTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/GitLabOAuthProviderTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/CheckFileExistsInBranchActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/CommentOnMergeRequestActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetCommitDiffActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetCommitRangeDiffActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetMergeRequestActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/GetMergeRequestDiffActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/SearchRepositoriesActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/actions/ValidateConnectionActionTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/api/GitLabDiffApiTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/api/GitLabMergeRequestApiTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/gitlab/api/GitLabRepositoryApiTest.java
  • java-ecosystem/libs/vcs-client/src/test/java/org/rostilos/codecrow/vcsclient/utils/VcsConnectionCredentialsExtractorTest.java
  • java-ecosystem/mcp-servers/vcs-mcp/src/main/java/org/rostilos/codecrow/mcp/gitlab/GitLabClientFactory.java
  • java-ecosystem/mcp-servers/vcs-mcp/src/main/java/org/rostilos/codecrow/mcp/gitlab/GitLabConfiguration.java
  • java-ecosystem/mcp-servers/vcs-mcp/src/main/java/org/rostilos/codecrow/mcp/gitlab/GitLabMcpClientImpl.java
  • java-ecosystem/mcp-servers/vcs-mcp/src/test/java/org/rostilos/codecrow/mcp/gitlab/GitLabConfigurationTest.java
  • java-ecosystem/mcp-servers/vcs-mcp/src/test/java/org/rostilos/codecrow/mcp/gitlab/GitLabMcpClientImplTest.java
  • java-ecosystem/services/pipeline-agent/src/it/java/org/rostilos/codecrow/pipelineagent/BranchResolverFlowIT.java
  • java-ecosystem/services/pipeline-agent/src/it/java/org/rostilos/codecrow/pipelineagent/LineTrackingFlowIT.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/bitbucket/service/BitbucketAiClientService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/bitbucket/service/BitbucketInlineCommentFormatter.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/bitbucket/service/BitbucketOperationsService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/bitbucket/service/BitbucketReportingService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/dto/webhook/WebhookPayload.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/processor/WebhookAsyncProcessor.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/processor/command/AskCommandProcessor.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/processor/command/QaDocCommandProcessor.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/processor/command/ReviewCommandProcessor.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/processor/command/SummarizeCommandProcessor.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/service/AbstractVcsAiClientService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/service/TaskHistoryContextService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/generic/webhookhandler/CommentCommandWebhookHandler.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/github/service/GitHubAiClientService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/github/service/GitHubOperationsService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/github/service/GitHubReportingService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/github/service/GitHubReviewFormatter.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/gitlab/service/GitLabAiClientService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/gitlab/service/GitLabOperationsService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/gitlab/service/GitLabReportingService.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/gitlab/webhookhandler/GitLabWebhookParser.java
  • java-ecosystem/services/pipeline-agent/src/main/java/org/rostilos/codecrow/pipelineagent/qadoc/QaAutoDocListener.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/bitbucket/service/BitbucketInlineCommentFormatterTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/bitbucket/service/BitbucketOperationsServiceTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/bitbucket/service/BitbucketReportingServiceTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/generic/dto/webhook/WebhookPayloadTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/generic/processor/command/AskCommandProcessorTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/generic/processor/command/QaDocCommandProcessorTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/generic/service/IsolatedReviewProducerReplayTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/generic/service/TaskHistoryContextServiceTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/github/service/GitHubOperationsServiceTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/github/service/GitHubReportingServiceTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/github/service/GitHubReviewFormatterTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/gitlab/service/GitLabOperationsServiceTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/gitlab/webhookhandler/GitLabWebhookParserTest.java
  • java-ecosystem/services/pipeline-agent/src/test/java/org/rostilos/codecrow/pipelineagent/qadoc/QaAutoDocListenerTest.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/analysis/controller/GitGraphController.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/integration/dto/response/VcsConnectionDTO.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/integration/service/VcsIntegrationService.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/integration/service/VcsProviderCleanupService.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/project/service/ProjectService.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/vcs/controller/gitlab/GitLabController.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/vcs/dto/request/gitlab/GitLabCreateRequest.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/vcs/service/VcsConnectionWebService.java
  • java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/vcs/service/VcsTokenRefreshScheduler.java
  • java-ecosystem/services/web-server/src/test/java/org/rostilos/codecrow/webserver/analysis/controller/GitGraphControllerTest.java
  • java-ecosystem/services/web-server/src/test/java/org/rostilos/codecrow/webserver/integration/controller/BitbucketConnectControllerTest.java
  • java-ecosystem/services/web-server/src/test/java/org/rostilos/codecrow/webserver/integration/controller/OAuthCallbackControllerTest.java
  • java-ecosystem/services/web-server/src/test/java/org/rostilos/codecrow/webserver/integration/dto/response/VcsConnectionDTOTest.java
  • java-ecosystem/services/web-server/src/test/java/org/rostilos/codecrow/webserver/integration/service/VcsIntegrationServiceGitLabOAuthTest.java
  • java-ecosystem/services/web-server/src/test/java/org/rostilos/codecrow/webserver/integration/service/VcsProviderCleanupServiceTest.java
  • java-ecosystem/services/web-server/src/test/java/org/rostilos/codecrow/webserver/vcs/service/VcsConnectionWebServiceGitLabOAuthTest.java
  • python-ecosystem/inference-orchestrator/src/README.MD
  • python-ecosystem/inference-orchestrator/src/model/dtos.py
  • python-ecosystem/inference-orchestrator/src/model/multi_stage.py
  • python-ecosystem/inference-orchestrator/src/requirements.test.txt
  • python-ecosystem/inference-orchestrator/src/service/command/command_service.py
  • python-ecosystem/inference-orchestrator/src/service/review/evidence_scopes.py
  • python-ecosystem/inference-orchestrator/src/service/review/orchestrator/orchestrator.py
  • python-ecosystem/inference-orchestrator/src/service/review/orchestrator/stage_2_cross_file.py
  • python-ecosystem/inference-orchestrator/src/service/review/pr_evidence.py
  • python-ecosystem/inference-orchestrator/src/service/review/prompt_dry_run.py
  • python-ecosystem/inference-orchestrator/src/service/review/review_service.py
  • python-ecosystem/inference-orchestrator/src/utils/mcp_config.py
  • python-ecosystem/inference-orchestrator/src/utils/prompts/constants_stage_2.py
  • python-ecosystem/inference-orchestrator/src/utils/prompts/prompt_builder.py
  • python-ecosystem/inference-orchestrator/tests/test_command_service.py
  • python-ecosystem/inference-orchestrator/tests/test_hunk_coverage.py
  • python-ecosystem/inference-orchestrator/tests/test_mcp_config.py
  • python-ecosystem/inference-orchestrator/tests/test_orchestrator_helpers.py
  • python-ecosystem/inference-orchestrator/tests/test_pr_evidence.py
  • python-ecosystem/inference-orchestrator/tests/test_prompt_dry_run.py
  • python-ecosystem/inference-orchestrator/tests/test_stage_2_full.py
  • python-ecosystem/rag-pipeline/integration/conftest.py
  • python-ecosystem/rag-pipeline/requirements.local.txt
  • python-ecosystem/rag-pipeline/requirements.txt
  • python-ecosystem/rag-pipeline/src/rag_pipeline/api/api.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/api/routers/index.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/api/routers/pr.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/coordination.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/embedding_factory.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/index_manager/branch_manager.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/index_manager/collection_manager.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/index_manager/indexer.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/index_manager/manager.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/index_manager/point_operations.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/core/openrouter_embedding.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/models/config.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/server/rag_queue_consumer.py
  • python-ecosystem/rag-pipeline/src/rag_pipeline/services/base.py
  • python-ecosystem/rag-pipeline/tests/test_api_app.py
  • python-ecosystem/rag-pipeline/tests/test_coordination.py
  • python-ecosystem/rag-pipeline/tests/test_embedding_factory.py
  • python-ecosystem/rag-pipeline/tests/test_index_manager.py
  • python-ecosystem/rag-pipeline/tests/test_indexer.py
  • python-ecosystem/rag-pipeline/tests/test_openrouter_extended.py
  • python-ecosystem/rag-pipeline/tests/test_point_operations.py
  • python-ecosystem/rag-pipeline/tests/test_rag_queue_consumer.py
  • python-ecosystem/rag-pipeline/tests/test_router_pr.py
  • tools/coverage/check-repository-coverage.sh
  • tools/coverage/coverage-policy.json
  • tools/coverage/repository_coverage.py
  • tools/coverage/tests/test_repository_coverage.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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.

@rostilos

Copy link
Copy Markdown
Owner Author

/codecrow analyze

1 similar comment
@rostilos

Copy link
Copy Markdown
Owner Author

/codecrow analyze

@codecrow-local codecrow-local Bot deleted a comment from codecrow-ai Bot Jul 31, 2026
@rostilos

Copy link
Copy Markdown
Owner Author

/codecrow analyze

@codecrow-local codecrow-local Bot deleted a comment from codecrow-ai Bot Jul 31, 2026
@rostilos

Copy link
Copy Markdown
Owner Author

/codecrow analyze

- resolve the GitLab API base URL per connection
- preserve GitLab.com behavior for legacy connections
- centralize transport and endpoint handling in gitlab.api
- reuse the configured client across MCP and VCS operations
- add OAuth, API, and backward-compatibility tests
@rostilos

rostilos commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

/codecrow analyze

- publish GitHub findings as native review comments
- remove stale GitHub inline comments before reruns
- display Bitbucket summaries before inline issues
- hide CodeCrow ownership and response markers
- retain cleanup support for legacy visible markers
- include inline thread context in CodeCrow answers
- reply within native GitHub, Bitbucket, and GitLab threads
- support questions directly addressed to CodeCrow without slash commands
- ignore ordinary reviewer conversations without a CodeCrow address
- update cross-provider tests and documentation
- run bounded concurrent OpenRouter embedding batches
- add throughput and latency provider routing
- adapt concurrency on rate limits, timeouts, and overload
- pipeline acknowledged Qdrant writes in larger batches
- reuse compatible vectors using input and contract fingerprints
- coordinate project mutations with renewable Redis leases
- add ownership-aware pending collection cleanup
- improve indexing, retry, queue, and provider telemetry
- preserve legacy indexes and incremental rollback semantics
- select the first analyzed branch when no project default exists
- prefer the configured or provider default branch when available
- persist detailed RAG indexing progress in durable job logs
- return the indexing job ID for frontend progress recovery
- expand missing merge-parent histories for commit graphs
- topologically order commits for correct DAG rendering
- add focused branch, RAG, and graph regression tests
- update the frontend repository reference
- replace previous marked review bodies with hidden ownership metadata
- preserve human reviews and submitted review history
- keep cleanup fail-open when GitHub requests fail
@rostilos

rostilos commented Aug 3, 2026

Copy link
Copy Markdown
Owner Author

/codecrow analyze

@codecrow-local codecrow-local Bot deleted a comment from codecrow-ai Bot Aug 3, 2026
@codecrow-local

codecrow-local Bot commented Aug 3, 2026

Copy link
Copy Markdown

⚠️ Code Analysis Results

Quality Gate Default Quality Gate: 🔴 FAILED

  • MEDIUM Issues by Severity > 0 (actual: 7) - FAILED

Summary

Pull Request Review: 1.8.1 rc

Status PASS WITH WARNINGS
Risk Level MEDIUM
Review Coverage 10 files analyzed in depth
Confidence HIGH

Executive Summary

This release-candidate PR contains 340 additions across provider integrations, pipeline reporting, task-evidence handling, and related tests. Review identified several medium-risk correctness and test-quality concerns, particularly around GitHub and GitLab API semantics, incremental review state, webhook discussion handling, branch defaults, and numeric validation. No critical or high-severity blockers were identified, and cross-file review found no additional issues; task coverage could not be assessed because no task context was provided.

Recommendation

Decision: PASS WITH WARNINGS

The PR may proceed, but the reported issues should be addressed or explicitly accepted before release, with particular attention to provider API behavior and test compilation/coverage. A follow-up validation pass is recommended after those changes.

Issues Overview

Severity Count
🟡 Medium 7 Issues that should be addressed
✅ Resolved 3 Resolved issues

Analysis completed on 2026-08-03 00:52:48 | View Full Report | Pull Request


📋 Detailed Issues (7)

🟡 Medium Severity Issues

Id on Platform: 3949

Category: 🐛 Bug Risk

File: .../actions/CommentOnPullRequestAction.java:392

Uses PUT for GitHub review update

The GitHub endpoint for updating a pull request review requires PATCH, but this request is sent with PUT. GitHub will reject the cleanup request instead of replacing the generated review body, leaving old CodeCrow review summaries visible on the pull request. The surrounding service treats cleanup as best effort, so this can silently preserve stale review content.

💡 Suggested Fix

Use PATCH for the update-review request while retaining the existing URL, payload, and response handling.

View Issue Details


Id on Platform: 3950

Category: 🐛 Bug Risk

File: .../orchestrator/stage_2_cross_file.py:80

Incremental ledger loses prior PR state

The ledger is constructed with processed_diff for both full_pr_diff and review_diff. In incremental reviews, processed_diff is the current review/delta scope, so full_pr_context is populated from the same delta rather than the complete base-to-head PR state. Consequently Stage 2 cross-file, migration, and task-coverage reasoning cannot inspect changes from earlier commits, and the prompt label claiming a full PR state ledger is misleading.

💡 Suggested Fix

Pass a separately prepared full base-to-head ProcessedDiff as full_pr_diff while retaining the current incremental diff as review_diff. If the full diff is unavailable, explicitly mark the ledger incomplete rather than presenting the delta as full PR state.

View Issue Details


Id on Platform: 3951

Category: 🐛 Bug Risk

File: .../webhookhandler/GitLabWebhookParser.java:171

Treats discussion ID as parent comment

discussion_id identifies the GitLab discussion thread, not the individual parent note. The new code assigns it to parentCommentId for root notes as well as replies, so a root comment is reported as having a parent and downstream reply/thread handling can target a non-comment discussion identifier. The updated test confirms this behavior for a root inline note.

💡 Suggested Fix

Populate parentCommentId only when the webhook identifies a reply and use the actual parent note identifier when GitLab provides it. Keep the discussion identifier separately if the downstream model needs a stable thread key.

View Issue Details


Id on Platform: 3952

Category: 🐛 Bug Risk

File: .../branch/BranchFileOperationsService.java:206

Unset project default overrides an explicitly configured main branch

Unset project default overrides an explicitly configured main branch
The new default-branch selection treats a missing persisted project.defaultBranch as sufficient reason to select the branch currently being analyzed, even when project.configuration.mainBranch is already configured.

  • A first analysis of a feature branch can therefore persist that feature branch as the project default.
  • The configured main branch is only considered in the second operand, so it cannot prevent the first analyzed branch from being selected when the persisted default is initially null.
  • Project setup and RAG/indexing paths consume the persisted project default alongside configured/provider branch identities, creating inconsistent base-branch behavior across services.
    Evidence: BranchFileOperationsService reads the configured main branch and computes isConfiguredMainBranch, but shouldSelectBranch is immediately true whenever project.getDefaultBranch() == null; the added test also configures main while analyzing feature/first-analysis and verifies that the feature branch becomes the project default. ProjectService and VcsRagIndexingService are separate callers/consumers of the branch/default state, so this persisted choice propagates beyond branch creation.
    Business impact: A feature branch may become the persisted project default and subsequently be used as the base branch for project setup, graph analysis, or RAG indexing. This can produce analyses and indexed context against the wrong repository base until an administrator corrects the project state.
    Also affects: java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/project/service/ProjectService.java, java-ecosystem/libs/rag-engine/src/main/java/org/rostilos/codecrow/ragengine/service/VcsRagIndexingService.java
💡 Suggested Fix

Only select the analyzed branch automatically when no authoritative branch is available. Resolve the effective branch in one place using the configured main branch, VCS default branch, and only then the first analyzed branch; persist that same resolution for all callers. Add a test where main is configured, project.defaultBranch is null, and the first analyzed branch is a feature branch, asserting that main is selected or that the feature branch is not persisted as the project default.

View Issue Details


Id on Platform: 3953

Category: 🧪 Testing

File: .../command/AskCommandProcessorTest.java:212

Test uses incomplete webhook payload constructor

The added test constructs WebhookPayload with only 11 arguments, ending with rawPayload and commentData: return new WebhookPayload(. The current record has 13 components, including prAuthorId and prAuthorUsername after commentData, and no overload is visible in the supplied source. As written, the test module will fail compilation before the new behavior can run.

💡 Suggested Fix

Pass values for the two trailing PR-author fields when constructing the inline payload, or add an explicitly supported factory/constructor if the test fixture should omit them.

View Issue Details


Id on Platform: 3954

Category: 🧪 Testing

File: .../gitlab/GitLabClientTest.java:71

Missing GitLabConfig import

The added test references GitLabConfig.API_BASE, but the visible imports include GitLabApiContext and do not include org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig. The test package is org.rostilos.codecrow.vcsclient.gitlab, so this unqualified type is not available from the shown source and the test compilation fails before the new coverage can run.

💡 Suggested Fix

Import org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig, or use the fully qualified class name at the assertion.

View Issue Details


Id on Platform: 3955

Category: 🧪 Testing

File: .../gitlab/GitLabClientTest.java:74

Missing GitLabConfig import

The added test references GitLabConfig.API_BASE, but the visible imports include GitLabApiContext and do not include org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig. The test package is org.rostilos.codecrow.vcsclient.gitlab, so this unqualified type is not available from the shown source and the test compilation fails before the new coverage can run.

💡 Suggested Fix

Import org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig, or use the fully qualified class name at the assertion.

View Issue Details


Files Affected

  • .../gitlab/GitLabClientTest.java: 2 issues
  • .../webhookhandler/GitLabWebhookParser.java: 1 issue
  • .../orchestrator/stage_2_cross_file.py: 1 issue
  • .../branch/BranchFileOperationsService.java: 1 issue
  • .../command/AskCommandProcessorTest.java: 1 issue
  • .../actions/CommentOnPullRequestAction.java: 1 issue

@codecrow-local codecrow-local 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.

CodeCrow Review

Actionable comments posted: 7

Each finding below is attached to the relevant changed line. The complete analysis remains available in the CodeCrow summary comment.

.url(apiUrl)
.header("Accept", "application/vnd.github+json")
.header("X-GitHub-Api-Version", "2022-11-28")
.put(RequestBody.create(objectMapper.writeValueAsString(payload), JSON))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM | Bug Risk

Uses PUT for GitHub review update

The GitHub endpoint for updating a pull request review requires PATCH, but this request is sent with PUT. GitHub will reject the cleanup request instead of replacing the generated review body, leaving old CodeCrow review summaries visible on the pull request. The surrounding service treats cleanup as best effort, so this can silently preserve stale review content.

💡 Suggested fix

Use PATCH for the update-review request while retaining the existing URL, payload, and response handling.

View issue in CodeCrow

changed_files=request.changedFiles,
visible_hunk_ids=visible_prompt_hunk_ids,
evidence_ledger = pr_evidence_ledger or build_pr_evidence_ledger(
processed_diff,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM | Bug Risk

Incremental ledger loses prior PR state

The ledger is constructed with processed_diff for both full_pr_diff and review_diff. In incremental reviews, processed_diff is the current review/delta scope, so full_pr_context is populated from the same delta rather than the complete base-to-head PR state. Consequently Stage 2 cross-file, migration, and task-coverage reasoning cannot inspect changes from earlier commits, and the prompt label claiming a full PR state ledger is misleading.

💡 Suggested fix

Pass a separately prepared full base-to-head ProcessedDiff as full_pr_diff while retaining the current incremental diff as review_diff. If the full diff is unavailable, explicitly mark the ledger incomplete rather than presenting the delta as full PR state.

View issue in CodeCrow

}
// GitLab uses discussion_id as the stable thread identifier for both
// the root diff note and its replies.
String parentCommentId = objectAttributes.path("discussion_id").asText(null);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM | Bug Risk

Treats discussion ID as parent comment

discussion_id identifies the GitLab discussion thread, not the individual parent note. The new code assigns it to parentCommentId for root notes as well as replies, so a root comment is reported as having a parent and downstream reply/thread handling can target a non-comment discussion identifier. The updated test confirms this behavior for a root inline note.

💡 Suggested fix

Populate parentCommentId only when the webhook identifies a reply and use the actual parent note identifier when GitLab provides it. Keep the discussion identifier separately if the downstream model needs a stable thread key.

View issue in CodeCrow


boolean isConfiguredMainBranch = configuredMainBranch != null
&& configuredMainBranch.equals(savedBranch.getBranchName());
boolean shouldSelectBranch = project.getDefaultBranch() == null

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM | Bug Risk

Unset project default overrides an explicitly configured main branch

Unset project default overrides an explicitly configured main branch
The new default-branch selection treats a missing persisted project.defaultBranch as sufficient reason to select the branch currently being analyzed, even when project.configuration.mainBranch is already configured.

  • A first analysis of a feature branch can therefore persist that feature branch as the project default.
  • The configured main branch is only considered in the second operand, so it cannot prevent the first analyzed branch from being selected when the persisted default is initially null.
  • Project setup and RAG/indexing paths consume the persisted project default alongside configured/provider branch identities, creating inconsistent base-branch behavior across services.
    Evidence: BranchFileOperationsService reads the configured main branch and computes isConfiguredMainBranch, but shouldSelectBranch is immediately true whenever project.getDefaultBranch() == null; the added test also configures main while analyzing feature/first-analysis and verifies that the feature branch becomes the project default. ProjectService and VcsRagIndexingService are separate callers/consumers of the branch/default state, so this persisted choice propagates beyond branch creation.
    Business impact: A feature branch may become the persisted project default and subsequently be used as the base branch for project setup, graph analysis, or RAG indexing. This can produce analyses and indexed context against the wrong repository base until an administrator corrects the project state.
    Also affects: java-ecosystem/services/web-server/src/main/java/org/rostilos/codecrow/webserver/project/service/ProjectService.java, java-ecosystem/libs/rag-engine/src/main/java/org/rostilos/codecrow/ragengine/service/VcsRagIndexingService.java
💡 Suggested fix

Only select the analyzed branch automatically when no authoritative branch is available. Resolve the effective branch in one place using the configured main branch, VCS default branch, and only then the first analyzed branch; persist that same resolution for all callers. Add a test where main is configured, project.defaultBranch is null, and the first analyzed branch is a feature branch, asserting that main is selected or that the feature branch is not persisted as the project default.

View issue in CodeCrow

true,
"src/Numbers.java",
291);
return new WebhookPayload(

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM | Testing

Test uses incomplete webhook payload constructor

The added test constructs WebhookPayload with only 11 arguments, ending with rawPayload and commentData: return new WebhookPayload(. The current record has 13 components, including prAuthorId and prAuthorUsername after commentData, and no overload is visible in the supplied source. As written, the test module will fail compilation before the new behavior can run.

💡 Suggested fix

Pass values for the two trailing PR-author fields when constructing the inline payload, or add an explicitly supported factory/constructor if the test fixture should omit them.

View issue in CodeCrow

void oneArgumentConstructorRetainsGitLabCloudApiDefault() throws Exception {
GitLabClient client = new GitLabClient(new OkHttpClient());
var field = GitLabClient.class.getDeclaredField("api");
field.setAccessible(true);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM | Testing

Missing GitLabConfig import

The added test references GitLabConfig.API_BASE, but the visible imports include GitLabApiContext and do not include org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig. The test package is org.rostilos.codecrow.vcsclient.gitlab, so this unqualified type is not available from the shown source and the test compilation fails before the new coverage can run.

💡 Suggested fix

Import org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig, or use the fully qualified class name at the assertion.

View issue in CodeCrow

field.setAccessible(true);

assertThat(((GitLabApiContext) field.get(client)).apiBaseUrl())
.isEqualTo(GitLabConfig.API_BASE);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 MEDIUM | Testing

Missing GitLabConfig import

The added test references GitLabConfig.API_BASE, but the visible imports include GitLabApiContext and do not include org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig. The test package is org.rostilos.codecrow.vcsclient.gitlab, so this unqualified type is not available from the shown source and the test compilation fails before the new coverage can run.

💡 Suggested fix

Import org.rostilos.codecrow.core.model.vcs.config.gitlab.GitLabConfig, or use the fully qualified class name at the assertion.

View issue in CodeCrow

@rostilos
rostilos merged commit 06553f3 into main Aug 3, 2026
2 of 3 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