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


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

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

Контекст:

Основные доработки Этапа 3 уже внесены.

Подтверждено:

- py_compile проходит для всех Python-файлов;
- expand_meta_page() реализован;
- свёрнутые read-only элементы раскрываются;
- виртуализированные таблицы прокручиваются;
- unsafe/write-кнопки не нажимаются;
- реализован resume по существующему HTML;
- добавлены отчёты:
  - output/INCOMPLETE_URLS_REPORT.md
  - output/DOM_CAPTURE_REPORT.md
  - output/LINK_FOLLOWING_REPORT.md
  - output/BROKEN_LINKS_REPORT.md
  - output/MARKDOWN_QUALITY_REPORT.md
- structured export создаётся в projects/SNL/meta;
- проект остаётся полностью read-only.

Предыдущий запуск не является финальным подтверждением, потому что он завершился с ошибками повторного использования закрытой Playwright page и затем был прерван внешним ограничением GigaCode.

По последней диагностике:

- всего URL в meta_urls.txt: 41;
- MARKDOWN SAVED было только 15 из 41;
- PAGE ERROR было 31 из 41;
- HTML-файлов в temp_html: 38;
- проекты и отчёты частично сформированы по старым данным.

Сейчас не нужно добавлять новые функции.

Главная задача:

Самостоятельно выполнить полноценный контрольный запуск через SberBrowser, дождаться нормального завершения, проверить все результаты и сформировать честный финальный отчёт.

---

# Жёсткие ограничения

- Не переписывай проект.
- Не добавляй новые крупные возможности.
- Не меняй архитектуру проекта без необходимости.
- Не удаляй expand_meta_page().
- Не отключай resume.
- Не используй API META.
- Не используй requests/httpx/aiohttp/urllib для обращения к META.
- Не добавляй token/cookie/login/password.
- Не сохраняй cookies/sessionStorage/localStorage.
- Не выполняй write-операции.
- Не нажимай:
  - Создать
  - Сохранить
  - Удалить
  - Редактировать
  - Добавить
  - Заполнить
  - Заполнить с AI
  - Отправить
  - Применить
  - Импортировать
  - Экспортировать
- Авторизация только вручную через SberBrowser.
- Все действия в META только read-only.
- Не объявляй успех до реального завершения полного запуска.

---

# Часть 1. Проверить текущее состояние проекта

Перейди в рабочую папку:

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

Проверь:

pwd
find . -maxdepth 3 -type f | sort
git status 2>/dev/null || true

Проверь наличие:

- .venv
- meta_exporter.yaml
- meta_urls.txt
- run_exporter.py
- scripts/
- temp_html/
- output/
- projects/SNL/meta/

Покажи количество URL:

grep -vE '^[[:space:]]*(#|$)' meta_urls.txt | wc -l

Ожидается 41 URL.

---

# Часть 2. Проверить конфигурацию

Изучи:

- meta_exporter.yaml
- meta_exporter.yaml.example
- run_exporter.py
- scripts/scrape_meta.py
- scripts/meta_page_expander.py

Подтверди, что включены:

resume:
  enabled: true
  skip_existing_html: true
  skip_existing_markdown: false

page_expansion:
  enabled: true

Проверь, что используется SberBrowser.

Не меняй конфиг без необходимости.

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

---

# Часть 3. Проверить py_compile

Выполни:

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

Если есть синтаксическая ошибка:

1. покажи точный файл и строку;
2. исправь только эту ошибку;
3. повтори py_compile;
4. не начинай браузерный запуск до успешного результата.

Ожидаемый результат:

PY_COMPILE OK

---

# Часть 4. Проверить готовность SberBrowser

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

1. Проверь наличие SberBrowser:

ls -la /Applications/SberBrowser.app/Contents/MacOS/SberBrowser

2. Убедись, что процесс SberBrowser запущен:

pgrep -fl SberBrowser || true

3. Если SberBrowser закрыт — открой его:

open -a SberBrowser

4. Подожди несколько секунд.

5. Открой первую страницу вручную через SberBrowser:

https://meta.sberbank.ru/meta/earp/automatedSystem/2842

6. Убедись, что пользователь авторизован в META.

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

- остановись;
- чётко попроси пользователя авторизоваться;
- после подтверждения продолжи с полного запуска;
- не пытайся вводить логин или пароль самостоятельно.

Не используй автоматический login.

---

# Часть 5. Подготовить финальный запуск

Не удаляй существующие temp_html и output, потому что включён resume.

Перед запуском создай диагностический снимок:

date > final_full_run_started_at.txt

find temp_html -type f 2>/dev/null | wc -l > before_temp_html_count.txt
find output -maxdepth 1 -type f -name "*.md" 2>/dev/null | wc -l > before_output_count.txt
find projects/SNL/meta -type f 2>/dev/null | wc -l > before_structured_count.txt

Если существует старый final_full_run.log, переименуй его:

if [ -f final_full_run.log ]; then
  mv final_full_run.log "final_full_run.before-$(date +%Y%m%d-%H%M%S).log"
fi

---

# Часть 6. Выполнить полный запуск

Активируй окружение:

source .venv/bin/activate

Запусти:

python run_exporter.py 2>&1 | tee final_full_run.log

Критически важно:

- не запускай через timeout;
- не останавливай через 600 секунд;
- не запускай в короткоживущей оболочке GigaCode, если она автоматически прерывает длительные команды;
- дождись возврата управления терминалу;
- не отправляй промежуточный финальный ответ, пока процесс работает.

Ожидаемое время:

20–40 минут, возможно больше.

Во время запуска следи за признаками:

- START PAGE
- GOTO OK
- CONTENT OK
- EXPAND START
- EXPAND clicked=
- EXPAND scroll_rounds=
- EXPAND tables=
- FULL DOM CAPTURED
- HTML SAVED
- MARKDOWN SAVED
- RESUME HTML FOUND
- RESUME PAGE SKIPPED
- RESUME PAGE RELOAD
- PAGE ERROR
- PAGE CLOSED

Успешным завершением считается только ситуация, когда:

- программа сама закончила работу;
- управление вернулось терминалу;
- браузер закрыт корректно;
- в логе есть сообщение о завершении выгрузки;
- финальные отчёты сформированы после текущего запуска.

Если процесс снова прерван внешним ограничением:

- не объявляй успех;
- укажи, что это внешний timeout;
- продолжи выгрузку отдельным повторным запуском с resume;
- снова дождись нормального завершения.

При повторном запуске используй:

python run_exporter.py 2>&1 | tee -a final_full_run.log

Resume должен пропустить уже сохранённые валидные HTML и продолжить недостающие URL.

---

# Часть 7. Проверить лог полного запуска

После нормального завершения выполни:

echo "START PAGE:"
grep -c "START PAGE" final_full_run.log || true

echo "MARKDOWN SAVED:"
grep -c "MARKDOWN SAVED" final_full_run.log || true

echo "HTML SAVED:"
grep -c "HTML SAVED" final_full_run.log || true

echo "PAGE ERROR:"
grep -c "PAGE ERROR" final_full_run.log || true

echo "RESUME PAGE SKIPPED:"
grep -c "RESUME PAGE SKIPPED" final_full_run.log || true

echo "RESUME PAGE RELOAD:"
grep -c "RESUME PAGE RELOAD" final_full_run.log || true

echo "FULL DOM CAPTURED:"
grep -c "FULL DOM CAPTURED" final_full_run.log || true

echo "EXPAND START:"
grep -c "EXPAND START" final_full_run.log || true

echo "EXPAND SKIPPED UNSAFE:"
grep -c "EXPAND SKIPPED UNSAFE" final_full_run.log || true

Также покажи последние 100 строк:

tail -n 100 final_full_run.log

Проверь, что лог не заканчивается на:

- process timed out;
- KeyboardInterrupt;
- Target page, context or browser has been closed;
- Traceback;
- необработанном исключении.

Единичные ошибки page могут быть допустимы только если:

- они отражены в INCOMPLETE_URLS_REPORT.md;
- URL затем повторно обработан;
- либо указана понятная реальная причина.

---

# Часть 8. Проверить количество файлов

Выполни:

echo "HTML:"
find temp_html -type f | wc -l

echo "OUTPUT MD:"
find output -maxdepth 1 -type f -name "*.md" | wc -l

echo "STRUCTURED META:"
find projects/SNL/meta -type f | wc -l

Также проверь даты обновления:

ls -lt output | head -30
ls -lt temp_html | head -20
find projects/SNL/meta -type f -print0 | xargs -0 ls -lt | head -30

Убедись, что ключевые файлы обновлены после времени из final_full_run_started_at.txt.

---

# Часть 9. Проверить незавершённые URL

Открой и проанализируй:

output/INCOMPLETE_URLS_REPORT.md

Проверь:

- всего URL;
- успешно обработано;
- использовано из кэша;
- не обработано;
- ошибок;
- таблицу необработанных URL.

Если все URL обработаны, в файле должно быть:

Все URL успешно обработаны.

Если есть необработанные URL:

- укажи каждый URL;
- укажи реальную причину;
- не скрывай ошибки;
- попробуй повторно выгрузить только недостающие URL через resume;
- не удаляй уже обработанные файлы.

---

# Часть 10. Проверить HIERARCHY.md

Открой:

output/HIERARCHY.md

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

# Иерархия архитектуры META

## Источники данных

Таблицу:

| Тип объекта | Название | URL |
|---|---|---|

В таблице должны присутствовать реальные URL типов:

- automatedSystem;
- functionalSubsystem;
- module;
- submodule;
- techComponent;
- technicalResource.

Далее должны быть разделы:

- Автоматизированные системы
- Функциональные подсистемы
- Модули
- Подмодули
- Технические компоненты

Не считать файл полным только по наличию заголовка.

Статус может быть «Закрыто», только если:

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

Если статус всё ещё PARTIAL:

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

---

# Часть 11. Проверить TASK_COVERAGE.md

Открой:

output/TASK_COVERAGE.md

Файл должен содержать полноценную таблицу:

| Требование | Статус | Файл | Основание |
|---|---|---|---|

Проверь строки:

1. Иерархия АС > ФП > Модуль > Подмодуль > ТК
2. Точки взаимодействия + API
3. Интеграционные взаимодействия + API
4. Стенды
5. Технические ресурсы
6. Выгрузка атрибутов
7. Структурированная выгрузка projects/SNL/meta
8. Раскрытие свёрнутых элементов
9. Сохранение HTML
10. Формирование читаемого Markdown
11. Read-only режим
12. Отсутствие API/token/cookie/login/password

Допустимые статусы:

- Закрыто
- Частично
- Не закрыто

Статус должен зависеть от содержимого.

Если таблицы нет или файл содержит только заголовок:

- исправь функцию формирования TASK_COVERAGE.md;
- используй фактические отчёты текущего запуска;
- сформируй файл заново.

---

# Часть 12. Проверить ключевые предметные отчёты

Открой:

- output/INTERACTION_POINTS.md
- output/INTEGRATION_INTERACTIONS.md
- output/STANDS.md
- output/TECH_RESOURCES.md
- output/INTERACTIONS.md
- output/ATTRIBUTES.md, если файл предусмотрен проектом
- output/MARKDOWN_QUALITY_REPORT.md
- output/DOM_CAPTURE_REPORT.md
- output/EXPORT_REPORT.md

Проверить:

## INTERACTION_POINTS.md

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

- прямой источник /interactionPoints;
- реальные найденные точки;
- не только заголовки.

## INTEGRATION_INTERACTIONS.md

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

- прямой источник /integrationInteractions;
- таблицу или fallback-данные;
- реальные строки со страницы.

## STANDS.md

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

- прямой источник /stands;
- реальные стенды, например DEV, ПРОМ, Major-GO, Major-Check, если они присутствуют в HTML.

## TECH_RESOURCES.md

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

- реальные технические компоненты;
- источник данных;
- не только заголовок.

## INTERACTIONS.md

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

- прямой источник /interactions;
- технологические взаимодействия или честный fallback.

## MARKDOWN_QUALITY_REPORT.md

Должен отражать качество файлов текущего запуска, а не старых данных.

## DOM_CAPTURE_REPORT.md

Должен показывать, какие страницы были получены через полный DOM и какие использованы из кэша.

---

# Часть 13. Проверить структурированную архитектуру

Путь:

/Users/23865613/IdeaProjects/untitled/zadanie2/source_project/projects/SNL/meta

Выполни:

find projects/SNL/meta -type f | sort

Проверь наличие:

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

Проверь, что файлы обновлены после полного запуска.

Не считать structured export актуальным, если он остался со старой датой.

---

# Часть 14. Проверить read-only безопасность

Выполни поиск по проекту:

grep -RniE "requests|httpx|aiohttp|sessionStorage|localStorage|password|token|cookie|page\.fill|page\.type|page\.press|POST|PUT|PATCH|DELETE" \
  run_exporter.py scripts meta_exporter.yaml meta_exporter.yaml.example 2>/dev/null || true

Разбери результаты вручную.

Важно:

- urllib.parse разрешён, если используется только для разбора URL;
- запрещено сетевое обращение к META через urllib;
- текст deny-list не является нарушением;
- слова token/cookie/password в README или комментариях не являются нарушением;
- page.click допустим только для безопасных read-only expand-элементов;
- не должно быть заполнения форм;
- не должно быть HTTP write-методов.

Сформулируй честный вывод по безопасности.

---

# Часть 15. Финальный отчёт

После полного завершения сформируй ответ:

# Финальная проверка adt-markdownify-meta

## 1. Полный запуск

| Показатель | Значение |
|---|---|
| Всего URL | ... |
| Открыто заново | ... |
| Использовано из HTML-кэша | ... |
| Успешно обработано | ... |
| Ошибок | ... |
| Необработанных URL | ... |
| Время запуска | ... |
| Процесс завершился сам | Да/Нет |

## 2. Причина предыдущих проблем

Указать:

- была ли проблема с повторным использованием закрытой page;
- был ли внешний timeout GigaCode;
- что исправлено.

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

Указать количество проверенных Python-файлов и число ошибок.

## 4. Результат expand_meta_page

| Показатель | Значение |
|---|---|
| Страниц обработано | ... |
| Выполнено безопасных кликов | ... |
| Пропущено unsafe | ... |
| Таблиц прокручено | ... |
| Ошибок expand | ... |
| Среднее время обработки страницы | ... |

## 5. Файлы результата

| Каталог | Количество |
|---|---|
| temp_html | ... |
| output/*.md | ... |
| projects/SNL/meta | ... |

## 6. Статус требований

| Требование | Статус | Основание |
|---|---|---|
| Иерархия АС > ФП > Модуль > Подмодуль > ТК | ... | ... |
| Точки взаимодействия + API | ... | ... |
| Интеграционные взаимодействия + API | ... | ... |
| Стенды | ... | ... |
| Технические ресурсы | ... | ... |
| Атрибуты | ... | ... |
| Структурированная архитектура | ... | ... |
| Читаемый Markdown | ... | ... |
| Полный DOM | ... | ... |
| Read-only режим | ... | ... |

## 7. Статус ключевых отчётов

| Файл | Статус | Комментарий |
|---|---|---|
| HIERARCHY.md | ... | ... |
| INTERACTION_POINTS.md | ... | ... |
| INTEGRATION_INTERACTIONS.md | ... | ... |
| STANDS.md | ... | ... |
| TECH_RESOURCES.md | ... | ... |
| TASK_COVERAGE.md | ... | ... |
| INCOMPLETE_URLS_REPORT.md | ... | ... |
| MARKDOWN_QUALITY_REPORT.md | ... | ... |
| DOM_CAPTURE_REPORT.md | ... | ... |
| EXPORT_REPORT.md | ... | ... |

## 8. Необработанные URL

Если отсутствуют:

Все 41 URL учтены.

Если есть:

Показать таблицу с названием, URL и реальной причиной.

## 9. Где лежит результат

Указать полный путь:

/Users/23865613/IdeaProjects/untitled/zadanie2/source_project/projects/SNL/meta

## 10. Остаточные ограничения

Указать только реально подтверждённые ограничения.

## 11. Готовность к наставнику

Ответить «Да» только если одновременно выполнено:

- полный процесс завершился сам;
- все 41 URL учтены;
- отсутствуют неизвестные необработанные URL;
- HIERARCHY.md содержит реальные источники и больше не имеет ложного PARTIAL;
- TASK_COVERAGE.md содержит полноценную таблицу;
- projects/SNL/meta обновлён после последнего запуска;
- ключевые Markdown-файлы содержат реальные данные;
- read-only режим подтверждён.

Если хотя бы один пункт не выполнен, написать:

Нет, требуется завершить следующие пункты:

и перечислить конкретные пункты.

Не называй проект полностью готовым только потому, что py_compile прошёл.