[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-dependency-map":3,"mdc-1wf0je-key":38,"related-org-microsoft-dependency-map":1875,"related-repo-microsoft-dependency-map":2069},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":33,"sourceUrl":36,"mdContent":37},"dependency-map","generate project dependency map diagrams","Generate dependency map diagram from project build files",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Architecture","architecture","tag",{"name":17,"slug":18,"type":15},"Engineering","engineering",{"name":20,"slug":21,"type":15},"Diagrams","diagrams",{"name":23,"slug":24,"type":15},"Code Analysis","code-analysis",34,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgithub-copilot-modernization","2026-07-18T05:14:07.976259",null,8,[31,32],"copilot","modernization",{"repoUrl":26,"stars":25,"forks":29,"topics":34,"description":35},[31,32],"GitHub Copilot modernization agent","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgithub-copilot-modernization\u002Ftree\u002FHEAD\u002Fplugins\u002Fgithub-copilot-modernization\u002Fskills\u002Fdependency-map","---\nname: dependency-map\ndescription: Generate dependency map diagram from project build files\n---\n\n# Dependency Map\n\nAnalyze project build and package files to generate a visual map of all external dependencies grouped by functional category. Save to `.github\u002Fmodernize\u002Fassessment\u002Fengines\u002Ffacts\u002Fdependency-map.md`.\n\nThis skill focuses exclusively on **declared external dependencies** (libraries, frameworks, packages). For internal application structure and component relationships, see the `architecture-diagram` skill.\n\n## Input Parameters\n\n- `workspace-path` (optional): Path to the project to analyze (defaults to current directory)\n\n## ⚠ Mermaid Safety Constraints — read BEFORE you write the ```mermaid block\n\nMermaid is unforgiving: one illegal character anywhere in the block crashes the **whole** diagram with `Syntax error in text`, not just the offending line. Stay strictly inside this subset:\n\n1. **Chart kind.** `flowchart LR` only.\n2. **Subgraph form.** Always `subgraph \u003CAlphaNumId>[\"display label\"]` (id matches `[A-Za-z][A-Za-z0-9_]*`, no spaces, no punctuation). NEVER use the anonymous form `subgraph \"label\"` — it crashes whenever the label contains `(`, `)`, `\u002F`, `-`, etc.\n3. **Node form.** Use `Id[\"label\"]` for libraries; pick one shape per node — do not stack brackets.\n4. **Arrow form.** Solid `-->`, dotted `-.->` for transitive\u002Findirect. Arrow labels MUST be double-quoted: `-->|\"persistence\"|`. Never bare `-->|persistence|`.\n5. **No line breaks in labels.** The escape `\\n` was removed in modern Mermaid and is the #1 cause of failures. Keep labels on one line (e.g., `\"Spring Boot 2.7.18\"` not `\"Spring Boot\\n2.7.18\"`).\n6. **Banned characters inside any label or subgraph title.** Use the ASCII replacement:\n\n   | Banned | Why it breaks | Replacement |\n   |---|---|---|\n   | `\\n` (literal two chars) | escape removed | drop, or `\u003Cbr\u002F>` |\n   | `—` (em-dash, U+2014) | parser treats as edge | `-` (ASCII hyphen) |\n   | `–` (en-dash, U+2013) | parser treats as edge | `-` |\n   | `{` `}` | opens an entity block | drop braces |\n   | `\"` inside a label | closes the label early | `'` (single quote) |\n   | `\\|` inside a label | breaks edge-label parser | rephrase |\n   | `@` `#` `$` `%` `&` | unsafe | rephrase or drop |\n   | `(` `)` outside `[\"...\"]` | unbalanced parens crash | only inside the quoted label |\n   | smart quotes `\"` `\"` `'` `'` | not ASCII | regular `\"` and `'` |\n\n7. **Unique node IDs across the whole diagram.** No two nodes\u002Fsubgraphs may share an id.\n8. **`subgraph` must be closed by a matching `end` on its own line.**\n\n### Mandatory self-attestation\n\nImmediately before writing the ` ```mermaid ` opening fence, emit this exact one-line HTML comment in the markdown (it does not render — it is for your own visible attestation):\n\n```\n\u003C!-- mermaid-checked: no \\n, no em-dash\u002Fen-dash, no {} in labels, subgraphs are id[\"label\"], arrows are -->|\"label\"|, all subgraphs closed by end, ids unique -->\n```\n\nIf you cannot truthfully emit that comment, fix the diagram first.\n\n---\n\n## Execution Steps\n\n### Step 1: Generate Dependencies Section\n\nAnalyze build files and produce the complete `## Dependencies` section in one pass:\n\n**Analysis — examine only build and package management files** (do NOT scan source code — that is the `architecture-diagram` skill's job):\n\n- Java: pom.xml, build.gradle, settings.gradle, gradle.properties, gradle lockfiles\n- .NET: *.csproj, Directory.Build.props, packages.config, Directory.Packages.props\n- JavaScript\u002FTypeScript: package.json, package-lock.json, yarn.lock, pnpm-lock.yaml\n\nFor each dependency extract:\n- Group\u002Fpackage name and artifact name\n- Declared version (or version range)\n- Scope (compile, runtime, test, provided)\n\nAlso detect:\n- Parent POM \u002F BOM imports (Java)\n- Central package management (.NET Directory.Packages.props)\n- Transitive dependencies where visible from lock files or BOM\n\n**Categorize** dependencies into functional groups:\n\n| Category | Examples |\n|----------|----------|\n| Web Frameworks | Spring Web, ASP.NET Core MVC, JAX-RS |\n| Database \u002F ORM | Hibernate, Entity Framework, JDBC drivers |\n| Messaging | Kafka client, RabbitMQ, Azure Service Bus |\n| Caching | Redis, EhCache, MemoryCache |\n| Logging | SLF4J, Log4j, Serilog, NLog |\n| Security | Spring Security, Microsoft.Identity, OAuth libs |\n| Observability | Micrometer, OpenTelemetry, Application Insights |\n| Utilities | Guava, Apache Commons, Lombok, AutoMapper |\n\nRules:\n- Exclude test-scoped dependencies (JUnit, xUnit, Mockito, etc.) from the main diagram and Dependency Summary table — they are not relevant for modernization planning\n- If a dependency doesn't fit any category, put it under \"Utilities\"\n- Collect test-scoped dependencies separately for the Test Dependencies section (Step 2)\n\n**Diagram — Mermaid `flowchart LR`** (re-read the Safety Constraints above before writing):\n- Application as the central left-side node\n- One `subgraph` per functional category, using the `subgraph Id[\"display label\"]` form\n- Each dependency as a node showing name and version: `Lib[\"Library Name 1.2.3\"]` (single line, no `\\n`)\n- Arrows from Application to each category subgraph\n- If a BOM\u002Fparent POM manages versions, show it as a separate node linked to the dependencies it governs\n\nReference example (this block satisfies every Safety Constraint — match its shape):\n\n\u003C!-- mermaid-checked: no \\n, no em-dash\u002Fen-dash, no {} in labels, subgraphs are id[\"label\"], arrows are -->|\"label\"|, all subgraphs closed by end, ids unique -->\n~~~mermaid\nflowchart LR\n    App[\"MyApplication\"]\n\n    subgraph Web[\"Web Frameworks\"]\n        SpringMVC[\"Spring MVC 5.3.x\"]\n        Thymeleaf[\"Thymeleaf 3.0\"]\n    end\n    subgraph DB[\"Database \u002F ORM\"]\n        Hibernate[\"Hibernate 5.6\"]\n        PgDriver[\"PostgreSQL Driver 42.6\"]\n    end\n    subgraph Messaging[\"Messaging\"]\n        Kafka[\"Kafka Client 3.4\"]\n    end\n    subgraph Cache[\"Caching\"]\n        Redis[\"Jedis 4.3\"]\n    end\n    subgraph Log[\"Logging\"]\n        SLF4J[\"SLF4J 1.7\"]\n        Logback[\"Logback 1.2\"]\n    end\n    subgraph Sec[\"Security\"]\n        SpringSec[\"Spring Security 5.7\"]\n    end\n    subgraph Util[\"Utilities\"]\n        Lombok[\"Lombok 1.18\"]\n        Jackson[\"Jackson 2.14\"]\n    end\n\n    App -->|\"web\"| Web\n    App -->|\"persistence\"| DB\n    App -->|\"messaging\"| Messaging\n    App -->|\"caching\"| Cache\n    App -->|\"logging\"| Log\n    App -->|\"security\"| Sec\n    App -->|\"utilities\"| Util\n    SLF4J -.->|\"implementation\"| Logback\n~~~\n\n**Textual explanations (write immediately after the diagram):**\n- **Dependency Summary table**: Category | Count | Key Libraries | Notes (e.g., Web Frameworks | 2 | ASP.NET MVC 5.2.7, Razor 3.2.7 | Legacy MVC stack on .NET Framework)\n- **Version & Compatibility Risks**: A short paragraph highlighting dependencies that are outdated, end-of-life, or have known migration concerns (e.g., \".NET Framework 4.7.2 is in maintenance mode; Entity Framework 6 has a migration path to EF Core\")\n- **Notable Observations**: 2-4 bullet points on anything noteworthy — duplicate functionality across libraries, deprecated packages, security-sensitive dependencies, or unusually large transitive trees\n\n### Step 2: Generate Test Dependencies Section\n\nCollect all test-scoped dependencies (excluded from the main diagram) and produce the complete `## Test Dependencies` section:\n\n- List detected test frameworks and supporting libraries with their versions (e.g., JUnit 5, Mockito, AssertJ, Testcontainers, xUnit, Jest)\n- Report the total number of test-scope dependencies\n- Note any test infrastructure concerns (e.g., outdated test framework version, missing contract-testing library, no integration test framework detected)\n\n### Step 3: Save Output\n\nSave to `.github\u002Fmodernize\u002Fassessment\u002Fengines\u002Ffacts\u002Fdependency-map.md` with this exact structure:\n\n```\n# Dependency Map\n\nA brief introduction (1-2 sentences) stating project name and total dependency count.\n\n## Dependencies\n\n\u003C Mermaid flowchart LR here >\n\n### Dependency Summary\n\n[Table: Category | Count | Key Libraries | Notes]\n\n### Version & Compatibility Risks\n\n[Short paragraph on outdated or end-of-life dependencies]\n\n### Notable Observations\n\n[2-4 bullet points on noteworthy findings]\n\n## Test Dependencies\n\n[Table: Framework | Version | Notes]\n\nTotal test-scope dependencies: N\n[1-2 sentences on test infrastructure observations, or \"No test dependencies detected.\"]\n```\n\n## Scaling Rules\n\n- If the project has **more than 50 declared dependencies**, collapse minor utilities into a single aggregate node (e.g., `Utils[\"12 utility libraries\"]`) and only show individually the top dependencies by importance\n- Keep the diagram under **40 nodes** to ensure readability and GitHub rendering compatibility\n- For multi-module projects (e.g., multi-module Maven\u002FGradle, multi-project .sln), show shared dependencies once and module-specific dependencies grouped by module\n\n## Common failure patterns observed in past runs\n\nEach row below is something the model actually produced that crashed the diagram. Use the ✅ form.\n\n| ❌ Past mistake | ✅ Safe form | Why the ❌ crashed |\n|---|---|---|\n| `subgraph \"Database \u002F ORM\"` | `subgraph DB[\"Database \u002F ORM\"]` | Anonymous subgraph + `\u002F` in title |\n| `Spring[\"Spring Boot\\n2.5.12\"]` | `Spring[\"Spring Boot 2.5.12\"]` | Literal `\\n` |\n| `App -->\\|persistence\\| DB` | `App -->\\|\"persistence\"\\| DB` | Bare arrow label |\n| `Lib[\"Spring Boot — 2.5\"]` | `Lib[\"Spring Boot - 2.5\"]` | em-dash inside label |\n| `Lib[\"foo {bar}\"]` | `Lib[\"foo bar\"]` | `{}` inside label |\n\n## Error Handling\n\n- **Unsupported project type**: Output a single line: `> ERROR: Unsupported project type. This skill supports Java, .NET, JavaScript, and TypeScript projects only.`\n- **No build files found**: Output: `> ERROR: No recognized build files found at workspace-path. Verify the path is correct.`\n- **Incomplete dependency info**: Generate a best-effort diagram from available data. Add a note inside the diagram: `Note[\"Some dependencies could not be fully resolved\"]`\n\n## Success Criteria\n\n- Mermaid diagram renders correctly with dependencies grouped by functional category\n- Each dependency shows name and version\n- Dependency Summary table lists categories with counts and key libraries\n- Version & Compatibility Risks paragraph highlights outdated or end-of-life dependencies\n- Notable Observations lists 2-4 noteworthy findings\n- Test Dependencies section lists detected test frameworks with versions and total count\n- The ```mermaid block is preceded by the `\u003C!-- mermaid-checked: ... -->` attestation comment\n- File saved to `.github\u002Fmodernize\u002Fassessment\u002Fengines\u002Ffacts\u002Fdependency-map.md`\n",{"data":39,"body":40},{"name":4,"description":6},{"type":41,"children":42},"root",[43,51,66,87,94,110,116,136,694,701,714,726,731,735,741,747,760,777,795,800,818,823,841,851,977,982,1000,1015,1072,1077,1413,1421,1454,1460,1473,1491,1497,1509,1518,1524,1564,1570,1575,1750,1756,1807,1813,1869],{"type":44,"tag":45,"props":46,"children":47},"element","h1",{"id":4},[48],{"type":49,"value":50},"text","Dependency Map",{"type":44,"tag":52,"props":53,"children":54},"p",{},[55,57,64],{"type":49,"value":56},"Analyze project build and package files to generate a visual map of all external dependencies grouped by functional category. Save to ",{"type":44,"tag":58,"props":59,"children":61},"code",{"className":60},[],[62],{"type":49,"value":63},".github\u002Fmodernize\u002Fassessment\u002Fengines\u002Ffacts\u002Fdependency-map.md",{"type":49,"value":65},".",{"type":44,"tag":52,"props":67,"children":68},{},[69,71,77,79,85],{"type":49,"value":70},"This skill focuses exclusively on ",{"type":44,"tag":72,"props":73,"children":74},"strong",{},[75],{"type":49,"value":76},"declared external dependencies",{"type":49,"value":78}," (libraries, frameworks, packages). For internal application structure and component relationships, see the ",{"type":44,"tag":58,"props":80,"children":82},{"className":81},[],[83],{"type":49,"value":84},"architecture-diagram",{"type":49,"value":86}," skill.",{"type":44,"tag":88,"props":89,"children":91},"h2",{"id":90},"input-parameters",[92],{"type":49,"value":93},"Input Parameters",{"type":44,"tag":95,"props":96,"children":97},"ul",{},[98],{"type":44,"tag":99,"props":100,"children":101},"li",{},[102,108],{"type":44,"tag":58,"props":103,"children":105},{"className":104},[],[106],{"type":49,"value":107},"workspace-path",{"type":49,"value":109}," (optional): Path to the project to analyze (defaults to current directory)",{"type":44,"tag":88,"props":111,"children":113},{"id":112},"mermaid-safety-constraints-read-before-you-write-the-mermaid-block",[114],{"type":49,"value":115},"⚠ Mermaid Safety Constraints — read BEFORE you write the ```mermaid block",{"type":44,"tag":52,"props":117,"children":118},{},[119,121,126,128,134],{"type":49,"value":120},"Mermaid is unforgiving: one illegal character anywhere in the block crashes the ",{"type":44,"tag":72,"props":122,"children":123},{},[124],{"type":49,"value":125},"whole",{"type":49,"value":127}," diagram with ",{"type":44,"tag":58,"props":129,"children":131},{"className":130},[],[132],{"type":49,"value":133},"Syntax error in text",{"type":49,"value":135},", not just the offending line. Stay strictly inside this subset:",{"type":44,"tag":137,"props":138,"children":139},"ol",{},[140,158,222,240,281,315,662,672],{"type":44,"tag":99,"props":141,"children":142},{},[143,148,150,156],{"type":44,"tag":72,"props":144,"children":145},{},[146],{"type":49,"value":147},"Chart kind.",{"type":49,"value":149}," ",{"type":44,"tag":58,"props":151,"children":153},{"className":152},[],[154],{"type":49,"value":155},"flowchart LR",{"type":49,"value":157}," only.",{"type":44,"tag":99,"props":159,"children":160},{},[161,166,168,174,176,182,184,190,192,198,200,206,207,213,214,220],{"type":44,"tag":72,"props":162,"children":163},{},[164],{"type":49,"value":165},"Subgraph form.",{"type":49,"value":167}," Always ",{"type":44,"tag":58,"props":169,"children":171},{"className":170},[],[172],{"type":49,"value":173},"subgraph \u003CAlphaNumId>[\"display label\"]",{"type":49,"value":175}," (id matches ",{"type":44,"tag":58,"props":177,"children":179},{"className":178},[],[180],{"type":49,"value":181},"[A-Za-z][A-Za-z0-9_]*",{"type":49,"value":183},", no spaces, no punctuation). NEVER use the anonymous form ",{"type":44,"tag":58,"props":185,"children":187},{"className":186},[],[188],{"type":49,"value":189},"subgraph \"label\"",{"type":49,"value":191}," — it crashes whenever the label contains ",{"type":44,"tag":58,"props":193,"children":195},{"className":194},[],[196],{"type":49,"value":197},"(",{"type":49,"value":199},", ",{"type":44,"tag":58,"props":201,"children":203},{"className":202},[],[204],{"type":49,"value":205},")",{"type":49,"value":199},{"type":44,"tag":58,"props":208,"children":210},{"className":209},[],[211],{"type":49,"value":212},"\u002F",{"type":49,"value":199},{"type":44,"tag":58,"props":215,"children":217},{"className":216},[],[218],{"type":49,"value":219},"-",{"type":49,"value":221},", etc.",{"type":44,"tag":99,"props":223,"children":224},{},[225,230,232,238],{"type":44,"tag":72,"props":226,"children":227},{},[228],{"type":49,"value":229},"Node form.",{"type":49,"value":231}," Use ",{"type":44,"tag":58,"props":233,"children":235},{"className":234},[],[236],{"type":49,"value":237},"Id[\"label\"]",{"type":49,"value":239}," for libraries; pick one shape per node — do not stack brackets.",{"type":44,"tag":99,"props":241,"children":242},{},[243,248,250,256,258,264,266,272,274,280],{"type":44,"tag":72,"props":244,"children":245},{},[246],{"type":49,"value":247},"Arrow form.",{"type":49,"value":249}," Solid ",{"type":44,"tag":58,"props":251,"children":253},{"className":252},[],[254],{"type":49,"value":255},"-->",{"type":49,"value":257},", dotted ",{"type":44,"tag":58,"props":259,"children":261},{"className":260},[],[262],{"type":49,"value":263},"-.->",{"type":49,"value":265}," for transitive\u002Findirect. Arrow labels MUST be double-quoted: ",{"type":44,"tag":58,"props":267,"children":269},{"className":268},[],[270],{"type":49,"value":271},"-->|\"persistence\"|",{"type":49,"value":273},". Never bare ",{"type":44,"tag":58,"props":275,"children":277},{"className":276},[],[278],{"type":49,"value":279},"-->|persistence|",{"type":49,"value":65},{"type":44,"tag":99,"props":282,"children":283},{},[284,289,291,297,299,305,307,313],{"type":44,"tag":72,"props":285,"children":286},{},[287],{"type":49,"value":288},"No line breaks in labels.",{"type":49,"value":290}," The escape ",{"type":44,"tag":58,"props":292,"children":294},{"className":293},[],[295],{"type":49,"value":296},"\\n",{"type":49,"value":298}," was removed in modern Mermaid and is the #1 cause of failures. Keep labels on one line (e.g., ",{"type":44,"tag":58,"props":300,"children":302},{"className":301},[],[303],{"type":49,"value":304},"\"Spring Boot 2.7.18\"",{"type":49,"value":306}," not ",{"type":44,"tag":58,"props":308,"children":310},{"className":309},[],[311],{"type":49,"value":312},"\"Spring Boot\\n2.7.18\"",{"type":49,"value":314},").",{"type":44,"tag":99,"props":316,"children":317},{},[318,323,325],{"type":44,"tag":72,"props":319,"children":320},{},[321],{"type":49,"value":322},"Banned characters inside any label or subgraph title.",{"type":49,"value":324}," Use the ASCII replacement:",{"type":44,"tag":326,"props":327,"children":328},"table",{},[329,353],{"type":44,"tag":330,"props":331,"children":332},"thead",{},[333],{"type":44,"tag":334,"props":335,"children":336},"tr",{},[337,343,348],{"type":44,"tag":338,"props":339,"children":340},"th",{},[341],{"type":49,"value":342},"Banned",{"type":44,"tag":338,"props":344,"children":345},{},[346],{"type":49,"value":347},"Why it breaks",{"type":44,"tag":338,"props":349,"children":350},{},[351],{"type":49,"value":352},"Replacement",{"type":44,"tag":354,"props":355,"children":356},"tbody",{},[357,387,416,442,471,501,524,574,609],{"type":44,"tag":334,"props":358,"children":359},{},[360,371,376],{"type":44,"tag":361,"props":362,"children":363},"td",{},[364,369],{"type":44,"tag":58,"props":365,"children":367},{"className":366},[],[368],{"type":49,"value":296},{"type":49,"value":370}," (literal two chars)",{"type":44,"tag":361,"props":372,"children":373},{},[374],{"type":49,"value":375},"escape removed",{"type":44,"tag":361,"props":377,"children":378},{},[379,381],{"type":49,"value":380},"drop, or ",{"type":44,"tag":58,"props":382,"children":384},{"className":383},[],[385],{"type":49,"value":386},"\u003Cbr\u002F>",{"type":44,"tag":334,"props":388,"children":389},{},[390,401,406],{"type":44,"tag":361,"props":391,"children":392},{},[393,399],{"type":44,"tag":58,"props":394,"children":396},{"className":395},[],[397],{"type":49,"value":398},"—",{"type":49,"value":400}," (em-dash, U+2014)",{"type":44,"tag":361,"props":402,"children":403},{},[404],{"type":49,"value":405},"parser treats as edge",{"type":44,"tag":361,"props":407,"children":408},{},[409,414],{"type":44,"tag":58,"props":410,"children":412},{"className":411},[],[413],{"type":49,"value":219},{"type":49,"value":415}," (ASCII hyphen)",{"type":44,"tag":334,"props":417,"children":418},{},[419,430,434],{"type":44,"tag":361,"props":420,"children":421},{},[422,428],{"type":44,"tag":58,"props":423,"children":425},{"className":424},[],[426],{"type":49,"value":427},"–",{"type":49,"value":429}," (en-dash, U+2013)",{"type":44,"tag":361,"props":431,"children":432},{},[433],{"type":49,"value":405},{"type":44,"tag":361,"props":435,"children":436},{},[437],{"type":44,"tag":58,"props":438,"children":440},{"className":439},[],[441],{"type":49,"value":219},{"type":44,"tag":334,"props":443,"children":444},{},[445,461,466],{"type":44,"tag":361,"props":446,"children":447},{},[448,454,455],{"type":44,"tag":58,"props":449,"children":451},{"className":450},[],[452],{"type":49,"value":453},"{",{"type":49,"value":149},{"type":44,"tag":58,"props":456,"children":458},{"className":457},[],[459],{"type":49,"value":460},"}",{"type":44,"tag":361,"props":462,"children":463},{},[464],{"type":49,"value":465},"opens an entity block",{"type":44,"tag":361,"props":467,"children":468},{},[469],{"type":49,"value":470},"drop braces",{"type":44,"tag":334,"props":472,"children":473},{},[474,485,490],{"type":44,"tag":361,"props":475,"children":476},{},[477,483],{"type":44,"tag":58,"props":478,"children":480},{"className":479},[],[481],{"type":49,"value":482},"\"",{"type":49,"value":484}," inside a label",{"type":44,"tag":361,"props":486,"children":487},{},[488],{"type":49,"value":489},"closes the label early",{"type":44,"tag":361,"props":491,"children":492},{},[493,499],{"type":44,"tag":58,"props":494,"children":496},{"className":495},[],[497],{"type":49,"value":498},"'",{"type":49,"value":500}," (single quote)",{"type":44,"tag":334,"props":502,"children":503},{},[504,514,519],{"type":44,"tag":361,"props":505,"children":506},{},[507,513],{"type":44,"tag":58,"props":508,"children":510},{"className":509},[],[511],{"type":49,"value":512},"|",{"type":49,"value":484},{"type":44,"tag":361,"props":515,"children":516},{},[517],{"type":49,"value":518},"breaks edge-label parser",{"type":44,"tag":361,"props":520,"children":521},{},[522],{"type":49,"value":523},"rephrase",{"type":44,"tag":334,"props":525,"children":526},{},[527,564,569],{"type":44,"tag":361,"props":528,"children":529},{},[530,536,537,543,544,550,551,557,558],{"type":44,"tag":58,"props":531,"children":533},{"className":532},[],[534],{"type":49,"value":535},"@",{"type":49,"value":149},{"type":44,"tag":58,"props":538,"children":540},{"className":539},[],[541],{"type":49,"value":542},"#",{"type":49,"value":149},{"type":44,"tag":58,"props":545,"children":547},{"className":546},[],[548],{"type":49,"value":549},"$",{"type":49,"value":149},{"type":44,"tag":58,"props":552,"children":554},{"className":553},[],[555],{"type":49,"value":556},"%",{"type":49,"value":149},{"type":44,"tag":58,"props":559,"children":561},{"className":560},[],[562],{"type":49,"value":563},"&",{"type":44,"tag":361,"props":565,"children":566},{},[567],{"type":49,"value":568},"unsafe",{"type":44,"tag":361,"props":570,"children":571},{},[572],{"type":49,"value":573},"rephrase or drop",{"type":44,"tag":334,"props":575,"children":576},{},[577,599,604],{"type":44,"tag":361,"props":578,"children":579},{},[580,585,586,591,593],{"type":44,"tag":58,"props":581,"children":583},{"className":582},[],[584],{"type":49,"value":197},{"type":49,"value":149},{"type":44,"tag":58,"props":587,"children":589},{"className":588},[],[590],{"type":49,"value":205},{"type":49,"value":592}," outside ",{"type":44,"tag":58,"props":594,"children":596},{"className":595},[],[597],{"type":49,"value":598},"[\"...\"]",{"type":44,"tag":361,"props":600,"children":601},{},[602],{"type":49,"value":603},"unbalanced parens crash",{"type":44,"tag":361,"props":605,"children":606},{},[607],{"type":49,"value":608},"only inside the quoted label",{"type":44,"tag":334,"props":610,"children":611},{},[612,640,645],{"type":44,"tag":361,"props":613,"children":614},{},[615,617,622,623,628,629,634,635],{"type":49,"value":616},"smart quotes ",{"type":44,"tag":58,"props":618,"children":620},{"className":619},[],[621],{"type":49,"value":482},{"type":49,"value":149},{"type":44,"tag":58,"props":624,"children":626},{"className":625},[],[627],{"type":49,"value":482},{"type":49,"value":149},{"type":44,"tag":58,"props":630,"children":632},{"className":631},[],[633],{"type":49,"value":498},{"type":49,"value":149},{"type":44,"tag":58,"props":636,"children":638},{"className":637},[],[639],{"type":49,"value":498},{"type":44,"tag":361,"props":641,"children":642},{},[643],{"type":49,"value":644},"not ASCII",{"type":44,"tag":361,"props":646,"children":647},{},[648,650,655,657],{"type":49,"value":649},"regular ",{"type":44,"tag":58,"props":651,"children":653},{"className":652},[],[654],{"type":49,"value":482},{"type":49,"value":656}," and ",{"type":44,"tag":58,"props":658,"children":660},{"className":659},[],[661],{"type":49,"value":498},{"type":44,"tag":99,"props":663,"children":664},{},[665,670],{"type":44,"tag":72,"props":666,"children":667},{},[668],{"type":49,"value":669},"Unique node IDs across the whole diagram.",{"type":49,"value":671}," No two nodes\u002Fsubgraphs may share an id.",{"type":44,"tag":99,"props":673,"children":674},{},[675],{"type":44,"tag":72,"props":676,"children":677},{},[678,684,686,692],{"type":44,"tag":58,"props":679,"children":681},{"className":680},[],[682],{"type":49,"value":683},"subgraph",{"type":49,"value":685}," must be closed by a matching ",{"type":44,"tag":58,"props":687,"children":689},{"className":688},[],[690],{"type":49,"value":691},"end",{"type":49,"value":693}," on its own line.",{"type":44,"tag":695,"props":696,"children":698},"h3",{"id":697},"mandatory-self-attestation",[699],{"type":49,"value":700},"Mandatory self-attestation",{"type":44,"tag":52,"props":702,"children":703},{},[704,706,712],{"type":49,"value":705},"Immediately before writing the ",{"type":44,"tag":58,"props":707,"children":709},{"className":708},[],[710],{"type":49,"value":711},"```mermaid",{"type":49,"value":713}," opening fence, emit this exact one-line HTML comment in the markdown (it does not render — it is for your own visible attestation):",{"type":44,"tag":715,"props":716,"children":720},"pre",{"className":717,"code":719,"language":49},[718],"language-text","\u003C!-- mermaid-checked: no \\n, no em-dash\u002Fen-dash, no {} in labels, subgraphs are id[\"label\"], arrows are -->|\"label\"|, all subgraphs closed by end, ids unique -->\n",[721],{"type":44,"tag":58,"props":722,"children":724},{"__ignoreMap":723},"",[725],{"type":49,"value":719},{"type":44,"tag":52,"props":727,"children":728},{},[729],{"type":49,"value":730},"If you cannot truthfully emit that comment, fix the diagram first.",{"type":44,"tag":732,"props":733,"children":734},"hr",{},[],{"type":44,"tag":88,"props":736,"children":738},{"id":737},"execution-steps",[739],{"type":49,"value":740},"Execution Steps",{"type":44,"tag":695,"props":742,"children":744},{"id":743},"step-1-generate-dependencies-section",[745],{"type":49,"value":746},"Step 1: Generate Dependencies Section",{"type":44,"tag":52,"props":748,"children":749},{},[750,752,758],{"type":49,"value":751},"Analyze build files and produce the complete ",{"type":44,"tag":58,"props":753,"children":755},{"className":754},[],[756],{"type":49,"value":757},"## Dependencies",{"type":49,"value":759}," section in one pass:",{"type":44,"tag":52,"props":761,"children":762},{},[763,768,770,775],{"type":44,"tag":72,"props":764,"children":765},{},[766],{"type":49,"value":767},"Analysis — examine only build and package management files",{"type":49,"value":769}," (do NOT scan source code — that is the ",{"type":44,"tag":58,"props":771,"children":773},{"className":772},[],[774],{"type":49,"value":84},{"type":49,"value":776}," skill's job):",{"type":44,"tag":95,"props":778,"children":779},{},[780,785,790],{"type":44,"tag":99,"props":781,"children":782},{},[783],{"type":49,"value":784},"Java: pom.xml, build.gradle, settings.gradle, gradle.properties, gradle lockfiles",{"type":44,"tag":99,"props":786,"children":787},{},[788],{"type":49,"value":789},".NET: *.csproj, Directory.Build.props, packages.config, Directory.Packages.props",{"type":44,"tag":99,"props":791,"children":792},{},[793],{"type":49,"value":794},"JavaScript\u002FTypeScript: package.json, package-lock.json, yarn.lock, pnpm-lock.yaml",{"type":44,"tag":52,"props":796,"children":797},{},[798],{"type":49,"value":799},"For each dependency extract:",{"type":44,"tag":95,"props":801,"children":802},{},[803,808,813],{"type":44,"tag":99,"props":804,"children":805},{},[806],{"type":49,"value":807},"Group\u002Fpackage name and artifact name",{"type":44,"tag":99,"props":809,"children":810},{},[811],{"type":49,"value":812},"Declared version (or version range)",{"type":44,"tag":99,"props":814,"children":815},{},[816],{"type":49,"value":817},"Scope (compile, runtime, test, provided)",{"type":44,"tag":52,"props":819,"children":820},{},[821],{"type":49,"value":822},"Also detect:",{"type":44,"tag":95,"props":824,"children":825},{},[826,831,836],{"type":44,"tag":99,"props":827,"children":828},{},[829],{"type":49,"value":830},"Parent POM \u002F BOM imports (Java)",{"type":44,"tag":99,"props":832,"children":833},{},[834],{"type":49,"value":835},"Central package management (.NET Directory.Packages.props)",{"type":44,"tag":99,"props":837,"children":838},{},[839],{"type":49,"value":840},"Transitive dependencies where visible from lock files or BOM",{"type":44,"tag":52,"props":842,"children":843},{},[844,849],{"type":44,"tag":72,"props":845,"children":846},{},[847],{"type":49,"value":848},"Categorize",{"type":49,"value":850}," dependencies into functional groups:",{"type":44,"tag":326,"props":852,"children":853},{},[854,870],{"type":44,"tag":330,"props":855,"children":856},{},[857],{"type":44,"tag":334,"props":858,"children":859},{},[860,865],{"type":44,"tag":338,"props":861,"children":862},{},[863],{"type":49,"value":864},"Category",{"type":44,"tag":338,"props":866,"children":867},{},[868],{"type":49,"value":869},"Examples",{"type":44,"tag":354,"props":871,"children":872},{},[873,886,899,912,925,938,951,964],{"type":44,"tag":334,"props":874,"children":875},{},[876,881],{"type":44,"tag":361,"props":877,"children":878},{},[879],{"type":49,"value":880},"Web Frameworks",{"type":44,"tag":361,"props":882,"children":883},{},[884],{"type":49,"value":885},"Spring Web, ASP.NET Core MVC, JAX-RS",{"type":44,"tag":334,"props":887,"children":888},{},[889,894],{"type":44,"tag":361,"props":890,"children":891},{},[892],{"type":49,"value":893},"Database \u002F ORM",{"type":44,"tag":361,"props":895,"children":896},{},[897],{"type":49,"value":898},"Hibernate, Entity Framework, JDBC drivers",{"type":44,"tag":334,"props":900,"children":901},{},[902,907],{"type":44,"tag":361,"props":903,"children":904},{},[905],{"type":49,"value":906},"Messaging",{"type":44,"tag":361,"props":908,"children":909},{},[910],{"type":49,"value":911},"Kafka client, RabbitMQ, Azure Service Bus",{"type":44,"tag":334,"props":913,"children":914},{},[915,920],{"type":44,"tag":361,"props":916,"children":917},{},[918],{"type":49,"value":919},"Caching",{"type":44,"tag":361,"props":921,"children":922},{},[923],{"type":49,"value":924},"Redis, EhCache, MemoryCache",{"type":44,"tag":334,"props":926,"children":927},{},[928,933],{"type":44,"tag":361,"props":929,"children":930},{},[931],{"type":49,"value":932},"Logging",{"type":44,"tag":361,"props":934,"children":935},{},[936],{"type":49,"value":937},"SLF4J, Log4j, Serilog, NLog",{"type":44,"tag":334,"props":939,"children":940},{},[941,946],{"type":44,"tag":361,"props":942,"children":943},{},[944],{"type":49,"value":945},"Security",{"type":44,"tag":361,"props":947,"children":948},{},[949],{"type":49,"value":950},"Spring Security, Microsoft.Identity, OAuth libs",{"type":44,"tag":334,"props":952,"children":953},{},[954,959],{"type":44,"tag":361,"props":955,"children":956},{},[957],{"type":49,"value":958},"Observability",{"type":44,"tag":361,"props":960,"children":961},{},[962],{"type":49,"value":963},"Micrometer, OpenTelemetry, Application Insights",{"type":44,"tag":334,"props":965,"children":966},{},[967,972],{"type":44,"tag":361,"props":968,"children":969},{},[970],{"type":49,"value":971},"Utilities",{"type":44,"tag":361,"props":973,"children":974},{},[975],{"type":49,"value":976},"Guava, Apache Commons, Lombok, AutoMapper",{"type":44,"tag":52,"props":978,"children":979},{},[980],{"type":49,"value":981},"Rules:",{"type":44,"tag":95,"props":983,"children":984},{},[985,990,995],{"type":44,"tag":99,"props":986,"children":987},{},[988],{"type":49,"value":989},"Exclude test-scoped dependencies (JUnit, xUnit, Mockito, etc.) from the main diagram and Dependency Summary table — they are not relevant for modernization planning",{"type":44,"tag":99,"props":991,"children":992},{},[993],{"type":49,"value":994},"If a dependency doesn't fit any category, put it under \"Utilities\"",{"type":44,"tag":99,"props":996,"children":997},{},[998],{"type":49,"value":999},"Collect test-scoped dependencies separately for the Test Dependencies section (Step 2)",{"type":44,"tag":52,"props":1001,"children":1002},{},[1003,1013],{"type":44,"tag":72,"props":1004,"children":1005},{},[1006,1008],{"type":49,"value":1007},"Diagram — Mermaid ",{"type":44,"tag":58,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":49,"value":155},{"type":49,"value":1014}," (re-read the Safety Constraints above before writing):",{"type":44,"tag":95,"props":1016,"children":1017},{},[1018,1023,1043,1062,1067],{"type":44,"tag":99,"props":1019,"children":1020},{},[1021],{"type":49,"value":1022},"Application as the central left-side node",{"type":44,"tag":99,"props":1024,"children":1025},{},[1026,1028,1033,1035,1041],{"type":49,"value":1027},"One ",{"type":44,"tag":58,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":49,"value":683},{"type":49,"value":1034}," per functional category, using the ",{"type":44,"tag":58,"props":1036,"children":1038},{"className":1037},[],[1039],{"type":49,"value":1040},"subgraph Id[\"display label\"]",{"type":49,"value":1042}," form",{"type":44,"tag":99,"props":1044,"children":1045},{},[1046,1048,1054,1056,1061],{"type":49,"value":1047},"Each dependency as a node showing name and version: ",{"type":44,"tag":58,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":49,"value":1053},"Lib[\"Library Name 1.2.3\"]",{"type":49,"value":1055}," (single line, no ",{"type":44,"tag":58,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":49,"value":296},{"type":49,"value":205},{"type":44,"tag":99,"props":1063,"children":1064},{},[1065],{"type":49,"value":1066},"Arrows from Application to each category subgraph",{"type":44,"tag":99,"props":1068,"children":1069},{},[1070],{"type":49,"value":1071},"If a BOM\u002Fparent POM manages versions, show it as a separate node linked to the dependencies it governs",{"type":44,"tag":52,"props":1073,"children":1074},{},[1075],{"type":49,"value":1076},"Reference example (this block satisfies every Safety Constraint — match its shape):",{"type":44,"tag":715,"props":1078,"children":1082},{"className":1079,"code":1080,"language":1081,"meta":723,"style":723},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flowchart LR\n    App[\"MyApplication\"]\n\n    subgraph Web[\"Web Frameworks\"]\n        SpringMVC[\"Spring MVC 5.3.x\"]\n        Thymeleaf[\"Thymeleaf 3.0\"]\n    end\n    subgraph DB[\"Database \u002F ORM\"]\n        Hibernate[\"Hibernate 5.6\"]\n        PgDriver[\"PostgreSQL Driver 42.6\"]\n    end\n    subgraph Messaging[\"Messaging\"]\n        Kafka[\"Kafka Client 3.4\"]\n    end\n    subgraph Cache[\"Caching\"]\n        Redis[\"Jedis 4.3\"]\n    end\n    subgraph Log[\"Logging\"]\n        SLF4J[\"SLF4J 1.7\"]\n        Logback[\"Logback 1.2\"]\n    end\n    subgraph Sec[\"Security\"]\n        SpringSec[\"Spring Security 5.7\"]\n    end\n    subgraph Util[\"Utilities\"]\n        Lombok[\"Lombok 1.18\"]\n        Jackson[\"Jackson 2.14\"]\n    end\n\n    App -->|\"web\"| Web\n    App -->|\"persistence\"| DB\n    App -->|\"messaging\"| Messaging\n    App -->|\"caching\"| Cache\n    App -->|\"logging\"| Log\n    App -->|\"security\"| Sec\n    App -->|\"utilities\"| Util\n    SLF4J -.->|\"implementation\"| Logback\n","mermaid",[1083],{"type":44,"tag":58,"props":1084,"children":1085},{"__ignoreMap":723},[1086,1097,1106,1116,1125,1134,1143,1152,1160,1169,1178,1186,1195,1204,1212,1221,1230,1238,1247,1256,1265,1273,1282,1291,1299,1308,1317,1326,1334,1342,1351,1360,1369,1378,1386,1395,1404],{"type":44,"tag":1087,"props":1088,"children":1091},"span",{"class":1089,"line":1090},"line",1,[1092],{"type":44,"tag":1087,"props":1093,"children":1094},{},[1095],{"type":49,"value":1096},"flowchart LR\n",{"type":44,"tag":1087,"props":1098,"children":1100},{"class":1089,"line":1099},2,[1101],{"type":44,"tag":1087,"props":1102,"children":1103},{},[1104],{"type":49,"value":1105},"    App[\"MyApplication\"]\n",{"type":44,"tag":1087,"props":1107,"children":1109},{"class":1089,"line":1108},3,[1110],{"type":44,"tag":1087,"props":1111,"children":1113},{"emptyLinePlaceholder":1112},true,[1114],{"type":49,"value":1115},"\n",{"type":44,"tag":1087,"props":1117,"children":1119},{"class":1089,"line":1118},4,[1120],{"type":44,"tag":1087,"props":1121,"children":1122},{},[1123],{"type":49,"value":1124},"    subgraph Web[\"Web Frameworks\"]\n",{"type":44,"tag":1087,"props":1126,"children":1128},{"class":1089,"line":1127},5,[1129],{"type":44,"tag":1087,"props":1130,"children":1131},{},[1132],{"type":49,"value":1133},"        SpringMVC[\"Spring MVC 5.3.x\"]\n",{"type":44,"tag":1087,"props":1135,"children":1137},{"class":1089,"line":1136},6,[1138],{"type":44,"tag":1087,"props":1139,"children":1140},{},[1141],{"type":49,"value":1142},"        Thymeleaf[\"Thymeleaf 3.0\"]\n",{"type":44,"tag":1087,"props":1144,"children":1146},{"class":1089,"line":1145},7,[1147],{"type":44,"tag":1087,"props":1148,"children":1149},{},[1150],{"type":49,"value":1151},"    end\n",{"type":44,"tag":1087,"props":1153,"children":1154},{"class":1089,"line":29},[1155],{"type":44,"tag":1087,"props":1156,"children":1157},{},[1158],{"type":49,"value":1159},"    subgraph DB[\"Database \u002F ORM\"]\n",{"type":44,"tag":1087,"props":1161,"children":1163},{"class":1089,"line":1162},9,[1164],{"type":44,"tag":1087,"props":1165,"children":1166},{},[1167],{"type":49,"value":1168},"        Hibernate[\"Hibernate 5.6\"]\n",{"type":44,"tag":1087,"props":1170,"children":1172},{"class":1089,"line":1171},10,[1173],{"type":44,"tag":1087,"props":1174,"children":1175},{},[1176],{"type":49,"value":1177},"        PgDriver[\"PostgreSQL Driver 42.6\"]\n",{"type":44,"tag":1087,"props":1179,"children":1181},{"class":1089,"line":1180},11,[1182],{"type":44,"tag":1087,"props":1183,"children":1184},{},[1185],{"type":49,"value":1151},{"type":44,"tag":1087,"props":1187,"children":1189},{"class":1089,"line":1188},12,[1190],{"type":44,"tag":1087,"props":1191,"children":1192},{},[1193],{"type":49,"value":1194},"    subgraph Messaging[\"Messaging\"]\n",{"type":44,"tag":1087,"props":1196,"children":1198},{"class":1089,"line":1197},13,[1199],{"type":44,"tag":1087,"props":1200,"children":1201},{},[1202],{"type":49,"value":1203},"        Kafka[\"Kafka Client 3.4\"]\n",{"type":44,"tag":1087,"props":1205,"children":1207},{"class":1089,"line":1206},14,[1208],{"type":44,"tag":1087,"props":1209,"children":1210},{},[1211],{"type":49,"value":1151},{"type":44,"tag":1087,"props":1213,"children":1215},{"class":1089,"line":1214},15,[1216],{"type":44,"tag":1087,"props":1217,"children":1218},{},[1219],{"type":49,"value":1220},"    subgraph Cache[\"Caching\"]\n",{"type":44,"tag":1087,"props":1222,"children":1224},{"class":1089,"line":1223},16,[1225],{"type":44,"tag":1087,"props":1226,"children":1227},{},[1228],{"type":49,"value":1229},"        Redis[\"Jedis 4.3\"]\n",{"type":44,"tag":1087,"props":1231,"children":1233},{"class":1089,"line":1232},17,[1234],{"type":44,"tag":1087,"props":1235,"children":1236},{},[1237],{"type":49,"value":1151},{"type":44,"tag":1087,"props":1239,"children":1241},{"class":1089,"line":1240},18,[1242],{"type":44,"tag":1087,"props":1243,"children":1244},{},[1245],{"type":49,"value":1246},"    subgraph Log[\"Logging\"]\n",{"type":44,"tag":1087,"props":1248,"children":1250},{"class":1089,"line":1249},19,[1251],{"type":44,"tag":1087,"props":1252,"children":1253},{},[1254],{"type":49,"value":1255},"        SLF4J[\"SLF4J 1.7\"]\n",{"type":44,"tag":1087,"props":1257,"children":1259},{"class":1089,"line":1258},20,[1260],{"type":44,"tag":1087,"props":1261,"children":1262},{},[1263],{"type":49,"value":1264},"        Logback[\"Logback 1.2\"]\n",{"type":44,"tag":1087,"props":1266,"children":1268},{"class":1089,"line":1267},21,[1269],{"type":44,"tag":1087,"props":1270,"children":1271},{},[1272],{"type":49,"value":1151},{"type":44,"tag":1087,"props":1274,"children":1276},{"class":1089,"line":1275},22,[1277],{"type":44,"tag":1087,"props":1278,"children":1279},{},[1280],{"type":49,"value":1281},"    subgraph Sec[\"Security\"]\n",{"type":44,"tag":1087,"props":1283,"children":1285},{"class":1089,"line":1284},23,[1286],{"type":44,"tag":1087,"props":1287,"children":1288},{},[1289],{"type":49,"value":1290},"        SpringSec[\"Spring Security 5.7\"]\n",{"type":44,"tag":1087,"props":1292,"children":1294},{"class":1089,"line":1293},24,[1295],{"type":44,"tag":1087,"props":1296,"children":1297},{},[1298],{"type":49,"value":1151},{"type":44,"tag":1087,"props":1300,"children":1302},{"class":1089,"line":1301},25,[1303],{"type":44,"tag":1087,"props":1304,"children":1305},{},[1306],{"type":49,"value":1307},"    subgraph Util[\"Utilities\"]\n",{"type":44,"tag":1087,"props":1309,"children":1311},{"class":1089,"line":1310},26,[1312],{"type":44,"tag":1087,"props":1313,"children":1314},{},[1315],{"type":49,"value":1316},"        Lombok[\"Lombok 1.18\"]\n",{"type":44,"tag":1087,"props":1318,"children":1320},{"class":1089,"line":1319},27,[1321],{"type":44,"tag":1087,"props":1322,"children":1323},{},[1324],{"type":49,"value":1325},"        Jackson[\"Jackson 2.14\"]\n",{"type":44,"tag":1087,"props":1327,"children":1329},{"class":1089,"line":1328},28,[1330],{"type":44,"tag":1087,"props":1331,"children":1332},{},[1333],{"type":49,"value":1151},{"type":44,"tag":1087,"props":1335,"children":1337},{"class":1089,"line":1336},29,[1338],{"type":44,"tag":1087,"props":1339,"children":1340},{"emptyLinePlaceholder":1112},[1341],{"type":49,"value":1115},{"type":44,"tag":1087,"props":1343,"children":1345},{"class":1089,"line":1344},30,[1346],{"type":44,"tag":1087,"props":1347,"children":1348},{},[1349],{"type":49,"value":1350},"    App -->|\"web\"| Web\n",{"type":44,"tag":1087,"props":1352,"children":1354},{"class":1089,"line":1353},31,[1355],{"type":44,"tag":1087,"props":1356,"children":1357},{},[1358],{"type":49,"value":1359},"    App -->|\"persistence\"| DB\n",{"type":44,"tag":1087,"props":1361,"children":1363},{"class":1089,"line":1362},32,[1364],{"type":44,"tag":1087,"props":1365,"children":1366},{},[1367],{"type":49,"value":1368},"    App -->|\"messaging\"| Messaging\n",{"type":44,"tag":1087,"props":1370,"children":1372},{"class":1089,"line":1371},33,[1373],{"type":44,"tag":1087,"props":1374,"children":1375},{},[1376],{"type":49,"value":1377},"    App -->|\"caching\"| Cache\n",{"type":44,"tag":1087,"props":1379,"children":1380},{"class":1089,"line":25},[1381],{"type":44,"tag":1087,"props":1382,"children":1383},{},[1384],{"type":49,"value":1385},"    App -->|\"logging\"| Log\n",{"type":44,"tag":1087,"props":1387,"children":1389},{"class":1089,"line":1388},35,[1390],{"type":44,"tag":1087,"props":1391,"children":1392},{},[1393],{"type":49,"value":1394},"    App -->|\"security\"| Sec\n",{"type":44,"tag":1087,"props":1396,"children":1398},{"class":1089,"line":1397},36,[1399],{"type":44,"tag":1087,"props":1400,"children":1401},{},[1402],{"type":49,"value":1403},"    App -->|\"utilities\"| Util\n",{"type":44,"tag":1087,"props":1405,"children":1407},{"class":1089,"line":1406},37,[1408],{"type":44,"tag":1087,"props":1409,"children":1410},{},[1411],{"type":49,"value":1412},"    SLF4J -.->|\"implementation\"| Logback\n",{"type":44,"tag":52,"props":1414,"children":1415},{},[1416],{"type":44,"tag":72,"props":1417,"children":1418},{},[1419],{"type":49,"value":1420},"Textual explanations (write immediately after the diagram):",{"type":44,"tag":95,"props":1422,"children":1423},{},[1424,1434,1444],{"type":44,"tag":99,"props":1425,"children":1426},{},[1427,1432],{"type":44,"tag":72,"props":1428,"children":1429},{},[1430],{"type":49,"value":1431},"Dependency Summary table",{"type":49,"value":1433},": Category | Count | Key Libraries | Notes (e.g., Web Frameworks | 2 | ASP.NET MVC 5.2.7, Razor 3.2.7 | Legacy MVC stack on .NET Framework)",{"type":44,"tag":99,"props":1435,"children":1436},{},[1437,1442],{"type":44,"tag":72,"props":1438,"children":1439},{},[1440],{"type":49,"value":1441},"Version & Compatibility Risks",{"type":49,"value":1443},": A short paragraph highlighting dependencies that are outdated, end-of-life, or have known migration concerns (e.g., \".NET Framework 4.7.2 is in maintenance mode; Entity Framework 6 has a migration path to EF Core\")",{"type":44,"tag":99,"props":1445,"children":1446},{},[1447,1452],{"type":44,"tag":72,"props":1448,"children":1449},{},[1450],{"type":49,"value":1451},"Notable Observations",{"type":49,"value":1453},": 2-4 bullet points on anything noteworthy — duplicate functionality across libraries, deprecated packages, security-sensitive dependencies, or unusually large transitive trees",{"type":44,"tag":695,"props":1455,"children":1457},{"id":1456},"step-2-generate-test-dependencies-section",[1458],{"type":49,"value":1459},"Step 2: Generate Test Dependencies Section",{"type":44,"tag":52,"props":1461,"children":1462},{},[1463,1465,1471],{"type":49,"value":1464},"Collect all test-scoped dependencies (excluded from the main diagram) and produce the complete ",{"type":44,"tag":58,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":49,"value":1470},"## Test Dependencies",{"type":49,"value":1472}," section:",{"type":44,"tag":95,"props":1474,"children":1475},{},[1476,1481,1486],{"type":44,"tag":99,"props":1477,"children":1478},{},[1479],{"type":49,"value":1480},"List detected test frameworks and supporting libraries with their versions (e.g., JUnit 5, Mockito, AssertJ, Testcontainers, xUnit, Jest)",{"type":44,"tag":99,"props":1482,"children":1483},{},[1484],{"type":49,"value":1485},"Report the total number of test-scope dependencies",{"type":44,"tag":99,"props":1487,"children":1488},{},[1489],{"type":49,"value":1490},"Note any test infrastructure concerns (e.g., outdated test framework version, missing contract-testing library, no integration test framework detected)",{"type":44,"tag":695,"props":1492,"children":1494},{"id":1493},"step-3-save-output",[1495],{"type":49,"value":1496},"Step 3: Save Output",{"type":44,"tag":52,"props":1498,"children":1499},{},[1500,1502,1507],{"type":49,"value":1501},"Save to ",{"type":44,"tag":58,"props":1503,"children":1505},{"className":1504},[],[1506],{"type":49,"value":63},{"type":49,"value":1508}," with this exact structure:",{"type":44,"tag":715,"props":1510,"children":1513},{"className":1511,"code":1512,"language":49},[718],"# Dependency Map\n\nA brief introduction (1-2 sentences) stating project name and total dependency count.\n\n## Dependencies\n\n\u003C Mermaid flowchart LR here >\n\n### Dependency Summary\n\n[Table: Category | Count | Key Libraries | Notes]\n\n### Version & Compatibility Risks\n\n[Short paragraph on outdated or end-of-life dependencies]\n\n### Notable Observations\n\n[2-4 bullet points on noteworthy findings]\n\n## Test Dependencies\n\n[Table: Framework | Version | Notes]\n\nTotal test-scope dependencies: N\n[1-2 sentences on test infrastructure observations, or \"No test dependencies detected.\"]\n",[1514],{"type":44,"tag":58,"props":1515,"children":1516},{"__ignoreMap":723},[1517],{"type":49,"value":1512},{"type":44,"tag":88,"props":1519,"children":1521},{"id":1520},"scaling-rules",[1522],{"type":49,"value":1523},"Scaling Rules",{"type":44,"tag":95,"props":1525,"children":1526},{},[1527,1547,1559],{"type":44,"tag":99,"props":1528,"children":1529},{},[1530,1532,1537,1539,1545],{"type":49,"value":1531},"If the project has ",{"type":44,"tag":72,"props":1533,"children":1534},{},[1535],{"type":49,"value":1536},"more than 50 declared dependencies",{"type":49,"value":1538},", collapse minor utilities into a single aggregate node (e.g., ",{"type":44,"tag":58,"props":1540,"children":1542},{"className":1541},[],[1543],{"type":49,"value":1544},"Utils[\"12 utility libraries\"]",{"type":49,"value":1546},") and only show individually the top dependencies by importance",{"type":44,"tag":99,"props":1548,"children":1549},{},[1550,1552,1557],{"type":49,"value":1551},"Keep the diagram under ",{"type":44,"tag":72,"props":1553,"children":1554},{},[1555],{"type":49,"value":1556},"40 nodes",{"type":49,"value":1558}," to ensure readability and GitHub rendering compatibility",{"type":44,"tag":99,"props":1560,"children":1561},{},[1562],{"type":49,"value":1563},"For multi-module projects (e.g., multi-module Maven\u002FGradle, multi-project .sln), show shared dependencies once and module-specific dependencies grouped by module",{"type":44,"tag":88,"props":1565,"children":1567},{"id":1566},"common-failure-patterns-observed-in-past-runs",[1568],{"type":49,"value":1569},"Common failure patterns observed in past runs",{"type":44,"tag":52,"props":1571,"children":1572},{},[1573],{"type":49,"value":1574},"Each row below is something the model actually produced that crashed the diagram. Use the ✅ form.",{"type":44,"tag":326,"props":1576,"children":1577},{},[1578,1599],{"type":44,"tag":330,"props":1579,"children":1580},{},[1581],{"type":44,"tag":334,"props":1582,"children":1583},{},[1584,1589,1594],{"type":44,"tag":338,"props":1585,"children":1586},{},[1587],{"type":49,"value":1588},"❌ Past mistake",{"type":44,"tag":338,"props":1590,"children":1591},{},[1592],{"type":49,"value":1593},"✅ Safe form",{"type":44,"tag":338,"props":1595,"children":1596},{},[1597],{"type":49,"value":1598},"Why the ❌ crashed",{"type":44,"tag":354,"props":1600,"children":1601},{},[1602,1635,1666,1692,1718],{"type":44,"tag":334,"props":1603,"children":1604},{},[1605,1614,1623],{"type":44,"tag":361,"props":1606,"children":1607},{},[1608],{"type":44,"tag":58,"props":1609,"children":1611},{"className":1610},[],[1612],{"type":49,"value":1613},"subgraph \"Database \u002F ORM\"",{"type":44,"tag":361,"props":1615,"children":1616},{},[1617],{"type":44,"tag":58,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":49,"value":1622},"subgraph DB[\"Database \u002F ORM\"]",{"type":44,"tag":361,"props":1624,"children":1625},{},[1626,1628,1633],{"type":49,"value":1627},"Anonymous subgraph + ",{"type":44,"tag":58,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":49,"value":212},{"type":49,"value":1634}," in title",{"type":44,"tag":334,"props":1636,"children":1637},{},[1638,1647,1656],{"type":44,"tag":361,"props":1639,"children":1640},{},[1641],{"type":44,"tag":58,"props":1642,"children":1644},{"className":1643},[],[1645],{"type":49,"value":1646},"Spring[\"Spring Boot\\n2.5.12\"]",{"type":44,"tag":361,"props":1648,"children":1649},{},[1650],{"type":44,"tag":58,"props":1651,"children":1653},{"className":1652},[],[1654],{"type":49,"value":1655},"Spring[\"Spring Boot 2.5.12\"]",{"type":44,"tag":361,"props":1657,"children":1658},{},[1659,1661],{"type":49,"value":1660},"Literal ",{"type":44,"tag":58,"props":1662,"children":1664},{"className":1663},[],[1665],{"type":49,"value":296},{"type":44,"tag":334,"props":1667,"children":1668},{},[1669,1678,1687],{"type":44,"tag":361,"props":1670,"children":1671},{},[1672],{"type":44,"tag":58,"props":1673,"children":1675},{"className":1674},[],[1676],{"type":49,"value":1677},"App -->|persistence| DB",{"type":44,"tag":361,"props":1679,"children":1680},{},[1681],{"type":44,"tag":58,"props":1682,"children":1684},{"className":1683},[],[1685],{"type":49,"value":1686},"App -->|\"persistence\"| DB",{"type":44,"tag":361,"props":1688,"children":1689},{},[1690],{"type":49,"value":1691},"Bare arrow label",{"type":44,"tag":334,"props":1693,"children":1694},{},[1695,1704,1713],{"type":44,"tag":361,"props":1696,"children":1697},{},[1698],{"type":44,"tag":58,"props":1699,"children":1701},{"className":1700},[],[1702],{"type":49,"value":1703},"Lib[\"Spring Boot — 2.5\"]",{"type":44,"tag":361,"props":1705,"children":1706},{},[1707],{"type":44,"tag":58,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":49,"value":1712},"Lib[\"Spring Boot - 2.5\"]",{"type":44,"tag":361,"props":1714,"children":1715},{},[1716],{"type":49,"value":1717},"em-dash inside label",{"type":44,"tag":334,"props":1719,"children":1720},{},[1721,1730,1739],{"type":44,"tag":361,"props":1722,"children":1723},{},[1724],{"type":44,"tag":58,"props":1725,"children":1727},{"className":1726},[],[1728],{"type":49,"value":1729},"Lib[\"foo {bar}\"]",{"type":44,"tag":361,"props":1731,"children":1732},{},[1733],{"type":44,"tag":58,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":49,"value":1738},"Lib[\"foo bar\"]",{"type":44,"tag":361,"props":1740,"children":1741},{},[1742,1748],{"type":44,"tag":58,"props":1743,"children":1745},{"className":1744},[],[1746],{"type":49,"value":1747},"{}",{"type":49,"value":1749}," inside label",{"type":44,"tag":88,"props":1751,"children":1753},{"id":1752},"error-handling",[1754],{"type":49,"value":1755},"Error Handling",{"type":44,"tag":95,"props":1757,"children":1758},{},[1759,1775,1791],{"type":44,"tag":99,"props":1760,"children":1761},{},[1762,1767,1769],{"type":44,"tag":72,"props":1763,"children":1764},{},[1765],{"type":49,"value":1766},"Unsupported project type",{"type":49,"value":1768},": Output a single line: ",{"type":44,"tag":58,"props":1770,"children":1772},{"className":1771},[],[1773],{"type":49,"value":1774},"> ERROR: Unsupported project type. This skill supports Java, .NET, JavaScript, and TypeScript projects only.",{"type":44,"tag":99,"props":1776,"children":1777},{},[1778,1783,1785],{"type":44,"tag":72,"props":1779,"children":1780},{},[1781],{"type":49,"value":1782},"No build files found",{"type":49,"value":1784},": Output: ",{"type":44,"tag":58,"props":1786,"children":1788},{"className":1787},[],[1789],{"type":49,"value":1790},"> ERROR: No recognized build files found at workspace-path. Verify the path is correct.",{"type":44,"tag":99,"props":1792,"children":1793},{},[1794,1799,1801],{"type":44,"tag":72,"props":1795,"children":1796},{},[1797],{"type":49,"value":1798},"Incomplete dependency info",{"type":49,"value":1800},": Generate a best-effort diagram from available data. Add a note inside the diagram: ",{"type":44,"tag":58,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":49,"value":1806},"Note[\"Some dependencies could not be fully resolved\"]",{"type":44,"tag":88,"props":1808,"children":1810},{"id":1809},"success-criteria",[1811],{"type":49,"value":1812},"Success Criteria",{"type":44,"tag":95,"props":1814,"children":1815},{},[1816,1821,1826,1831,1836,1841,1846,1859],{"type":44,"tag":99,"props":1817,"children":1818},{},[1819],{"type":49,"value":1820},"Mermaid diagram renders correctly with dependencies grouped by functional category",{"type":44,"tag":99,"props":1822,"children":1823},{},[1824],{"type":49,"value":1825},"Each dependency shows name and version",{"type":44,"tag":99,"props":1827,"children":1828},{},[1829],{"type":49,"value":1830},"Dependency Summary table lists categories with counts and key libraries",{"type":44,"tag":99,"props":1832,"children":1833},{},[1834],{"type":49,"value":1835},"Version & Compatibility Risks paragraph highlights outdated or end-of-life dependencies",{"type":44,"tag":99,"props":1837,"children":1838},{},[1839],{"type":49,"value":1840},"Notable Observations lists 2-4 noteworthy findings",{"type":44,"tag":99,"props":1842,"children":1843},{},[1844],{"type":49,"value":1845},"Test Dependencies section lists detected test frameworks with versions and total count",{"type":44,"tag":99,"props":1847,"children":1848},{},[1849,1851,1857],{"type":49,"value":1850},"The ```mermaid block is preceded by the ",{"type":44,"tag":58,"props":1852,"children":1854},{"className":1853},[],[1855],{"type":49,"value":1856},"\u003C!-- mermaid-checked: ... -->",{"type":49,"value":1858}," attestation comment",{"type":44,"tag":99,"props":1860,"children":1861},{},[1862,1864],{"type":49,"value":1863},"File saved to ",{"type":44,"tag":58,"props":1865,"children":1867},{"className":1866},[],[1868],{"type":49,"value":63},{"type":44,"tag":1870,"props":1871,"children":1872},"style",{},[1873],{"type":49,"value":1874},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1876,"total":2068},[1877,1897,1918,1939,1953,1970,1981,1994,2009,2024,2043,2056],{"slug":1878,"name":1878,"fn":1879,"description":1880,"org":1881,"tags":1882,"stars":1894,"repoUrl":1895,"updatedAt":1896},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1883,1884,1887,1888,1891],{"name":17,"slug":18,"type":15},{"name":1885,"slug":1886,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1889,"slug":1890,"type":15},"Project Management","project-management",{"name":1892,"slug":1893,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1898,"name":1898,"fn":1899,"description":1900,"org":1901,"tags":1902,"stars":1915,"repoUrl":1916,"updatedAt":1917},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1903,1906,1909,1912],{"name":1904,"slug":1905,"type":15},".NET","net",{"name":1907,"slug":1908,"type":15},"Agents","agents",{"name":1910,"slug":1911,"type":15},"Azure","azure",{"name":1913,"slug":1914,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1919,"name":1919,"fn":1920,"description":1921,"org":1922,"tags":1923,"stars":1915,"repoUrl":1916,"updatedAt":1938},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1924,1927,1928,1931,1934,1935],{"name":1925,"slug":1926,"type":15},"Analytics","analytics",{"name":1910,"slug":1911,"type":15},{"name":1929,"slug":1930,"type":15},"Data Analysis","data-analysis",{"name":1932,"slug":1933,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1936,"slug":1937,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1940,"name":1940,"fn":1941,"description":1942,"org":1943,"tags":1944,"stars":1915,"repoUrl":1916,"updatedAt":1952},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1945,1948,1949,1950],{"name":1946,"slug":1947,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1910,"slug":1911,"type":15},{"name":1932,"slug":1933,"type":15},{"name":945,"slug":1951,"type":15},"security","2026-07-07T06:53:31.293235",{"slug":1954,"name":1954,"fn":1955,"description":1956,"org":1957,"tags":1958,"stars":1915,"repoUrl":1916,"updatedAt":1969},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1959,1960,1963,1964,1965,1968],{"name":1910,"slug":1911,"type":15},{"name":1961,"slug":1962,"type":15},"Compliance","compliance",{"name":1913,"slug":1914,"type":15},{"name":9,"slug":8,"type":15},{"name":1966,"slug":1967,"type":15},"Python","python",{"name":945,"slug":1951,"type":15},"2026-07-18T05:14:23.017504",{"slug":1971,"name":1971,"fn":1972,"description":1973,"org":1974,"tags":1975,"stars":1915,"repoUrl":1916,"updatedAt":1980},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1976,1977,1978,1979],{"name":1925,"slug":1926,"type":15},{"name":1910,"slug":1911,"type":15},{"name":1913,"slug":1914,"type":15},{"name":1966,"slug":1967,"type":15},"2026-07-31T05:54:29.068751",{"slug":1982,"name":1982,"fn":1983,"description":1984,"org":1985,"tags":1986,"stars":1915,"repoUrl":1916,"updatedAt":1993},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1987,1990,1991,1992],{"name":1988,"slug":1989,"type":15},"API Development","api-development",{"name":1910,"slug":1911,"type":15},{"name":9,"slug":8,"type":15},{"name":1966,"slug":1967,"type":15},"2026-07-18T05:14:16.988376",{"slug":1995,"name":1995,"fn":1996,"description":1997,"org":1998,"tags":1999,"stars":1915,"repoUrl":1916,"updatedAt":2008},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2000,2001,2004,2007],{"name":1910,"slug":1911,"type":15},{"name":2002,"slug":2003,"type":15},"Computer Vision","computer-vision",{"name":2005,"slug":2006,"type":15},"Images","images",{"name":1966,"slug":1967,"type":15},"2026-07-18T05:14:18.007737",{"slug":2010,"name":2010,"fn":2011,"description":2012,"org":2013,"tags":2014,"stars":1915,"repoUrl":1916,"updatedAt":2023},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2015,2016,2019,2022],{"name":1910,"slug":1911,"type":15},{"name":2017,"slug":2018,"type":15},"Configuration","configuration",{"name":2020,"slug":2021,"type":15},"Feature Flags","feature-flags",{"name":1932,"slug":1933,"type":15},"2026-07-03T16:32:01.278468",{"slug":2025,"name":2025,"fn":2026,"description":2027,"org":2028,"tags":2029,"stars":1915,"repoUrl":1916,"updatedAt":2042},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2030,2033,2036,2039],{"name":2031,"slug":2032,"type":15},"Cosmos DB","cosmos-db",{"name":2034,"slug":2035,"type":15},"Database","database",{"name":2037,"slug":2038,"type":15},"NoSQL","nosql",{"name":2040,"slug":2041,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":2044,"name":2044,"fn":2026,"description":2045,"org":2046,"tags":2047,"stars":1915,"repoUrl":1916,"updatedAt":2055},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2048,2049,2050,2051,2052],{"name":2031,"slug":2032,"type":15},{"name":2034,"slug":2035,"type":15},{"name":9,"slug":8,"type":15},{"name":2037,"slug":2038,"type":15},{"name":2053,"slug":2054,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":2057,"name":2057,"fn":2058,"description":2059,"org":2060,"tags":2061,"stars":1915,"repoUrl":1916,"updatedAt":2067},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2062,2063,2064,2065,2066],{"name":1910,"slug":1911,"type":15},{"name":2031,"slug":2032,"type":15},{"name":2034,"slug":2035,"type":15},{"name":1932,"slug":1933,"type":15},{"name":2037,"slug":2038,"type":15},"2026-05-13T06:14:17.582229",267,{"items":2070,"total":29},[2071,2085,2096,2109,2116,2129,2140],{"slug":2072,"name":2072,"fn":2073,"description":2074,"org":2075,"tags":2076,"stars":25,"repoUrl":26,"updatedAt":2084},"assessment","assess application repositories for modernization","Run application assessment for a single repository",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2077,2080,2081,2082],{"name":2078,"slug":2079,"type":15},"Audit","audit",{"name":23,"slug":24,"type":15},{"name":9,"slug":8,"type":15},{"name":2083,"slug":32,"type":15},"Modernization","2026-07-07T06:52:46.921075",{"slug":2086,"name":2086,"fn":2087,"description":2088,"org":2089,"tags":2090,"stars":25,"repoUrl":26,"updatedAt":2095},"clarifying-scenarios","evaluate modernization request scenario context","Evaluates whether a user's modernization\u002Frewrite request provides enough scenario context to proceed (e.g., target component library, screenshots, design system for frontend; API contract policy, data migration strategy for backend). Produces a deterministic clarity score, asks the user for missing required fields via a structured form, and writes a canonical `clarification.md` artifact consumed by all downstream agents.\nTriggers: \"clarification gate\", \"scenario clarification\", \"elicit missing context\", \"evaluate prompt completeness\", \"ask user for screenshots \u002F target library \u002F design system\".\nNOT for: feature specification (use feature-inventory), planning (use creating-implementation-plan), implementation (use implementing-code), or resolving spec-time `[NEEDS CLARIFICATION]` markers (those remain owned by feature-inventory).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2091,2093,2094],{"name":2092,"slug":31,"type":15},"Copilot",{"name":17,"slug":18,"type":15},{"name":2083,"slug":32,"type":15},"2026-07-03T16:31:04.911521",{"slug":2097,"name":2097,"fn":2098,"description":2099,"org":2100,"tags":2101,"stars":25,"repoUrl":26,"updatedAt":2108},"create-modernization-plan","create modernization plans for Azure migration","Create a modernization plan to migrate the project to Azure",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2102,2103,2106,2107],{"name":1910,"slug":1911,"type":15},{"name":2104,"slug":2105,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":2083,"slug":32,"type":15},"2026-07-07T06:52:44.361557",{"slug":4,"name":4,"fn":5,"description":6,"org":2110,"tags":2111,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2112,2113,2114,2115],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"slug":2117,"name":2117,"fn":2118,"description":2119,"org":2120,"tags":2121,"stars":25,"repoUrl":26,"updatedAt":2128},"guidelines","apply framework migration and transformation rules","Collection of framework-to-framework migration rules and transformation patterns (e.g., Struts→Spring MVC, JSP→Thymeleaf, EJB→Spring Boot).\nTriggers: \"check migration guidelines\", \"look up transformation rules\", \"find Struts-to-Spring patterns\", \"apply migration conventions\", \"conversion rules for X→Y\".\nAlso consumed automatically by breaking-down-tasks and implementing-code during migration workflows.\nNOT for: direct execution — other skills scan this directory.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2122,2123,2124,2127],{"name":1932,"slug":1933,"type":15},{"name":9,"slug":8,"type":15},{"name":2125,"slug":2126,"type":15},"Migration","migration",{"name":2083,"slug":32,"type":15},"2026-07-03T16:31:08.783756",{"slug":2130,"name":2130,"fn":2131,"description":2132,"org":2133,"tags":2134,"stars":25,"repoUrl":26,"updatedAt":2139},"implementing-code","execute implementation tasks for modernization","Executes a batch of implementation tasks with TDD workflow, source-anchored rewrite for behavioral fidelity, guideline-based code transformation, and full requirement tracing. Returns a structured batch report.\nTriggers: \"implement tasks\", \"execute the batch\", \"write code for these tasks\", \"implement with source anchoring\", \"run the implementation\".\nNOT for: task generation (use breaking-down-tasks), implementation planning (use creating-implementation-plan).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2135,2136,2137,2138],{"name":2092,"slug":31,"type":15},{"name":17,"slug":18,"type":15},{"name":2125,"slug":2126,"type":15},{"name":2083,"slug":32,"type":15},"2026-07-18T05:14:07.057305",{"slug":2141,"name":2141,"fn":2142,"description":2143,"org":2144,"tags":2145,"stars":25,"repoUrl":26,"updatedAt":2156},"quality-gates","run quality gate validation for workflows","Runs quality gate validation at each workflow stage. Supports 4 gate types: spec-quality, spec-to-plan, plan-to-tasks, completeness. Produces gate pass\u002Ffail reports with actionable feedback.\nTriggers: \"run quality gate\", \"validate spec quality\", \"spec quality\", \"plan coverage\", \"check plan coverage\", \"validate plan to tasks\", \"check task traceability\", \"verify task completeness\", \"run completeness review\", \"review implementation\", \"check plan traceability\", \"check coverage\", \"completeness quality gate\", \"final sign-off\", \"feature parity sign-off\", \"completeness gate\", \"feature parity\", \"sign-off report\", \"verify all requirements\".\nRequires `type` parameter to select the gate.\nNOT for: code review, implementation (use implementing-code), spec writing.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2146,2147,2150,2153],{"name":9,"slug":8,"type":15},{"name":2148,"slug":2149,"type":15},"QA","qa",{"name":2151,"slug":2152,"type":15},"Testing","testing",{"name":2154,"slug":2155,"type":15},"Workflow Automation","workflow-automation","2026-07-07T06:52:45.631984"]