11 KiB
ПЛАН: Создание общего справочника разработчика
Этот файл — инструкция для нового чата. Прочитать перед началом работы.
1. Задача
Создать единый справочник разработчика по ВСЕМ проектам, чтобы:
- Агенты не повторяли одни и те же ошибки
- Было удобно искать по любой теме/симптому
- Было удобно добавлять новые записи
2. Где разместить
Вариант A (рекомендую): /home/naeel/global-dev-reference/
Отдельная директория в ~. Плюсы:
- Не привязана к одному репозиторию
- Агент видит файлы если workspace открыт на
/home/naeel/ - Можно проинициализировать git (опционально)
- Можно сделать символическую ссылку из каждого проекта
Вариант B: В docs/help/dev-reference/ внутри tf_provider.
- Минус: другие проекты не увидят.
- Минус: привязано к одному репо.
3. Какие проекты включить
| Проект | Путь | Что содержит |
|---|---|---|
| tf_provider | /home/naeel/tf_provider/ |
Terraform provider (Universal + Legacy), docs/, HISTORY/ |
| contracts | /home/naeel/nubes/contracts/ |
Проект contracts |
| ipwhitelist | /home/naeel/ipwhitelist/ |
Проект ipwhitelist |
| ВМ 5.172.178.213 | SSH: naeel@5.172.178.213 |
Registry-server, старые скрипты, история |
| terra/ | /home/naeel/terra/ |
Старые проекты (fission, IoT, karta, lang...) |
4. Структура справочника
/home/naeel/global-dev-reference/
├── INDEX.md # Оглавление + алфавитный указатель
├── INSTRUCTION.md # Как добавлять новую запись
├── TLDR_FOR_AGENTS.md # Агентам — прочитать ОБЯЗАТЕЛЬНО
│
├── projects/ # По проектам
│ ├── tf_provider/
│ │ ├── BUGS.md # Все баги tf_provider
│ │ ├── ARCHITECTURE.md # Ключевые архитектурные решения
│ │ ├── STATE_MATRIX.md # Матрица состояний инстансов
│ │ └── PARAM_MAP.md # Маппинг параметров create↔modify
│ ├── contracts/
│ │ └── BUGS.md
│ ├── ipwhitelist/
│ │ └── BUGS.md
│ └── registry-vm/
│ └── BUGS.md
│
└── cross-cutting/ # Сквозные темы (общие для всех проектов)
├── AUTH.md # Проблемы аутентификации (токены, DDoS-Guard, GPG)
├── POLLING.md # Паттерны polling (dtFinish, таймауты)
├── DDS_GUARD.md # DDoS-Guard: где и как обходить
├── GPG.md # GPG подписи: ключи, форматы, ошибки
├── REGISTRY_PROTOCOL.md # Terraform Registry Protocol
└── SSH_AND_VM.md # Доступ к ВМ, sshfs, ключи
5. Формат одной записи (бага/решения)
Каждый баг оформляется так:
## [P0] Короткое название
**Симптом:** что происходит, текст ошибки
**Причина:** root cause
**Решение:** что сделали/надо сделать
**Статус:** ✅ FIXED / ⚠️ OPEN / ❌ WORKAROUND / 🟡 PLATFORM
**Версия:** vX.Y.Z (где исправлено)
**Файлы:**
- `/абсолютный/путь/к/файлу.go:123` — что там
**Источники:**
- относительная ссылка на HISTORY файл
6. Что уже есть для tf_provider (ГОТОВЫЙ МАТЕРИАЛ)
Уже собранные данные (можно сразу переносить):
Баги tf_provider (25+ штук):
A. Аутентификация и токены (P0)
- 401 Unauthorized — токен истёк
- 403 DDoS-Guard (User-Agent) — ✅ FIXED v5.0.75
- 403 DDoS-Guard (POST) — ⚠️ OPEN (причина не до конца ясна)
- HTTP/2 ALPN EOF — ✅ FIXED (TLSNextProto)
B. Поллинг зависает (P0)
- Polling без dtFinish — ✅ FIXED (критерий dtFinish)
- Polling игнорирует Instance Status ERROR/STOPPED — ✅ FIXED (waitForVMOperationAndInstanceStatus)
- Polling не ловит асинхронные ошибки — ✅ FIXED (WaitForOperation)
C. Modify: Invalid CFS parameter 400 (P1)
- Разные svcOperationCfsParamId для create и modify — ✅ FIXED (runtime discovery)
D. Modify недоступен (P1)
- action modify not available — ✅ FIXED (guard через availableOperations)
E. Map/JSON/List invalid format 400 (P1)
- Пустые строки вместо {} / [] — ✅ FIXED (V2-V6 нормализации)
- mapExample как
"\""— ✅ FIXED (V6)
F. VM: зависание на FW (P0)
- String[]→GUID crash — ❌ WORKAROUND (валидатор, баг платформы)
- accessIpList пустая строка — ✅ FIXED (ValidJSONArray + fallback)
G. VM modify: 500 checkParam (P1)
- Дублирование параметров при POST/PUT — ✅ FIXED (гибридный PUT/POST)
H. Postgres: split() on null (P0)
- Передан UUID бакета вместо UUID сервиса S3 — ✅ FIXED
I. GPG/Registry (P0)
- authentication signature from unknown issuer — ✅ FIXED (синхронизация ключей)
- openpgp invalid data — ✅ FIXED (бинарная подпись без --armor)
- Presigned URL не работает через Ingress — ✅ FIXED (proxy mode)
- Registry Not Found (неполный ID) — ✅ FIXED
- GPG ключ в репозитории secrets/ — ⚠️ OPEN
J. Документация 404 (P1)
- Неверный S3 ключ — ✅ FIXED (docs/ prefix)
K. Terraform Plugin Framework версии (P2)
- Несовместимость framework и plugin-go — ✅ FIXED (v1.4.2 + v0.19.1)
L. Adopt/Resume (P1)
- Ref-параметры не валидировались при adopt — ✅ FIXED v5.0.50 (ref_validation.go)
- Duplicate displayNames — ✅ FIXED v5.0.50
- operation_in_progress — ✅ FIXED v5.0.50
M. Сборка и CI (P1)
- Missing resources_yaml embed — ✅ FIXED v5.0.1
- Повторная установка mkdocs — ✅ FIXED v5.0.4
- Сборочный контейнер без git/zip/curl — ✅ FIXED
- urllib без User-Agent (01_generate_yamls.sh) — ⚠️ OPEN
- urllib без обработки ошибок API — ⚠️ OPEN
- Нет retry в doRequest (429/503) — ⚠️ OPEN
N. Генерация (P1)
- Неизвестный kind тихо игнорируется — ⚠️ OPEN
- YAML не валидируется — ⚠️ OPEN
- format.Source пишет битый код — ⚠️ OPEN
- Нет CI-диффа API vs YAML — ⚠️ OPEN
- YAML устарел (новые операции в API) — ⚠️ OPEN
O. Destroy/Detach (P1)
- Destroy вызывал API delete для suspend-ресурсов — ✅ FIXED v5.0.8
P. Create-only params (P1)
- Needless modify при изменении create-only params — ✅ FIXED v5.0.38
Q. Subresource id unknown (P1)
- .id unknown после apply для subresource без modify — ✅ FIXED v5.0.7
R. Deleted filter (P0)
- План показывает deleted инстансы в ref_svc_id — ✅ FIXED v5.0.38
- findInstanceUidByDisplayNameRefSvc без deleted filter — ✅ FIXED (в коде)
- Три разные функции строят запросы к /instances — ⚠️ OPEN (рефакторинг)
S. Orphan при обрыве (P0)
- После POST /instances но до run — orphan not_created — ⚠️ OPEN
T. Тесты (P2)
- Всего 8 unit-тестов — ⚠️ OPEN
- adopt, polling, генератор не покрыты — ⚠️ OPEN
U. Диск (P2)
- Disk decrease rejected (скейл-даун) — 🟡 PLATFORM
V. Стенды (P1)
- PROD_STAND/RABBIT указывает на test-endpoint — ⚠️ OPEN
- Legacy провайдер не используется — ⚠️ OPEN
7. Источники данных (где лежит)
Все баги собраны из:
/home/naeel/tf_provider/docs/50_history/— файлы 00-24/home/naeel/tf_provider/HISTORY/OPUS/— 7 файлов анализа/home/naeel/tf_provider/HISTORY/SONNET/0107.md/home/naeel/tf_provider/HISTORY/2026-07-01_ddos_guard_403_and_registry_fix.md/home/naeel/tf_provider/docs/help/— существующие глоссарии/home/naeel/tf_provider/docs/20_discovery//home/naeel/tf_provider/docs/60_strategy/- Анализ кода
universal_rebuild/
8. Порядок действий (для нового чата)
- Прочитать этот файл (PLAN_FOR_NEW_CHAT.md)
- Прочитать INDEX.md и INSTRUCTION.md (уже созданы)
- Решить где размещать: вариант A (~/global-dev-reference/) или вариант B (в tf_provider/docs/)
- Создать структуру директорий
- Наполнить BUGS.md для tf_provider (данные уже есть в п.6)
- Прочитать contracts, ipwhitelist, ВМ — собрать их баги
- Создать cross-cutting файлы (AUTH, POLLING, GPG...)
- Написать TLDR_FOR_AGENTS.md
- Если нужно — git init в global-dev-reference/
- Создать символические ссылки из проектов на справочник
9. Ключевые требования
- ⚡ Каждый баг — ссылки на конкретные файлы и строки кода
- ⚡ Удобный поиск — INDEX с алфавитным указателем
- ⚡ лёгкое добавление — INSTRUCTION с шаблоном
- ⚡ Агенты не тупят — TLDR_FOR_AGENTS.md обязателен к прочтению
- ⚡ Статусы честные — OPEN не прятать