<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eduard</title>
    <description>The latest articles on DEV Community by Eduard (@eduardj_67dc3f850).</description>
    <link>https://dev.to/eduardj_67dc3f850</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3838524%2Fe9f8717d-938f-42fa-8eed-eefe60a05444.png</url>
      <title>DEV Community: Eduard</title>
      <link>https://dev.to/eduardj_67dc3f850</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eduardj_67dc3f850"/>
    <language>en</language>
    <item>
      <title>LLM Migration: Fable, Codex, and Claude Code on nopCommerce</title>
      <dc:creator>Eduard</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:24:24 +0000</pubDate>
      <link>https://dev.to/eduardj_67dc3f850/llm-migration-fable-codex-and-claude-code-on-nopcommerce-p11</link>
      <guid>https://dev.to/eduardj_67dc3f850/llm-migration-fable-codex-and-claude-code-on-nopcommerce-p11</guid>
      <description>&lt;h1&gt;
  
  
  Switching to a Harder Migration Target
&lt;/h1&gt;

&lt;p&gt;The first comparison used &lt;strong&gt;eShopOnWeb&lt;/strong&gt;, which was useful for testing the workflow, but it is still a relatively moderate codebase.&lt;/p&gt;

&lt;p&gt;That makes it good for a first pass, but not ideal for stressing the parts that break during real migrations: hidden coupling, mixed concerns, runtime assumptions, and behavior spread across many layers.&lt;/p&gt;

&lt;p&gt;For the next step, I switched to &lt;strong&gt;nopCommerce&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At the same time, the model landscape also changed. New models became available, including &lt;strong&gt;Fable&lt;/strong&gt;, so this round focuses on a new comparison instead of repeating the exact same lineup.&lt;/p&gt;

&lt;p&gt;The goal stayed the same: measure how well different models can produce a reliable first-pass architectural orientation of an unfamiliar legacy system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why nopCommerce
&lt;/h2&gt;

&lt;p&gt;nopCommerce is a much better stress test for migration-oriented analysis than eShopOnWeb.&lt;/p&gt;

&lt;p&gt;It is a larger, older, more feature-dense ASP.NET application with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public storefront flows&lt;/li&gt;
&lt;li&gt;a large admin area&lt;/li&gt;
&lt;li&gt;multiple database providers&lt;/li&gt;
&lt;li&gt;plugin-based extensions&lt;/li&gt;
&lt;li&gt;in-process scheduled tasks&lt;/li&gt;
&lt;li&gt;many integrations and configuration surfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters because migration work usually gets blocked in operational details such as startup flow, scheduling, plugin loading, order processing, configuration writes, and cross-cutting infrastructure.&lt;/p&gt;

&lt;p&gt;In a codebase like this, a model has to do more than summarize folders. It has to follow execution paths and separate observed facts from plausible guesses.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experiment Setup
&lt;/h2&gt;

&lt;p&gt;I used the same overall idea as before: ask each model to generate a project-orientation document for the repository, then compare the outputs with a fixed AI-as-judge rubric.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generated orientation documents
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prompt&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/nopCommerce/01/codex-readme-prompt.md" rel="noopener noreferrer"&gt;codex-readme-prompt.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/nopCommerce/01/responses/codex-readme-prompt-response.md" rel="noopener noreferrer"&gt;Codex (GPT-5.4) response&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/nopCommerce/01/make-readme-fable.md" rel="noopener noreferrer"&gt;make-readme-fable.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/nopCommerce/01/responses/fable-readme-response.md" rel="noopener noreferrer"&gt;Fable response&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/nopCommerce/01/make-readme-opus.md" rel="noopener noreferrer"&gt;make-readme-opus.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/nopCommerce/01/responses/opus-readme-response.md" rel="noopener noreferrer"&gt;Claude Code response&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These documents were then compared pairwise using the judge prompts under &lt;code&gt;ai-judge/nopCommerce/v1&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evaluation Rubric
&lt;/h2&gt;

&lt;p&gt;I kept the same rubric as in the earlier comparison:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Evidence Grounding&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structural Accuracy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependency Mapping&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Critical Flow Identification&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migration Insight Quality&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Epistemic Discipline&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Signal-to-Noise Ratio&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Goal: compare quality of codebase understanding with less attention on style or verbosity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reference table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Prompt file&lt;/th&gt;
&lt;th&gt;Result file&lt;/th&gt;
&lt;th&gt;Document A&lt;/th&gt;
&lt;th&gt;Document B&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/nopCommerce/v1/requests/fable-vs-codex-request.md" rel="noopener noreferrer"&gt;fable-vs-codex-request.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/nopCommerce/v1/results/fable-vs-codex-result.md" rel="noopener noreferrer"&gt;fable-vs-codex-result.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fable&lt;/td&gt;
&lt;td&gt;Codex (GPT-5.4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/nopCommerce/v1/requests/fable-vs-opus-request.md" rel="noopener noreferrer"&gt;fable-vs-opus-request.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/nopCommerce/v1/results/fable-vs-opus-result.md" rel="noopener noreferrer"&gt;fable-vs-opus-result.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fable&lt;/td&gt;
&lt;td&gt;Claude Code (Opus 4.8)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Run 1
&lt;/h2&gt;

&lt;p&gt;Fable vs Codex (GPT-5.4)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Fable&lt;/th&gt;
&lt;th&gt;Codex (GPT-5.4)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Evidence grounding&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structural accuracy&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency mapping&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical flow&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Migration insight&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epistemic discipline&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal / noise&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Result: &lt;strong&gt;Fable produced the safer document for migration.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Codex (GPT-5.4) was still well grounded. According to the judge, the document stayed closer to extraction than architectural synthesis.&lt;/p&gt;

&lt;p&gt;The judge explicitly described the difference like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fable acted as an architectural synthesizer&lt;/li&gt;
&lt;li&gt;Codex (GPT-5.4) read more like a search-result aggregator or static extractor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, that meant Fable was better at turning code facts into migration-relevant constraints.&lt;/p&gt;

&lt;p&gt;The most important examples were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recognizing that the order flow contains deployment-relevant concurrency assumptions&lt;/li&gt;
&lt;li&gt;identifying the scheduler’s self-HTTP loopback behavior as an architectural constraint&lt;/li&gt;
&lt;li&gt;distinguishing facts, inferences, and unknowns in a disciplined way&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Codex (GPT-5.4) still found many correct details, but the result was noisier and less decisive when moving from structure to interpretation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Run 2
&lt;/h2&gt;

&lt;p&gt;Fable vs Claude Code (Opus 4.8)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Fable&lt;/th&gt;
&lt;th&gt;Claude Code (Opus 4.8)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Evidence grounding&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structural accuracy&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency mapping&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical flow&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Migration insight&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epistemic discipline&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal / noise&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Result: &lt;strong&gt;Fable again produced the safer migration document.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest issues were structural and behavioral.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It treated the order-placement lock like a distributed lock even though the stronger document identified it as an OS mutex with sync-over-async behavior.&lt;/li&gt;
&lt;li&gt;It missed the self-HTTP boundary in scheduled task execution and described the task runner more like a normal in-process thread scheduler.&lt;/li&gt;
&lt;li&gt;It became less reliable around configuration artifacts and legacy settings files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These mistakes matter because they hide operational constraints that usually show up late in migration work.&lt;/p&gt;

&lt;p&gt;The stronger Fable document stayed grounded in the dangerous details: mutex-based duplicate-order protection, sync-over-async behavior, and the scheduler's dependency on HTTP calls back into the same application.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changed from the First Comparison
&lt;/h2&gt;

&lt;p&gt;With eShopOnWeb, the main differences were often about how grounded and careful the documents were.&lt;/p&gt;

&lt;p&gt;With nopCommerce, that baseline became less important because all three outputs were already reasonably grounded. The separation happened later, when the models had to interpret behavior in a much more complex system.&lt;/p&gt;

&lt;p&gt;The move from eShopOnWeb to nopCommerce made the comparison more practical.&lt;/p&gt;

&lt;p&gt;At that point, it was less about which model could summarize the repository and more about which one could identify the parts most likely to break during migration.&lt;/p&gt;

&lt;p&gt;In this round, Fable did that more reliably.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key conclusions
&lt;/h2&gt;

&lt;p&gt;Findings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fable&lt;/strong&gt; was the strongest model in this nopCommerce round&lt;/li&gt;
&lt;li&gt;Its advantage came mostly from better architectural synthesis and interpretation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex (GPT-5.4)&lt;/strong&gt; remained grounded, but the document was noisier and weaker at converting evidence into migration guidance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code (Opus 4.8)&lt;/strong&gt; missed several migration-relevant implementation details, especially around locking and scheduled task execution&lt;/li&gt;
&lt;li&gt;Model rankings can change when the project changes; results from a moderate codebase do not automatically transfer to a more complex monolith&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The broader takeaway is that project-orientation tasks should be judged by how useful they are for understanding real system behavior. Module lists and file citations still matter. They just do not cover enough by themselves.&lt;/p&gt;

&lt;p&gt;For migration work, the higher-value signal is whether the model can identify the behaviors that would actually break when the system is moved: process assumptions, state transitions, scheduling tricks, and control-flow hotspots.&lt;/p&gt;

&lt;p&gt;That is where Fable stood out in this round.&lt;/p&gt;

&lt;p&gt;The next question is the practical one: whether this stronger initial orientation is enough to support actual migration steps, or whether the advantage disappears once code transformations begin.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>claude</category>
      <category>dotnet</category>
      <category>llm</category>
    </item>
    <item>
      <title>LLM-Assisted Codebase Analysis for Migration: Comparing Codex, Claude, and VS Code Agents</title>
      <dc:creator>Eduard</dc:creator>
      <pubDate>Mon, 23 Mar 2026 06:38:15 +0000</pubDate>
      <link>https://dev.to/eduardj_67dc3f850/llm-assisted-codebase-analysis-for-migration-comparing-codex-claude-and-vs-code-agents-1f0</link>
      <guid>https://dev.to/eduardj_67dc3f850/llm-assisted-codebase-analysis-for-migration-comparing-codex-claude-and-vs-code-agents-1f0</guid>
      <description>&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;Most migrations fail before they start — because nobody actually knows what the system does.&lt;/p&gt;

&lt;p&gt;Legacy systems rarely fail because of syntax or frameworks. They fail because their behavior is undocumented and poorly understood. This lack of understanding becomes even more critical when development is done with agents.&lt;/p&gt;

&lt;p&gt;In this series, I explore how LLM tooling can assist in migrating existing systems. The focus is on cross-stack migration, where a system must be moved to a different technology stack due to platform, vendor, or organizational constraints. In these cases, the hardest part is usually incomplete knowledge of the current system.&lt;/p&gt;

&lt;p&gt;Tools such as Copilot, Codex, Claude Code, and similar agents make it possible to explore a codebase interactively, summarize its structure, and trace important flows instead of relying only on manual reverse engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shift in Engineering Work with LLM Agents
&lt;/h2&gt;

&lt;p&gt;With strong LLM agents, the distribution of engineering effort starts to shift.&lt;br&gt;&lt;br&gt;
Less time is spent writing code, while more time moves to validation, specs, design, and review.&lt;/p&gt;

&lt;p&gt;Agents can generate code, but they cannot guarantee domain correctness — the system may pass tests while still violating business rules or real-world constraints.&lt;br&gt;&lt;br&gt;
Most real bugs are not syntax errors, but misunderstood requirements, missing system context, and edge cases.&lt;/p&gt;

&lt;p&gt;Even with modern agents, some types of changes remain difficult: large refactors, multi-service changes, and long-term evolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternative: Using the Full Context Window
&lt;/h2&gt;

&lt;p&gt;Putting the entire codebase into the LLM context may seem attractive, but it works poorly for non-trivial projects. For larger systems, agentic workflows become necessary.&lt;/p&gt;

&lt;p&gt;The downside is not only cost.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Signal dilution&lt;/strong&gt; — tests, migrations, DTOs, generated files, and CSS can drown out the real architecture, and the model may miss important relationships because attention is spread too thin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less room for reasoning&lt;/strong&gt; — large context leaves less space for the actual question and the response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Noise bias&lt;/strong&gt; — snapshots, migrations, and duplicated patterns can skew the model’s understanding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slow iteration&lt;/strong&gt; — every follow-up requires resending a very large prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting the Scene
&lt;/h2&gt;

&lt;p&gt;For this series, we will use &lt;strong&gt;eShopOnWeb&lt;/strong&gt; as the legacy system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dotnet-architecture/eShopOnWeb" rel="noopener noreferrer"&gt;https://github.com/dotnet-architecture/eShopOnWeb&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Codebase Overview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;~5.3k lines of production C# in &lt;code&gt;src&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;~12.5k total lines across C#, Razor, CSS, SCSS, and Bicep&lt;/li&gt;
&lt;li&gt;10 projects total: 6 production, 4 test&lt;/li&gt;
&lt;li&gt;~194 production classes and 16 interfaces&lt;/li&gt;
&lt;li&gt;~52 test cases&lt;/li&gt;
&lt;li&gt;8 public API endpoints&lt;/li&gt;
&lt;li&gt;4 MVC controllers&lt;/li&gt;
&lt;li&gt;16 Razor Page models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall complexity is &lt;strong&gt;moderate&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The codebase is not large in raw size, but the architectural scope is non-trivial: it includes a web app, public API, Blazor admin UI, separated core/infrastructure layers, infrastructure-as-code, and multiple test projects.&lt;/p&gt;

&lt;p&gt;The repository is archived and no longer actively maintained, which makes it a good candidate for experimentation. The intent is not to criticize the original design, but to use a realistic codebase to evaluate different migration approaches.&lt;/p&gt;

&lt;p&gt;This is a hypothetical cross-stack scenario used to simulate real-world situations such as vendor strategy changes, platform standardization, or team skill constraints.&lt;/p&gt;

&lt;p&gt;During the series, different LLM-assisted workflows will be explored, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VS Code Copilot (agent / auto mode)&lt;/li&gt;
&lt;li&gt;Codex&lt;/li&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Working Assumption
&lt;/h2&gt;

&lt;p&gt;LLMs can misunderstand intent, invent abstractions, or overlook important details.&lt;br&gt;&lt;br&gt;
If used blindly, they can make a migration less safe instead of safer.&lt;/p&gt;

&lt;p&gt;However, when used as analysis and exploration tools, they can help navigating unknown codebases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;summarize structure and dependencies&lt;/li&gt;
&lt;li&gt;identify hidden assumptions&lt;/li&gt;
&lt;li&gt;experiment with refactoring options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The approach in this series is therefore:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with an unknown system.&lt;/li&gt;
&lt;li&gt;Use LLM tools to explore and understand its structure and behavior.&lt;/li&gt;
&lt;li&gt;Gradually transform the system toward a new stack.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Experiment Setup
&lt;/h2&gt;

&lt;p&gt;To compare how different models analyze the same codebase, I used a fixed set of prompts and collected the responses produced by each model.&lt;/p&gt;

&lt;p&gt;Prompts were refined with ChatGPT to make them clear and optimized for the model.&lt;/p&gt;

&lt;p&gt;The table below shows the prompts used in the experiment and the corresponding results.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prompt&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/1-codex-readme-prompt.md" rel="noopener noreferrer"&gt;1-codex-readme-prompt.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/responses/1-codex-readme-prompt-response.md" rel="noopener noreferrer"&gt;Codex (medium thinking) response&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/1-codex-readme-prompt.md" rel="noopener noreferrer"&gt;1-codex-readme-prompt.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/responses/1-codex-readme-prompt-response-extra.md" rel="noopener noreferrer"&gt;Codex (extra thinking) response&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/1-make-readme-opus.md" rel="noopener noreferrer"&gt;1-make-readme-opus.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/responses/1-opus-readme-response.md" rel="noopener noreferrer"&gt;Claude Code response&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/1-vscode-readme-prompt.md" rel="noopener noreferrer"&gt;1-vscode-readme-prompt.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/make-readme/responses/1-vscode-readme-response.md" rel="noopener noreferrer"&gt;VSCode response&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These responses are evaluated in the next section using an AI-as-Judge approach.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using AI-as-Judge to Compare LLM Codebase Analysis
&lt;/h1&gt;

&lt;p&gt;When comparing outputs from different LLM tools, subjective reading is unreliable.&lt;br&gt;&lt;br&gt;
To make the comparison reproducible, I used an &lt;strong&gt;AI-as-judge approach with a fixed rubric&lt;/strong&gt;, where two generated documents were evaluated against the same criteria.&lt;/p&gt;

&lt;p&gt;The judge model used in all runs was &lt;strong&gt;Gemini 3 Pro&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reference table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Prompt file&lt;/th&gt;
&lt;th&gt;Result file&lt;/th&gt;
&lt;th&gt;Document A&lt;/th&gt;
&lt;th&gt;Document B&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/1-ai-judge-prompt.md" rel="noopener noreferrer"&gt;1-ai-judge-prompt&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/results/1-ai-judge-result.md" rel="noopener noreferrer"&gt;1-ai-judge-prompt-result&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;td&gt;Claude Code (Opus 4.6)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/1-ai-judge-vs-code-auto-vs-codex.md" rel="noopener noreferrer"&gt;1-ai-judge-vs-code-auto-vs-codex&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/results/1-ai-judge-vs-code-auto-vs-codex-result.md" rel="noopener noreferrer"&gt;1-ai-judge-vs-code-auto-vs-codex-result&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;td&gt;VSCode default auto mode (GPT-5.4, Opus 4.6, Sonnet 4.6)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/1-ai-judge-gemini-prompt-extra.md" rel="noopener noreferrer"&gt;1-ai-judge-gemini-prompt-extra&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eduardsjermaks/articles/blob/main/articles/01-LLM-SDD-Migration/prompts/ai-judge/1-ai-judge-gemini-prompt-extra.md" rel="noopener noreferrer"&gt;1-ai-judge-gemini-prompt-extra-result&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;td&gt;Codex extra thinking (GPT-5.4)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Evaluation Rubric (Score 0–5 per category)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Evidence Grounding:&lt;/strong&gt; Does the document cite specific modules, files, or patterns rather than vague generalities?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structural Accuracy:&lt;/strong&gt; Is the internal logic consistent? Do the described components actually fit together logically?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Mapping:&lt;/strong&gt; How well does it identify external integrations, internal coupling, and third-party libraries?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critical Flow Identification:&lt;/strong&gt; Does it map the "Happy Path" of data through the system (Entry point -&amp;gt; Logic -&amp;gt; Storage)?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration Insight Quality:&lt;/strong&gt; Does it identify technical debt, "gotchas," legacy patterns, or risks that would impact a migration?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Epistemic Discipline:&lt;/strong&gt; How does it handle uncertainty? Does it clearly distinguish between known facts ("The system does X") and assumptions ("The system appears to do X")?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signal-to-Noise Ratio:&lt;/strong&gt; Is the document concise and information-dense, or is it filled with filler?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Goal: compare &lt;strong&gt;quality of codebase understanding&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Run 1
&lt;/h2&gt;

&lt;p&gt;Codex medium thinking (GPT-5.4) vs Claude Code (Opus 4.6) &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Codex&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Evidence grounding&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structural accuracy&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency mapping&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical flow&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Migration insight&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epistemic discipline&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal / noise&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Result: Codex medium produced more precise and grounded codebase analysis.&lt;/p&gt;

&lt;p&gt;Claude Code produced very good tables and correctly detected the &lt;code&gt;ApplicationCore → BlazorShared&lt;/code&gt; dependency, calling it a domain-layer contamination hotspot, which is a meaningful architectural finding. Codex also detected reference &lt;code&gt;ApplicationCore → BlazorShared&lt;/code&gt;, however it has not identified it as a hotspot.&lt;/p&gt;

&lt;p&gt;However, it lost points in structural accuracy due to inferred runtime details.&lt;br&gt;&lt;br&gt;
Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Web — Single ASP.NET Core process hosting: MVC controllers, Razor Pages, Blazor Server circuit, and serving the BlazorAdmin WASM bundle."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This mixes Blazor Server runtime with static WASM hosting and was not fully grounded in the code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Run 2
&lt;/h2&gt;

&lt;p&gt;Codex medium thinking (GPT-5.4) vs VSCode default auto mode (GPT-5.4, Opus 4.6, Sonnet 4.6)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Codex&lt;/th&gt;
&lt;th&gt;VSCode&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Evidence grounding&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structural accuracy&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency mapping&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical flow&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Migration insight&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epistemic discipline&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal / noise&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Result: Codex medium produced more grounded analysis with fewer assumptions.&lt;/p&gt;

&lt;p&gt;VSCode default auto mode often stopped at the first layer instead of tracing real execution paths.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Failure modes: Unknown (no explicit exception handling in this page model)..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Failure modes were left unresolved instead of following the call chain.&lt;/p&gt;

&lt;p&gt;Migration insight also contained generic or speculative statements without code evidence.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cyclic dependencies — why risky: Unknown. evidence: Unknown."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Run 3
&lt;/h2&gt;

&lt;p&gt;Codex medium thinking (GPT-5.4) vs Codex extra thinking (GPT-5.4) &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Medium&lt;/th&gt;
&lt;th&gt;Extra thinking&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Evidence grounding&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structural accuracy&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency mapping&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical flow&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Migration insight&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epistemic discipline&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal / noise&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Result: Extra thinking produced deeper architectural analysis,&lt;br&gt;&lt;br&gt;
but improvements appeared only in some rubric categories.&lt;/p&gt;

&lt;p&gt;Extra thinking spent more effort analyzing failure modes and runtime behavior.&lt;/p&gt;

&lt;p&gt;It identified additional risks in caching, checkout flow, and environment-specific startup configuration.&lt;/p&gt;

&lt;p&gt;It also detected an issue in retry configuration where the retry logic may not be consistently applied across environments.&lt;/p&gt;

&lt;p&gt;It also pointed out a layering anomaly that medium thinking missed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Justification:&lt;/em&gt; It maps the standard internal dependencies well but fails to spot the architectural anomaly where the inner domain (&lt;code&gt;ApplicationCore&lt;/code&gt;) references a UI-adjacent library (&lt;code&gt;BlazorShared&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Possible explanation is that extra reasoning mainly helps with &lt;strong&gt;interpretation&lt;/strong&gt; instead of raw extraction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Runtime comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codex medium&lt;/td&gt;
&lt;td&gt;~14 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex extra thinking&lt;/td&gt;
&lt;td&gt;~30 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VSCode&lt;/td&gt;
&lt;td&gt;~5 min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Aggregated summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;A&lt;/th&gt;
&lt;th&gt;B&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;td&gt;VSCode Auto&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Codex medium thinking (GPT-5.4)&lt;/td&gt;
&lt;td&gt;Codex extra thinking (GPT-5.4)&lt;/td&gt;
&lt;td&gt;Codex extra thinking (GPT-5.4)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Key conclusions
&lt;/h2&gt;

&lt;p&gt;Findings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codex medium thinking produced reliable, well-grounded analysis
&lt;/li&gt;
&lt;li&gt;Codex extra thinking improved architectural reasoning
&lt;/li&gt;
&lt;li&gt;Claude Code achieved similar results, with minor misinterpretations, but produced clear diagrams that made the structure easier to understand
&lt;/li&gt;
&lt;li&gt;VSCode agent mode introduced more assumptions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach provided a quick initial overview of the project and highlighted critical areas in a short time.&lt;br&gt;&lt;br&gt;
The next step is to see whether this level of understanding is sufficient for the migration itself, or whether important parts are still missing.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
