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


Ты работаешь с существующим проектом:

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

Нужно на его основе создать отдельный самостоятельный skill с названием:

snl-markdownify-meta

Исходный проект source_project является эталоном и должен остаться полностью неизменным.

======================================================================
ГЛАВНОЕ ОГРАНИЧЕНИЕ
======================================================================

Запрещено изменять, удалять, переименовывать или перемещать любые файлы внутри:

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

Не исправляй исходный проект даже в случае обнаружения ошибок.

Все изменения выполняй только в новой папке:

/Users/23865613/IdeaProjects/untitled/zadanie2/snl-markdownify-meta

Не использовать символические ссылки на source_project.

Новая папка должна содержать самостоятельную копию необходимого кода.

Не выполнять:

- git init;
- git add;
- git commit;
- git push;
- git reset;
- git clean;
- запуск браузера;
- обращение к META;
- изменение source_project.

======================================================================
1. ПРОВЕСТИ АУДИТ ИСХОДНОГО ПРОЕКТА
======================================================================

Сначала только прочитать source_project и определить:

- точку входа;
- основной сценарий запуска;
- используемые Python-модули;
- необходимые конфигурационные файлы;
- необходимые шаблоны;
- зависимости из requirements.txt;
- файлы, отвечающие за Playwright и SberBrowser;
- файлы, отвечающие за сбор HTML;
- файлы, отвечающие за преобразование HTML в Markdown;
- файлы, отвечающие за построение структуры projects/SNL/meta;
- файлы, отвечающие за атрибуты;
- файлы, отвечающие за интеграции;
- файлы, отвечающие за дедупликацию;
- файлы, отвечающие за отчёты;
- файлы, необходимые исключительно для разработки или отладки.

Перед созданием skill-а показать краткий план копирования файлов.

Не копировать проект целиком без анализа.

======================================================================
2. СОЗДАТЬ НОВУЮ ПАПКУ
======================================================================

Создать:

/Users/23865613/IdeaProjects/untitled/zadanie2/snl-markdownify-meta

Если папка уже существует:

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

Перед записью создать резервную копию существующего содержимого целевой папки,
если она не пустая.

======================================================================
3. СФОРМИРОВАТЬ СТРУКТУРУ SKILL-А
======================================================================

Целевая структура должна быть примерно такой:

snl-markdownify-meta/
├── SKILL.md
├── README.md
├── requirements.txt
├── .gitignore
├── run_exporter.py
├── config/
│   ├── meta_exporter.yaml.example
│   └── meta_urls.txt.example
├── scripts/
│   ├── __init__.py
│   ├── config_loader.py
│   ├── scrape_meta.py
│   ├── meta_page_expander.py
│   ├── html_to_markdown.py
│   ├── markdown_writer.py
│   ├── structured_meta_writer.py
│   ├── integration_interactions_parser.py
│   ├── attribute_scraper.py
│   └── generate_reports.py
├── templates/
│   └── при необходимости
├── examples/
│   └── при необходимости
└── projects/
    └── SNL/
        └── meta/
            └── README.md

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

Не создавать пустые модули только ради структуры.

Копировать только реально используемые файлы и функции.

======================================================================
4. SKILL.md
======================================================================

Создать полноценный файл:

snl-markdownify-meta/SKILL.md

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

# snl-markdownify-meta

## Назначение

Skill выгружает существующую архитектуру SNL из META в Markdown.

## Результат

Архитектура сохраняется в:

projects/SNL/meta

## Поддерживаемая иерархия

- АС → ФП → ТК;
- АС → ФП → Модуль → ТК;
- АС → ФП → Модуль → Подмодуль → ТК.

ТК размещается только у подтверждённого родителя.

## Выгружаемые данные

- АС;
- ФП;
- модули;
- подмодули;
- технические компоненты;
- вкладка «Атрибуты»;
- Карточка;
- Ответственность;
- Дополнительные атрибуты;
- Технические атрибуты;
- integration-flow;
- integration;
- integration-point;
- стенды;
- технические ресурсы.

## Безопасность

- только read-only работа с META;
- без META API;
- без requests, httpx, aiohttp и urllib для обращения к META;
- без извлечения cookies;
- без сохранения токенов;
- без печати секретов;
- без изменения данных META;
- авторизация выполняется пользователем вручную в браузере;
- запрещены действия «создать», «изменить», «удалить», «сохранить» и «отправить».

## Правила данных

- не выдумывать родительские связи;
- не определять связь только по похожему названию;
- использовать META ID, URL, breadcrumb и структурные ссылки;
- один META ID или URL должен соответствовать одному объекту;
- не создавать ложные объекты из названий страниц;
- не создавать unknown;
- сохранять таблицы в Markdown-формате;
- генерация должна быть идемпотентной.

## Запуск

Описать реальные команды запуска нового skill-а.

Не указывать абсолютные пользовательские пути.

======================================================================
5. README.md
======================================================================

Создать README.md для общего репозитория.

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

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

Все пути должны быть относительными.

Запрещены упоминания:

- /Users/23865613;
- zadanie2/source_project;
- наставника;
- стажировки;
- личной переписки;
- GigaCode-диалога;
- локального корпоративного ноутбука.

======================================================================
6. ПЕРЕНЕСТИ ФУНКЦИОНАЛЬНОСТЬ
======================================================================

Новый skill должен сохранить реализованную функциональность source_project:

1. Подключение к существующей браузерной сессии.

2. Ручную авторизацию пользователя.

3. Переход по URL из конфигурации.

4. Разворачивание динамических элементов META.

5. Открытие вкладки «Атрибуты».

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

7. Сохранение HTML.

8. Преобразование HTML в Markdown.

9. Формирование структуры:

projects/SNL/meta/as/{AS_NAME}/README.md

projects/SNL/meta/as/{AS_NAME}/fp/{FP_NAME}/README.md

projects/SNL/meta/as/{AS_NAME}/fp/{FP_NAME}/module/{MODULE_NAME}/README.md

projects/SNL/meta/as/{AS_NAME}/fp/{FP_NAME}/module/{MODULE_NAME}/submodule/{SUBMODULE_NAME}/README.md

10. Размещение ТК у подтверждённого родителя.

11. Формирование attributes/README.md.

12. Формирование:

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

13. Сохранение стендов и технических ресурсов при наличии данных.

14. Дедупликацию по META ID и URL.

15. Идемпотентную повторную генерацию.

16. Генерацию технических отчётов.

Не переносить временные исправления, которые используются только для конкретной
локальной копии проекта, если они не нужны для работы skill-а.

======================================================================
7. НЕ КОПИРОВАТЬ ЛИШНИЕ ДАННЫЕ
======================================================================

По умолчанию не копировать в новый skill:

- .git;
- .idea;
- .venv;
- __pycache__;
- временные резервные копии;
- before-*;
- *.log;
- локальные отчёты предыдущих запусков;
- старые плоские каталоги архитектуры;
- пользовательские temp_html;
- существующий output;
- существующий projects/SNL/meta с данными SberGeo;
- секреты;
- cookies;
- токены;
- локальные настройки браузерного профиля.

Можно создать пустые каталоги с `.gitkeep` или README, если они необходимы:

- temp_html;
- output;
- projects/SNL/meta.

Новый skill не должен содержать выгруженные корпоративные данные, если они
не требуются для работы программы.

======================================================================
8. КОНФИГУРАЦИЯ
======================================================================

Создать безопасные примеры конфигурации:

config/meta_exporter.yaml.example
config/meta_urls.txt.example

В них не должно быть:

- токенов;
- паролей;
- cookies;
- персональных путей;
- реальных секретов.

Реальные локальные конфигурации должны быть добавлены в `.gitignore`.

Например:

config/meta_exporter.yaml
config/meta_urls.txt
temp_html/
output/
.venv/
__pycache__/
*.log

Не хардкодить путь к SberBrowser.

Путь к браузеру должен задаваться конфигурацией или переменной окружения.

======================================================================
9. ТОЧКА ВХОДА
======================================================================

В корне нового skill-а должен быть понятный запуск:

python run_exporter.py

При запуске программа должна:

1. загрузить конфигурацию;
2. проверить обязательные параметры;
3. проверить доступность браузера;
4. подключиться к существующей сессии либо использовать предусмотренный режим;
5. выполнить только read-only действия;
6. сохранить результат в projects/SNL/meta;
7. сформировать отчёты в output;
8. завершиться с понятным кодом возврата.

Не запускать экспорт сейчас.

======================================================================
10. ПРОВЕРИТЬ ИМПОРТЫ
======================================================================

После копирования заменить импорты и пути так, чтобы новый skill не зависел от:

../source_project
/Users/23865613/
абсолютных локальных путей

Выполнить поиск:

grep -RniE \
'source_project|/Users/23865613|IdeaProjects/untitled/zadanie2' \
snl-markdownify-meta \
--exclude-dir=.venv \
--exclude-dir=__pycache__

Результат должен быть пустым.

Новый skill должен быть полностью автономным.

======================================================================
11. ПРОВЕРКИ БЕЗ БРАУЗЕРА
======================================================================

Не выполнять браузерный прогон.

Выполнить только безопасные офлайн-проверки:

cd /Users/23865613/IdeaProjects/untitled/zadanie2/snl-markdownify-meta

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

Проверить импорт основных модулей:

python -c "
from scripts.config_loader import *
from scripts.structured_meta_writer import *
from scripts.html_to_markdown import *
print('IMPORTS_OK')
"

Проверить, что код не импортирует файлы из source_project.

Проверить, что исходный проект не изменился:

- получить список файлов source_project до создания skill-а;
- получить хеши файлов source_project до создания skill-а;
- после завершения повторить проверку;
- подтвердить, что изменения отсутствуют.

Для проверки можно использовать:

find source_project -type f \
  -not -path '*/.git/*' \
  -not -path '*/.venv/*' \
  -exec shasum -a 256 {} \; | sort

Не создавать контрольные файлы внутри source_project.

======================================================================
12. ПРОВЕРИТЬ САМОСТОЯТЕЛЬНОСТЬ
======================================================================

Новый skill должен работать без наличия исходного проекта.

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

- отсутствуют импорты из source_project;
- отсутствуют ссылки на source_project;
- отсутствуют абсолютные пути;
- все необходимые Python-файлы находятся внутри snl-markdownify-meta;
- все используемые конфигурационные файлы имеют примеры;
- requirements.txt содержит необходимые зависимости;
- SKILL.md описывает запуск;
- README.md описывает установку;
- `.gitignore` исключает локальные данные.

======================================================================
13. ФИНАЛЬНЫЙ ОТЧЁТ
======================================================================

Создать внутри нового skill-а:

BUILD_REPORT.md

Структура:

# Создание skill snl-markdownify-meta

## Исходный проект

Указать только относительное описание, без абсолютного пользовательского пути.

## Целевая структура

Показать дерево каталогов нового skill-а.

## Скопированные файлы

Для каждого файла указать, зачем он нужен.

## Исключённые файлы

Указать, какие временные и локальные данные не копировались.

## Точка входа

## Конфигурация

## Безопасность

## Проверка импортов

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

## Проверка абсолютных путей

## Проверка независимости от source_project

## Проверка неизменности source_project

## Ограничения

## Требуется ли браузерный прогон

В финальном ответе показать:

- полный путь новой папки;
- дерево её файлов;
- количество скопированных Python-файлов;
- результат py_compile;
- результат проверки импортов;
- обнаружены ли ссылки на source_project;
- изменился ли исходный проект;
- какие данные намеренно не были скопированы;
- готов ли skill к отдельному браузерному тесту.

После выполнения остановиться.

Не запускать браузер.
Не обращаться к META.
Не выполнять commit или push.
Не изменять source_project.