Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Write a concrete rollback plan for a risky change (deploy, migration, feature-flag flip, config rollout) so the reverse is one command away — not an improvised debate at 2am. Use when asked to write a rollback plan, back-out plan, revert plan, or 'what if we need to undo this'. Produces a rollback plan with the signals that trigger it, exact reverse commands, verification steps, data-safety notes, and a communications template.
.claude/skills/mohitagw15856-rollback-plan/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 204% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 87% | 0% |
Turns "we'll roll back if it goes bad" into a plan somebody unfamiliar with the change can execute under pressure. The single job: make the reverse of the change knowable, verifiable, and boring.
Deliver the full plan even from a thin brief — infer and label assumptions (never invent service names, dashboard URLs, commit SHAs, or migration IDs). If a required input is missing, ask once, then move on with unknown — confirm before rollout placeholders.
Ask for (if not already provided), else label as unknown:
markdown# Rollback Plan — <change name> **Owner:** <name> · **Approver for rollback:** <name / role> · **Rollout window:** <YYYY-MM-DD HH:MM TZ> ## 1. The change (one paragraph) <what ships, where, how it's gated, expected impact> ## 2. Trigger conditions — roll back if ANY of these hold | Signal | Threshold | Window | Where to look | |---|---|---|---| | <metric / alert / user report> | <e.g. p99 > 400ms> | <e.g. 10 min sustained> | <dashboard link / logs query> | Also roll back on any P1/P2 incident opened against <service> during the window. ## 3. The reverse — exact steps, in order > Rehearse this in a lower environment before the change ships. The first time you run these under load should not be the real rollback. 1. **Announce** — post in `#<channel>` from the template in §7. 2. **Stop the rollout** — <feature-flag off / freeze the pipeline / halt canary>. - Command: `<exact command or console path>` - Verify: `<how to confirm it stopped, e.g. flag API returns "off", pipeline status = PAUSED>` 3. **Revert the code / config** — <exactly one action>. - Command: `<git revert <sha> && …>` or `<kubectl rollout undo deploy/<name>>` or `<terraform apply -target=…>` - Verify: <version endpoint, image tag, config checksum> 4. **Data reversal** — <one of>: - Reversible in place: run `<script / migration --down>`. - Forward-only (data was written under the new schema): <what stays, what gets quarantined, backfill / cleanup ticket to file>. - Not reversible: STOP — escalate to the approver; do not proceed without them. 5. **Drain / warm** — <e.g. flush caches, restart consumers, rewarm feature-flag SDKs>. 6. **Verify recovery** — the same signals in §2 must return to baseline within <N minutes>. ## 4. Data safety - **What new writes look like:** <schema/columns/values> - **Reversibility:** ✅ reversible in place · ⚠ forward-only (specify what's kept) · 🛑 destructive (never) - **PII / compliance touched:** <list, or "none"> - **Backups / snapshots to take before rollout:** <what, retention, restore command> ## 5. Verification checklist (post-rollback) - [ ] Trigger signals in §2 back within normal range for <window>. - [ ] No new P1/P2 opened in the <N> minutes after the reverse. - [ ] Downstream consumers (<list>) show green on their SLOs. - [ ] The feature-flag / migration / config surface reflects the old state (screenshot / checksum captured). ## 6. What we do NOT do on rollback - Do not delete data written during the rollout — quarantine it (see §4). - Do not silently mute alerts to "get clean" — that hides the very signals we need for §5. - Do not roll forward a "quick fix" before deciding rollback — one direction at a time. ## 7. Comms template > **Subject:** Rolling back <change name> (<yyyy-mm-dd hh:mm TZ>) > Triggered by <signal + value>. Reversing per plan; expected recovery <N> minutes. Impact so far: <one line>. Owner on the reverse: <name>. Next update in <N> minutes or on recovery. ## 8. Post-rollback follow-ups (file before you close the incident) - Root cause captured to <postmortem / incident>. - Ticket to re-attempt (or kill) the change, with what will be different. - Any data cleanup / backfill scheduled with an owner and date.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 45,002 | 22,626 | -50% | 1 | 1 | 0% | 6,180 | 5,049 | -18% | 0 | 0 | — |
case-02 | fail→fail | 40,247 | 25,219 | -37% | 1 | 1 | 0% | 6,097 | 5,528 | -9% | 0 | 0 | — |
case-03 | fail→pass | 30,520 | 21,200 | -31% | 1 | 1 | 0% | 5,133 | 5,619 | +9% | 0 | 0 | — |
case-04 | fail→fail | 14,841 | 20,455 | +38% | 1 | 1 | 0% | 2,668 | 4,489 | +68% | 0 | 0 | — |
case-05 | fail→fail | 19,982 | 24,592 | +23% | 1 | 1 | 0% | 2,814 | 5,139 | +83% | 0 | 0 | — |
case-06 | fail→fail | 27,237 | 33,768 | +24% | 1 | 1 | 0% | 4,007 | 5,889 | +47% | 0 | 0 | — |
case-07 | fail→pass | 14,512 | 13,874 | -4% | 1 | 1 | 0% | 1,375 | 4,175 | +204% | 0 | 0 | — |
case-08 | fail→pass | 15,319 | 23,546 | +54% | 1 | 1 | 0% | 2,650 | 5,447 | +106% | 0 | 0 | — |
case-09 | fail→fail | 27,000 | 18,346 | -32% | 1 | 1 | 0% | 2,360 | 4,335 | +84% | 0 | 0 | — |
case-10 | fail→pass | 23,460 | 20,961 | -11% | 1 | 1 | 0% | 2,759 | 4,409 | +60% | 0 | 0 | — |
case-11 | pass→pass | 15,611 | 19,367 | +24% | 1 | 1 | 0% | 2,676 | 5,006 | +87% | 0 | 0 | — |
case-12 | fail→fail | 22,317 | 17,036 | -24% | 1 | 1 | 0% | 3,131 | 5,011 | +60% | 0 | 0 | — |
case-13 | fail→pass | 24,013 | 27,683 | +15% | 1 | 1 | 0% | 2,563 | 4,789 | +87% | 0 | 0 | — |
case-14 | fail→pass | 18,360 | 22,899 | +25% | 1 | 1 | 0% | 2,362 | 4,355 | +84% | 0 | 0 | — |
case-15 | fail→fail | 17,075 | 25,922 | +52% | 1 | 1 | 0% | 1,891 | 4,556 | +141% | 0 | 0 | — |
case-16 | fail→pass | 11,641 | 24,376 | +109% | 1 | 1 | 0% | 1,938 | 4,677 | +141% | 0 | 0 | — |
case-17 | fail→pass | 25,460 | 16,144 | -37% | 1 | 1 | 0% | 2,908 | 4,790 | +65% | 0 | 0 | — |
case-18 | fail→fail | 20,945 | 23,630 | +13% | 1 | 1 | 0% | 2,663 | 4,476 | +68% | 0 | 0 | — |
case-19 | fail→pass | 14,252 | 28,057 | +97% | 1 | 1 | 0% | 2,404 | 4,925 | +105% | 0 | 0 | — |
case-20 | pass→pass | 24,481 | 27,155 | +11% | 1 | 1 | 0% | 3,187 | 4,666 | +46% | 0 | 0 | — |
case-21 | pass→fail | 13,461 | 28,752 | +114% | 1 | 1 | 0% | 1,726 | 5,842 | +238% | 0 | 0 | — |
case-22 | pass→pass | 15,212 | 15,946 | +5% | 1 | 1 | 0% | 1,581 | 3,314 | +110% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.