fix-cyclic-deps
SkillDetect and resolve cyclic module dependencies introduced during UI5 modernization. Trigger when user mentions: "cyclic dependency", "circular import", "undefined module at runtime", "lazy require", "sap.ui.require sync", "import cycle", or when a module returns undefined despite a correct import pat
Install
git clone https://github.com/UI5/plugins-coding-agents.git ~/.claude/skills/fix-cyclic-depsWhat is fix-cyclic-deps?
Detect and resolve cyclic module dependencies introduced during UI5 modernization. Trigger when user mentions: "cyclic dependency", "circular import", "undefined module at runtime", "lazy require", "sap.ui.require sync", "import cycle", or when a module returns undefined despite a correct import path. Classic symptom: a module is `undefined` at runtime despite a correct sap.ui.define import path. Auto-fixes 2-node cycles (A↔B) by converting the lesser-used edge to lazy sap.ui.require(). Auto-fixes longer chains (3+ nodes) via hub-based approach. Reports unfixable chains to MODERNIZATION-ISSUES.md. Runs as Phase 3, Step 3.3 (final step) after all other Phase 3 steps.
What this can do
Capabilities declared in this component's own frontmatter — not inferred.
Inherit all session tools
Declares no tool restrictions — inherits every session tool
~169 tokens of context used while enabled, before you invoke anything
Documentation
README · ~19 min readFix Cyclic Module Dependencies
This skill detects and resolves cyclic module dependencies that arise during UI5 modernization. When modernization phases convert global namespace access to proper sap.ui.define imports, new dependency edges are added to the module graph. If these edges create a circular import (A imports B, B imports A), the UI5 AMD loader returns undefined for the back-edge module.
The fix: replace the back-edge sap.ui.define dependency with a lazy sap.ui.require("path/to/Module") (synchronous form) at each call site. This retrieves the already-loaded module from the loader cache without creating a dependency edge.
Linter Rule
| Rule ID | Message Pattern | This Skill's Action |
|---|---|---|
| (none — structural) | Runtime: module is undefined despite correct import path | Detect cycle in dependency graph, convert back-edge to lazy sap.ui.require() |
This skill is NOT triggered by a UI5 linter rule. It addresses a structural problem in the module dependency graph that the linter does not check. It is triggered as the final fix phase in the modernization workflow, or standalone when a developer encounters undefined modules at runtime.
When to Use
- In modernization workflow: As Phase 3, Step 3.3 (final step) after ALL other Phase 3 steps (3.1 globals/pseudo-modules + 3.2 blind-spots) complete. Multiple steps add
sap.ui.defineedges that can create cycles — running once at the end operates on the final dependency graph.
Reviews
Log in to leave a review.
No reviews yet — be the first.
Explore related
Other things in this space — across every part of the ecosystem, not just skills.
Skillssimilar to this one
All skills →ui-ux-pro-max-skill
An AI SKILL that provide design intelligence for building professional UI/UX multiple platforms
111.3K stars
impeccable
The design language that makes your AI harness better at design.
52.5K stars
plugin-structure
This skill should be used when the user asks to "create a plugin", "scaffold a plugin", "understand plugin structure", "organize plugin components", "set up plugin.json", "use ${CLAUDE_PLUGIN_ROOT}", "add commands/agents/skills/hooks", "configure auto-discovery", or needs guidance on plugin director
32.8K stars
Subagents
All subagents →architecture-critic
Reviews proposed target architectures and transformed code against modern best practice. Adversarial — looks for over-engineering, missed requirements, and simpler alternatives.
32.8K stars
code-architect
Designs feature architectures by analyzing existing codebase patterns and conventions, then providing comprehensive implementation blueprints with specific files to create/modify, component designs, data flows, and build sequences
32.8K stars
plugin-validator
Use this agent when the user asks to "validate my plugin", "check plugin structure", "verify plugin is correct", "validate plugin.json", "check plugin files", or mentions plugin validation. Also trigger proactively after user creates or modifies plugin components. Examples: <example> Context: User f
32.8K stars
MCP Servers
All mcp servers →Figma-Context-MCP
MCP server to provide Figma layout information to AI coding agents like Cursor
15.5K stars
dbhub
Zero-dependency, token-efficient database MCP server for Postgres, MySQL, SQL Server, MariaDB, SQLite.
3.3K stars
Brandsystem MCP — Brand Guidelines for AI
Use existing brand guidelines with AI. Turn websites, PDFs, and Figma into a .brand runtime.
9 stars
Commands
All commands →feature-dev
Guided feature development with codebase understanding and architecture focus
32.8K stars
modernize-transform
Transform one legacy module to the target stack — idiomatic rewrite with behavior-equivalence tests
32.8K stars
modernize-extract-rules
Mine business logic from legacy code into testable, human-readable rule specifications
32.8K stars
Plugins
All plugins →frontend-design
Create distinctive, production-grade frontend interfaces with high design quality. Generates creative, polished code that avoids generic AI aesthetics.
32.9K stars
playground
Creates interactive HTML playgrounds — self-contained single-file explorers with visual controls, live preview, and prompt output with copy button. Includes templates for design playgrounds, data explorers, concept maps, and document critique.
32.9K stars
feature-dev
Comprehensive feature development workflow with specialized agents for codebase exploration, architecture design, and quality review
32.9K stars