Version: 1.0.0 Created: 2025-12-15 (W18.1) Purpose: Incident response procedures for failed or problematic releases
| Scenario | Action | Command |
|---|---|---|
| Bad crates.io release | Yank version | cargo yank --version X.Y.Z |
| Bad npm release | Deprecate | npm deprecate edgevec@X.Y.Z "reason" |
| CI broken after merge | Revert commit | git revert <sha> |
| Critical security bug | Yank + patch | Yank -> Fix -> Re-release |
When an issue is discovered post-release:
-
Identify severity
- CRITICAL: Security vulnerability, data loss, crash on all platforms
- HIGH: Build failure, crash on specific platforms, major functionality broken
- MEDIUM: Performance regression, minor functionality broken
- LOW: Documentation error, cosmetic issue
-
Identify affected versions
- Which version(s) are affected?
- Was this introduced in the latest release or is it a regression?
-
Check distribution channels
- crates.io:
cargo search edgevec - npm:
npm view edgevec versions - GitHub releases: Check release page
- crates.io:
For CRITICAL or HIGH severity issues, immediately contain the release.
Yanking prevents new installations but allows existing Cargo.lock files to continue working.
# Yank the problematic version
cargo yank --version X.Y.Z
# Verify it's yanked
cargo search edgevec
# Should show previous version as latestWhen to yank:
- Security vulnerability
- Build failure (users can't compile)
- Data corruption bug
- Crash on startup
When NOT to yank:
- Performance regression (users can choose to downgrade)
- Documentation error
- Missing feature
NPM doesn't support yanking, but we can deprecate.
# Deprecate the problematic version
npm deprecate edgevec@X.Y.Z "Critical issue discovered. Use X.Y.W instead."
# Verify deprecation
npm view edgevec
# Should show deprecation warningIf the issue is in the main branch:
# Identify the problematic commit
git log --oneline -10
# Revert the commit
git revert <commit-sha>
# Push the revert
git push origin mainNotify users about the issue and resolution.
- Go to GitHub Releases
- Edit the problematic release
- Add warning banner at top:
> **WARNING:** This release has been yanked due to [brief issue description].
> Please use version X.Y.W instead.Create an issue with the [INCIDENT] tag:
## [INCIDENT] vX.Y.Z Release Issue
### Summary
Brief description of the issue.
### Severity
CRITICAL / HIGH / MEDIUM / LOW
### Affected Versions
- vX.Y.Z
### Impact
What users might experience.
### Resolution
- [ ] Version yanked from crates.io
- [ ] Version deprecated on npm
- [ ] Hotfix released as vX.Y.W
- [ ] Communication sent
### Timeline
- YYYY-MM-DD HH:MM: Issue discovered
- YYYY-MM-DD HH:MM: Version yanked
- YYYY-MM-DD HH:MM: Hotfix releasedAdd incident note to CHANGELOG.md:
## [X.Y.Z] - YANKED
**This version has been yanked due to [issue]. Use vX.Y.W instead.**# From main (with revert already applied)
git checkout -b hotfix/vX.Y.W
# Or from previous stable tag
git checkout -b hotfix/vX.Y.W vX.Y.Z-1- Implement fix with tests
- Add regression test for the specific issue
- Update CHANGELOG with fix description
Run FULL pre-release validation:
./scripts/pre-release-check.shExtra validation for security issues:
- Run
cargo audit - Review all unsafe blocks
- Run fuzzing for affected code path
Follow standard release process (see RELEASE_CHECKLIST.md):
- Bump version to X.Y.W
- Push release branch
- Wait for CI green
- Merge to main
- Tag and push
- Publish to crates.io and npm
If the original version was only yanked as a precaution and the fix is confirmed:
# Unyank on crates.io (if appropriate)
cargo yank --undo --version X.Y.Z
# Note: npm deprecation cannot be undone, only updated
npm deprecate edgevec@X.Y.Z ""Only unyank if:
- The issue was a false alarm
- The version is safe to use
- There's a good reason for users to use this specific version
Sometimes a release succeeds on one platform but fails on another. Handle these cases carefully:
# Option 1: Yank crates.io and retry both
cargo yank --version X.Y.Z
# Fix npm issue, then re-release as X.Y.Z+1
# Option 2: Continue with npm only (if Rust crate is valid)
cd pkg
npm publish
# Document that npm release was delayedDecision guide:
- If the Rust crate works correctly → Option 2 (publish npm separately)
- If the Rust crate has issues → Option 1 (yank and retry)
# Option 1: Deprecate npm and retry both
npm deprecate edgevec@X.Y.Z "crates.io release failed, use X.Y.Z+1"
# Fix crates.io issue, re-release both as X.Y.Z+1
# Option 2: Continue with crates.io only (if npm package is valid)
cargo publish
# Document that crates.io release was delayedDecision guide:
- If the npm package works correctly → Option 2 (publish crates separately)
- If the npm package has issues → Option 1 (deprecate and retry)
To avoid partial rollback scenarios:
- Always run
./scripts/pre-release-check.shfirst - Publish crates.io BEFORE npm (Rust is the source of truth)
- If crates.io fails, stop immediately
- Only publish to npm after crates.io succeeds
| Scenario | Yank? | Notes |
|---|---|---|
| Security vulnerability | YES | Always yank, even if patch exists |
| Build failure | YES | Prevents installation failures |
| Data corruption bug | YES | Protect user data |
| Crash on startup | YES | Unusable version |
| Crash under specific conditions | MAYBE | Consider if workaround exists |
| Performance regression | NO | Users can choose to downgrade |
| Missing feature | NO | Not a safety issue |
| Documentation error | NO | Not a runtime issue |
| Wrong version number | MAYBE | Only if causes dependency issues |
- Security vulnerability (RCE, data exposure, privilege escalation)
- Data loss or corruption
- Crash on all platforms/configurations
- Breaks all users
Response time: Immediate (< 1 hour) Actions: Yank immediately, communicate within 30 minutes
- Build failure (users can't compile)
- Crash on major platform (e.g., all Windows users)
- Major functionality completely broken
- Significant security issue (DoS, limited exposure)
Response time: < 4 hours Actions: Yank, hotfix within 24 hours
- Performance regression > 2x
- Minor functionality broken
- Crash under specific (rare) conditions
- Documentation significantly wrong
Response time: < 24 hours Actions: May not need to yank, hotfix within 1 week
- Cosmetic issues
- Minor documentation errors
- Performance regression < 2x
- Non-critical warnings
Response time: Next regular release Actions: No immediate action needed, fix in next version
Symptoms: CI fails with SIGILL (illegal instruction)
Root cause: Compiled with -C target-cpu=native but CI runners have older CPUs
Resolution:
- Don't yank (users with compatible CPUs are fine)
- Hotfix with
-C target-cpu=x86-64-v2 - Add CI simulation to release checklist
Symptoms: CI times out after 40+ minutes
Root cause: Too many proptest cases (36,600 instead of 32)
Resolution:
- Don't yank (not a safety issue)
- Hotfix with correct
PROPTEST_CASES - Add environment variable checks to release checklist
Symptoms: CVE reported or vulnerability discovered
Resolution:
- IMMEDIATELY yank affected versions
- Create private hotfix branch
- Fix vulnerability
- Release hotfix BEFORE public disclosure (if possible)
- Coordinate disclosure with security researchers
Symptoms: Users report compilation failures after upgrade
Resolution:
- Do NOT yank (semver violation is not a safety issue)
- Release hotfix with API restored or migration guide
- Plan proper deprecation for next minor version
After every incident, conduct a brief review:
- What happened? (Timeline of events)
- Why did it happen? (Root cause analysis)
- How was it detected? (User report, CI failure, monitoring)
- How can we prevent it? (Process improvement, automation)
Document in docs/incidents/YYYY-MM-DD_vX.Y.Z_incident.md.
| Role | Contact |
|---|---|
| Primary Maintainer | GitHub Issues: https://github.com/edgevec/edgevec/issues |
| Security Issues | Open a private security advisory on GitHub |
| crates.io Support | https://crates.io/support |
| npm Support | https://www.npmjs.com/support |
Note: For security vulnerabilities, use GitHub's private security advisory feature rather than public issues. Go to Security → Advisories → New draft advisory.
| Version | Date | Change |
|---|---|---|
| 1.0.0 | 2025-12-15 | Initial release (W18.1) |
| 1.1.0 | 2025-12-15 | Added partial rollback scenarios, fixed contacts (hostile review fixes) |
Related Documents:
- RELEASE_CHECKLIST.md
- SECURITY.md (if exists)
- CONTRIBUTING.md