docs: лаба закрыта как рабочий каталог — OpenSpec разнесён по проектам

This commit is contained in:
estorozhenko
2026-09-11 17:36:46 +00:00
parent b047e3a21d
commit be0c195722
2 changed files with 68 additions and 89 deletions
+38 -50
View File
@@ -1,67 +1,55 @@
# OpenSpec Lab — spec-driven для инфраструктуры
# OpenSpec Lab — песочница (устаревшая роль)
> **Статус: 2026-09-11 — лаба ЗАКРЫТА как рабочий каталог.**
> OpenSpec теперь живёт **в каждом проекте** (`/opt/<project>/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/<cap>/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/<project>
openspec new change "short-name" # новый change
openspec status --change short-name # артефакты
openspec validate <name> # проверка
openspec archive <name> --yes # слияние в openspec/specs/ + архив
```
## Архив
- Перенесённые changes живут в `openspec/changes/archive/` каждого проекта.
- Старые изменения лабы (исторические) сохранены в git-истории этого репозитория.
## Git / gitverse
Источник истины — gitverse.ru (зеркало gitea на bigbox).
```bash
git remote -v # origin → https://estorozhenko:<TOKEN>@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-туннель)
Источник истины — gitverse.ru (origin этого репо): https://gitverse.ru/kpa39l/openspec-lab.git
+29 -38
View File
@@ -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/<svc>/, 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/<project>/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 через туннель
cd /opt/<project> && openspec validate --specs # зелёно в каждом
hermes config get skills.external_dirs # 7 каталогов
```
## Ключевые артефакты
- /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:<TOKEN>@gitverse.ru/kpa39l/openspec-lab.git)
## Открытые вопросы
- (нет)