Загрузка данных
Прочитай только PROJECT_STATE.md и файлы, непосредственно относящиеся к
текущей проблеме.
Не сканируй весь проект заново.
Работай только в текущем проекте.
Предыдущий вывод «все требования закрыты» неверен, потому что одновременно
зафиксированы:
- 0 реальных строк атрибутов;
- 28 URL со статусом WRONG_SECTION.
Это блокирующие проблемы. Не отмечай требования закрытыми, пока они не
устранены или пока отсутствие данных не подтверждено корректно загруженной
страницей.
Не выполнять git commit и push.
Не менять Git-ветку.
Не использовать META API.
Не использовать токены, cookies или секреты.
Работать только через открытую авторизованную сессию SberBrowser.
META строго read-only.
======================================================================
1. СОЗДАТЬ РЕЗЕРВНЫЕ КОПИИ
======================================================================
Создать резервные копии изменяемых файлов:
- scripts/scrape_meta.py
- scripts/meta_page_expander.py
- scripts/html_to_markdown.py
- scripts/structured_meta_writer.py
Не создавать копии проектов и каталогов с архитектурой.
======================================================================
2. РАЗОБРАТЬ 28 WRONG_SECTION
======================================================================
Сначала вывести полный список URL со статусом WRONG_SECTION:
| № | Запрошенный URL | Фактический page.url | Заголовок DOM | Ожидаемый раздел | Найденный раздел | DOM hash |
|---|---|---|---|---|---|---|
Сгруппировать URL по типам:
- обычные страницы объектов;
- stands;
- interactions;
- integrationInteractions;
- interactionPoints;
- attributes;
- другие маршруты.
Не считать ситуацию нормальной только потому, что META является SPA.
Для каждого WRONG_SECTION определить:
1. можно ли открыть нужный раздел прямым page.goto();
2. если нет — какую видимую ссылку, вкладку или пункт навигации нужно нажать;
3. какой специфичный признак подтверждает открытие раздела;
4. изменился ли DOM hash после навигации.
======================================================================
3. ИСПРАВИТЬ SPA-НАВИГАЦИЮ
======================================================================
Для SPA-подмаршрутов использовать следующий алгоритм:
1. открыть подтверждённую родительскую страницу;
2. дождаться полной загрузки родительской страницы;
3. найти видимую ссылку или вкладку нужного раздела;
4. проверить, что клик безопасный и является только навигацией;
5. нажать;
6. дождаться изменения активной вкладки, заголовка, breadcrumb или таблицы;
7. дождаться изменения DOM hash;
8. проверить специфичный маркер раздела;
9. только после этого сохранять HTML.
Для каждого раздела использовать не общие слова, а специфичные признаки.
Примеры:
stands:
- заголовок или таблица стендов;
- ожидаемые поля стенда;
- значения Major-GO, DEV, ПРОМ, Major-Check при их наличии.
interactionPoints:
- таблица точек взаимодействия;
- реальные названия точек;
- специфичные колонки таблицы.
integrationInteractions:
- таблица интеграционных взаимодействий;
- колонки «Наименование», «Статус ЖЦ», «АС поставщика»,
«ТК поставщика», «ТК потребителя», «Владелец точки».
interactions:
- таблица технологических взаимодействий;
- специфичные колонки или заголовок этого раздела.
attributes:
- активная вкладка «Атрибуты»;
- четыре подраздела;
- реальные строки данных.
Если корректный раздел не открылся:
- оставить WRONG_SECTION;
- не сохранять DOM предыдущей страницы как результат;
- не считать данные отсутствующими.
======================================================================
4. ИСПРАВИТЬ ВЫГРУЗКУ АТРИБУТОВ
======================================================================
Сейчас вкладка открывается, но извлечено 0 строк.
Нужно определить реальный контейнер атрибутов.
После открытия вкладки:
1. определить внутренний прокручиваемый контейнер;
2. не ограничиваться прокруткой window или body;
3. раскрыть разделы:
- Карточка;
- Ответственность;
- Дополнительные атрибуты;
- Технические атрибуты;
4. найти строки через реальные элементы DOM:
- table/tr/td;
- role=row;
- role=grid;
- role=gridcell;
- data-testid;
- пары «Поле — Значение»;
5. определить, используется ли виртуализация.
При виртуализации:
- прокручивать внутренний контейнер небольшими шагами;
- после каждого шага ждать обновления строк;
- собирать видимые строки в Python;
- нормализовать текст;
- удалять дубли;
- продолжать до стабилизации:
три последовательные прокрутки не добавили новых строк
либо достигнут конец контейнера;
- не полагаться только на итоговый page.content(), потому что ранее
просмотренные виртуальные строки могут исчезать из DOM.
Собирать данные отдельно для:
- АС;
- ФП;
- каждого из четырёх подразделов.
Не смешивать данные АС и ФП.
======================================================================
5. ПЕРЕДАТЬ СОБРАННЫЕ СТРОКИ В MARKDOWN
======================================================================
Обновить передачу результатов так, чтобы собранные в браузере строки
атрибутов использовались при генерации Markdown.
Целевые файлы:
projects/SNL/meta/as/{AS_NAME}/attributes/README.md
projects/SNL/meta/as/{AS_NAME}/fp/{FP_NAME}/attributes/README.md
Формат каждого раздела:
## Карточка
| Поле | Значение |
|---|---|
| ... | ... |
## Ответственность
| Поле | Значение |
|---|---|
| ... | ... |
## Дополнительные атрибуты
| Поле | Значение |
|---|---|
| ... | ... |
## Технические атрибуты
| Поле | Значение |
|---|---|
| ... | ... |
Если раздел корректно открыт, но реально пуст:
- оставить заголовок;
- написать «Данные отсутствуют»;
- зафиксировать доказательство в отчёте.
Если раздел не загрузился:
- не писать «Данные отсутствуют»;
- указать ошибку загрузки.
======================================================================
6. СТЕНДЫ И ИНТЕГРАЦИИ
======================================================================
Не считать объекты отсутствующими, пока соответствующий URL имеет
WRONG_SECTION.
После исправления навигации повторно проверить:
- stands;
- interactions;
- integrationInteractions;
- interactionPoints.
Для стендов проверить, являются ли Major-GO, DEV, ПРОМ и Major-Check
отдельными строками таблицы или значениями одного поля.
Если это отдельные реальные объекты META, сохранить каждый объект у
подтверждённого родителя.
Если это только значения атрибута, сохранить их в таблице атрибутов,
не создавая ложных объектов.
Для integration-flow и integration:
- создавать дочерние каталоги только по реальным строкам таблицы;
- не создавать объект из названия страницы;
- не считать отсутствие объектов подтверждённым при WRONG_SECTION.
Пять interaction-point ФП должны сохраниться только на уровне ФП.
======================================================================
7. КРИТЕРИИ УСПЕШНОГО БРАУЗЕРНОГО ПРОГОНА
======================================================================
После исправлений выполнить полный браузерный прогон.
В итоговой статистике показать:
- всего URL;
- SUCCESS;
- WRONG_SECTION;
- DUPLICATE_DOM;
- ATTRIBUTE_TAB_NOT_OPENED;
- PAGE_ERROR;
- число уникальных DOM hash;
- число сохранённых HTML.
Целевой результат:
- PAGE_ERROR = 0;
- ATTRIBUTE_TAB_NOT_OPENED = 0 для страниц АС и ФП;
- WRONG_SECTION = 0 для обязательных страниц задания;
- DUPLICATE_DOM допустим только если доказано, что два URL действительно
отображают один и тот же раздел, а не предыдущую страницу.
======================================================================
8. ОТЧЁТ ПО АТРИБУТАМ
======================================================================
Создать или обновить:
output/ATTRIBUTES_REPORT.md
Формат:
| Уровень | Объект | Раздел | Строк найдено | Строк сохранено | Источник | Статус |
|---|---|---|---:|---:|---|---|
В отчёте обязательно показать количество строк отдельно для:
- Карточки АС;
- Ответственности АС;
- Дополнительных атрибутов АС;
- Технических атрибутов АС;
- Карточки ФП;
- Ответственности ФП;
- Дополнительных атрибутов ФП;
- Технических атрибутов ФП.
Статус «Закрыто» разрешён только при наличии реальных строк либо
подтверждённого корректно загруженного пустого раздела.
======================================================================
9. ПРОВЕРКИ
======================================================================
Выполнить:
python -m py_compile run_exporter.py scripts/*.py
Затем браузерный прогон.
После успешного браузерного прогона:
python scripts/regenerate_reports.py
python scripts/regenerate_reports.py
Проверить:
- количество файлов одинаковое;
- содержимое одинаковое;
- таблицы атрибутов не дублируются;
- строки атрибутов не теряются;
- пять interaction-point не дублируются на уровне АС;
- старые плоские каталоги не восстанавливаются.
======================================================================
10. ОБНОВИТЬ СТАТУС
======================================================================
Обновить PROJECT_STATE.md.
Не писать, что все требования закрыты, если:
- количество строк атрибутов равно нулю из-за ошибки загрузки;
- обязательные URL остаются в WRONG_SECTION;
- отсутствие интеграций определено по DOM другой страницы.
В финальном ответе показать:
1. какие файлы изменены;
2. список и количество исправленных WRONG_SECTION;
3. сколько WRONG_SECTION осталось;
4. количество строк каждого раздела атрибутов АС;
5. количество строк каждого раздела атрибутов ФП;
6. какие стенды найдены;
7. какие integration-flow найдены;
8. какие integration найдены;
9. какие integration-point найдены;
10. результаты py_compile;
11. результаты двух регенераций;
12. какие требования ещё не закрыты.
После этого остановиться.