Check Outdated Practices
SkillDatabases & dataCheck ETL step files for outdated coding patterns and offer to fix them. Use when user mentions outdated practices, legacy code patterns, modernizing steps, or wants to check code quality of ETL steps.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Check Outdated Practices skill
What this skill tells your AI
The instructions your AI receives, as published by owid/etl in .claude/skills/check-outdated-practices/SKILL.md and read by ahel’s review.
Scan ETL step files for outdated coding patterns and offer to fix them.
Source of truth
The canonical list of outdated patterns, their scopes, severities, and messages is defined in the VSCode extension at vscode_extensions/detect-outdated-practices/src/extension.ts. Always read this file first to get the current patterns. Do not assume you know the patterns — the extension is the single source of truth and may be updated independently.
Each pattern in the extension has:
pattern: regex to detect the outdated practicemessage: describes what's wrong and what the modern replacement isseverity: warning levelscope: which file paths the pattern applies to (e.g.,snapshots/**,etl/steps/data/**)
Scope
By default, check the files involved in the current task (e.g., the steps being updated). If the user provides explicit paths or asks for a broader scan, use those instead.
Accept any of:
- A step path:
etl/steps/data/garden/wb/2026-03-25/poverty_projections.py - A namespace/version/short_name:
wb/2026-03-25/poverty_projections - A glob:
etl/steps/data/garden/wb/2026-03-25/*.py all— scan all non-archived steps (slow)
Fix guidance
When applying fixes, keep these notes in mind:
paths.regions.harmonize_names(tb):country_col,countries_file, andexcluded_countries_fileare all inferred by default — it assumes the column is"country", uses the step's.countries.json, and (when the file exists) the step's.excluded_countries.json. So a call that passes only those three defaults collapses topaths.regions.harmonize_names(tb); only pass an argument when you're overriding the default. The fallbacks come from theRegionsinstancePathFinderbuilds (self.countries_file/self.excluded_countries_fileinetl/helpers.py, defaulted insideharmonize_names) —excluded_countries_fileis wired only when the.excluded_countries.jsonis present, so dropping it is behavior-preserving exactly when the file exists. Preserve any non-default kwargs (warn_on_unused_countries,make_missing_countries_nan, etc.).- Linting: After fixing patterns, always run
make check(or let the code-quality-fixer agent handle it). In particular, don't leave extra blank lines between imports — follow the project's import style (no blank lines within import groups, one blank line between standard library and third-party groups).
Workflow
- Read
vscode_extensions/detect-outdated-practices/src/extension.tsto get the current pattern list - Identify the files to scan based on the user's scope, respecting each pattern's
scopefield - Grep for each pattern in the scoped files
- Report findings as a summary table:
| File | Issue | Line | |------|-------|------| | snapshots/wb/.../file.py | <message from extension> | 29 | - Ask the user: "Found N outdated patterns. Fix them?"
- If yes, apply the modern replacements described in each pattern's
messagefield and show a summary of changes
Signals
- GitHub stars
- 156
- Forks
- 30
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
check-outdated-practices- Source
- github.com/owid/etl