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


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

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

Сейчас skill почти собран, но по проверке есть ошибки:
1. run_exporter.py / config_loader.py не находят meta_exporter.yaml.
2. structured_meta_writer.py создал 47 README вместо ожидаемых 51.
3. Есть ошибка NameError: STAND_NAMES is not defined.
4. structured_meta_writer.py не использует OUTPUT_TO_README, поэтому часть output/*.md не переносится в projects/SNL/meta.
5. Нужно сделать skill автономным: чтобы он работал из своей папки, не зависел от старого source_project и не требовал ручного указания путей.

Задача:
Исправить skill в папке snl-markdownify-meta так, чтобы он корректно запускался как самостоятельный GigaCode skill.

Жёсткие ограничения:
- Не трогать старый проект source_project.
- Не обращаться к META во время этой доработки.
- Не запускать браузер.
- Не читать cookies/tokens/secrets.
- Не использовать API META.
- Не использовать requests/httpx/aiohttp/urllib для META.
- Не удалять существующие skills docx и project_manager.
- Не коммитить и не пушить.
- Все проверки выполнять офлайн на уже существующих output/*.md и temp_html/*.html.

Что нужно сделать.

1. Исправить поиск корня skill-а.

Во всех скриптах, где нужны пути, определить ROOT_DIR как папку, где лежит текущий skill:

- если код внутри scripts/*.py, то ROOT_DIR = Path(__file__).resolve().parents[1]
- все пути строить только от ROOT_DIR:
  - ROOT_DIR / "config" / "meta_exporter.yaml"
  - ROOT_DIR / "config" / "meta_urls.txt"
  - ROOT_DIR / "output"
  - ROOT_DIR / "temp_html"
  - ROOT_DIR / "projects" / "SNL" / "meta"

Нельзя искать config только относительно текущей shell-директории.

2. Проверить и создать config/meta_exporter.yaml.

В папке skill-а обязательно должен быть файл:

config/meta_exporter.yaml

Если его нет, создать из config/meta_exporter.yaml.example или meta_exporter.yaml.example.

В конфиге должны быть относительные пути:

meta_urls_file: config/meta_urls.txt
output_dir: output
temp_html_dir: temp_html
structured_output_dir: projects/SNL/meta

Если формат текущего конфига другой — сохранить его структуру, но значения путей сделать относительными и рабочими внутри skill-а.

3. Исправить config_loader.py.

config_loader.py должен:
- находить meta_exporter.yaml в ROOT_DIR/config/meta_exporter.yaml;
- если файла нет, выводить понятную ошибку;
- не искать файлы в старом source_project;
- не использовать абсолютные пути пользователя;
- корректно резолвить относительные пути относительно ROOT_DIR.

После исправления команда должна проходить:

python -c "from scripts.config_loader import get_config, validate_config; c=get_config(); validate_config(c); print('Config OK')"

4. Исправить structured_meta_writer.py.

Нужно, чтобы structured_meta_writer.py строил полноценную структуру projects/SNL/meta из output/*.md.

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

projects/SNL/meta/
  README.md
  as/
    SberGeo/
      README.md
      attributes/
        README.md
      fp/
        SberGeo.СНЛ/
          README.md
          attributes/
            README.md
          module/
            M_СНЛ.AI/
              README.md
            M_СНЛ.Calculations/
              README.md
            M_СНЛ.Data_operator_Interface/
              README.md
            M_СНЛ.Integrations/
              README.md
            M_СНЛ.Requests/
              README.md
            M_СНЛ.Sowa_SIGMA/
              README.md
            M_СНЛ.User_Interface/
              README.md
          submodule/
            ПМ_СНЛ.Интеграции.Аудит/
              README.md
            ПМ_СНЛ.Интеграции.Парус/
              README.md
            ПМ_СНЛ.Интеграции.СУДИР/
              README.md
            ПМ_СНЛ.Интеграции.СФС/
              README.md
          tk/
            <24 технических компонента>/
              README.md
          integration-flow/
            README.md или объектный README, если есть реальные данные
          integration/
            README.md или объектный README, если есть реальные данные
          integration-point/
            <5 точек взаимодействия>/
              README.md
          stand/
            README.md
          technical-resource/
            README.md, если есть реальные данные

Важно:
- README внутри projects/SNL/meta не должен быть заглушкой только с заголовком и ссылкой на output.
- Каждый README должен содержать реальные данные из соответствующего output/*.md:
  - название;
  - тип объекта;
  - META URL;
  - META ID, если есть;
  - родитель, если определён;
  - таблицы атрибутов;
  - карточку;
  - ответственность;
  - дополнительные атрибуты;
  - технические атрибуты;
  - дочерние объекты;
  - исходные таблицы/строки, если они есть в output.
- Строка "Источник: output/..." допустима только как дополнительная строка внизу, а не вместо содержимого.

5. Исправить NameError: STAND_NAMES is not defined.

В structured_meta_writer.py найти использование STAND_NAMES.

Если STAND_NAMES нужен — определить его явно, например:

STAND_NAMES = {
    "Major-GO",
    "DEV",
    "ПРОМ",
    "Major-Check",
}

Но лучше не хардкодить без необходимости. Если stands берутся из output/STANDS.md, то извлекать их из файла.

Главное: structured_meta_writer.py не должен падать из-за STAND_NAMES.

6. Добавить или исправить mapping output -> README.

Нужен явный mapping, чтобы output-файлы переносились в правильные README:

- output/AC Геоинформационная система SberGeo - META.md
  -> projects/SNL/meta/as/SberGeo/README.md

- output/ФП SberGeo.СНЛ - META.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/README.md

- output/M СНЛ.* - META.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/module/M_*/README.md

- output/ПМ СНЛ.* - META.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/submodule/ПМ_*/README.md

- output/TK * - META.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/tk/TK_*/README.md

- output/INTERACTION_POINTS.md или output/*Точки взаимодействия*.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/integration-point/<точка>/README.md

- output/INTEGRATION_INTERACTIONS.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/integration-flow/README.md

- output/INTERACTIONS.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/integration/README.md

- output/STANDS.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/stand/README.md

- output/TECH_RESOURCES.md
  -> projects/SNL/meta/as/SberGeo/fp/SberGeo.СНЛ/technical-resource/README.md

7. Исправить generate_attributes_reports.py.

Если attributes/README.md сейчас пишет только "данные не обнаружены", а реальные данные есть в output/*.md, надо:
- брать атрибутные таблицы из output-файла соответствующего АС/ФП;
- переносить в attributes/README.md;
- не создавать пустую заглушку, если в output есть таблицы.

8. Добавить офлайн-проверку качества README.

Создать или обновить скрипт:

scripts/validate_skill_output.py

Он должен проверить:

- есть projects/SNL/meta/README.md;
- есть as/SberGeo/README.md;
- есть fp/SberGeo.СНЛ/README.md;
- есть 7 README модулей;
- есть 4 README подмодулей;
- есть 24 README TK;
- есть 5 README integration-point;
- есть README для stand;
- есть README для technical-resource;
- нет пустых README;
- нет README, которые содержат только заголовок и "Источник: output/...";
- в README объектов есть URL или META ID, если они были в output;
- в attributes/README.md есть Markdown-таблицы;
- нет старых плоских каталогов hierarchy/, modules/, submodules/, technical_components/, stands/, tech_resources/ на верхнем уровне projects/SNL/meta;
- нет абсолютных путей /Users/23865613 внутри README и отчётов;
- нет cookies/tokens/password.

9. Обновить BUILD_REPORT.md.

BUILD_REPORT.md должен честно показывать:
- сколько output/*.md найдено;
- сколько README создано в projects/SNL/meta;
- сколько объектов каждого типа:
  - AC;
  - FP;
  - module;
  - submodule;
  - TK;
  - integration-flow;
  - integration;
  - integration-point;
  - stand;
  - technical-resource;
  - attributes.
- результат py_compile;
- результат validate_skill_output.py;
- результат идемпотентности;
- список ограничений, если какие-то данные реально отсутствуют в output/temp_html.

10. Финальные команды проверки.

Выполнить строго из папки skill-а:

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

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

python scripts/structured_meta_writer.py

python scripts/generate_attributes_reports.py

python scripts/generate_reports.py

python scripts/validate_skill_output.py

Потом выполнить второй раз:

python scripts/structured_meta_writer.py
python scripts/generate_attributes_reports.py
python scripts/generate_reports.py
python scripts/validate_skill_output.py

Проверить, что:
- количество README не уменьшается;
- структура не ломается;
- дубли не создаются;
- содержимое README не становится заглушками;
- output остаётся технической зоной;
- основной результат лежит в projects/SNL/meta.

11. Финальный отчёт вывести в чат.

В финальном отчёте укажи:

- какие файлы изменены;
- где лежит skill;
- найден ли config/meta_exporter.yaml;
- найден ли config/meta_urls.txt;
- py_compile OK или нет;
- сколько README в projects/SNL/meta;
- сколько README с реальными данными;
- есть ли пустые README;
- есть ли README только со ссылкой на output;
- есть ли абсолютные пути;
- готов ли skill к использованию в GigaCode.

Критерий готовности:
Skill считается готовым только если README в projects/SNL/meta содержат реальные данные из output/*.md, а не просто ссылки на output.