Skip to content

Feature/edt-syntax-build-ci#5

Open
Kyrales wants to merge 5 commits into
alkoleft:masterfrom
Kyrales:feature/edt-syntax-build-ci
Open

Feature/edt-syntax-build-ci#5
Kyrales wants to merge 5 commits into
alkoleft:masterfrom
Kyrales:feature/edt-syntax-build-ci

Conversation

@Kyrales
Copy link
Copy Markdown

@Kyrales Kyrales commented May 12, 2026

  • Исправлен EDT build-export: теперь используется export --project , а сборка выполняется в отдельном чистом workspace.
  • Добавлена поддержка файла исключений для EDT syntax-check.
  • EDT syntax-check изолирован в отдельный чистый workspace.
  • Добавлена фильтрация EDT syntax-диагностик по source-set/project.
  • Обновлена документация по syntax-проверкам и testing workflow.
  • Стабилизирован CI: live fixture мягко пропускается без секретов, Linux-проверки остаются blocking, поправлены нестабильные assertions.

Summary by CodeRabbit

Релиз-ноты

  • Новые функции

    • Добавлена поддержка файла исключений (--exception-file) для команды синтаксической проверки EDT, позволяющая пропускать известные проблемы при валидации.
  • Документация

    • Обновлены справочные материалы с примерами использования параметра --project для выбора наборов исходного кода и документацией по файлам исключений.
  • Улучшения инфраструктуры

    • Оптимизирована CI/CD конфигурация для стабильного тестирования на платформе Linux.

Review Change Stack

Kyrales added 4 commits May 12, 2026 10:07
build_project.rs: EDT build-export теперь вызывает export --project <path>, а не --project-name.

coordinator.rs: для build-export используется отдельный очищаемый workspace build\edt-build-workspace, чтобы не конфликтовать с init workspace.

cli_build.rs: обновил ожидание CLI-теста.
- add EDT syntax exception file handling for CLI requests

- isolate EDT syntax validation in a clean workspace

- document source-set based EDT syntax filtering
- soft-skip trusted happy-path live fixture when platform bundle secrets are absent

- keep blocking CI on Linux until Windows test helpers are hardened

- stabilize Linux process and CLI output assertions
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 12, 2026

Warning

Rate limit exceeded

@Kyrales has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 11 minutes and 9 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d9bb9a92-80fd-4261-ad61-d775a22cbdb2

📥 Commits

Reviewing files that changed from the base of the PR and between daf66a4 and b6c06ae.

📒 Files selected for processing (1)
  • README.md

Пошаговое описание

Расширена команда v8-runner syntax edt поддержкой файла исключений для фильтрации проблем синтаксиса, осуществлён переход на использование пути проекта вместо имени при экспорте EDT, добавлены утилиты для мониторинга процессов, обновлены GitHub Actions и синхронизирована документация.

Изменения

Исключения синтаксиса EDT и экспорт по пути

Слой / Файлы Описание
Контракт CLI и типы запросов
src/cli/args.rs, src/cli/execute.rs, src/use_cases/request.rs, src/mcp/service.rs
Обновлена подпись SyntaxTarget::Edt с добавлением поля exception_file: Option<PathBuf>, добавлен параметр --exception-file <PATH> в аргументы CLI, описание --project уточнено для "source-set names", обновлены функции маршрутизации для передачи файла исключений через всю цепочку обработки запроса.
Подсистема фильтрации исключений синтаксиса EDT
src/use_cases/check_syntax.rs, src/mcp/edt_syntax.rs
Реализована полная подсистема SyntaxExceptions для загрузки, нормализации (регистр, пробелы, пунктуация) и фильтрации исключений синтаксиса, поддержка нечёткого поиска по словам и точного совпадения, расширенная логика определения статуса SyntaxCheckStatus с учётом наличия исключений до и после фильтрации, обновлены точки диспетчеризации и сообщения об ошибках, добавлены 20+ новых тестов для проверки фильтрации и использования правильного рабочего пространства.
Экспорт EDT по пути проекта и рабочее пространство экспорта
src/use_cases/build_project.rs, src/use_cases/build_project/coordinator.rs, tests/cli_build.rs, tests/cli_test.rs
Переход на вызов export_project_path с путями вместо export_project с именами, добавлена подготовка выделенного рабочего пространства edt_build_export_workspace в координаторе с очисткой в начале функции, обновлены тестовые стабы для обработки как --project-name, так и --project, обновлены 13+ утверждений в тестах для ожидания путей при экспорте вместо имён.
Утилиты мониторинга процессов
src/platform/interactive.rs
Добавлены функции process_is_zombie для обнаружения зомби в /proc/{pid}/stat и wait_until_process_exits для ожидания завершения процесса с таймаутом, обновлена логика is_process_alive для немедленного возврата false при обнаружении зомби, обновлены тесты для использования новых утилит вместо фиксированных задержек.

CI рабочий процесс и документация

Слой / Файлы Описание
GitHub Actions рабочий процесс и доверенные контексты
.github/workflows/ci.yml
Сужена матрица contract job только до ubuntu-latest (удалена windows-latest), добавлены переменные окружения для платформ Linux и Windows из GitHub secrets, реализована логика выбора bundle_url и bundle_sha256 с использованием case по MATRIX_OS, добавлена поддержка мягкого пропуска live fixture через V8TR_DESIGNER_ALLOW_MISSING_CONFIG=1 при отсутствии конфигурации платформы.
Спецификация и документация
spec/acceptance/real-environment-validation.md, docs/CAPABILITIES.md, SKILL/references/testing.md, scripts/test/README.md
Обновлена спецификация реальной среды для обозначения GitHub Actions как источника истины happy-path начиная с 2026-04-22, уточнено текущее блокирование только на ubuntu-latest в доверенных контекстах, Windows полный тест отмечен как TODO, обновлены примеры команд v8-runner syntax edt в документации с новыми параметрами --exception-file <PATH> и --project <SOURCE_SET>, добавлены уточнения о нормализации текста для фильтрации исключений и требованиях к Unix-совместимости тестов.

Оценка трудоёмкости кода

🎯 4 (Сложный) | ⏱️ ~60 минут

Стихотворение

🐰 Файлы исключений скачут в строке,
Пути вместо имён на листе,
EDT синтаксис поёт в рабочем пути,
Зомби-процессы уходят с беде,
А Ubuntu с доверием — звёздный полёт! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'Feature/edt-syntax-build-ci' is vague and generic, using branch naming conventions rather than clearly describing the main changes to a reader scanning commit history. Replace with a descriptive title summarizing the primary change, e.g., 'Add EDT syntax exception filtering and stabilize CI workflow' or 'Isolate EDT syntax/build to dedicated workspaces with exception support'.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 81.03% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/use_cases/build_project/coordinator.rs (1)

531-589: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Смешанный EDT-build в interactive mode всё ещё расходится по двум workspace/session.

Ветка внешних source-set продолжает использовать старый edt-workspace и отдельный interactive_edt (см. Line 539 и Line 588), тогда как основной EDT export уже переведён на edt-build-workspace. В результате при одном запуске можно получить две разные shared-session и вернуть конфликтность, от которой этот PR уходит.

Идея правки
- let mut interactive_edt = None;
  let mut interactive_build_export_edt = None;
...
- if config.tools.edt_cli.interactive_mode {
-     if interactive_edt.is_none() {
-         interactive_edt = Some(
+ if config.tools.edt_cli.interactive_mode {
+     if interactive_build_export_edt.is_none() {
+         interactive_build_export_edt = Some(
              match EdtSessionManager::for_config(
                  config,
                  EdtSessionHostOptions::for_cli_command(config),
              ) {
                  Ok(manager) => match EdtDsl::new_shared_session(
                      edt.clone(),
-                     config.work_path.join("edt-workspace"),
+                     edt_build_export_workspace.clone(),
                      Arc::new(manager),
                      Duration::from_millis(config.tools.edt_cli.startup_timeout_ms),
                      Duration::from_millis(config.tools.edt_cli.command_timeout_ms),
                  ) {
...
-     prepare_edt_external_artifacts(
-         config,
-         source_set,
-         interactive_edt.as_ref().expect("interactive edt dsl"),
-     )
+     prepare_edt_external_artifacts(
+         config,
+         source_set,
+         interactive_build_export_edt
+             .as_ref()
+             .expect("interactive edt build export dsl"),
+     )
  } else {
      let one_shot_edt = EdtDsl::new(
          edt.clone(),
-         config.work_path.join("edt-workspace"),
+         edt_build_export_workspace.clone(),
          utilities.runner_for(UtilityType::EdtCli),
      )

Also applies to: 703-770

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/use_cases/build_project/coordinator.rs` around lines 531 - 589, The
interactive branch is creating/using a separate workspace ("edt-workspace") and
a separate session via interactive_edt (EdtDsl::new_shared_session) while the
main EDT export uses "edt-build-workspace"/EdtDsl::new, causing two different
shared sessions; unify them by switching the interactive path to use the same
workspace and session creation as the main path (use
config.work_path.join("edt-build-workspace") and the same session creation
semantics or reuse the already-created shared session) so
prepare_edt_external_artifacts receives the same session instance; update
references to interactive_edt, EdtDsl::new_shared_session, EdtDsl::new, and
prepare_edt_external_artifacts accordingly to ensure a single shared EDT
session/workspace across both branches.
🧹 Nitpick comments (1)
src/cli/args.rs (1)

335-343: ⚡ Quick win

Добавьте тест парсинга для --exception-file в syntax edt.

Сейчас нет явной проверки, что syntax edt --exception-file <PATH> корректно парсится (в т.ч. вместе с повторяемым --project), и это легко случайно сломать при следующих правках CLI-схемы.

Предложение (тест-кейс)
 #[test]
+fn parses_syntax_edt_with_projects_and_exception_file() {
+    let cli = Cli::try_parse_from([
+        "v8-runner",
+        "syntax",
+        "edt",
+        "--project",
+        "main",
+        "--project",
+        "ext",
+        "--exception-file",
+        "tests/fixtures/edt-exceptions.txt",
+    ])
+    .expect("parse syntax edt");
+
+    match cli.command {
+        Command::Syntax(args) => match args.target {
+            SyntaxTarget::Edt { projects, exception_file } => {
+                assert_eq!(projects, vec!["main", "ext"]);
+                assert_eq!(
+                    exception_file.as_deref(),
+                    Some(std::path::Path::new("tests/fixtures/edt-exceptions.txt"))
+                );
+            }
+            _ => panic!("unexpected syntax target"),
+        },
+        _ => panic!("unexpected command"),
+    }
+}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cli/args.rs` around lines 335 - 343, Добавьте тест, который проверяет
разбор аргументов командной строки для подкоманды "syntax edt": сформируйте argv
вида ["syntax", "edt", "--project", "p1", "--project", "p2", "--exception-file",
"/some/path"] и прогоните через существующий парсер CLI (вызов вроде
Args::parse_from / clap::Command::try_get_matches_from в тесте) и затем
assert-уйте, что структура Edt (поле projects) содержит ["p1","p2"] и поле
exception_file равно Some(PathBuf::from("/some/path")); также добавьте отдельный
кейс без --exception-file чтобы проверить None.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@spec/acceptance/real-environment-validation.md`:
- Line 5: The relative link to the CI workflow is incorrect; update the link
string "../.github/workflows/ci.yml" in the
spec/acceptance/real-environment-validation.md content to the correct relative
path "../../.github/workflows/ci.yml" so the Markdown reference points to the
actual .github/workflows/ci.yml file.

---

Outside diff comments:
In `@src/use_cases/build_project/coordinator.rs`:
- Around line 531-589: The interactive branch is creating/using a separate
workspace ("edt-workspace") and a separate session via interactive_edt
(EdtDsl::new_shared_session) while the main EDT export uses
"edt-build-workspace"/EdtDsl::new, causing two different shared sessions; unify
them by switching the interactive path to use the same workspace and session
creation as the main path (use config.work_path.join("edt-build-workspace") and
the same session creation semantics or reuse the already-created shared session)
so prepare_edt_external_artifacts receives the same session instance; update
references to interactive_edt, EdtDsl::new_shared_session, EdtDsl::new, and
prepare_edt_external_artifacts accordingly to ensure a single shared EDT
session/workspace across both branches.

---

Nitpick comments:
In `@src/cli/args.rs`:
- Around line 335-343: Добавьте тест, который проверяет разбор аргументов
командной строки для подкоманды "syntax edt": сформируйте argv вида ["syntax",
"edt", "--project", "p1", "--project", "p2", "--exception-file", "/some/path"] и
прогоните через существующий парсер CLI (вызов вроде Args::parse_from /
clap::Command::try_get_matches_from в тесте) и затем assert-уйте, что структура
Edt (поле projects) содержит ["p1","p2"] и поле exception_file равно
Some(PathBuf::from("/some/path")); также добавьте отдельный кейс без
--exception-file чтобы проверить None.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4f5e3795-0c2c-4fab-a043-d0735c3ddf91

📥 Commits

Reviewing files that changed from the base of the PR and between 43674ee and daf66a4.

📒 Files selected for processing (16)
  • .github/workflows/ci.yml
  • SKILL/references/testing.md
  • docs/CAPABILITIES.md
  • scripts/test/README.md
  • spec/acceptance/real-environment-validation.md
  • src/cli/args.rs
  • src/cli/execute.rs
  • src/mcp/edt_syntax.rs
  • src/mcp/service.rs
  • src/platform/interactive.rs
  • src/use_cases/build_project.rs
  • src/use_cases/build_project/coordinator.rs
  • src/use_cases/check_syntax.rs
  • src/use_cases/request.rs
  • tests/cli_build.rs
  • tests/cli_test.rs

## Цель

Начиная с `2026-04-22`, source of truth для real-env happy-path является GitHub Actions workflow [`ci.yml`](../.github/workflows/ci.yml) с matrix на `ubuntu-latest` и `windows-latest`, а локальные скрипты в `scripts/test/*` остаются helper/entrypoint-слоем для этого workflow.
Начиная с `2026-04-22`, source of truth для real-env happy-path является GitHub Actions workflow [`ci.yml`](../.github/workflows/ci.yml), а локальные скрипты в `scripts/test/*` остаются helper/entrypoint-слоем для этого workflow.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Исправьте относительный путь к ci.yml в ссылке.

На Line 5 указан ../.github/workflows/ci.yml, но из spec/acceptance/ корректный путь — ../../.github/workflows/ci.yml; текущая ссылка битая.

🔧 Предлагаемое исправление
-Начиная с `2026-04-22`, source of truth для real-env happy-path является GitHub Actions workflow [`ci.yml`](../.github/workflows/ci.yml), а локальные скрипты в `scripts/test/*` остаются helper/entrypoint-слоем для этого workflow.
+Начиная с `2026-04-22`, source of truth для real-env happy-path является GitHub Actions workflow [`ci.yml`](../../.github/workflows/ci.yml), а локальные скрипты в `scripts/test/*` остаются helper/entrypoint-слоем для этого workflow.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Начиная с `2026-04-22`, source of truth для real-env happy-path является GitHub Actions workflow [`ci.yml`](../.github/workflows/ci.yml), а локальные скрипты в `scripts/test/*` остаются helper/entrypoint-слоем для этого workflow.
Начиная с `2026-04-22`, source of truth для real-env happy-path является GitHub Actions workflow [`ci.yml`](../../.github/workflows/ci.yml), а локальные скрипты в `scripts/test/*` остаются helper/entrypoint-слоем для этого workflow.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@spec/acceptance/real-environment-validation.md` at line 5, The relative link
to the CI workflow is incorrect; update the link string
"../.github/workflows/ci.yml" in the
spec/acceptance/real-environment-validation.md content to the correct relative
path "../../.github/workflows/ci.yml" so the Markdown reference points to the
actual .github/workflows/ci.yml file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant