# D — Decisões & gates transversais

> Decisões de arquitetura/produto e pré-condições (gates) que cortam todas as fases.
> Ref. PRD: §6 (pré-condições P-1…P-8) + §11 (Decisões).

---

## D-1 — Isolamento de dados no dev ✅ (GATE de B3 — RESOLVIDO)

- **Status:** ✅ decidido em 2026-06-19 · **Bloqueia:** B3 (desbloqueado), B2-4 (parcialmente desbloqueado).
- **Decisão:** **(a) + (b)** — tenant sandbox (`block = 22`) + escrita desligada por padrão.
  - Todo Lab de escrita chama `SandboxGuard::verificar($blockId)` como primeira instrução; lança `\RuntimeException` se `$blockId !== 22`.
  - Flag `LABS_ESCRITA_ATIVOS` no controller (default vazio); cada Lab é habilitado individualmente após TddTest verde.
  - Block 22 é a empresa/tenant de teste no `dev_gx_goldie`. Dev deve logar com usuário do block 22 para testar escrita.
- **Critérios de aceite:**
  - [x] Decisão registrada: opções (a) + (b), block sandbox = 22.
  - [x] `SandboxGuard::SANDBOX_BLOCK_ID = 22` implementado em Task 1 do plano B3.
  - [x] Flag de escrita por Lab implementada em Task 8 do plano B3 (default desligado).

## D-2 — Front: derivar do `maps.js` (não 100%) ✅

- **Status:** ✅ decidido. Front **próprio do `Central2`**, usando `maps.js` como **base/referência**: porta o núcleo de mapa/markers/rota; **reescreve** socket+estado coeso/desacoplado (contrato explícito, store no lugar do textarea `.rotasGeradas`, sem dispatch por `typeof fn`, i18n via `show()`, rooms `_v2`). **Não** editar o `maps.js` compartilhado. → ver [F-front](F-front.md).

## D-3 — Nome do Sinal = `Central2` ✅

- **Status:** ✅ decidido. Diretório/namespace `Central2` (`GalaxiaMissoes\Logistica\sinais\Central2`).

---

## Gates de pré-condição (PRD §6) — obrigatórios **antes do cutover (B4)**

| Gate | O que exige | Onde é executado |
|------|-------------|------------------|
| **P-1** | Fechar/commitar/verificar os P0/P1 da V1 (`PRD/central-pontos-abertos-ux`) | Fora da V2 (na V1) |
| **P-2** | Estabilizar/commitar o swap de canal Scaledrone | Fora da V2 (infra) |
| **P-3** | Congelar contrato de socket (schema versionado + TddTest) | [B4-1](B4-cutover.md) |
| **P-4** | Testes de caracterização das ~30 ações da V1 | [B4-2](B4-cutover.md) |
| **P-5** | Inventariar/confirmar+deletar código morto da V1 | [B4-3](B4-cutover.md) |
| **P-6** | Shims de compatibilidade das URLs hardcoded | [B4-4](B4-cutover.md) |
| **P-7** | Disciplina de branch (não fazer deploy de estado meio-migrado) | Processo |
| **P-8** | Estratégia V1→V2 Sonda + acoplamento cross-sinal | Decidir antes do B3 |

> Os gates P-3/P-4/P-6 **não bloqueiam** começar a V2 (B1–B3) — só o **cutover (B4)**. P-1/P-2 são da V1.
