firefox-cves.csv; quarterly firefox-by-quarter.csv; annual firefox-by-year.csv; per-reporter rows in firefox-finders.csv; every AI-marked CVE with its credit strings in firefox-ai-cves.csvThe final bar is a partial quarter.
Mozilla's advisory impact rating; colour is the credit band. The few undated CVEs are absent.
Mozilla publishes one YAML file per security advisory, and each CVE inside
it carries a reporter string. The same CVE can appear in advisories for
several products or releases, so a mention count moves with how Mozilla
packages releases as well as with discovery. The counted unit is therefore
the distinct CVE ID: a flaw fixed in Firefox, Firefox ESR and Thunderbird on
the same day is one event, not three.
A "discovery" in this series is one distinct CVE ID appearing in that year's
advisories, dated by its earliest announcement. It is a disclosure count,
not a count of bugs found or bugs remaining. Each CVE carries one of four
credit bands: explicit_ai when a reporter string names an AI system or
method, ai_affiliated when it names only an AI-security employer, fuzz
when it names a fuzzer, and other otherwise. Because Mozilla's reporter
strings frequently name fuzzers, fuzzing is counted as its own band rather
than folded into the human or the AI side.

The impact heatmap cuts the per-CVE ledger by Mozilla's own rating, one count grid for all finders and one per credit band, each cell printing its count. Unrated is a missing rating, not a mild one; its row stays on the chart while the ledger holds such a row.

The counting-units chart plots the two units together. The gap between them is Mozilla's packaging: more products shipping the same fix multiply mentions without adding a distinct CVE.
The collection-wide cumulative index redraws this series as cumulative distinct CVEs to date:

The CSVs are built by fetch.py, which walks every
announce/*.yml file in Mozilla's repository, takes each advisory's date
and year from its announced field — normalizing the ordinal forms a few
advisories write, like "December 15th, 2025" — and skips advisories
announced after the repository's snapshot date, so a refetch reproduces the
committed window. It classifies each CVE's reporter string with the shared
markers in ../../lib/credits.py:
EXPLICIT_AI_METHOD matches a named system or method (Claude, GPT, Gemini,
Big Sleep, Mythos, and the bare words "LLM" and "agent");
AI_AFFILIATION matches an employer (Anthropic, OpenAI, Aisle, XBOW,
ZeroPath, AntAISecurityLab); FUZZ matches "fuzz" and is orthogonal to
both, so an AI-written harness can be true in two columns at once. Bare
"Claude" is accepted only from 2024 onward, so a human reporter with that
given name cannot create a historical AI credit. Pre-2016 advisories do not
list CVEs in this structure, which is where the series starts.
Bars need one band per segment, so a display precedence applies: method,
then affiliation, then fuzz, then none. Where one CVE carries different
reporter strings in different advisories, its signals are unioned across the
year before that precedence is applied. The annual CSV keeps the
mention-level columns (total, ai_attributed, fuzz_attributed,
other_attributed) beside the distinct-CVE ones, so the older unit remains
auditable.
firefox-cves.csv is the ledger the aggregates summarize: one row per
distinct CVE per year, carrying its earliest announcement date and quarter,
the most severe impact any of its mentions carries, its credit band and its
verbatim reporter strings. firefox-by-quarter.csv sums it by quarter and
band; rows with no parseable announcement date appear in the annual counts
but not in any quarter, and the main and cumulative charts state that
remainder.
figure.py draws stacked quarterly bars from
firefox-by-quarter.csv: other in blue, fuzz in amber, ai_affiliated
in pale red and explicit_ai in full red, with the partial_quarter bar
outlined. The two red bands are one colour family in two strengths because
they are two grades of evidence, not two kinds of finder. January 2026
onward is shaded, as in every figure here. The same script draws the impact
heatmap from the per-CVE ledger — shading scaled within each panel — and the
counting-units chart, kept as a separate figure because by 2026 mentions run
more than three times distinct CVEs and sharing an axis would flatten the
bars. check.py recomputes the fact lines above and fails when
the ledger, the quarterly sums and the annual bands stop agreeing.
impact where a CVE has no rating of its own, and a CVE
mentioned at several impacts keeps the most severe.Of the 37 AI-marked distinct CVEs in 2026, 31 are credited to a single
seven-person team using Claude; the credit string is identical on all 31
rows of firefox-ai-cves.csv:
"Evyatar Ben Asher, Keane Lucas, Nicholas Carlini, Newton Cheng, Daniel Freeman, Alex Gaynor, and Joel Weinberger using Claude from Anthropic" — Mozilla advisory reporter string for CVE-2026-2763 and 30 further CVEs, vendored in
firefox-ai-cves.csv, read 2026-08-14
Those 31 CVEs are roughly 9% of everything Firefox disclosed in 2026 through 2026-08-04. The remaining 6 AI-marked CVEs of 2026, with credit strings quoted from the same file as read 2026-08-14: 3 credit "Amy Burnett of OpenAI", 1 credits "Artur Cygan of Trail of Bits in partnership with OpenAI", 1 credits "OpenAI Preparedness, Bill Demirkapi" — all affiliation credits naming no method — and 1 carries the method-naming credit "Claude, Kai Engert" (CVE-2026-14899).
The single AI-marked CVE of 2025 is CVE-2025-13016, whose reporter strings
are "Aisle Research | Igor Morgenstern" in the vendored ledger — an
affiliation with no method stated. No reporter string carries an AI marker
before 2025, as of the 2026-08-04 snapshot. Alex Gaynor also appears in
OpenSSL's finder table (../cyber-openssl/)
[@anthropicmythos2026; @aisle2026].