downgrade-analysis

$npx mdskill add t0ddc3by/claude-for-customer-success/downgrade-analysis

Analyzes contract downgrade requests and produces negotiation strategy.

  • Solves analysis of customer contraction requests for CSM/AM negotiation.
  • Depends on customer contract data and downgrade request details.
  • Produces value chain failure map and counter-proposal inputs.
  • Delivers recommended response strategy and escalation brief.

SKILL.md

.github/skills/downgrade-analysisView on GitHub ↗
---
name: downgrade-analysis
description: "Analyzes customer contract downgrade requests (contraction only) and produces a value chain failure map, counter-proposal inputs, and recommended response strategy for CSM/AM negotiation. Scoped to contraction scenarios — full cancellation redirected to renewals:churn-rca."
version: "1.0.0"
author: [email protected]
tags: [renewals, downgrade, contraction, churn-prevention, customer-success]
deployment_target: plugin
---

# /renewals:downgrade-analysis [VALIDATED]

## Overview

**Use when:**
- A customer has requested a contract reduction, tier downgrade, seat reduction, module removal, or ARR contraction
- A CSM or AM needs structured analysis of the downgrade driver before entering negotiation
- Preparing a counter-proposal or escalation brief for a renewal at risk of contracting

**Do NOT use for:**
- Full contract cancellations, terminations, or "cancel everything" requests → use `renewals:churn-rca`
- Expansion or upsell analysis
- Renewal risk scoring without a specific downgrade request in hand
- Post-mortem analysis after a downgrade has already closed

**Typical activation:**
> "Run downgrade analysis for Acme Corp — they want to cut from 500 to 200 seats, saying the team shrank."
> "Analyze this downgrade request: customer says they're switching to a cheaper tool."
> `/renewals:downgrade-analysis` — then provide operation inputs when prompted

**Churn boundary:**
If the request contains signals of full contract cancellation ("cancel everything," "terminate contract," "no longer proceeding," "shut down the account"), this skill redirects to `renewals:churn-rca`. Partial reduction of any kind — seats, modules, tier, spend — is in scope.

---

## Use When
- A customer has requested a contract reduction, tier downgrade, seat reduction, module removal, or ARR contraction
- A CSM or AM needs structured analysis of the downgrade driver before entering negotiation
- Preparing a counter-proposal or escalation brief for a renewal at risk of contracting

## Do NOT Use For
- Full contract cancellations, terminations, or "cancel everything" requests → use `renewals:churn-rca`
- Expansion or upsell analysis
- Renewal risk scoring without a specific downgrade request in hand
- Post-mortem analysis after a downgrade has already closed

## Typical Activation
> "Run downgrade analysis for Acme Corp — they want to cut from 500 to 200 seats, saying the team shrank."
> "Analyze this downgrade request: customer says they're switching to a cheaper tool."
> `/renewals:downgrade-analysis` — then provide operation inputs when prompted

---

## Pre-flight

- Confirm account context (company name, CSM/AM, current contract, renewal date)
- Identify the specific analysis goal (new analyze or update to existing DGA)
- Note any prior analysis or existing documentation to reference
- Check `~/.claude/plugins/config/claude-for-customer-success/company-profile.md` for company segment and escalation context (`company-profile.md` is a runtime config dependency, not a reference file)

**G-code dependency:** All G-code guardrails referenced in this skill (G1–G9) are defined in the CLAUDE.md config loaded above. If Pre-flight halts or config is missing, G-codes are undefined — do not proceed with partial config.
---

## Operations

This skill supports two operations: `analyze` and `update`.

---

### Operation: `analyze`

Creates a new downgrade analysis record and writes it to disk.

**Input fields:**

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | Yes | Must be `"analyze"` |
| account_name | string | Yes | Account name — used for file path and display |
| csm_name | string | Yes | CSM or AM initiating the analysis |
| downgrade_request | string | Yes | Free-text description of what the customer wants to reduce |
| current_contract | string | No | Current tier, product name, or ARR |
| driver_category | string | No | One of: `budget_pressure`, `reduced_scope`, `feature_underutilization`, `competitive_pressure`, `dissatisfaction`. Inferred if omitted. |
| ocv_snapshot | string | No | OCV/outcome data snapshot — advisory signal for value delivery correlation |
| notes | string | No | Additional CSM/AM context |

**Auto-generated fields (immutable after creation):**
- `dga_id`: `DGA-[ACCT]-[YYYYMMDD]-[SEQ]` — ACCT is first 8 chars of safe_account uppercased, SEQ is 3-digit sequence starting 001
- `created_at`: ISO 8601 datetime
- `created_by`: session user

**Scope redirect — full churn detection:**
If `downgrade_request` contains any of the following signals, return the redirect message and do not create a file:
- "cancel everything" / "cancel the contract" / "cancel our subscription"
- "terminate contract" / "terminate the agreement"
- "no longer proceeding" / "shutting down" / "going out of business"
- "end our relationship" / "close the account"

Redirect message (exact):
```
Scope redirect: This request describes full contract cancellation, not a downgrade.
Please use renewals:churn-rca for churn analysis.
```

**Driver category inference (when `driver_category` not provided):**

| Signal vocabulary in request | Inferred category |
|------------------------------|-------------------|
| cost, price, budget, expensive, afford, overpaying, ROI, justify spend | `budget_pressure` |
| fewer users, less volume, smaller team, headcount, reduced seats, team shrank | `reduced_scope` |
| not using, don't need all features, too complex, not adopted, only using part | `feature_underutilization` |
| competitor, alternative, switching, vendor, cheaper tool, evaluating others | `competitive_pressure` |
| problems, unhappy, support, broken, frustrated, disappointed, not working | `dissatisfaction` |

Mixed-signal handling: if two or more categories are signaled, identify the primary (strongest/most explicit signal) and note secondary signals in the analysis. Load `references/downgrade-driver-taxonomy.md` for full heuristics.

**Analysis output structure:**

```
## Downgrade Analysis: [Account Name]
### Analysis ID: [DGA-ID]
### Driver Category: [category] ([inferred|provided])

## Value Chain Failure Map
### Failure Classification: [Missing link | Broken link | Non-value-chain driver]
[Narrative: what failed, where in the value chain, evidence from request and OCV]

## Counter-Proposal Inputs (CSM/AM Internal Use)
### Retention Levers Available
[Structured inputs: concessions, alternatives, commitment asks]
### Negotiation Anchors
[Key facts and positions CSM/AM can reference]

## Recommended Response Strategy
### Primary Action
[Highest-priority response action for this driver category]
### Supporting Actions
[Ordered list of supporting moves]
### Escalation Trigger
[Condition under which this should escalate beyond CSM/AM]
```

**Output file path:** `context/downgrade-analysis-[safe_account]-[YYYY-MM-DD].md`

---

### Operation: `update`

Appends new information to an existing downgrade analysis. Never overwrites prior content.

**Input fields:**

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | Yes | Must be `"update"` |
| dga_id | string | Yes | Target analysis ID (e.g., `DGA-ACMECORP-20260517-001`) |
| additional_context | string | Yes | New information to append |
| revised_driver_category | string | No | If new info changes driver classification — one of the 5 valid categories |
| ocv_snapshot | string | No | Updated OCV data — appended alongside prior snapshot |
| notes | string | No | Additional notes |

**Immutable fields — update rejected if provided as modifications:**
`dga_id`, `created_at`, `created_by`, `account_name`

Error message format:
```
Immutable field error: [field_name] cannot be modified after analysis creation.
```

**Update block format (appended to file):**
```
## Update Log

### Update [N] — [YYYY-MM-DDTHH:MM:SSZ]
**Added by:** [csm_name or session user]
**Additional context:** [additional_context content]
**Driver reclassification:** [if applicable — from X to Y, rationale]
**OCV update:** [if provided]
**Notes:** [notes if provided]
```

---

## Output Format

### File naming convention
`context/downgrade-analysis-[safe_account]-[YYYY-MM-DD].md`

### safe_account derivation (file paths only — never used for display)
1. Lowercase the full `account_name`
2. Replace all non-alphanumeric characters with `-`
3. Collapse consecutive hyphens to a single hyphen
4. Trim to 30 characters maximum

Examples:
- `Acme Corp` → `acme-corp`
- `O'Brien & Associates, LLC` → `o-brien-associates-llc` (trimmed if over 30 chars)

### Output file YAML frontmatter
```yaml
---
dga_id: DGA-[ACCT]-[YYYYMMDD]-[SEQ]
account_name: [original account_name verbatim]
safe_account: [derived safe_account]
csm_name: [csm_name]
driver_category: [category]
driver_source: inferred | provided
created_at: [ISO 8601 datetime]
created_by: [session user]
updated_at: [ISO 8601 datetime — set on each update]
current_contract: [value or omitted if not provided]
---
```

---

## Reasoning Protocol

Before generating output, apply these primers:

1. **CLASSIFY**: What type of downgrade analysis request is this?
   - **New Analysis** (`analyze`): New downgrade request — driver classification, value chain failure map, counter-proposal inputs, response strategy.
   - **Update** (`update`): Append new context to an existing DGA record — preserve prior analysis verbatim, append as numbered update block.

2. **CONSTRAINTS**: What limits the solution space?
   - G4: Escalation triggers must be specific and actionable — not generic "escalate to your manager."
   - G5: Counter-proposal inputs (walk-away figures, concession authority, competitive analysis) are CSM/AM internal use only — never include in customer-facing output.
   - Never infer driver category from a single ambiguous signal — require clear signal vocabulary match or flag as mixed-signal.

3. **EXPERT CHECK**: What would a veteran renewals specialist verify first?
   - Is the value chain failure classification (Missing link / Broken link / Non-value-chain) correctly matched to the driver category and OCV data?
   - Does the recommended response strategy address the actual driver — not the surface objection?

4. **ANTI-PATTERNS**: Common mistakes to avoid:
   - Accepting the stated downgrade reason as the root driver without checking for secondary signals in the vocabulary.
   - Classifying a budget cut as a value chain failure when it is a non-value-chain driver (external mandate).
   - Generating escalation triggers that are time-based but not tied to a specific outcome or escalation owner.
   - Proceeding to counter-proposal without first checking for full-churn signals — always run the redirect check first.
   - Modifying immutable fields (dga_id, created_at, created_by, account_name) in update operations — these are locked at creation.

**After execution**, verify:
- Did the full-churn signal check run before any analysis?
- Is the value chain failure classification consistent with the driver category and OCV evidence?
- Are escalation triggers specific (condition, owner, timeframe)?
- Confidence: [High] when account data is complete and driver vocabulary is unambiguous / [Medium] when partial data or mixed signals / [Low] if inputs are manual or inferred

---

### For `analyze` operations

**Step 1 — Full-churn signal check**
Scan `downgrade_request` for cancellation vocabulary. If found, return scope redirect message and stop. Do not create a file.

**Step 2 — Derive safe_account**
Apply the 4-step derivation: lowercase → replace non-alphanumeric with `-` → collapse hyphens → trim to 30 chars. Confirm derivation before using in file path.

**Step 3 — Driver category resolution**
If `driver_category` is provided: validate against the 5-category enum. If invalid, return error and stop.
If `driver_category` is not provided: scan `downgrade_request` for signal vocabulary per inference table. Identify primary category. Note secondary signals. Set `driver_source` to `inferred`.

**Step 4 — Value chain failure classification**
Apply the three-way classification (load `references/value-chain-failure-map.md`):
- **Missing link**: Outcome committed but not delivered. OCV shows gap between expected and actual outcome delivery. Root cause: CSM/delivery failure.
- **Broken link**: Outcome delivered but customer has not recognized or adopted it. Low usage despite feature availability. Root cause: adoption/change management failure.
- **Non-value-chain driver**: Budget cuts, reorg, market conditions, headcount reduction, competitive pricing. Value delivery is not the root cause.

Classification heuristics:
- `budget_pressure` without dissatisfaction signals → Non-value-chain driver (unless OCV shows delivery gap)
- `reduced_scope` (team shrank, fewer users) → Non-value-chain driver
- `feature_underutilization` → Broken link (delivered but not adopted) or Missing link (never onboarded)
- `competitive_pressure` → Non-value-chain driver unless price objection masks dissatisfaction
- `dissatisfaction` → Missing link (failed delivery) — corroborate with OCV if provided

When `ocv_snapshot` is provided: OCV gap between committed and actual outcomes strengthens Missing link; strong outcome delivery + low adoption strengthens Broken link.

**Step 5 — Counter-proposal inputs**
Generate retention levers and negotiation anchors per driver category. Load `references/counter-proposal-framework.md` for the full lever catalog. Mark all counter-proposal inputs as CSM/AM internal use only.

**Step 6 — Recommended response strategy**
Generate primary action, supporting actions (ordered by priority), and escalation trigger. Escalation trigger must be specific and actionable, not generic.

**Step 7 — DGA-ID derivation**
Construct candidate ID: `DGA-[ACCT]-[YYYYMMDD]-001` where ACCT = first 8 chars of safe_account uppercased, with hyphens removed. Check `context/` for existing `downgrade-analysis-[safe_account]-[YYYY-MM-DD].md` files. If one exists, scan frontmatter for the highest existing SEQ with matching ACCT+date prefix and increment by 1. If no match, SEQ = 001.

**Step 8 — Write output file**
Write complete file to `context/downgrade-analysis-[safe_account]-[YYYY-MM-DD].md` with YAML frontmatter followed by full analysis content. Confirm write succeeded. Return file path and DGA-ID.

---

### For `update` operations

**Step 1 — Immutable field check**
If input attempts to modify `dga_id`, `created_at`, `created_by`, or `account_name`, return immutable field error and stop. (`dga_id` as lookup key is valid; providing it as a modification is not.)

**Step 2 — Locate target file**
Parse `dga_id` to extract date component. Search `context/downgrade-analysis-*` for file whose frontmatter contains the exact `dga_id`. If not found, return: `Analysis not found: no file with dga_id [dga_id] in context/downgrade-analysis-*.`

**Step 3 — Validate revised_driver_category (if provided)**
Validate against 5-category enum. Return error if invalid.

**Step 4 — Count existing updates**
Scan file for `### Update [N]` pattern. Set next N = count + 1.

**Step 5 — Append update block**
Append update block. Omit lines for absent optional fields. Set `updated_at` in YAML frontmatter to current ISO 8601 datetime.

**Step 6 — Confirm and return**
Return: updated file path, update number, timestamp.

---

## Security & Permissions

```
network:        none — no external API calls, no web fetch
read_scope:     context/downgrade-analysis-* only
write_scope:    context/downgrade-analysis-* only
ocv_data:       read from ocv_snapshot input parameter only — never from filesystem
subprocess:     none
dynamic_code:   none — no eval, no exec, no runtime code execution
```

This skill operates exclusively within the `context/` directory on files matching the `downgrade-analysis-*` prefix. It does not read from, write to, or reference any other path.

---

## Trust & Verification

**safe_account sanitization:**
`safe_account` is derived deterministically from `account_name` using the 4-step normalization. It is used exclusively in file paths. The original `account_name` is preserved verbatim in frontmatter and all display contexts. `safe_account` is never shown to users as an account identifier.

**Free-text field handling:**
`downgrade_request`, `notes`, and `additional_context` are stored verbatim as display data. They are not executed, evaluated, or used to derive file paths. Prompt injection via free-text fields cannot affect file paths, IDs, or system behavior.

**driver_category validation:**
When provided, `driver_category` is validated against the 5-item enum before use. Values outside this set return an error and halt execution. Inferred categories are constrained to the same enum.

**Immutable field enforcement:**
After a downgrade analysis is created, `dga_id`, `created_at`, `created_by`, and `account_name` cannot be modified. Update operations attempting to change these fields are rejected before any file write occurs.

**Update operations are append-only:**
No update operation modifies existing content. All updates are written as new numbered blocks. Prior analysis sections are preserved verbatim.

**ocv_snapshot integrity:**
OCV data is accepted only through the `ocv_snapshot` input parameter. This skill never reads OCV data from the filesystem, from external sources, or from prior session context not provided in the current input.

---

## Reference Files

> **Lifecycle alignment:** This analysis supports G4.1 (Retention/Renewal) and G5.1 (Recovery) stages.

| File | Path | Purpose |
|------|------|---------|
| Reasoning Blueprint | `references/reasoning-blueprint.md` | Reasoning framework for this skill — D1 cognitive stance, constraints, and expert orientation |
| Downgrade Driver Taxonomy | `references/downgrade-driver-taxonomy.md` | Full definitions, signal vocabulary, diagnostic questions, and mixed-signal handling for all 5 driver categories |
| Value Chain Failure Map | `references/value-chain-failure-map.md` | Missing link / Broken link / Non-value-chain definitions, detection patterns, remediation pathways, and escalation guidance |
| Counter-Proposal Framework | `references/counter-proposal-framework.md` | Retention levers per driver category, negotiation anchors, concession guidance, and escalation trigger conditions |

Reference files are loaded on demand during analysis generation — not front-loaded into every response.

---

## Examples

### Example 1 — `analyze` with driver inference

**Input:**
```
operation: analyze
account_name: Meridian Health Group
csm_name: Jordan Reyes
downgrade_request: "Customer says they're cutting software spend across the board — CFO mandate. They want to drop from the Enterprise tier to the Professional tier."
current_contract: Enterprise tier, $84,000 ARR
ocv_snapshot: "QBR outcomes delivered: 3/5. Two outcome areas (reporting automation, manager dashboards) not yet adopted. Usage at 34% of licensed seats."
```

**Skill behavior:**
1. Churn signal check: No cancellation vocabulary — proceed.
2. safe_account: `meridian-health-group` → trimmed to `meridian-health-group` (21 chars, under limit).
3. Driver inference: "cutting software spend," "CFO mandate" → primary `budget_pressure`. OCV shows low adoption (34% seats, 2 undelivered outcomes) → secondary `feature_underutilization` noted.
4. Value chain failure: Non-value-chain driver (CFO mandate) with Broken link as contributing factor (low adoption gives the CFO justification).
5. DGA-ID: No existing file — `DGA-MERIDIANHEAL-20260517-001`.

**Output file:** `context/downgrade-analysis-meridian-health-group-2026-05-17.md`

**Recommended response strategy excerpt:**
```
### Primary Action
Secure CFO-level engagement to present ROI data before the tier change is finalized.
This is a CFO mandate — not negotiable at CSM/AM level.

### Escalation Trigger
If CSM/AM cannot access CFO or VP-level sponsor within 5 business days,
escalate to Customer Success leadership for exec-to-exec outreach.
```

---

### Example 2 — `update` operation

**Input:**
```
operation: update
dga_id: DGA-MERIDIANHEAL-20260517-001
additional_context: "Spoke with champion Sarah Kim — confirmed CFO mandate is a 90-day cost reduction cycle, not permanent. Budget expected to normalize Q3. She's open to a temporary downgrade with re-expansion commitment clause."
revised_driver_category: budget_pressure
notes: "Consider 90-day bridge pricing offer rather than full tier downgrade."
```

**Appended block:**
```
## Update Log

### Update 1 — 2026-05-17T14:32:00Z
**Added by:** Jordan Reyes
**Additional context:** Spoke with champion Sarah Kim — confirmed CFO mandate is a
90-day cost reduction cycle, not permanent. Budget expected to normalize Q3.
She's open to a temporary downgrade with re-expansion commitment clause.
**Driver reclassification:** budget_pressure (confirmed — no change to prior classification)
**Notes:** Consider 90-day bridge pricing offer rather than full tier downgrade.
```

---

### Example 3 — scope redirect

**Input:**
```
operation: analyze
account_name: Pinnacle Dynamics
csm_name: Alex Torres
downgrade_request: "Customer wants to terminate the contract entirely — they're shutting down their CS department."
```

**Skill response:**
```
Scope redirect: This request describes full contract cancellation, not a downgrade.
Please use renewals:churn-rca for churn analysis.
```

No file is written.

More from t0ddc3by/claude-for-customer-success

SkillDescription
account-research>
annual-planning-workflowOrchestrates the six-phase annual (or mid-year) planning cycle: forecast scenarios → UoG three-scenario capacity modeling → quota sensitivity → comp simulation → baseline save → change communication. Each phase gates on human approval before the next begins. Invokes unit-of-growth-calculator for capacity modeling. Triggers: 'annual planning', 'planning cycle', 'run the plan', 'quota comp planning', 'mid-year replan'.
blocker-review>
call-prep>
change-communication-packagingProduces a three-part communication package for sensitive planning changes: (1) data-backed rationale memo for reps, (2) FAQ with top 5 anticipated objections and data responses, (3) rollout sequence with audience, channel, and order. Triggered automatically by annual-planning-workflow for territory, quota, or comp changes. Requires RevOps lead review before any distribution. Triggers: 'communicate changes', 'territory announcement', 'quota rationale', 'comp change communication', 'help me tell reps about [change]'.
churn-rcaRoot cause analysis for individual customer churn events and cohort-level churn pattern analysis. Produces structured RCA with root cause taxonomy, contributing factors, timeline reconstruction, and remediation pathway. Scoped to full cancellation — contract contraction redirected to renewals:downgrade-analysis.
closed-won-to-cs-capacity-modelingConverts rolling sales forecast into CS resource demand using UoG formulas. Runs three-scenario capacity check (P10/P50/P90 from scenario-modeling). Compares projected CSM demand to current headcount and UoG annual plan baseline. Surfaces CS capacity gaps with a hiring lead time flag. Updates when SA1 forecast moves >10%. Triggers: 'CS capacity', 'can CS absorb', 'CSM headcount needed', 'CS ceiling', 'will CS be able to handle new logos'.
cold-start-interview>
comp-simulationModels comp plan payout scenarios before plan is finalized. Stress-tests OTE, accelerators, and threshold structures against attainment distributions (50/65/75/85/100%). Surfaces cost-to-company and unintended payout behaviors. G3 applies — all outputs require HR + Finance dual review before rep distribution. Triggers: 'comp simulation', 'model comp payouts', 'comp plan cost', 'stress test comp plan', 'what does the plan cost at 80/100/120%'.
crm-hygiene-auditOverall CRM health score plus rep-level hygiene scorecard across three dimensions: completeness, accuracy, and recency. Produces weekly hygiene report for RevOps review before sharing with Sales managers. Never writes to CRM — all corrections are proposals. Triggers: 'CRM hygiene', 'data quality', 'hygiene report', 'field completeness', 'CRM health score'.