<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Italo Armenti</title>
    <description>The latest articles on DEV Community by Italo Armenti (@italo_armenti_17706d868d5).</description>
    <link>https://dev.to/italo_armenti_17706d868d5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4211192%2Fd7cc2fcc-0d0a-442b-969e-ce2e5ea302c0.jpg</url>
      <title>DEV Community: Italo Armenti</title>
      <link>https://dev.to/italo_armenti_17706d868d5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/italo_armenti_17706d868d5"/>
    <language>en</language>
    <item>
      <title>Compile a dated security-fix record from GitHub history with fixdossier</title>
      <dc:creator>Italo Armenti</dc:creator>
      <pubDate>Tue, 27 Oct 2026 15:42:26 +0000</pubDate>
      <link>https://dev.to/italo_armenti_17706d868d5/compile-a-dated-security-fix-record-from-github-history-with-fixdossier-29j8</link>
      <guid>https://dev.to/italo_armenti_17706d868d5/compile-a-dated-security-fix-record-from-github-history-with-fixdossier-29j8</guid>
      <description>&lt;p&gt;Under the revised &lt;strong&gt;EU Product Liability Directive (Directive (EU) 2024/2853, applicable December 9, 2026)&lt;/strong&gt;, software is explicitly covered as a product, national courts can order disclosure of relevant technical evidence in a dispute (Art. 9), and presumptions of defectiveness can apply if that evidence is not produced (Art. 10). Alongside the &lt;strong&gt;EU Cyber Resilience Act (Regulation (EU) 2024/2847)&lt;/strong&gt;—which requires manufacturers to publish a clear security support period and maintain documented vulnerability handling—engineering teams need a dated, verifiable record of when each vulnerability was fixed, which release shipped the patch, and when security support ends for each release.&lt;/p&gt;

&lt;p&gt;For most repositories, that raw data already exists in GitHub—scattered across GitHub Releases, tags, published GitHub Security Advisories (GHSAs), merged Dependabot/Renovate pull requests, and commit history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/itulo/fixdossier" rel="noopener noreferrer"&gt;fixdossier&lt;/a&gt;&lt;/strong&gt; is an open-source (MIT), zero-dependency GitHub Action that compiles a dated security-fix record (&lt;code&gt;SECURITY-RECORD.md&lt;/code&gt; + &lt;code&gt;security-record.json&lt;/code&gt;) and a per-release support policy (&lt;code&gt;SUPPORT.md&lt;/code&gt;) directly from your repository history.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository (MIT):&lt;/strong&gt; &lt;a href="https://github.com/itulo/fixdossier" rel="noopener noreferrer"&gt;https://github.com/itulo/fixdossier&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs &amp;amp; Real Sample Outputs (&lt;code&gt;axios/axios&lt;/code&gt;, &lt;code&gt;fastify/fastify&lt;/code&gt;, &lt;code&gt;vitejs/vite&lt;/code&gt;):&lt;/strong&gt; &lt;a href="https://fixdossier.dev" rel="noopener noreferrer"&gt;https://fixdossier.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Start: GitHub Actions Workflow
&lt;/h2&gt;

&lt;p&gt;Drop &lt;code&gt;.github/workflows/security-record.yml&lt;/code&gt; into your repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;security-record&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;published&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;6&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1'&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;        &lt;span class="c1"&gt;# needed for mode: commit (mode: artifact needs only contents: read)&lt;/span&gt;
  &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
  &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;        &lt;span class="c1"&gt;# optional: only needed when pro_upload: 'true'&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;record&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;itulo/fixdossier@v0&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;support_period_months&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24&lt;/span&gt;
          &lt;span class="na"&gt;eol_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2030-12-31'&lt;/span&gt;
          &lt;span class="na"&gt;contact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;security@example.com'&lt;/span&gt;
          &lt;span class="na"&gt;output_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.'&lt;/span&gt;          &lt;span class="c1"&gt;# default: '.'&lt;/span&gt;
          &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;commit'&lt;/span&gt;           &lt;span class="c1"&gt;# 'artifact' (default) | 'commit' | 'none'&lt;/span&gt;
          &lt;span class="c1"&gt;# pro_upload: 'true'     # optional: upload signed snapshot via GitHub Actions OIDC&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the standard &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;, &lt;code&gt;fixdossier&lt;/code&gt; queries the GitHub API and writes three files to &lt;code&gt;output_dir&lt;/code&gt; (default &lt;code&gt;.&lt;/code&gt;), which are either uploaded as a workflow build artifact (&lt;code&gt;mode: 'artifact'&lt;/code&gt;, default) or committed directly to your branch (&lt;code&gt;mode: 'commit'&lt;/code&gt;):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SECURITY-RECORD.md&lt;/code&gt;&lt;/strong&gt; — A dated security-fix log mapped to releases, bot dependency updates, release timeline, and any API coverage or permission gaps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;security-record.json&lt;/code&gt;&lt;/strong&gt; — Machine-readable output (&lt;code&gt;schema: fixdossier/v1&lt;/code&gt;) for downstream automation or review tooling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SUPPORT.md&lt;/code&gt;&lt;/strong&gt; — A standalone security support policy table computed from &lt;code&gt;support_period_months&lt;/code&gt;, &lt;code&gt;eol_date&lt;/code&gt;, and &lt;code&gt;contact&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What the generated files look like
&lt;/h2&gt;

&lt;p&gt;Below is a real excerpt generated by running &lt;code&gt;fixdossier&lt;/code&gt; against &lt;strong&gt;&lt;code&gt;axios/axios&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;SECURITY-RECORD.md&lt;/code&gt; and &lt;code&gt;SUPPORT.md&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Security record — axios/axios&lt;/span&gt;

&lt;span class="ge"&gt;_Generated 2026-10-12T13:36:53.690Z by fixdossier from GitHub data (releases, tags, security advisories, merged Dependabot/Renovate PRs, commit messages). Automatically compiled; review before relying on it. Not legal advice._&lt;/span&gt;

&lt;span class="gu"&gt;## Summary&lt;/span&gt;

| Item | Count |
|---|---|
| Published GitHub security advisories | 51 |
| Commits that look like security fixes | 2 |
| Merged bot dependency updates (security-flagged) | 43 (9) |
| Releases | 125 |
| Fixes not yet in a release | 0 |

&lt;span class="gu"&gt;## Security fixes (newest first)&lt;/span&gt;

| Date | Type | IDs | Fix | Shipped in | Release date | How mapped |
|---|---|---|---|---|---|---|
| 2026-09-16 | advisory (high) | GHSA-m8m8-qj5v-23w3, CVE-2026-101905 | &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Node HTTP adapter prototype-pollution gadget allows request socket hijack via inherited createConnection&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/axios/axios/security/advisories/GHSA-m8m8-qj5v-23w3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; | v1.20.0 | 2026-08-24 | advisory patched_versions |
| 2026-09-16 | advisory (high) | GHSA-r4gj-5m52-g5wh, CVE-2026-101907 | &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;maxRedirects: 0 is not enforced by the fetch adapter, allowing redirect-based SSRF&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/axios/axios/security/advisories/GHSA-r4gj-5m52-g5wh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; | v1.20.0 | 2026-08-24 | advisory patched_versions |
| 2026-06-22 | commit | — | &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;chore(deps): bump form-data floor to ^4.0.6 to patch CRLF injection (#11028)&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/axios/axios/commit/5d2af0485354580dce4b6b77890b84cadc0ead0e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; | v1.19.0 | 2026-07-26 | date heuristic (first release on/after commit) |
| 2026-05-24 | commit | CVE-2026-42264, GHSA-72mg-mc2j-cwf6 | &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;fix: guard socketPath with own() to prevent prototype pollution SSRF (#10901)&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/axios/axios/commit/140a17944a6ff175611597c874e218ad6c2afd1c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; | v1.17.0 | 2026-06-03 | date heuristic (first release on/after commit) |

&lt;span class="gu"&gt;## Gaps in this record&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; pull requests: stopped after 2 pages (raise max_pages for full history)
&lt;span class="p"&gt;-&lt;/span&gt; commits: stopped after 2 pages (raise max_pages for full history)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the corresponding &lt;strong&gt;&lt;code&gt;SUPPORT.md&lt;/code&gt;&lt;/strong&gt; excerpt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Support policy — axios/axios&lt;/span&gt;

Security updates are provided for each release for &lt;span class="gs"&gt;**24 months**&lt;/span&gt; from its release date, and in any case not after &lt;span class="gs"&gt;**2030-12-31**&lt;/span&gt; (end of life).

Report vulnerabilities to: security@example.com. See SECURITY-RECORD.md for the dated history of security fixes.

| Release | Released | Security support until | Status |
|---|---|---|---|
| v0.34.0 | 2026-09-13 | 2028-09-13 | supported |
| v1.20.0 | 2026-08-24 | 2028-08-24 | supported |
| v1.19.0 | 2026-07-26 | 2028-07-26 | supported |
| v1.7.9  | 2024-12-04 | 2026-12-04 | supported |
| v1.7.2  | 2024-05-21 | 2026-05-21 | ended |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How Release Mapping Works (and Why Explicit Heuristics Matter)
&lt;/h2&gt;

&lt;p&gt;Mapping a security fix to the release that shipped it is harder than running &lt;code&gt;git log --grep=CVE&lt;/code&gt;. Backports, maintenance branches, squash merges, and silent patches routinely trip up naive scripts.&lt;/p&gt;

&lt;p&gt;Instead of pretending every row is 100% certain, &lt;code&gt;fixdossier&lt;/code&gt; records the exact &lt;strong&gt;How mapped&lt;/strong&gt; method on every row:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;advisory patched_versions&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;(Highest confidence)&lt;/em&gt; — Matched directly from a published repository GitHub Security Advisory (&lt;code&gt;GHSA-...&lt;/code&gt;) patched version string to its corresponding release tag (&lt;code&gt;1.20.0&lt;/code&gt; ↔ &lt;code&gt;v1.20.0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;tag commit match&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;(High confidence)&lt;/em&gt; — The commit or PR merge SHA matches a release tag's commit SHA directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;date heuristic (first release on/after commit)&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;(Requires human review)&lt;/em&gt; — Matched to the earliest stable release published on or after the fix timestamp. On repositories that backport fixes to older major branches, a date heuristic can point to the wrong branch's release.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If an API endpoint returns &lt;code&gt;401&lt;/code&gt;/&lt;code&gt;403&lt;/code&gt;/&lt;code&gt;404&lt;/code&gt; or hits pagination limits (&lt;code&gt;max_pages&lt;/code&gt;), &lt;code&gt;fixdossier&lt;/code&gt; does not fail your build by default (unless &lt;code&gt;fail_on_gaps: 'true'&lt;/code&gt;); instead, it logs the missing coverage explicitly under &lt;strong&gt;&lt;code&gt;Gaps in this record&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Full unedited sample outputs from &lt;strong&gt;&lt;code&gt;axios/axios&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;fastify/fastify&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;vitejs/vite&lt;/code&gt;&lt;/strong&gt; are available in &lt;a href="https://github.com/itulo/fixdossier/tree/main/examples" rel="noopener noreferrer"&gt;&lt;code&gt;examples/&lt;/code&gt;&lt;/a&gt; and at &lt;strong&gt;&lt;a href="https://fixdossier.dev/#sample" rel="noopener noreferrer"&gt;fixdossier.dev&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hosted Snapshots &amp;amp; Signed Evidence Packs
&lt;/h2&gt;

&lt;p&gt;Need immutable hosted snapshots, a human review queue for heuristic matches, and signed PDF/ZIP evidence packs? &lt;strong&gt;&lt;a href="https://app.fixdossier.dev" rel="noopener noreferrer"&gt;fixdossier Pro&lt;/a&gt;&lt;/strong&gt; connects directly to the Action via GitHub OIDC (&lt;code&gt;pro_upload: 'true'&lt;/code&gt;) — try the read-only &lt;strong&gt;&lt;a href="https://app.fixdossier.dev/demo" rel="noopener noreferrer"&gt;interactive demo&lt;/a&gt;&lt;/strong&gt; (Founding Licence: €69 one-time for 1 GitHub org, up to 3 repos and 5 reviewers, for as long as the service runs; 14-day EU refund policy).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: fixdossier is an engineering tool for evidence collection and review support, not legal advice and not a compliance certificate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Feedback, issues, and PRs are welcome at &lt;strong&gt;&lt;a href="https://github.com/itulo/fixdossier" rel="noopener noreferrer"&gt;github.com/itulo/fixdossier&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>devops</category>
      <category>security</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
