This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow-steward.git


The following commit(s) were added to refs/heads/main by this push:
     new 2c40af0  import: distinguish GHSA-relay notifications from 
tracker-mirror notifications (#151)
2c40af0 is described below

commit 2c40af06e96e115938245ea7965a24c12b674e44
Author: Jarek Potiuk <[email protected]>
AuthorDate: Thu May 14 13:05:23 2026 +0200

    import: distinguish GHSA-relay notifications from tracker-mirror 
notifications (#151)
    
    Updates security-issue-import Step 1 + the canonical candidate-listing
    query template so GHSA-relayed inbound reports (sent from
    [email protected] with [<upstream>] ... (GHSA-...) subject form)
    are no longer blanket-excluded.
    
    GitHub uses [email protected] for two categories:
    
      1. Tracker-mirror chatter (subject [<tracker-repo>] ...) — these are
         not import candidates; caught at Step 2 threadId dedup against
         existing tracker bodies.
      2. GHSA-relayed inbound reports (subject [<upstream>] ...) — these
         ARE valid import candidates and must reach Step 3 classification.
    
    The previous blanket -from:[email protected] exclusion dropped
    both categories. The fix is to drop only the dedicated mirror noreply
    addresses (per the project's declared <tracker-repo>@noreply.github.com
    form) and rely on Step 2 dedup for the remaining mirror chatter.
    
    Motivation: in a 2026-05-14 import sweep against airflow-s/airflow-s,
    four GHSA-relayed reports from Lokhesh Ujhoodha ([email protected],
    @Lougarou) were missed by the default 14-day candidate query because
    the standard exclusion -from:[email protected] dropped them
    alongside the tracker mirror notifications. The reporter had been told
    by ASF Security to split his consolidated report into separate GHSAs
    and complied — but the resulting GHSA-notification threads weren't
    surfaced as import candidates.
    
    Adopters must update their project.md mirror-sender declarations to
    remove the blanket -from:[email protected] line and keep only
    the dedicated <tracker-repo>@noreply.github.com mirror sender.
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
---
 .claude/skills/security-issue-import/SKILL.md | 28 +++++++++++++++++++++++++++
 tools/gmail/search-queries.md                 | 27 +++++++++++++++++++++-----
 2 files changed, 50 insertions(+), 5 deletions(-)

diff --git a/.claude/skills/security-issue-import/SKILL.md 
b/.claude/skills/security-issue-import/SKILL.md
index 5b58eb4..fd87e5f 100644
--- a/.claude/skills/security-issue-import/SKILL.md
+++ b/.claude/skills/security-issue-import/SKILL.md
@@ -325,6 +325,34 @@ bookkeeping emails are filtered out at Step 3 by subject 
pattern
 instead — see the `cve-tool-bookkeeping` row of the classification
 table.
 
+**Do not exclude `-from:[email protected]` wholesale.** GitHub
+uses this address for **two distinct categories** of messages:
+
+1. **Tracker-mirror notifications** — when an action lands on a
+   tracker issue (comment, label, close), GitHub emails every
+   subscriber. These arrive with subject `[<tracker-repo>] ...`
+   and are *not* import candidates — they describe an existing
+   tracker.
+2. **GHSA-relayed reports** — when a reporter files a GitHub
+   Security Advisory against `<upstream>`, GitHub emails
+   `[email protected] → security@<project>.apache.org`
+   with subject `[<upstream>] ... (GHSA-...)`. **These are**
+   import candidates.
+
+Filter the mirror notifications at Step 1 only by the project's
+declared dedicated `noreply` mirror addresses (e.g.
+`<tracker-repo>@noreply.github.com`, declared in
+[`<project-config>/project.md`](../../../<project-config>/project.md#gmail-and-ponymail)).
+**Do not blanket-exclude `[email protected]`** — the
+remaining tracker-mirror chatter on `[email protected]` is
+caught at Step 2 (threadId dedup against existing tracker bodies)
+and Step 2-bis (already-answered detection).
+
+The canonical query template in
+[`tools/gmail/search-queries.md`](../../../tools/gmail/search-queries.md#security-issue-import--candidate-listing-query)
+omits the blanket exclusion; project-specific `<project-config>/project.md`
+declarations enumerate dedicated mirror noreply senders only.
+
 Adjust the time window per the user's selector (`since:` → `newer_than:`
 or `after:`; `import all` → `newer_than:90d`).
 
diff --git a/tools/gmail/search-queries.md b/tools/gmail/search-queries.md
index ed39b62..bb91aa7 100644
--- a/tools/gmail/search-queries.md
+++ b/tools/gmail/search-queries.md
@@ -54,8 +54,8 @@ Placeholder convention:
 
 The project's tracker repo mirrors GitHub issue activity onto its
 security list, producing a large volume of bot messages that match
-most content searches. Every skill that searches beyond a pure list
-scan excludes the mirror senders up front:
+most content searches. Skills that do **content searches** (not the
+import candidate-listing query) exclude the mirror senders up front:
 
 ```text
 -from:[email protected]
@@ -64,6 +64,13 @@ scan excludes the mirror senders up front:
 -from:[email protected]
 ```
 
+**Exception — `security-issue-import` candidate listing.** That
+specific query removes `-from:[email protected]` from the
+exclusion list so GHSA-relayed inbound reports (sent from
+`[email protected]` with `[<upstream>] ... (GHSA-...)`
+subject form) are not dropped along with the tracker-mirror
+chatter. See the `security-issue-import` query template below.
+
 For projects that host their tracker elsewhere (or do not mirror to
 the list), trim or replace these as needed.
 
@@ -72,17 +79,27 @@ the list), trim or replace these as needed.
 ### `security-issue-import` — candidate-listing query
 
 Inbound threads that might be new reports, minus GitHub-notification
-bots, within a time window:
+mirror-bots, within a time window:
 
 ```text
 list:<security-list-domain>
-  -from:[email protected]
-  -from:[email protected]
   -from:<tracker-noreply>
+  -from:[email protected]
   -from:[email protected]
   newer_than:30d
 ```
 
+**Do not exclude `-from:[email protected]` in the
+candidate-listing query.** GitHub uses that address for two
+categories: tracker-mirror chatter (subject form `[<tracker-repo>]
+...`) which is what we want to filter, **and** GHSA-relayed inbound
+reports (subject form `[<upstream>] ... (GHSA-...)`) which are
+import candidates. The mirror chatter is caught by Step 2 threadId
+dedup; the GHSA relays are valid candidates and must reach Step 3
+classification. The `<tracker-noreply>` exclusion (e.g.
+`<tracker-repo>@noreply.github.com`) handles the dedicated mirror-
+noreply sender, which is what we actually want to drop.
+
 **Do not exclude `-from:[email protected]`.** That address is used
 for CVE-tool bookkeeping *and* for ASF-security-team forwarding of
 inbound reports *and* for ad-hoc ASF Security discussion.

Reply via email to