Skip to content

docs: record how dependency alerts are triaged - #5538

Merged
robfrank merged 1 commit into
mainfrom
docs/dependency-alert-triage-policy
Jul 30, 2026
Merged

docs: record how dependency alerts are triaged#5538
robfrank merged 1 commit into
mainfrom
docs/dependency-alert-triage-policy

Conversation

@robfrank

Copy link
Copy Markdown
Collaborator

What does this PR do?

Adds a How we triage dependency alerts section to SECURITY.md. One file, 44 added lines, documentation only.

It records the triage principle (by where the dependency runs, not by severity alone), what each of the two Dependabot auto-triage rules covers, and - deliberately given equal weight - what is not auto-dismissed.

Motivation

Both auto-triage rules live in the repository's security settings and leave no trace in the source tree. Nothing in the repo explained why one development-scope advisory is dismissed automatically while another, of the same severity against the same package, stays open. Anyone auditing the alert history would have found the pattern inexplicable.

This is the same class of gap just closed in #5536 for the frozen Gremlin properties: a constraint that is real, load-bearing, and invisible to the person who needs it.

The asymmetry is genuinely non-obvious. The GitHub-curated preset dismisses an advisory only when every CWE on it is in the preset's set, so a ReDoS tagged CWE-400 and CWE-407 stays open while the same class of issue tagged CWE-400 alone is dismissed. Without that written down it reads as a bug.

Related issues

Follows the Dependabot hygiene work in #5523, #5534, and #5536. Context for the frozen upstream pins is #5535.

Additional Notes

Reviewer attention is best spent on the "does not mean ignored" paragraph. The section is careful not to read as a blanket exemption for development-scope dependencies. It states explicitly that path traversal (CWE-22), information disclosure (CWE-200), code injection, and malicious or compromised packages are still reviewed at development scope, on the grounds that a build tool able to read or exfiltrate files is a real supply-chain risk whether or not it ships. It also points at .github/workflows/e2e-dependency-audit.yml as the backstop that fails on any runtime-scope finding.

One dependency on a setting outside this repo. The section describes a custom auto-triage rule for CWE-407 at development scope. If that rule has not been created in Settings -> Advanced Security -> Dependabot -> Auto-triage rules, this PR describes a state that does not exist yet. Either create it before merging, or say so and the custom-rule row plus the paragraph explaining it can be dropped - the rest of the section stands on its own, since the curated preset is demonstrably already active.

Verification:

  • No em dashes, per the repository's writing convention; the file uses - consistently with the surrounding text.
  • Every referenced path exists on main: .github/workflows/e2e-dependency-audit.yml, .github/dependabot.yml, gremlin/pom.xml.
  • Every factual claim cross-checked against the live config: the org.apache.groovy:* majors ignore rule is present in .github/dependabot.yml, and the audit workflow does block on npm audit --omit=dev --audit-level=high.
  • The CWE split attributed to the curated preset is derived from this repository's own alert history, not assumed: CVE-2026-33750 (CWE-400 alone) was auto-dismissed, while CVE-2026-13149 (CWE-400 and CWE-407) stayed open.
  • Heading structure verified; the new section sits after Scope, which it elaborates, and before the closing line.

Checklist

  • I have run the build using mvn clean package - not applicable and not run. The diff is one Markdown file; no source, no build input.
  • My unit tests cover both failure and success scenarios - no unit tests added. Documentation change with no behaviour to test.

Both Dependabot auto-triage rules live in the repository's security
settings and leave no trace in the source tree, so nothing in the repo
explained why some development-scope advisories are dismissed
automatically while others stay open. That is the same gap just closed
for the frozen Gremlin properties.

SECURITY.md now states the principle (triage by where the dependency
runs, not by severity alone), lists what each rule covers, and is
explicit about what is deliberately NOT auto-dismissed at development
scope: path traversal, information disclosure, code injection, and
malicious packages. It also points at the E2E audit workflow as the
backstop and notes that knowingly carried advisories are recorded in the
pom or dependabot config rather than dismissed silently.
@mergify

mergify Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

@robfrank robfrank added this to the 26.8.1 milestone Jul 29, 2026
@codacy-production

codacy-production Bot commented Jul 29, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Coverage ∅ diff coverage · -7.02% coverage variation

Metric Results
Coverage variation -7.02% coverage variation
Diff coverage diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (5a06925) 146712 109383 74.56%
Head commit (31e4e69) 178704 (+31992) 120693 (+11310) 67.54% (-7.02%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#5538) 0 0 ∅ (not applicable)

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@claude

claude Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review: docs: record how dependency alerts are triaged

Documentation-only change (one Markdown file, +44 lines). I focused the review on factual accuracy, since that is the entire value of this section, and on internal consistency with the other in-repo docs it overlaps.

Verified against the repo (all correct)

  • Every referenced path exists on main: .github/workflows/e2e-dependency-audit.yml, .github/dependabot.yml.
  • The audit-workflow claims match the file: runtime scope is blocking via npm audit --omit=dev --audit-level=high, development-scope findings are reported to the job summary without blocking.
  • The org.apache.groovy:* majors-only ignore rule is present in .github/dependabot.yml.
  • No em dashes in the added text, per the repo convention; hyphens used consistently.
  • Heading placement is correct: the new section sits after Scope and before the closing Thank you line.

One issue to resolve before merge

The curated-preset CWE list disagrees with the note already in .github/dependabot.yml. These are two in-repo documents describing the same GitHub preset, and they now list different CWE sets:

  • SECURITY.md (new): CWE-400, CWE-674, CWE-754, CWE-770, CWE-835 - five CWEs.
  • .github/dependabot.yml (lines 6-7): CWE-400 / CWE-770 / CWE-835 / CWE-674 - four CWEs, no CWE-754.

Whichever is accurate, they should match, otherwise the next auditor hits exactly the "reads as a bug" confusion this PR is trying to eliminate, just relocated. Please reconcile the two (ideally in this same PR, since it is already the source of truth for this topic) and, if practical, have one point at the other so they cannot drift again.

Non-blocking notes

  • The PR description already flags that the custom CWE-407 rule may not exist yet in Settings -> Advanced Security -> Dependabot -> Auto-triage rules. Agreed this is the one claim not verifiable from the source tree; if the rule is not live, the table row and its explanatory paragraph describe a non-existent state. Please confirm it exists before merge, or drop that row as the description suggests; the curated-preset half stands on its own.
  • The .github/dependabot.yml header note (lines 3-12) now substantially overlaps this new section. Consider trimming it to a one-line pointer to SECURITY.md once this lands, to keep a single canonical description.

The "Development scope does not mean ignored" paragraph you flagged for attention reads well: it is appropriately narrow (CWE-22, CWE-200, code injection, malicious packages stay in scope) and correctly frames the audit workflow as the runtime-scope backstop. No concerns there.

Nice, genuinely useful documentation of an otherwise-invisible constraint. Just the CWE-list reconciliation to sort out.

@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 65.31%. Comparing base (5a06925) to head (31e4e69).

Additional details and impacted files
@@             Coverage Diff              @@
##               main    #5538      +/-   ##
============================================
- Coverage     65.70%   65.31%   -0.39%     
+ Complexity     1114     1112       -2     
============================================
  Files          1748     1748              
  Lines        146712   146712              
  Branches      31356    31356              
============================================
- Hits          96397    95826     -571     
- Misses        37372    37933     +561     
- Partials      12943    12953      +10     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@robfrank
robfrank merged commit 306125a into main Jul 30, 2026
25 of 31 checks passed
@robfrank
robfrank deleted the docs/dependency-alert-triage-policy branch July 30, 2026 06:33
robfrank added a commit that referenced this pull request Aug 14, 2026
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