Skip to content
Back to skills

Downgrade Analysis

ASecurity

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.

  • 64 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added June 6, 2026
businessrustgorailsgitapisecuritydocumentation

Works with

  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 22, 2026

npx -y skills add t0ddc3by/claude-for-customer-success --skill downgrade-analysis --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Downgrade Analysis?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Downgrade Analysis
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/t0ddc3by-downgrade-analysis/badge)](https://www.skillsdirectory.com/skills/t0ddc3by-downgrade-analysis)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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"
metadata:
  author: "todd@successhacker.co"
  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.

Files in this skill

  • README.md1.9 KB
  • SKILL.md21.1 KB
  • references/reasoning-blueprint.md611 B
  • references/reference/counter-proposal-framework.md14 KB
  • references/reference/downgrade-driver-taxonomy.md8.6 KB
  • references/reference/value-chain-failure-map.md11.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.