Workflows move to skills/<name>/SKILL.md so the repo installs as a plugin. scripts/quality-gate runs only the checks of the requested tier on the diff and reports missing tools as unverified instead of passing them. Hooks block stopping on a failed or stale gate, guard destructive shell commands and format edited files with the project's own formatter. Co-Authored-By: Claude Opus 5.5 <[email protected]>
15 KiB
name, description, version, author, license, platforms, metadata
| name | description | version | author | license | platforms | metadata | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wf-architecture | Use p/ arquitetura. Fluxo REQ→DESIGN→DOCS→REVIEW. | 1.0.0 | Hermes Agent | MIT |
|
|
Workflow Arquitetura
Orquestrador obrigatório para todo trabalho de arquitetura: desenho de sistemas, decisões (ADR), diagramas C4, threat modeling, revisão de arquitetura. Processo de 4 fases com skills fixas.
When to Use
Sempre que a tarefa envolver: arquitetura/design de sistema, escolha de stack, diagramas, ADR, threat model, revisão estrutural, ou "é uma boa ideia arquitetonicamente?".
Skills do stack (carregar conforme a fase)
- Design de sistema (raciocínio):
system-design(HelloInterview framework) - Diagramas:
c4-architecture(Context/Container/Component/Deployment) - Documentação:
isaqb-architecture-governance(arc42 + ADR) - Segurança:
secure-architecture-governance(STRIDE+CIA, S-ADR) - Qualidade de documentação:
avoid-ai-writing(remove AI-isms de ADRs, docs de arquitetura, RFCs — registros que vão durar anos não devem soar gerados por IA) - Locais:
security-threat-model,architecture-diagram(SVG),excalidraw,brainstorming,writing-plans
Fase 1 — REQUIREMENTS (entender antes de desenhar)
brainstorming— explorar intenção, requisitos funcionais e NFRs (latência, escala, disponibilidade, custo) antes de qualquer desenho.- Identificar entidades centrais, limites, fluxos de dados e atores.
- Estado da arte: checar evolução/relevância de stack/framework.
- VERIFICAR: rodar
hermaguardconceitual no escopo (o que pode dar errado com esta arquitetura?) e validar com o usuário que cada NFR é mensurável (ex: "p95 < 250ms" e não "rápido"). - Checkpoint: listar requisitos validados e SÓ seguir ao DESIGN com aprovação explícita.
- VERIFICAR (comandos de requisitos): escrever FRs/NFRs em
docs/requirements.mde rodargrep -c "NFR" docs/requirements.mdpara garantir que TODOS os NFRs viraram critério mensurável. - VERIFICAR (cobertura): usar
search_filespara confirmar que nenhum requisito levantado ficou órfão (cada FR/NFR tem dono e número). - VERIFICAR (comandos de estado da arte): consultar fontes atuais para
stack/framework antes de decidir — usar
web_search/consultas técnicas e registrar URL + data no requirements.md (não decidir stack do nada). - VERIFICAR (pontos de risco): listar os 3 maiores riscos técnicos do
escopo e checar com
hermaguardconceitual se algum deles muda a decisão de arquitetura — risco conhecido não vira surpresa depois. - CHECKPOINT final da Fase 1: apresentar requisitos para aprovação; sem OK explícito não avança para DESIGN.
- VERIFICAR (comandos de requisitos):
python3 -c "import yaml,sys; yaml.safe_load(open('docs/requirements.md'))"se requisitos em YAML (ou parser equivalente) para provar que o formato é válido; ecurl -s -o /dev/null -w "%{http_code}" URLquando houver fonte externa de referência citada. - VERIFICAR (critério de requisito): conferir que cada requisito tem "critério de aceite" ou número alvo — sem requisito "aberto" sem definição de pronto.
Checklist da fase 1 (validar requisitos):
- Requisitos funcionais e NFRs (latência, escala, disponibilidade, custo) coletados e mensuráveis (ex: "p95 < 250ms" ao invés de "rápido").
- Entidades centrais, limites e atores identificados.
- Estado da arte de stack/framework verificado.
- Requisitos aprovados pelo usuário antes de desenhar.
Anti-padrões desta fase:
- NUNCA desenhar sem requisito mensurável.
- NUNCA inventar NFR ("ser escalável") — exigir número e critério.
- NÃO pular a aprovação do usuário para "andar logo".
- NÃO decidir stack antes de validar requisitos (viés de ferramenta).
Fase 2 — DESIGN (modelar o sistema)
system-design— percorrer o framework: requisitos → entidades → API → data flow → high-level design → deep dives. Documentar trade-offs.c4-architecture— gerar diagramas (Context → Container → Component) em Mermaid/Structurizr. Declarar elementos em ordem de leitura, evitar cruzamentos (research-backed).secure-architecture-governance— mapear trust boundaries e rodar STRIDE+CIA nas decisões de segurança (auth, dados sensíveis).- VERIFICAR: rodar
c4-architecturede novo para audit — cada diagrama tem IDs estáveis, setas com rótulo e <=20 elementos por view? Validar com o usuário antes de documentar. - VERIFICAR (comandos de design): se Structurizr, validar com
python3 -c "import json; json.load(open('workspace.json'))"que o modelo é parseável; para Mermaid, conferir que os blocos ```mermaid fecham corretamente (contar crases ímpares = erro). - VERIFICAR (trade-offs):
grep -c "alternativa" docs/design.md— cada decisão tem pelo menos 1 alternativa documentada com o porquê? - VERIFICAR (limites):
grep -n "boundary\|trust" docs/design.md— trust boundaries explícitos nos diagramas; todo fluxo de dado sensível cruza boundary documentada. - VERIFICAR (comandos de render): se Mermaid, rodar
npx @mermaid-js/mermaid-cli -i d.mmd -o d.svg(ou Playwright) para provar que o diagrama renderiza sem erro de sintaxe. - VERIFICAR (comandos de contagem):
grep -c "component\|container" docs/c4.md— todo container mapeado tem representação;wc -l docs/c4.md > 10garante diagrama não-vazio. - VERIFICAR (critério de design): confirmar com o usuário que cada view reflete os requisitos da Fase 1 (rastreabilidade view→requisito) e que os trade-offs estão anotados — sem view "solta".
Checklist da fase 2 (validar o modelo):
system-designpercorrido: requisitos → entidades → API → data flow → high-level → deep dives.- Diagramas C4 (Context → Container → Component) com IDs estáveis, setas rotuladas e <=20 elementos por view.
- Trust boundaries mapeados; STRIDE+CIA aplicado nas decisões sensíveis.
- Trade-offs documentados (as 2 soluções alternativas + por quê a escolha).
Anti-padrões desta fase:
- NUNCA diagramar sem requisitos (Fase 1) — diagrama sem base vira enfeite.
- NUNCA deixar seta sem rótulo ou elemento sem ID estável.
- NÃO desenhar >20 elementos por view (ilegível = não é documento).
- NÃO ignorar trust boundary ao desenhar fluxo de dados sensível.
Fase 3 — DOCS (decisões em registros)
isaqb-architecture-governance— criar ADR (e S-ADR se decisão for security-driven) com alternativas e consequências. ID estável e reutilizado nos diagramas/docs.avoid-ai-writing— pós-escrever QUALQUER doc/ADR/RFC: detect+rewrite dos AI-isms (tiers 1/2/3, em-dash, "crucial", "robust", transições genéricas). Arquitetura documentada é lida por anos — não deve soar IA.- Estrutura de saída:
docs/architecture/(ADRs, views arc42) edocs/security/(S-ADRs, threat models) — sem colisão de nomes. - NFRs virarem critérios mensuráveis (não frase de efeito).
- VERIFICAR: rodar
avoid-ai-writingem modo detect em cada ADR (0 AI-isms restantes), confirmar arquivos criados emdocs/architecture/adr/edocs/security/adr/e conferir que IDs de ADR/S-ADR são únicos. - VERIFICAR (comandos de docs):
ls docs/architecture/adr/ docs/security/adr/para listar os registros criados egrep -rL "Consequências" docs/para achar ADR que esqueceu a seção de consequências. - VERIFICAR (rastreabilidade):
grep -rc "AD-...-NNN" docs/architecture/— cada ADR aparece referenciado em pelo menos um diagrama ou decision log. - VERIFICAR (comandos de docs): confirmar com
find docs/ -name "*.md" -o -name "*.mmd" | sortque a árvore está organizada; ewc -l docs/architecture/adr/*.mdpara garantir ADR com corpo (não só título). - VERIFICAR (estilo consistente):
grep -rn "em dash\|—" docs/architecture/adr/ | wc -l— em-dash em excesso = AI-ism residual (rodar avoid-ai-writing). - VERIFICAR (comandos de validação de docs):
python3 -m json.tool docs/workspace.json > /dev/nullpara Structurizr;curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/...se houver visualização local; egit diff --stat docs/para conferir o que foi documentado. - VERIFICAR (critério de aceite de doc): cada ADR responde "por que essa decisão?" e lista consequências —
grep -L "Consequências" docs/architecture/adr/*.mddeve ser vazio.
Checklist da fase 3 (documentação):
- ADR (ou S-ADR se security-driven) criado com alternativas + consequências.
avoid-ai-writingem detect = 0 em cada ADR/RFC.- Arquivos em
docs/architecture/adr/edocs/security/adr/; IDs únicos. - NFRs viram critérios mensuráveis no documento (não frase solta).
Anti-padrões desta fase:
- NUNCA publicar ADR sem alternativas consideradas.
- NUNCA publicar doc com AI-isms não tratados.
- NÃO criar 2 ADRs para a mesma decisão; NÃO duplicar decisão geral e S-ADR.
- NÃO deixar ID solto (decisão precisa ser rastreável ao diagrama/código).
Fase 4 — REVIEW (verificar antes de aprovar)
secure-architecture-governance— auditar decisões contra ISO/IEC 25010 (performance, segurança, confiabilidade, manutenibilidade).- Threat model final + gaps de trust boundary (unauthenticated internal paths, implicit service trust) priorizados.
- Checar consistência: IDs batem entre diagramas, ADRs e docs?
- Verdict objetivo: Approved / Approved-with-changes / Needs-revision, com evidência por finding — não gosto pessoal.
- VERIFICAR (gate final): rodar
secure-architecture-governancecomo checklist, validar a árvore de arquivos comsearch_files, e dar o verdict com base na evidência — se houver gap de security, reverter ao DESIGN. - VERIFICAR (comandos de revisão): usar
grep -r "AD-...-NNN" docs/para provar que IDs aparecem nos diagramas, egit statuspara conferir que tudo que foi modelado virou arquivo versionado. - VERIFICAR (anti-slop de docs): rodar
node .../avoid-ai-writing/detector/validate.jsnos ADRs etest_quality.pyno workflow — sem regressão. - VERIFICAR (todos os arquivos versionados):
git status --porcelaindeve mostrar só o esperado;find docs/ -name "*.md" | wc -lconfere a contagem de docs criados vs planejados na Fase 1. - VERIFICAR (comandos de evidência por finding): para cada finding,
grep -rn "<id-do-finding>" docs/security/deve retornar a evidência — sem achado "sem referência". - VERIFICAR (conclusão):
git diff --stat+git statuspara conferir o que o ciclo produziu; nada de diagrama/doc não versionado sendo citado como entregue. - VERIFICAR (comandos de revisão final): rodar
python3 ~/.hermes/skills/software-development/wf-qa/test_quality.py(gate) e conferir ogit diff --stat— a revisão só fecha com gate verificado e sem pendências de arquivo. - VERIFICAR (não-regressão de nomes): conferir que nenhuma skill do stack
foi renomeada/quebrada — rodar o harness (G4) e
test_tests.py.
Checklist da fase 4 (revisão):
- Auditoria contra ISO/IEC 25010 por decisão (performance, segurança, confiabilidade, manutenibilidade).
- Threat model final com gaps de trust boundary priorizados.
- Consistência de IDs: diagramas × ADRs × docs batem.
- Verdict objetivo emitido: Approved / Approved-with-changes / Needs-revision, com evidência por finding.
Anti-padrões desta fase:
- NUNCA dar verdict "approved" sem evidência em cada finding.
- NUNCA ignorar gap de trust boundary (unauthenticated internal path).
- NÃO confundir opinião estética com achado — achado exige referência.
- NÃO deixar segurança como "nota mental" — virar S-ADR ou finding listado.
Comandos de Verificação (executáveis)
# Gate de qualidade do próprio workflow (sem regressão)
python3 ~/.hermes/skills/software-development/wf-qa/test_quality.py
# Verifica consistência da documentação (IDs estáveis em diagramas/docs)
# (skill isaqb-architecture-governance + c4-architecture)
# Threat model: auditoria STRIDE+CIA contra ISO 25010
# (skill secure-architecture-governance)
# Audit de AI-isms nos ADRs/RFCs (detect = só mostra)
node ~/.hermes/skills/avoid-ai-writing/detector/validate.js adr.md adr-limp.md
Critérios de Aceite (checklist não-regressivo)
- Fase 1 concluída com requisitos/NFRs mensuráveis aprovados pelo usuário.
- Fase 2 gerou diagramas C4 com IDs estáveis e rótulos; validados.
- Fase 3 gerou ADR/S-ADR em
docs/architecture/edocs/security/;avoid-ai-writingdetect = 0 AI-isms. - Fase 4 auditou contra ISO 25010 + threat model; verdict emitido.
- Nenhuma skill do stack removida do arquivo.
- Rodar
python3 ~/.hermes/skills/software-development/wf-qa/test_quality.py→ exit 0 (sem regressão).
Exemplos de execução por fase (comandos reais)
Fase 1 — requisitos estruturados:
cat > docs/requirements.md <<'EOF'
# Requisitos
FR1: usuário cria e gerencia listas
NFR1: p95 < 250ms (API)
NFR2: disponibilidade 99.9%
NFR3: custo mensal < R$ 500
EOF
Fase 2 — diagrama C4 (definir estrutura antes):
# Estrutura do C4 em texto (depois renderizar com c4-architecture/Mermaid)
cat > docs/c4.md <<'EOF'
Context: [Usuário] -> [Sistema X]
Container: [Web] -> [API] -> [Postgres] -> [Redis]
EOF
Fase 3 — ADR curto:
# Criar ADR em docs/architecture/adr/0001-*.md (isaqb-architecture-governance)
# S-ADR em docs/security/adr/ quando a decisão for security-driven
Fase 4 — validação do conjunto:
# Consistência de IDs entre diagramas, ADRs e docs (search_files)
grep -r "ADR-" docs/ | wc -l # cada referência existe
grep -rn "S-ADR" docs/security/ | wc -l # decisões security-driven têm S-ADR
# "audite a arquitetura" (secure-architecture-governance: ISO 25010)
python3 -m json.tool docs/workspace.json > /dev/null # Structurizr válido?
# "rode o avoid-ai nos ADRs" (modo detect)
node ~/.hermes/skills/avoid-ai-writing/detector/validate.js adr.md adr-limp.md
find docs/ -name "*.md" -o -name "*.mmd" | sort # árvore organizada
Gates do workflow (anti-regressão):
python3 ~/.hermes/skills/software-development/wf-qa/test_quality.py
python3 ~/.hermes/skills/software-development/wf-qa/test_tests.py
Regras duras
- NUNCA diagramar antes de requisitos claros (Fase 1).
- NUNCA entregar ADR sem alternativas consideradas e consequências.
- NUNCA publicar ADR/RFC/doc com AI-isms não tratados (passar por
avoid-ai-writingantes de dar como entregue). - Decisão com load-bearing security → S-ADR em
docs/security/, nunca nos ADRs gerais. - Diagrama tem que ter declaração em ordem de leitura + alvo de cruzamentos — legibilidade é requisito, não luxo.