Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
b9e7127
feat(gitlab): comprehensive integration alignment with GitHub
StillKnotKnown Jan 15, 2026
2addc5f
feat(gitlab): add params support to _fetch for query parameters
StillKnotKnown Jan 15, 2026
c74b240
fix: fix encoding issues in file operations and encoding checker
StillKnotKnown Jan 21, 2026
ecdac20
feat(gitlab): comprehensive integration with API extensions, services…
StillKnotKnown Jan 21, 2026
b4238b0
fix(gitlab): add missing async methods for pipeline and notes
StillKnotKnown Jan 21, 2026
ea18e28
fix(tests): address CodeRabbit review feedback
StillKnotKnown Jan 21, 2026
60105c4
fix(test): update test_check_encoding expectation to match actual beh…
StillKnotKnown Jan 21, 2026
dc84e0b
fix(gitlab): add missing io_utils module and fix followup reviewer tests
StillKnotKnown Jan 21, 2026
6640ea6
fix(frontend): resolve merge conflict in usage-monitor.ts
StillKnotKnown Jan 22, 2026
420f8c0
fix(frontend): add provider-detection module and update ClaudeUsageSn…
StillKnotKnown Jan 22, 2026
64a11cc
fix(gitlab): address Auto Claude PR review findings (7/15)
StillKnotKnown Jan 22, 2026
26a16db
fix(gitlab): address more Auto Claude PR review findings (10/15)
StillKnotKnown Jan 22, 2026
044be5b
fix(gitlab): address CodeQL and review findings
StillKnotKnown Jan 22, 2026
b1a395e
docs(batch_processor): document circular import avoidance pattern in …
StillKnotKnown Jan 22, 2026
2057125
fix(gitlab): address Sentry bug reports
StillKnotKnown Jan 22, 2026
ee4cd50
test: remove unused Path import from webhook operations test
StillKnotKnown Jan 22, 2026
c914ae7
fix(gitlab): address follow-up review findings
StillKnotKnown Jan 26, 2026
c29cfb9
fix(gitlab): address test import issues and protocol compatibility
StillKnotKnown Jan 26, 2026
f886d9e
fix(gitlab): add missing instance_url parameter to MR E2E tests
StillKnotKnown Jan 26, 2026
a27ab93
fix(gitlab): address all HIGH and MEDIUM blocking issues from follow-…
StillKnotKnown Jan 26, 2026
553cc72
fix(gitlab): address Sentry bug reports for PRData and commit order
StillKnotKnown Jan 26, 2026
eac6339
ci: trigger CodeQL re-run after fixes
StillKnotKnown Jan 27, 2026
00adf23
fix(codeql): remove unused imports and variables
StillKnotKnown Jan 27, 2026
167177b
fix(tests): update GitLab client tests to use new API
StillKnotKnown Jan 27, 2026
046b8dd
fix(tests): correct expected exception message in test_retry_exhausted
StillKnotKnown Jan 27, 2026
eab8245
fix(tests): fix GitLabRole usage and mock method in permissions tests
StillKnotKnown Jan 27, 2026
cb5d8e3
fix(tests): update mock setup in remaining permissions tests
StillKnotKnown Jan 27, 2026
df245b5
fix(tests): fix missing imports in test_github_bot_detection.py
StillKnotKnown Jan 27, 2026
0c158c7
fix(tests): use safe path for nonexistent directory tests
StillKnotKnown Jan 27, 2026
df86473
fix(gitlab): URL-encode namespace path in permission check
StillKnotKnown Jan 27, 2026
b5914d2
fix(codeql): resolve CodeQL security alerts
StillKnotKnown Jan 27, 2026
4badff6
fix(gitlab): handle None color in create_label to prevent AttributeError
StillKnotKnown Jan 27, 2026
25849d6
fix(coderabbitai): address CodeRabbit AI feedback
StillKnotKnown Jan 27, 2026
a4cea45
fix(coderabbitai): address CodeRabbit AI feedback for batch_processor…
StillKnotKnown Jan 27, 2026
a14dcf9
fix(coderabbitai): limit retry logic for non-idempotent HTTP methods
StillKnotKnown Jan 27, 2026
28a6365
fix(codeql): resolve BotDetector parameter name false positives
StillKnotKnown Jan 27, 2026
f100d73
fix(coderabbitai): address CodeRabbit AI review feedback
StillKnotKnown Jan 27, 2026
cd63dd1
fix(tests): fix test_find_test_files to match implementation behavior
StillKnotKnown Jan 27, 2026
6219c20
fix(rate_limiter): add missing methods and RateLimiterState class
StillKnotKnown Jan 28, 2026
27ec2b2
fix(tests): fix MR E2E tests with proper mocking
StillKnotKnown Jan 28, 2026
92d3b07
fix(tests): fix GitLab integration test failures from 299 to 306 passing
StillKnotKnown Jan 28, 2026
6028a39
fix(codeql): address CodeQL findings
StillKnotKnown Jan 28, 2026
b000b28
fix(codeql): fix py/multiple-definition warnings
StillKnotKnown Jan 28, 2026
2e76a8c
fix(codeql): add comments to empty-except blocks in worktree.py
StillKnotKnown Jan 28, 2026
12164d7
fix(codeql): remove unused debugError import in terminal-handlers.ts
StillKnotKnown Jan 28, 2026
ef6f68a
fix(codeql): remove unused isValidTaskId import from project-store.ts
StillKnotKnown Jan 28, 2026
e27d19b
fix(codeql): improve log injection sanitization to block control char…
StillKnotKnown Jan 28, 2026
3ba37c0
fix(codeql): avoid log injection by not logging error message
StillKnotKnown Jan 28, 2026
4ef34b3
fix(codeql): add security documentation for intentional file/http acc…
StillKnotKnown Jan 28, 2026
848d97a
docs(autofix_processor): enhance module and class documentation with …
StillKnotKnown Jan 28, 2026
3756462
feat(gitlab): add comprehensive test coverage for GitLab integration
Feb 12, 2026
5026723
fix(tests): resolve test failures from upstream rebase
Feb 12, 2026
b710569
fix(codeql): resolve all 78 CodeQL alerts including 10 errors
Feb 12, 2026
01b62cc
fix(gitlab): resolve CodeQL alerts and Sentry bug in followup reviewer
Feb 12, 2026
e51c35e
Merge branch 'develop' into feat-gitlab-full-integration
StillKnotKnown Feb 12, 2026
87b62b2
fix(review): address all CodeRabbit and Sentry bot review findings
Feb 12, 2026
659ff17
fix(codeql): resolve 5 CodeQL alerts
Feb 12, 2026
a1b7206
fix(coderabbit): address 26 CodeRabbit review findings
Feb 12, 2026
2662683
fix(codeql): remove unused pytest import
Feb 12, 2026
6efa86e
fix(gitlab): use correct commit index for bot detection
Feb 12, 2026
d8ee9ee
fix(gitlab): use correct pipeline index for CI checker
Feb 12, 2026
6e99efc
fix(gitlab): address PR review findings - async, thread safety, and s…
Feb 13, 2026
3abd6f2
fix(gitlab): address PR review findings - deepcopy, rate limits, incr…
Feb 13, 2026
3518ae9
fix(gitlab): address CodeQL findings and fix triage test
Feb 13, 2026
62e4462
fix(test): avoid timing flakiness in rate limiter test
Feb 13, 2026
d38fb6b
Merge branch 'develop' into feat-gitlab-full-integration
StillKnotKnown Feb 13, 2026
b7d5793
fix(rate-limiter): make consume() robust to timing imprecision
Feb 13, 2026
b8dfabe
fix(gitlab): avoid redundant CI pipeline API call in orchestrator
Feb 13, 2026
8b8bfcc
fix(gitlab): address security and test quality issues
Feb 13, 2026
4417b6c
Merge branch 'develop' into feat-gitlab-full-integration
AndyMik90 Feb 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ jobs:
PYTHONPATH: ${{ github.workspace }}/apps/backend
run: |
source .venv/bin/activate
pytest ../../tests/ -v --cov=. --cov-report=xml --cov-report=term-missing --cov-fail-under=10
pytest ../../tests/ __tests__/ -v --cov=. --cov-report=xml --cov-report=term-missing --cov-fail-under=10

- name: Upload coverage to Codecov
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'
Expand Down
112 changes: 70 additions & 42 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,36 +1,55 @@
#!/bin/sh

# =============================================================================
# GIT WORKTREE ENVIRONMENT CLEANUP
# GIT WORKTREE CONTEXT HANDLING
# =============================================================================
# Git automatically sets GIT_DIR (and CWD to the working tree root) before
# running hooks -- even in worktrees. We do NOT need to manually parse .git
# files or export GIT_DIR/GIT_WORK_TREE.
# When running in a worktree, we need to preserve git context to prevent HEAD
# corruption. However, we must also CLEAR these variables when NOT in a worktree
# to prevent cross-worktree contamination (files leaking between worktrees).
#
# However, external tools (IDEs, agents, parent shells) may leave stale
# GIT_DIR/GIT_WORK_TREE values in the environment. If these point to a
# different repo or worktree, git commands in this hook would target the
# wrong repository. Unsetting them lets git re-resolve the correct values
# from the working directory.
# The bug: If GIT_DIR/GIT_WORK_TREE are set from a previous worktree session
# and this hook runs in the main repo (where .git is a directory, not a file),
# git commands will target the wrong repository, causing files to appear as
# untracked in the wrong location.
#
# Fix: Explicitly unset these variables when NOT in a worktree context.
# =============================================================================
unset GIT_DIR
unset GIT_WORK_TREE

if [ -f ".git" ]; then
# We're in a worktree (.git is a file pointing to the actual git dir)
# Use -n with /p to only print lines that match the gitdir: prefix, head -1 for safety
WORKTREE_GIT_DIR=$(sed -n 's/^gitdir: //p' .git | head -1)
if [ -n "$WORKTREE_GIT_DIR" ] && [ -d "$WORKTREE_GIT_DIR" ]; then
# Resolve to absolute path to avoid issues with relative gitdir paths
# Use pwd -P to canonicalize symlinks (resolves symlinked directories)
WORKTREE_GIT_DIR=$(cd "$(dirname "$WORKTREE_GIT_DIR")" && pwd -P)/$(basename "$WORKTREE_GIT_DIR")
export GIT_DIR="$WORKTREE_GIT_DIR"
export GIT_WORK_TREE="$(pwd -P)"
else
# .git file exists but is malformed or points to non-existent directory
# CRITICAL: Clear any inherited GIT_DIR/GIT_WORK_TREE to prevent cross-worktree leakage
unset GIT_DIR
unset GIT_WORK_TREE
fi
else
# We're in the main repo (.git is a directory)
# CRITICAL: Clear any inherited GIT_DIR/GIT_WORK_TREE to prevent cross-worktree leakage
unset GIT_DIR
unset GIT_WORK_TREE
fi
Comment on lines +18 to +39
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Solid worktree-aware environment handling.

The .git file detection, sed-based gitdir parsing, absolute-path resolution, and the explicit unset of GIT_DIR/GIT_WORK_TREE when not in a worktree are all well-reasoned. This correctly prevents the cross-worktree contamination bug described in the header comments.

One minor hardening note: if dirname of a relative WORKTREE_GIT_DIR happens to resolve through a symlink, the resulting absolute path may differ from what Git expects. In practice this is unlikely (Git writes real paths), but pwd -P instead of pwd on line 24 would canonicalize through symlinks for extra safety.

Optional hardening
-    WORKTREE_GIT_DIR=$(cd "$(dirname "$WORKTREE_GIT_DIR")" && pwd)/$(basename "$WORKTREE_GIT_DIR")
+    WORKTREE_GIT_DIR=$(cd "$(dirname "$WORKTREE_GIT_DIR")" && pwd -P)/$(basename "$WORKTREE_GIT_DIR")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if [ -f ".git" ]; then
# We're in a worktree (.git is a file pointing to the actual git dir)
# Use -n with /p to only print lines that match the gitdir: prefix, head -1 for safety
WORKTREE_GIT_DIR=$(sed -n 's/^gitdir: //p' .git | head -1)
if [ -n "$WORKTREE_GIT_DIR" ] && [ -d "$WORKTREE_GIT_DIR" ]; then
# Resolve to absolute path to avoid issues with relative gitdir paths
WORKTREE_GIT_DIR=$(cd "$(dirname "$WORKTREE_GIT_DIR")" && pwd)/$(basename "$WORKTREE_GIT_DIR")
export GIT_DIR="$WORKTREE_GIT_DIR"
export GIT_WORK_TREE="$(pwd)"
else
# .git file exists but is malformed or points to non-existent directory
# CRITICAL: Clear any inherited GIT_DIR/GIT_WORK_TREE to prevent cross-worktree leakage
unset GIT_DIR
unset GIT_WORK_TREE
fi
else
# We're in the main repo (.git is a directory)
# CRITICAL: Clear any inherited GIT_DIR/GIT_WORK_TREE to prevent cross-worktree leakage
unset GIT_DIR
unset GIT_WORK_TREE
fi
if [ -f ".git" ]; then
# We're in a worktree (.git is a file pointing to the actual git dir)
# Use -n with /p to only print lines that match the gitdir: prefix, head -1 for safety
WORKTREE_GIT_DIR=$(sed -n 's/^gitdir: //p' .git | head -1)
if [ -n "$WORKTREE_GIT_DIR" ] && [ -d "$WORKTREE_GIT_DIR" ]; then
# Resolve to absolute path to avoid issues with relative gitdir paths
WORKTREE_GIT_DIR=$(cd "$(dirname "$WORKTREE_GIT_DIR")" && pwd -P)/$(basename "$WORKTREE_GIT_DIR")
export GIT_DIR="$WORKTREE_GIT_DIR"
export GIT_WORK_TREE="$(pwd)"
else
# .git file exists but is malformed or points to non-existent directory
# CRITICAL: Clear any inherited GIT_DIR/GIT_WORK_TREE to prevent cross-worktree leakage
unset GIT_DIR
unset GIT_WORK_TREE
fi
else
# We're in the main repo (.git is a directory)
# CRITICAL: Clear any inherited GIT_DIR/GIT_WORK_TREE to prevent cross-worktree leakage
unset GIT_DIR
unset GIT_WORK_TREE
fi
🤖 Prompt for AI Agents
In @.husky/pre-commit around lines 18 - 38, The script correctly resolves
WORKTREE_GIT_DIR but uses pwd which may not canonicalize symlinks; change the
resolution step that sets WORKTREE_GIT_DIR (the line that currently runs cd
"$(dirname "$WORKTREE_GIT_DIR")" && pwd)/$(basename "$WORKTREE_GIT_DIR") to use
pwd -P so the absolute path is canonicalized through symlinks, keeping the same
export of GIT_DIR and GIT_WORK_TREE and preserving the existing unset behavior
when the .git file is malformed.


# =============================================================================
# SAFETY CHECK: Detect and fix corrupted core.worktree configuration
# =============================================================================
# core.worktree lives in the SHARED .git/config (not per-worktree). If any
# process accidentally writes it (e.g., running `git init` with a leaked
# GIT_WORK_TREE), ALL repos and worktrees see the wrong working tree root,
# causing files from one worktree to "leak" into others.
#
# This check runs from both main repo and worktree contexts since the config
# is shared and corruption can happen from either.
CORE_WORKTREE=$(git config --get core.worktree 2>/dev/null || true)
if [ -n "$CORE_WORKTREE" ]; then
echo "Warning: Detected corrupted core.worktree setting ('$CORE_WORKTREE'), removing it..."
if ! git config --unset core.worktree 2>/dev/null; then
echo "Warning: Failed to unset core.worktree. Manual intervention may be needed."
# If core.worktree is set in the main repo's config (pointing to a worktree),
# this indicates previous corruption. Fix it automatically.
if [ ! -f ".git" ]; then
CORE_WORKTREE=$(git config --get core.worktree 2>/dev/null || true)
if [ -n "$CORE_WORKTREE" ]; then
echo "Warning: Detected corrupted core.worktree setting, removing it..."
if ! git config --unset core.worktree 2>/dev/null; then
echo "Warning: Failed to unset core.worktree. Manual intervention may be needed."
fi
fi
fi

Expand Down Expand Up @@ -162,39 +181,48 @@ if git diff --cached --name-only | grep -q "^apps/backend/.*\.py$"; then
fi

# Run pytest (skip slow/integration tests and Windows-incompatible tests for pre-commit speed)
# Run from repo root (not apps/backend) so tests that use Path.resolve() get correct CWD.
# PYTHONPATH includes apps/backend so imports resolve correctly.
# Use subshell to isolate directory changes and prevent worktree corruption
echo "Running Python tests..."
(
# Tests to skip: graphiti (external deps), merge_file_tracker/service_orchestrator/worktree/workspace (Windows path/git issues)
# Also skip tests that require optional dependencies (pydantic structured outputs)
# Also skip gitlab_e2e (e2e test sensitive to test-ordering env contamination, validated by CI)
IGNORE_TESTS="--ignore=tests/test_graphiti.py --ignore=tests/test_merge_file_tracker.py --ignore=tests/test_service_orchestrator.py --ignore=tests/test_worktree.py --ignore=tests/test_workspace.py --ignore=tests/test_finding_validation.py --ignore=tests/test_sdk_structured_output.py --ignore=tests/test_structured_outputs.py --ignore=tests/test_gitlab_e2e.py"
cd apps/backend || exit 1
# Tests to skip and reasons why:
# - test_graphiti.py: Requires external Graphiti service (not available in CI)
# - test_merge_file_tracker.py: Windows path handling issues (uses backslash assumptions)
# - test_service_orchestrator.py: Windows git path issues (worktree handling)
# - test_worktree.py: Windows git path issues (worktree handling)
# - test_workspace.py: Windows path handling issues (uses backslash assumptions)
# - test_finding_validation.py: Requires pydantic structured outputs (optional dependency)
# - test_sdk_structured_output.py: Requires pydantic structured outputs (optional dependency)
# - test_structured_outputs.py: Requires pydantic structured outputs (optional dependency)
# TODO: Re-evaluate exclusions periodically as Windows support improves and deps change
IGNORE_TESTS="--ignore=../../tests/test_graphiti.py --ignore=../../tests/test_merge_file_tracker.py --ignore=../../tests/test_service_orchestrator.py --ignore=../../tests/test_worktree.py --ignore=../../tests/test_workspace.py --ignore=../../tests/test_finding_validation.py --ignore=../../tests/test_sdk_structured_output.py --ignore=../../tests/test_structured_outputs.py"

# Determine Python executable from venv
VENV_PYTHON=""
if [ -f "apps/backend/.venv/bin/python" ]; then
VENV_PYTHON="apps/backend/.venv/bin/python"
elif [ -f "apps/backend/.venv/Scripts/python.exe" ]; then
VENV_PYTHON="apps/backend/.venv/Scripts/python.exe"
if [ -f ".venv/bin/python" ]; then
VENV_PYTHON=".venv/bin/python"
elif [ -f ".venv/Scripts/python.exe" ]; then
VENV_PYTHON=".venv/Scripts/python.exe"
fi

# -k "not windows_path": skip tests using fake Windows paths that break
# Path.resolve() on macOS/Linux. These are validated by CI on all platforms.
if [ -n "$VENV_PYTHON" ]; then
# Check if pytest is installed in venv
if $VENV_PYTHON -c "import pytest" 2>/dev/null; then
PYTHONPATH=apps/backend $VENV_PYTHON -m pytest tests/ -v --tb=short -x -m "not slow and not integration" -k "not windows_path" $IGNORE_TESTS
PYTHONPATH=. $VENV_PYTHON -m pytest ../../tests/ -v --tb=short -x -m "not slow and not integration" $IGNORE_TESTS
else
echo "Warning: pytest not installed in venv. Installing test dependencies..."
$VENV_PYTHON -m pip install -q -r tests/requirements-test.txt
PYTHONPATH=apps/backend $VENV_PYTHON -m pytest tests/ -v --tb=short -x -m "not slow and not integration" -k "not windows_path" $IGNORE_TESTS
if $VENV_PYTHON -m pip install -q -r ../../tests/requirements-test.txt; then
PYTHONPATH=. $VENV_PYTHON -m pytest ../../tests/ -v --tb=short -x -m "not slow and not integration" $IGNORE_TESTS
else
echo "Warning: Failed to install test dependencies. Skipping tests."
fi
fi
elif [ -d "apps/backend/.venv" ]; then
elif [ -d ".venv" ]; then
echo "Warning: venv exists but Python not found in it, using system Python"
PYTHONPATH=apps/backend python -m pytest tests/ -v --tb=short -x -m "not slow and not integration" -k "not windows_path" $IGNORE_TESTS
PYTHONPATH=. python -m pytest ../../tests/ -v --tb=short -x -m "not slow and not integration" $IGNORE_TESTS
else
echo "Warning: No .venv found in apps/backend, using system Python"
PYTHONPATH=apps/backend python -m pytest tests/ -v --tb=short -x -m "not slow and not integration" -k "not windows_path" $IGNORE_TESTS
PYTHONPATH=. python -m pytest ../../tests/ -v --tb=short -x -m "not slow and not integration" $IGNORE_TESTS
fi
)
if [ $? -ne 0 ]; then
Expand Down Expand Up @@ -251,7 +279,7 @@ if git diff --cached --name-only | grep -q "^apps/frontend/"; then
# Dependencies available - run full frontend checks
# Use subshell to isolate directory changes and prevent worktree corruption
(
cd apps/frontend
cd apps/frontend || exit 1

# Run lint-staged (handles staged .ts/.tsx files)
npm exec lint-staged
Expand Down
5 changes: 1 addition & 4 deletions apps/backend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,6 @@ Thumbs.db
# Tests (development only)
tests/

# Exception: Allow colocated tests within integrations/graphiti
!integrations/graphiti/tests/

# Auto Claude data directory
.auto-claude/
coverage.json
/gitlab-integration-tests/
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Consider aligning with the .auto-claude/ directory convention.

The new ignore entry is placed under the "Auto Claude data directory" comment but doesn't follow the .auto-claude/ prefix used by the entry above it. Based on learnings, project data (specs, plans, QA reports, memory) should be stored in .auto-claude/specs/.

If this directory contains Auto Claude-managed integration test artifacts or temporary data, consider:

  • Moving it to .auto-claude/gitlab-integration-tests/ and updating the ignore pattern, or
  • Moving this entry to the "Tests (development only)" section if it's not Auto Claude-specific

The current pattern /gitlab-integration-tests/ will only match at the root of apps/backend/—verify this root-level anchoring is intentional.

♻️ Proposed organizational improvement

Option 1: Follow .auto-claude/ convention

 # Auto Claude data directory
 .auto-claude/
-/gitlab-integration-tests/

Then store integration tests in .auto-claude/gitlab-integration-tests/ (already covered by the .auto-claude/ ignore).

Option 2: Move to Tests section

 # Tests (development only)
 tests/
+gitlab-integration-tests/
 
 # Auto Claude data directory
 .auto-claude/
-/gitlab-integration-tests/

(Remove the leading / unless root-anchoring is specifically required.)

Based on learnings, project data should be stored in .auto-claude/specs/ directory which is gitignored.

🤖 Prompt for AI Agents
In `@apps/backend/.gitignore` at line 67, The .gitignore entry
"/gitlab-integration-tests/" is under the "Auto Claude data directory" comment
but doesn't follow the `.auto-claude/` convention; either rename the pattern to
".auto-claude/gitlab-integration-tests/" so it's covered by the `.auto-claude/`
section (preferred for Auto Claude-managed artifacts) or move the entry into the
"Tests (development only)" section and remove the leading "/" if you don't
intend root-anchoring; also verify whether root anchoring of
"/gitlab-integration-tests/" was intentional.

Loading
Loading