Selo de estado:
Preview— o mecanismo de exposição/kill de capacidades é fail-closed e coberto por testes, mas é um controle operacional/de plataforma (não um botão self-service por workspace hoje). Atualizado em 2026-09-08. Fonte de estado: matriz de estados do produto. Limite atual do produto = Preview.
Além da verificação de conta em dia (suspensão) e do RBAC (papéis), a plataforma tem uma terceira camada: um resolvedor de capacidades que decide se uma superfície cara/sensível está exposta, limitada ou desligada — com efeito imediato em emergência.
O que é#
Uma capacidade é uma superfície nomeada que pode ser ligada/desligada de forma ortogonal ao plano e à inadimplência. Grupos:
| Grupo | Capacidades | Efeito de desligar |
|---|---|---|
| Dinheiro/consumo | consultas no console de dados, acesso ao conjunto de dados, amostragem de dados, atualização de painéis, consulta em linguagem natural, insights de IA, exportação para Excel | corta o caminho pago correspondente |
| Exposição/isolamento | api.v1 (API externa REST+OData), painel público e embed (embed + dashboard público) | derruba a exposição externa sem tocar no dado interno |
| Piloto (execução) | execução de ingestão (pipeline), execução de relatórios (geração/entrega de relatório) | nada roda/enfileira/entrega |
| Organização | org.admin (administração da org) | fecha a superfície de org (por-org) |
Como a decisão é tomada (ordem)#
- Kill global (
*) → tudo fechado. - Kill por capacidade → aquela superfície fechada.
- Config versionada (envelope
{ v, items }) → rollout %, allowlist/denylist, override por org/workspace/usuário, validade. - Default: capacidade declarada e sem kill nasce exposta; capacidade sensível sem decisão explícita nasce OFF (fail-closed).
Em cima de tudo, o desligamento de emergência é sobreposto por último — emergência sempre vence, inclusive sobre uma config custom.
Fail-closed é a regra#
- Config ilegível (JSON inválido) → a capacidade fecha (erro de configuração), nunca "abre no escuro".
- Capacidade sensível sem decisão → OFF.
- Efeito imediato, sem redeploy, quando o operador aciona a emergência.
Para que serve#
- Conter incidente: desligar a API externa ou o embed público na hora, sem derrubar o app inteiro.
- Rollout seguro: liberar uma capacidade para uma fração (canário) antes de 100%.
- Isolar exposição: matar
api.v1/painel público e embed corta o egress sem afetar quem só usa o BI interno.
Plano e permissões#
- Visão admin: o efeito das capacidades é visível para o workspace (uma superfície some/responde indisponível).
- Controle: o acionamento (kill/canário/rollout) é operacional/de plataforma — não é um toggle por workspace hoje.
Exemplo#
Durante um incidente, o operador aciona o kill de api.v1. A partir daí, toda
chamada às rotas /api/v1/** responde indisponível — mas os dashboards internos
da Comércio Aurora (fictícia) seguem no ar, porque o dado interno não foi
tocado. Resolvido o incidente, a capacidade volta a ser exposta.
Resultado esperado#
- Capacidade exposta → funciona normalmente (a verificação de conta em dia segue valendo).
- Capacidade desligada → a superfície responde indisponível de forma previsível; o restante do produto continua.
Relação com as outras verificações#
- RBAC decide o que o papel pode fazer (403 de papel).
- Verificação de conta em dia decide se a conta está em dia (402 de inadimplência).
- Capacidade / desligamento decide se a superfície está exposta (independente dos dois). São camadas ortogonais.
Segurança#
- Fail-closed em toda borda (config inválida/sensível → OFF).
- Decisão por org tem cache isolado por
orgId— a decisão de uma org nunca vaza para outra. - Kill de emergência não depende de redeploy.
Limites#
- Não é um painel self-service por workspace hoje (
Preview). - O kill de exposição (
api.v1/painel público e embed) é ortogonal à inadimplência — não substitui a verificação de assinatura nem o RBAC.
Erros comuns e diagnóstico#
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| API/OData respondendo indisponível | capacidade api.v1 desligada (incidente) | acompanhe o status; abra chamado |
| Embed/painel público fora | capacidade painel público e embed desligada | idem acima |
| Refresh/IA/export fora, mas dashboard abre | capacidade de consumo desligada (não é inadimplência) | verifique com o suporte |
| Recurso "sumiu" sem aviso de pagamento | kill de capacidade ≠ 402 de suspensão | diferencie de Suspensão |
Relacionados#
Última revisão: 2026-09-08.
Estado & evidência: resolvedor de capacidades fail-closed, coberto
por testes; controle operacional (não self-service por workspace hoje) =
Preview. Fonte: matriz de estados do produto.