Загрузка данных


Первый этап discovery завершён, но результат ещё не является полным.

Сейчас обнаружена только секция «Контекст», потому что остальные секции формы появляются после выбора АС. Кроме того, результат «42 поля, 24 обязательных поля, все с названием “Выбор AC *”» указывает на ошибку дедупликации: скрипт, вероятно, считает несколько внутренних или скрытых DOM-элементов одного Ant Design select как разные поля.

Продолжи реализацию Stage 2 — post-AC full-form discovery.

Работай только в:

/Users/23865613/IdeaProjects/untitled/zadanie3/.gigacode/skills/snl-meta-integration-interaction

Не изменяй zadanie2, project-manager-tools и другие skills.

Цель этапа:

1. Исправить сбор полей.
2. Безопасно выбрать АС и ФП/модуль/подмодуль.
3. После изменения формы собрать все семь реальных секций.
4. Не заполнять бизнес-поля.
5. Не нажимать финальную кнопку «Создать».
6. После discovery перейти к созданию оставшихся скриптов.

Используй значения из config/iv.example.yaml. Для текущего тестового discovery:

АС:
«Геоинформационная система SberGeo»

ФП/модуль/подмодуль:
«СНЛ.Интеграции.Аудит»

Если точное значение в интерфейсе немного отличается, найди его по видимому тексту. Не используй жёсткий CSS-селектор, завязанный на позицию элемента.

Шаг 1. Исправить дедупликацию полей

В scripts/discover_iv_form.py:

- учитывать только видимые элементы;
- исключать элементы с display:none, visibility:hidden, aria-hidden=true;
- исключать элементы с нулевыми размерами;
- не считать внутренние input одного ant-select отдельными полями;
- объединять label, combobox и скрытый input в один логический контрол;
- дедуплицировать элементы по ближайшему контейнеру формы;
- использовать стабильный ключ:

  section + normalized_label + control_type + container_identity

- не считать один и тот же label несколько раз;
- не считать placeholder отдельным полем;
- не считать служебные input Ant Design отдельными полями;
- отдельно сохранять:
  - logical_fields_count;
  - raw_dom_controls_count;
  - hidden_controls_skipped;
  - duplicate_controls_skipped.

После исправления в отчёте не должно быть 24 отдельных обязательных полей с одинаковым названием «Выбор AC *».

Шаг 2. Реализовать безопасный выбор контекста

Добавь отдельную функцию, например:

select_discovery_context(page, config)

Она должна:

1. Найти поле «Выбор AC».
2. Открыть ant-select.
3. Найти значение «Геоинформационная система SberGeo».
4. Выбрать его по видимому тексту.
5. Дождаться перестроения SPA.
6. Найти поле «Выбор ФП/Модуля/Подмодуля».
7. Открыть дерево выбора.
8. Найти «СНЛ.Интеграции.Аудит».
9. Выбрать его.
10. Дождаться полной перерисовки формы.

Выбор АС и ФП/модуля разрешён только для discovery, потому что он не создаёт и не изменяет объект META.

Перед каждым кликом по-прежнему выполнять safety-проверку.

Разрешить в discovery:

- открытие dropdown;
- ввод текста только в поисковое поле dropdown;
- выбор АС;
- выбор ФП/модуля/подмодуля;
- прокрутку;
- раскрытие дерева;
- открытие справочных окон без подтверждения.

Запретить:

- ввод наименования;
- ввод описания;
- изменение checkbox и switch бизнес-полей;
- выбор ТК потребителя;
- выбор точки взаимодействия;
- выбор endpoint;
- заполнение требований;
- финальную кнопку «Создать»;
- любое сохранение объекта.

Не использовать общий запрет слова «создать» для верхней навигационной кнопки. Нужно различать:

1. Верхнюю кнопку «Создать», которая открывает меню — разрешена для навигации.
2. Нижнюю кнопку «Создать» внутри формы «Создание нового ИВ» — всегда запрещена в discovery.

Шаг 3. Выполнить второй проход discovery

После выбора контекста:

- прокрутить форму от начала до конца;
- дождаться появления всех динамических секций;
- собрать только реальные видимые логические поля;
- собрать секции:

  1. Контекст;
  2. Общие данные;
  3. Потребитель;
  4. Поставщик;
  5. Информационная безопасность;
  6. Нефункциональные требования;
  7. Специальные атрибуты.

Для каждого поля сохранить:

- section;
- label;
- required;
- control_type;
- placeholder;
- visible;
- enabled;
- readonly;
- current_value;
- options, если их можно безопасно прочитать;
- locator_candidates;
- depends_on;
- unit, например «Кб»;
- validation_hint;
- help_text;
- source_container;
- discovery_stage: before_ac или after_ac.

Не открывай dropdown, если выбор значения может изменить структуру формы, кроме полей АС и ФП/модуля/подмодуля.

Шаг 4. Перезаписать discovery-артефакты

Обновить:

- artifacts/discovery/iv_form.html;
- artifacts/discovery/iv_form_fields.json;
- artifacts/discovery/iv_form_report.md;
- docs/INTERFACE_REQUIRED.md.

Также создать:

- artifacts/discovery/iv_form_before_ac.json;
- artifacts/discovery/iv_form_after_ac.json;
- artifacts/discovery/iv_form_diff.md.

В diff показать:

- какие секции появились после выбора АС;
- какие поля появились;
- какие поля изменили enabled/disabled;
- какие зависимости подтверждены;
- сколько сырых DOM-контролов было найдено;
- сколько логических полей осталось после дедупликации.

Шаг 5. Проверить фактические поля

Сверить discovery с интерфейсом, который должен содержать как минимум:

Контекст:
- Выбор AC;
- Выбор ФП/Модуля/Подмодуля.

Общие данные:
- Тип ИВ;
- Наименование;
- Описание;
- Инфопоток;
- Типовая сетевая схема;
- Пересечение периметра.

Потребитель:
- Технологический компонент потребителя.

Поставщик:
- AC поставщик;
- Точка взаимодействия;
- Endpoint точки взаимодействия.

Информационная безопасность:
- Способ аутентификации клиента;
- Тип сертификата;
- Электронная подпись;
- SSL/TLS.

Нефункциональные требования:
- Максимальное количество вызовов в секунду;
- Временной пиковый интервал;
- Период;
- Пиковое количество вызовов;
- Максимально допустимая задержка;
- Средний размер передаваемого сообщения;
- Максимальный размер передаваемого сообщения;
- Средний размер получаемого сообщения;
- Максимальный размер получаемого сообщения.

Специальные атрибуты:
- Дата ввода в эксплуатацию;
- Дата вывода из эксплуатации;
- Контрактное тестирование CDC;
- Метки;
- Комментарий.

Не считай этот перечень доказательством существования поля. Каждое поле должно быть подтверждено реальным DOM.

Шаг 6. После успешного discovery продолжить разработку

Не останавливайся после отчёта discovery. Создай:

scripts/validate_iv_input.py
scripts/plan_iv_creation.py
scripts/fill_iv_form.py
scripts/create_iv.py

Требования:

validate_iv_input.py:
- читает YAML;
- проверяет структуру и типы;
- проверяет обязательные поля;
- не подключается к META;
- не изменяет данные.

plan_iv_creation.py:
- формирует понятный план действий;
- показывает, какие поля будут заполнены;
- показывает, какие справочники потребуется открыть;
- ничего не заполняет.

fill_iv_form.py:
- подключается через CDP;
- открывает форму;
- выбирает АС и ФП/модуль;
- заполняет поля из YAML;
- не нажимает финальную кнопку «Создать»;
- выводит отчёт о заполненных, пропущенных и не найденных полях;
- по умолчанию работает в dry-run/pre-submit режиме.

create_iv.py:
- использует тот же механизм заполнения;
- перед финальным созданием показывает полный план;
- требует явный флаг, например --confirm-create;
- дополнительно требует текстовое подтверждение пользователя;
- только после двух подтверждений может нажать нижнюю кнопку «Создать»;
- после попытки создания сохраняет отчёт;
- не хранит логины, пароли, cookies и токены.

Шаг 7. Offline-тесты

Создать tests/ и проверить:

- загрузку YAML;
- отсутствие обязательного поля;
- неверные числовые значения;
- неверные даты;
- неизвестные поля;
- построение плана;
- различение верхней и нижней кнопок «Создать»;
- блокировку финального создания без двух подтверждений;
- дедупликацию ant-select;
- исключение скрытых элементов;
- идемпотентность генерации отчётов.

Шаг 8. Обновить документацию

Обновить:

- SKILL.md;
- README.md;
- safety.md;
- docs/INTERFACE_REQUIRED.md.

В SKILL.md описать полный workflow:

1. Подготовка SberBrowser.
2. Проверка CDP.
3. Discovery.
4. Валидация YAML.
5. Построение плана.
6. Безопасное заполнение.
7. Предпросмотр.
8. Явное подтверждение.
9. Создание.
10. Проверка результата и отчёт.

Шаг 9. Проверки

Выполнить:

python3 -m py_compile scripts/*.py
python3 -m unittest discover -s tests -v

Также проверить:

- нет META API;
- нет requests/httpx для META;
- нет токенов, cookies и паролей;
- нет абсолютных пользовательских путей;
- browser.disconnect(), а не browser.close();
- финальная кнопка «Создать» не нажималась во время discovery и тестов;
- исходные проекты не изменены.

Финальный отчёт должен содержать:

1. Реальное количество секций после выбора АС.
2. Реальное количество логических полей.
3. Количество сырых DOM-контролов.
4. Количество удалённых дублей.
5. Количество исключённых скрытых элементов.
6. Полный перечень обязательных полей.
7. Подтверждённые зависимости.
8. Список созданных файлов.
9. Результаты py_compile.
10. Результаты тестов.
11. Подтверждение, что финальная кнопка «Создать» не нажималась.
12. Статус всех 13 задач.

Начинай реализацию без дополнительного согласования.