本文へ移動
cccskills
無料GitHub で公開

legacy-modernization

Apply this opinionated workflow when modernizing legacy systems: strangler fig pattern, branch by abstraction, characterization tests, incremental monolith decomposition, framework upgrades, feature-flagged migration with rollback.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md4.1 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Legacy Modernization

Incremental migration of running systems. The constraint that shapes every decision here: the system is in production and must keep working while it changes.

The sequence

Order matters more than the individual techniques — each step exists to make the next one safe.

  1. Characterize before changing. Write tests that pin current behaviour, bugs included. You are not testing what the code should do; you are recording what it does, so a behaviour diff becomes visible. When an assertion looks wrong, that is the point — write it down and say so:

    def test_domestic_lightweight():
        order = {"weight": 5, "destination": "domestic", "priority": False}
        # Current behaviour: nothing charged under 10kg. Looks like a bug —
        # pin it here, fix it as its own change after the migration lands.
        assert calculate_shipping_cost(order) == 0.0
    

    Golden-master or approval tests (approvaltests, syrupy) get coverage over gnarly code fastest, because they capture output wholesale instead of requiring you to understand it first.

    Then check the net actually holds: run a mutation tester over the code you are about to change. Characterization suites routinely look thorough and still miss the exact branch you're about to touch — surviving mutants tell you where, before an incident does.

  2. Insert a seam. Branch by abstraction: introduce an interface over the thing you're replacing, and route all callers through it while it still delegates to the old code. This is a no-op change you can ship and verify on its own.

  3. Build the replacement behind the seam, dark or flagged off. It isn't serving traffic yet, so it can be wrong.

  4. Shift traffic incrementally with a flag — internal users, then a percentage, then all. Each step is reversible in the time it takes to flip the flag, which is the property that makes this safe. Name the rollback trigger as a metric and a threshold before each ramp ("error rate above 0.5% for five minutes → back to the previous percentage"). Deciding what counts as bad while it is happening is how a ramp turns into an argument instead of a rollback.

  5. Delete the old path only after the new one has run clean in production for long enough to cover its slow cases — month-end jobs, seasonal peaks, the annual report. Deleting early is how you discover a code path nobody remembered.

Conventions

  • No big-bang rewrites. A rewrite competes with a moving target: the old system keeps shipping features while the new one catches up. Every successful modernization in this playbook is incremental for that reason.
  • Every step ships and is reversible. A migration that only works when fully complete has no safe abort point — and something always interrupts a long migration.
  • Parallel-run before cut-over for anything computing money or state. Run old and new against the same input, compare outputs, log divergence, keep serving the old result. Divergence you can see beats divergence a customer reports.
  • Strangler fig for the overall shape: a facade in front, routing per-feature to old or new, moving one route at a time until nothing reaches the old system and it can be removed.
  • Preserve behaviour by default, including bugs. Something downstream depends on the odd ones. Fix them as separate, visible changes — never folded into a migration, where a behaviour change is indistinguishable from a migration defect.
  • Database migrations expand and contract: add the new column, dual-write, backfill, switch reads, then drop the old — each phase deployable on its own, each compatible with the version of the code running beside it.
  • New code written against the legacy system still meets current standards. Matching the surrounding style "for consistency" is how a modernization ends with more legacy code than it started with.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Resolve CodeRabbit review feedback on a GitHub pull request. Collects every open CodeRabbit finding (inline threads, plus the nitpick and outside-diff findings packed into review bodies), judges and fixes each one against the real code with subagents, unifies fixes that share a pattern, commits locally, asks before pushing, then shows every reply draft linked to its finding and posts only on approval. Runs only on top-tier models. Use on "resolve the CodeRabbit feedback", "address coderabbit comments", "answer the rabbit", "fix what CodeRabbit flagged on

日本語の概要は準備中です。原文の説明を表示しています。

alexander-danilenko/cortex-ai-skills162026年10月12日 更新

csharp

無料

Apply these opinionated C# conventions whenever writing or reviewing C# 12 / .NET 8+ code: nullable enabled with warnings as errors, records and primary constructors, pattern matching over cast chains, the Result pattern for expected failures, async all the way with CancellationToken, IOptions config, IHttpClientFactory, and never returning EF entities from an API.

日本語の概要は準備中です。原文の説明を表示しています。

alexander-danilenko/cortex-ai-skills162026年10月12日 更新

ALWAYS invoke for any task involving docstrings, JSDoc/TSDoc, or REST API documentation — even when the request seems handleable without it. Enforces Microsoft contract-first conventions and a bare-minimum rule that Claude won't apply by default: never restate the signature, drop @param/@returns that only echo names and types, always document @throws, and document data shapes as WHAT not WHY. Covers Python docstring styles (Google/NumPy/Sphinx), TSDoc tags and @inheritDoc, and API doc patterns for NestJS/Express/FastAPI/Django. Trigger on: adding or auditing docstrings, redundant or missing tags, deleting comment rot, or producing a documentation-health report. Do not skip for documentation tasks — consistent conventions are the whole point.

日本語の概要は準備中です。原文の説明を表示しています。

alexander-danilenko/cortex-ai-skills162026年10月12日 更新

Apply these opinionated .NET 8 architecture conventions whenever structuring or reviewing a backend service: clean architecture layering and which direction dependencies point, when CQRS with MediatR is worth it, cross-cutting concerns as pipeline behaviours, minimal APIs grouped by feature, keeping DbContext in Infrastructure, health checks and structured logging, WebApplicationFactory integration tests, and when AOT pays off.

日本語の概要は準備中です。原文の説明を表示しています。

alexander-danilenko/cortex-ai-skills162026年10月12日 更新

Remove signs of AI-generated writing from text. Use after drafting to make copy sound more natural and human-written. Based on Wikipedia's "Signs of AI writing" guide.

日本語の概要は準備中です。原文の説明を表示しています。

alexander-danilenko/cortex-ai-skills162026年10月12日 更新

Apply these opinionated JavaScript conventions whenever writing or reviewing JS or Node: ESM-first packaging, choosing between Promise combinators, error handling that doesn't swallow failures, AbortController for cancellation, keeping the event loop unblocked, and reaching for platform APIs before dependencies.

日本語の概要は準備中です。原文の説明を表示しています。

alexander-danilenko/cortex-ai-skills162026年10月12日 更新

alexander-danilenko のスキルをすべて見る

このスキルの問題を報告する