diff --git a/README.md b/README.md index f81765b..c622343 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,55 @@ -# OpenSpec Lab — spec-driven для инфраструктуры +# OpenSpec Lab — песочница (устаревшая роль) + +> **Статус: 2026-09-11 — лаба ЗАКРЫТА как рабочий каталог.** +> OpenSpec теперь живёт **в каждом проекте** (`/opt//openspec/`). +> Этот каталог остаётся как история/песочница и не используется для новых changes. + +## Зачем была Песочница OpenSpec (Fission-AI, CLI 1.12.0) для практики spec-driven development на задачах настройки инфраструктуры Hermes и homelab. -## Зачем +## Новая модель (per-project) -OpenSpec даёт формальный цикл «согласовали ЧТО → делаем КАК → проверяем → архивируем»: +Каждый проект имеет собственный `openspec/` + `.hermes/skills/openspec-*`: -1. `proposal.md` — зачем менять -2. `specs//spec.md` — дельта требований (ADDED/MODIFIED/REMOVED) с GIVEN/WHEN/THEN -3. `design.md` — как именно (файлы, команды, rollback, риски) -4. `tasks.md` — чеклист применения +| Проект | Что описано | +|---|---| +| `/opt/hermes/email-assistant` | email storage, calendar/vikunja (активный change) | +| `/opt/monitoring` | grafana access, vinograd monitoring | +| `/opt/infrastructure` | tunnel-proxy (SOCKS5) | +| `/opt/icq` | prosody/icq services (активный change) | +| `/opt/vesti`, `/opt/dedinit.ru`, `/opt/gotosocial` | свои проекты | -После `openspec archive` дельта вливается в `openspec/specs/` (источник истины), а -change уходит в `openspec/changes/archive/` с датой. - -## Команды - -```bash -# Новый change -openspec new change "short-name" -# Статус / валидация -openspec status --change short-name -openspec validate short-name -# Завершение -openspec archive short-name --yes -``` - -## Hermes-скиллы - -`openspec init --tools hermes` сгенерировал скиллы в `.hermes/skills/openspec-*`. -В `~/.hermes/config.yaml` (Hermes-профиль) подключены через: +Скиллы подключены через `~/.hermes/config.yaml`: ```yaml skills: external_dirs: - - /opt/hermes/openspec-lab/.hermes/skills + - /opt/hermes/email-assistant/.hermes/skills + - /opt/monitoring/.hermes/skills + - /opt/infrastructure/.hermes/skills + - /opt/icq/.hermes/skills + - /opt/vesti/.hermes/skills + - /opt/gotosocial/.hermes/skills + - /opt/dedinit.ru/.hermes/skills ``` -## Реальные changes +## Команды (в каждом проекте) -| Change | Статус | Что | -|---|---|---| -| `add-vpn-tunnel-proxy` | заархивирован | Спека постоянного SOCKS5-туннеля до VPS01 | -| `tavily-proxy-setup` | заархивирован | Tavily extract через локальный прокси (гео-обход), e2e работает | -| `local-extractor` | открыт (4/4 артефакта, тесты сетевые отложены) | Локальная экстракция trafilatura, Tavily-совместимый интерфейс | +```bash +cd /opt/ +openspec new change "short-name" # новый change +openspec status --change short-name # артефакты +openspec validate # проверка +openspec archive --yes # слияние в openspec/specs/ + архив +``` + +## Архив + +- Перенесённые changes живут в `openspec/changes/archive/` каждого проекта. +- Старые изменения лабы (исторические) сохранены в git-истории этого репозитория. ## Git / gitverse -Источник истины — gitverse.ru (зеркало gitea на bigbox). - -```bash -git remote -v # origin → https://estorozhenko:@gitverse.ru/estorozhenko/openspec-lab.git -# Создать репозиторий на gitverse (UI/API), затем: -git push -u origin main -``` - -Токен (PAT) хранится в obsidian: `homelab/gitverse.ru.md` и -`homelab/gitea.nixg.ru/Токен для gitverse.ru.md`. - -## Стек (окружение bigbox) - -- OpenSpec CLI: `npm install -g @fission-ai/openspec` (node 22) -- Hermes-профиль: `/opt/hermes/.hermes` -- Прокси-скрипты: `/opt/hermes/.hermes/scripts/` -- Tavily-прокси: systemd `tavily-proxy.service` (порт 8971, через SOCKS5-туннель) \ No newline at end of file +Источник истины — gitverse.ru (origin этого репо): https://gitverse.ru/kpa39l/openspec-lab.git \ No newline at end of file diff --git a/STATUS.md b/STATUS.md index 524af32..e5b2b2f 100644 --- a/STATUS.md +++ b/STATUS.md @@ -1,46 +1,37 @@ # OpenSpec Lab — Статус -Обновлено: 2026-09-08 (сессия: Grafana read-only пользователь) +Обновлено: 2026-09-11 (разнос OpenSpec по проектам) -## Текущее состояние -Лаборатория spec-driven подхода (OpenSpec CLI 1.12.0) для задач настройки инфраструктуры Hermes/homelab. Цикл propose→apply→archive работает; **5 change заархивированы**. Tavily-прокси (web_extract) работает end-to-end в forward-режиме (решение по задаче 5: оставить как есть). Локальный экстрактор (trafilatura) написан и протестирован (2.2/2.3 зелёные), change заархивирован. Репозиторий создан на gitverse.ru, main запушен. ICMP-мониторинг канала «Винный город» заархивирован (в /opt/monitoring). Read-only пользователь Grafana (it@vinogorod.ru, Viewer) добавлен через UI — change заархивирован. +## Текущее состояние: ЛАБА ЗАКРЫТА как рабочий каталог -## Сделано -- [x] OpenSpec CLI установлен (npm, 1.12.0), лаба инициализирована с --tools hermes (6 скиллов) -- [x] config.yaml с инфраструктурным контекстом (systemd, docker, /opt//, gitverse) -- [x] change tavily-proxy-setup — ЗААРХИВИРОВАН (delta → specs/web-extract-tavily/spec.md) -- [x] web_extract работает: Hermes → 8971 → SOCKS5-туннель → Tavily (HTTP 200, контент Example Domain) -- [x] change local-extractor — ЗААРХИВИРОВАН: trafilatura 2.2.0, local-режим в tavily_extract_proxy.py, тесты 2.2/2.3 зелёные -- [x] Репозиторий создан на gitverse.ru (kpa39l/openspec-lab), git push -u origin main выполнен -- [x] systemd tavily-proxy.service — решение по задаче 5: ОСТАВЛЕН forward-режим (облачный Tavily через туннель) -- [x] change vinograd-rostelecom-channel-monitoring — ЗААРХИВИРОВАН (2026-09-08): ICMP-мониторинг канала «Винный город» в /opt/monitoring, дашборд Vinograd WAN -- [x] change grafana-readonly-user — ЗААРХИВИРОВАН (2026-09-08): read-only пользователь Grafana it@vinogorod.ru (role Viewer, пароль 1qazXSW2), создан вручную в UI (OSS 11.1 не умеет provisioning/API create пользователей). delta → openspec/specs/grafana-access-control/spec.md -- [x] change fix-vinograd-dashboard-datasource — ЗААРХИВИРОВАН (2026-09-08): убрана ссылка на встроенный датасорс `__grafana__` в annotations дашборда vinograd-wan (была ошибка "Datasource __grafana__ was not found"). delta → openspec/specs/vinograd-wan-monitoring/spec.md +OpenSpec разнесён по проектам (per-project). Лаба остаётся как история/песочница, +новые changes создаются в `/opt//openspec/`. -## В работе / Следующие шаги -- (ничего — все задачи закрыты; лаба стабильна) +## Сделано 2026-09-11 + +- [x] Перенесены архивные changes в проекты: + - `email-storage-analysis` → `/opt/hermes/email-assistant/openspec/` + - `grafana-access-control`, `vinograd-rostelecom-channel-monitoring`, + `fix-vinograd-dashboard-datasource` → `/opt/monitoring/openspec/` + - `add-vpn-tunnel-proxy` → `/opt/infrastructure/openspec/` +- [x] Перенесены активные changes: + - `icq-fix-prosody-network` → `/opt/icq/openspec/` + - `local-calendar-tasks` → `/opt/hermes/email-assistant/openspec/` +- [x] `openspec init --tools hermes` в 4 проектах (скиллы + config.yaml) +- [x] `skills.external_dirs` обновлён в `~/.hermes/config.yaml` (7 проектов) +- [x] Все проекты провалидированы (`openspec validate` — зелёно, warnings косметика) +- [x] Закоммичено и запушено: email-assistant, monitoring, infrastructure, icq + +## Осталось + +- [ ] `tavily-proxy-setup` / `local-extractor` → куда? (инструменты самого Hermes; + предлагается `/opt/hermes/openspec/` или оставить в истории лабы) +- [ ] Удалить дублирующиеся скиллы из лабы (не подключены, но лежат в `.hermes/skills/`) +- [ ] Проверить, что `hermes skills list` не показывает дубли openspec-* (7 проектов) + +## Проверка -## Как запустить / проверить ```bash -cd /opt/hermes/openspec-lab -openspec validate # все changes -openspec status --change local-extractor -# локальный экстрактор (тест) -./venv/bin/python .hermes/scripts/tavily_extract_proxy.py --port 8972 --local -curl -s -X POST http://127.0.0.1:8972/extract -d '{"urls":["https://example.com"]}' -H 'Content-Type: application/json' -# рабочий прокси (systemd) -systemctl status tavily-proxy # порт 8971, forward через туннель -``` - -## Ключевые артефакты -- /opt/hermes/openspec-lab/openspec/specs/web-extract-tavily/spec.md — main spec про forward-прокси -- /opt/hermes/openspec-lab/openspec/specs/web-extract-local/spec.md — main spec про local-экстрактор -- /opt/hermes/openspec-lab/openspec/specs/vinograd-wan-monitoring/spec.md — ICMP-мониторинг канала -- /opt/hermes/openspec-lab/openspec/specs/grafana-access-control/spec.md — read-only пользователь Grafana -- /opt/hermes/openspec-lab/openspec/changes/archive/2026-09-08-grafana-readonly-user/ — архивный change -- /opt/hermes/.hermes/scripts/tavily_extract_proxy.py — прокси + local-режим -- /etc/systemd/system/tavily-proxy.service — юнит (forward, без изменений) -- gitverse: https://gitverse.ru/kpa39l/openspec-lab (remote origin: https://kpa39l:@gitverse.ru/kpa39l/openspec-lab.git) - -## Открытые вопросы -- (нет) \ No newline at end of file +cd /opt/ && openspec validate --specs # зелёно в каждом +hermes config get skills.external_dirs # 7 каталогов +``` \ No newline at end of file