Skip to content

docs: replace the silent patch model with the monthly private patch cycle - #18

Merged
aljo242 merged 6 commits into
mainfrom
security/monthly-private-patch-cycle
Oct 1, 2026
Merged

aljo242 merged 6 commits into
mainfrom
security/monthly-private-patch-cycle

Conversation

@aljo242

@aljo242 aljo242 commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Replaces the silent patch model with the monthly private patch cycle. Every severity is patched privately, published with a full GHSA at the start of the next month.

Consequences for leaking private patch source are left unstated, pending the legal call on NDAs.

@aljo242
aljo242 force-pushed the security/monthly-private-patch-cycle branch from c44c34e to f3fc9ea Compare September 30, 2026 20:53
@aljo242
aljo242 marked this pull request as ready for review October 1, 2026 14:59
@aljo242
aljo242 requested a review from a team as a code owner October 1, 2026 14:59
@greptile-apps

greptile-apps Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

[Low risk] Updates security policy documentation.

The PR should not merge until downstream builds have a defined path away from private repositories before those repositories are deleted.

Findings

  1. P1 Private hotfix references disappear ▶
  2. P2 Vendored builds lack guidance ▶

Summary

Replaces severity-dependent silent patching with monthly private repositories, hotfix tags for downstream teams, and full advisories at the following public release.

  • Defines private distribution, notification, freeze, and critical-incident exceptions.
  • Needs a transition for downstream references before monthly repositories are deleted.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Report[Report or internal finding] --> Private[Patch in monthly private repository]
  Private --> Hotfix[Private hotfix tag for downstream builds]
  Private --> Freeze[Last-week freeze]
  Freeze --> Public[Public patch release and GHSA]
  Public --> Delete[Delete monthly private repository]
Loading

Reviews (1) · Last reviewed commit: "docs: fix the ten-day claim and state th..."

Comment thread SECURITY.md Outdated
Comment thread SECURITY.md Outdated
…ycle

Brings SECURITY.md in line with the agreed patching policy change. Every severity is
patched privately in that month's private repository, shared with KYC'd
downstream teams, and published with a full GHSA at the start of the next month.

Drops the severity-based disclosure table, since severity no longer decides how
or when a fix is published. Active exploitation still leaves the cycle and is
handled as an incident.
Criticals go out on the repository's security mailing list; everything else is
found by watching the private repo's -hotfix tags. This is what we already told
Cronos when they asked on 2026-09-17, but the policy did not say it.
Drops the aside explaining why lower severities are not emailed, and the
colloquial phrasing, to match the rest of the document.
The old wording attributed the ten days to moving a late critical into the next
month's repository. Moving it actually pushes the public release out by a month;
the ten days is the floor the three-day rule plus the freeze guarantees for any
critical. Reworded so a chain planning around it gets the right number.

Also states what the RFC is explicit about and the policy was not: the cycle is
the same whether a vulnerability arrives by bug bounty, internal audit, or
direct disclosure.
The rule read "not into a downstream codebase", which bans possession and
collides with the replace-directive guidance two paragraphs down: a team that
vendors would copy patch source into its own tree by following the policy. The
rule is about distribution. A team with access can build however it needs to,
vendoring included, and must not pass the source on to anyone else before the
patch is public.

Also says what happens to a replace directive after the private repository is
deleted, which the policy described but never followed through on.
…ease

Deleting it the moment its patches went public broke any later rebuild of the
binary a team shipped from it: a validator building from source, CI on a release
branch, a reproducible-build check. A two-week window gives teams time to move
their replace directives to the public tags.

The window holds nothing back, since every patch in a frozen repository is
public before it starts. Re-invitation for the next month's repositories runs on
its own schedule, so the liveness check on the collaborator list is unaffected.
@aljo242
aljo242 force-pushed the security/monthly-private-patch-cycle branch from d0f21e4 to 01e5f7e Compare October 1, 2026 17:12
@aljo242
aljo242 merged commit bf79193 into main Oct 1, 2026
1 check passed
@aljo242
aljo242 deleted the security/monthly-private-patch-cycle branch October 1, 2026 17:27
Comment thread SECURITY.md
### Disclosure Timeline
The private repositories are frozen for the last week of each month. During the
freeze no further patches are merged into that month's repositories. They are
merged into the next month's instead, which is why each month's set is created

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

which is why each month's set is created seven days early

this looks like the first spot we reference this, but it reads like people already are aware of this, which reads awkwardly

Comment thread SECURITY.md
month's repositories is granted by fresh invitation on its own schedule, so the
retention does not extend anyone's access.

A vulnerability reported on August 12 and patched on August 15 therefore reaches

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A vulnerability reported on August 12 and patched on August 15 therefore reaches
As an example, a vulnerability reported on August 12 and patched on August 15 therefore reaches

I was slightly confused when reading this paragraph as I didnt realize it was an example at first

aljo242 added a commit that referenced this pull request Oct 1, 2026
The seven-days-early creation of the next month's repositories was written as a
callback, but that sentence is the first time the policy mentions it. States it
as new information and says what it is for.

Marks the August walkthrough as an example, which was not obvious on a first
read.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants