mirror of
https://gitverse.ru/kpa39l/openspec-lab.git
synced 2026-09-29 09:15:01 +00:00
docs: лаба закрыта как рабочий каталог — OpenSpec разнесён по проектам
This commit is contained in:
@@ -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
|
||||
@@ -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)
|
||||
|
||||
## Открытые вопросы
|
||||
- (нет)
|
||||
Reference in New Issue
Block a user