auto-sync: 2026-06-03 23:00:01

This commit is contained in:
Stream
2026-06-03 23:00:01 +03:00
parent d5259be89b
commit 51f4bee568
2 changed files with 79 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
# DEV TASK — ссылки в комменте analyst: localhost → внешний публичный Gitea URL
**Проект:** orchestrator | **Сервер:** slin@82.22.50.71 | **Репо:** /home/slin/repos/orchestrator | **Контейнер:** orchestrator (8500)
**Ветка:** `fix/gitea-public-url` из свежего main (`git checkout main && git pull && git checkout -b fix/gitea-public-url`). main = `dce9ac8` (PR #13).
⚠️ **ГРАБЛЯ push (ORCH-7):** после push `git log origin/main..origin/fix/gitea-public-url` ДОЛЖЕН показать коммиты ДО отчёта «PR готов».
Токен Gitea: `docker exec orchestrator printenv ORCH_GITEA_TOKEN`.
## Проблема
Ссылки на доки в комменте analyst (`_build_analyst_ready_comment` в `src/stage_engine.py`) строятся от `settings.gitea_url` = `http://localhost:3000` (env `ORCH_GITEA_URL`). Это **внутренний** URL для git-операций (clone/push из docker), из браузера Славы не кликается. Нужен внешний публичный домен.
## Решение — НЕ менять gitea_url (он для git-операций), добавить ОТДЕЛЬНУЮ настройку
1. **`src/config.py`** (рядом с `gitea_url`, ~стр.24): добавить поле
```python
gitea_public_url: str = "" # external URL for clickable links in comments; falls back to gitea_url
```
Pydantic-settings подхватит env `ORCH_GITEA_PUBLIC_URL` (тот же префикс ORCH_, что у gitea_url/gitea_token — проверь env_prefix в config.py).
2. **`src/stage_engine.py`**, `_build_analyst_ready_comment` (~стр.40): заменить
```python
base = settings.gitea_url.rstrip("/")
```
на
```python
base = (getattr(settings, "gitea_public_url", "") or settings.gitea_url).rstrip("/")
```
Только эту строку (источник base для href). НЕ трогать остальное.
3. **НЕ хардкодь домен в коде.** Дефолт поля = `""` (fallback на gitea_url). Реальное значение задаётся через env.
## Env на проде (это сделает АССИСТЕНТ при деплое, НЕ ты — но укажи в отчёте)
`ORCH_GITEA_PUBLIC_URL=https://git.mva154.duckdns.org` в docker-compose/env оркестратора. (Домен проверен живым: HTTP 200.)
## Ограничения
- 🚫 НЕ трогай: `gitea_url` (git-операции!), nginx/openclaw.json/.env-секреты/deploy/HMAC/очередь/webhook URL в БД Plane/PLANE_STATES/M-6/uniqueness-guard/status-only логику/conftest.py/fetch_issue_fields/fetch_issue_description.
- Conventional Commits, один коммит: `feat(config): external gitea_public_url for clickable doc links`.
## Тесты (контейнер)
`IMG=$(docker inspect orchestrator --format '{{.Config.Image}}'); docker run --rm -v /home/slin/repos/orchestrator:/code -w /code --entrypoint python3 $IMG -m pytest tests/ -q`
Новый/расширить существующий `test_analyst_comment_asks_approved_with_links`: при заданном `gitea_public_url` ссылки строятся от него (не от gitea_url); при пустом — fallback на gitea_url. Можно через monkeypatch settings.
Baseline: **207 passed + 9 pre-existing failed** — не ломать pre-existing.
## Проверка (ассистент)
| # | Что | Критерий |
|---|-----|----------|
| 1 | fallback | пустой gitea_public_url → ссылки от gitea_url (как раньше) |
| 2 | внешний | gitea_public_url задан → ссылки от внешнего домена |
| 3 | git цел | git-операции (clone/push) по-прежнему через gitea_url localhost |
| 4 | тесты | baseline не сломан + тест на public_url passed |
| 5 | git | PR в main, remote содержит коммит |
## Отчёт
- НЕ деплоить, НЕ мержить (мерж + установку env на проде делает ассистент).
- В отчёте: точные строки правок, как назвал env-переменную, подтверди что gitea_url (git-операции) НЕ тронут, вывод теста. Один исполнитель, маленькая правка — не раздувай.