[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aptos-modernize-move":3,"mdc-d1aqka-key":36,"related-repo-aptos-modernize-move":1714,"related-org-aptos-modernize-move":1809},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":31,"sourceUrl":34,"mdContent":35},"modernize-move","modernize Move V1 contracts to V2","Detects and modernizes outdated Move V1 syntax, patterns, and APIs to Move V2+. Use when upgrading legacy contracts, migrating to modern syntax, or converting old patterns to current best practices. NOT for writing new contracts (use write-contracts) or fixing bugs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aptos","Aptos Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faptos.png","aptos-labs",[13,17,20],{"name":14,"slug":15,"type":16},"Migration","migration","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":21,"slug":22,"type":16},"Code Analysis","code-analysis",18,"https:\u002F\u002Fgithub.com\u002Faptos-labs\u002Faptos-agent-skills","2026-07-12T08:07:10.226223","MIT",8,[29,30],"agent-skills","blockchain",{"repoUrl":24,"stars":23,"forks":27,"topics":32,"description":33},[29,30],"AI skills for building secure, modern Aptos dApps — Move contracts, TypeScript SDK, and frontend integration for Claude Code, Cursor, and Copilot.","https:\u002F\u002Fgithub.com\u002Faptos-labs\u002Faptos-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fmove\u002Fmodernize-move","---\nname: modernize-move\ndescription: >-\n  Detects and modernizes outdated Move V1 syntax, patterns, and APIs to Move V2+. Use when upgrading legacy contracts,\n  migrating to modern syntax, or converting old patterns to current best practices. NOT for writing new contracts (use\n  write-contracts) or fixing bugs.\nlicense: MIT\nmetadata:\n  author: aptos-labs\n  version: \"1.0\"\n  category: move\n  tags: [\"modernization\", \"migration\", \"v2\", \"refactoring\", \"syntax\"]\n  priority: high\nallowed-tools: Read Glob Grep Write Edit Bash AskUserQuestion\n---\n\n# Skill: modernize-move\n\nDetect and modernize outdated Move V1 syntax, patterns, and APIs to Move V2+. Preserves correctness through tiered\ntransformations with test verification after each tier.\n\n## Essential Principles\n\nFive non-negotiable rules for every modernization:\n\n1. **Test safety net is mandatory** WHY: Modernization must preserve behavior. No tests = no safety net. If no tests\n   exist, invoke `generate-tests` skill first to create comprehensive tests before making any changes.\n\n2. **Analyze before modifying** WHY: The user must see exactly what will change and confirm the scope. Never\n   surprise-edit code. Present the full analysis report and wait for confirmation.\n\n3. **Tiered execution order** WHY: Syntax changes (Tier 1) are zero-risk. API migrations (Tier 3) change semantics.\n   Always apply safest changes first so riskier changes build on a clean, verified foundation.\n\n4. **Verify after each tier** WHY: If tests break, you know exactly which tier caused it. Revert that tier and\n   investigate before proceeding. Never apply the next tier on a broken baseline.\n\n5. **Preserve error code values** WHY: Tests use `#[expected_failure(abort_code = N)]`. Changing numeric values breaks\n   tests silently. When creating named constants, the numeric value MUST match the original literal.\n\n## When to Use This Skill\n\n- Upgrading Move V1 contracts to V2 syntax\n- Migrating `public(friend)` to `package fun`\n- Converting `vector::borrow` to index notation\n- Converting `while` loops with counters to `for` range loops\n- Replacing manual vector iteration with stdlib inline functions (`vector::for_each_ref`, `vector::map`, `vector::fold`,\n  etc.) and lambdas\n- Replacing magic abort numbers with named constants\n- Migrating legacy `coin`\u002F`TokenV1` to modern `fungible_asset`\u002FDigital Assets\n- Converting `EventHandle` to `#[event]` pattern\n- Upgrading custom signed integer workarounds to native `i8`-`i256` types\n\n## When NOT to Use This Skill\n\n- **Writing new contracts from scratch** — use `write-contracts`\n- **Fixing bugs or adding features** — modernization is structural, not functional\n- **Optimizing gas usage** — use `analyze-gas-optimization`\n- **Auditing security** — use `security-audit` (run AFTER modernization)\n\n## Workflow\n\n### Phase 1: Analyze Contract\n\n**Entry:** User provides a Move contract or project to modernize.\n\n**Actions:**\n\n1. Read all contract source files (`.move` files in `sources\u002F`)\n2. Scan for V1 patterns using detection rules from [detection-rules.md](references\u002Fdetection-rules.md):\n   - Grep for Tier 1 patterns (syntax) — highest confidence, most common\n   - Grep for Tier 2 patterns (visibility, errors, events)\n   - Grep for Tier 3 patterns (API migrations) — flag for manual review\n3. Cross-reference coupled patterns (T3-09+T3-10)\n4. Categorize each finding: line number, rule ID, pattern name, proposed change, tier, confidence\n5. Build the Analysis Report\n\n**Exit:** Analysis Report ready for presentation.\n\n### Phase 2: Present Analysis (GATE 1)\n\n**Entry:** Analysis Report complete.\n\n**Actions:**\n\n1. Present the full Analysis Report to the user in this format:\n\n```\n## Modernization Analysis Report\n\n### Summary\n- Tier 1 (Syntax): X findings\n- Tier 2 (Visibility & Errors): X findings\n- Tier 3 (API Migrations): X findings\n\n### Findings\n\n| # | File:Line | Rule | Pattern | Proposed Change | Tier | Confidence |\n|---|-----------|------|---------|-----------------|------|------------|\n| 1 | src\u002Fmod.move:15 | T1-01 | vector::borrow | → index notation | 1 | High |\n| ... | ... | ... | ... | ... | ... | ... |\n\n### Tier 3 Warnings (if any)\n- T3-03: coin → fungible_asset migration is a major rewrite (X locations)\n```\n\n2. Ask the user to choose scope:\n   - **`syntax-only`** (Tier 1 only) — zero risk, just cleaner syntax\n   - **`standard`** (Tier 1 + Tier 2) — recommended default, syntax + visibility + error constants\n   - **`full`** (all tiers) — includes API migrations, higher risk\n3. Highlight any Tier 3 items that require major rewrites\n4. If scope includes Tier 3, ask the user about deployment context:\n   - **Compatible** — Upgrading an already-deployed contract. Breaking changes are excluded even if the scope includes\n     them. Rules marked ⚠ Breaking are skipped.\n   - **Fresh deploy** — New deployment or willing to redeploy. All changes in the selected scope are applied including\n     breaking changes.\n\n**Exit:** User has confirmed scope (and deployment context if Tier 3 is included). Do NOT proceed until confirmed.\n\n### Phase 3: Establish Test Safety Net\n\n**Entry:** User confirmed scope.\n\n**Actions:**\n\n1. Search for existing tests:\n   - `#[test_only]` modules within source files\n   - `*_tests.move` files\n   - `tests\u002F` directory\n2. If **no tests found**: stop and invoke `generate-tests` skill to create comprehensive tests first, then return here\n3. Run `aptos move test` to establish a passing baseline\n4. Record baseline: number of tests, all passing status\n\n**Exit:** All tests pass. Baseline recorded. If tests fail pre-modernization, stop and address test failures first — do\nnot modernize on a broken test suite.\n\n### Phase 4: Apply Transformations (with Feedback Loops)\n\n**Entry:** Test baseline established.\n\n**Actions — apply in tier order:**\n\n**Tier 1 (if scope includes it — always):**\n\n1. Apply all Tier 1 syntax changes per [transformation-guide.md](references\u002Ftransformation-guide.md)\n2. Run `aptos move test`\n3. If tests fail → revert all Tier 1 changes, investigate which specific change caused failure, fix and retry\n\n**Tier 2 (if scope is `standard` or `full`):** 4. Apply all Tier 2 changes per transformation guide 5. Run\n`aptos move test` 6. If tests fail → revert all Tier 2 changes, investigate and fix\n\n**Tier 3 (if scope is `full` only):** 7. Apply Tier 3 changes ONE AT A TIME (not all at once)\n\n- If deployment context is `compatible`: skip any rule marked **⚠ Breaking**. Add to the skipped list with reason\n  \"breaking change, excluded in compatible mode.\"\n- If deployment context is `fresh deploy`: apply all rules in scope normally.\n\n8. Run `aptos move test` after EACH individual Tier 3 change\n9. If tests fail → revert that specific change, note it as skipped, proceed to next Tier 3 item\n\n**Exit:** All approved changes applied, all tests passing.\n\n### Phase 5: Final Verification\n\n**Entry:** All transformations applied.\n\n**Actions:**\n\n1. Run `aptos move test --coverage`\n2. Verify test coverage is >= baseline (should be same or better)\n3. Generate Modernization Summary Report:\n\n```\n## Modernization Summary\n\n### Changes Applied\n- Tier 1: X changes (syntax)\n- Tier 2: X changes (visibility & errors)\n- Tier 3: X changes (API migrations)\n\n### Changes Skipped\n- [List any skipped items with reasons]\n\n### Test Results\n- Tests: X passing (baseline: Y)\n- Coverage: X% (baseline: Y%)\n\n### Files Modified\n- [List of modified files]\n```\n\n**Exit:** Report presented to user.\n\n## Modernization Scope Quick Reference\n\n| Scope         | Tiers      | Risk        | When to Use                                        |\n| ------------- | ---------- | ----------- | -------------------------------------------------- |\n| `syntax-only` | Tier 1     | Zero        | Just clean up syntax, no semantic changes          |\n| `standard`    | Tier 1+2   | Low         | **Default.** Syntax + visibility + error constants |\n| `full`        | Tier 1+2+3 | Medium-High | Full migration including API changes               |\n\n## Tier Quick Reference\n\n| Tier                    | What Changes                                                           | Risk        | Examples                                                                                                                                                          |\n| ----------------------- | ---------------------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 1 — Syntax              | Code reads differently, compiles identically                           | Zero        | `vector::borrow(&v, i)` → `v[i]`, `x = x + 1` → `x += 1`, `while (i \u003C n) { ... i += 1 }` → `for (i in 0..n) { ... }`                                              |\n| 2 — Visibility & Errors | Same semantics, cleaner declarations                                   | Low         | `public(friend)` → `package fun`, magic numbers → `E_*` constants                                                                                                 |\n| 3 — API Migrations      | Different APIs, same intended behavior. Most are **breaking changes**. | Medium-High | `coin` → `fungible_asset`, `SmartTable` → `BigOrderedMap`, `EventHandle` → `#[event]`, manual loops → stdlib `v.for_each_ref()`\u002F`v.map()`\u002F`v.fold()` with lambdas |\n\nSee [detection-rules.md](references\u002Fdetection-rules.md) for the complete rule catalog (22 rules across 3 tiers).\n\n## Rationalizations to Reject\n\n| Rationalization                                  | Why It's Wrong                                                                 |\n| ------------------------------------------------ | ------------------------------------------------------------------------------ |\n| \"Tests pass so the modernization is correct\"     | Tests verify behavior, not code quality. Review changes manually too.          |\n| \"This contract is simple, skip the analysis\"     | Simple contracts can have subtle patterns. Always analyze first.               |\n| \"Let's do all tiers at once to save time\"        | If tests break, you can't isolate which change caused it. Always tier.         |\n| \"The receiver-style call looks right\"            | Must verify the target function declares `self`. False positives are common.   |\n| \"Error constants can have new names and values\"  | Existing tests depend on exact numeric values. Preserve them.                  |\n| \"No tests exist, but the changes are safe\"       | Without tests there is no safety net. Generate tests first.                    |\n| \"Tier 3 changes are optional, skip the test run\" | Every change needs verification. Tier 3 is highest risk — test MORE, not less. |\n\n## Success Criteria\n\n- [ ] Analysis Report presented before any modifications\n- [ ] User confirmed modernization scope\n- [ ] Test baseline established before changes\n- [ ] Tests pass after each tier of changes\n- [ ] All error code numeric values preserved\n- [ ] No Tier 3 changes applied without `full` scope confirmation\n- [ ] Breaking changes excluded when user selected compatible mode\n- [ ] Modernization Summary Report generated\n- [ ] Test coverage maintained at or above baseline\n\n## Reference Index\n\n| File                                                          | Content                                                         |\n| ------------------------------------------------------------- | --------------------------------------------------------------- |\n| [detection-rules.md](references\u002Fdetection-rules.md)           | Complete V1 pattern detection catalog (22 rules across 3 tiers) |\n| [transformation-guide.md](references\u002Ftransformation-guide.md) | Before\u002Fafter code, safety checks, edge cases per rule           |\n| [MOVE_V2_SYNTAX.md](..\u002F..\u002F..\u002Fpatterns\u002Fmove\u002FMOVE_V2_SYNTAX.md) | Full V2 syntax reference                                        |\n| [OBJECTS.md](..\u002F..\u002F..\u002Fpatterns\u002Fmove\u002FOBJECTS.md)               | Modern object model patterns                                    |\n| [ADVANCED_TYPES.md](..\u002F..\u002F..\u002Fpatterns\u002Fmove\u002FADVANCED_TYPES.md) | Enums, signed integers, phantom types                           |\n\n**Related skills:** `generate-tests`, `write-contracts`, `security-audit`\n",{"data":37,"body":48},{"name":4,"description":6,"license":26,"metadata":38,"allowed-tools":47},{"author":11,"version":39,"category":40,"tags":41,"priority":46},"1.0","move",[42,15,43,44,45],"modernization","v2","refactoring","syntax","high","Read Glob Grep Write Edit Bash AskUserQuestion",{"type":49,"children":50},"root",[51,60,66,73,78,151,157,320,326,387,393,400,410,418,489,499,505,514,521,529,541,628,637,643,652,659,740,749,755,764,772,780,808,839,856,891,910,919,925,934,941,964,973,982,988,1109,1115,1337,1348,1354,1475,1481,1578,1584,1687],{"type":52,"tag":53,"props":54,"children":56},"element","h1",{"id":55},"skill-modernize-move",[57],{"type":58,"value":59},"text","Skill: modernize-move",{"type":52,"tag":61,"props":62,"children":63},"p",{},[64],{"type":58,"value":65},"Detect and modernize outdated Move V1 syntax, patterns, and APIs to Move V2+. Preserves correctness through tiered\ntransformations with test verification after each tier.",{"type":52,"tag":67,"props":68,"children":70},"h2",{"id":69},"essential-principles",[71],{"type":58,"value":72},"Essential Principles",{"type":52,"tag":61,"props":74,"children":75},{},[76],{"type":58,"value":77},"Five non-negotiable rules for every modernization:",{"type":52,"tag":79,"props":80,"children":81},"ol",{},[82,103,113,123,133],{"type":52,"tag":83,"props":84,"children":85},"li",{},[86,92,94,101],{"type":52,"tag":87,"props":88,"children":89},"strong",{},[90],{"type":58,"value":91},"Test safety net is mandatory",{"type":58,"value":93}," WHY: Modernization must preserve behavior. No tests = no safety net. If no tests\nexist, invoke ",{"type":52,"tag":95,"props":96,"children":98},"code",{"className":97},[],[99],{"type":58,"value":100},"generate-tests",{"type":58,"value":102}," skill first to create comprehensive tests before making any changes.",{"type":52,"tag":83,"props":104,"children":105},{},[106,111],{"type":52,"tag":87,"props":107,"children":108},{},[109],{"type":58,"value":110},"Analyze before modifying",{"type":58,"value":112}," WHY: The user must see exactly what will change and confirm the scope. Never\nsurprise-edit code. Present the full analysis report and wait for confirmation.",{"type":52,"tag":83,"props":114,"children":115},{},[116,121],{"type":52,"tag":87,"props":117,"children":118},{},[119],{"type":58,"value":120},"Tiered execution order",{"type":58,"value":122}," WHY: Syntax changes (Tier 1) are zero-risk. API migrations (Tier 3) change semantics.\nAlways apply safest changes first so riskier changes build on a clean, verified foundation.",{"type":52,"tag":83,"props":124,"children":125},{},[126,131],{"type":52,"tag":87,"props":127,"children":128},{},[129],{"type":58,"value":130},"Verify after each tier",{"type":58,"value":132}," WHY: If tests break, you know exactly which tier caused it. Revert that tier and\ninvestigate before proceeding. Never apply the next tier on a broken baseline.",{"type":52,"tag":83,"props":134,"children":135},{},[136,141,143,149],{"type":52,"tag":87,"props":137,"children":138},{},[139],{"type":58,"value":140},"Preserve error code values",{"type":58,"value":142}," WHY: Tests use ",{"type":52,"tag":95,"props":144,"children":146},{"className":145},[],[147],{"type":58,"value":148},"#[expected_failure(abort_code = N)]",{"type":58,"value":150},". Changing numeric values breaks\ntests silently. When creating named constants, the numeric value MUST match the original literal.",{"type":52,"tag":67,"props":152,"children":154},{"id":153},"when-to-use-this-skill",[155],{"type":58,"value":156},"When to Use This Skill",{"type":52,"tag":158,"props":159,"children":160},"ul",{},[161,166,185,198,218,246,251,280,299],{"type":52,"tag":83,"props":162,"children":163},{},[164],{"type":58,"value":165},"Upgrading Move V1 contracts to V2 syntax",{"type":52,"tag":83,"props":167,"children":168},{},[169,171,177,179],{"type":58,"value":170},"Migrating ",{"type":52,"tag":95,"props":172,"children":174},{"className":173},[],[175],{"type":58,"value":176},"public(friend)",{"type":58,"value":178}," to ",{"type":52,"tag":95,"props":180,"children":182},{"className":181},[],[183],{"type":58,"value":184},"package fun",{"type":52,"tag":83,"props":186,"children":187},{},[188,190,196],{"type":58,"value":189},"Converting ",{"type":52,"tag":95,"props":191,"children":193},{"className":192},[],[194],{"type":58,"value":195},"vector::borrow",{"type":58,"value":197}," to index notation",{"type":52,"tag":83,"props":199,"children":200},{},[201,202,208,210,216],{"type":58,"value":189},{"type":52,"tag":95,"props":203,"children":205},{"className":204},[],[206],{"type":58,"value":207},"while",{"type":58,"value":209}," loops with counters to ",{"type":52,"tag":95,"props":211,"children":213},{"className":212},[],[214],{"type":58,"value":215},"for",{"type":58,"value":217}," range loops",{"type":52,"tag":83,"props":219,"children":220},{},[221,223,229,231,237,238,244],{"type":58,"value":222},"Replacing manual vector iteration with stdlib inline functions (",{"type":52,"tag":95,"props":224,"children":226},{"className":225},[],[227],{"type":58,"value":228},"vector::for_each_ref",{"type":58,"value":230},", ",{"type":52,"tag":95,"props":232,"children":234},{"className":233},[],[235],{"type":58,"value":236},"vector::map",{"type":58,"value":230},{"type":52,"tag":95,"props":239,"children":241},{"className":240},[],[242],{"type":58,"value":243},"vector::fold",{"type":58,"value":245},",\netc.) and lambdas",{"type":52,"tag":83,"props":247,"children":248},{},[249],{"type":58,"value":250},"Replacing magic abort numbers with named constants",{"type":52,"tag":83,"props":252,"children":253},{},[254,256,262,264,270,272,278],{"type":58,"value":255},"Migrating legacy ",{"type":52,"tag":95,"props":257,"children":259},{"className":258},[],[260],{"type":58,"value":261},"coin",{"type":58,"value":263},"\u002F",{"type":52,"tag":95,"props":265,"children":267},{"className":266},[],[268],{"type":58,"value":269},"TokenV1",{"type":58,"value":271}," to modern ",{"type":52,"tag":95,"props":273,"children":275},{"className":274},[],[276],{"type":58,"value":277},"fungible_asset",{"type":58,"value":279},"\u002FDigital Assets",{"type":52,"tag":83,"props":281,"children":282},{},[283,284,290,291,297],{"type":58,"value":189},{"type":52,"tag":95,"props":285,"children":287},{"className":286},[],[288],{"type":58,"value":289},"EventHandle",{"type":58,"value":178},{"type":52,"tag":95,"props":292,"children":294},{"className":293},[],[295],{"type":58,"value":296},"#[event]",{"type":58,"value":298}," pattern",{"type":52,"tag":83,"props":300,"children":301},{},[302,304,310,312,318],{"type":58,"value":303},"Upgrading custom signed integer workarounds to native ",{"type":52,"tag":95,"props":305,"children":307},{"className":306},[],[308],{"type":58,"value":309},"i8",{"type":58,"value":311},"-",{"type":52,"tag":95,"props":313,"children":315},{"className":314},[],[316],{"type":58,"value":317},"i256",{"type":58,"value":319}," types",{"type":52,"tag":67,"props":321,"children":323},{"id":322},"when-not-to-use-this-skill",[324],{"type":58,"value":325},"When NOT to Use This Skill",{"type":52,"tag":158,"props":327,"children":328},{},[329,345,355,370],{"type":52,"tag":83,"props":330,"children":331},{},[332,337,339],{"type":52,"tag":87,"props":333,"children":334},{},[335],{"type":58,"value":336},"Writing new contracts from scratch",{"type":58,"value":338}," — use ",{"type":52,"tag":95,"props":340,"children":342},{"className":341},[],[343],{"type":58,"value":344},"write-contracts",{"type":52,"tag":83,"props":346,"children":347},{},[348,353],{"type":52,"tag":87,"props":349,"children":350},{},[351],{"type":58,"value":352},"Fixing bugs or adding features",{"type":58,"value":354}," — modernization is structural, not functional",{"type":52,"tag":83,"props":356,"children":357},{},[358,363,364],{"type":52,"tag":87,"props":359,"children":360},{},[361],{"type":58,"value":362},"Optimizing gas usage",{"type":58,"value":338},{"type":52,"tag":95,"props":365,"children":367},{"className":366},[],[368],{"type":58,"value":369},"analyze-gas-optimization",{"type":52,"tag":83,"props":371,"children":372},{},[373,378,379,385],{"type":52,"tag":87,"props":374,"children":375},{},[376],{"type":58,"value":377},"Auditing security",{"type":58,"value":338},{"type":52,"tag":95,"props":380,"children":382},{"className":381},[],[383],{"type":58,"value":384},"security-audit",{"type":58,"value":386}," (run AFTER modernization)",{"type":52,"tag":67,"props":388,"children":390},{"id":389},"workflow",[391],{"type":58,"value":392},"Workflow",{"type":52,"tag":394,"props":395,"children":397},"h3",{"id":396},"phase-1-analyze-contract",[398],{"type":58,"value":399},"Phase 1: Analyze Contract",{"type":52,"tag":61,"props":401,"children":402},{},[403,408],{"type":52,"tag":87,"props":404,"children":405},{},[406],{"type":58,"value":407},"Entry:",{"type":58,"value":409}," User provides a Move contract or project to modernize.",{"type":52,"tag":61,"props":411,"children":412},{},[413],{"type":52,"tag":87,"props":414,"children":415},{},[416],{"type":58,"value":417},"Actions:",{"type":52,"tag":79,"props":419,"children":420},{},[421,442,474,479,484],{"type":52,"tag":83,"props":422,"children":423},{},[424,426,432,434,440],{"type":58,"value":425},"Read all contract source files (",{"type":52,"tag":95,"props":427,"children":429},{"className":428},[],[430],{"type":58,"value":431},".move",{"type":58,"value":433}," files in ",{"type":52,"tag":95,"props":435,"children":437},{"className":436},[],[438],{"type":58,"value":439},"sources\u002F",{"type":58,"value":441},")",{"type":52,"tag":83,"props":443,"children":444},{},[445,447,454,456],{"type":58,"value":446},"Scan for V1 patterns using detection rules from ",{"type":52,"tag":448,"props":449,"children":451},"a",{"href":450},"references\u002Fdetection-rules.md",[452],{"type":58,"value":453},"detection-rules.md",{"type":58,"value":455},":\n",{"type":52,"tag":158,"props":457,"children":458},{},[459,464,469],{"type":52,"tag":83,"props":460,"children":461},{},[462],{"type":58,"value":463},"Grep for Tier 1 patterns (syntax) — highest confidence, most common",{"type":52,"tag":83,"props":465,"children":466},{},[467],{"type":58,"value":468},"Grep for Tier 2 patterns (visibility, errors, events)",{"type":52,"tag":83,"props":470,"children":471},{},[472],{"type":58,"value":473},"Grep for Tier 3 patterns (API migrations) — flag for manual review",{"type":52,"tag":83,"props":475,"children":476},{},[477],{"type":58,"value":478},"Cross-reference coupled patterns (T3-09+T3-10)",{"type":52,"tag":83,"props":480,"children":481},{},[482],{"type":58,"value":483},"Categorize each finding: line number, rule ID, pattern name, proposed change, tier, confidence",{"type":52,"tag":83,"props":485,"children":486},{},[487],{"type":58,"value":488},"Build the Analysis Report",{"type":52,"tag":61,"props":490,"children":491},{},[492,497],{"type":52,"tag":87,"props":493,"children":494},{},[495],{"type":58,"value":496},"Exit:",{"type":58,"value":498}," Analysis Report ready for presentation.",{"type":52,"tag":394,"props":500,"children":502},{"id":501},"phase-2-present-analysis-gate-1",[503],{"type":58,"value":504},"Phase 2: Present Analysis (GATE 1)",{"type":52,"tag":61,"props":506,"children":507},{},[508,512],{"type":52,"tag":87,"props":509,"children":510},{},[511],{"type":58,"value":407},{"type":58,"value":513}," Analysis Report complete.",{"type":52,"tag":61,"props":515,"children":516},{},[517],{"type":52,"tag":87,"props":518,"children":519},{},[520],{"type":58,"value":417},{"type":52,"tag":79,"props":522,"children":523},{},[524],{"type":52,"tag":83,"props":525,"children":526},{},[527],{"type":58,"value":528},"Present the full Analysis Report to the user in this format:",{"type":52,"tag":530,"props":531,"children":535},"pre",{"className":532,"code":534,"language":58},[533],"language-text","## Modernization Analysis Report\n\n### Summary\n- Tier 1 (Syntax): X findings\n- Tier 2 (Visibility & Errors): X findings\n- Tier 3 (API Migrations): X findings\n\n### Findings\n\n| # | File:Line | Rule | Pattern | Proposed Change | Tier | Confidence |\n|---|-----------|------|---------|-----------------|------|------------|\n| 1 | src\u002Fmod.move:15 | T1-01 | vector::borrow | → index notation | 1 | High |\n| ... | ... | ... | ... | ... | ... | ... |\n\n### Tier 3 Warnings (if any)\n- T3-03: coin → fungible_asset migration is a major rewrite (X locations)\n",[536],{"type":52,"tag":95,"props":537,"children":539},{"__ignoreMap":538},"",[540],{"type":58,"value":534},{"type":52,"tag":79,"props":542,"children":544},{"start":543},2,[545,595,600],{"type":52,"tag":83,"props":546,"children":547},{},[548,550],{"type":58,"value":549},"Ask the user to choose scope:\n",{"type":52,"tag":158,"props":551,"children":552},{},[553,567,581],{"type":52,"tag":83,"props":554,"children":555},{},[556,565],{"type":52,"tag":87,"props":557,"children":558},{},[559],{"type":52,"tag":95,"props":560,"children":562},{"className":561},[],[563],{"type":58,"value":564},"syntax-only",{"type":58,"value":566}," (Tier 1 only) — zero risk, just cleaner syntax",{"type":52,"tag":83,"props":568,"children":569},{},[570,579],{"type":52,"tag":87,"props":571,"children":572},{},[573],{"type":52,"tag":95,"props":574,"children":576},{"className":575},[],[577],{"type":58,"value":578},"standard",{"type":58,"value":580}," (Tier 1 + Tier 2) — recommended default, syntax + visibility + error constants",{"type":52,"tag":83,"props":582,"children":583},{},[584,593],{"type":52,"tag":87,"props":585,"children":586},{},[587],{"type":52,"tag":95,"props":588,"children":590},{"className":589},[],[591],{"type":58,"value":592},"full",{"type":58,"value":594}," (all tiers) — includes API migrations, higher risk",{"type":52,"tag":83,"props":596,"children":597},{},[598],{"type":58,"value":599},"Highlight any Tier 3 items that require major rewrites",{"type":52,"tag":83,"props":601,"children":602},{},[603,605],{"type":58,"value":604},"If scope includes Tier 3, ask the user about deployment context:\n",{"type":52,"tag":158,"props":606,"children":607},{},[608,618],{"type":52,"tag":83,"props":609,"children":610},{},[611,616],{"type":52,"tag":87,"props":612,"children":613},{},[614],{"type":58,"value":615},"Compatible",{"type":58,"value":617}," — Upgrading an already-deployed contract. Breaking changes are excluded even if the scope includes\nthem. Rules marked ⚠ Breaking are skipped.",{"type":52,"tag":83,"props":619,"children":620},{},[621,626],{"type":52,"tag":87,"props":622,"children":623},{},[624],{"type":58,"value":625},"Fresh deploy",{"type":58,"value":627}," — New deployment or willing to redeploy. All changes in the selected scope are applied including\nbreaking changes.",{"type":52,"tag":61,"props":629,"children":630},{},[631,635],{"type":52,"tag":87,"props":632,"children":633},{},[634],{"type":58,"value":496},{"type":58,"value":636}," User has confirmed scope (and deployment context if Tier 3 is included). Do NOT proceed until confirmed.",{"type":52,"tag":394,"props":638,"children":640},{"id":639},"phase-3-establish-test-safety-net",[641],{"type":58,"value":642},"Phase 3: Establish Test Safety Net",{"type":52,"tag":61,"props":644,"children":645},{},[646,650],{"type":52,"tag":87,"props":647,"children":648},{},[649],{"type":58,"value":407},{"type":58,"value":651}," User confirmed scope.",{"type":52,"tag":61,"props":653,"children":654},{},[655],{"type":52,"tag":87,"props":656,"children":657},{},[658],{"type":58,"value":417},{"type":52,"tag":79,"props":660,"children":661},{},[662,703,722,735],{"type":52,"tag":83,"props":663,"children":664},{},[665,667],{"type":58,"value":666},"Search for existing tests:\n",{"type":52,"tag":158,"props":668,"children":669},{},[670,681,692],{"type":52,"tag":83,"props":671,"children":672},{},[673,679],{"type":52,"tag":95,"props":674,"children":676},{"className":675},[],[677],{"type":58,"value":678},"#[test_only]",{"type":58,"value":680}," modules within source files",{"type":52,"tag":83,"props":682,"children":683},{},[684,690],{"type":52,"tag":95,"props":685,"children":687},{"className":686},[],[688],{"type":58,"value":689},"*_tests.move",{"type":58,"value":691}," files",{"type":52,"tag":83,"props":693,"children":694},{},[695,701],{"type":52,"tag":95,"props":696,"children":698},{"className":697},[],[699],{"type":58,"value":700},"tests\u002F",{"type":58,"value":702}," directory",{"type":52,"tag":83,"props":704,"children":705},{},[706,708,713,715,720],{"type":58,"value":707},"If ",{"type":52,"tag":87,"props":709,"children":710},{},[711],{"type":58,"value":712},"no tests found",{"type":58,"value":714},": stop and invoke ",{"type":52,"tag":95,"props":716,"children":718},{"className":717},[],[719],{"type":58,"value":100},{"type":58,"value":721}," skill to create comprehensive tests first, then return here",{"type":52,"tag":83,"props":723,"children":724},{},[725,727,733],{"type":58,"value":726},"Run ",{"type":52,"tag":95,"props":728,"children":730},{"className":729},[],[731],{"type":58,"value":732},"aptos move test",{"type":58,"value":734}," to establish a passing baseline",{"type":52,"tag":83,"props":736,"children":737},{},[738],{"type":58,"value":739},"Record baseline: number of tests, all passing status",{"type":52,"tag":61,"props":741,"children":742},{},[743,747],{"type":52,"tag":87,"props":744,"children":745},{},[746],{"type":58,"value":496},{"type":58,"value":748}," All tests pass. Baseline recorded. If tests fail pre-modernization, stop and address test failures first — do\nnot modernize on a broken test suite.",{"type":52,"tag":394,"props":750,"children":752},{"id":751},"phase-4-apply-transformations-with-feedback-loops",[753],{"type":58,"value":754},"Phase 4: Apply Transformations (with Feedback Loops)",{"type":52,"tag":61,"props":756,"children":757},{},[758,762],{"type":52,"tag":87,"props":759,"children":760},{},[761],{"type":58,"value":407},{"type":58,"value":763}," Test baseline established.",{"type":52,"tag":61,"props":765,"children":766},{},[767],{"type":52,"tag":87,"props":768,"children":769},{},[770],{"type":58,"value":771},"Actions — apply in tier order:",{"type":52,"tag":61,"props":773,"children":774},{},[775],{"type":52,"tag":87,"props":776,"children":777},{},[778],{"type":58,"value":779},"Tier 1 (if scope includes it — always):",{"type":52,"tag":79,"props":781,"children":782},{},[783,794,803],{"type":52,"tag":83,"props":784,"children":785},{},[786,788],{"type":58,"value":787},"Apply all Tier 1 syntax changes per ",{"type":52,"tag":448,"props":789,"children":791},{"href":790},"references\u002Ftransformation-guide.md",[792],{"type":58,"value":793},"transformation-guide.md",{"type":52,"tag":83,"props":795,"children":796},{},[797,798],{"type":58,"value":726},{"type":52,"tag":95,"props":799,"children":801},{"className":800},[],[802],{"type":58,"value":732},{"type":52,"tag":83,"props":804,"children":805},{},[806],{"type":58,"value":807},"If tests fail → revert all Tier 1 changes, investigate which specific change caused failure, fix and retry",{"type":52,"tag":61,"props":809,"children":810},{},[811,830,832,837],{"type":52,"tag":87,"props":812,"children":813},{},[814,816,821,823,828],{"type":58,"value":815},"Tier 2 (if scope is ",{"type":52,"tag":95,"props":817,"children":819},{"className":818},[],[820],{"type":58,"value":578},{"type":58,"value":822}," or ",{"type":52,"tag":95,"props":824,"children":826},{"className":825},[],[827],{"type":58,"value":592},{"type":58,"value":829},"):",{"type":58,"value":831}," 4. Apply all Tier 2 changes per transformation guide 5. Run\n",{"type":52,"tag":95,"props":833,"children":835},{"className":834},[],[836],{"type":58,"value":732},{"type":58,"value":838}," 6. If tests fail → revert all Tier 2 changes, investigate and fix",{"type":52,"tag":61,"props":840,"children":841},{},[842,854],{"type":52,"tag":87,"props":843,"children":844},{},[845,847,852],{"type":58,"value":846},"Tier 3 (if scope is ",{"type":52,"tag":95,"props":848,"children":850},{"className":849},[],[851],{"type":58,"value":592},{"type":58,"value":853}," only):",{"type":58,"value":855}," 7. Apply Tier 3 changes ONE AT A TIME (not all at once)",{"type":52,"tag":158,"props":857,"children":858},{},[859,879],{"type":52,"tag":83,"props":860,"children":861},{},[862,864,870,872,877],{"type":58,"value":863},"If deployment context is ",{"type":52,"tag":95,"props":865,"children":867},{"className":866},[],[868],{"type":58,"value":869},"compatible",{"type":58,"value":871},": skip any rule marked ",{"type":52,"tag":87,"props":873,"children":874},{},[875],{"type":58,"value":876},"⚠ Breaking",{"type":58,"value":878},". Add to the skipped list with reason\n\"breaking change, excluded in compatible mode.\"",{"type":52,"tag":83,"props":880,"children":881},{},[882,883,889],{"type":58,"value":863},{"type":52,"tag":95,"props":884,"children":886},{"className":885},[],[887],{"type":58,"value":888},"fresh deploy",{"type":58,"value":890},": apply all rules in scope normally.",{"type":52,"tag":79,"props":892,"children":893},{"start":27},[894,905],{"type":52,"tag":83,"props":895,"children":896},{},[897,898,903],{"type":58,"value":726},{"type":52,"tag":95,"props":899,"children":901},{"className":900},[],[902],{"type":58,"value":732},{"type":58,"value":904}," after EACH individual Tier 3 change",{"type":52,"tag":83,"props":906,"children":907},{},[908],{"type":58,"value":909},"If tests fail → revert that specific change, note it as skipped, proceed to next Tier 3 item",{"type":52,"tag":61,"props":911,"children":912},{},[913,917],{"type":52,"tag":87,"props":914,"children":915},{},[916],{"type":58,"value":496},{"type":58,"value":918}," All approved changes applied, all tests passing.",{"type":52,"tag":394,"props":920,"children":922},{"id":921},"phase-5-final-verification",[923],{"type":58,"value":924},"Phase 5: Final Verification",{"type":52,"tag":61,"props":926,"children":927},{},[928,932],{"type":52,"tag":87,"props":929,"children":930},{},[931],{"type":58,"value":407},{"type":58,"value":933}," All transformations applied.",{"type":52,"tag":61,"props":935,"children":936},{},[937],{"type":52,"tag":87,"props":938,"children":939},{},[940],{"type":58,"value":417},{"type":52,"tag":79,"props":942,"children":943},{},[944,954,959],{"type":52,"tag":83,"props":945,"children":946},{},[947,948],{"type":58,"value":726},{"type":52,"tag":95,"props":949,"children":951},{"className":950},[],[952],{"type":58,"value":953},"aptos move test --coverage",{"type":52,"tag":83,"props":955,"children":956},{},[957],{"type":58,"value":958},"Verify test coverage is >= baseline (should be same or better)",{"type":52,"tag":83,"props":960,"children":961},{},[962],{"type":58,"value":963},"Generate Modernization Summary Report:",{"type":52,"tag":530,"props":965,"children":968},{"className":966,"code":967,"language":58},[533],"## Modernization Summary\n\n### Changes Applied\n- Tier 1: X changes (syntax)\n- Tier 2: X changes (visibility & errors)\n- Tier 3: X changes (API migrations)\n\n### Changes Skipped\n- [List any skipped items with reasons]\n\n### Test Results\n- Tests: X passing (baseline: Y)\n- Coverage: X% (baseline: Y%)\n\n### Files Modified\n- [List of modified files]\n",[969],{"type":52,"tag":95,"props":970,"children":971},{"__ignoreMap":538},[972],{"type":58,"value":967},{"type":52,"tag":61,"props":974,"children":975},{},[976,980],{"type":52,"tag":87,"props":977,"children":978},{},[979],{"type":58,"value":496},{"type":58,"value":981}," Report presented to user.",{"type":52,"tag":67,"props":983,"children":985},{"id":984},"modernization-scope-quick-reference",[986],{"type":58,"value":987},"Modernization Scope Quick Reference",{"type":52,"tag":989,"props":990,"children":991},"table",{},[992,1021],{"type":52,"tag":993,"props":994,"children":995},"thead",{},[996],{"type":52,"tag":997,"props":998,"children":999},"tr",{},[1000,1006,1011,1016],{"type":52,"tag":1001,"props":1002,"children":1003},"th",{},[1004],{"type":58,"value":1005},"Scope",{"type":52,"tag":1001,"props":1007,"children":1008},{},[1009],{"type":58,"value":1010},"Tiers",{"type":52,"tag":1001,"props":1012,"children":1013},{},[1014],{"type":58,"value":1015},"Risk",{"type":52,"tag":1001,"props":1017,"children":1018},{},[1019],{"type":58,"value":1020},"When to Use",{"type":52,"tag":1022,"props":1023,"children":1024},"tbody",{},[1025,1052,1083],{"type":52,"tag":997,"props":1026,"children":1027},{},[1028,1037,1042,1047],{"type":52,"tag":1029,"props":1030,"children":1031},"td",{},[1032],{"type":52,"tag":95,"props":1033,"children":1035},{"className":1034},[],[1036],{"type":58,"value":564},{"type":52,"tag":1029,"props":1038,"children":1039},{},[1040],{"type":58,"value":1041},"Tier 1",{"type":52,"tag":1029,"props":1043,"children":1044},{},[1045],{"type":58,"value":1046},"Zero",{"type":52,"tag":1029,"props":1048,"children":1049},{},[1050],{"type":58,"value":1051},"Just clean up syntax, no semantic changes",{"type":52,"tag":997,"props":1053,"children":1054},{},[1055,1063,1068,1073],{"type":52,"tag":1029,"props":1056,"children":1057},{},[1058],{"type":52,"tag":95,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":58,"value":578},{"type":52,"tag":1029,"props":1064,"children":1065},{},[1066],{"type":58,"value":1067},"Tier 1+2",{"type":52,"tag":1029,"props":1069,"children":1070},{},[1071],{"type":58,"value":1072},"Low",{"type":52,"tag":1029,"props":1074,"children":1075},{},[1076,1081],{"type":52,"tag":87,"props":1077,"children":1078},{},[1079],{"type":58,"value":1080},"Default.",{"type":58,"value":1082}," Syntax + visibility + error constants",{"type":52,"tag":997,"props":1084,"children":1085},{},[1086,1094,1099,1104],{"type":52,"tag":1029,"props":1087,"children":1088},{},[1089],{"type":52,"tag":95,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":58,"value":592},{"type":52,"tag":1029,"props":1095,"children":1096},{},[1097],{"type":58,"value":1098},"Tier 1+2+3",{"type":52,"tag":1029,"props":1100,"children":1101},{},[1102],{"type":58,"value":1103},"Medium-High",{"type":52,"tag":1029,"props":1105,"children":1106},{},[1107],{"type":58,"value":1108},"Full migration including API changes",{"type":52,"tag":67,"props":1110,"children":1112},{"id":1111},"tier-quick-reference",[1113],{"type":58,"value":1114},"Tier Quick Reference",{"type":52,"tag":989,"props":1116,"children":1117},{},[1118,1143],{"type":52,"tag":993,"props":1119,"children":1120},{},[1121],{"type":52,"tag":997,"props":1122,"children":1123},{},[1124,1129,1134,1138],{"type":52,"tag":1001,"props":1125,"children":1126},{},[1127],{"type":58,"value":1128},"Tier",{"type":52,"tag":1001,"props":1130,"children":1131},{},[1132],{"type":58,"value":1133},"What Changes",{"type":52,"tag":1001,"props":1135,"children":1136},{},[1137],{"type":58,"value":1015},{"type":52,"tag":1001,"props":1139,"children":1140},{},[1141],{"type":58,"value":1142},"Examples",{"type":52,"tag":1022,"props":1144,"children":1145},{},[1146,1208,1249],{"type":52,"tag":997,"props":1147,"children":1148},{},[1149,1154,1159,1163],{"type":52,"tag":1029,"props":1150,"children":1151},{},[1152],{"type":58,"value":1153},"1 — Syntax",{"type":52,"tag":1029,"props":1155,"children":1156},{},[1157],{"type":58,"value":1158},"Code reads differently, compiles identically",{"type":52,"tag":1029,"props":1160,"children":1161},{},[1162],{"type":58,"value":1046},{"type":52,"tag":1029,"props":1164,"children":1165},{},[1166,1172,1174,1180,1181,1187,1188,1194,1195,1201,1202],{"type":52,"tag":95,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":58,"value":1171},"vector::borrow(&v, i)",{"type":58,"value":1173}," → ",{"type":52,"tag":95,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":58,"value":1179},"v[i]",{"type":58,"value":230},{"type":52,"tag":95,"props":1182,"children":1184},{"className":1183},[],[1185],{"type":58,"value":1186},"x = x + 1",{"type":58,"value":1173},{"type":52,"tag":95,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":58,"value":1193},"x += 1",{"type":58,"value":230},{"type":52,"tag":95,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":58,"value":1200},"while (i \u003C n) { ... i += 1 }",{"type":58,"value":1173},{"type":52,"tag":95,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":58,"value":1207},"for (i in 0..n) { ... }",{"type":52,"tag":997,"props":1209,"children":1210},{},[1211,1216,1221,1225],{"type":52,"tag":1029,"props":1212,"children":1213},{},[1214],{"type":58,"value":1215},"2 — Visibility & Errors",{"type":52,"tag":1029,"props":1217,"children":1218},{},[1219],{"type":58,"value":1220},"Same semantics, cleaner declarations",{"type":52,"tag":1029,"props":1222,"children":1223},{},[1224],{"type":58,"value":1072},{"type":52,"tag":1029,"props":1226,"children":1227},{},[1228,1233,1234,1239,1241,1247],{"type":52,"tag":95,"props":1229,"children":1231},{"className":1230},[],[1232],{"type":58,"value":176},{"type":58,"value":1173},{"type":52,"tag":95,"props":1235,"children":1237},{"className":1236},[],[1238],{"type":58,"value":184},{"type":58,"value":1240},", magic numbers → ",{"type":52,"tag":95,"props":1242,"children":1244},{"className":1243},[],[1245],{"type":58,"value":1246},"E_*",{"type":58,"value":1248}," constants",{"type":52,"tag":997,"props":1250,"children":1251},{},[1252,1257,1269,1273],{"type":52,"tag":1029,"props":1253,"children":1254},{},[1255],{"type":58,"value":1256},"3 — API Migrations",{"type":52,"tag":1029,"props":1258,"children":1259},{},[1260,1262,1267],{"type":58,"value":1261},"Different APIs, same intended behavior. Most are ",{"type":52,"tag":87,"props":1263,"children":1264},{},[1265],{"type":58,"value":1266},"breaking changes",{"type":58,"value":1268},".",{"type":52,"tag":1029,"props":1270,"children":1271},{},[1272],{"type":58,"value":1103},{"type":52,"tag":1029,"props":1274,"children":1275},{},[1276,1281,1282,1287,1288,1294,1295,1301,1302,1307,1308,1313,1315,1321,1322,1328,1329,1335],{"type":52,"tag":95,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":58,"value":261},{"type":58,"value":1173},{"type":52,"tag":95,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":58,"value":277},{"type":58,"value":230},{"type":52,"tag":95,"props":1289,"children":1291},{"className":1290},[],[1292],{"type":58,"value":1293},"SmartTable",{"type":58,"value":1173},{"type":52,"tag":95,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":58,"value":1300},"BigOrderedMap",{"type":58,"value":230},{"type":52,"tag":95,"props":1303,"children":1305},{"className":1304},[],[1306],{"type":58,"value":289},{"type":58,"value":1173},{"type":52,"tag":95,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":58,"value":296},{"type":58,"value":1314},", manual loops → stdlib ",{"type":52,"tag":95,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":58,"value":1320},"v.for_each_ref()",{"type":58,"value":263},{"type":52,"tag":95,"props":1323,"children":1325},{"className":1324},[],[1326],{"type":58,"value":1327},"v.map()",{"type":58,"value":263},{"type":52,"tag":95,"props":1330,"children":1332},{"className":1331},[],[1333],{"type":58,"value":1334},"v.fold()",{"type":58,"value":1336}," with lambdas",{"type":52,"tag":61,"props":1338,"children":1339},{},[1340,1342,1346],{"type":58,"value":1341},"See ",{"type":52,"tag":448,"props":1343,"children":1344},{"href":450},[1345],{"type":58,"value":453},{"type":58,"value":1347}," for the complete rule catalog (22 rules across 3 tiers).",{"type":52,"tag":67,"props":1349,"children":1351},{"id":1350},"rationalizations-to-reject",[1352],{"type":58,"value":1353},"Rationalizations to Reject",{"type":52,"tag":989,"props":1355,"children":1356},{},[1357,1373],{"type":52,"tag":993,"props":1358,"children":1359},{},[1360],{"type":52,"tag":997,"props":1361,"children":1362},{},[1363,1368],{"type":52,"tag":1001,"props":1364,"children":1365},{},[1366],{"type":58,"value":1367},"Rationalization",{"type":52,"tag":1001,"props":1369,"children":1370},{},[1371],{"type":58,"value":1372},"Why It's Wrong",{"type":52,"tag":1022,"props":1374,"children":1375},{},[1376,1389,1402,1415,1436,1449,1462],{"type":52,"tag":997,"props":1377,"children":1378},{},[1379,1384],{"type":52,"tag":1029,"props":1380,"children":1381},{},[1382],{"type":58,"value":1383},"\"Tests pass so the modernization is correct\"",{"type":52,"tag":1029,"props":1385,"children":1386},{},[1387],{"type":58,"value":1388},"Tests verify behavior, not code quality. Review changes manually too.",{"type":52,"tag":997,"props":1390,"children":1391},{},[1392,1397],{"type":52,"tag":1029,"props":1393,"children":1394},{},[1395],{"type":58,"value":1396},"\"This contract is simple, skip the analysis\"",{"type":52,"tag":1029,"props":1398,"children":1399},{},[1400],{"type":58,"value":1401},"Simple contracts can have subtle patterns. Always analyze first.",{"type":52,"tag":997,"props":1403,"children":1404},{},[1405,1410],{"type":52,"tag":1029,"props":1406,"children":1407},{},[1408],{"type":58,"value":1409},"\"Let's do all tiers at once to save time\"",{"type":52,"tag":1029,"props":1411,"children":1412},{},[1413],{"type":58,"value":1414},"If tests break, you can't isolate which change caused it. Always tier.",{"type":52,"tag":997,"props":1416,"children":1417},{},[1418,1423],{"type":52,"tag":1029,"props":1419,"children":1420},{},[1421],{"type":58,"value":1422},"\"The receiver-style call looks right\"",{"type":52,"tag":1029,"props":1424,"children":1425},{},[1426,1428,1434],{"type":58,"value":1427},"Must verify the target function declares ",{"type":52,"tag":95,"props":1429,"children":1431},{"className":1430},[],[1432],{"type":58,"value":1433},"self",{"type":58,"value":1435},". False positives are common.",{"type":52,"tag":997,"props":1437,"children":1438},{},[1439,1444],{"type":52,"tag":1029,"props":1440,"children":1441},{},[1442],{"type":58,"value":1443},"\"Error constants can have new names and values\"",{"type":52,"tag":1029,"props":1445,"children":1446},{},[1447],{"type":58,"value":1448},"Existing tests depend on exact numeric values. Preserve them.",{"type":52,"tag":997,"props":1450,"children":1451},{},[1452,1457],{"type":52,"tag":1029,"props":1453,"children":1454},{},[1455],{"type":58,"value":1456},"\"No tests exist, but the changes are safe\"",{"type":52,"tag":1029,"props":1458,"children":1459},{},[1460],{"type":58,"value":1461},"Without tests there is no safety net. Generate tests first.",{"type":52,"tag":997,"props":1463,"children":1464},{},[1465,1470],{"type":52,"tag":1029,"props":1466,"children":1467},{},[1468],{"type":58,"value":1469},"\"Tier 3 changes are optional, skip the test run\"",{"type":52,"tag":1029,"props":1471,"children":1472},{},[1473],{"type":58,"value":1474},"Every change needs verification. Tier 3 is highest risk — test MORE, not less.",{"type":52,"tag":67,"props":1476,"children":1478},{"id":1477},"success-criteria",[1479],{"type":58,"value":1480},"Success Criteria",{"type":52,"tag":158,"props":1482,"children":1485},{"className":1483},[1484],"contains-task-list",[1486,1499,1508,1517,1526,1535,1551,1560,1569],{"type":52,"tag":83,"props":1487,"children":1490},{"className":1488},[1489],"task-list-item",[1491,1497],{"type":52,"tag":1492,"props":1493,"children":1496},"input",{"disabled":1494,"type":1495},true,"checkbox",[],{"type":58,"value":1498}," Analysis Report presented before any modifications",{"type":52,"tag":83,"props":1500,"children":1502},{"className":1501},[1489],[1503,1506],{"type":52,"tag":1492,"props":1504,"children":1505},{"disabled":1494,"type":1495},[],{"type":58,"value":1507}," User confirmed modernization scope",{"type":52,"tag":83,"props":1509,"children":1511},{"className":1510},[1489],[1512,1515],{"type":52,"tag":1492,"props":1513,"children":1514},{"disabled":1494,"type":1495},[],{"type":58,"value":1516}," Test baseline established before changes",{"type":52,"tag":83,"props":1518,"children":1520},{"className":1519},[1489],[1521,1524],{"type":52,"tag":1492,"props":1522,"children":1523},{"disabled":1494,"type":1495},[],{"type":58,"value":1525}," Tests pass after each tier of changes",{"type":52,"tag":83,"props":1527,"children":1529},{"className":1528},[1489],[1530,1533],{"type":52,"tag":1492,"props":1531,"children":1532},{"disabled":1494,"type":1495},[],{"type":58,"value":1534}," All error code numeric values preserved",{"type":52,"tag":83,"props":1536,"children":1538},{"className":1537},[1489],[1539,1542,1544,1549],{"type":52,"tag":1492,"props":1540,"children":1541},{"disabled":1494,"type":1495},[],{"type":58,"value":1543}," No Tier 3 changes applied without ",{"type":52,"tag":95,"props":1545,"children":1547},{"className":1546},[],[1548],{"type":58,"value":592},{"type":58,"value":1550}," scope confirmation",{"type":52,"tag":83,"props":1552,"children":1554},{"className":1553},[1489],[1555,1558],{"type":52,"tag":1492,"props":1556,"children":1557},{"disabled":1494,"type":1495},[],{"type":58,"value":1559}," Breaking changes excluded when user selected compatible mode",{"type":52,"tag":83,"props":1561,"children":1563},{"className":1562},[1489],[1564,1567],{"type":52,"tag":1492,"props":1565,"children":1566},{"disabled":1494,"type":1495},[],{"type":58,"value":1568}," Modernization Summary Report generated",{"type":52,"tag":83,"props":1570,"children":1572},{"className":1571},[1489],[1573,1576],{"type":52,"tag":1492,"props":1574,"children":1575},{"disabled":1494,"type":1495},[],{"type":58,"value":1577}," Test coverage maintained at or above baseline",{"type":52,"tag":67,"props":1579,"children":1581},{"id":1580},"reference-index",[1582],{"type":58,"value":1583},"Reference Index",{"type":52,"tag":989,"props":1585,"children":1586},{},[1587,1603],{"type":52,"tag":993,"props":1588,"children":1589},{},[1590],{"type":52,"tag":997,"props":1591,"children":1592},{},[1593,1598],{"type":52,"tag":1001,"props":1594,"children":1595},{},[1596],{"type":58,"value":1597},"File",{"type":52,"tag":1001,"props":1599,"children":1600},{},[1601],{"type":58,"value":1602},"Content",{"type":52,"tag":1022,"props":1604,"children":1605},{},[1606,1621,1636,1653,1670],{"type":52,"tag":997,"props":1607,"children":1608},{},[1609,1616],{"type":52,"tag":1029,"props":1610,"children":1611},{},[1612],{"type":52,"tag":448,"props":1613,"children":1614},{"href":450},[1615],{"type":58,"value":453},{"type":52,"tag":1029,"props":1617,"children":1618},{},[1619],{"type":58,"value":1620},"Complete V1 pattern detection catalog (22 rules across 3 tiers)",{"type":52,"tag":997,"props":1622,"children":1623},{},[1624,1631],{"type":52,"tag":1029,"props":1625,"children":1626},{},[1627],{"type":52,"tag":448,"props":1628,"children":1629},{"href":790},[1630],{"type":58,"value":793},{"type":52,"tag":1029,"props":1632,"children":1633},{},[1634],{"type":58,"value":1635},"Before\u002Fafter code, safety checks, edge cases per rule",{"type":52,"tag":997,"props":1637,"children":1638},{},[1639,1648],{"type":52,"tag":1029,"props":1640,"children":1641},{},[1642],{"type":52,"tag":448,"props":1643,"children":1645},{"href":1644},"..\u002F..\u002F..\u002Fpatterns\u002Fmove\u002FMOVE_V2_SYNTAX.md",[1646],{"type":58,"value":1647},"MOVE_V2_SYNTAX.md",{"type":52,"tag":1029,"props":1649,"children":1650},{},[1651],{"type":58,"value":1652},"Full V2 syntax reference",{"type":52,"tag":997,"props":1654,"children":1655},{},[1656,1665],{"type":52,"tag":1029,"props":1657,"children":1658},{},[1659],{"type":52,"tag":448,"props":1660,"children":1662},{"href":1661},"..\u002F..\u002F..\u002Fpatterns\u002Fmove\u002FOBJECTS.md",[1663],{"type":58,"value":1664},"OBJECTS.md",{"type":52,"tag":1029,"props":1666,"children":1667},{},[1668],{"type":58,"value":1669},"Modern object model patterns",{"type":52,"tag":997,"props":1671,"children":1672},{},[1673,1682],{"type":52,"tag":1029,"props":1674,"children":1675},{},[1676],{"type":52,"tag":448,"props":1677,"children":1679},{"href":1678},"..\u002F..\u002F..\u002Fpatterns\u002Fmove\u002FADVANCED_TYPES.md",[1680],{"type":58,"value":1681},"ADVANCED_TYPES.md",{"type":52,"tag":1029,"props":1683,"children":1684},{},[1685],{"type":58,"value":1686},"Enums, signed integers, phantom types",{"type":52,"tag":61,"props":1688,"children":1689},{},[1690,1695,1697,1702,1703,1708,1709],{"type":52,"tag":87,"props":1691,"children":1692},{},[1693],{"type":58,"value":1694},"Related skills:",{"type":58,"value":1696}," ",{"type":52,"tag":95,"props":1698,"children":1700},{"className":1699},[],[1701],{"type":58,"value":100},{"type":58,"value":230},{"type":52,"tag":95,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":58,"value":344},{"type":58,"value":230},{"type":52,"tag":95,"props":1710,"children":1712},{"className":1711},[],[1713],{"type":58,"value":384},{"items":1715,"total":1808},[1716,1730,1749,1761,1774,1780,1794],{"slug":369,"name":369,"fn":1717,"description":1718,"org":1719,"tags":1720,"stars":23,"repoUrl":24,"updatedAt":1729},"optimize Aptos Move contracts for gas","Analyze and optimize Aptos Move contracts for gas efficiency, identifying expensive operations and suggesting optimizations. Triggers on: 'optimize gas', 'reduce gas costs', 'gas analysis', 'make contract cheaper', 'gas efficiency', 'analyze gas usage', 'reduce transaction costs'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1721,1723,1726],{"name":1722,"slug":30,"type":16},"Blockchain",{"name":1724,"slug":1725,"type":16},"Performance","performance",{"name":1727,"slug":1728,"type":16},"Smart Contracts","smart-contracts","2026-07-12T08:07:14.117466",{"slug":1731,"name":1731,"fn":1732,"description":1733,"org":1734,"tags":1735,"stars":23,"repoUrl":24,"updatedAt":1748},"create-aptos-project","scaffold new Aptos dApp projects","Scaffolds new Aptos projects using npx create-aptos-dapp. Supports fullstack (Vite or Next.js) and contract-only templates with network selection and optional API key. Triggers on: 'build app', 'create app', 'make app', 'new app', 'build dApp', 'create dApp', 'new dApp', 'build project', 'new project', 'create project', 'scaffold', 'start project', 'set up project', 'build me a', 'I want to build', 'make me a', 'help me build'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1736,1739,1742,1745],{"name":1737,"slug":1738,"type":16},"Next.js","next-js",{"name":1740,"slug":1741,"type":16},"TypeScript","typescript",{"name":1743,"slug":1744,"type":16},"Vite","vite",{"name":1746,"slug":1747,"type":16},"Web3","web3","2026-07-12T08:07:30.595111",{"slug":1750,"name":1750,"fn":1751,"description":1752,"org":1753,"tags":1754,"stars":23,"repoUrl":24,"updatedAt":1760},"deploy-contracts","deploy Move contracts to Aptos networks","Safely deploys Move contracts to Aptos networks (devnet, testnet, mainnet) with pre-deployment verification. Triggers on: 'deploy contract', 'publish to testnet', 'deploy to mainnet', 'how to deploy', 'publish module', 'deployment checklist', 'deploy to devnet'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1755,1758,1759],{"name":1756,"slug":1757,"type":16},"Deployment","deployment",{"name":18,"slug":19,"type":16},{"name":1727,"slug":1728,"type":16},"2026-07-12T08:07:16.798352",{"slug":100,"name":100,"fn":1762,"description":1763,"org":1764,"tags":1765,"stars":23,"repoUrl":24,"updatedAt":1773},"generate test suites for Move contracts","Creates comprehensive test suites for Move contracts with 100% coverage requirement. Triggers on: 'generate tests', 'create tests', 'write test suite', 'test this contract', 'how to test', 'add test coverage', 'write unit tests'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1766,1767,1770],{"name":18,"slug":19,"type":16},{"name":1768,"slug":1769,"type":16},"QA","qa",{"name":1771,"slug":1772,"type":16},"Testing","testing","2026-07-12T08:07:18.0205",{"slug":4,"name":4,"fn":5,"description":6,"org":1775,"tags":1776,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1777,1778,1779],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":1781,"name":1781,"fn":1782,"description":1783,"org":1784,"tags":1785,"stars":23,"repoUrl":24,"updatedAt":1793},"search-aptos-examples","search Aptos reference implementations","Searches aptos-core and daily-move for reference implementations before writing contracts. Triggers on: 'search examples', 'find example', 'check aptos-core', 'is there an example', 'reference implementation', 'how does aptos implement', 'similar contract', 'daily-move'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1786,1787,1790],{"name":1722,"slug":30,"type":16},{"name":1788,"slug":1789,"type":16},"Documentation","documentation",{"name":1791,"slug":1792,"type":16},"Search","search","2026-07-12T08:07:15.382039",{"slug":384,"name":384,"fn":1795,"description":1796,"org":1797,"tags":1798,"stars":23,"repoUrl":24,"updatedAt":1807},"audit Move smart contracts for security","Audits Move contracts for security vulnerabilities before deployment using 7-category checklist. Triggers on: 'audit contract', 'security check', 'review security', 'check for vulnerabilities', 'security audit', 'is this secure', 'find security issues'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1799,1802,1803,1806],{"name":1800,"slug":1801,"type":16},"Audit","audit",{"name":21,"slug":22,"type":16},{"name":1804,"slug":1805,"type":16},"Security","security",{"name":1727,"slug":1728,"type":16},"2026-07-12T08:07:11.680215",17,{"items":1810,"total":1914},[1811,1817,1824,1830,1836,1842,1848,1855,1869,1884,1894,1904],{"slug":369,"name":369,"fn":1717,"description":1718,"org":1812,"tags":1813,"stars":23,"repoUrl":24,"updatedAt":1729},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1814,1815,1816],{"name":1722,"slug":30,"type":16},{"name":1724,"slug":1725,"type":16},{"name":1727,"slug":1728,"type":16},{"slug":1731,"name":1731,"fn":1732,"description":1733,"org":1818,"tags":1819,"stars":23,"repoUrl":24,"updatedAt":1748},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1820,1821,1822,1823],{"name":1737,"slug":1738,"type":16},{"name":1740,"slug":1741,"type":16},{"name":1743,"slug":1744,"type":16},{"name":1746,"slug":1747,"type":16},{"slug":1750,"name":1750,"fn":1751,"description":1752,"org":1825,"tags":1826,"stars":23,"repoUrl":24,"updatedAt":1760},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1827,1828,1829],{"name":1756,"slug":1757,"type":16},{"name":18,"slug":19,"type":16},{"name":1727,"slug":1728,"type":16},{"slug":100,"name":100,"fn":1762,"description":1763,"org":1831,"tags":1832,"stars":23,"repoUrl":24,"updatedAt":1773},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1833,1834,1835],{"name":18,"slug":19,"type":16},{"name":1768,"slug":1769,"type":16},{"name":1771,"slug":1772,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":1837,"tags":1838,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1839,1840,1841],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":1781,"name":1781,"fn":1782,"description":1783,"org":1843,"tags":1844,"stars":23,"repoUrl":24,"updatedAt":1793},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1845,1846,1847],{"name":1722,"slug":30,"type":16},{"name":1788,"slug":1789,"type":16},{"name":1791,"slug":1792,"type":16},{"slug":384,"name":384,"fn":1795,"description":1796,"org":1849,"tags":1850,"stars":23,"repoUrl":24,"updatedAt":1807},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1851,1852,1853,1854],{"name":1800,"slug":1801,"type":16},{"name":21,"slug":22,"type":16},{"name":1804,"slug":1805,"type":16},{"name":1727,"slug":1728,"type":16},{"slug":1856,"name":1856,"fn":1857,"description":1858,"org":1859,"tags":1860,"stars":23,"repoUrl":24,"updatedAt":1868},"smoothsend-gasless","sponsor gas fees for Aptos dApps","How to sponsor gas fees for Aptos dApp users using SmoothSend. Paid commercial service: free on testnet, credit-based on mainnet. Covers 3-line wallet adapter integration (transactionSubmitter), Script Composer for fee-in-token stablecoin transfers. Triggers on: 'gasless', 'sponsor gas', 'users pay no APT', 'transactionSubmitter', 'SmoothSend', 'fee payer', 'pay gas for users', 'no gas required'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1861,1864,1867],{"name":1862,"slug":1863,"type":16},"API Development","api-development",{"name":1865,"slug":1866,"type":16},"Payments","payments",{"name":1746,"slug":1747,"type":16},"2026-07-12T08:07:31.843242",{"slug":1870,"name":1870,"fn":1871,"description":1872,"org":1873,"tags":1874,"stars":23,"repoUrl":24,"updatedAt":1883},"ts-sdk-account","manage Aptos accounts with TS SDK","How to create and use Account (signer) in @aptos-labs\u002Fts-sdk. Covers Account.generate(), fromPrivateKey(), fromDerivationPath(), Ed25519 vs SingleKey vs MultiKey vs Keyless, serialization (fromHex\u002FtoHex). Triggers on: 'Account.generate', 'Account.fromPrivateKey', 'Ed25519PrivateKey', 'SDK account', 'mnemonic', 'SingleKeyAccount', 'KeylessAccount'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1875,1878,1879,1882],{"name":1876,"slug":1877,"type":16},"Auth","auth",{"name":1722,"slug":30,"type":16},{"name":1880,"slug":1881,"type":16},"SDK","sdk",{"name":1740,"slug":1741,"type":16},"2026-07-12T08:07:29.297415",{"slug":1885,"name":1885,"fn":1886,"description":1887,"org":1888,"tags":1889,"stars":23,"repoUrl":24,"updatedAt":1893},"ts-sdk-address","manage AccountAddress in Aptos TypeScript SDK","How to create and use AccountAddress in @aptos-labs\u002Fts-sdk. Covers address format (AIP-40), from\u002FfromString\u002FfromStrict, special addresses, LONG vs SHORT form, and derived addresses (object, resource, token, user-derived). Triggers on: 'AccountAddress', 'AccountAddress.from', 'AIP-40', 'derived address', 'createObjectAddress', 'createResourceAddress', 'createTokenAddress'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1890,1891,1892],{"name":1722,"slug":30,"type":16},{"name":1880,"slug":1881,"type":16},{"name":1740,"slug":1741,"type":16},"2026-07-12T08:07:26.430378",{"slug":1895,"name":1895,"fn":1896,"description":1897,"org":1898,"tags":1899,"stars":23,"repoUrl":24,"updatedAt":1903},"ts-sdk-client","configure Aptos SDK clients","How to create and configure the Aptos client (Aptos, AptosConfig) in @aptos-labs\u002Fts-sdk. Covers Network, fullnode\u002Findexer\u002Ffaucet URLs, singleton pattern, and Bun compatibility. Triggers on: 'Aptos client', 'AptosConfig', 'SDK client', 'client setup', 'new Aptos(', 'Network.TESTNET', 'Network.MAINNET'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1900,1901,1902],{"name":1862,"slug":1863,"type":16},{"name":1880,"slug":1881,"type":16},{"name":1740,"slug":1741,"type":16},"2026-07-12T08:07:21.933342",{"slug":1905,"name":1905,"fn":1906,"description":1907,"org":1908,"tags":1909,"stars":23,"repoUrl":24,"updatedAt":1913},"ts-sdk-transactions","manage Aptos blockchain transactions","How to build, sign, submit, and simulate transactions in @aptos-labs\u002Fts-sdk. Covers build.simple(), signAndSubmitTransaction(), waitForTransaction(), simulate, sponsored (fee payer), and multi-agent. Triggers on: 'build.simple', 'signAndSubmitTransaction', 'transaction.build', 'waitForTransaction', 'signAsFeePayer', 'SDK transaction', 'sponsored transaction', 'multi-agent transaction'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1910,1911,1912],{"name":1862,"slug":1863,"type":16},{"name":1740,"slug":1741,"type":16},{"name":1746,"slug":1747,"type":16},"2026-07-12T08:07:23.774257",24]