Peer Reviewer Assistant

Last updated: Oct 27, 2026


The Peer Reviewer Assistant reviews the code changes of a pull request or a merge request (PR/MR). It reports the vulnerabilities that the change introduces in your code hosting platform.

The assistant covers the branch where the work occurs. A feature branch has a short life, and you do not register it on the platform. Without the assistant, you find its vulnerabilities only after the merge.

To connect your platform, read its own page: GitHub, GitLab, or Azure DevOps. When a PR/MR gets no review, read Troubleshooting.

Availability in each platform

FunctionGitHubGitLabAzure DevOps
Review of the lines that the change addsAvailableAvailableAvailable
Comment in the PR/MRAvailableAvailableAvailable
Review of each new commitAvailableOn the roadmapAvailable
Status check on the commitAvailableOn the roadmapAvailable
Severity threshold of your policyAvailableOn the roadmapAvailable
Exclusions of the rootAvailableOn the roadmapAvailable
ExceptionsAvailableOn the roadmapAvailable
Record in the DevSecOps sectionAvailableOn the roadmapAvailable
Block the mergeAvailableOn the roadmapAvailable

What the assistant reviews

The assistant compares the PR/MR against the merge base of the branch that the change targets. It reports only the vulnerabilities on the lines that the change adds.

The assistant does not report a line that the change does not add, also when a scanner finds a vulnerability on that line. Thus a PR/MR that changes a file with known vulnerabilities reports nothing. The author does not receive the history of the file.

The assistant runs these Fluid Attacks scanners on the code changes:

ScannerWhat it detects
SASTVulnerabilities that the change introduces in the code
SCAVulnerabilities in the dependencies that the change affects
SS (Secret Scanning)Secrets and credentials that the change introduces

The assistant does not run DAST, MAST, or CSPM analysis.

What starts a review

Action on the PR/MRGitHubGitLabAzure DevOps
You open itYesYesYes
You push a new commitYesNoYes
You open it againYesNoYes
You ask for a re-run of the checkYes——
You close or merge itNo. The platform closes the reviewNoNo
You change the target branchYesNoYes
You mark it as Ready for reviewNo——

The classes of vulnerability

ClassWhat it meansEffect on the check
UnmanagedThe score is equal to the threshold or more, and it has no exceptionThe check fails
AllowedAn exception in the platform covers itThe check does not fail
Allowed on registered branchThe branch that the group registered already accepts itThe check does not fail
Below thresholdThe score is less than the severity thresholdThe check does not fail

What the registered branch already accepts

The review examines what the group already accepted on the branch that it registered. A vulnerability that the change introduces, and that this branch already accepts, reports as Allowed on registered branch and does not fail the check.

Three decisions of the platform count as accepted:

  • A vulnerability confirmed as zero risk.
  • A vulnerability temporarily accepted, until its acceptance expires. The platform approves this acceptance immediately, except when a policy of your organization asks for an approver.
  • A vulnerability permanently accepted, after an approver accepts it.

The same is true of an accepted vulnerability in a dependency.

When the change moves the code

The review follows a line to its origin. Thus, an acceptance stays after some changes, but not after other changes.

What the pull request does to the lineThe acceptance
Moves it in the same fileFollows it
Shifts it or changes its indentationFollows it
Edits it, even one characterDoes not follow it. The line is new code
Copies it to another fileDoes not follow it. The copy is new code

The severity labels obey the CVSS 4.0 score:

LabelScore
Critical9.0 and more
High7.0 to 8.9
Medium4.0 to 6.9
LowLess than 4.0

The summary comment

The assistant keeps one comment in each pull request. It edits this comment at each review. Thus the conversation stays clear.

The heading of the comment is Fluid Attacks security analysis. Below the heading, a headline gives the result:

HeadlineWhen
Failed · 2 unmanaged vulnerabilitiesThere is one unmanaged vulnerability or more
Passed · No vulnerabilities foundThe assistant reported nothing
Passed (accepted risk) · 3 vulnerabilities allowed in Fluid AttacksAn exception covers each vulnerability
Passed (accepted risk) · 1 vulnerability allowed, below threshold (8.1)Each vulnerability is below the threshold
Passed (accepted risk) · 2 vulnerabilities allowed on registered branchThe registered branch already accepts each vulnerability
Incomplete · The security scan could not completeThe scan did not end

When a review has more than one of these classes, the headline names each one, separated by commas: Passed (accepted risk) · 1 vulnerability allowed in Fluid Attacks, 2 vulnerabilities allowed on registered branch.

Below the headline, the comment has these parts:

  • A count line, 2 Unmanaged · 1 Allowed. Allowed adds the vulnerabilities that an exception covers and the vulnerabilities below the threshold. When the registered branch already accepts one or more, the line ends with · 3 Allowed on registered branch.
  • A table with the three most severe unmanaged vulnerabilities. The table shows the severity, the weakness, and the location of each one. A review without unmanaged vulnerabilities has no table.
  • The line +57 more in Fluid Attacks, when the review found more than three unmanaged vulnerabilities.
  • A last line that attaches the result to a commit: PR #18 · commit ea65c74 · scanned 2026-10-07 00:39 UTC.
  • The link View details in Fluid Attacks →. This link opens the review of that pull request in the platform.
Summary comment of the Peer Reviewer Assistant with the Failed result

When every vulnerability is below the severity threshold, the headline says Passed (accepted risk):

Summary comment with the Passed result and a vulnerability below the severity threshold

The status check

Available in: GitHub and Azure DevOps. On the roadmap for GitLab.

The name of the check is Peer Reviewer Assistant. GitHub shows it as Fluid Attacks Platform / Peer Reviewer Assistant, because GitHub puts the name of the app before the name of the check. Azure DevOps shows it as fluidattacks/peer-reviewer-assistant. Use this name when you make the check necessary in the policy of the branch.

ResultThe check reports
PassedSuccess
Passed (accepted risk)Success
FailedFailure
IncompleteFailure

Annotations in the diff

The assistant writes an annotation on the line of each vulnerability:

  • An unmanaged vulnerability has an annotation of the type failure.
  • A vulnerability below the threshold has an annotation of the type notice.
Checks tab of a pull request with the annotations of the assistant in the diff

The assistant writes a maximum of 50 annotations. When the review finds more than 50, the summary of the check ends with The first 50 are annotated. The platform shows the full list.

The severity threshold

Available in: GitHub and Azure DevOps. On the roadmap for GitLab.

The review uses the same policy as CI Gate: Minimum to break the build. You set this policy in Policies, at the level of the organization. You can also set a different value for one group. Read Security gates.

Minimum to break the build field in the DevSecOps policies of the group

A vulnerability breaks the check when its score is equal to the threshold or more than the threshold:

ThresholdScore of the vulnerabilityResult
8.18.1The check fails
8.18.0The check does not fail
8.28.1The check does not fail

The assistant detects and reports a vulnerability below the threshold. The summary comment counts it, and the diff shows it as a notice. This vulnerability does not make the check fail.

If you change the threshold, ask GitHub to re-run the check. The assistant does a new scan and applies the new threshold. Thus you do not push a commit. Azure DevOps does not have a re-run. In Azure DevOps, push a commit.

Exclude files from the review

Available in: GitHub and Azure DevOps. On the roadmap for GitLab.

Each Git root has an Exclusions field. The patterns of this field use gitignore syntax. The review obeys them: if an exclusion covers a file, the assistant does not report that file, also when the change adds a vulnerable line to the file.

You edit the exclusions where you register the root. Read Exclude subpaths in Git repositories.

Exclusions field of a Git root in the Scope section of the group
PatternWhat it excludes
*.min.jsAll the minified JavaScript files
node_modules/The node_modules directory and all its content
test/fixtures/*All the files below test/fixtures
src/legacy/The src/legacy directory
config/local.*config/local.yaml, config/local.json, and so on

The obsolete exclusion files of the repository

Two files in the root directory of the repository continue to exclude files at this time:

  • .fluidattacksignore
  • fluidattacks-exclude.txt

To move the patterns:

  1. Open the file and copy its patterns.
  2. Go to the Scope section of the group.
  3. Open the Git root of that repository.
  4. Add the patterns in the Exclusions field.
  5. Delete the file from the repository.

Until you delete a file, the assistant obeys these rules:

  • If the repository has the two files, the assistant uses .fluidattacksignore.
  • A line that starts with # is a comment.
  • The assistant ignores an empty line.

Exceptions

Available in: GitHub and Azure DevOps. On the roadmap for GitLab.

An exception permits the merge of a pull request with a vulnerability that your team accepts. You do not change the code, and the policy stays the same for all the other pull requests.

Grant an exception

  1. Open the review of the pull request in the platform. The fastest way is the View details in Fluid Attacks → link in the summary comment.
  2. In the Vulnerabilities tab, select the unmanaged vulnerabilities that you accept.
  3. Click Grant exception.
  4. Examine the list below Vulnerabilities to except.
  5. Write a justification: why this pull request can merge with this vulnerability.
  6. Confirm.
Vulnerabilities tab with two unmanaged vulnerabilities selected

The Grant exception window lists what you accept, and it asks for the justification:

Grant exception window with the list of vulnerabilities and the justification field

The check changes immediately. You do not push a commit, and the assistant does not scan again. The platform publishes the result again on the same commit, and it writes the summary comment again.

Revoke an exception

You revoke an exception in the Exceptions tab of the review, with the Revoke button of that exception. The vulnerabilities that it covered are unmanaged again, and the platform publishes the result again on the same commit.

Who revokes itWhen
The person who granted itAlways
Another Group ManagerWhen the person who granted it is no longer a Group Manager with access to the group

What an exception covers, and for how long

ConditionWhat occurs
You push a new commit to the pull requestThe exception continues to apply, also when the code moves to a different line
You open the pull request againThe exception applies again
You merge or close the pull requestThe exception ends
The same vulnerable code occurs in a different pull requestThe exception does not cover it. You make a decision for each pull request
The same block of code occurs two times in one pull requestThese are two different vulnerabilities. An exception on one does not cover the other

You cannot select a vulnerability below the severity threshold. This vulnerability does not make the check fail, thus there is nothing to accept.

Review in the platform

Available in: GitHub and Azure DevOps. On the roadmap for GitLab.

You find each review of a pull request in the DevSecOps section of the group. A row with the Security check Peer Reviewer Assistant is a review of a pull request.

ColumnWhat it shows for a pull request
IdentifierPR #18 · ea65c74, with the source branch below
Security checkPeer Reviewer Assistant
ResultIn progress, Passed, Passed (accepted risk), Failed, or Incomplete
VulnerabilitiesThe total, with N unmanaged · M allowed below. A dash while the scan continues
Git repositoryThe nickname of the root
Executed dayThe date when the review ended
DevSecOps table of the group with the reviews of the Peer Reviewer Assistant

The detail of one review

Click the identifier of the row to open the review. The View details in Fluid Attacks → link in the summary comment opens the same page.

The header shows the number and the title of the pull request, its status, and six fields:

FieldWhat it shows
Git repositoryThe nickname of the root
BranchThe source branch and the target branch
CommitThe commit of the review
Pull requestThe number of the pull request
AuthorThe person who opened the pull request
Executed dateThe date when the review ended

Copy link gives you the address of the review. Send it to a person who can grant an exception. Open in SCM opens the pull request again.

The state of the pull request

When the pull request reaches a state that changes what the review means, the detail opens with a message:

MessageWhat it tells you
The scan could not completeNothing was evaluated. Push a new commit to scan again
New vulnerability not coveredA commit after the exceptions introduced a vulnerability that they do not cover, thus the check failed again
Pull request mergedThe exceptions ended, and they were not carried over to the target branch
Pull request closed without mergingThe exceptions are inactive. If the pull request opens again, they apply again
Pull request reopenedThe exceptions apply again. Nothing had to be approved again

The review has three tabs.

Vulnerabilities

This tab shows each vulnerability of the review, with its weakness, its file, its line, its technique, and its score. The Gate column shows Unmanaged, Allowed, or Below threshold. An allowed vulnerability also shows which exception covers it. Click Export CSV to get the list as a file. You also grant the exceptions in this tab.

Vulnerabilities tab of a pull request review with the Gate column

Exceptions

This tab shows the history of the exceptions of the review: who granted each one, when, how many vulnerabilities it covers, and its justification. View allowed vulnerabilities opens the list that it covers, and Revoke cancels it.

Exceptions tab of a pull request review with one exception granted

Pushes

This tab shows one row for each commit of the review, the newest first, with the result of that review, the vulnerabilities that it found, and the exceptions that applied to it. It is the history of how the pull request arrived at its current state.

Pushes tab of a pull request review with the history of each commit

What to do with each result

ResultWhat you must do
FailedCorrect the unmanaged vulnerabilities. If you cannot, ask your group manager for an exception in Fluid Attacks
Passed (accepted risk)Nothing. The platform keeps the record of each allowed vulnerability
Passed (accepted risk), below the thresholdNothing is necessary. But it is better to correct them
IncompletePush a new commit, or ask for a re-run of the check

On this page