# CT130 — Ligbox Spec Hub

| Item | Valor |
|------|-------|
| **IP LAN** | `10.10.10.130` |
| **SSH WAN** | `95.216.14.146:2530` |
| **Hostname** | spec-hub |
| **OS** | Debian 12 LXC |
| **Recursos** | 2 vCPU · 4 GB RAM · 40 GB |

## Papel

**Fonte de verdade Git + Obsidian + Portal** — centraliza specs, vault e código de **todas** as VMs.

| URL | Serviço |
|-----|---------|
| https://spec.ligbox.com.br | Portal hub |
| https://spec.ligbox.com.br/specs/ | Browser Spec Kit |
| https://spec.ligbox.com.br/vault/ | Browser Obsidian |
| https://git.spec.ligbox.com.br | Forgejo Git |
| https://git.spec.ligbox.com.br/ligbox | **Org Ligbox** (repos) |
| https://git.spec.ligbox.com.br/ligbox/ligbox-ops-platform | **Repo principal** |
| https://git.spec.ligbox.com.br/ligbox/ligbox-ops-platform/issues | **Issues** (sync `tasks.md`) |

## Stack local

```
/opt/ligbox-spec-hub/
├── forgejo/              # Git server
├── portal/               # nginx + Docsify
├── repos/ligbox-ops-platform/   # clone principal
├── obsidian-vault/       # vault Obsidian
└── docker-compose.yml    # forgejo + spec-portal
```

## Repos Forgejo (org `ligbox`)

| Repo | Conteúdo | Issues |
|------|----------|--------|
| [`ligbox-ops-platform`](https://git.spec.ligbox.com.br/ligbox/ligbox-ops-platform) | Monorepo — **todas** VMs | [852 issues](https://git.spec.ligbox.com.br/ligbox/ligbox-ops-platform/issues) (sync `tasks.md`) |
| [`obsidian-vault`](https://git.spec.ligbox.com.br/ligbox/obsidian-vault) | Notas, LAPTOP, anais | — |

**Navegação Forgejo:** a homepage `/?repo-search-tab=organizations` sem login mostra landing vazia.  
Usar directamente: **https://git.spec.ligbox.com.br/ligbox** ou **Explore → Repositories**.

**Sincronizar issues** (após alterar `tasks.md`):

```bash
python3 scripts/sync-tasks-to-forgejo-issues.py
```

## Git workflow (2026-07-02)

| Branch | Papel |
|--------|-------|
| **`develop`** | Trabalho diário (default) |
| **`main`** | Produção — **só via Pull Request** |

- **PR #853** — workflow activado
- **Proteção `main`:** push directo bloqueado
- **Doc:** `docs/GIT_WORKFLOW.md`
- **Pull requests:** https://git.spec.ligbox.com.br/ligbox/ligbox-ops-platform/pulls

## Utilizadores

| User | Senha | Admin | Org `ligbox` |
|------|-------|-------|----------------|
| roger | 805353 | ✅ | ✅ Owners |
| ligboxadmin | 805353 | ✅ | ✅ Owners |
| mini | 805353 | — | ✅ Owners |

**Importante:** utilizadores têm de estar na org `ligbox` (team Owners) para ver repos no dashboard Forgejo.  
Script: `scripts/setup-forgejo-org-access.sh`

**Homepage Forgejo:** `LANDING_PAGE = /ligbox/ligbox-ops-platform` + templates custom em `/opt/ligbox-spec-hub/forgejo/custom/templates/`:

| Rota global | Redireciona para |
|-------------|------------------|
| `/` | repo principal |
| `/issues` | `.../ligbox-ops-platform/issues` (852) |
| `/milestones` | `.../ligbox-ops-platform/milestones` (47 specs) |

**Milestones:** `python3 scripts/sync-forgejo-milestones.py` (após novas specs).

## Spec

- **031** — spec-hub-portal

## Regra anti-drift

```bash
# VM122/112/123 — NUNCA rsync solto
git pull https://git.spec.ligbox.com.br/ligbox/ligbox-ops-platform.git
# Ver deploy/manifest.yaml para tag pinada
```

## Sync pendente (Roger)

| VM | Acção |
|----|-------|
| VM112 | Pull deploy/vm112-* + push estado actual |
| VM123 | Pull deploy/vm123-* + console template |
| VM104 | Documentar integração (sem código Ligbox) |
| VM122 | `git remote add hub git.spec...` + pull |
