-
Notifications
You must be signed in to change notification settings - Fork 75
Проверка статуса инициализации ИБ #159
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Проверка статуса инициализации ИБ #159
Conversation
WalkthroughДобавлена сборка статусов и обработка ошибок при инициализации инфобазы: введены флаг Changes
Sequence Diagram(s)sequenceDiagram
participant Init as InitInfoBase
participant FS as FileSystem
participant Log as Logger
Init->>FS: readExitStatusFromFile(path)
FS-->>Init: файл с кодом / ошибка (NoSuchFileException)
Init->>Init: нормализует, парсит, возвращает Integer (0/1/>=2 или 1 по умолчанию)
Init->>Init: сохраняет в exitStatuses
Init->>Log: логирует индивидуальные статусы
alt Любой статус == 1 или максимальный статус >= 2
Init->>Log: лог итоговой ошибки
Init->>Init: isInfobaseInitialized = false
Init->>Pipeline: throw error
else
Init->>Log: лог успешной инициализации
Init->>Pipeline: продолжает успешно
end
sequenceDiagram
participant Pipeline as Pipeline1C
participant InitVar as initInfobase
participant Stages as Последующие этапы
Pipeline->>InitVar: initInfobase.run() (в try)
alt Исключение / неуспех
InitVar-->>Pipeline: возвращает false (unstable logged)
Pipeline->>Stages: пропускает зависимые стадии (when проверяет isInfobaseInitialized)
else Успех
InitVar-->>Pipeline: возвращает true
Pipeline->>Stages: выполняет все стадии
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (6)
test/unit/resources/exitStatus1 (1)
1-2: Обратите внимание на символ BOM в начале файлаВ данном файле присутствует маркер последовательности байтов (BOM) перед цифрой "1". При использовании этого файла в тестах убедитесь, что метод
readExitStatusFromFileкорректно обрабатывает BOM и правильно считывает значение.Рекомендую удалить BOM для предотвращения потенциальных проблем при чтении файла:
-1 +1test/unit/resources/exitStatus0 (1)
1-2: Обратите внимание на символ BOM в начале файлаВ данном файле присутствует маркер последовательности байтов (BOM) перед цифрой "0". При использовании этого файла в тестах убедитесь, что метод
readExitStatusFromFileкорректно обрабатывает BOM и правильно считывает значение.Рекомендую удалить BOM для предотвращения потенциальных проблем при чтении файла:
-0 +0vars/initInfobase.groovy (1)
9-15: Реализация механизма обработки ошибок инициализации выглядит хорошоДобавление блока try-catch улучшает надежность процесса инициализации и позволяет продолжить выполнение пайплайна даже при ошибках инициализации ИБ.
Для улучшения отладки рекомендую также логировать стек вызовов при исключении:
try { initInfobase.run() return true } catch (Exception e) { + echo "Стек вызовов: ${e.getStackTrace().join('\n')}" unstable("Инициализация ИБ не выполнена: ${e.getMessage()}") return false }vars/pipeline1C.groovy (2)
18-19: Добавьте описание переменной isInfobaseInitializedДобавление этой переменной является хорошим решением для контроля статуса инициализации ИБ. Рекомендую добавить комментарий, описывающий назначение этой переменной для улучшения понимания кода другими разработчиками.
@Field +// Флаг, указывающий на успешность инициализации информационной базы Boolean isInfobaseInitialized = true
139-141: Корректная обработка результата инициализации ИБХорошее решение: результат выполнения функции initInfobase теперь сохраняется в переменную isInfobaseInitialized, что позволяет контролировать дальнейшее выполнение пайплайна.
Рекомендую добавить логирование результата инициализации для упрощения отладки:
script { isInfobaseInitialized = initInfobase config + echo "Статус инициализации ИБ: ${isInfobaseInitialized ? 'успешно' : 'с ошибками'}" }test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
34-48: Рекомендуется унифицировать наименования переменных.Имя переменной
exitStatus_1использует подчеркивание, что не соответствует стилю именования в других тестах. Также есть проблема с отступами в строке 41.- Integer exitStatus_1 = InitInfoBase.readExitStatusFromFile(resource); + Integer exitStatus = InitInfoBase.readExitStatusFromFile(resource);- .getClassLoader() - .getResource("exitStatus1")) + .getClassLoader() + .getResource("exitStatus1"))
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy(4 hunks)test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java(1 hunks)test/unit/resources/exitStatus0(1 hunks)test/unit/resources/exitStatus1(1 hunks)vars/initInfobase.groovy(1 hunks)vars/pipeline1C.groovy(8 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1)
TestUtils(16-64)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (19)
vars/pipeline1C.groovy (6)
54-54: Исправление названия стадии на кириллические символыХорошее изменение: замена латинской "C" на кириллическую "С" в названии стадии.
76-76: Улучшение наименования стадииПереименование стадии с "Подготовка 1С базы" на "Подготовка ИБ" делает наименование более лаконичным и соответствующим принятым в проекте сокращениям.
217-217: Добавление проверки инициализации ИБ для стадии BDD сценариевПравильное решение: стадия BDD сценариев теперь будет выполняться только при успешной инициализации ИБ, что предотвратит выполнение тестов на некорректно инициализированной базе.
289-289: Добавление проверки инициализации ИБ для стадии дымовых тестовКорректное изменение: стадия дымовых тестов теперь будет выполняться только при успешной инициализации ИБ, что предотвратит ложные ошибки тестирования.
326-326: Добавление проверки инициализации ИБ для стадии YAXUnit тестовПравильное решение: стадия YAXUnit тестов теперь будет выполняться только при успешной инициализации ИБ, что позволит избежать запуска тестов на некорректно подготовленной базе.
18-19: Рассмотрите более безопасное начальное значение для isInfobaseInitializedСейчас переменная изначально устанавливается в
true, а затем может быть изменена наfalseпри ошибке инициализации. Возможно, более безопасным подходом было бы начальное значениеfalseс установкой вtrueтолько после успешной инициализации.@Field -Boolean isInfobaseInitialized = true +Boolean isInfobaseInitialized = falseЗатем в разделе pre-stage:
script { config = jobConfiguration() as JobConfiguration agent1C = config.v8AgentLabel() agentEdt = config.edtAgentLabel() RepoUtils.computeRepoSlug(env.GIT_URL) + // Устанавливаем значение по умолчанию для случаев, когда инициализация ИБ не требуется + isInfobaseInitialized = !config.stageFlags.needInfoBase() }test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (4)
1-10: Хорошая организация импортов и структура класса.Класс корректно импортирует необходимые пакеты для JUnit 5 и утилиты тестирования, а также правильно использует статические импорты для assertions.
11-17: Корректная настройка тестового окружения.Метод setUp правильно инициализирует тестовый контекст, используя TestUtils.setupMockedContext(). Это хорошая практика для подготовки тестового окружения перед каждым тестом.
18-32: Тест успешного сценария корректно структурирован.Тест readExitStatusFromFile_success следует паттерну "given-when-then", что делает его легко читаемым. Хорошее использование Objects.requireNonNull для обработки возможных null-значений.
50-61: Тест отсутствия файла корректно реализован.Тест readExitStatusFromFile_does_not_exist проверяет важный сценарий, когда файл не существует. Хорошо, что метод возвращает значение 1 в этом случае, что позволяет обрабатывать ошибку корректно.
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (9)
10-11: Корректное добавление импорта для обработки исключений.Импорт NoSuchFileException необходим для обработки случаев отсутствия файла в новом методе readExitStatusFromFile.
32-33: Добавлен флаг для отслеживания статуса инициализации.Переменная isInfobaseInitialized позволяет отслеживать общий статус инициализации информационной базы и принимать решение о дальнейшем выполнении пайплайна.
47-48: Хорошая идея использования LinkedHashMap для сохранения порядка команд.Использование LinkedHashMap для exitStatuses позволяет сохранить порядок выполнения команд, что важно для логирования и отладки.
61-67: Улучшенное отслеживание статуса миграции.Добавление файла для записи статуса завершения миграции и его последующее чтение - хорошее решение для отслеживания результата выполнения команды.
72-88: Улучшенная обработка дополнительных шагов инициализации.Код теперь сохраняет статусы выполнения всех команд инициализации и обрабатывает как случай с явно указанными шагами, так и с автоматическим поиском файлов vrunner.init*.json.
90-99: Логика определения общего статуса инициализации.Хорошо реализована логика проверки статусов выполнения команд с разделением на критические ошибки (status >= 2) и некритические (status = 1).
100-105: Подробное логирование статусов команд.Вывод детальной информации о статусах выполнения каждой команды позволяет быстро локализовать проблему при возникновении ошибок.
110-114: Корректная обработка ошибок инициализации.В случае неуспешной инициализации вызывается error, что пометит сборку как UNSTABLE и позволит продолжить выполнение этапов, не требующих инициализированной ИБ.
116-142: Комплексная обработка исключений в методе readExitStatusFromFile.Метод содержит обработку различных сценариев ошибок:
- Пустой файл
- Отсутствие файла (NoSuchFileException)
- Некорректный формат числа (NumberFormatException)
- Другие исключения
Также реализована обработка BOM-символа, который может добавляться платформой 1С. Это демонстрирует тщательный подход к обработке ошибок.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (3)
18-32: Тест для успешного сценария реализован корректно.Тест проверяет, что метод
readExitStatusFromFileправильно читает статус выхода 0 из файла ресурса. Хорошо, что используется паттерн "given-when-then" для ясной структуры теста.Обратите внимание на небольшую проблему с отступом в строке 32.
- } + }
11-62: Рекомендация: добавьте комментарий, описывающий назначение тестируемого метода.Было бы полезно добавить комментарий на уровне класса, объясняющий, что делает метод
InitInfoBase.readExitStatusFromFile, чтобы улучшить понимание тестов для других разработчиков.+/** + * Тесты для метода readExitStatusFromFile класса InitInfoBase. + * Метод используется для чтения статуса выполнения обработчиков обновления из файла. + * Возвращает 0 при успешном выполнении, 1 - при ошибке или если файл не существует. + */ class InitInfoBaseTest {
54-55: Предлагаю добавить проверку для краевого случая.В текущем тесте для несуществующего файла используется просто строка. Стоит также проверить случай с
nullзначением пути, чтобы убедиться, что метод корректно обрабатывает этот сценарий.@Test void readExitStatusFromFile_does_not_exist() { // given String resource = "exitStatusDoesNotExist"; // when Integer exitStatus = InitInfoBase.readExitStatusFromFile(resource); // then assertThat(exitStatus).isEqualTo(1); } +@Test +void readExitStatusFromFile_null_path() { + + // given + String resource = null; + + // when + Integer exitStatus = InitInfoBase.readExitStatusFromFile(resource); + // then + assertThat(exitStatus).isEqualTo(1); + +}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java(1 hunks)vars/pipeline1C.groovy(8 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- vars/pipeline1C.groovy
🧰 Additional context used
🧬 Code Graph Analysis (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1)
TestUtils(16-64)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (4)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (4)
1-11: Хорошая структура тестового класса.Класс имеет правильную организацию с импортами JUnit 5 и AssertJ для утверждений. Тесты следуют паттерну "given-when-then", что делает их понятными и легко поддерживаемыми.
13-16: LGTM: Корректная настройка тестового окружения.Метод
setUpправильно используетTestUtils.setupMockedContext()для инициализации мокированного контекста перед каждым тестом.
34-48: LGTM: Корректная проверка сценария с ошибкой.Тест правильно проверяет, что метод возвращает статус 1 при чтении из файла
exitStatus1.
50-61: LGTM: Корректная обработка отсутствующего файла.Тест правильно проверяет, что метод возвращает статус 1, когда файл не существует. Это хорошая практика - проверять граничные случаи.
8104b71 to
aebb872
Compare
There was a problem hiding this 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
🧹 Nitpick comments (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
50-61: Рассмотрите добавление тестов для граничных случаев.Текущие тесты покрывают основные сценарии (успех, ошибка, отсутствующий файл). Для более полного покрытия рекомендуется добавить тесты для:
- Пустого файла (согласно коду, должен возвращать 1)
- Файла с нечисловым содержимым (должен возвращать 1)
- Файла с BOM (должен корректно обрабатываться)
- Файла с пробельными символами до/после числа
Пример дополнительных тестов:
@Test void readExitStatusFromFile_empty() { // Test for empty file - should return 1 } @Test void readExitStatusFromFile_nonNumeric() { // Test for non-numeric content - should return 1 }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy(4 hunks)test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java(1 hunks)test/unit/resources/exitStatus0(1 hunks)test/unit/resources/exitStatus1(1 hunks)vars/initInfobase.groovy(1 hunks)vars/pipeline1C.groovy(8 hunks)
✅ Files skipped from review due to trivial changes (1)
- test/unit/resources/exitStatus1
🚧 Files skipped from review as they are similar to previous changes (1)
- test/unit/resources/exitStatus0
🧰 Additional context used
📓 Path-based instructions (2)
vars/*.groovy
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
vars/*.groovy: Pipeline step Groovy files in vars/ must have correct Groovy syntax
Ensure proper error handling in pipeline steps (use try/catch and cleanup in finally where appropriate)
Validate stage conditional logic (when clauses) and agent label assignments in pipeline steps
Files:
vars/initInfobase.groovyvars/pipeline1C.groovy
vars/pipeline1C.groovy
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Review and update the main pipeline flow in vars/pipeline1C.groovy when modifying overall pipeline logic
Files:
vars/pipeline1C.groovy
🧠 Learnings (3)
📚 Learning: 2025-08-27T05:31:27.548Z
Learnt from: CR
PR: firstBitMarksistskaya/jenkins-lib#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to vars/pipeline1C.groovy : Review and update the main pipeline flow in vars/pipeline1C.groovy when modifying overall pipeline logic
Applied to files:
vars/pipeline1C.groovy
📚 Learning: 2025-01-17T15:14:10.474Z
Learnt from: ovcharenko-di
PR: firstBitMarksistskaya/jenkins-lib#147
File: src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy:36-48
Timestamp: 2025-01-17T15:14:10.474Z
Learning: In LoadExtensions.groovy, extensions without specified stages (extension.stages.length == 0) should only be loaded during the initInfoBase stage. They should not be loaded in subsequent stages.
Applied to files:
vars/pipeline1C.groovy
📚 Learning: 2025-08-27T05:31:27.548Z
Learnt from: CR
PR: firstBitMarksistskaya/jenkins-lib#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to test/unit/groovy/ru/pulsar/jenkins/library/**/*.groovy : Add or update unit tests for support code when adding new pipeline steps
Applied to files:
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java
🧬 Code graph analysis (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1)
TestUtils(16-64)
🔇 Additional comments (13)
vars/initInfobase.groovy (1)
9-15: Корректная обработка ошибок инициализации.Обёртка try-catch правильно обрабатывает исключения при инициализации ИБ, возвращая булево значение для использования в pipeline. Метод
unstable()корректно сигнализирует о проблеме, не останавливая сборку полностью.vars/pipeline1C.groovy (2)
18-20: LGTM: Флаг инициализации добавлен корректно.Новый флаг
isInfobaseInitializedс дефолтным значениемtrueправильно отслеживает статус инициализации ИБ. Значение по умолчанию соответствует случаю, когда стадия инициализации отключена или пропущена.
140-142: Корректное присвоение результата инициализации.Результат вызова
initInfobaseправильно сохраняется в флагisInfobaseInitializedдля последующего использования в условиях выполнения стадий.test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (2)
18-32: Тест успешного чтения статуса выглядит корректно.Тест правильно проверяет чтение exit-кода 0 из файла ресурсов.
34-48: Тест неуспешного статуса выглядит корректно.Тест правильно проверяет чтение exit-кода 1 из файла ресурсов.
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (8)
10-10: LGTM: Импорт добавлен корректно.Импорт
java.nio.file.NoSuchFileExceptionнеобходим для обработки отсутствующих файлов в методеreadExitStatusFromFile.
32-32: LGTM: Локальный флаг инициализации.Локальная переменная
isInfobaseInitializedправильно используется для отслеживания статуса инициализации внутри метода.
47-47: LGTM: Карта статусов для отслеживания.Использование
LinkedHashMapдля хранения статусов команд сохраняет порядок выполнения, что полезно для логирования.
61-67: LGTM: Корректное чтение статуса миграции.Статус миграции правильно читается из файла после выполнения команды. Использование
catchErrorпредотвращает остановку pipeline при ошибке миграции.
72-88: LGTM: Отслеживание статусов инициализации.Логика правильно обрабатывает оба случая:
- Файлы
vrunner.init*.json(еслиadditionalInitializationStepsпуст)- Кастомные команды из
additionalInitializationStepsСтатусы всех команд корректно записываются в карту
exitStatuses.
110-113: LGTM: Выброс ошибки при неуспешной инициализации.Выброс ошибки через
steps.error()корректно останавливает выполнение и сигнализирует о проблеме, что соответствует целям PR.
116-142: Корректная реализация readExitStatusFromFile.Метод правильно обрабатывает все граничные случаи:
- Отсутствующий файл (NoSuchFileException)
- Пустое содержимое
- Нечисловое значение (NumberFormatException)
- BOM (через replaceAll)
- Общие исключения
Все ошибочные случаи возвращают 1, что соответствует конвенции "ошибка при отсутствии статуса".
90-104: Утвердить логику обработки кодов возвратаЛогика проверки статусов соответствует практике vanessa-runner: 0 — успех, 1 — обнаружены ошибки в тестах, ≥2 — общие сбои.
| when { | ||
| beforeAgent true | ||
| expression { config.stageFlags.bdd } | ||
| expression { config.stageFlags.bdd && isInfobaseInitialized } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
🧩 Analysis chain
Проверьте, что все зависимые от ИБ стадии защищены флагом.
Стадии BDD, Smoke и YAXUnit теперь правильно проверяют isInfobaseInitialized перед выполнением. Убедитесь, что другие стадии, требующие корректно инициализированной ИБ, также имеют эту проверку.
Выполните следующий скрипт для проверки всех стадий, которые используют unzipInfobase() или loadExtensions и могут требовать проверки флага:
Also applies to: 290-290, 327-327
🏁 Script executed:
#!/bin/bash
# Поиск стадий, которые распаковывают ИБ или загружают расширения
# и могут требовать проверки isInfobaseInitialized
echo "=== Стадии с unzipInfobase() ==="
rg -n -A10 -B5 'unzipInfobase\(\)' vars/pipeline1C.groovy | grep -E '(stage\(|when \{|expression \{)'
echo ""
echo "=== Стадии с loadExtensions (не initInfoBase) ==="
rg -n -A10 -B5 "loadExtensions.*'(?!initInfoBase)" vars/pipeline1C.groovy | grep -E '(stage\(|when \{|expression \{)'Length of output: 1496
🏁 Script executed:
#!/bin/bash
echo "=== Все вхождения loadExtensions ==="
rg -n -C5 "loadExtensions" vars/pipeline1C.groovyLength of output: 2735
Добавить проверку isInfobaseInitialized для syntaxCheck-стадии
В выражении when для стадии «Выполнение синтаксического контроля» (около строки 265) заменить
expression { config.stageFlags.syntaxCheck }на
expression { config.stageFlags.syntaxCheck && isInfobaseInitialized }🤖 Prompt for AI Agents
In vars/pipeline1C.groovy around lines 218 to 218, the when expression for the
syntaxCheck stage should also verify that the infobase is initialized; change
the existing expression to include the isInfobaseInitialized check so it reads
as config.stageFlags.syntaxCheck && isInfobaseInitialized, ensuring the variable
is in scope where the when is evaluated.
|
closes #131 @nixel2007 PR "отлежался", в нем все сделано так, как я задумывал |
| } | ||
| } | ||
|
|
||
| static Integer readExitStatusFromFile(String path) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ребейзни от мастера, плз, этот метод уже влит
|
|
||
| @Field | ||
| // Флаг, указывающий на успешность инициализации информационной базы | ||
| Boolean isInfobaseInitialized = true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
может быть в jobConfiguration сделать секцию с out-параметрами? или отдельную сериализуемую ДТОху подо все.

closes #52
Статус обработчиков обновления проверяется через файл с кодом возврата, а статус доп. шагов проверяется по коду возврата выполняемой команды (vrunner run, vrunner vanessa и тд).
В случае, когда не все шаги инициализации вернули 0, весь stage помечается как UNSTABLE, но сборка продолжается. При этом выполняются только те стейджи, которые не требуют корректно инициализированной ИБ (синт. контроль, валидация EDT, сонар).