
REODE
Code migration
Перш ніж виправляти, знайти спільну причину.
Агент міграції коду Java/Spring.
REODE vocabulary
- assess
- plan
- explore
- transform
- validate
- fix
- measure
- recipes
- docker isolation
- equivalence
- escalation
- checkpoint
- learnings
Assess: assess_node · assessment_report · frameworks_detected · SOCRATIC RISK ANALYSIS · clarity_score · BASELINE BUILD · baseline_build_success · detect_spring_features · SpringAssessment · memory_context · get_local_jdk_versionPlan: plan_node · migration_plan · incremental_recipe_chain · get_recipe_chain · project_constraints · llm_structural · get_migration_strategy · is_fw_to_boot_migration · hitl_level · memory_contextExplore: _explore_before_fix · AFFECTED FILES · read_file · @Data · pom.xml · classify_build_error · ErrorCategory · get_category_prompt_hint · _batch_errors · _detect_fix_patterns · CANNOT FIND SYMBOL · compute_error_signatureTransform: llm_structural · transform_node · rewrite-maven-plugin · _ensure_openrewrite_plugin · rewrite:run · java_openrewrite_run · recipes_applied · _BATCH_SIZE · source_path_backup · structural_changes · resume_from_batchValidate: BASELINE BUILD · validate_node · java_build · java_test · java_lint · build_error_output · test_error_output · test_pass_rate · _route_after_validate · build_verification_tasks · verify-compat-check · SubAgentManager · _BackpressureExecutor · docker_maven_command · max_iterationsFix: memory_context · _explore_before_fix · @Data · pom.xml · get_category_prompt_hint · _detect_fix_patterns · build_error_output · test_error_output · fix_node · _fix_deterministic_pass · _apply_deterministic_fixes · LOMBOK 1.18.34 · annotationProcessorPaths · _fix_architect_editor_pass · FixPlan · _execute_llm_fix · _BackpressureExecutor · fix_attempts · java-migration-diagnostic · _determine_escalation · _build_full_project_context · fix-iter-{iteration} · AUTO-LEARNINGSMeasure: baseline_build_success · recipes_applied · test_pass_rate · measure_node · MigrationScorecard · G1 BUILD SUCCESS · G2 TEST EQUIVALENCE · G3 COVERAGE PRESERVATION · G4 TEST INTEGRITY · G5 NO TEST EXCLUSION · _count_deleted_test_files · _count_surefire_excludes · automation_ratio · S/A/B/C GRADERecipes: detect_spring_features · incremental_recipe_chain · get_recipe_chain · rewrite-maven-plugin · java_openrewrite_run · UpgradeToJava17 · UpgradeToJava21 · JavaxMigrationToJakarta · UpgradeSpringBoot_3_2 · UpgradeSpringSecurity_6_2 · JUnit4to5Migration · rewrite-migrate-java · rewrite-spring · SPRING_RECIPE_CHAINS · java_openrewrite_listDocker Isolation: JDK_DOCKER_IMAGES · maven:3.9-eclipse-temurin-22 · needs_docker_build · docker_maven_command · get_local_jdk_version · is_docker_available · docker_build_mode · local_jdk_version · _maven_cache_dir · JDK MISMATCHEquivalence: source_path_backup · verify-compat-check · java_app_start · e2e_smoke_test · java_app_stop · run_jar_comparison · detect_jar_type · deploy_dual_stack · discover_endpoints · api_equivalence_rate · api_breaking_changes · teardown_dual_stackEscalation: _route_after_validate · fix_attempts · _determine_escalation · claude-opus-4-6 · _build_full_project_context · _is_stuck · CONVERGENCE · CIRCUIT BREAKER · recovery_attempted · max_iterations · budget_usd · _check_budget_gateCheckpoint: _BATCH_SIZE · PipelineCheckpoint · reode/checkpoint · fix-iter-{iteration} · resume_from_batch · _resume_skip_nodes · MigrationProgressTracker · migration_progress.json · _save_node_progress · --resumeLearnings: FixPlan · FixEventLog · FixEvent · fix_events.jsonl · query_by_signature · format_learnings · compute_error_signature · AUTO-LEARNINGS · LEARNINGS.md · _append_learning · AVOID THIS APPROACH
Цикл міграції, що тримає докази виправлення окремо від приймання.
Оригінальний стан збірки записується й застосовується перетворення на основі правил, а потім до виправлення збираються докази з джерел і POM. Після правки моделі знову перевіряються збірка, тести й цілісність тестів, а запуски, що завершуються на ліміті чи в застої, звітуються окремо від успіху.
Він поєднує перетворення на основі правил із виправленням за допомогою моделі й перевіряє змінений код збіркою й тестами. Робочий проєкт.
Робота над REODE в репозиторії; співпраця з pinxlab March 16, 2026 – May 26, 2026
Інструмент CLI, що використовується на роботі.
Перетворення за правилами
Оригінальний стан зберігається як базова лінія; після перетворення за правилами збірка й тести перевіряють, і запуск переходить до вимірювання.
Джерело · POMДані: джерело · POMОригінальний стан · компіляція
Оригінальна перевіркаБере джерело Java/Spring і POM для міграції. Код і екрани клієнта не показано.
Оригінальний стан · компіляція
Оригінальна перевіркаДані: оригінальна компіляціяБазова лінія · невідоме не виміряноСтан запускуПеред перетворенням обирається середовище виконання й компілюється оригінал, тож збірка, що вже була зламана, зберігається в базовій лінії. Типові значення тестів і покриття в базовій лінії — не вимірювання.
Оригінальний стан · компіляція
Оригінальна перевіркаЗапуск · рішення: перетворення за правиламиПлан → перетворення на основі правилПеретворенняГраф запуску йде так: оригінальна перевірка → план перетворення → перетворення на основі правил → верифікація. Спершу застосовуються перетворення, які можуть виконати правила.
План → перетворення на основі правил
ПеретворенняЗапуск · рішення: build · testзбірка · тести · ітерація +1ВерифікаціяЗбірка й тести перевіряють перетворений код, а лічильник ітерацій збільшується на один. Результати повертаються до стану запуску.
збірка · тести · ітерація +1
ВерифікаціяДані: результат · ітераціїПродовжити · виміряти · макс. 3Наступний крокУспіх збірки, частка пройдених тестів і кількість ітерацій визначають наступний крок.
Продовжити · виміряти · макс. 3
Наступний крокЗапуск · рішення: успіх · ліміт · застійЧастка правил · тести · покриттяВимірюванняКоли проходять і збірка, і тести, досягнуто ліміту ітерацій або виявлено застій (після однієї спроби відновлення, якщо її ще не було), запуск переходить до вимірювання. Перехід до вимірювання не означає успіху.
Базова лінія · невідоме не виміряно
Стан запускуДані: порівняння з базовою лінієюЧастка правил · тести · покриттяВимірюванняВимірювання читає базову лінію, збережену в стані запуску. Це не новий запуск базової лінії.
5 порогів приймання
ВимірюванняДані: оцінюванняКартка оцінок · оцінкаУспішна збірка, 100% проходження тестів, зміна покриття −5 чи краще (лише коли відома базова лінія), нуль видалених тестів, нуль виключень surefire. Оцінку ставлять лише тоді, коли пройдено всі п’ять.
Виправлення за причиною
Докази збирають до виправлення, а детерміновані виправлення йдуть першими. Якщо повторна збірка проходить, модель пропускається; якщо ні, модель виправляє з доказами й інструкціями, і результат перевіряється знову.
збірка · тести · ітерація +1
ВерифікаціяДані: результат · ітераціїПродовжити · виміряти · макс. 3Наступний крокУспіх збірки, частка пройдених тестів і кількість ітерацій визначають наступний крок.
Продовжити · виміряти · макс. 3
Наступний крокЗапуск · рішення: збій · повторДокази причини · 3 джерела · POMДослідити перед виправленнямЯкщо збірка не пройшла або частка пройдених тестів нижча за 100% і ліміт ітерацій (типово 3) не досягнуто, запуск переходить до виправлення.
Докази причини · 3 джерела · POM
Дослідити перед виправленнямСпостереження · звіт: збереження перед виправленнямКонтрольна точка до виправленняЗаписи відновленняПеред виправленням зберігається контрольна точка. Це best-effort: невдале збереження не зупиняє виправлення, а збереження не є доказом успіху.
Докази причини · 3 джерела · POM
Дослідити перед виправленнямДані: докази · згруповані помилкиВиправлення відомих шаблонівДетерміноване виправленняЗбирає файли Java з помилками, початкові рядки щонайбільше трьох джерел, налаштування анотацій, POM і annotation processor, а також імпорти до глибини 2. Обмежена вибірка, а не розуміння всієї кодової бази.
Перевірка повторної збірки
Детерміноване виправленняЗапуск · рішення: пройдено · LLM пропущенозбірка · тести · ітерація +1ВерифікаціяЯкщо детерміноване виправлення відомого шаблону (наприклад, налаштування Lombok) дає змогу повторній збірці пройти, модель не викликається. Запуск однаково повертається до верифікації, тож це не остаточне приймання.
Перевірка повторної збірки
Детерміноване виправленняЗбій · ліміт: повторна збірка не пройшлаВиправлення з доказами · інструкціямиВиправлення моделлюЯкщо повторна збірка не проходить, зібрані докази й інструкції з виправлення передаються на виправлення моделлю. З коду видно, що разом із ними передається текст початкової помилки збірки, а не нової помилки повторної збірки, тож це не слід читати як «передаються лише залишкові помилки». Це не дефект, відтворений у запуску.
Раніше виправлення, та сама помилка
Записи відновленняДані: раніше виправленняВиправлення з доказами · інструкціямиВиправлення моделлюРаніші виправлення, записані з тією самою сигнатурою помилки, знаходять і додають. Це запис, доданий до вхідних даних, а не навчання моделі.
Виправлення з доказами · інструкціями
Виправлення моделлюЗапуск · рішення: перевірити зновузбірка · тести · ітерація +1ВерифікаціяМодель виправляє через структурований шлях architect/editor або через промпт із використанням інструментів, коли цей шлях недоступний чи йде відновлення, а збірка й тести перевіряють знову. Правка моделі сама по собі не є успішною збіркою.
Успіх проти застою
Для оцінки потрібні всі п’ять порогів; видалені чи виключені тести та виходи на ліміті чи в застої не зараховуються як успіх.
Продовжити · виміряти · макс. 3
Наступний крокЗапуск · рішення: успіх · ліміт · застійЧастка правил · тести · покриттяВимірюванняКоли проходять і збірка, і тести, досягнуто ліміту ітерацій або виявлено застій (після однієї спроби відновлення, якщо її ще не було), запуск переходить до вимірювання. Перехід до вимірювання не означає успіху.
Базова лінія · невідоме не виміряно
Стан запускуДані: порівняння з базовою лінієюЧастка правил · тести · покриттяВимірюванняВимірювання читає базову лінію, збережену в стані запуску. Це не новий запуск базової лінії.
5 порогів приймання
ВимірюванняДані: оцінюванняКартка оцінок · оцінкаУспішна збірка, 100% проходження тестів, зміна покриття −5 чи краще (лише коли відома базова лінія), нуль видалених тестів, нуль виключень surefire. Оцінку ставлять лише тоді, коли пройдено всі п’ять.
5 порогів приймання
ВимірюванняЗбій · ліміт: видалено · виключено · збійЗвіт про збій · застійПроходження, отримані видаленням тестів чи виключеннями surefire, а також невдалі збірки чи тести лишаються збоями. Перевірки видалення й виключень рахують нуль, коли Git чи POM неможливо прочитати, тож вони не доводять, що кожне порушення виявлено.
Продовжити · виміряти · макс. 3
Наступний крокСпостереження · звіт: вихід на ліміті · у застоїЗвіт про збій · застійЗапуск, що завершується на ліміті чи в застої, однаково проходить вимірювання, але не звітується як успіх. Це позначає спосіб звітування, а не обхід вимірювання.
Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.
- Суцільна · напрямок входів, результатів і записів
- Штрихова · запуск, рішення, запит
- Довга пунктирна · спостереження й звітування, окремо від рішення
- Коротка штрихова · збій, зупинка, ліміт
- Товста чорна лінія · обраний потік; номери показують порядок
- Рамка · межа коду чи стану, названа в заголовку
- Внутрішня плашка · компонент цієї межі
- Пунктирна рамка · поза цією межею
- Помаранчевий контур · де вирішує модель
- Кроки конвеєра · виправлення
- Верифікація · маршрутизація · приймання
- Стан · записи
- Дослідити перед виправленням
Накреслено за закритими записами реалізації й розробки. Назви — загальні публічні; шляхи коду й інформація про клієнтів не показані.
- Вхідні дані після невдалої повторної збірки
- Виправлення моделлю отримує зібрані докази й інструкції з виправлення, але передається текст початкової помилки збірки, а не нової помилки повторної збірки. Встановлено читанням коду; у запуску не відтворено, і джерело не змінювали.
- Межі порогів
- Якщо базова лінія покриття невідома, цей поріг пропускається. Перевірка surefire рахує виключення в поточному POM, а не різницю з базовою лінією. Перевірки видалення й виключень рахують нуль, коли Git чи POM неможливо прочитати.
- Випадок і його числа
- Близько 40 помилок setter, простежених до однієї причини — налаштування Lombok і POM, — це тодішній записаний діагноз. Це не показник пропускної здатності, точності чи остаточної поставки.