Concepts
Cleanup: how Argus removes its own work
Adding a fix is only half the job. Argus signs every change it makes, and on later runs it takes those changes back out once they have stopped protecting anything, so your project keeps only what it actually needs.
Why Argus removes things
Every edit Argus makes carries a small comment identifying it:
<!-- PATCH|OVERRIDE|RM-b2c3d4e5f6a7|spring-kafka -> 3.2.4 (managed). -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>3.2.4</version>
</dependency>Argus added this line, to fix a specific security advisory,
by holding spring-kafka at 3.2.4.
The comment is how Argus recognises its own work later.
Without it, Argus would treat the line as yours and never touch it.Those fixes do not stay useful forever. A few months later the platform you build on (Spring Boot, or your own company parent POM) ships a version that is already safe. At that point the line Argus added is doing nothing except sitting in your file, and quietly holding that dependency wherever Argus left it.
Left alone, this accumulates. A project that has been running Argus for a year collects a layer of pins that nobody can safely remove by hand, because nobody remembers which are still load-bearing. Cleanup is what stops that happening.
The question Argus asks
There is one question, and it is deliberately narrow:
If I take this line out, does the security problem come back?
To answer it, Argus removes the line, rebuilds your dependency tree with Maven exactly as your build would, and re-checks the result against the advisory databases. If nothing is vulnerable without the line, the line goes.
Two kinds of change
What “removing” means depends on what Argus did in the first place, and the difference matters when you read the diff.
Lines Argus added
Most fixes add something that was not in your file before: a pinned version, an exclusion, an imported bill of materials. Before Argus, that line simply was not there, so removing it returns your file to its original shape and makes it shorter.
<dependencyManagement>
<dependencies>
<!-- PATCH|OVERRIDE|RM-b2c3d4e5f6a7|spring-kafka -> 3.2.4 (managed). -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>3.2.4</version>
</dependency>
</dependencies>
</dependencyManagement><!-- The whole block is gone. Spring Boot now supplies a
safe version of spring-kafka on its own, so nothing is
lost by letting it. -->Values Argus changed
Some fixes do not add a line at all: they change a number you already had. Upgrading your parent POM is the common case. There is nothing for Argus to remove there: the line is yours, and putting the number back would be undoing an upgrade on purpose.
What can go out of date is the comment, because it names a version. If your team (or Dependabot) later moves that version on, the comment starts contradicting the file:
<!-- PATCH|BUMP|...|spring-boot-starter-parent -> 4.0.7. -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.1.0</version>
</parent><parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.1.0</version>
</parent>The comment claimed 4.0.7 while the file said 4.1.0. Argus removes the sentence that had become untrue and leaves your version exactly where you put it.
When a version goes down
This is the one change most worth understanding, because it can look alarming in a diff.
Suppose Argus pinned spring-kafka to 3.2.4 to fix an advisory. Later you upgrade Spring Boot, and the new Boot manages spring-kafka at 3.2.1: a lower number, but one the advisory no longer affects. The pin is now pointless. When Argus removes it, your resolved version moves from 3.2.4 down to 3.2.1.
That is the intended result. Your project goes back to using whatever your platform provides, which is where it would have been if Argus had never been involved. Nothing becomes vulnerable: Argus checked before removing.
What Argus will never do
- Leave you worse off. If removing a fix would expose a problem that has no available patch, Argus abandons the cleanup for that run and says so. Any unrelated fix in the same merge request still goes ahead.
- Touch a line you wrote. No Argus comment, no changes. Ever.
- Delete a dependency. Where Argus only changed a version number, cleanup removes the comment and nothing else.
- Remove something silently. Every removal appears in the merge request and the PDF report, with the reason.
Seeing it in your merge request
When a cleanup travels alongside a security fix, it appears under Also removed:
### Also removed
- `org.springframework.kafka:spring-kafka`: No longer needed — the project
resolves a safe version without it, so the pin has been removed.RELEASED SCOPE EVIDENCE
org.springframework.kafka: edit removed No longer needed — the project
spring-kafka resolves a safe version without it.
spring-boot-starter-parent comment only Comment out of date — it still
refers to 4.0.7, but the parent
is now on 4.1.0.The scope column is the one to read first. Edit removed means a line came out and what your build resolves may change. Comment only means nothing but a stale comment was deleted.
A related section, Resolved without a pin (added in 3.3.2), covers a different situation: Argus planned a pin for a vulnerable transitive, and the same run’s other upgrades (a coupling companion, an anchor) settled that coordinate safe before publication, so the pin was withdrawn and never shipped. Everything under Also removed corresponds to a deletion you can see in the diff; entries under Resolved without a pin deliberately do not, because the pin only ever existed inside Argus’s candidate patch.
When there is nothing left to fix, Argus opens a maintenance-only merge request containing just the removals.
Taking a fix over yourself
If you decide a fix should be yours to manage, delete the <!-- PATCH|… --> comment and keep the change. Argus will treat the line as your own from then on and will never revisit it. Keep the comment with its change if you want Argus to carry on managing it: moving one without the other is the one thing that confuses it.
For the full decision, including its known limits, see the strategy ladder.