Começar
Aparência

Vale na hora e fica lembrada neste navegador.

Origem e rumo

19 · Aprendizados da stack-projetos

A stack-projetos é a referência de estudo deste repositório: uma stack construída antes do modelo, enquanto as regras eram descobertas. Ela não segue o modelo nem faz parte de nenhum fluxo daqui. Começou em 2026-09-02. Em seis semanas: 53 ADRs, 74 changes arquivadas, 26 capabilities, três aplicações. Este documento liga cada aprendizado à regra do modelo que nasceu dele.

Visão geral

Os aprendizados da stack-projetos. Funcionou e vira regra fixa: ADRs com status; OpenSpec, uma change por vez; a IA desenvolve e o humano publica, com hook; identidade como código; Keycloak local descartável com realms versionados; contrato de observabilidade; backup com restauração testada; design system copiado com verificador; Keycloak real nos testes; entrega com o ambiente no ar. Doeu e o modelo corrige: seções do roteiro dependentes; roteiro em prosa e automatizado; design system depois das telas; versões flutuantes; ARCHITECTURE.md inchado e datado; um papel só para a gestão; acervo de capturas inteiro a cada rodada; renomear o produto no meio; regras no CLAUDE.md. funcionou: vira regraADRs com statusOpenSpec, uma change por vezIA desenvolve, humano publicaidentidade como códigoKeycloak local, realms versionadoscontrato de observabilidadebackup com restauração testadadesign system copiado + verificadorKeycloak real nos testesentrega com o ambiente no ardoeu: o modelo corrigeseções do roteiro dependentesroteiro em prosa e automatizadodesign system depois das telasversões flutuantes na CIARCHITECTURE.md inchado e datadoum papel só para a gestãoacervo de capturas inteirorenomear o produto no meioregras no CLAUDE.md

Em resumo: o que muda

A stack-projetos foi construída enquanto as regras eram descobertas. O modelo traz as regras desde o primeiro dia e corrige o que ela aprendeu tarde:

Na stack-projetosNo modelo
Stack escolhida na conversa, registrada em ADR depoisNo modelo: Ficha da stack preenchida antes de qualquer código; portão explícito
ADRs de fundação escritas uma a umaNo modelo: ORGs prontas, copiadas para a stack; o que depende da stack vem em ADRs pré-escritas, com lacunas
CLAUDE.md com as regrasNo modelo: AGENTS.md com as regras; CLAUDE.md só aponta para ele
Roteiro ao vivo em seções que dependem das anterioresNo modelo: E2E hierárquico: qualquer caso roda sozinho, com os setups dos níveis acima
Roteiro manual em prosa + roteiro automatizado (dois artefatos que se desencontram)No modelo: Um artefato: o caso E2E narra os próprios passos e gera o roteiro legível
Capturas regeradas em massa, centenas de MB por rodadaNo modelo: Capturas opcionais, ligadas aos casos, e o acervo só recebe as telas afetadas
@latest na CI, ubuntu-latest, imagens com tag flutuanteNo modelo: Nenhuma versão flutuante; a CI confere
Autorização por um papel único (gestao:acesso)No modelo: Permissões finas + perfis documentados por aplicação

A stack estudada, lida pelo modelo

Um exercício de estudo: onde cada coisa da stack-projetos ficaria se ela tivesse nascido do modelo. Não é plano de migração; serve para testar se o modelo tem lugar para tudo.

Onde cada coisa da stack-projetos ficaria no modelo: as regras do CLAUDE.md vão para o AGENTS.md; docs/solutions para docs/solucoes; o método para docs/produto; o roteiro ao vivo de 27 seções para o E2E hierárquico; o roteiro manual passa a ser gerado dos casos; o README do eng/auth vira docs/acesso por aplicação; as ADRs de stack, banco e testes viram a ficha e as ADRs pré-escritas; o acervo de 1936 capturas fica opcional, só com as telas afetadas. na stack-projetos, hojeno modeloCLAUDE.md com as regrasAGENTS.md (o CLAUDE.md aponta)docs/solutions/docs/solucoes/docs/metodo-de-projetos.mddocs/produto/eng/roteiro-ao-vivo/, 27 seçõese2e/groups/, hierárquicoroteiro manual de testes, à mãogerado dos casos E2Eeng/auth/README.mddocs/acesso/<app>.md, permissões e perfisADRs 0006, 0009 e 0010docs/stack.md + ADRs pré-escritasdocs/screenshots, 1936 capturasopcional, só as telas afetadas

Números da stack-projetos em 2026-10-17, para dar escala:

ItemQuantidade
AplicaçõesQuantidade: 3 (gestão, cliente, landings de adesão)
Módulos de buildQuantidade: 3 (core, gestao, cliente)
ADRsQuantidade: 53
Capabilities (specs vivas)Quantidade: 26
Changes arquivadasQuantidade: 74
Seções do roteiro ao vivoQuantidade: 27
MigrationsQuantidade: 30

As seções do roteiro ao vivo, como agrupamentos

O mesmo exercício para o E2E: como as seções do roteiro ao vivo se organizariam em agrupamentos.

Seções do roteiro ao vivoAgrupamentoCenários (exemplos)
01 identidade, 01b primeiro acessoAgrupamento: identidadeCenários (exemplos): login por perfil, acesso negado, primeiro acesso, logout
02 aparência, 03 preferênciasAgrupamento: aparencia, preferenciasCenários (exemplos): tema, aviso de ambiente; fuso, nome
04 disponibilidadeAgrupamento: disponibilidadeCenários (exemplos): publicar, remover, sobreposição
05 cotações, 15 históricoAgrupamento: cotacoesCenários (exemplos): cadastrar, evolução (setup com atalho de volume)
06 fluxosAgrupamento: fluxosCenários (exemplos): criar, versionar, publicar, edição concorrente
07 clientes, 08 carteira, 18 extratoAgrupamento: clientes, carteiraCenários (exemplos): diretório; concessão, extrato, extrato global
09 solicitação, 10 agendamento, 20 replanejamentoAgrupamento: projeto, agendamentoCenários (exemplos): criar, descartar; agendar, confirmar, replanejar (atalho de tempo)
11 homologação, 12 execução, 13 acompanhamentoAgrupamento: homologacao, execucao, acompanhamentoCenários (exemplos): aceitar, recusar, decurso; iniciar, concluir, encerrar
14 impedimento, 14b horas extrasAgrupamento: impedimentos, horas-extrasCenários (exemplos): abrir, analisar, resolver, trava; registrar, anular
16, 17, 19 dashboardsAgrupamento: painel-da-gestao, painel-do-cliente, dashboard-do-projetoCenários (exemplos): cada card com o setup que o alimenta
21 organizações, 22 prévia de links, muralAgrupamento: organizacoes, mural, previa-de-linksCenários (exemplos): —
01c, 90 capturasAgrupamento: —Cenários (exemplos): viram casos "vazio" e "muitos itens" nos agrupamentos acima

O que funcionou e virou regra

AprendizadoEvidência na stack-projetosRegra no modelo
ADRs curtas, numeradas, com status e "alternativas consideradas" dão o porquê a qualquer sessão futuraEvidência na stack-projetos: 53 ADRs; revisões registradas no cabeçalhoRegra no modelo: ORG-0001
"Toda ADR do agente nasce proposta" mantém o mantenedor no controle sem travar o trabalhoEvidência na stack-projetos: ADR-0001 ponto 3Regra no modelo: ORG-0001
Uma change por vez, revisada antes do apply, dá ritmo e rastreabilidadeEvidência na stack-projetos: 74 changes arquivadas, specs vivas por capabilityRegra no modelo: ORG-0008
Hook que impõe a regra de Git funciona melhor que a regra escritaEvidência na stack-projetos: block-git-writes.py + testeRegra no modelo: hooks no modelo; candidato para infraestrutura
Identidade declarada no repositório, com script idempotenteEvidência na stack-projetos: eng/auth/provisionar.sh validado contra Keycloak localRegra no modelo: ORG-0020
Keycloak local descartável, importando realms versionados, com usuários de exemplo: login imediato, sem scriptEvidência na stack-projetos: eng/auth/dev-realms/Regra no modelo: ORG-0020 + um usuário por perfil
Credenciais de IdP externo fora do export versionadoEvidência na stack-projetos: ADR-0044Regra no modelo: regra de segredos + ORG-0020
Contrato de observabilidade (stdout JSON, porta interna, OTLP, /up) desacopla app e pilhaEvidência na stack-projetos: ADR-0012Regra no modelo: ORG-0021
Restauração que recria o banco (dump sem --clean falha; com --clean deixa banco misto)Evidência na stack-projetos: ADR-0047, validado localmenteRegra no modelo: ORG-0022
Imagem de backup na mesma versão maior do servidorEvidência na stack-projetos: ADR-0047Regra no modelo: ORG-0022
Design system como cópia versionada, com verificador na CI e hookEvidência na stack-projetos: ADR-0049Regra no modelo: ORG-0023
Pedidos ao design system num pacote no formato de chegadaEvidência na stack-projetos: ADR-0052Regra no modelo: rotina de pedidos
Aviso de ambiente ligado pelo ambiente da implantação, nunca nas capturasEvidência na stack-projetos: ADR-0053Regra no modelo: ORG-0023
Testes com Keycloak real em container provam o fio OIDC que nenhum mock provaEvidência na stack-projetos: ADR-0013Regra no modelo: ORG-0015
Instante em UTC, fuso pessoal como lente; data civil só quando é civilEvidência na stack-projetos: ADR-0016, ADR-0036Regra no modelo: ORG-0024
O mantenedor valida olhando o sistema no ar, tela a telaEvidência na stack-projetos: memória "entrega com ambiente no ar"Regra no modelo: protocolo de entrega
Perguntas de escopo em lista numerada com opções e recomendaçãoEvidência na stack-projetos: memória de feedbackRegra no modelo: conversa com o mantenedor
Diagramas Mermaid em todo documento grandeEvidência na stack-projetos: ADR-0011Regra no modelo: ORG-0005
Domínios por público isolam sessões por construçãoEvidência na stack-projetos: ADR-0046Regra no modelo: ORG-0017
Gráficos e mapa de estados: regra compartilhada no módulo comum, apresentação na aplicaçãoEvidência na stack-projetos: ADR-0037, ADR-0050Regra no modelo: orientação de estrutura (não é ORG)

O que doeu e como o modelo corrige

Roteiro ao vivo em seções dependentes

  • O que aconteceu: o roteiro cresceu para 27 seções; cada uma assume o estado da anterior. Para ajustar a seção 10 era preciso rodar de 1 a 9. Um erro numa seção parava tudo. O roteiro era "demonstração, não garantia", então não pegava regressão.
  • Correção: E2E hierárquico, com setups em cascata e casos independentes (11).

Duas fontes para o mesmo roteiro

  • O que aconteceu: roteiro-manual-de-testes.md (prosa) e eng/roteiro-ao-vivo/ (código) descreviam a mesma coisa e precisavam ser atualizados juntos.
  • Correção: o caso E2E narra os passos; o roteiro legível é gerado (eng/e2e.sh --roteiro).

Design system adotado depois das telas

  • O que aconteceu: a fundação visual veio com Bootstrap e tokens copiados de outro site; depois veio o design system próprio, e a adoção levou 17 changes, mais refinos de telas que nenhuma etapa tocou.
  • Correção: o design system entra na Fase 2, antes de qualquer tela de produto.

Versões flutuantes

  • O que aconteceu: a CI chama npx @fission-ai/openspec@latest validate … || true (versão flutuante e falha ignorada); o runner é ubuntu-latest; imagens como postgres:16 e eclipse-temurin:21-jre sem patch; o guia do OpenSpec sugere fixar a versão como "opcional".
  • Correção: ORG-0010 + eng/pinned-versions.sh na CI; openspec validate --strict quebrando o build.

ARCHITECTURE.md inchado e com parágrafos datados

  • O que aconteceu: a seção de domínio chegou a quase 300 linhas, com o detalhe de cada capability e um parágrafo "Estado em 2026-09-12 (desatualizado…)".
  • Correção: um parágrafo e um link por capability; detalhe em docs/solucoes/ e nas specs; nada datado (08).

Um papel único para a aplicação de gestão

  • O que aconteceu: o acesso é gestao:acesso, tudo ou nada. Um perfil novo (ex.: "financeiro só vê carteiras") exigiria mexer no código.
  • Correção: permissões finas + perfis compostos desde a fundação; documento de acesso por aplicação (12).

Acervo de capturas regerado inteiro

  • O que aconteceu: cada rodada trocava o acervo inteiro (1936 PNGs, 415 MB na rodada de 2026-10-10), todos diferentes em bytes por causa de datas e dados, mesmo sem mudança de tela. Foi preciso ir para o Git LFS e depois restringir às telas afetadas.
  • Correção: acervo opcional (ORG-0025); capturas ligadas aos casos; --acervo=<telas> só com as telas que a change muda.

Renomear o produto no meio do caminho

  • O que aconteceu: "orçamentos" virou "projetos" (ADR-0032) e o app do cliente foi renomeado (ADR-0041): repositório, módulos, pacotes, realms de dev, documentação, pasta local e memória do agente.
  • Correção: a Fase 1 começa por docs/produto/visao.md e pelos nomes das aplicações, antes de qualquer pasta de código.

Regras no CLAUDE.md

  • O que aconteceu: as regras moram no CLAUDE.md, o que as prende a uma ferramenta.
  • Correção: AGENTS.md como fonte; CLAUDE.md aponta (17).

Fundação em ordem descoberta

  • O que aconteceu: identidade, observabilidade, aparência, roteiro ao vivo e implantação chegaram em momentos diferentes; algumas pendências de infraestrutura (realm de produção, job_name no Prometheus, alias de rede no Kamal) só apareceram perto do deploy.
  • Correção: seis changes de fundação fixas e o checklist do portão 3 (04).

Nomes de pasta misturados

  • O que aconteceu: docs/decisoes/ e docs/guias/ em português, docs/solutions/ em inglês.
  • Correção: docs/solucoes/ no modelo; pastas de documentação em pt-BR, pastas de código e ferramenta em inglês (eng/, deploy/, e2e/, vendor/).

De onde veio cada ORG

As ORGs de 07 nasceram, quase todas, de ADRs e práticas da stack-projetos (os números de ADR abaixo são os de lá).

ORGOrigem na stack-projetos
ORG-0001 — Registrar decisões em dois níveisOrigem na stack-projetos: ADR-0001, acrescida dos dois níveis (novo)
ORG-0002 — Uma ADR nunca contradiz uma ORGOrigem na stack-projetos: novo: a regra "a camada de cima vence", aplicada às decisões
ORG-0003 — Idioma e terminologiaOrigem na stack-projetos: ADR-0003
ORG-0004 — Sistema de documentaçãoOrigem na stack-projetos: prática da stack-projetos (README + ARCHITECTURE + solutions + guias), formalizada
ORG-0005 — DiagramasOrigem na stack-projetos: ADR-0011, acrescida do banner e dos rabiscos deste repositório
ORG-0006 — Estrutura de diretóriosOrigem na stack-projetos: tabela de diretórios do CLAUDE.md
ORG-0007 — Agentes de IA e controle humanoOrigem na stack-projetos: ADR-0005 + hooks + memórias de feedback
ORG-0008 — OpenSpec para toda mudançaOrigem na stack-projetos: ADR-0008 (a CI de lá usa @latest e `
ORG-0009 — Desenvolvimento orientado a testes (TDD)Origem na stack-projetos: novo (lá se pedia "teste para cada caso de uso e controller", sem ordem)
ORG-0010 — Versões fixasOrigem na stack-projetos: ADR-0004 (pré-requisitos com versão), estendida a tudo
ORG-0011 — Plataforma Linux e pré-requisitosOrigem na stack-projetos: ADR-0004 + regras de eng/README.md
ORG-0012 — Integração contínuaOrigem na stack-projetos: ci.yml
ORG-0013 — Stack tecnológica escolhida uma vez, por critériosOrigem na stack-projetos: ADR-0006 e ADR-0002
ORG-0014 — PersistênciaOrigem na stack-projetos: ADR-0009 e ADR-0010
ORG-0015 — Testes de unidade e integraçãoOrigem na stack-projetos: ADR-0010 e ADR-0013
ORG-0016 — Testes fim a fim hierárquicosOrigem na stack-projetos: ADR-0031 e ADR-0048, redesenhadas
ORG-0017 — Aplicações e endereçosOrigem na stack-projetos: ADR-0046
ORG-0018 — Containers: Docker e ComposeOrigem na stack-projetos: Dockerfiles, compose.yaml e ADR-0004 ponto 5
ORG-0019 — Implantação com Kamal e segredos no BitwardenOrigem na stack-projetos: deploy/* e ADR-0005
ORG-0020 — Identidade e acesso com KeycloakOrigem na stack-projetos: ADR-0007, ADR-0014, ADR-0017 e ADR-0044, generalizadas
ORG-0021 — ObservabilidadeOrigem na stack-projetos: ADR-0012
ORG-0022 — Backup e restauraçãoOrigem na stack-projetos: ADR-0047
ORG-0023 — Design system da HibexOrigem na stack-projetos: ADR-0049, ADR-0050, ADR-0052, ADR-0053
ORG-0024 — Tempo e fuso horárioOrigem na stack-projetos: ADR-0016 e ADR-0036 — um aprendizado que vale para qualquer produto com agenda
ORG-0025 — Acervo de capturas de telaOrigem na stack-projetos: ADR-0048 + o aprendizado "só as telas afetadas"

ADRs de lá que não viraram ORG (e por quê)

ADR da stack-projetosPor que não é ORG
Interação sem diálogos customizados (ADR-0018)Por que não é ORG: já é regra do design system
Gráficos desenhados no servidor (ADR-0037)Por que não é ORG: escolha de produto e de stack (UI no servidor)
Mapa de estados no core (ADR-0050)Por que não é ORG: a regra "um mapa de estados por produto" é do design system; onde mora no código é da stack
Edição de perfil pela Account API (ADR-0017)Por que não é ORG: útil, mas é funcionalidade — vira guia de identidade, não decisão obrigatória
Aviso de ambiente (ADR-0053)Por que não é ORG: entra na ORG-0023, como item do design system
Prévia de links segura (ADR-0043)Por que não é ORG: decisão de produto; o aprendizado (fronteira de SSRF) vai para um guia de segurança futuro

Armadilhas técnicas que valem para qualquer stack

ArmadilhaOnde apareceuVira
O Kamal 2 nomeia o container <service>-<role>-<versão>; um alvo fixo no Prometheus não resolveOnde apareceu: ADR-0012, ARCHITECTUREVira: alias de rede estável no deploy.yml (fixo)
Startup do Keycloak é limitado por CPU: ~50 s sozinho, 3+ min com vários em paraleloOnde apareceu: guia de testesVira: poucos testes com Keycloak real; espera de 6 min
$(...) no .kamal/secrets precisa abrir e fechar na mesma linhaOnde apareceu: toolbox ADR-0031Vira: comentário no modelo do arquivo
Keycloak local com hostname dinâmico para servir nativo e em containerOnde apareceu: compose.yamlVira: modelo do compose.yaml
Google não aceita http://keycloak:8088 como redirect: login Google local só com apps nativasOnde apareceu: ADR-0044Vira: guia de identidade
Playwright: fechar o context de uma segunda aba fecha a página principalOnde apareceu: memória do roteiroVira: guia do E2E
CRLF e camadas de CSS ao importar a bibliotecaOnde apareceu: adoção do design systemVira: guia de aparência
Atualização do framework remodula artefatos de teste (ex.: fatias do Spring Boot 4)Onde apareceu: ADR-0013Vira: ADR de testes registra as coordenadas

O que não levamos para o modelo

Decisões que são do produto de projetos e não generalizam: moeda Hibex, motor de agendamento, homologação, impedimentos, mural, landings de adesão como peça obrigatória. Elas ficam como exemplo de como decidir (ADR com alternativas, change por fatia), não como o que decidir.