Files
openspec-lab/WALKTHROUGH.md
T
2026-09-06 12:33:46 +00:00

69 lines
6.0 KiB
Markdown
Raw 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.
# WALKTHROUGH — OpenSpec Lab (капитанский журнал)
Цель: воспроизводимость spec-driven подхода для инфраструктуры. Хронология по датам.
## 2026-09-06
### Установка OpenSpec
```bash
npm install -g @fission-ai/openspec # CLI 1.12.0, node 22
openspec init --tools hermes --force --no-animation # в /opt/hermes/openspec-lab
# ВАЖНО: опции --no-init-git НЕТ (упало). Использовать --force --no-animation.
```
Сгенерировано 6 Hermes-скиллов: .hermes/skills/openspec-{propose,apply-change,explore,update-change,sync-specs,archive-change}/SKILL.md
Подключение к Hermes: `hermes config set skills.external_dirs '["/opt/hermes/openspec-lab/.hermes/skills"]'`
### config.yaml (инфраструктурный контекст)
- Пути: /opt/<service>/, systemd-юниты, docker compose, gitverse как источник истины
- rules: rollback в design.md, MUST/SHOULD, GIVEN/WHEN/THEN с проверочными командами
- НЮАНС: CLI 1.12.0 предупреждает про rules для 'specs' (папка мн.ч.) — формат верный, баг CLI, не влияет.
### Демо-цикл add-vpn-tunnel-proxy
`openspec new change add-vpn-tunnel-proxy` → 4 артефакта → `validate` OK → `archive --yes` (delta → openspec/specs/tunnel-proxy/spec.md, change → archive/2026-09-06-*). Работает.
### Tavily-прокси (web_extract) — диагноз и фикс
- Проблема: web_extract не работал (extract_backend='' → пусто)
- Tavily из РФ: api.tavily.com → 403 (AWS ELB geo-block). Через `--socks5-hostname 127.0.0.1:1080` (ssh-туннель telegram-tunnel до VPS01) → 200.
- Решение: локальный HTTP→SOCKS5 форвардер /opt/hermes/.hermes/scripts/tavily_proxy.py (порт 8971), TAVILY_BASE_URL=http://127.0.0.1:8971 в .env. Прокси для Hermes НЕ выставлять глобально (сломало бы прямой трафик к deepseek/polza).
- systemd: /etc/systemd/system/tavily-proxy.service — After/Wants=telegram-tunnel.service, Restart=always, User=estorozhenko.
- Питфол: FakeReq в http.server не имеет method → curl HTTP 000; починил `method = self.command`.
- Питфол: `sed` по `# TAVILY_API_KEY=` не нашёл строку (её не было) — ключ добавил в конец .env. Бэкап .env.bak-20260906.
- Проверка e2e: Hermes-провайдер (`_tavily_request` из plugins/web/tavily/provider.py) → doc Example Domain с контентом.
### Локальный экстрактор (change local-extractor, открыт)
Расширил tavily_proxy.py → tavily_extract_proxy.py:
- `_fetch_page(url, socks)` — httpx, при socks → SOCKS5-transport
- `_extract_local(url, socks)` — trafilatura.extract → markdown; метаданные через extract_metadata
- CLI: `--local` (по умолчанию без --socks), `--local-socks HOST:PORT`, `--socks HOST:PORT --upstream` (forward)
- Формат ответа = Tavily /extract: `{"results":[{url,title,raw_content,metadata}], "failed_results":[...], "failed_urls":[...]}` — Hermes-провайдер обрабатывает как есть.
- trafilatura 2.2.0 установлен в venv Hermes.
- Питфол: `trafilatura.fetch_url(url, timeout=...)` — СИГНАТУРА ИЗМЕНИЛАСЬ, timeout не принимает (упало) → заменил на httpx-клиент с таймаутом.
- systemd-юнит переведён на tavily_extract_proxy.py (forward-режим, `--socks 127.0.0.1:1080 --upstream https://api.tavily.com`) — рабочий.
- Тесты 2.2/2.3 (внешние URL) НЕ ПРОШЛИ: командная строка блокирует внешние запросы без подтверждения пользователя; отложено.
### Git / gitverse
```bash
git init -b main && git add ... (НЕ git add -A — зависает; добавлять файлы поимённо)
git -c user.name=... -c user.email=... commit -m "..."
git remote add origin https://estorozhenko:<TOKEN>@gitverse.ru/estorozhenko/openspec-lab.git
```
Токен: obsidian homelab/gitverse.ru.md (dc52c489...) и homelab/gitea.nixg.ru/«Токен для gitverse.ru.md» (a8c8f69e..., для зеркала gitea).
- Питфол: `git add -A` зависал (блок сессии) — добавлять файлы явно поимённо.
- Push НЕ делал (создание репо на gitverse — внешнее действие, ждёт пользователя).
## Подводные камни (сводно)
1. openspec init: нет --no-init-git.
2. trafilatura.fetch_url не принимает timeout (2.2.0).
3. FakeReq.http.server без method → 000.
4. git add -A зависает в этой сессии; только поимённо.
5. Внешние curl (github, tavily через прокси) блокируются без ответа пользователя — для сетевых тестов нужно его присутствие.
6. Прокси Hermes глобально не трогать (deepseek/polza прямые).
7. Tavily требует туннель; .env — бэкап перед правкой.
## Как продолжить (следующая сессия)
1. Спросить/получить подтверждение на сетевые тесты 2.2/2.3 (или выполнить при пользователе).
2. Прогнать: curl POST 127.0.0.1:8972/extract (--local) на example.com и github-страницу; --local-socks для заблокированных.
3. openspec validate + archive local-extractor.
4. Создать репо на gitverse (UI/API), git push -u origin main.
5. Решить: переключать ли systemd на --local (без облака) или оставить forward.