Files
SciMesh/docs/worker-vibecoder-feedback.md

58 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Памятка для доработки SciMesh Worker
Это короткие правила по итогам ревью первой версии воркера. Перед новой
задачей прочитай также [PLAN.md](../PLAN.md) и документ задачи, который тебе
дали.
## Что делать
- Считай воркер клиентом. Очередью, статусами задач и PostgreSQL управляет
только coordinator.
- Сначала скачай и проверь входной файл по SHA-256, затем запусти расчёт.
- Сохраняй файлы только в своей папке `task_id/attempt`.
- После расчёта сначала загрузи результат через coordinator, затем отправляй
результат задачи.
- В `result` передавай URI, который вернул coordinator, плюс SHA-256 и тип
файла.
- При ошибке вызывай `/tasks/{id}/failure`; при успехе —
`/tasks/{id}/result`.
- Для heartbeat используй новое `lease_expires_at`, возвращённое coordinator.
- Во все запросы, связанные с задачей, передавай `worker_id` и `attempt`.
- Пиши тесты не только на успех: проверь ошибку runner, неверный checksum,
ошибку загрузки, потерю lease и пустой результат.
- Если поменял API, меняй одновременно Python-код, Go coordinator,
документацию и тесты.
## Чего не делать
- Не отправляй в coordinator пути вида `worker://...` или `file://...`.
Coordinator не видит локальные файлы воркера.
- Не используй `/result` для сообщения об ошибке.
- Не считай, что проверок Python достаточно: coordinator обязан сам проверить
владельца lease, attempt, срок lease и допустимость смены статуса.
- Не повторяй любой HTTP-запрос вслепую. Повторные запросы должны быть
безопасны: одинаковый `(task_id, attempt, worker_id)` не должен создавать
дубликаты.
- Не передавай bearer token на другой домен при редиректе и не пиши токены,
traceback или полные локальные пути в логи.
- Не помечай задачу завершённой, если артефакт не загружен надёжно.
- Не меняй контракт API «по ощущениям». Сначала зафиксируй JSON, статусы и
переходы состояний в документации.
## Мини-чеклист перед коммитом
- [ ] Результат загружен в storage coordinator до `POST /result`.
- [ ] Ошибка уходит в `POST /failure`, а не в `POST /result`.
- [ ] Heartbeat возвращает новый срок lease, и код его сохраняет.
- [ ] В запросах есть верные `worker_id` и `attempt`.
- [ ] Нет `worker://`, `file://`, токенов и секретов в результатах или логах.
- [ ] Добавлены тесты на новый сценарий и на ошибку.
- [ ] `pytest` и проверка форматирования проходят.
## Короткий контекст для нейронки
> SciMesh Worker — клиент coordinator, а не владелец очереди. Загружай
> результат через coordinator до завершения задачи. Успех отправляй в
> `/result`, ошибку — в `/failure`. Проверяй checksum, lease и attempt.
> Меняя протокол, обновляй Python, Go, документацию и тесты в одном изменении.