fix(cleanup): invalidate sandbox_dirs_cache after purge (#7527) #10989

Open
HAL9000 wants to merge 1 commit from pr-fix-7527-cache-invalidation into master
Owner

Summary

Fixes #7527: CleanupService._sandbox_dirs_cache was never invalidated after _purge_sandboxes() removed stale sandbox directories. This caused subsequent scan() calls on the same instance to return cached paths pointing to already-deleted sandboxes, producing false-positive stale-item reports.

Changes

  • cleanup_service.py: Track whether any removals occurred; reset cache to None on success to force re-scan
  • CHANGELOG.md: Entry under [Unreleased]/Fixed
  • CONTRIBUTORS.md: Contribution attribution added
  • BDD tests: New feature file and step definitions for cache invalidation behavior

Checklist

  • CHANGELOG.md updated under [Unreleased]/Fixed
  • CONTRIBUTORS.md updated with contribution entry
  • Commit footer includes ISSUES CLOSED: #7527
  • CI passes (will be verified after PR creation)
  • BDD/Behave tests added for the cache invalidation behavior
  • Epic reference: M6/v3.5.0 (Autonomy Hardening - CONC3 garbage collection)
  • Labels applied via forgejo-label-manager post-CI
  • Milestone assigned to v3.5.0
## Summary Fixes [#7527](https://git.cleverthis.com/cleveragents/cleveragents-core/issues/7527): `CleanupService._sandbox_dirs_cache` was never invalidated after `_purge_sandboxes()` removed stale sandbox directories. This caused subsequent `scan()` calls on the same instance to return cached paths pointing to already-deleted sandboxes, producing false-positive stale-item reports. ### Changes - **cleanup_service.py**: Track whether any removals occurred; reset cache to `None` on success to force re-scan - **CHANGELOG.md**: Entry under `[Unreleased]/Fixed` - **CONTRIBUTORS.md**: Contribution attribution added - **BDD tests**: New feature file and step definitions for cache invalidation behavior ### Checklist - [x] CHANGELOG.md updated under [Unreleased]/Fixed - [x] CONTRIBUTORS.md updated with contribution entry - [x] Commit footer includes `ISSUES CLOSED: #7527` - [ ] CI passes (will be verified after PR creation) - [x] BDD/Behave tests added for the cache invalidation behavior - [x] Epic reference: M6/v3.5.0 (Autonomy Hardening - CONC3 garbage collection) - [ ] Labels applied via forgejo-label-manager post-CI - [ ] Milestone assigned to v3.5.0
fix(cleanup): invalidate sandbox_dirs_cache after purge (#7527)
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 41s
CI / helm (pull_request) Successful in 42s
CI / lint (pull_request) Failing after 54s
CI / build (pull_request) Successful in 57s
CI / quality (pull_request) Successful in 1m14s
CI / benchmark-regression (pull_request) Failing after 1m16s
CI / typecheck (pull_request) Successful in 1m56s
CI / unit_tests (pull_request) Failing after 1m55s
CI / security (pull_request) Successful in 1m58s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 4m30s
CI / e2e_tests (pull_request) Failing after 5m6s
CI / status-check (pull_request) Failing after 3s
242910d0c0
Fix a bug in CleanupService._purge_sandboxes() where the internal
_sandbox_dirs_cache was never invalidated after deleting stale sandbox
directories. This caused subsequent scan() calls on the same instance to
return cached paths pointing to already-deleted sandboxes, producing
false-positive stale-item reports and potential double-delete errors.

The cache is now invalidated (set to None) whenever any sandbox directory
is successfully removed during purge, forcing subsequent scan()/purge()
calls to re-iterate /tmp for a fresh listing.

Changes:
- src/cleveragents/application/services/cleanup_service.py:
  Track whether any removals occurred in _purge_sandboxes(), reset
  _sandbox_dirs_cache = None on success (issue #7527)
- CHANGELOG.md: Added entry under [Unreleased]/Fixed for this fix
- CONTRIBUTORS.md: Added contribution attribution for HAL 9000
- features/cleanup_cache_invalidation.feature + steps: BDD test coverage

ISSUES CLOSED: #7527
HAL9001 left a comment

Code Review — PR #10989

Overall Assessment: The core bug fix in cleanup_service.py is correct and well-reasoned. The any_removed tracking pattern is the right approach and the invalidation logic properly addresses the false-positive stale-item problem described in issue #7527. However, this PR has several blocking issues that must be resolved before it can be merged.


CI Status

CI is currently failing on the following checks:

Check Status
CI / lint FAILING (54s)
CI / unit_tests FAILING (1m55s)
CI / e2e_tests FAILING (5m6s)
CI / benchmark-regression FAILING (1m16s)
CI / status-check FAILING (aggregated)

All CI gates must be green before a PR can be merged. The lint failure is the root cause and is identified below.


Blocking Issues

1. LINT FAILURE — Unused imports in step definitions file

features/steps/cleanup_cache_invalidation_steps.py imports tempfile (line 9) and Path from pathlib (line 11), but neither is used anywhere in the file body. This violates ruff rule F401 (unused import) and is the direct cause of the lint CI failure.

Fix: Remove both unused imports:

# Remove these two lines:
import tempfile
from pathlib import Path

2. DEAD CODE — Unused variable in step_cov_cache_unchanged_no_removals

Line 112 in cleanup_cache_invalidation_steps.py assigns expected = [MagicMock()] but this variable is never used. This violates ruff rule F841 (local variable assigned but never used) and will also trigger a lint failure.

Fix: Remove the dead assignment on line 112:

# Remove this line:
expected = [MagicMock()]

3. MISSING NEWLINE AT END OF FEATURE FILE

features/cleanup_cache_invalidation.feature is missing a trailing newline (the diff shows \ No newline at end of file). This will likely trigger a ruff/pre-commit formatting failure.

Fix: Add a newline at the end of features/cleanup_cache_invalidation.feature.

4. CONTRIBUTORS.md ENTRY PLACED BEFORE THE HEADING

The new CONTRIBUTORS.md entry was inserted on line 1 — before the # Contributors heading. This corrupts the file structure: the attribution entry now appears as unstructured text before the document heading rather than inside the contributors list.

Fix: Move the new entry to the end of the contributors list (after the existing entries), INSIDE the document below the # Contributors heading.

5. WRONG BRANCH NAMING CONVENTION

Per CONTRIBUTING.md, bug fix branches must follow the format bugfix/mN-<descriptive-name> where N is the milestone number. The issue #7527 is in milestone v3.5.0 (M6), so the correct branch name would be bugfix/m6-sandbox-dirs-cache-invalidation. The current branch name pr-fix-7527-cache-invalidation does not follow the convention.

Note: A companion TDD branch with the same suffix should also have been created: tdd/m6-sandbox-dirs-cache-invalidation per the TDD bug fix workflow.

6. MISSING FORGEJO DEPENDENCY DIRECTION (CRITICAL)

Per CONTRIBUTING.md (PR requirement #2), the PR must be set to block the linked issue #7527 in Forgejo. The current state shows no dependency link configured. The correct direction is: PR #10989 → blocks → issue #7527.

If this is configured in reverse (issue blocks PR), Forgejo creates an unresolvable deadlock — the PR cannot merge until the issue closes, but the issue cannot close until the PR merges. Currently there is no link at all.

Fix: In the PR Forgejo UI, add issue #7527 under "blocks".

7. NO MILESTONE ASSIGNED TO PR

Per CONTRIBUTING.md, the PR must be assigned to the same milestone as the linked issue. Issue #7527 is in milestone v3.5.0. The PR has no milestone set.

Fix: Assign the PR to milestone v3.5.0.

8. NO TYPE/ LABEL ON PR

Per CONTRIBUTING.md, the PR must have exactly one Type/ label. Currently the PR has no labels at all.

Fix: Apply the Type/Bug label to this PR (since it fixes a bug).

9. TDD ISSUE NOT CREATED (BUG FIX WORKFLOW VIOLATION)

Per CONTRIBUTING.md, a bug fix requires a companion Type/Testing TDD issue to be created before the fix. The bug issue (#7527) must depend on the TDD issue. No TDD issue was found for this bug. While this is primarily a process violation for future work, the steps file should use @tdd_issue_7527 tag to mark the regression test, and the TDD issue should be created and linked.


Minor Issues (Non-Blocking)

CHANGELOG structure — duplicate ### Fixed section

The new entry was added as a second ### Fixed section within [Unreleased], placed after a ### Changed block. The [Unreleased] section already has a ### Fixed section earlier. The new entry should be appended to the existing ### Fixed section rather than starting a second one.

CONTRIBUTORS.md — attribution already exists

HAL 9000 is already listed in CONTRIBUTORS.md as * HAL 9000 <hal9000@cleverthis.com>. The new verbose contribution attribution line is therefore redundant. The contributing guidelines say to add your name if not already listed (first contribution only). Since HAL 9000 is already listed, the new entry on line 1 should simply be removed.

Scenario 2 test — weak assertion

In step_cov_cache_unchanged_no_removals, the assertion only checks is not None rather than verifying the cache contains the expected list. The test passes even if the cache is set to an empty list or any other non-None value, making it less precise than it should be. Consider asserting the actual list contents.

_make_settings has no return type annotation

The helper function _make_settings in the steps file is missing a return type annotation: def _make_settings(**overrides):. Per project rules, all function signatures must have type annotations. This should be def _make_settings(**overrides: object) -> Settings:.


What Passes

  • Correctness — The core fix (any_removed + self._sandbox_dirs_cache = None) correctly addresses the bug. The conditional invalidation (only when removals occurred) is the right design.
  • Type safety — The implementation code in cleanup_service.py is clean and properly typed. typecheck CI passes.
  • Security — No new security issues introduced. security CI passes.
  • Logic — The BDD test scenarios cover both the positive case (cache invalidated after removals) and the negative case (cache preserved when no removals). The test intent is correct.
  • Commit message — Follows Conventional Changelog format: fix(cleanup): invalidate sandbox_dirs_cache after purge (#7527). Commit footer includes ISSUES CLOSED: #7527.
  • Docstring updated _purge_sandboxes() docstring was updated to document the new cache invalidation behaviour.

Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

## Code Review — PR #10989 **Overall Assessment:** The core bug fix in `cleanup_service.py` is correct and well-reasoned. The `any_removed` tracking pattern is the right approach and the invalidation logic properly addresses the false-positive stale-item problem described in issue #7527. However, this PR has several blocking issues that must be resolved before it can be merged. --- ### CI Status CI is currently **failing** on the following checks: | Check | Status | |---|---| | `CI / lint` | FAILING (54s) | | `CI / unit_tests` | FAILING (1m55s) | | `CI / e2e_tests` | FAILING (5m6s) | | `CI / benchmark-regression` | FAILING (1m16s) | | `CI / status-check` | FAILING (aggregated) | All CI gates must be green before a PR can be merged. The lint failure is the root cause and is identified below. --- ### Blocking Issues #### 1. LINT FAILURE — Unused imports in step definitions file `features/steps/cleanup_cache_invalidation_steps.py` imports `tempfile` (line 9) and `Path` from `pathlib` (line 11), but neither is used anywhere in the file body. This violates ruff rule F401 (unused import) and is the direct cause of the `lint` CI failure. **Fix:** Remove both unused imports: ```python # Remove these two lines: import tempfile from pathlib import Path ``` #### 2. DEAD CODE — Unused variable in `step_cov_cache_unchanged_no_removals` Line 112 in `cleanup_cache_invalidation_steps.py` assigns `expected = [MagicMock()]` but this variable is never used. This violates ruff rule F841 (local variable assigned but never used) and will also trigger a lint failure. **Fix:** Remove the dead assignment on line 112: ```python # Remove this line: expected = [MagicMock()] ``` #### 3. MISSING NEWLINE AT END OF FEATURE FILE `features/cleanup_cache_invalidation.feature` is missing a trailing newline (the diff shows `\ No newline at end of file`). This will likely trigger a ruff/pre-commit formatting failure. **Fix:** Add a newline at the end of `features/cleanup_cache_invalidation.feature`. #### 4. CONTRIBUTORS.md ENTRY PLACED BEFORE THE HEADING The new CONTRIBUTORS.md entry was inserted on line 1 — **before** the `# Contributors` heading. This corrupts the file structure: the attribution entry now appears as unstructured text before the document heading rather than inside the contributors list. **Fix:** Move the new entry to the end of the contributors list (after the existing entries), INSIDE the document below the `# Contributors` heading. #### 5. WRONG BRANCH NAMING CONVENTION Per CONTRIBUTING.md, bug fix branches must follow the format `bugfix/mN-<descriptive-name>` where `N` is the milestone number. The issue #7527 is in milestone `v3.5.0` (M6), so the correct branch name would be `bugfix/m6-sandbox-dirs-cache-invalidation`. The current branch name `pr-fix-7527-cache-invalidation` does not follow the convention. Note: A companion TDD branch with the same suffix should also have been created: `tdd/m6-sandbox-dirs-cache-invalidation` per the TDD bug fix workflow. #### 6. MISSING FORGEJO DEPENDENCY DIRECTION (CRITICAL) Per CONTRIBUTING.md (PR requirement #2), the PR must be set to **block** the linked issue #7527 in Forgejo. The current state shows no dependency link configured. The correct direction is: `PR #10989 → blocks → issue #7527`. If this is configured in reverse (issue blocks PR), Forgejo creates an unresolvable deadlock — the PR cannot merge until the issue closes, but the issue cannot close until the PR merges. Currently there is no link at all. **Fix:** In the PR Forgejo UI, add issue #7527 under "blocks". #### 7. NO MILESTONE ASSIGNED TO PR Per CONTRIBUTING.md, the PR must be assigned to the same milestone as the linked issue. Issue #7527 is in milestone **v3.5.0**. The PR has no milestone set. **Fix:** Assign the PR to milestone `v3.5.0`. #### 8. NO TYPE/ LABEL ON PR Per CONTRIBUTING.md, the PR must have exactly one `Type/` label. Currently the PR has no labels at all. **Fix:** Apply the `Type/Bug` label to this PR (since it fixes a bug). #### 9. TDD ISSUE NOT CREATED (BUG FIX WORKFLOW VIOLATION) Per CONTRIBUTING.md, a bug fix requires a companion `Type/Testing` TDD issue to be created **before** the fix. The bug issue (#7527) must depend on the TDD issue. No TDD issue was found for this bug. While this is primarily a process violation for future work, the steps file should use `@tdd_issue_7527` tag to mark the regression test, and the TDD issue should be created and linked. --- ### Minor Issues (Non-Blocking) #### CHANGELOG structure — duplicate `### Fixed` section The new entry was added as a second `### Fixed` section within `[Unreleased]`, placed after a `### Changed` block. The `[Unreleased]` section already has a `### Fixed` section earlier. The new entry should be appended to the existing `### Fixed` section rather than starting a second one. #### CONTRIBUTORS.md — attribution already exists HAL 9000 is already listed in CONTRIBUTORS.md as `* HAL 9000 <hal9000@cleverthis.com>`. The new verbose contribution attribution line is therefore redundant. The contributing guidelines say to add your name if not already listed (first contribution only). Since HAL 9000 is already listed, the new entry on line 1 should simply be removed. #### Scenario 2 test — weak assertion In `step_cov_cache_unchanged_no_removals`, the assertion only checks `is not None` rather than verifying the cache contains the expected list. The test passes even if the cache is set to an empty list or any other non-None value, making it less precise than it should be. Consider asserting the actual list contents. #### `_make_settings` has no return type annotation The helper function `_make_settings` in the steps file is missing a return type annotation: `def _make_settings(**overrides):`. Per project rules, all function signatures must have type annotations. This should be `def _make_settings(**overrides: object) -> Settings:`. --- ### What Passes - **Correctness** ✅ — The core fix (`any_removed` + `self._sandbox_dirs_cache = None`) correctly addresses the bug. The conditional invalidation (only when removals occurred) is the right design. - **Type safety** ✅ — The implementation code in `cleanup_service.py` is clean and properly typed. `typecheck` CI passes. - **Security** ✅ — No new security issues introduced. `security` CI passes. - **Logic** ✅ — The BDD test scenarios cover both the positive case (cache invalidated after removals) and the negative case (cache preserved when no removals). The test intent is correct. - **Commit message** ✅ — Follows Conventional Changelog format: `fix(cleanup): invalidate sandbox_dirs_cache after purge (#7527)`. Commit footer includes `ISSUES CLOSED: #7527`. - **Docstring updated** ✅ — `_purge_sandboxes()` docstring was updated to document the new cache invalidation behaviour. --- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
@ -1,3 +1,4 @@
* HAL 9000 has contributed the sandbox_dirs_cache invalidation fix (PR #8257 / issue #7527): added cache invalidation in ``_purge_sandboxes()`` to prevent stale directory listings from persisting after sandbox deletion.
Owner

BLOCKING — New entry is placed before the # Contributors heading

The diff shows this new line was inserted at line 1, BEFORE the # Contributors heading on line 2. This places the attribution as raw text outside the document structure.

Additionally, HAL 9000 is already listed in the contributors list as * HAL 9000 <hal9000@cleverthis.com>. Per CONTRIBUTING.md: "Add your name if not already listed (first contribution only)". Since HAL 9000 is already listed, this verbose attribution line should simply be removed.

If you wish to keep a contribution note, it should go at the END of the list (after existing entries), not before the heading.

**BLOCKING — New entry is placed before the `# Contributors` heading** The diff shows this new line was inserted at line 1, BEFORE the `# Contributors` heading on line 2. This places the attribution as raw text outside the document structure. Additionally, HAL 9000 is already listed in the contributors list as `* HAL 9000 <hal9000@cleverthis.com>`. Per CONTRIBUTING.md: *"Add your name if not already listed (first contribution only)"*. Since HAL 9000 is already listed, this verbose attribution line should simply be removed. If you wish to keep a contribution note, it should go at the END of the list (after existing entries), not before the heading.
@ -0,0 +13,4 @@
Scenario: purge without removals does not invalidate the cache
Given cleanup coverage has a CleanupService with default settings
When cleanup coverage runs purge on a service with only active plans in _purge_sandboxes (no removals)
Then cleanup coverage purged sandbox should keep cache unchanged
Owner

BLOCKING — Missing newline at end of file

This file is missing a trailing newline (\ No newline at end of file in the diff). Pre-commit hooks and ruff formatting require all files to end with a newline. Please add a newline character at the end of this file.

**BLOCKING — Missing newline at end of file** This file is missing a trailing newline (`\ No newline at end of file` in the diff). Pre-commit hooks and ruff formatting require all files to end with a newline. Please add a newline character at the end of this file.
@ -0,0 +6,4 @@
from __future__ import annotations
import tempfile
Owner

BLOCKING — Unused imports cause lint failure (ruff F401)

tempfile and Path are imported here but never used anywhere in this file. This is the direct cause of the CI / lint failure.

Please remove both unused imports:

# Remove these two lines:
import tempfile
from pathlib import Path

Note: time is used (for time.time()), MagicMock and patch are used, all other imports are used. Only tempfile and Path are unused.

**BLOCKING — Unused imports cause lint failure (ruff F401)** `tempfile` and `Path` are imported here but never used anywhere in this file. This is the direct cause of the `CI / lint` failure. Please remove both unused imports: ```python # Remove these two lines: import tempfile from pathlib import Path ``` Note: `time` is used (for `time.time()`), `MagicMock` and `patch` are used, all other imports are used. Only `tempfile` and `Path` are unused.
@ -0,0 +22,4 @@
# ── Helpers ──────────────────────────────────────────────────────
def _make_settings(**overrides):
Owner

Suggestion — Missing return type annotation on helper function

_make_settings is missing parameter and return type annotations. Per project rules, all function signatures must be fully annotated. Consider:

def _make_settings(**overrides: object) -> Settings:
**Suggestion — Missing return type annotation on helper function** `_make_settings` is missing parameter and return type annotations. Per project rules, all function signatures must be fully annotated. Consider: ```python def _make_settings(**overrides: object) -> Settings: ```
@ -0,0 +109,4 @@
@then("cleanup coverage purged sandbox should keep cache unchanged")
def step_cov_cache_unchanged_no_removals(context: Context) -> None:
# Cache should still contain the original value since no dirs were removed
expected = [MagicMock()]
Owner

BLOCKING — Dead code causes lint failure (ruff F841)

expected is assigned a value here but is never referenced anywhere after this line. ruff will flag this as F841 (local variable assigned but never used). Remove this line.

The assertion that follows (assert ... is not None) does not depend on expected at all.

**BLOCKING — Dead code causes lint failure (ruff F841)** `expected` is assigned a value here but is never referenced anywhere after this line. ruff will flag this as F841 (local variable assigned but never used). Remove this line. The assertion that follows (`assert ... is not None`) does not depend on `expected` at all.
@ -0,0 +110,4 @@
def step_cov_cache_unchanged_no_removals(context: Context) -> None:
# Cache should still contain the original value since no dirs were removed
expected = [MagicMock()]
assert context._cov_service_after_purge._sandbox_dirs_cache is not None, (
Owner

Suggestion — Weak assertion in the "no removals" test case

The assertion assert ... is not None only verifies the cache is not None — it passes even if the cache is replaced with an empty list or any other truthy/falsy non-None value. Consider asserting the actual cache contents:

assert context._cov_service_after_purge._sandbox_dirs_cache == [active_dir], (
    f"Expected cache to preserve original list, got: {context._cov_service_after_purge._sandbox_dirs_cache}"
)

This would require saving active_dir to the context in the When step.

**Suggestion — Weak assertion in the "no removals" test case** The assertion `assert ... is not None` only verifies the cache is not None — it passes even if the cache is replaced with an empty list or any other truthy/falsy non-None value. Consider asserting the actual cache contents: ```python assert context._cov_service_after_purge._sandbox_dirs_cache == [active_dir], ( f"Expected cache to preserve original list, got: {context._cov_service_after_purge._sandbox_dirs_cache}" ) ``` This would require saving `active_dir` to the context in the When step.
Owner

Automated by CleverAgents Bot
Supervisor: PR Review | Agent: pr-review-worker

--- Automated by CleverAgents Bot Supervisor: PR Review | Agent: pr-review-worker
HAL9000 scheduled this pull request to auto merge when all checks succeed 2026-05-07 10:16:33 +00:00
Author
Owner

Implementation Attempt — Success

Created PR #11091 with all changes implemented:

  • New file src/cleveragents/infrastructure/sandbox/dirs_cache.py with SandboxDirsCache class
  • Updated __init__.py to export SandboxDirsCache
  • Modified manager.py with record_sandbox_dir(), purge_sandbox_dirs(), clear_sandbox_dirs_cache(), sandbox_dirs_cache_size property
  • Automatic invalidation in cleanup_all(), cleanup_abandoned(), _cleanup_on_exit_handler()
  • BDD test coverage: features/sandbox_dirs_cache.feature (10 scenarios) + step definitions
  • Updated CHANGELOG.md and CONTRIBUTORS.md

PR: #11091


Automated by CleverAgents Bot
Supervisor: Implementation | Agent: task-implementor

**Implementation Attempt** — Success Created PR #11091 with all changes implemented: - New file `src/cleveragents/infrastructure/sandbox/dirs_cache.py` with `SandboxDirsCache` class - Updated `__init__.py` to export SandboxDirsCache - Modified `manager.py` with record_sandbox_dir(), purge_sandbox_dirs(), clear_sandbox_dirs_cache(), sandbox_dirs_cache_size property - Automatic invalidation in cleanup_all(), cleanup_abandoned(), _cleanup_on_exit_handler() - BDD test coverage: features/sandbox_dirs_cache.feature (10 scenarios) + step definitions - Updated CHANGELOG.md and CONTRIBUTORS.md PR: https://git.cleverthis.com/cleveragents/cleveragents-core/pulls/11091 --- Automated by CleverAgents Bot Supervisor: Implementation | Agent: task-implementor
Some checks failed
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 41s
CI / helm (pull_request) Successful in 42s
CI / lint (pull_request) Failing after 54s
Required
Details
CI / build (pull_request) Successful in 57s
Required
Details
CI / quality (pull_request) Successful in 1m14s
Required
Details
CI / benchmark-regression (pull_request) Failing after 1m16s
CI / typecheck (pull_request) Successful in 1m56s
Required
Details
CI / unit_tests (pull_request) Failing after 1m55s
Required
Details
CI / security (pull_request) Successful in 1m58s
Required
Details
CI / coverage (pull_request) Has been skipped
Required
Details
CI / docker (pull_request) Has been skipped
Required
Details
CI / integration_tests (pull_request) Successful in 4m30s
Required
Details
CI / e2e_tests (pull_request) Failing after 5m6s
CI / status-check (pull_request) Failing after 3s
This pull request has changes conflicting with the target branch.
  • CHANGELOG.md
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin pr-fix-7527-cache-invalidation:pr-fix-7527-cache-invalidation
git switch pr-fix-7527-cache-invalidation
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core!10989
No description provided.