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


Ты работаешь только в проекте:

/Users/23865613/IdeaProjects/untitled/zadanie2/source_project

Продолжи реализацию требований экспорта архитектуры META.

Требование, связанное с Git-веткой, полностью исключается из текущей задачи.
Не проверяй ветку, не создавай ветку, не меняй ветку, не выполняй commit и push.

Цель текущего этапа — закрыть все оставшиеся функциональные несоответствия,
но не подменять отсутствующие данные вымышленными объектами.

ВАЖНО:

- META используется только в read-only режиме;
- запрещены POST, PUT, PATCH, DELETE;
- запрещено автоматически вводить логин, пароль или токен;
- не читать и не сохранять cookies, localStorage и sessionStorage;
- не использовать API META;
- не использовать requests, httpx, aiohttp или urllib для META;
- использовать SberBrowser и Playwright;
- авторизация в META выполняется пользователем вручную;
- названия объектов брать только из META;
- не переводить и не русифицировать названия вручную;
- не выдумывать связи;
- идентичность объектов определять по META ID и META URL;
- один META-объект должен существовать в итоговой структуре один раз;
- не ставить статус «Закрыто» только на основании наличия пустого README
  или таблицы без строк.

======================================================================
1. СОЗДАТЬ РЕЗЕРВНЫЕ КОПИИ
======================================================================

До изменений создать резервные копии:

scripts/structured_meta_writer.py
scripts/regenerate_reports.py
scripts/html_to_markdown.py
scripts/meta_page_expander.py
scripts/scrape_meta.py
output/TASK_COVERAGE.md
output/REQUIREMENTS_REPORT.md
projects/SNL/meta

Использовать понятный суффикс:

.before-functional-completion

Не создавать резервные копии внутри projects/SNL/meta/as/, чтобы они не
участвовали в подсчёте архитектурных объектов.

======================================================================
2. ПРОВЕРИТЬ ТЕКУЩУЮ ИЕРАРХИЮ
======================================================================

Требуемые варианты:

1. АС → ФП → ТК
2. АС → ФП → Модуль → ТК
3. АС → ФП → Модуль → Подмодуль → ТК

Текущие 24 ТК имеют подтверждённого родителя ФП и должны находиться здесь:

projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/tk/{TK_NAME}/README.md

Это является корректной реализацией варианта:

АС → ФП → ТК

Исправить статус этого требования на «Закрыто».

Не переносить эти 24 ТК внутрь module/ или submodule/, если в META URL,
breadcrumb, META ID или сохранённом HTML нет подтверждения соответствующей
связи.

Проверить код генератора и подтвердить, что он технически умеет размещать ТК:

- у ФП;
- у модуля;
- у подмодуля;

в зависимости от подтверждённого родителя.

Если поддержка путей module/tk и submodule/tk отсутствует, добавить её.

Ожидаемые пути:

projects/SNL/meta/as/{AS}/fp/{FP}/tk/{TK}/README.md

projects/SNL/meta/as/{AS}/fp/{FP}/module/{MODULE}/tk/{TK}/README.md

projects/SNL/meta/as/{AS}/fp/{FP}/module/{MODULE}/submodule/{SUBMODULE}/tk/{TK}/README.md

Если реальных ТК уровня модуля или подмодуля в выгруженных данных нет,
статус соответствующего требования должен быть:

«Не применимо: связь отсутствует в данных META».

Это не является ошибкой и не должно отображаться красным крестиком.

======================================================================
3. ПОДГОТОВИТЬ БЕЗОПАСНЫЙ БРАУЗЕРНЫЙ ПРОГОН
======================================================================

Перед запуском:

1. Проверить наличие SberBrowser.
2. Проверить конфигурацию проекта.
3. Проверить meta_urls.txt.
4. Проверить, что используются только безопасные действия:
   - переход по URL;
   - чтение DOM;
   - прокрутка;
   - раскрытие вкладок;
   - раскрытие таблиц;
   - сохранение HTML.
5. Проверить deny-list кнопок и действий записи.
6. Не запускать браузер до завершения статической проверки.

После проверки запустить экспорт через SberBrowser.

Если требуется авторизация:

- открыть страницу;
- остановиться и попросить пользователя вручную авторизоваться;
- не запрашивать логин, пароль или токен в чате;
- продолжить после появления доступной страницы META.

Не завершать SberBrowser принудительно, если проект настроен на подключение
к уже открытому браузеру.

======================================================================
4. ПОЛНОСТЬЮ ЗАГРУЗИТЬ СТРАНИЦЫ META
======================================================================

Для каждой страницы:

- дождаться завершения загрузки;
- раскрыть допустимые вкладки;
- прокрутить виртуальные таблицы до конца;
- раскрыть строки и секции только безопасными кликами;
- убедиться, что в DOM присутствуют все строки;
- сохранить полный HTML в temp_html/;
- не считать страницу обработанной, если сохранён только каркас таблицы.

Отдельно проверить страницы:

- АС SberGeo;
- ФП SberGeo.СНЛ;
- модули;
- подмодули;
- технические компоненты;
- вкладку «Атрибуты»;
- интеграционные взаимодействия;
- точки взаимодействия;
- стенды;
- технические ресурсы.

Если URL стендов или технических ресурсов отсутствует в meta_urls.txt,
разрешается найти его только через реальные ссылки в сохранённой странице
АС или ФП.

Не конструировать URL вручную без доказательства.

======================================================================
5. ЗАПОЛНИТЬ АТРИБУТЫ АС И ФП
======================================================================

Текущие attributes/README.md нельзя считать завершёнными, если в них есть
только заголовки таблиц.

Для АС заполнить:

projects/SNL/meta/as/SberGeo/attributes/README.md

Для ФП заполнить:

projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/attributes/README.md

Требуемые разделы:

- Карточка объекта или Карточка АС;
- Ответственность;
- Дополнительные атрибуты;
- Технические атрибуты.

Все реальные данные сохранить в Markdown-таблицах.

Пример:

## Карточка объекта

| Поле | Значение |
|---|---|
| ... | ... |

Требования:

- таблицы должны содержать реальные строки;
- строки нельзя удалять как заголовки или separator;
- данные АС и ФП нельзя смешивать;
- HTML каждой сущности обрабатывается отдельно;
- повторный запуск не дублирует таблицы;
- если конкретный раздел действительно отсутствует в META, написать:
  «Раздел отсутствует в сохранённых данных META»;
- нельзя писать «Не найдено», если строки присутствуют в DOM.

Обновить парсер так, чтобы заполнение выполнялось генератором, а не вручную.

======================================================================
6. ПРОВЕРИТЬ ИНТЕГРАЦИОННЫЕ ОБЪЕКТЫ
======================================================================

Повторно проверить реальные данные для:

- integration-flow;
- integration;
- integration-point.

Уровень АС:

projects/SNL/meta/as/SberGeo/integration-flow/
projects/SNL/meta/as/SberGeo/integration/
projects/SNL/meta/as/SberGeo/integration-point/

Уровень ФП:

projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/integration-flow/
projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/integration/
projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/integration-point/

Каждый реальный объект должен иметь отдельный каталог:

{TYPE}/{OBJECT_NAME}/README.md

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

- название;
- тип;
- META URL;
- META ID, если доступен;
- уровень родителя;
- поставщика;
- потребителя;
- ТК поставщика;
- ТК потребителя;
- владельца точки;
- API;
- остальные доступные поля.

Запрещено создавать объект из названия страницы:

- Интеграционные взаимодействия;
- Технологические взаимодействия;
- Точки взаимодействия;
- Инфопотоки;
- Стенды;
- unknown;
- README;
- Наименование;
- В эксплуатации.

Пять ранее найденных interaction-point имеют подтверждённого родителя ФП
и должны существовать только здесь:

projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/integration-point/{NAME}/README.md

Не создавать их на уровне АС.

Если после полноценного браузерного прогона реальных объектов типа
integration-flow или integration не обнаружено:

- оставить только индексный README.md;
- указать проверенные META URL;
- указать, что отдельные объекты не обнаружены;
- поставить статус:
  «Не применимо: объекты этого типа отсутствуют в данных META».

Не ставить красный статус «Не закрыто» только из-за отсутствия объектов.

======================================================================
7. ПЕРЕНЕСТИ СТЕНДЫ В ЦЕЛЕВУЮ СТРУКТУРУ
======================================================================

В output/STANDS.md ранее были обнаружены четыре стенда:

- Major-GO;
- DEV;
- ПРОМ;
- Major-Check.

Проверить их первичный источник.

Если это реальные объекты или реальные строки META:

- определить подтверждённого родителя;
- создать отдельный README для каждого стенда внутри projects/SNL/meta/as/;
- использовать существующее в проекте каноническое название каталога;
- если канонического названия нет, использовать:

stands/{STAND_NAME}/README.md

у подтверждённого родителя АС или ФП.

README стенда должен содержать:

- название;
- тип;
- META URL страницы-источника;
- META ID, если существует;
- родителя;
- назначение;
- окружение;
- доступные технические сведения;
- исходные поля таблицы.

Если четыре строки оказались не объектами, а значениями другого поля,
не создавать ложные каталоги. Зафиксировать результат проверки в отчёте.

======================================================================
8. ПРОВЕРИТЬ ТЕХНИЧЕСКИЕ РЕСУРСЫ
======================================================================

Не считать автоматически 24 ТК техническими ресурсами.

Проверить первичный HTML и страницу технических ресурсов.

Определить:

- существуют ли отдельные реальные технические ресурсы;
- являются ли строки из output/TECH_RESOURCES.md техническими ресурсами
  или повторным списком ТК;
- имеется ли META URL или ID технического ресурса;
- имеется ли подтверждённый родитель.

Если реальные ресурсы обнаружены, сохранить их в projects/SNL/meta/as/
у подтверждённого родителя.

Использовать существующее каноническое название каталога. Если его нет:

tech-resources/{RESOURCE_NAME}/README.md

Если самостоятельных объектов нет, не создавать 24 дубля ТК.

Статус должен быть:

«Не применимо: самостоятельные технические ресурсы не обнаружены»

с перечислением проверенных источников.

======================================================================
9. ПРОВЕРИТЬ README ПЯТИ INTERACTION-POINT
======================================================================

Для пяти реальных interaction-point проверить, что каждый README содержит:

- реальное название;
- тип interaction-point;
- META URL страницы-источника;
- META ID объекта, если он доступен;
- родителя ФП;
- реальные строки таблицы;
- API, если присутствует;
- поставщика и потребителя;
- ТК поставщика и потребителя;
- владельца точки.

README не должен состоять только из ссылки на output/.

Если у строки таблицы отсутствует отдельный META URL и META ID:

- не выдумывать их;
- указать META URL страницы-источника;
- указать идентификатор строки или составной ключ, если он присутствует;
- написать, что отдельный META ID для строки не предоставлен.

======================================================================
10. ПРОВЕРИТЬ НЕПЕРЕНЕСЁННЫЕ ДАННЫЕ
======================================================================

Повторно построить:

output/UNMIGRATED_META_DATA.md

Проверить особенно строки, где ранее было указано:

- hierarchy/ перенесено частично;
- submodules/ перенесено частично;
- ius-request-approval отсутствует в as/.

Для каждого файла сравнить содержимое со структурой as/.

Не ориентироваться только на имя каталога.

Сравнить:

- META URL;
- META ID;
- название;
- таблицы;
- интеграционные данные;
- уникальные поля.

Если данные уже представлены в as/, отметить:

«Перенесено полностью».

Если уникальные данные отсутствуют в as/, перенести их к подтверждённому
объекту перед удалением старого источника.

======================================================================
11. ИСПРАВИТЬ ЛОГИКУ TASK_COVERAGE
======================================================================

Обновить output/TASK_COVERAGE.md и генератор этого отчёта.

Исключить из текущей оценки Git-ветку.

Использовать статусы:

- Закрыто;
- Частично;
- Не закрыто;
- Не применимо: связь отсутствует в данных META;
- Не применимо: объекты отсутствуют в данных META.

Исправить:

- АС → ФП → ТК — Закрыто, доказательство: 24 ТК на уровне ФП;
- АС → ФП → Модуль → ТК — Закрыто как поддержка генератора либо
  «Не применимо», если реальных связей нет;
- АС → ФП → Модуль → Подмодуль → ТК — аналогично;
- integration-flow и integration — не красный статус, если реальные объекты
  отсутствуют после полного прогона;
- атрибуты — Закрыто только при наличии реальных строк;
- стенды — Закрыто после переноса реальных данных либо Не применимо после
  доказанной проверки;
- технические ресурсы — аналогично.

Не считать индексный README реальным объектом.

======================================================================
12. ОБНОВИТЬ REQUIREMENTS_REPORT
======================================================================

Обновить:

output/REQUIREMENTS_REPORT.md

Включить:

# Проверка функциональных требований

## Иерархия

## Поддержка трёх вариантов размещения ТК

## Атрибуты АС

## Атрибуты ФП

## Integration-flow уровня АС

## Integration уровня АС

## Integration-point уровня АС

## Integration-flow уровня ФП

## Integration уровня ФП

## Integration-point уровня ФП

## Стенды

## Технические ресурсы

## Неперенесённые данные

## Дубли

## Идемпотентность

## Ограничения исходных данных

Не упоминать Git-ветку в качестве функционального несоответствия.

======================================================================
13. ПРОВЕРКИ
======================================================================

После полного браузерного прогона выполнить:

python -m py_compile run_exporter.py scripts/*.py

python scripts/regenerate_reports.py

Создать контрольную копию:

find projects/SNL/meta -type f -print0 |
  sort -z |
  xargs -0 shasum > /tmp/meta-first.sha

Повторно выполнить:

python scripts/regenerate_reports.py

Создать вторую копию:

find projects/SNL/meta -type f -print0 |
  sort -z |
  xargs -0 shasum > /tmp/meta-second.sha

Сравнить:

diff -u /tmp/meta-first.sha /tmp/meta-second.sha

Ожидаемый результат — пустой diff.

Также выполнить:

find projects/SNL/meta/as -type f | sort

Показать статистику:

- АС;
- ФП;
- модули;
- подмодули;
- ТК на уровне ФП;
- ТК на уровне модулей;
- ТК на уровне подмодулей;
- integration-flow на АС;
- integration на АС;
- integration-point на АС;
- integration-flow на ФП;
- integration на ФП;
- integration-point на ФП;
- стенды;
- технические ресурсы;
- пустые README;
- дубли META ID;
- дубли META URL.

======================================================================
14. ФИНАЛЬНЫЙ РЕЗУЛЬТАТ
======================================================================

В конце выведи:

# Завершение функциональных требований

## Результат браузерного прогона

## Обработанные META URL

## Иерархия

## Размещение ТК

## Атрибуты АС

## Атрибуты ФП

## Интеграции АС

## Интеграции ФП

## Стенды

## Технические ресурсы

## Неперенесённые данные

## Результат py_compile

## Результат первой регенерации

## Результат повторной регенерации

## Идемпотентность

## Оставшиеся ограничения исходных данных

## Итоговая таблица

Формат итоговой таблицы:

| Требование | Статус | Доказательство |
|---|---|---|

Не указывать Git-ветку как незакрытое функциональное требование.

Не выполнять commit и push.

После завершения остановиться.