Começar
Aparência

Vale na hora e fica lembrada neste navegador.

Visão

03 · Conceitos e vocabulário

As palavras que usamos com sentido preciso. Quando um documento as usa, é este o sentido.

Stack, aplicação, módulo

Na Hibex, stack, produto e repositório são a mesma coisa: um repositório Git que entrega um produto, com uma ou mais aplicações.

Os exemplos desta documentação usam um produto fictício, o atendimento: uma stack em que clientes compram créditos e abrem chamados, com uma aplicação de gestão para os colaboradores, uma aplicação para os clientes e um site público.

Uma stack é um repositório e um produto. Ela tem uma ou mais aplicações, cada uma com imagem Docker, endereço, família de cor e, se tiver usuários, um client no Keycloak; as aplicações são montadas de módulos, que podem ser compartilhados. A stack tem zero ou mais bancos e especifica capabilities. No Keycloak, o client pertence a um realm, declara permissões e as agrupa em perfis. stack = produto = repositórioaplicação Aimagem Dockerendereço próprioclient no Keycloakfamília de coraplicação Bimagem Dockerendereço próprioclient no Keycloakfamília de cormódulo coredomínio compartilhadomódulo Amódulo Bmódulo = unidade de buildbancozero ou maiscapabilitiesuma spec cadarealm · por populaçãoclientum por aplicaçãopermissõeso que o código conferechamado:lerchamado:atendercatalogo:editarcliente:lerperfiso que se dá às pessoasperfil:gestorperfil:consultaagrupa
TermoDefiniçãoExemplo
Stack (= produto = repositório)Definição: Um repositório Git que entrega um produto. Nome no GitHub: <plataforma>-stack-<produto>Exemplo: enterprise-stack-atendimento
PlataformaDefinição: O agrupamento comercial de stacks (define o domínio <plataforma>.hibex.net das aplicações de colaboradores)Exemplo: Enterprise
AplicaçãoDefinição: Unidade implantável: uma imagem Docker, um serviço Kamal, um endereço público, uma família de cor e, se tiver usuários, um client no KeycloakExemplo: atendimento-gestao, atendimento-cliente, atendimento-site
MóduloDefinição: Unidade de build. Uma aplicação é montada de um ou mais módulos; um módulo pode servir várias aplicações (ex.: o domínio compartilhado)Exemplo: atendimento-core, atendimento-gestao
Site estáticoDefinição: Aplicação sem backend (HTML + CSS em nginx), em geral públicaExemplo:
Aplicação públicaDefinição: Aplicação sem login: declarada como pública na ficha e no documento de acesso, com o que expõeExemplo: atendimento-site
Plataforma HibexDefinição: A infraestrutura compartilhada por todas as stacks (toolbox) e o design system (enterprise-stack-design)Exemplo: —

Decisão e especificação

TermoDefinição
ORGDefinição: Organization Architecture Decision Record: decisão da organização, que vale para toda stack. Nasce aqui, numerada ORG-NNNN, e chega a cada stack como cópia em docs/decisoes/organizacao/, nunca editada à mão
ADRDefinição: Architecture Decision Record: decisão do projeto, com contexto, alternativas e consequências. Numerada ADR-NNNN em cada stack, imutável depois de aceita, e nunca contradiz uma ORG
ADR pré-escritaDefinição: Uma das primeiras ADRs da stack, já escrita no modelo com a escolha em lacuna, para cumprir uma ORG que deixa algo para a stack decidir
LacunaDefinição: Um ponto propositalmente vazio no modelo zerado, marcado {{LACUNA:<id>}}, que a stack preenche ao nascer
Ficha da stackDefinição: O documento onde as lacunas de tecnologia são preenchidas, num só lugar (docs/stack.md)
PortãoDefinição: Condição que precisa ser verdadeira para passar de uma fase à seguinte (ex.: "nenhuma lacuna aberta")
CapabilityDefinição: Uma área de comportamento do produto, com spec própria em openspec/specs/<capability>/
SpecDefinição: A verdade viva do que uma capability faz: requisitos (Requirement) com cenários (Scenario, WHEN/THEN)
ChangeDefinição: Uma unidade de trabalho do OpenSpec: proposal, design, specs delta e tasks, em openspec/changes/<nome>/
SoluçãoDefinição: Documento que detalha um pedaço da implementação que não cabe na arquitetura nem numa ADR (docs/solucoes/)
GuiaDefinição: Passo a passo operacional (docs/guias/)

Testes

TermoDefinição
Teste de unidadeDefinição: Uma regra isolada, sem rede, sem container, em milissegundos
Teste de integraçãoDefinição: Uma parte real do sistema contra dependências reais em container (banco, Keycloak)
Teste de rotaDefinição: Um teste de integração da camada web: a requisição atravessa, dentro do processo, o roteamento, a segurança e a resposta da aplicação, com usuário simulado; prova status, permissão e redirecionamento
Teste fim a fim (E2E)Definição: Um navegador de verdade usando as aplicações no ar, como um usuário
AgrupamentoDefinição: 1º nível do E2E. Reúne cenários de uma área (em geral, uma capability)
CenárioDefinição: 2º nível. Uma situação dentro do agrupamento (em geral, um requisito da spec)
CasoDefinição: 3º nível. Uma verificação concreta, com passos e resultado esperado (em geral, um Scenario da spec)
SetupDefinição: Script que cria as condições de que um nível precisa. Roda uma vez por corrida, e só se algum caso abaixo dele foi selecionado
CorridaDefinição: Uma execução do E2E, com uma seleção (tudo, um agrupamento, um cenário, um caso)
RegressãoDefinição: A corrida de tudo, a partir do ambiente zerado, no fim de uma change
CapturaDefinição: Print de tela tirado num ponto de um caso, nas variantes (desktop/celular × claro/escuro)
AcervoDefinição: O conjunto versionado de capturas (opcional por stack)

O modelo de E2E está em 11 · Testes fim a fim hierárquicos.

Identidade e acesso

TermoDefinição
RealmDefinição: Unidade de política de autenticação no Keycloak. Separado por população (colaboradores × clientes), nunca por aplicação
ClientDefinição: O registro de uma aplicação num realm
PermissãoDefinição: Um client role fino, no formato <recurso>:<ação> (ex.: chamado:atender). É o que o código confere
PerfilDefinição: Um client role composto (perfil:<nome>) que reúne permissões. É o que se atribui às pessoas — via grupo
GrupoDefinição: Onde os perfis são atribuídos. Uma pessoa recebe acesso entrando num grupo, nunca por papel direto no usuário
Perfil padrãoDefinição: O perfil que todo usuário autenticado do realm recebe (pelos default roles), quando toda a população tem o mesmo acesso
Conta de serviçoDefinição: O usuário técnico de um client confidencial, usado quando outra aplicação precisa chamar a API desta

O modelo de acesso está em 12 · Identidade e acesso.

Papéis de pessoas

PapelO que faz
MantenedorO que faz: Decide, revisa e publica: aceita ADRs, aprova changes, faz commit, push, deploy, guarda segredos, envia pedidos ao design system
AgenteO que faz: Agente de IA (Claude Code ou outro que leia AGENTS.md): explora, propõe, implementa, testa, documenta, entrega instruções
UsuárioO que faz: Quem usa uma aplicação, num perfil
OperadorO que faz: Quem administra o Keycloak e a VPS (hoje, o próprio mantenedor)

Convenções de nome

O quêConvençãoExemplo
RepositórioConvenção: <plataforma>-stack-<produto>Exemplo: enterprise-stack-atendimento
Aplicação / móduloConvenção: <produto>-<papel>Exemplo: atendimento-gestao
Serviço Kamal, service.name, client KeycloakConvenção: o nome da aplicaçãoExemplo: atendimento-gestao
Endereço — usuário finalConvenção: <app>.hibex.appExemplo: atendimento.hibex.app
Endereço — colaboradoresConvenção: <app>.<plataforma>.hibex.netExemplo: gestao-atendimento.enterprise.hibex.net
Endereço — exceções comerciaisConvenção: <nome>.hibex.co (com ADR)Exemplo: atendimento.hibex.co
Prefixo de segredo no BitwardenConvenção: sigla curta da aplicação, em maiúsculasExemplo: ATDGESTAO_
Grupo no KeycloakConvenção: <produto>-<perfil-no-plural>Exemplo: atendimento-gestores
PermissãoConvenção: <recurso>:<ação>Exemplo: carteira:conceder
PerfilConvenção: perfil:<nome>Exemplo: perfil:gestor
ORGConvenção: docs/decisoes/organizacao/ORG-NNNN-slug.md (só aqui)Exemplo: ORG-0022-backup-e-restauracao.md
ADRConvenção: docs/decisoes/ADR-NNNN-slug-no-imperativo.mdExemplo: ADR-0012-…
ChangeConvenção: kebab-case descritivoExemplo: creditos-com-validade