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 30a2b36  feat(security-cve-allocate): extend title-strip cascade with 
two patterns from session manual cleanups (#402)
30a2b36 is described below

commit 30a2b36f631e95dc29dded349af97f72a29e3335
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sat May 30 21:53:12 2026 +0200

    feat(security-cve-allocate): extend title-strip cascade with two patterns 
from session manual cleanups (#402)
    
    Per direct observations from the airflow-s 2026-05-29/30 bulk sync —
    two recurring title-noise patterns were cleaned manually that the
    existing cascade did not catch:
    
    1. Trailing prior-CVE-relationship parentheticals — the cross-CVE
       relationship is structurally captured by the Gate #3 cross-CVE
       clause in the public summary; embedding the relationship in the
       title is noise to downstream advisory consumers. Catches every
       shape observed in this session:
       - `(CVE-YYYY-NNNNN)`
       - `(possible CVE-YYYY-NNNNN variant)` — from #345
       - `(incomplete fix for CVE-YYYY-NNNNN)` — from #351
       - `(fix-bypass of CVE-YYYY-NNNNN)` — from #352
       - and any other `(... CVE-YYYY-NNNNN ...)` shape
    
    2. Trailing reporter-name attribution parentheticals — reporter
       attribution lives in the credits field, never in the public
       title. Pattern matches `(<name> follow-up)` where `<name>`
       matches name-like tokens (word chars, dots, hyphens, single
       inline spaces) to avoid over-stripping substantive technical
       content. Catches:
       - `(Evan Ricafort follow-up)` — from #346
    
    Substantive technical parentheticals stay intact — e.g. the operator-
    name list `(GCSToSFTPOperator + GCSTimeSpanFileTransformOperator)` on
    the GCS path-traversal tracker is NOT stripped (it lacks a CVE ID
    and doesn't end in `follow-up`).
    
    The matching Step 1d signal row in security-issue-sync now enumerates
    the two new patterns so the proposal-time detector and the pre-push
    Gate #4 stay in lock-step with the cascade.
    
    Validated against 9 cases: 4 session-derived fixes (all pass), 3
    synthetic CVE-relationship variants (all pass), 1 substantive
    technical parenthetical (preserved correctly), 1 "<word> follow-up"
    edge case (stripped as designed — narrow scope acceptable since
    "follow-up" titles in airflow-s are exclusively reporter-attribution).
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
---
 .claude/skills/security-cve-allocate/SKILL.md | 16 ++++++++++++++++
 .claude/skills/security-issue-sync/SKILL.md   |  2 +-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/.claude/skills/security-cve-allocate/SKILL.md 
b/.claude/skills/security-cve-allocate/SKILL.md
index d4889e7..d52b029 100644
--- a/.claude/skills/security-cve-allocate/SKILL.md
+++ b/.claude/skills/security-cve-allocate/SKILL.md
@@ -341,6 +341,22 @@ patterns_trailing = [
     # brackets. Extend the alternation per project.
     r"[ 
\t]*(?:\[(?:ZDRES|HUNTR|GHSL)-[\w-]+\]|\((?:ZDRES|HUNTR|GHSL)-[\w-]+\))\.?[ 
\t]*$",
     r"[ \t]*\([^)]*split from #\d+[^)]*\)\.?[ \t]*$",
+    # Trailing parentheticals that mention a prior CVE ID. The cross-
+    # CVE relationship belongs in the public summary (Gate #3
+    # cross-CVE clause), never in the title — the title ships as
+    # `containers.cna.title` and prior-CVE references read as noise
+    # to downstream advisory consumers. Catches every shape observed
+    # in airflow-s manual cleanups: `(CVE-...)`,
+    # `(possible CVE-... variant)`, `(incomplete fix for CVE-...)`,
+    # `(fix-bypass of CVE-...)`, `(CVE-... <anything>)`, etc.
+    r"[ \t]*\([^)]*\bCVE-\d{4}-\d{4,7}\b[^)]*\)\.?[ \t]*$",
+    # Trailing `(<reporter name> follow-up)` parenthetical. Reporter
+    # attribution belongs in the credits field, never in the public
+    # title. The `<name>` part matches name-like tokens (word chars,
+    # dots, hyphens, single inline spaces) to avoid over-stripping
+    # substantive technical parentheticals that happen to contain
+    # the word `follow-up`.
+    r"[ \t]*\([\w.][\w. -]*[ \t]+follow-up\)\.?[ \t]*$",
 ]
 
 # Leading passes twice — strip order reveals nested tags.
diff --git a/.claude/skills/security-issue-sync/SKILL.md 
b/.claude/skills/security-issue-sync/SKILL.md
index 5fba16e..9f5b869 100644
--- a/.claude/skills/security-issue-sync/SKILL.md
+++ b/.claude/skills/security-issue-sync/SKILL.md
@@ -849,7 +849,7 @@ update, label change, or next-step recommendation in Step 2:
 | The tracker is an **incomplete-fix follow-up to another CVE** — detected by 
any of: the rollup or body mentions *"incomplete fix for `CVE-YYYY-NNNNN`"* / 
*"follow-up to `CVE-YYYY-NNNNN`"* / *"sibling tracker"*; the title contains a 
*"(incomplete fix for `CVE-YYYY-NNNNN`)"* parenthetical; the `affected[]` array 
names a different `packageName` than the referenced prior CVE; OR the tracker 
was opened as a split from a closed-`announced` tracker whose CVE is already 
PUBLISHED — **AND** the [...]
 | The *"CWE"* body field is populated with a bare `CWE-NNN` token (no 
description text) — e.g. `CWE-22` or `CWE-502` alone, without the canonical 
short description that follows in the format `CWE-NNN: <Title>` | Propose 
expanding the field to `CWE-NNN: <Canonical Title>` per the MITRE CWE catalog 
(e.g. `CWE-22: Improper Limitation of a Pathname to a Restricted Directory 
('Path Traversal')`, `CWE-502: Deserialization of Untrusted Data`, `CWE-601: 
URL Redirection to Untrusted Site ('Open R [...]
 | The tracker's *Security mailing list thread* body field references a 
**private scanner product** (declared in 
[`<project-config>/scanner-products.md`](../../../<project-config>/scanner-products.md)
 — e.g. internal SAST, partner-shared scan, unpublished bug-bounty pipeline) 
**AND** the *Reporter credited as* body field names a person rather than 
`anonymous` / a public handle, **AND** there is no signal the finder consented 
to public credit (no inbound `security@` message from them under [...]
-| The **issue title** contains adopter-specific or internal noise that would 
otherwise ship to the public CVE record — leading or trailing project-name 
tokens (e.g. ``Apache Airflow:`` / ``in Apache Airflow`` / ``(Apache Airflow 
X.Y)``), internal split markers (``(split from #NNN)`` / ``(split for scope 
clarity from #NNN)``), report-form classifiers (``[ Security Report ]`` / 
``[Security Issue]``), external-tracker IDs in parentheses or brackets 
(``[GHSA-xxxx-xxxx-xxxx]``, ``(ZDRES-NNNNN [...]
+| The **issue title** contains adopter-specific or internal noise that would 
otherwise ship to the public CVE record — leading or trailing project-name 
tokens (e.g. ``Apache Airflow:`` / ``in Apache Airflow`` / ``(Apache Airflow 
X.Y)``), internal split markers (``(split from #NNN)`` / ``(split for scope 
clarity from #NNN)``), report-form classifiers (``[ Security Report ]`` / 
``[Security Issue]``), external-tracker IDs in parentheses or brackets 
(``[GHSA-xxxx-xxxx-xxxx]``, ``(ZDRES-NNNNN [...]
 | A release carrying the fix has shipped. Detection is **scope-dependent** — 
different scope labels on a project can ride different release trains, each 
with its own *"is it released?"* signal (which artifact registry to consult, 
what to query, how to map a tracker's milestone to that registry, 
partial-release edge cases). The per-scope detection recipe lives in 
[`<project-config>/scope-labels.md` — *Detecting that a fix release has 
shipped*](../../../<project-config>/scope-labels.md#det [...]
 | GHSA state transition (opened, accepted, published, rejected) in a 
GHSA-forwarded email | If the GHSA is closed as "not accepted" but the security 
team accepted the report on `security@`, flag the divergence in the status 
comment so it is not lost. |
 | Team member saying *"let's also backport to v3-2-test"* / *"please mark X 
for backport"* | Note the requested backport label on the public PR as an item 
for Step 9 of the `security-issue-fix` workflow. |

Reply via email to