Começar
Aparência

Vale na hora e fica lembrada neste navegador.

Visão

01 · Visão geral

Uma página para entender o todo. Os outros documentos aprofundam cada parte.

A arquitetura em um mapa

Uma stack ao nascer, como um tabuleiro: doze peças já vêm no lugar (o que é fixo), sete encaixes vêm vazios para a stack preencher (as lacunas) e duas peças são opcionais. fixovem decidido,igual em toda stackLinux + DockerCompose no devKamalBitwarden SMKeycloakobservabilidadebackup testadodesign systemOpenSpec + TDDADRs, pt-BRE2E hierárquicoAGENTS.mdlacunaa stack decideao nascerlinguagem e runtimeframework webbanco e migrationsbuild e módulostestes de unidadeaplicações e domíniosrealms, clients, perfisopcionala stack escolheacervo de capturaslandings estáticasnenhum código antes de o último encaixe ser preenchido

Três camadas de decisão

Toda decisão de uma stack mora numa de três camadas. A camada diz quem decide e quando.

Três camadas empilhadas: embaixo a plataforma Hibex (toolbox e design system), no meio a arquitetura (regras, ORGs, modelo zerado com lacunas e modelo de E2E) e em cima as stacks, cada uma com ficha, ADRs, specs e código. 3 · cada stackum produto, um repositóriostack-AfichaADRs própriasspecs e changescódigostack-Bstack-Cpreenche as lacunas2 · a arquiteturaeste repositórioregrasinvioláveisORGsdecididas antesmodelo zeradocom lacunasmodelo deE2Ehierárquico1 · a plataformaHibex, para todostoolboxKeycloak · Grafana · VPS · domíniosdesign systembiblioteca · marca · verificadorsustenta
CamadaExemplosQuem mudaComo muda
1. PlataformaExemplos: o Keycloak em id.hibex.co, o Grafana, a política <app>.hibex.appQuem muda: mantenedor, no toolbox / enterprise-stack-designComo muda: ADR lá; as stacks consomem
2. ArquiteturaExemplos: "toda versão é fixa", "E2E em agrupamento → cenário → caso", "TDD"Quem muda: mantenedor, aquiComo muda: nova versão da arquitetura; as stacks adotam por change
3. StackExemplos: "Java 21 + Spring Boot 4.1", "PostgreSQL 16", "duas aplicações"Quem muda: mantenedor + agente, na stackComo muda: ADR na stack; comportamento por change do OpenSpec

Regra de precedência: a camada de cima vence. Se uma stack precisa de algo que a arquitetura proíbe, ela não abre exceção local — leva o pedido para cá (mesmo mecanismo dos pedidos ao design system).

O que é fixo e o que é lacuna

AssuntoFixo (vem decidido)Lacuna (a stack decide ao nascer)
PlataformaFixo (vem decidido): Linux; scripts em bashLacuna (a stack decide ao nascer): —
VersõesFixo (vem decidido): toda ferramenta, biblioteca e imagem com versão exata; nunca latestLacuna (a stack decide ao nascer): os números de versão
Linguagem e frameworkFixo (vem decidido): —Lacuna (a stack decide ao nascer): linguagem, runtime, framework web, abordagem de UI
PersistênciaFixo (vem decidido): armazenamentos descartáveis em container no dev e nos testes; evolução dos dados versionada; um dono de cada formato; sem banco padrãoLacuna (a stack decide ao nascer): quais armazenamentos (relacional, MongoDB, fila, arquivos…), a ferramenta de evolução, o dono
BuildFixo (vem decidido): um comando constrói e testa tudo; wrapper/lockfile versionadoLacuna (a stack decide ao nascer): ferramenta de build, estrutura de módulos
Testes de unidade e integraçãoFixo (vem decidido): TDD; dependências reais em container; sem banco em memória que finge ser outroLacuna (a stack decide ao nascer): frameworks e bibliotecas de teste
Testes fim a fimFixo (vem decidido): Playwright + Node; hierarquia agrupamento → cenário → caso; setups em cascata; capturas ligadas aos casosLacuna (a stack decide ao nascer): quais agrupamentos existem (nasce com "identidade")
ContainersFixo (vem decidido): Docker na entrega (uma imagem por aplicação); Compose no desenvolvimentoLacuna (a stack decide ao nascer): imagens base e versão
ImplantaçãoFixo (vem decidido): Kamal; imagens no ghcr.io; healthcheck em /upLacuna (a stack decide ao nascer): hosts, domínios, nomes de serviço
SegredosFixo (vem decidido): Bitwarden Secrets Manager; só referências no repositórioLacuna (a stack decide ao nascer): prefixo e projeto no Bitwarden
IdentidadeFixo (vem decidido): aplicação com área restrita: Keycloak; OIDC Authorization Code + PKCE; realm por população; acesso por grupo, nunca papel direto no usuário; permissões e perfis documentadosLacuna (a stack decide ao nascer): quais realms, clients, permissões, perfis
ObservabilidadeFixo (vem decidido): log JSON no stdout, métricas Prometheus em porta interna, traces OTLP, /upLacuna (a stack decide ao nascer): bibliotecas que implementam o contrato
BackupFixo (vem decidido): diário, retenção 7d/4s/6m, script de restauração testadoLacuna (a stack decide ao nascer): ferramenta (depende do banco)
InterfaceFixo (vem decidido): design system da Hibex, cópia em vendor/hibex/, verificador no CILacuna (a stack decide ao nascer): família de cor de cada aplicação
MudançaFixo (vem decidido): OpenSpec (propose → revisão → apply → archive); ADR para decisão técnicaLacuna (a stack decide ao nascer): —
Agentes de IAFixo (vem decidido): AGENTS.md é a fonte; CLAUDE.md só o importa; Git e infraestrutura só pelo humanoLacuna (a stack decide ao nascer): —
DocumentaçãoFixo (vem decidido): pt-BR; diagramas (rabisco recomendado, Mermaid permitido); ARCHITECTURE.md, decisoes/, solucoes/, guias/, acesso/Lacuna (a stack decide ao nascer): o conteúdo
Capturas de telaFixo (vem decidido): o mecanismo (ligado ao E2E)Lacuna (a stack decide ao nascer): se a stack mantém um acervo versionado

Como as peças se ligam

O diagrama abaixo é o "fio" de uma funcionalidade de ponta a ponta. Cada caixa é um documento ou ferramenta deste modelo.

O fio de uma funcionalidade: o mantenedor pede; o agente propõe a change (e uma ADR, se houver decisão técnica); o mantenedor revisa; o agente aplica em TDD, roda os casos E2E da change e a regressão completa, entrega com o ambiente no ar e arquiva; o mantenedor faz o commit e o deploy. pedido/opsx:proposeproposal · design · specs · tasksrevisão/opsx:applyADR (proposta)se houver decisão técnicateste falhapassarefatoracada tarefa, em TDDE2E da changesó os casos delaregressão completaE2E + build + verificadorentregaambiente no ar, resumo por tela/opsx:archivespecs atualizadascommit e deployé do mantenedor: pedir, revisar e publicar; o agente faz o resto

A forma de uma stack implantada

Toda stack, seja qual for a tecnologia, fica com esta forma em produção. Muda o conteúdo das caixas, não o desenho.

Uma stack implantada: no VPS de aplicações, o kamal-proxy recebe os usuários e entrega às aplicações sem estado e ao site estático; banco e backup são accessories. As aplicações autenticam no Keycloak, mandam logs e traces ao Alloy (que entrega ao Loki e ao Tempo) e são lidas pelo Prometheus; tudo chega ao Grafana. Os segredos vêm do Bitwarden no deploy. VPS de aplicações · Kamaltoolboxusuárioskamal-proxyTLS por hostsiteopcionalaplicação Asem estadoaplicação Bsem estadobancoaccessorybackupdiário · accessoryKeycloakid.hibex.coAlloyLoki · Tempologs e tracesPrometheusmétricasGrafanaOIDClogs · traceslê as métricasBitwardensegredos, nodeploy

De onde vêm as regras

As regras desta arquitetura valem por si: nenhuma depende de conhecer outra stack. Como histórico, elas foram concebidas a partir do estudo de uma primeira stack de produto da Hibex, construída antes deste modelo, enquanto as regras eram descobertas; esse estudo está em 19 · Aprendizados da stack-projetos.