Fase 53: Arah Core — Registro, Identidade e Releases
Duração: 5 semanas (35 dias úteis)
Prioridade: 🔴 P0
Onda: S0 — Fundação técnica
Depende de: FASE52
Estimativa Total: 140 horas
Status: ✅ Completo (2026-07-01)
Spec SDD: docs/specs/phases/FASE53-arah-core.spec.yaml
Handoff: Anexo Operação O1–O7
Objetivo
Implementar o Arah Core mínimo: hub que coordena instâncias sem possuir dados de território — registro, identidade federada, catálogo de releases e agregação de telemetria/ledger.
Responsabilidades do Core
- Registro e descoberta de instâncias e territórios (diretório)
- Identidade federada (
globalUserId) — login entre territórios - Catálogo de releases e canais (stable/beta)
- Agregação de health/telemetria das instâncias
- Consolidação do ledger global de splits e payouts
Entidades (control plane)
| Entidade | Escopo | Campos principais |
|---|---|---|
Instance |
Core + instância | id, mode, baseUrl, publicKey, version, territoryIds[], status |
Release |
Core | id, version, channel, schemaVersion, publishedAt |
HealthCheck |
Core + instância | instanceId, services{}, uptime, reportedAt |
Endpoints (mínimo)
POST /core/instances — provisionar/registrar instância
GET /core/instances — listar instâncias (telemetria agregada)
POST /core/instances/{id}/heartbeat — telemetria
GET /core/releases?channel=stable — releases disponíveis
POST /core/directory/territories — publicar território no diretório
GET /federation/identity/{globalUserId} — resolver identidade (base)
Autenticação: token de instância (X-Arah-Instance-Token no heartbeat) + SystemAdmin para operações admin.
Critérios de aceite
- Instância registra-se e recebe id + par de chaves RSA (private key só na resposta de registro)
- Heartbeat a cada 30s; status visível no Core (listagem + telemetria via GET /core/instances)
- Release publicada via
POST /core/releases(tag/versão); instâncias consultam canal stable - Território publicado no diretório global (
POST /core/directory/territories) - Identidade federada resolvível (
GET /federation/identity/{globalUserId}) - Token de instância emitido no registro; heartbeat autenticado sem JWT admin
- Cache local (
ICoreAvailabilityCache) para releases/registro — base para modo autônomo (FASE54)