Hello, Seunghyun Lee.
First of all, I 100% agree with you on the importance of the practice environment. Seeing the feedback you left—even while lowering your rating—I could truly feel how much trial and error and inconvenience you must have experienced while testing multiple versions yourself. As the instructor providing this course, I believe I should have definitely provided more meticulous guidance on this part.
To provide further explanation regarding the Python Task Runner Sandbox issue you mentioned: at the time I was configuring and testing the project for this course several months ago, it was not highlighted as a problem as it is now.
Originally, when n8n first appeared, it became quite a hot topic among developers because it was the only AI Agent tool to provide a Python code node. However, when people actually tried using it, there were many complaints that it was a "half-baked" feature due to the inability to use external libraries and its very limited functionality. This code node was then expanded into the "Task Runner" concept in version 2.x. Although there were some complaints that code nodes from previous versions could not be reused because the syntax had changed, many people welcomed the fact that they could now use external libraries, which was not possible in version 1.x.
Of course, since the Task Runner concept was first introduced in n8n 2.x, there have been various opinions within the developer community regarding the code node, and it is true that issues in a similar context were mentioned intermittently. However, this is an area that sits on a boundary; depending on one's perspective, it could be seen as a security vulnerability or, conversely, interpreted as a feature for flexible execution.
Furthermore, I was not aware beforehand of the background as to why something that wasn't treated as a major problem previously has now been officially handled as a security issue. However, at the time I was preparing the course, I judged that version 2.x had reached a certain level of stability, and I believe it was a lapse in my judgment that I did not sufficiently consider version dependencies.
As you pointed out, the fact that not only the n8n version but also the Task Runner and Dockerfile environment must be matched for it to function properly was a crucial element that should have been clearly guided from the beginning.
For now, I have replaced the course materials in the n8n installation lecture with content that specifies the versions for both n8n and the Task Runner Dockerfile. I have also added details regarding version specification to the lecture notes to ensure other students do not encounter the same problem. Additionally, I will use subtitles in the video files later to add the mandatory versioning information you mentioned.
Thank you once again for your detailed and sincere feedback.
---------------
Additional Items
After posting the comment above, I have summarized a few points identified by referring to GitHub and various forums.
In the latest version as of today (2.17.7), there is a strange bug where the date object property returned by date.today() is internally wrapped in a mappingproxy. I'm not sure if this is a bug or intentional (though there is zero reason for it to be intentional), but seeing as everything else works fine and only this is behaving strangely, it appears to be a bug. Due to this issue, running the code provided in the lecture on the latest version of n8n results in a mappingproxy error. Therefore, to use the code provided in the lecture as-is, you must either run it on version 2.12.2 or, if running on today's latest version (2.17.7), change the today = date.today() used in the code to use a time object instead of a date object. I will attach the modified code to the course materials for the "Executing Python Code and Understanding Data Flow in n8n" lecture.
In conclusion, the Python Task Runner Sandbox Escape security issue you mentioned is not directly related to the current lecture; rather, it appears that the code provided as course material is not functioning correctly in the latest version due to a bug within n8n itself. Regardless, thank you for providing such valuable information and helping me discover a bug I had overlooked.