deprecation-and-migration
Skill2 starsChanged 3 days agoMITView on GitHub
Deprecation and migration discipline (code-as-liability; strangler / adapter / feature-flag patterns; churn + zombie-code handling). Use when removing an old system / API / feature, migrating users to a new implementation, or deciding maintain vs sunset.
We split this skill into the rules it gives an agent
7 rules. 0 are common, 3 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 54 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 23
Read and follow framework/work-principle.md before taking up work.
- Distinctive: line 89
Run whenever a change touches the shape of persisted data (a stored payload, event, row, document or file format) — including a spec or …
- Very specific: line 123
Before starting a deprecation, when deciding whether to maintain a system or sunset it, and when code shows zombie signs: read and follow …
- Distinctive: line 193
No pure STALE-cleanup sweep — that's invariant 5.
- Very specific: line 194
No skill-as-mode consolidation in detail — see framework/skill-anatomy.md §consolidation mechanic.
- Distinctive: line 206
All active consumers migrated (verified by metrics / logs / grep).
- Very specific: line 209
No references to the deprecated system in the codebase — completeness proven by inventory-flip (claim of mechanism vs closed real …
“Common” is measured: kept by at least 6 in 10 of the 54 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Read and follow framework/work-principle.md before taking up work.
Resolve this reference against the framework root; retain the consumer CWD.
Skill: deprecation-and-migration
Purpose
Code is liability, not asset. Every line of code carries maintenance cost — fixing bugs, updating dependencies, applying security patches, onboarding new engineers. Deprecation is the discipline of removing code that no longer earns its effort. Migration is the process of moving users safely from old to new.
Most engineering organizations are good at building. Few are good at removing. This skill closes the gap.
Formalizes the existing STALE-CLEANUP invariant (framework/invariants.md
§5) at the skill level — when / how to deprecate is a
methodology question, not just a cleanup sweep.
Source
agent-skills at 19e49a0 (MIT License, © 2025 Addy Osmani); Forge's register of adopted methods.
Standalone
Distinct from:
skills/_protocols/skill-guardrails.md— skill-specific anti-patterns, not the deprecation lifecycle.framework/skill-anatomy.md§Consolidation mechanic — describes the skill-as-mode-absorbed mechanism. deprecation-and-migration is broader (also code, APIs, modules, whole systems — not just skills).- STALE-CLEANUP invariant (
framework/invariants.md§5) — the same-commit ref-cleanup discipline Buddy applies on removal. This skill is the decision discipline (when / how) behind that cleanup.
What only this skill delivers:
- Deprecation-decision framework (5 questions before deprecation start).
- Compulsory-vs-advisory classification with trigger conditions.
- Migration process (build replacement first → announce → incremental → remove).
- 3 migration patterns (strangler / adapter / feature flag).
- The churn rule (owner responsibility for migration).
- Zombie-code diagnosis + treatment.
When to call
- Replace an old system / API / library with a new one.
- Sunsetting a feature that is no longer needed.
- Consolidating duplicate implementations.
- Removing dead code that no one owns but everyone depends on (zombie code).
- Lifecycle planning for a new system (deprecation planning starts at design time).
- Decision: maintain a legacy system or invest in migration?
Migration-needed check (MUST before any "no migration needed")
Run whenever a change touches the shape of persisted data (a stored payload, event, row, document or file format) — including a spec or design decision that concludes "no migration needed". Judge the read path, not only the DDL:
- Name the decode path. Where is stored data read back, and is it
re-validated strictly (
extra=forbid, closed literal / enum types, required fields)? A JSON/JSONB column with no CHECK or index on the field can still break every read through a strict decoder. - Classify the change. Field removal, rename, literal / enum narrowing or a newly required field against a strict decoder = pre-change rows fail to decode.
- Pick exactly one and write it into the decision: a
schema_versionbump with a decoder for the old version; an upcast on read; or a stated empty-store precondition naming the trigger that ends it (e.g. "first real append in production") and the task or gate that must migrate before that trigger.
"No migration: no column reads the field" without step 1 is not a
valid conclusion. A real doubt here is an L2 trigger for the code
board (skills/code_review_board/SKILL.md §1.1).
Do not call for
- Pure skill-as-mode consolidation (e.g. ux_review →
spec_board mode=ux) →
framework/skill-anatomy.md§Consolidation mechanic. - Mechanical STALE-CLEANUP after a rename → the stale-cleanup sweep (invariant 5).
Process
Phases 1, 2 and 5: deciding whether and how to deprecate
Before starting a deprecation, when deciding whether to maintain a system or sunset it, and when code shows zombie
signs: read and follow skills/deprecation_and_migration/decision.md (phase 1: the five mandatory decision questions;
phase 2: compulsory vs advisory; phase 5: zombie-code signs and the binary response).
Phases 3–4: migrating and removing the old system
Once the deprecation decision stands, before building the replacement and announcing it, while migrating consumers,
when choosing a migration pattern, and before removing the old system: read and follow
skills/deprecation_and_migration/migration.md (phase 3 steps 1–4: build the replacement, announce + document with
the deprecation-notice template, migrate incrementally under the churn rule, remove the old system with the
STALE-CLEANUP inventory-flip; phase 4: strangler, adapter and feature-flag migration patterns).
Red flags
- A deprecated system without an available replacement.
- A deprecation announcement without migration tooling or documentation.
- "Soft" deprecation that has been advisory for years without progress.
- Zombie code without an owner but with active consumers.
- New features added to a deprecated system (instead of investment in the replacement).
- Deprecation without measuring current usage.
- Removing code without verifying zero active consumers.
- Violating the STALE-CLEANUP invariant (refs in active files survive after removal).
Common rationalizations
| Rationalization | Reality |
| "It still works, why remove it?" | Working code that nobody maintains accumulates security debt + complexity. Maintenance cost grows silently. |
| "Maybe we'll need it again" | If we need it again, it can be rebuilt. "Just in case" costs more than rebuild. |
| "Migration is too expensive" | Compare migration cost vs ongoing maintenance cost over 2-3 years. Migration is usually cheaper long-term. |
| "We'll deprecate after the new thing is finished" | Deprecation planning starts at design time. When the new thing is finished you'll have other priorities. Plan now. |
| "Users will migrate themselves" | They won't. Provide tooling + documentation + incentives — or do the migration yourself (churn rule). |
| "We can maintain both indefinitely" | Two systems doing the same thing = double the maintenance + testing + documentation + onboarding cost. |
| "A stub file with a pointer is enough" | Pattern break against the user mantra "no altlasten" — on clear consolidation, delete, don't archive. A stub only when there's historic value + non-trivial lookup need. |
Contract
INPUT
- Required: clearly identified subject (system / API / module / feature) to be deprecated.
- Required: answers to the 5 decision questions (phase
- — all 5 deprecation-pro.
- Required: a replacement exists or is clearly planned.
- Optional: consumer list (phase 3 step 1 — who uses it).
- Optional: migration-tooling idea (required on compulsory).
- Context:
framework/invariants.md§stale-cleanup invariant 5,framework/skill-anatomy.md§consolidation mechanic (skill-specific),skills/documentation_and_adrs/SKILL.md(ADR for a substantial deprecation decision).
OUTPUT
DELIVERS:
- Deprecation decision documented (5 answers).
- Compulsory-vs-advisory classification.
- Migration plan with the chosen pattern (strangler / adapter / feature flag).
- Deprecation notice (status / replacement / removal date / reason / migration guide).
- Removed code + tests + docs + config (at the end).
- STALE-CLEANUP complete (every active ref cleaned).
- ADR on a substantial deprecation decision.
DOES NOT DELIVER:
- No pure STALE-cleanup sweep — that's invariant 5.
- No skill-as-mode consolidation in detail — see
framework/skill-anatomy.md§consolidation mechanic.
ENABLES:
- Clean framework without zombie code.
- Safe migration without data loss or user disruption.
- Reduced maintenance cost long-term.
DONE
- Replacement production-proven, every critical use case covered.
- Migration guide exists with concrete steps + examples.
- All active consumers migrated (verified by metrics / logs / grep).
- Old code + tests + docs + config completely removed.
- No references to the deprecated system in the codebase —
completeness proven by inventory-flip (claim of mechanism vs
closed real inventory), not name-grep alone (
migration.md§Phase 3 Step 4). - Deprecation notices themselves removed (they served their purpose).
- STALE-CLEANUP complete in the removal commit.
- ADR written if applicable.
FAIL
- Retry: migration of a consumer fails → don't advance the strangler phase further; fix, then continue.
- Escalate: the 5 decision questions don't clearly yield deprecation-pro → user discussion whether the system should really go. Solution expert / council on a substantial question.
- Abort: the replacement isn't production-proven → repeat phase 1, harden the replacement first.
See also
framework/invariants.mdinvariant §5 STALE-CLEANUP — the same-commit ref-cleanup discipline.skills/shipping_and_launch/rollout.mdphase 2 feature-flag strategy — same mechanism, pre-migration use case.framework/skill-anatomy.md§Consolidation mechanics — skill-specific sub-variant.skills/documentation_and_adrs/SKILL.md— writing an ADR for substantial deprecation decisions.skills/_protocols/skill-guardrails.md— anti-patterns.
Other versions60 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 60
- addyosmani/agent-skills★ 112ksame name
- rizqinrr/viserys-agent★ 556same name
- shashankswe2020-ux/whoop-mcp★ 174same name
- drvoss/everything-copilot-cli★ 49same name
- vinvcn/addyosmani-agent-skills-zh★ 46same name
- jmxt3/gitscape.ai★ 33same name
- sampleXbro/agentsmesh★ 24same name
- jaskirat1616/grok-skills★ 22same name
- HK-hub/AgentSkills★ 6same name
- lza6/claw-code-tingfeng★ 5same name
50 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use constraint-driven-development, incremental-implementation and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MrCipherSmithSkillconstraint-driven-development
Use when a project needs a persistent, measurable quality bar — starting a project without documented standards, 'set up constraints', or when coverage/perf/a11y thresholds get re-debated per-PR. Produces CONSTRAINTS.md with enforceable numbers, ratchets, and a guard against silent weakening. NOT for throwaway prototypes or a one-off CI setup.
Also in 12 projects that use this
LLl0k0laDSkillincremental-implementation
Use when implementing any feature or change that touches more than one file. Use when you're about to write a large amount of code at once, or when a task feels too big to land in one step.
Also in 33 projects that use this
barisariburnuSkillperformance-optimization
Complete performance optimization guide for Next.js applications including frontend, backend, database, caching, and general optimization strategies. Use when improving performance, reducing bundle size, optimizing queries, or implementing caching.
Also in 35 projects that use this
OpenAISkillverification-before-completion
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
Also in 4 projects that use this
OpenAISkillfinishing-a-development-branch
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work
Also in 3 projects that use this
- +5 more from openai
In this repository85 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- adversary-test-planSkill
- api-and-interface-designSkill
- architecture-coherence-reviewSkill
- bedrock-drillSkill
- cavemanSkill
- code-review-boardSkill
- consistency-checkSkill
- councilSkill
- cross-spec-consistency-checkSkill
- deprecation-and-migrationSkill
- documentation-and-adrsSkill
- frameSkill
- frontend-design-ttySkill
- frontend-ui-engineeringSkill
- get-api-docsSkill
- impl-plan-reviewSkill
- improve-codebase-architectureSkill
- knowledge-captureSkill
- knowledge-processorSkill
- pre-build-spec-auditSkill
- retroactive-spec-updateSkill
- root-cause-fixSkill
- scopingSkill
- sectional-deep-reviewSkill
- security-and-hardeningSkill
- session-diagnosisSkill
- shipping-and-launchSkill
- show-open-tasksSkill
- source-spec-reduceSkill
- spec-authoringSkill
- spec-boardSkill
- task-creationSkill
- task-status-updateSkill
- testingSkill
- transparency-headerSkill
- ux-authoringSkill
- workflow-routerSkill
- youtube-subtitlesSkill
- adversary-test-planSkill
- api-and-interface-designSkill
- architecture-coherence-reviewSkill
- bedrock-drillSkill
- cavemanSkill
- close-retroSkill
- code-review-boardSkill
- consistency-checkSkill
- convergence-loopSkill
- councilSkill
- cross-spec-consistency-checkSkill
- documentation-and-adrsSkill
- frameSkill
- frontend-design-ttySkill
- frontend-ui-engineeringSkill
- get-api-docsSkill
- impl-plan-reviewSkill
- improve-codebase-architectureSkill
- knowledge-captureSkill
- knowledge-processorSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

