Skill Tracer
Skills › Knowledge Work Plugins › validate-data

validate-data

skill · 383 lines · Apache-2.0 · data/skills/validate-data/SKILL.md

The facts

Its description

QA an analysis before sharing -- methodology, accuracy, and bias checks. Use when reviewing an analysis before a stakeholder presentation, spot-checking calculations and aggregation logic, verifying a SQL query's results look right, or assessing whether conclusions are actually supported by the data.

The description the agent reads to decide when to use it.

From its settingsline 3

When it starts

A person asks the agent to check an analysis, report, SQL query and its results, or chart before it goes out to stakeholders, wanting methodology, calculation, and bias problems caught first. It fires on review-before-sharing requests rather than on doing the analysis itself.

Things a person might say (the model's guesses)

  • “Can you sanity-check this quarterly revenue analysis before I send it to the exec team?”
  • “Here's my churn SQL query and its results — does the logic look right?”
  • “Review the methodology in this report before I present the findings to stakeholders.”

A model's summary of when it is used.

A model's reading

What it takes when started

<analysis to review>

What to type after its name when you start it.

From its settingsline 4

Licence

Apache-2.0, from data/LICENSE

The terms its author shares it under, which let it be shown here.

From the repositorylicence text

The text

Open on GitHub
1---
2name: validate-data
3description: QA an analysis before sharing -- methodology, accuracy, and bias checks. Use when reviewing an analysis before a stakeholder presentation, spot-checking calculations and aggregation logic, verifying a SQL query's results look right, or assessing whether conclusions are actually supported by the data.
4argument-hint: "<analysis to review>"
5---
6
7# /validate-data - Validate Analysis Before Sharing
8
9> If you see unfamiliar placeholders or need to check which tools are connected, see [CONNECTORS.md](../../CONNECTORS.md).
11Review an analysis for accuracy, methodology, and potential biases before sharing with stakeholders. Generates a confidence assessment and improvement suggestions.

/validate-data - Validate Analysis Before Sharing

If you see unfamiliar placeholders or need to check which tools are connected, see CONNECTORS.md.

Review an analysis for accuracy, methodology, and potential biases before sharing with stakeholders. Generates a confidence assessment and improvement suggestions.

Raw lines 1 to 12
13## Usage
15```
16/validate-data <analysis to review>
17```
19The analysis can be:
20- A document or report in the conversation
21- A file (markdown, notebook, spreadsheet)
22- SQL queries and their results
23- Charts and their underlying data
24- A description of methodology and findings

Usage

/validate-data <analysis to review>

The analysis can be:

  • A document or report in the conversation
  • A file (markdown, notebook, spreadsheet)
  • SQL queries and their results
  • Charts and their underlying data
  • A description of methodology and findings
Raw lines 13 to 25
26## Workflow
28### 1. Review Methodology and Assumptions
30Examine:
32- **Question framing**: Is the analysis answering the right question? Could the question be interpreted differently?
33- **Data selection**: Are the right tables/datasets being used? Is the time range appropriate?
34- **Population definition**: Is the analysis population correctly defined? Are there unintended exclusions?
35- **Metric definitions**: Are metrics defined clearly and consistently? Do they match how stakeholders understand them?
36- **Baseline and comparison**: Is the comparison fair? Are time periods, cohort sizes, and contexts comparable?

1. Review Methodology and Assumptions

Examine:

  • Question framing: Is the analysis answering the right question? Could the question be interpreted differently?
  • Data selection: Are the right tables/datasets being used? Is the time range appropriate?
  • Population definition: Is the analysis population correctly defined? Are there unintended exclusions?
  • Metric definitions: Are metrics defined clearly and consistently? Do they match how stakeholders understand them?
  • Baseline and comparison: Is the comparison fair? Are time periods, cohort sizes, and contexts comparable?
Raw lines 28 to 37
38### 2. Run the Pre-Delivery QA Checklist
40Work through the checklist below — data quality, calculation, reasonableness, and presentation checks.

2. Run the Pre-Delivery QA Checklist

Work through the checklist below — data quality, calculation, reasonableness, and presentation checks.

Raw lines 38 to 41
42### 3. Check for Common Analytical Pitfalls
44Systematically review against the detailed pitfall catalog below (join explosion, survivorship bias, incomplete period comparison, denominator shifting, average of averages, timezone mismatches, selection bias).

3. Check for Common Analytical Pitfalls

Systematically review against the detailed pitfall catalog below (join explosion, survivorship bias, incomplete period comparison, denominator shifting, average of averages, timezone mismatches, selection bias).

Raw lines 42 to 45
46### 4. Verify Calculations and Aggregations
48Where possible, spot-check:
50- Recalculate a few key numbers independently
51- Verify that subtotals sum to totals
52- Check that percentages sum to 100% (or close to it) where expected
53- Confirm that YoY/MoM comparisons use the correct base periods
54- Validate that filters are applied consistently across all metrics
56Apply the result sanity-checking techniques below (magnitude checks, cross-validation, red-flag detection).

4. Verify Calculations and Aggregations

Where possible, spot-check:

  • Recalculate a few key numbers independently
  • Verify that subtotals sum to totals
  • Check that percentages sum to 100% (or close to it) where expected
  • Confirm that YoY/MoM comparisons use the correct base periods
  • Validate that filters are applied consistently across all metrics

Apply the result sanity-checking techniques below (magnitude checks, cross-validation, red-flag detection).

Raw lines 46 to 57
58### 5. Assess Visualizations
60If the analysis includes charts:
62- Do axes start at appropriate values (zero for bar charts)?
63- Are scales consistent across comparison charts?
64- Do chart titles accurately describe what's shown?
65- Could the visualization mislead a quick reader?
66- Are there truncated axes, inconsistent intervals, or 3D effects that distort perception?

5. Assess Visualizations

If the analysis includes charts:

  • Do axes start at appropriate values (zero for bar charts)?
  • Are scales consistent across comparison charts?
  • Do chart titles accurately describe what's shown?
  • Could the visualization mislead a quick reader?
  • Are there truncated axes, inconsistent intervals, or 3D effects that distort perception?
Raw lines 58 to 67
68### 6. Evaluate Narrative and Conclusions
70Review whether:
72- Conclusions are supported by the data shown
73- Alternative explanations are acknowledged
74- Uncertainty is communicated appropriately
75- Recommendations follow logically from findings
76- The level of confidence matches the strength of evidence

6. Evaluate Narrative and Conclusions

Review whether:

  • Conclusions are supported by the data shown
  • Alternative explanations are acknowledged
  • Uncertainty is communicated appropriately
  • Recommendations follow logically from findings
  • The level of confidence matches the strength of evidence
Raw lines 68 to 77
78### 7. Suggest Improvements
80Provide specific, actionable suggestions:
82- Additional analyses that would strengthen the conclusions
83- Caveats or limitations that should be noted
84- Better visualizations or framings for key points
85- Missing context that stakeholders would want

7. Suggest Improvements

Provide specific, actionable suggestions:

  • Additional analyses that would strengthen the conclusions
  • Caveats or limitations that should be noted
  • Better visualizations or framings for key points
  • Missing context that stakeholders would want
Raw lines 78 to 86
87### 8. Generate Confidence Assessment
89Rate the analysis on a 3-level scale:
91**Ready to share** -- Analysis is methodologically sound, calculations verified, caveats noted. Minor suggestions for improvement but nothing blocking.
93**Share with noted caveats** -- Analysis is largely correct but has specific limitations or assumptions that must be communicated to stakeholders. List the required caveats.
95**Needs revision** -- Found specific errors, methodological issues, or missing analyses that should be addressed before sharing. List the required changes with priority order.

8. Generate Confidence Assessment

Rate the analysis on a 3-level scale:

Ready to share -- Analysis is methodologically sound, calculations verified, caveats noted. Minor suggestions for improvement but nothing blocking.

Share with noted caveats -- Analysis is largely correct but has specific limitations or assumptions that must be communicated to stakeholders. List the required caveats.

Needs revision -- Found specific errors, methodological issues, or missing analyses that should be addressed before sharing. List the required changes with priority order.

Raw lines 87 to 96
97## Output Format
99```
100## Validation Report
102### Overall Assessment: [Ready to share | Share with caveats | Needs revision]
104### Methodology Review
105[Findings about approach, data selection, definitions]
107### Issues Found
1081. [Severity: High/Medium/Low] [Issue description and impact]
1092. ...
111### Calculation Spot-Checks
112- [Metric]: [Verified / Discrepancy found]
113- ...
115### Visualization Review
116[Any issues with charts or visual presentation]
118### Suggested Improvements
1191. [Improvement and why it matters]
1202. ...
122### Required Caveats for Stakeholders
123- [Caveat that must be communicated]
124- ...
125```
127---

Output Format

## Validation Report

### Overall Assessment: [Ready to share | Share with caveats | Needs revision]

### Methodology Review
[Findings about approach, data selection, definitions]

### Issues Found
1. [Severity: High/Medium/Low] [Issue description and impact]
2. ...

### Calculation Spot-Checks
- [Metric]: [Verified / Discrepancy found]
- ...

### Visualization Review
[Any issues with charts or visual presentation]

### Suggested Improvements
1. [Improvement and why it matters]
2. ...

### Required Caveats for Stakeholders
- [Caveat that must be communicated]
- ...

Raw lines 97 to 128
129## Pre-Delivery QA Checklist
131Run through this checklist before sharing any analysis with stakeholders.

Pre-Delivery QA Checklist

Run through this checklist before sharing any analysis with stakeholders.

Raw lines 129 to 132
133### Data Quality Checks
135- [ ] **Source verification**: Confirmed which tables/data sources were used. Are they the right ones for this question?
136- [ ] **Freshness**: Data is current enough for the analysis. Noted the "as of" date.
137- [ ] **Completeness**: No unexpected gaps in time series or missing segments.
138- [ ] **Null handling**: Checked null rates in key columns. Nulls are handled appropriately (excluded, imputed, or flagged).
139- [ ] **Deduplication**: Confirmed no double-counting from bad joins or duplicate source records.
140- [ ] **Filter verification**: All WHERE clauses and filters are correct. No unintended exclusions.

Data Quality Checks

  • [ ] Source verification: Confirmed which tables/data sources were used. Are they the right ones for this question?
  • [ ] Freshness: Data is current enough for the analysis. Noted the "as of" date.
  • [ ] Completeness: No unexpected gaps in time series or missing segments.
  • [ ] Null handling: Checked null rates in key columns. Nulls are handled appropriately (excluded, imputed, or flagged).
  • [ ] Deduplication: Confirmed no double-counting from bad joins or duplicate source records.
  • [ ] Filter verification: All WHERE clauses and filters are correct. No unintended exclusions.
Raw lines 133 to 141
142### Calculation Checks
144- [ ] **Aggregation logic**: GROUP BY includes all non-aggregated columns. Aggregation level matches the analysis grain.
145- [ ] **Denominator correctness**: Rate and percentage calculations use the right denominator. Denominators are non-zero.
146- [ ] **Date alignment**: Comparisons use the same time period length. Partial periods are excluded or noted.
147- [ ] **Join correctness**: JOIN types are appropriate (INNER vs LEFT). Many-to-many joins haven't inflated counts.
148- [ ] **Metric definitions**: Metrics match how stakeholders define them. Any deviations are noted.
149- [ ] **Subtotals sum**: Parts add up to the whole where expected. If they don't, explain why (e.g., overlap).

Calculation Checks

  • [ ] Aggregation logic: GROUP BY includes all non-aggregated columns. Aggregation level matches the analysis grain.
  • [ ] Denominator correctness: Rate and percentage calculations use the right denominator. Denominators are non-zero.
  • [ ] Date alignment: Comparisons use the same time period length. Partial periods are excluded or noted.
  • [ ] Join correctness: JOIN types are appropriate (INNER vs LEFT). Many-to-many joins haven't inflated counts.
  • [ ] Metric definitions: Metrics match how stakeholders define them. Any deviations are noted.
  • [ ] Subtotals sum: Parts add up to the whole where expected. If they don't, explain why (e.g., overlap).
Raw lines 142 to 150
151### Reasonableness Checks
153- [ ] **Magnitude**: Numbers are in a plausible range. Revenue isn't negative. Percentages are between 0-100%.
154- [ ] **Trend continuity**: No unexplained jumps or drops in time series.
155- [ ] **Cross-reference**: Key numbers match other known sources (dashboards, previous reports, finance data).
156- [ ] **Order of magnitude**: Total revenue is in the right ballpark. User counts match known figures.
157- [ ] **Edge cases**: What happens at the boundaries? Empty segments, zero-activity periods, new entities.

Reasonableness Checks

  • [ ] Magnitude: Numbers are in a plausible range. Revenue isn't negative. Percentages are between 0-100%.
  • [ ] Trend continuity: No unexplained jumps or drops in time series.
  • [ ] Cross-reference: Key numbers match other known sources (dashboards, previous reports, finance data).
  • [ ] Order of magnitude: Total revenue is in the right ballpark. User counts match known figures.
  • [ ] Edge cases: What happens at the boundaries? Empty segments, zero-activity periods, new entities.
Raw lines 151 to 158
159### Presentation Checks
161- [ ] **Chart accuracy**: Bar charts start at zero. Axes are labeled. Scales are consistent across panels.
162- [ ] **Number formatting**: Appropriate precision. Consistent currency/percentage formatting. Thousands separators where needed.
163- [ ] **Title clarity**: Titles state the insight, not just the metric. Date ranges are specified.
164- [ ] **Caveat transparency**: Known limitations and assumptions are stated explicitly.
165- [ ] **Reproducibility**: Someone else could recreate this analysis from the documentation provided.

Presentation Checks

  • [ ] Chart accuracy: Bar charts start at zero. Axes are labeled. Scales are consistent across panels.
  • [ ] Number formatting: Appropriate precision. Consistent currency/percentage formatting. Thousands separators where needed.
  • [ ] Title clarity: Titles state the insight, not just the metric. Date ranges are specified.
  • [ ] Caveat transparency: Known limitations and assumptions are stated explicitly.
  • [ ] Reproducibility: Someone else could recreate this analysis from the documentation provided.
Raw lines 159 to 166
167## Common Data Analysis Pitfalls

Common Data Analysis Pitfalls

Raw lines 167 to 168
169### Join Explosion
171**The problem**: A many-to-many join silently multiplies rows, inflating counts and sums.
173**How to detect**:
174```sql
175-- Check row count before and after join
176SELECT COUNT(*) FROM table_a; -- 1,000
177SELECT COUNT(*) FROM table_a a JOIN table_b b ON a.id = b.a_id; -- 3,500 (uh oh)
178```
180**How to prevent**:
181- Always check row counts after joins
182- If counts increase, investigate the join relationship (is it really 1:1 or 1:many?)
183- Use `COUNT(DISTINCT a.id)` instead of `COUNT(*)` when counting entities through joins

Join Explosion

The problem: A many-to-many join silently multiplies rows, inflating counts and sums.

How to detect:

-- Check row count before and after join
SELECT COUNT(*) FROM table_a;  -- 1,000
SELECT COUNT(*) FROM table_a a JOIN table_b b ON a.id = b.a_id;  -- 3,500 (uh oh)

How to prevent:

  • Always check row counts after joins
  • If counts increase, investigate the join relationship (is it really 1:1 or 1:many?)
  • Use COUNT(DISTINCT a.id) instead of COUNT(*) when counting entities through joins
Raw lines 169 to 184
185### Survivorship Bias
187**The problem**: Analyzing only entities that exist today, ignoring those that were deleted, churned, or failed.
189**Examples**:
190- Analyzing user behavior of "current users" misses churned users
191- Looking at "companies using our product" ignores those who evaluated and left
192- Studying properties of "successful" outcomes without "unsuccessful" ones
194**How to prevent**: Ask "who is NOT in this dataset?" before drawing conclusions.

Survivorship Bias

The problem: Analyzing only entities that exist today, ignoring those that were deleted, churned, or failed.

Examples:

  • Analyzing user behavior of "current users" misses churned users
  • Looking at "companies using our product" ignores those who evaluated and left
  • Studying properties of "successful" outcomes without "unsuccessful" ones

How to prevent: Ask "who is NOT in this dataset?" before drawing conclusions.

Raw lines 185 to 195
196### Incomplete Period Comparison
198**The problem**: Comparing a partial period to a full period.
200**Examples**:
201- "January revenue is $500K vs. December's $800K" -- but January isn't over yet
202- "This week's signups are down" -- checked on Wednesday, comparing to a full prior week
204**How to prevent**: Always filter to complete periods, or compare same-day-of-month / same-number-of-days.

Incomplete Period Comparison

The problem: Comparing a partial period to a full period.

Examples:

  • "January revenue is $500K vs. December's $800K" -- but January isn't over yet
  • "This week's signups are down" -- checked on Wednesday, comparing to a full prior week

How to prevent: Always filter to complete periods, or compare same-day-of-month / same-number-of-days.

Raw lines 196 to 205
206### Denominator Shifting
208**The problem**: The denominator changes between periods, making rates incomparable.
210**Examples**:
211- Conversion rate improves because you changed how you count "eligible" users
212- Churn rate changes because the definition of "active" was updated
214**How to prevent**: Use consistent definitions across all compared periods. Note any definition changes.

Denominator Shifting

The problem: The denominator changes between periods, making rates incomparable.

Examples:

  • Conversion rate improves because you changed how you count "eligible" users
  • Churn rate changes because the definition of "active" was updated

How to prevent: Use consistent definitions across all compared periods. Note any definition changes.

Raw lines 206 to 215
216### Average of Averages
218**The problem**: Averaging pre-computed averages gives wrong results when group sizes differ.
220**Example**:
221- Group A: 100 users, average revenue $50
222- Group B: 10 users, average revenue $200
223- Wrong: Average of averages = ($50 + $200) / 2 = $125
224- Right: Weighted average = (100*$50 + 10*$200) / 110 = $63.64
226**How to prevent**: Always aggregate from raw data. Never average pre-aggregated averages.

Average of Averages

The problem: Averaging pre-computed averages gives wrong results when group sizes differ.

Example:

  • Group A: 100 users, average revenue $50
  • Group B: 10 users, average revenue $200
  • Wrong: Average of averages = ($50 + $200) / 2 = $125
  • Right: Weighted average = (100*$50 + 10*$200) / 110 = $63.64

How to prevent: Always aggregate from raw data. Never average pre-aggregated averages.

Raw lines 216 to 227
228### Timezone Mismatches
230**The problem**: Different data sources use different timezones, causing misalignment.
232**Examples**:
233- Event timestamps in UTC vs. user-facing dates in local time
234- Daily rollups that use different cutoff times
236**How to prevent**: Standardize all timestamps to a single timezone (UTC recommended) before analysis. Document the timezone used.

Timezone Mismatches

The problem: Different data sources use different timezones, causing misalignment.

Examples:

  • Event timestamps in UTC vs. user-facing dates in local time
  • Daily rollups that use different cutoff times

How to prevent: Standardize all timestamps to a single timezone (UTC recommended) before analysis. Document the timezone used.

Raw lines 228 to 237
238### Selection Bias in Segmentation
240**The problem**: Segments are defined by the outcome you're measuring, creating circular logic.
242**Examples**:
243- "Users who completed onboarding have higher retention" -- obviously, they self-selected
244- "Power users generate more revenue" -- they became power users BY generating revenue
246**How to prevent**: Define segments based on pre-treatment characteristics, not outcomes.

Selection Bias in Segmentation

The problem: Segments are defined by the outcome you're measuring, creating circular logic.

Examples:

  • "Users who completed onboarding have higher retention" -- obviously, they self-selected
  • "Power users generate more revenue" -- they became power users BY generating revenue

How to prevent: Define segments based on pre-treatment characteristics, not outcomes.

Raw lines 238 to 247
248### Other Statistical Traps
250- **Simpson's paradox**: Trend reverses when data is aggregated vs. segmented
251- **Correlation presented as causation** without supporting evidence
252- **Small sample sizes** leading to unreliable conclusions
253- **Outliers disproportionately affecting averages** (should medians be used instead?)
254- **Multiple testing / cherry-picking** significant results
255- **Look-ahead bias**: Using future information to explain past events
256- **Cherry-picked time ranges** that favor a particular narrative

Other Statistical Traps

  • Simpson's paradox: Trend reverses when data is aggregated vs. segmented
  • Correlation presented as causation without supporting evidence
  • Small sample sizes leading to unreliable conclusions
  • Outliers disproportionately affecting averages (should medians be used instead?)
  • Multiple testing / cherry-picking significant results
  • Look-ahead bias: Using future information to explain past events
  • Cherry-picked time ranges that favor a particular narrative
Raw lines 248 to 257
258## Result Sanity Checking

Result Sanity Checking

Raw lines 258 to 259
260### Magnitude Checks
262For any key number in your analysis, verify it passes the "smell test":
264| Metric Type | Sanity Check |
265|---|---|
266| User counts | Does this match known MAU/DAU figures? |
267| Revenue | Is this in the right order of magnitude vs. known ARR? |
268| Conversion rates | Is this between 0% and 100%? Does it match dashboard figures? |
269| Growth rates | Is 50%+ MoM growth realistic, or is there a data issue? |
270| Averages | Is the average reasonable given what you know about the distribution? |
271| Percentages | Do segment percentages sum to ~100%? |

Magnitude Checks

For any key number in your analysis, verify it passes the "smell test":

Metric TypeSanity Check
User countsDoes this match known MAU/DAU figures?
RevenueIs this in the right order of magnitude vs. known ARR?
Conversion ratesIs this between 0% and 100%? Does it match dashboard figures?
Growth ratesIs 50%+ MoM growth realistic, or is there a data issue?
AveragesIs the average reasonable given what you know about the distribution?
PercentagesDo segment percentages sum to ~100%?
Raw lines 260 to 272
273### Cross-Validation Techniques
2751. **Calculate the same metric two different ways** and verify they match
2762. **Spot-check individual records** -- pick a few specific entities and trace their data manually
2773. **Compare to known benchmarks** -- match against published dashboards, finance reports, or prior analyses
2784. **Reverse engineer** -- if total revenue is X, does per-user revenue times user count approximately equal X?
2795. **Boundary checks** -- what happens when you filter to a single day, a single user, or a single category? Are those micro-results sensible?

Cross-Validation Techniques

  1. Calculate the same metric two different ways and verify they match
  2. Spot-check individual records -- pick a few specific entities and trace their data manually
  3. Compare to known benchmarks -- match against published dashboards, finance reports, or prior analyses
  4. Reverse engineer -- if total revenue is X, does per-user revenue times user count approximately equal X?
  5. Boundary checks -- what happens when you filter to a single day, a single user, or a single category? Are those micro-results sensible?
Raw lines 273 to 280
281### Red Flags That Warrant Investigation
283- Any metric that changed by more than 50% period-over-period without an obvious cause
284- Counts or sums that are exact round numbers (suggests a filter or default value issue)
285- Rates exactly at 0% or 100% (may indicate incomplete data)
286- Results that perfectly confirm the hypothesis (reality is usually messier)
287- Identical values across time periods or segments (suggests the query is ignoring a dimension)

Red Flags That Warrant Investigation

  • Any metric that changed by more than 50% period-over-period without an obvious cause
  • Counts or sums that are exact round numbers (suggests a filter or default value issue)
  • Rates exactly at 0% or 100% (may indicate incomplete data)
  • Results that perfectly confirm the hypothesis (reality is usually messier)
  • Identical values across time periods or segments (suggests the query is ignoring a dimension)
Raw lines 281 to 288
289## Documentation Standards for Reproducibility

Documentation Standards for Reproducibility

Raw lines 289 to 290
291### Analysis Documentation Template
293Every non-trivial analysis should include:
295```markdown
296## Analysis: [Title]
298### Question
299[The specific question being answered]
301### Data Sources
302- Table: [schema.table_name] (as of [date])
303- Table: [schema.other_table] (as of [date])
304- File: [filename] (source: [where it came from])
306### Definitions
307- [Metric A]: [Exactly how it's calculated]
308- [Segment X]: [Exactly how membership is determined]
309- [Time period]: [Start date] to [end date], [timezone]
311### Methodology
3121. [Step 1 of the analysis approach]
3132. [Step 2]
3143. [Step 3]
316### Assumptions and Limitations
317- [Assumption 1 and why it's reasonable]
318- [Limitation 1 and its potential impact on conclusions]
320### Key Findings
3211. [Finding 1 with supporting evidence]
3222. [Finding 2 with supporting evidence]
324### SQL Queries
325[All queries used, with comments]
327### Caveats
328- [Things the reader should know before acting on this]
329```

Analysis Documentation Template

Every non-trivial analysis should include:

## Analysis: [Title]

### Question
[The specific question being answered]

### Data Sources
- Table: [schema.table_name] (as of [date])
- Table: [schema.other_table] (as of [date])
- File: [filename] (source: [where it came from])

### Definitions
- [Metric A]: [Exactly how it's calculated]
- [Segment X]: [Exactly how membership is determined]
- [Time period]: [Start date] to [end date], [timezone]

### Methodology
1. [Step 1 of the analysis approach]
2. [Step 2]
3. [Step 3]

### Assumptions and Limitations
- [Assumption 1 and why it's reasonable]
- [Limitation 1 and its potential impact on conclusions]

### Key Findings
1. [Finding 1 with supporting evidence]
2. [Finding 2 with supporting evidence]

### SQL Queries
[All queries used, with comments]

### Caveats
- [Things the reader should know before acting on this]
Raw lines 291 to 330
331### Code Documentation
333For any code (SQL, Python) that may be reused:
335```python
336"""
337Analysis: Monthly Cohort Retention
338Author: [Name]
339Date: [Date]
340Data Source: events table, users table
341Last Validated: [Date] -- results matched dashboard within 2%
343Purpose:
344 Calculate monthly user retention cohorts based on first activity date.
346Assumptions:
347 - "Active" means at least one event in the month
348 - Excludes test/internal accounts (user_type != 'internal')
349 - Uses UTC dates throughout
351Output:
352 Cohort retention matrix with cohort_month rows and months_since_signup columns.
353 Values are retention rates (0-100%).
354"""
355```

Code Documentation

For any code (SQL, Python) that may be reused:

"""
Analysis: Monthly Cohort Retention
Author: [Name]
Date: [Date]
Data Source: events table, users table
Last Validated: [Date] -- results matched dashboard within 2%

Purpose:
    Calculate monthly user retention cohorts based on first activity date.

Assumptions:
    - "Active" means at least one event in the month
    - Excludes test/internal accounts (user_type != 'internal')
    - Uses UTC dates throughout

Output:
    Cohort retention matrix with cohort_month rows and months_since_signup columns.
    Values are retention rates (0-100%).
"""
Raw lines 331 to 356
357### Version Control for Analyses
359- Save queries and code in version control (git) or a shared docs system
360- Note the date of the data snapshot used
361- If an analysis is re-run with updated data, document what changed and why
362- Link to prior versions of recurring analyses for trend comparison

Version Control for Analyses

  • Save queries and code in version control (git) or a shared docs system
  • Note the date of the data snapshot used
  • If an analysis is re-run with updated data, document what changed and why
  • Link to prior versions of recurring analyses for trend comparison
Raw lines 357 to 363
364## Examples
366```
367/validate-data Review this quarterly revenue analysis before I send it to the exec team: [analysis]
368```
370```
371/validate-data Check my churn analysis -- I'm comparing Q4 churn rates to Q3 but Q4 has a shorter measurement window
372```
374```
375/validate-data Here's a SQL query and its results for our conversion funnel. Does the logic look right? [query + results]
376```

Examples

/validate-data Review this quarterly revenue analysis before I send it to the exec team: [analysis]
/validate-data Check my churn analysis -- I'm comparing Q4 churn rates to Q3 but Q4 has a shorter measurement window
/validate-data Here's a SQL query and its results for our conversion funnel. Does the logic look right? [query + results]
Raw lines 364 to 377
378## Tips
380- Run /validate-data before any high-stakes presentation or decision
381- Even quick analyses benefit from a sanity check -- it takes a minute and can save your credibility
382- If the validation finds issues, fix them and re-validate
383- Share the validation output alongside your analysis to build stakeholder confidence

Tips

  • Run /validate-data before any high-stakes presentation or decision
  • Even quick analyses benefit from a sanity check -- it takes a minute and can save your credibility
  • If the validation finds issues, fix them and re-validate
  • Share the validation output alongside your analysis to build stakeholder confidence
Raw lines 378 to 383

From anthropics/knowledge-work-plugins at 2574e29, 2026-10-27. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.