Skip to content
Back to skills

Churn Rca

ASecurity

Root 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.

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

Works with

  • api

Security analysis

A100/100

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

Scanned September 22, 2026

npx -y skills add t0ddc3by/claude-for-customer-success --skill churn-rca --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Churn Rca?

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

Security grade badge for Churn Rca
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/t0ddc3by-churn-rca/badge)](https://www.skillsdirectory.com/skills/t0ddc3by-churn-rca)

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: churn-rca
description: "Root 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."
version: "1.0.0"
metadata:
  author: "todd@successhacker.co"
  tags: "renewals churn rca root-cause customer-success"
deployment_target: plugin
---

# /renewals:churn-rca [VALIDATED]

## Overview

`renewals:churn-rca` performs structured Root Cause Analysis on confirmed customer churn events (full contract cancellations). It supports three operations:

- **`analyze`** — individual account RCA; produces account-specific root cause findings, timeline reconstruction, OCV delivery analysis, win-back assessment, and remediation pathway
- **`cohort`** — multi-account pattern analysis; surfaces systemic drivers and generates portfolio-level escalation when churn rate meets or exceeds 25%
- **`export`** — retrieves and formats an existing RCA or cohort record for external use

**Use when:**
- A CSM or RevOps analyst needs to perform root cause analysis on a confirmed full contract cancellation
- Analyzing a batch of churned accounts to detect systemic drivers and portfolio-level patterns
- Exporting a completed RCA for stakeholder reporting or portfolio review

**Do NOT use for:**
- Contract downgrades, partial reductions, or contractions → use `renewals:downgrade-analysis`
- Active renewal negotiation or deal management
- Health score calculation or predictive churn scoring
- Real-time portfolio monitoring
- Win-back campaign execution (this skill recommends; it does not execute)

**Scope boundary — contraction redirect:**
If the scenario involves a customer reducing (not cancelling) their contract, respond with:

```
Scope redirect: This request describes a contract contraction, not full churn.
Please use renewals:downgrade-analysis for downgrade analysis.
```

Contraction signals: "reduce," "downgrade," "fewer seats," "smaller tier," "partial cancellation."

## Typical Activation
> `/renewals:churn-rca analyze "Acme Corp"` — full RCA on a single churned account with root cause taxonomy, timeline reconstruction, and win-back assessment
> `/renewals:churn-rca cohort` — multi-account pattern analysis to detect systemic churn drivers; triggers portfolio-level escalation if cohort churn rate ≥ 25%
> `/renewals:churn-rca export "Acme Corp"` — retrieve and format an existing RCA record for stakeholder reporting or portfolio review

---

## Use When
- A CSM or RevOps analyst needs to perform root cause analysis on a confirmed full contract cancellation
- Analyzing a batch of churned accounts to detect systemic drivers and portfolio-level patterns
- Exporting a completed RCA for stakeholder reporting or portfolio review

## Do NOT Use For
- Contract downgrades, partial reductions, or contractions → use `renewals:downgrade-analysis`
- Active renewal negotiation or deal management
- Health score calculation or predictive churn scoring
- Real-time portfolio monitoring
- Win-back campaign execution (this skill recommends; it does not execute)

## Typical Activation
> `/renewals:churn-rca analyze "Acme Corp"` — full RCA on a single churned account with root cause taxonomy, timeline reconstruction, and win-back assessment
> `/renewals:churn-rca cohort` — multi-account pattern analysis to detect systemic churn drivers; triggers portfolio-level escalation if cohort churn rate ≥ 25%
> `/renewals:churn-rca export "Acme Corp"` — retrieve and format an existing RCA record for stakeholder reporting or portfolio review

---

## Pre-flight

- Confirm account context (company name, CSM, churn date, ARR)
- Identify the specific analysis goal (individual RCA, cohort pattern, or export)
- 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

**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

### Operation: `analyze` — Individual Churn RCA

Performs root cause analysis on a single churned account. Produces a structured RCA document written to `context/rca-[safe_account]-[YYYY-MM-DD].md`.

**Inputs:**

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | Yes | `"analyze"` |
| `account_name` | string | Yes | Account name |
| `csm_name` | string | Yes | CSM who owned the account |
| `churn_reason` | string | Yes | Customer-stated or CSM-assessed churn reason |
| `churn_date` | string | No | ISO date of confirmed churn (YYYY-MM-DD); defaults to today |
| `account_stage` | string | No | Lifecycle stage at time of churn |
| `contract_value` | string | No | ARR or contract value for impact sizing |
| `tenure_months` | integer | No | Months as customer |
| `ocv_snapshot` | string | No | OCV outcome data — advisory signal for value delivery analysis |
| `early_warning_signals` | list | No | List of pre-churn signals observed |
| `notes` | string | No | CSM freeform notes |

**Scope redirect — check first:**
Before any analysis, scan `churn_reason` and `notes` for contraction signals ("reduce," "downgrade," "fewer seats," "smaller tier"). If found, return the scope redirect message and stop.

**Auto-generated fields (immutable after creation):**
- `rca_id`: `RCA-[ACCT]-[YYYYMMDD]-[SEQ]`
  - `ACCT`: first 4 alphabetic characters of `account_name`, uppercased, non-alpha stripped
  - `SEQ`: 3-digit sequence starting at `001`; scan `context/rca-[safe_account]-*.md` for the same date and increment from the highest found
- `created_at`: ISO datetime of operation
- `created_by`: session user

**safe_account derivation (for file path only):**
1. Lowercase `account_name`
2. Replace all non-alphanumeric characters with `-`
3. Collapse consecutive hyphens to a single hyphen
4. Trim to 30 characters maximum

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

**Output structure:**

```markdown
---
rca_id: [RCA-ID]
account_name: [account_name]
churn_date: [churn_date]
csm_name: [csm_name]
created_at: [ISO datetime]
created_by: [session user]
---

## Churn RCA: [Account Name]
### RCA ID: [RCA-ID]
### Churn Date: [date]
### Contract Value: [if provided; omit section if not]

## Root Cause Classification
### Primary Root Cause: [taxonomy category from the 7-category taxonomy]
### Contributing Factors: [list of secondary factors from available signals]
### Value Chain Position: [where in the value delivery chain the failure occurred]

## Timeline Reconstruction
[Key events and signals leading to churn, synthesized from: early_warning_signals,
account_stage, tenure_months, churn_date, and churn_reason. State assumptions when
fields are absent.]

## OCV Delivery Analysis
[If ocv_snapshot provided: analysis of outcome delivery status and gaps correlated
with churn timing. If not provided: omit this section entirely.]

## Remediation Pathway
### Preventable: [Yes / Possibly / No]
### Primary Prevention Lever: [what should have been done differently]
### Systemic Recommendation: [pattern recommendation for future accounts at similar stage/profile]

## Win-Back Assessment
### Win-Back Viability: [High / Medium / Low / Not viable]
### Recommended Timing: [when to re-engage]
### Win-Back Approach: [summary of recommended approach]
```

---

### Operation: `cohort` — Cohort Churn Pattern Analysis

Analyzes a batch of churn events for pattern identification and systemic root cause. Writes to `context/rca-cohort-[YYYYMMDD]-[SEQ].md`.

**Inputs:**

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | Yes | `"cohort"` |
| `cohort_name` | string | Yes | Descriptive name (e.g., "Q1-2026 Enterprise Churn") |
| `csm_name` | string | Yes | CSM or analyst running the cohort analysis |
| `rca_ids` | list | No | List of existing RCA IDs to include (prior individual RCAs) |
| `churn_events` | list | No | Inline churn event objects: `{account_name, churn_reason, churn_date, contract_value, account_stage}` — for events without prior individual RCAs |
| `analysis_period` | string | No | ISO date range `YYYY-MM-DD/YYYY-MM-DD` |
| `portfolio_size` | integer | No | Total accounts in the defined portfolio. Must be a positive integer > 0 |
| `notes` | string | No | Additional context |

**Validation — enforce before any analysis or file write:**

portfolio_size = 0 or negative:
```
Validation error: portfolio_size must be a positive integer greater than zero. Received: [value]. Provide the total number of accounts in the defined portfolio.
```

**Churn rate calculation (when portfolio_size provided):**
```
churn_rate = count(churn_events + rca_ids) / portfolio_size × 100
systemic_threshold_met = churn_rate >= 25.0
```

**Auto-generated fields (immutable after creation):**
- `cohort_id`: `RCA-COHORT-[YYYYMMDD]-[SEQ]`
  - `SEQ`: 3-digit sequence; scan `context/rca-cohort-*.md` for the same date and increment from highest found; default `001`
- `created_at`: ISO datetime
- `created_by`: session user

**Output file:** `context/rca-cohort-[YYYYMMDD]-[SEQ].md`

**Output structure:**

```markdown
---
cohort_id: [cohort_id]
cohort_name: [cohort_name]
portfolio_size: [N or "not provided"]
churn_rate: [X.X% or "not calculated — portfolio_size not provided"]
analysis_period: [period or "not specified"]
created_at: [ISO datetime]
created_by: [session user]
---

## Cohort Churn Analysis: [cohort_name]
### Cohort ID: [cohort_id]
### Analysis Period: [period]
### Churn Rate: [N/portfolio_size]% [⚠ Above threshold — systemic pattern] if >= 25%

## Pattern Analysis
### Primary Churn Drivers (ranked by frequency)
| Driver Category | Count | % of Cohort |
|----------------|-------|-------------|
| [category]     | [N]   | [%]         |

### Common Contributing Factors
[Cross-account themes identified from churn_reason signals]

### Lifecycle Stage Concentration
[Which stages have highest churn concentration; any stage-specific patterns]

## Systemic Recommendations
[Portfolio-level interventions based on pattern analysis. Produced for all cohorts;
escalation intensity increases when churn_rate >= 25%.]
[If churn_rate >= 25%: prefix section with ⚠ and address to CS Leadership and Product.]
```

---

### Operation: `export`

Retrieves and formats an existing RCA or cohort record for external use. Does not write to the filesystem — content returned in response only.

**Inputs:**

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | Yes | `"export"` |
| `rca_id` | string | No | Single RCA ID to export |
| `cohort_id` | string | No | Cohort ID to export |
| `format` | string | No | `"markdown"` (default) or `"summary"` |

**Validation:**
- At least one of `rca_id` or `cohort_id` must be provided:
  ```
  Export error: At least one of rca_id or cohort_id is required.
  ```

**Not-found errors:**
```
Export error: RCA record not found for rca_id [rca_id]. Verify the ID is correct and confirm the rca operation completed successfully.
```
```
Export error: RCA record not found for cohort_id [cohort_id]. Verify the ID is correct and confirm the cohort operation completed successfully.
```

**Locate source file:** Scan `context/rca-*` for a file whose frontmatter `rca_id` or `cohort_id` matches the provided value. The identifier is a match predicate against file frontmatter — never interpolated into a file path.

**Format behavior:**
- `markdown` (default): return the full document as written
- `summary`: return only the Root Cause Classification, Remediation Pathway, and Win-Back Assessment sections (or the Pattern Analysis and Systemic Recommendations for cohorts)

---

## Output Format

**Individual RCA file naming:**
```
context/rca-[safe_account]-[YYYY-MM-DD].md
```
Examples:
- `context/rca-acme-corp-2026-05-17.md`
- `context/rca-meridian-health-2026-05-01.md`

**Cohort RCA file naming:**
```
context/rca-cohort-[YYYYMMDD]-[SEQ].md
```
Examples:
- `context/rca-cohort-20260517-001.md`
- `context/rca-cohort-20260517-002.md`

**Auto-ID examples:**
- Individual: `RCA-ACME-20260517-001`, `RCA-MERI-20260501-001`
- Cohort: `RCA-COHORT-20260517-001`

**Date in filename:** Date of the operation (creation date). Never updated.

**YAML frontmatter fields — individual RCA:**
```yaml
rca_id: [RCA-ID]
account_name: [verbatim from input]
churn_date: [YYYY-MM-DD]
csm_name: [verbatim from input]
created_at: [ISO datetime]
created_by: [session user email]
```

**YAML frontmatter fields — cohort RCA:**
```yaml
cohort_id: [RCA-COHORT-ID]
cohort_name: [verbatim from input]
portfolio_size: [integer or "not provided"]
churn_rate: [decimal or "not calculated"]
analysis_period: [range or "not specified"]
created_at: [ISO datetime]
created_by: [session user email]
```

**Export output:** Returned in response only. No file written.

---

## Reasoning Protocol

Before generating output, apply these primers:

1. **CLASSIFY**: What type of churn analysis request is this?
   - **Individual RCA** (`analyze`): Single churned account — root cause taxonomy, timeline reconstruction, win-back assessment.
   - **Cohort Pattern Analysis** (`cohort`): Multi-account batch — systemic driver identification, frequency ranking, portfolio-level escalation if churn rate ≥ 25%.
   - **Export** (`export`): Retrieval and formatting of an existing RCA or cohort record for stakeholder distribution.

2. **CONSTRAINTS**: What limits the solution space?
   - G4: Escalation guidance must reference the configured escalation matrix — no generic "escalate to leadership."
   - G5: RCA files containing ARR, health data, and stakeholder details are internal-only — confirm recipient authorization before distribution.
   - Never assign root cause without named evidence; never treat stated close reason as root cause without corroboration.

3. **EXPERT CHECK**: What would a veteran CS analyst verify first?
   - Is the root cause assignment based on the earliest signal in the timeline, or the most recent/dramatic one?
   - Does the cohort frequency table rank by count descending? Are systemic recommendations scaled to the churn rate severity?

4. **ANTI-PATTERNS**: Common mistakes to avoid:
   - Accepting the stated churn reason as root cause without independent corroboration — stated reasons and actual root causes diverge frequently.
   - Assigning root cause to the last signal before churn rather than the first — recency bias is the most common analytical error.
   - Including force majeure losses in process-improvement conclusions — uncontrollable losses should not drive response process changes.
   - Generating portfolio escalation from a cohort without validating the churn_rate calculation against portfolio_size.
   - Running export without validating the ID against frontmatter — never interpolate IDs into file paths.

**After execution**, verify:
- Does the root cause assignment cite specific, named evidence?
- Is the cohort churn rate calculation correct (count / portfolio_size × 100)?
- Are escalation references specific (owner, channel, SLA) — not generic?
- Confidence: [High] when data is complete and multi-signal / [Medium] when partial data available / [Low] if single-signal or inferred

---

Execute in this order for each operation:

**For `analyze`:**
1. Check `churn_reason` and `notes` for contraction signals — if found, return scope redirect and stop
2. Derive `safe_account` from `account_name` (lowercase → replace non-alphanumeric with `-` → collapse hyphens → trim to 30 chars)
3. Derive `churn_date`: use provided value or today's date in ISO format
4. Classify primary root cause from `churn_reason` using the 7-category taxonomy in `reference/churn-rca-taxonomy.md` — load on demand
5. Identify contributing factors from secondary signals in `churn_reason`, `early_warning_signals`, `notes`, and `ocv_snapshot`
6. Reconstruct timeline from `early_warning_signals`, `account_stage`, `tenure_months`, and `churn_date`; state assumptions for absent fields
7. Render OCV Delivery Analysis only if `ocv_snapshot` is provided; omit the section entirely if not
8. Assess win-back viability per root cause category using `reference/remediation-playbook.md` — load on demand
9. Derive `rca_id`: scan `context/rca-[safe_account]-*.md` for same date; set SEQ to highest found + 1, defaulting to `001`
10. Write the RCA file to `context/rca-[safe_account]-[churn_date].md`

**For `cohort`:**
1. Validate `portfolio_size` > 0 if provided; return validation error and stop if zero or negative
2. Collect all churn events: combine inline `churn_events` entries with any `rca_ids` references
3. Calculate `churn_rate` if `portfolio_size` provided: `count(events) / portfolio_size × 100`; flag systemic pattern if `churn_rate >= 25.0`
4. Load `reference/churn-rca-taxonomy.md` — classify each event's primary root cause
5. Build frequency table: rank drivers by count descending; alpha-sort ties
6. Identify cross-account themes from signal language in `churn_reason` fields
7. Identify lifecycle stage concentration from `account_stage` fields
8. Load `reference/cohort-analysis-framework.md` for pattern interpretation guidance — load on demand
9. Generate systemic recommendations scaled to churn rate severity; use `reference/remediation-playbook.md` — load on demand
10. Derive `cohort_id`: scan `context/rca-cohort-*.md` for same date; set SEQ to highest found + 1, defaulting to `001`
11. Write cohort file to `context/rca-cohort-[YYYYMMDD]-[SEQ].md`

**For `export`:**
1. Validate that at least one of `rca_id` or `cohort_id` is provided; return error if neither
2. Scan `context/rca-*` for a file whose frontmatter `rca_id` or `cohort_id` matches the provided value
3. If not found, return the not-found error message; stop
4. Apply format: `markdown` = return full document; `summary` = return key sections only
5. Return content in response; do not write any file

---

## Security & Permissions

- **Network access:** none
- **Filesystem read scope:** `context/rca-*` only
- **Filesystem write scope:** `context/rca-*` only (individual and cohort RCA files)
- **Subprocess execution:** none
- **Dynamic code execution:** none
- **External API calls:** none
- **Export operation:** no filesystem write — content returned in response only
- **OCV data:** read from `ocv_snapshot` input parameter only; skill never reads OCV data from the filesystem

---

## Trust & Verification

**Input sanitization:**
- `account_name` sanitized to `safe_account` (lowercase, alphanumeric + hyphens only, max 30 chars) for all filesystem path construction
- `safe_account` is derived once and used for both the filename and the `rca_id` ACCT segment
- Display names (unsanitized `account_name`) used only in document body output — never in path construction
- `churn_reason`, `notes`, `ocv_snapshot`, and all free-text fields stored verbatim in document body — never executed, interpolated into skill logic, or used in path construction

**Validation — portfolio_size:**
- Must be a positive integer greater than zero
- If `portfolio_size = 0` or negative:
  ```
  Validation error: portfolio_size must be a positive integer greater than zero. Received: [value]. Provide the total number of accounts in the defined portfolio.
  ```

**Immutable fields — locked at creation; no update operation exists:**
- Individual: `rca_id`, `created_at`, `created_by`, `account_name`, `churn_date`
- Cohort: `cohort_id`, `created_at`, `created_by`, `cohort_name`, `churn_rate`
- If revised analysis is needed, initiate a new operation — a new ID is generated

**Root cause taxonomy validation:**
- Primary root cause must be one of the 7 taxonomy categories defined in `reference/churn-rca-taxonomy.md`
- If `churn_reason` is ambiguous, apply the classification heuristics in the taxonomy file; document the rationale

**Export ID resolution:**
- File scan against `context/rca-*` for matching frontmatter value — the ID is a match predicate, never a path component
- If not found: return the not-found error message verbatim

**Display-only fields:**
- `ocv_snapshot` content and all free-text inputs are display-only — they inform the analysis narrative but are never used in logic, path construction, or calculation

---

## Reference Files

The following reference files are loaded on-demand. They are not front-loaded.

| File | Purpose |
|------|---------|
| `reference/reasoning-blueprint.md` | Reasoning framework for this skill — D1 cognitive stance, constraints, and expert orientation |
| `reference/churn-rca-taxonomy.md` | 7-category root cause taxonomy with definitions, signal vocabulary, classification heuristics, value chain position mapping, and win-back viability assessment rules per category |
| `reference/cohort-analysis-framework.md` | Cohort construction methods, pattern identification algorithm, churn rate threshold logic, lifecycle stage concentration analysis, systemic recommendation generation, and portfolio_size validation |
| `reference/remediation-playbook.md` | Prevention lever per root cause category, systemic recommendation templates, win-back timing guidance and approach templates per root cause, and escalation guidance |

Load `reference/churn-rca-taxonomy.md` when classifying root causes during `analyze` or `cohort`.
Load `reference/cohort-analysis-framework.md` when executing `cohort` pattern analysis.
Load `reference/remediation-playbook.md` when generating remediation recommendations or win-back assessments.

---

## Examples

### Example 1 — Individual Analyze

**Input:**
```json
{
  "operation": "analyze",
  "account_name": "Meridian Health",
  "csm_name": "Sarah Chen",
  "churn_reason": "The product never integrated with their EHR system. IT gave up after 4 months of failed attempts. Exec sponsor left and no champion replaced her.",
  "churn_date": "2026-05-01",
  "account_stage": "adoption",
  "contract_value": "$48,000 ARR",
  "tenure_months": 8,
  "ocv_snapshot": "3 of 5 target outcomes partially met; integration milestone never completed; last active session 2026-03-15",
  "early_warning_signals": ["no login activity for 45 days", "IT escalation ticket opened 2026-02-01", "champion Sarah Torres promoted to new division 2026-03-01"]
}
```

**Behavior:**
- No contraction signals in `churn_reason` — proceed
- `safe_account`: `meridian-health`
- `rca_id`: `RCA-MERI-20260501-001`
- Output file: `context/rca-meridian-health-2026-05-01.md`
- Primary root cause: `product_fit_failure` (integration failure as dominant signal)
- Contributing factors: `champion_departure` (exec sponsor left, no replacement)
- OCV Delivery Analysis rendered: integration milestone never completed; 3/5 outcomes stalled
- Timeline: IT escalation at month 6, champion departure at month 7, activity gap last 45 days
- Win-Back Viability: Medium — contingent on integration resolution and new champion identification
- Preventable: Possibly — integration validation gate at 30 days would have surfaced the blocker earlier

---

### Example 2 — Cohort Analysis (Systemic Threshold Met)

**Input:**
```json
{
  "operation": "cohort",
  "cohort_name": "Q1-2026 Enterprise Churn",
  "csm_name": "Tom Liu",
  "churn_events": [
    {"account_name": "Acme Corp", "churn_reason": "ROI not demonstrated to CFO", "churn_date": "2026-01-15", "account_stage": "renewal"},
    {"account_name": "Beta Solutions", "churn_reason": "Value unclear after renewal conversation", "churn_date": "2026-02-01", "account_stage": "renewal"},
    {"account_name": "Gamma Industries", "churn_reason": "Could not show business impact to board", "churn_date": "2026-03-10", "account_stage": "maturity"}
  ],
  "portfolio_size": 10,
  "analysis_period": "2026-01-01/2026-03-31"
}
```

**Behavior:**
- `portfolio_size = 10` — positive integer, validation passes
- 3 events collected from `churn_events`
- `churn_rate = 3 / 10 × 100 = 30.0%`
- `systemic_threshold_met = true` (30.0% >= 25.0%)
- `cohort_id`: `RCA-COHORT-20260517-001`
- Output file: `context/rca-cohort-20260517-001.md`
- Primary driver: `value_not_realized` (all 3 accounts: ROI articulation failure at renewal stage)
- Stage concentration: 2/3 at renewal stage — value story not built before renewal conversation
- Systemic recommendations prefixed with ⚠, addressed to CS Leadership and Product
- Recommendation: implement 60-day pre-renewal value review as standard; build ROI case study library

Files in this skill

  • README.md1.8 KB
  • SKILL.md24.3 KB
  • references/reasoning-blueprint.md583 B

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.