Four independent reviews of the first draft of this reporting found that it overstated remediation, understated how much of the backlog was never applicable, and contained a disclosure leak the stated rule had not anticipated. What lands here is the corrected version. The reconciliation is the substantive artifact. It audits every finding the CVE-scanning pipeline has tracked against what the project actually shipped, because the pipeline has no write-back from this repository and so has never marked anything fixed. Findings: remediation did happen and is invisible to the tracker, concentrated in one wave in June 2026 rather than the steady stream an earlier draft claimed; 57% of the backlog was never applicable or cannot be assessed, the largest block being packages that contain no executable vulnerable code, chiefly kernel headers, since a container never provides a running kernel; reachable exposure in a stock install is an estimated 2-5% of the tracker; four component bumps are available upstream and not yet taken; and the pipeline itself has seven defects, including deduplication by CVE identifier alone and a broken attribution step that left 16% of findings unattributable. The monthly reports are cut back to per-month facts. Remediation is no longer attributed to individual months: crossing a severity-banded count of still-open findings with one month's component bumps, which anyone can enumerate from the commit log, narrows the search for unpatched exposure more than a bare count does. An earlier draft did exactly that while refusing to publish bare counts on disclosure grounds. The triage-latency figure is also gone, because 494 of 495 decisions were recorded in a single bulk pass and a per-finding latency cannot be recovered from a closing timestamp. Two process-tracking issues that the pipeline's severity filter should have excluded are no longer counted as findings, so the total is 825 rather than 827. The disclosure rule is revised in two directions, both more open: findings with no upstream fix will be named with mitigation guidance, since there is nothing to wait for and a mitigation is then the only available control; and the generator's guard now covers every advisory namespace rather than CVE alone, refuses to emit any file if any file would leak, and takes released evidence rather than a stale tracker label as its source of truth. SECURITY.md, the self-assessment and the GTR are brought into line: all three previously described this reporting as unpublishable, and the GTR refused on principle the counts the reports print. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Timur Tukaev <timur.tukaev@aenix.io>
Monthly security reports
Public reporting on vulnerability handling in the Cozystack project, generated from the tracked findings of the organization-wide CVE-scanning pipeline described in SECURITY.md.
Start with the backlog reconciliation. The monthly reports state what happened in a month, counted from the pipeline's own records. The pipeline has no write-back from the main repository, so it has never marked a finding as fixed and its outstanding counts overstate real exposure. The reconciliation establishes what was actually remediated, how much of the backlog was never applicable, and what is defective in the tooling. The monthly figures are not interpretable without it.
| Document | Covers |
|---|---|
| Backlog reconciliation | Every finding since the pipeline started, audited against what shipped. As of 2026-08-11 |
| August 2026 | Incomplete; data cut off 2026-08-10 |
| July 2026 | |
| June 2026 | |
| May 2026 | |
| April 2026 | First month; an initial load rather than a discovery rate |
What these reports contain
Findings are reported as counts by severity. An individual finding is named once its fix is merged and released — both such findings to date appear in the reconciliation and in the month they shipped.
Two deliberate exceptions to that reticence, both arrived at by reviewing the rule rather than applying it mechanically. Findings with no upstream fix will be named, with mitigation guidance, because there is nothing to wait for and silence serves nobody: an adopter needs to know when a mitigation is the only available control. And remediation is not attributed to individual months, because a count of still-open findings crossed with one month's list of component bumps — which anybody can enumerate from the commit log — narrows the search for unpatched exposure further than a bare count does.
What stays embargoed is narrow: findings where Cozystack's own packaging, defaults or integration logic introduces or worsens the exposure. There the project is the only source, and the process is the coordinated disclosure in SECURITY.md.
Scope of the counts
The counts cover findings from the pipeline, which scans every non-fork, non-archived repository in the cozystack organization — not this repository alone. They are filtered to what the pipeline treats as actionable: development-and-build-only dependencies, findings whose upstream has had no fix for over a year, findings already carrying a triage decision, and findings with no severity assigned are excluded before a finding is tracked. Two of those filters do not work as documented, which the reconciliation records.
Vulnerabilities reported privately against Cozystack's own code, packaging, defaults or integration logic follow the separate process in SECURITY.md, with its own response targets, and are disclosed through GitHub Security Advisories rather than here.
Provenance and its limits
These figures are self-attested. The tracker is private, because it holds per-finding detail for exposure that is not yet fixed, so a reader cannot currently reproduce the counts. Publishing the pipeline's policy documents and scanning scripts — which contain no finding data — so that the method can be audited independently of the numbers is outstanding work. Until that lands, treat the numbers as a project statement rather than as verified evidence.