feat(squads): bounded contexts + ADRs for onboarding & squads governance#332
feat(squads): bounded contexts + ADRs for onboarding & squads governance#332danielhe4rt wants to merge 10 commits into
Conversation
stherzada
left a comment
There was a problem hiding this comment.
Avalie as considerações, e me dê um toque.
| 1. **Onde mora?** A pré-triagem é sobre pertencer à comunidade, não a um squad específico, e reusa | ||
| pesado o `identity` (vínculo GitHub via `ExternalIdentity`). Colocá-la dentro de `squads` | ||
| amarraria um conceito universal a um consumidor específico. |
There was a problem hiding this comment.
| 1. **Onde mora?** A pré-triagem é sobre pertencer à comunidade, não a um squad específico, e reusa | |
| pesado o `identity` (vínculo GitHub via `ExternalIdentity`). Colocá-la dentro de `squads` | |
| amarraria um conceito universal a um consumidor específico. | |
| 1. **Esse onboarding é específico de um squad ou global da comunidade?** A pré-triagem é sobre pertencer à comunidade, não a um squad específico, e reusa | |
| pesado o `identity` (vínculo GitHub via `ExternalIdentity`). Colocá-la dentro de `squads` | |
| amarraria um conceito universal a um consumidor específico. |
Recomendo trocar a pergunta, pois confesso que após a leitura fiquei confusa sobre o que se tratava.
| - **STI / modelo por tipo**: Laravel não tem STI nativo (exige pacote/boilerplate), foge do idioma | ||
| `enum→resolve` do repo e incha o schema com colunas nuláveis por tipo. Descartado. |
There was a problem hiding this comment.
| - **STI / modelo por tipo**: Laravel não tem STI nativo (exige pacote/boilerplate), foge do idioma | |
| `enum→resolve` do repo e incha o schema com colunas nuláveis por tipo. Descartado. |
Se foi descartado não faz sentido ter dentro desse contexto.
| 2. Como distinguir um "repo de desafio" de um repo de contribuições — sem que o `git_challenge` vire | ||
| XP de gamification. |
There was a problem hiding this comment.
Nesse caso aqui acho que pode ser validado até por nome mesmo, ele não precisa entrar muito afundo nessa lógica pois acredito que até o momento não visamos tantos repos desafios por hora.
| acoplamento mínimo e consciente, mitigado por ser categoria de projeção, não lógica de onboarding. | ||
| - O repo de desafio precisa ter o webhook do GitHub instalado apontando pro endpoint do | ||
| `integration-github` (setup de infra, não de código). | ||
| - Diverge do BDD original (reconciliação removida) — o documento da P.O. precisa ser atualizado. |
There was a problem hiding this comment.
Gera essa doc que foi citada aqui, por favor
There was a problem hiding this comment.
Trago o questionamento, acha válido deixar o context.md em inglês?
Pois seguindo essa lógica acho justo seguir todo processo em apenas uma língua, mas vale saber se isso pode ser uma limitação no futuro.
| | Term | Definition | Not to be confused with | | ||
| | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | ||
| | **Onboarding** | One person's journey through one typed flow, scoped to a tenant. One row per `(tenant, user, type)`. Holds lifecycle `status`, not the per-step detail. | The UI wizard (presentation) — the Onboarding is the persisted state machine | | ||
| | **OnboardingType** | The discriminator enum (`Welcome`, `Squads`, …). Resolves the polymorphic behaviour via `handler(): OnboardingFlow` — same idiom as `IdentityProvider::getClient`. | A step — a type _has_ steps | |
There was a problem hiding this comment.
Fiquei curiosa, qual diferença dessa para o OnboardingStep?
| a condução. Risco de o estado lançado divergir do que aconteceu de fato (mitigado pela trilha + por | ||
| o lançamento ser feito por super-admin/capitão). | ||
| - Regras como "sem reeleição direta" não são impedidas pelo sistema — dependem de disciplina humana. | ||
| - Vários cenários BDD do documento da P.O. não viram testes de software nesta fase. |
There was a problem hiding this comment.
Qual nesse caso, se poder gerar esse cenários, ficaria grata
There was a problem hiding this comment.
No geral não entendi quais decisões ele viu de problema, necessito de mais contexto para atuar nesse review.
There was a problem hiding this comment.
Trago o questionamento, acha válido deixar o context.md em inglês?
Pois seguindo essa lógica acho justo seguir todo processo em apenas uma língua, mas vale saber se isso pode ser uma limitação no futuro.
|
up! |
O quê
Estabelece dois novos bounded contexts —
onboarding(camada de Entrada) esquads(Governança) — via scaffold dos módulos + documentação de domínio (CONTEXT.md + ADRs). Sem código de runtime ainda — é a fundação de design que destrava a implementação.Resultado de uma sessão
/grill-with-docssobre o Mapa de Fluxos dos Squads (camadas Entrada + Governança; o Núcleo do jogo fica de fora por enquanto).Decisões principais (ver ADRs)
Onboarding (Entrada)
ADR-0001— Onboarding polimórfico por tipo (OnboardingType → handler(), mesmo idioma doIdentityProvider::getClient). Modeloonboarding+ tabelaonboarding_steps(auditoria por etapa). Cadeia de pré-requisitos entre tipos (Welcomeé pré-req deSquads). "APTO" =Squadsonboarding concluído.ADR-0002— Sinal de "PR aprovado" via novo evento de domínioGithubPullRequestApproveddointegration-github(transporte continua centralizado; HMAC/dedup reusados). Repo de desafio viaGithubRepository.purpose = challenge. Vínculo do GitHub é gate → sem reconciliação (diverge do BDD original da P.O.).Squads (Governança)
ADR-0001— Governança como record-keeping, não workflow engine. Eleição/remoção/saída/realocação rodam off-system; o módulo registra o resultado. Candidatura é o único fluxo conduzido. Autoridade = super-admins (config('he4rt.admins')) + capitão gere o próprio squad.ADR-0002— Modelo de dados:squads,squad_members(pivot com role),squad_membership_events(append-only),squad_applications. Capitão derivado do pivot (semcaptain_id). Capitão único + exclusividade "1 squad ativo" garantidos no banco (partial unique) + validação na Action.Fora de escopo (regras humanas, aplicadas off-system)
Elegibilidade "≥1 entrega", desempate pelo Head, candidatura única, mínimo de votos proporcional, "sem reeleição direta". Só o resultado é registrado — por isso o ponto aberto "definição de entrega" não bloqueia.
Arquivos
CONTEXT-MAP.md— registra os dois contextos + regras de dependênciaapp-modules/onboarding/— scaffold +CONTEXT.md+ 2 ADRsapp-modules/squads/— scaffold +CONTEXT.md+ 2 ADRsFollow-ups (não neste PR)
GithubPullRequestApproved, campoGithubRepository.purpose*ServiceProviderdesrc/Providers/→src/(guideline.ai/02-module-architecture)