Triage
Acknowledge receipt
Reports arrive through GitHub private vulnerability reporting and appear under repo → Security → Advisories. Reply in the advisory thread on intake confirming the report was received, with a confidentiality reminder.
Do this first, before reproduction and scoring, so the response is never delayed by triage depth.
Do this first, before reproduction and scoring, so the response is never delayed by triage depth.
Reproduce
Reproduce locally before scoring. If it doesn’t reproduce, ask the reporter for clarification.
Check scope
Compare against the Out of scope list in SECURITY.md. If out of scope, reply with the reason and close.
Score with CVSS 4.0
Use the FIRST calculator. Record the score and vector.
Buckets: 0.1–3.9 low, 4.0–6.9 medium, 7.0–8.9 high, 9.0–10 critical.
Buckets: 0.1–3.9 low, 4.0–6.9 medium, 7.0–8.9 high, 9.0–10 critical.
Private fix
Work from the advisory
A report submitted through private vulnerability reporting already appears as a draft advisory under repo → Security → Advisories; open it.
For an internally discovered issue with no external reporter, create one with New draft security advisory.
Set affected versions, severity, and a neutral summary.
Keep it as a draft. You’ll fill the rest of the metadata in Draft advisory later.
For an internally discovered issue with no external reporter, create one with New draft security advisory.
Set affected versions, severity, and a neutral summary.
Keep it as a draft. You’ll fill the rest of the metadata in Draft advisory later.
Use a temporary private fork
From the draft advisory, click Start a temporary private fork.
Fix on a
Fix on a
security/<ghsa-id> branch inside it.Draft advisory
Request CVE ID (optional)
In the draft advisory: CVE ID → Request CVE. GitHub assigns one within ~1 business day.
Fill the metadata
Fields must match the in-app
SecurityAdvisory shape: summary, description, severity, cvssScore, vulnerableVersionRange (e.g. < 0.71.1), patchedVersion. Use the advisory body template for the description.Patch release
Cut a hotfix branch
Follow the cloud-hotfix flow in Releases:
deploy/cloud/YYYY-MM-DD branch, then trigger continuous-delivery-cloud.yml with cloud-hotfix.Bump versions
Patch-bump root package.json. Bump
packages/core/shared if touched. If the fix has a migration, set release = '<patched-version>' per Database Migrations.Draft the changelog entry
Draft (don’t post yet) for docs/about/changelog.mdx:
Customer disclosure
7-day lead time before public publication. Patched version must already be on cloud production before sending.Public publication
Confirm the advisory reaches admins
Confirm the new advisory appears on the platform health page (
/platform/infrastructure/health). Source feeds cache for 15 minutes, so allow that delay before troubleshooting.Pending the security advisories panel reaching production. Until then, skip this step.
Post the changelog
Commit the changelog entry drafted in Patch release.
Postmortem
Required for high/critical, optional for medium, skip for low. Createdocs/handbook/engineering/postmortems/YYYY-MM-DD-<slug>.mdx using the existing structure (see 2026-03-19 Redis and delay overload).