nexus-core-v3 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/agents/README.md +133 -0
  4. package/agents/_protocol.md +107 -0
  5. package/agents/analyst.md +138 -0
  6. package/agents/architect.md +146 -0
  7. package/agents/data-engineer.md +170 -0
  8. package/agents/dev.md +134 -0
  9. package/agents/devops.md +141 -0
  10. package/agents/nexus-master.md +147 -0
  11. package/agents/pm.md +133 -0
  12. package/agents/po.md +138 -0
  13. package/agents/qa.md +192 -0
  14. package/agents/sm.md +122 -0
  15. package/agents/squad-creator.md +121 -0
  16. package/agents/ux-design-expert.md +165 -0
  17. package/artifact-manifest.json +903 -0
  18. package/bin/nexus.mjs +37 -0
  19. package/checklists/README.md +49 -0
  20. package/checklists/architect-checklist.md +47 -0
  21. package/checklists/change-checklist.md +61 -0
  22. package/checklists/db-predeploy-checklist.md +57 -0
  23. package/checklists/design-quality-checklist.md +57 -0
  24. package/checklists/discovery-checklist.md +36 -0
  25. package/checklists/foundation-checklist.md +39 -0
  26. package/checklists/launch-checklist.md +39 -0
  27. package/checklists/pm-checklist.md +48 -0
  28. package/checklists/po-master-checklist.md +64 -0
  29. package/checklists/reality-check-checklist.md +49 -0
  30. package/checklists/story-dod-checklist.md +52 -0
  31. package/checklists/story-draft-checklist.md +36 -0
  32. package/dist/bin/dashboard.html +279 -0
  33. package/dist/bin/nexus.mjs +20008 -0
  34. package/dist/constitution.yaml +76 -0
  35. package/knowledge/README.md +57 -0
  36. package/knowledge/architecture/architectural-styles-map.md +182 -0
  37. package/knowledge/architecture/design-patterns-gof.md +192 -0
  38. package/knowledge/architecture/distributed-patterns-cheatsheet.md +201 -0
  39. package/knowledge/architecture/saas-subscription-blueprint.md +355 -0
  40. package/knowledge/architecture/system-design-tradeoffs.md +231 -0
  41. package/knowledge/architecture/t3-fullstack-typesafe-stack.md +273 -0
  42. package/knowledge/copy/landing-copy-that-converts.md +168 -0
  43. package/knowledge/data/postgres-indexing-and-tuning.md +263 -0
  44. package/knowledge/data/schema-modeling-decisions.md +273 -0
  45. package/knowledge/data/supabase-rls-patterns.md +316 -0
  46. package/knowledge/data/zero-downtime-migrations.md +308 -0
  47. package/knowledge/devops/cicd-pipeline-best-practices.md +318 -0
  48. package/knowledge/devops/production-dockerfile.md +283 -0
  49. package/knowledge/devops/twelve-factor-app.md +398 -0
  50. package/knowledge/engineering/clean-code-principles.md +429 -0
  51. package/knowledge/engineering/effective-code-review.md +204 -0
  52. package/knowledge/engineering/testing-strategy-beyond-unit.md +307 -0
  53. package/knowledge/governance/risk-matrix.md +56 -0
  54. package/knowledge/integration/mcp-server-selection-matrix.md +235 -0
  55. package/knowledge/marketing/copy-que-converte.md +43 -0
  56. package/knowledge/marketing/funil-e-jornada.md +36 -0
  57. package/knowledge/negocios/proposta-vencedora.md +38 -0
  58. package/knowledge/negocios/roi-e-unit-economics.md +46 -0
  59. package/knowledge/pipeline/1-descobrir.md +26 -0
  60. package/knowledge/pipeline/2-estrategizar.md +26 -0
  61. package/knowledge/pipeline/3-estruturar.md +27 -0
  62. package/knowledge/pipeline/4-construir.md +27 -0
  63. package/knowledge/pipeline/5-endurecer.md +28 -0
  64. package/knowledge/pipeline/6-lancar.md +27 -0
  65. package/knowledge/pipeline/7-operar.md +27 -0
  66. package/knowledge/security/lgpd-conformidade-basica.md +35 -0
  67. package/knowledge/security/owasp-secure-coding-gates.md +220 -0
  68. package/knowledge/security/owasp-top10-threat-assessment.md +287 -0
  69. package/knowledge/security/threat-modeling-stride.md +34 -0
  70. package/knowledge/web-craft/a11y-audit-checklist.md +251 -0
  71. package/knowledge/web-craft/accessible-component-patterns.md +383 -0
  72. package/knowledge/web-craft/anti-ai-look.md +114 -0
  73. package/knowledge/web-craft/design-system-from-code.md +195 -0
  74. package/knowledge/web-craft/intrinsic-css-layout.md +420 -0
  75. package/knowledge/web-craft/style-cloning.md +185 -0
  76. package/knowledge/web-craft/visual-polish-review.md +183 -0
  77. package/package.json +55 -0
  78. package/runbooks/campanha-de-conteudo.md +36 -0
  79. package/runbooks/feature-em-projeto-existente.md +37 -0
  80. package/runbooks/mvp-startup.md +38 -0
  81. package/runbooks/resposta-a-incidente.md +37 -0
  82. package/squads/exemplo-conteudo/agents/editor-chefe.md +48 -0
  83. package/squads/exemplo-conteudo/agents/pesquisador.md +44 -0
  84. package/squads/exemplo-conteudo/agents/redator.md +45 -0
  85. package/squads/exemplo-conteudo/knowledge/estilo-editorial.md +21 -0
  86. package/squads/exemplo-conteudo/squad.yaml +19 -0
  87. package/squads/exemplo-conteudo/tasks/pesquisar-fontes.md +26 -0
  88. package/squads/exemplo-conteudo/tasks/planejar-pauta.md +27 -0
  89. package/squads/exemplo-conteudo/tasks/redigir-artigo.md +26 -0
  90. package/squads/exemplo-conteudo/tasks/revisar-artigo.md +27 -0
  91. package/squads/marketing/agents/analista.md +56 -0
  92. package/squads/marketing/agents/chefe-marketing.md +65 -0
  93. package/squads/marketing/agents/conteudo.md +55 -0
  94. package/squads/marketing/agents/copy.md +55 -0
  95. package/squads/marketing/agents/growth.md +56 -0
  96. package/squads/marketing/agents/social.md +55 -0
  97. package/squads/marketing/squad.yaml +17 -0
  98. package/squads/marketing/tasks/aprovar-campanha.md +43 -0
  99. package/squads/negocios/agents/chefe-negocios.md +65 -0
  100. package/squads/negocios/agents/financas-roi.md +55 -0
  101. package/squads/negocios/agents/suporte.md +55 -0
  102. package/squads/negocios/agents/vendas-proposta.md +56 -0
  103. package/squads/negocios/squad.yaml +17 -0
  104. package/squads/negocios/tasks/aprovar-proposta.md +40 -0
  105. package/squads/security/agents/appsec-reviewer.md +59 -0
  106. package/squads/security/agents/chefe-seguranca.md +65 -0
  107. package/squads/security/agents/compliance-auditor.md +60 -0
  108. package/squads/security/agents/threat-modeler.md +60 -0
  109. package/squads/security/squad.yaml +20 -0
  110. package/squads/security/tasks/aprovar-gate-seguranca.md +42 -0
  111. package/squads/security/tasks/emitir-parecer-conformidade.md +42 -0
  112. package/tasks/README.md +72 -0
  113. package/tasks/accessibility-wcag-checklist.md +69 -0
  114. package/tasks/advanced-elicitation.md +42 -0
  115. package/tasks/analyze-performance.md +54 -0
  116. package/tasks/analyze-project-structure.md +59 -0
  117. package/tasks/apply-qa-fixes.md +57 -0
  118. package/tasks/architect-analyze-impact.md +62 -0
  119. package/tasks/archive-squad.md +52 -0
  120. package/tasks/audit-codebase.md +53 -0
  121. package/tasks/build-component.md +61 -0
  122. package/tasks/calculate-roi.md +63 -0
  123. package/tasks/ci-cd-configuration.md +51 -0
  124. package/tasks/collect-visual-evidence.md +62 -0
  125. package/tasks/compose-molecule.md +57 -0
  126. package/tasks/consolidate-patterns.md +54 -0
  127. package/tasks/create-brownfield-prd.md +54 -0
  128. package/tasks/create-competitor-analysis.md +42 -0
  129. package/tasks/create-deep-research-prompt.md +62 -0
  130. package/tasks/create-doc.md +62 -0
  131. package/tasks/create-epic.md +49 -0
  132. package/tasks/create-front-end-spec.md +56 -0
  133. package/tasks/create-migration-plan.md +57 -0
  134. package/tasks/create-next-story.md +66 -0
  135. package/tasks/create-prd.md +53 -0
  136. package/tasks/create-project-brief.md +47 -0
  137. package/tasks/create-rls-policies.md +59 -0
  138. package/tasks/create-schema.md +57 -0
  139. package/tasks/create-service.md +55 -0
  140. package/tasks/create-squad.md +100 -0
  141. package/tasks/create-suite.md +62 -0
  142. package/tasks/db-apply-migration.md +56 -0
  143. package/tasks/db-domain-modeling.md +57 -0
  144. package/tasks/db-dry-run.md +50 -0
  145. package/tasks/db-env-check.md +57 -0
  146. package/tasks/db-load-csv.md +54 -0
  147. package/tasks/db-policy-apply.md +58 -0
  148. package/tasks/db-rollback.md +51 -0
  149. package/tasks/db-run-sql.md +61 -0
  150. package/tasks/db-seed.md +52 -0
  151. package/tasks/db-smoke-test.md +51 -0
  152. package/tasks/db-snapshot.md +48 -0
  153. package/tasks/db-verify-order.md +49 -0
  154. package/tasks/deliberate.md +46 -0
  155. package/tasks/design-indexes.md +59 -0
  156. package/tasks/dev-develop-story.md +61 -0
  157. package/tasks/document-project.md +59 -0
  158. package/tasks/execute-checklist.md +57 -0
  159. package/tasks/execute-epic-plan.md +52 -0
  160. package/tasks/execute-subtask.md +51 -0
  161. package/tasks/extend-pattern.md +63 -0
  162. package/tasks/extend-squad.md +60 -0
  163. package/tasks/extract-patterns.md +64 -0
  164. package/tasks/extract-tokens.md +59 -0
  165. package/tasks/facilitate-brainstorming-session.md +42 -0
  166. package/tasks/generate-ai-frontend-prompt.md +57 -0
  167. package/tasks/generate-documentation.md +60 -0
  168. package/tasks/generate-migration-strategy.md +57 -0
  169. package/tasks/generate-shock-report.md +56 -0
  170. package/tasks/mcp-management.md +66 -0
  171. package/tasks/orchestrate.md +50 -0
  172. package/tasks/perform-market-research.md +42 -0
  173. package/tasks/plan-create-context.md +57 -0
  174. package/tasks/plan-create-implementation.md +58 -0
  175. package/tasks/po-close-story.md +60 -0
  176. package/tasks/po-manage-story-backlog.md +59 -0
  177. package/tasks/po-pull-story.md +60 -0
  178. package/tasks/po-sync-story.md +59 -0
  179. package/tasks/pr-automation.md +50 -0
  180. package/tasks/pre-push-quality-gate.md +54 -0
  181. package/tasks/push.md +53 -0
  182. package/tasks/qa-browser-console-check.md +52 -0
  183. package/tasks/qa-create-fix-request.md +58 -0
  184. package/tasks/qa-evidence-requirements.md +55 -0
  185. package/tasks/qa-false-positive-detection.md +55 -0
  186. package/tasks/qa-fix-issues.md +55 -0
  187. package/tasks/qa-gate.md +53 -0
  188. package/tasks/qa-migration-validation.md +58 -0
  189. package/tasks/qa-nfr-assess.md +45 -0
  190. package/tasks/qa-review-story.md +56 -0
  191. package/tasks/qa-risk-profile.md +45 -0
  192. package/tasks/qa-security-checklist.md +64 -0
  193. package/tasks/qa-test-design.md +47 -0
  194. package/tasks/qa-trace-requirements.md +48 -0
  195. package/tasks/release-management.md +53 -0
  196. package/tasks/repository-cleanup.md +61 -0
  197. package/tasks/route.md +44 -0
  198. package/tasks/run-tests.md +50 -0
  199. package/tasks/security-audit.md +54 -0
  200. package/tasks/setup-database.md +60 -0
  201. package/tasks/setup-design-system.md +60 -0
  202. package/tasks/shard-doc.md +60 -0
  203. package/tasks/spec-assess-complexity.md +55 -0
  204. package/tasks/spec-critique.md +64 -0
  205. package/tasks/spec-gather-requirements.md +48 -0
  206. package/tasks/spec-research-dependencies.md +42 -0
  207. package/tasks/spec-write-spec.md +50 -0
  208. package/tasks/test-as-user.md +52 -0
  209. package/tasks/ux-create-wireframe.md +54 -0
  210. package/tasks/ux-user-research.md +55 -0
  211. package/tasks/validate-next-story.md +61 -0
  212. package/tasks/validate-squad.md +55 -0
  213. package/tasks/verify-subtask.md +52 -0
  214. package/tasks/version-management.md +45 -0
  215. package/templates/README.md +47 -0
  216. package/templates/architecture-tmpl.md +115 -0
  217. package/templates/competitor-analysis-tmpl.md +87 -0
  218. package/templates/epic-tmpl.md +83 -0
  219. package/templates/front-end-spec-tmpl.md +110 -0
  220. package/templates/market-research-tmpl.md +98 -0
  221. package/templates/migration-plan-tmpl.md +92 -0
  222. package/templates/prd-tmpl.md +95 -0
  223. package/templates/project-brief-tmpl.md +100 -0
  224. package/templates/qa-verdict-tmpl.md +73 -0
  225. package/templates/rls-policies-tmpl.md +93 -0
  226. package/templates/schema-design-tmpl.md +107 -0
  227. package/templates/spec-tmpl.md +88 -0
  228. package/templates/squad/agent-dna-tmpl.md +72 -0
  229. package/templates/squad/chief-dna-tmpl.md +98 -0
  230. package/templates/squad/squad-task-tmpl.md +50 -0
  231. package/templates/squad/squad-yaml-tmpl.md +47 -0
  232. package/templates/story-tmpl.md +63 -0
@@ -0,0 +1,36 @@
1
+ # Funil e jornada — a mensagem certa na etapa certa
2
+
3
+ A pessoa não acorda querendo comprar. Ela percorre uma jornada — da dor que ainda não nomeou até a
4
+ decisão de pagar — e cada etapa precisa de uma mensagem diferente. A campanha que fala de compra para
5
+ quem ainda descobre a dor desperdiça a melhor peça no público errado.
6
+
7
+ ## As etapas da jornada
8
+
9
+ | Etapa | Estado mental | Mensagem que funciona | Métrica |
10
+ |---|---|---|---|
11
+ | **Descoberta (topo)** | "tenho um problema?" | conteúdo que nomeia e educa sobre a dor | alcance qualificado, tempo de leitura |
12
+ | **Consideração (meio)** | "quais são as opções?" | comparação, prova, casos, critérios de escolha | leads, inscrições, retorno ao site |
13
+ | **Decisão (fundo)** | "esta é a escolha certa?" | copy de conversão, remoção de objeção, oferta | conversão, receita |
14
+ | **Retenção (pós)** | "valeu a pena?" | onboarding, primeiro valor, sucesso do cliente | ativação, churn, expansão |
15
+
16
+ Peça no funil errado = orçamento desperdiçado. O conteúdo de fundo (oferta, urgência) empurra quem
17
+ ainda está descobrindo; o de topo (educação) entedia quem já quer comprar.
18
+
19
+ ## Coerência de mensagem entre canais
20
+
21
+ A promessa central é a MESMA em todo canal — o que muda é a língua (formato nativo), não o fundo. O
22
+ anúncio, o post e a landing dizem a mesma coisa, adaptada. Contradição entre canais quebra a confiança
23
+ e mata a conversão.
24
+
25
+ ## Métrica real vs vaidade
26
+
27
+ - **Vaidade:** curtida, impressão, alcance bruto, seguidores. Sobem sem mover o negócio.
28
+ - **Real:** lead qualificado, ativação, receita, retenção. Ligam-se ao resultado.
29
+ - Regra: se o número não muda a próxima decisão, ele não entra no relatório como sucesso.
30
+
31
+ ## Anti-padrões
32
+
33
+ - Uma mensagem única para toda a jornada — a dor de cada etapa é diferente.
34
+ - Comemorar vaidade — curtida não paga conta.
35
+ - Cross-post idêntico — cada canal tem sua língua; copiar e colar o algoritmo pune.
36
+ - Campanha sem métrica-alvo definida antes de ir ao ar — vira opinião com orçamento.
@@ -0,0 +1,38 @@
1
+ # A proposta que vende a transformação
2
+
3
+ Uma proposta comercial não é um catálogo de features com preço no fim. É um argumento: o cliente tem
4
+ uma dor, ela custa caro, e existe um caminho para resolvê-la que vale mais do que custa. Tudo o mais
5
+ é embalagem.
6
+
7
+ ## A estrutura que fecha
8
+
9
+ 1. **A dor do cliente (não a nossa empresa).** Abra pelo custo real de não resolver — tempo perdido,
10
+ dinheiro vazando, risco correndo. Se o primeiro parágrafo fala de "nós", o cliente parou de ler.
11
+ 2. **A transformação (não a feature).** Cada capacidade relevante vira o que muda na vida do cliente.
12
+ "Dashboard em tempo real" é feature; "você para de descobrir o problema no dia seguinte" é venda.
13
+ 3. **A oferta.** O que ele recebe, por quanto, com qual garantia ou risco reduzido.
14
+ 4. **A prova.** O retorno quantificado (ROI), casos, ou a redução de risco que torna o "sim" seguro.
15
+ 5. **A única ação seguinte.** Um próximo passo claro, sem atrito. Cinco call-to-actions = nenhuma decisão.
16
+
17
+ ## Feature → benefício → transformação
18
+
19
+ | Feature (o que faz) | Benefício (o que muda) | Transformação (quem ele vira) |
20
+ |---|---|---|
21
+ | Relatório automático | Economiza 4h/semana | Deixa de ser refém da planilha |
22
+ | Alerta em tempo real | Erro pego na hora | Para de apagar incêndio no dia seguinte |
23
+ | Integração com X | Fim do retrabalho manual | Confia no dado sem reconferir |
24
+
25
+ O rascunho para na coluna 1. A proposta chega na coluna 3.
26
+
27
+ ## Anti-padrões (o que rasgar)
28
+
29
+ - Abrir com "somos líderes de mercado" — o cliente compra a dor dele, não o nosso currículo.
30
+ - Vender a lista de features — ninguém compra capacidade, compram resultado.
31
+ - Prometer o que o produto não entrega hoje — proposta é contrato moral; overselling é churn assinado.
32
+ - Terminar sem ação seguinte — a proposta perfeita sem próximo passo não converte.
33
+
34
+ ## Retenção começa na proposta
35
+
36
+ A venda só fecha de verdade quando o cliente ativa e fica. O caminho até o primeiro valor (o cliente
37
+ sentir que valeu antes de duvidar) faz parte da oferta, não é um "depois". Venda que não ativa é
38
+ receita emprestada.
@@ -0,0 +1,46 @@
1
+ # ROI e unit economics — a conta honesta
2
+
3
+ ROI não é um argumento de venda — é uma conta que o cliente reconhece como dele. O ROI que fecha a
4
+ venda com premissa inflada é o mesmo que abre o ticket de cancelamento seis meses depois. A régua é
5
+ simples: todo número tem origem, e a origem é o cliente.
6
+
7
+ ## A conta do ROI
8
+
9
+ ```
10
+ ROI (%) = (ganho − custo) / custo × 100
11
+ ganho = economia gerada + receita nova (no horizonte de análise)
12
+ custo = preço + implantação + custo de operação
13
+ payback = tempo até o ganho acumulado igualar o custo
14
+ ```
15
+
16
+ - **Horizonte explícito.** ROI de 12 meses e de 36 meses são histórias diferentes — diga qual.
17
+ - **Premissa marcada.** Cada número: dado do cliente, benchmark citável, ou estimativa marcada COMO
18
+ estimativa. Número sem origem é chute com casa decimal.
19
+
20
+ ## Análise de sensibilidade (o que mata a conta)
21
+
22
+ Não basta o ROI ser positivo. Pergunte: se a premissa-chave errar 20%, a conta ainda fecha?
23
+
24
+ | Cenário | Premissa-chave | Payback |
25
+ |---|---|---|
26
+ | Otimista | volume alto | 14 meses |
27
+ | Base | volume esperado | 18 meses |
28
+ | Conservador | volume −20% | 22 meses |
29
+
30
+ Apresente os três. O cliente confia mais em quem mostra o cenário ruim do que em quem só mostra o bom.
31
+
32
+ ## Unit economics — a pergunta antes da escala
33
+
34
+ Se a conta não fecha em UMA unidade (um cliente, um pedido, um mês), escalar só multiplica o prejuízo.
35
+
36
+ - **LTV** (lifetime value) — quanto um cliente gera enquanto fica.
37
+ - **CAC** (custo de aquisição) — quanto custou trazê-lo.
38
+ - **Regra:** `LTV > CAC` (idealmente 3×), e o CAC se paga dentro de um horizonte curto (payback de CAC).
39
+ - Se `LTV < CAC`, cada venda nova aprofunda o rombo — o crescimento é o problema, não a solução.
40
+
41
+ ## Anti-padrões
42
+
43
+ - Usar a premissa que fecha a venda em vez da que o cliente confirma.
44
+ - Esconder a sensibilidade — o retorno frágil precisa aparecer frágil.
45
+ - ROI sem horizonte — "3x de retorno" sem prazo não significa nada.
46
+ - Escalar antes de a unidade fechar — multiplicar prejuízo não é growth.
@@ -0,0 +1,26 @@
1
+ ---
2
+ fase: descobrir
3
+ titulo: Descobrir
4
+ agentesAtivos: [analyst, pm]
5
+ outputs:
6
+ - project-brief.md
7
+ - achados de pesquisa
8
+ gate:
9
+ gateKeeper: analyst
10
+ checklistRef: discovery-checklist
11
+ criterios:
12
+ - criterio: Problema real e usuário/segmento nomeado
13
+ evidenciaExigida: entrevista, dado, ticket ou observação que comprove a dor
14
+ - criterio: Valor da solução articulado
15
+ evidenciaExigida: impacto x frequência x alcance estimados
16
+ - criterio: Riscos e incógnitas listados
17
+ evidenciaExigida: lista explícita do que ainda não se sabe
18
+ ---
19
+
20
+ # Fase 1 — Descobrir
21
+
22
+ Entende-se o problema antes de propor solução. O Alex conduz a pesquisa e o Morgan traduz o achado em
23
+ direção. Nada de código, nada de arquitetura — só a verdade sobre a dor, o usuário e o valor.
24
+
25
+ **Gate:** o `discovery-checklist` guarda a saída. Sem problema real, usuário nomeado e evidência da dor,
26
+ não se avança — descoberta rasa vira produto errado construído com perfeição.
@@ -0,0 +1,26 @@
1
+ ---
2
+ fase: estrategizar
3
+ titulo: Estrategizar
4
+ agentesAtivos: [pm, po]
5
+ outputs:
6
+ - prd.md
7
+ - épicos priorizados
8
+ gate:
9
+ gateKeeper: pm
10
+ checklistRef: pm-checklist
11
+ criterios:
12
+ - criterio: PRD com FRs/NFRs rastreáveis
13
+ evidenciaExigida: cada requisito numerado e ligado a uma dor da Descoberta
14
+ - criterio: Escopo e não-escopo explícitos
15
+ evidenciaExigida: lista do que fica de fora desta versão
16
+ - criterio: Épicos priorizados por valor x risco
17
+ evidenciaExigida: ordenação justificada, não intuição
18
+ ---
19
+
20
+ # Fase 2 — Estrategizar
21
+
22
+ Transforma-se a dor validada em direção de produto. O Morgan escreve o PRD (FRs/NFRs, escopo, épicos) e
23
+ o Pax garante que cada item rastreia a um problema real e cabe no backlog.
24
+
25
+ **Gate:** o `pm-checklist` guarda a saída. Estratégia sem rastreabilidade ao problema é invenção — cada
26
+ requisito tem de puxar de uma dor da Descoberta (Article IV — No Invention).
@@ -0,0 +1,27 @@
1
+ ---
2
+ fase: estruturar
3
+ titulo: Estruturar
4
+ agentesAtivos: [architect, data-engineer]
5
+ outputs:
6
+ - architecture.md
7
+ - schema-design.md
8
+ - ADRs
9
+ gate:
10
+ gateKeeper: architect
11
+ checklistRef: foundation-checklist
12
+ criterios:
13
+ - criterio: NFRs quantificados e fronteiras definidas
14
+ evidenciaExigida: números-alvo de escala/latência/segurança/custo
15
+ - criterio: Dados modelados e propriedade definida
16
+ evidenciaExigida: entidades, relações e estado inicial documentados
17
+ - criterio: Decisões estruturais registradas
18
+ evidenciaExigida: ADRs com alternativas rejeitadas
19
+ ---
20
+
21
+ # Fase 3 — Estruturar
22
+
23
+ Desenha-se a fundação técnica. A Aria decide arquitetura e tecnologia; a Dara modela os dados e as
24
+ migrações. É aqui que a fundação nasce reta — ou o dia 30 cobra o retrabalho.
25
+
26
+ **Gate:** o `foundation-checklist` guarda a saída. NFRs quantificados, segurança na fundação e
27
+ rastreabilidade total (No Invention) são críticos — sem eles, "construir" vira aposta.
@@ -0,0 +1,27 @@
1
+ ---
2
+ fase: construir
3
+ titulo: Construir
4
+ agentesAtivos: [dev, ux-design-expert]
5
+ outputs:
6
+ - código implementado
7
+ - testes
8
+ - evidência de execução
9
+ gate:
10
+ gateKeeper: dev
11
+ checklistRef: story-dod-checklist
12
+ criterios:
13
+ - criterio: Todos os ACs implementados e testados
14
+ evidenciaExigida: teste verde por AC (Given-When-Then)
15
+ - criterio: Suíte e lint verdes
16
+ evidenciaExigida: saída real de npm run check exit 0
17
+ - criterio: File List completa
18
+ evidenciaExigida: todo arquivo tocado listado na story
19
+ ---
20
+
21
+ # Fase 4 — Construir
22
+
23
+ Implementa-se a story seguindo o spec. O Dex escreve o código com testes; a Uma garante que a interface
24
+ segue o design system (rota design-primeiro para entregável visual). Cada AC vira código + teste.
25
+
26
+ **Gate:** o `story-dod-checklist` (DoD) guarda a saída. O Dex se auto-verifica antes de entregar ao QA —
27
+ suíte verde, ACs cobertos, File List real. "Feito" sem teste não é feito.
@@ -0,0 +1,28 @@
1
+ ---
2
+ fase: endurecer
3
+ titulo: Endurecer
4
+ agentesAtivos: [qa]
5
+ outputs:
6
+ - QaVerdict
7
+ - evidência visual
8
+ - QA Results na story
9
+ gate:
10
+ gateKeeper: qa
11
+ checklistRef: reality-check-checklist
12
+ checklistRefsExtra: [design-quality-checklist]
13
+ criterios:
14
+ - criterio: Executado, não lido — suíte + fluxo exercitados
15
+ evidenciaExigida: log da execução real, não impressão do diff
16
+ - criterio: Evidência anexada a cada afirmação de pronto
17
+ evidenciaExigida: teste verde, screenshot, console limpo
18
+ - criterio: Regressão para todo bug corrigido
19
+ evidenciaExigida: teste que reproduzia o bug (red antes do green)
20
+ ---
21
+
22
+ # Fase 5 — Endurecer
23
+
24
+ A Quinn ataca o que vai falhar em produção: executa, coleta evidência visual, roda o reality-check e
25
+ emite o `<verdict>`. O default é NEEDS WORK — READY só com evidência esmagadora.
26
+
27
+ **Gate:** o `reality-check-checklist` guarda a saída. Reprovar 2–3 vezes aqui é o processo funcionando.
28
+ Sem execução e sem evidência, não há PASS — o gate não atesta o que não viu.
@@ -0,0 +1,27 @@
1
+ ---
2
+ fase: lancar
3
+ titulo: Lançar
4
+ agentesAtivos: [devops]
5
+ outputs:
6
+ - release assinado
7
+ - changelog
8
+ - rollback ensaiado
9
+ gate:
10
+ gateKeeper: devops
11
+ checklistRef: launch-checklist
12
+ criterios:
13
+ - criterio: Gate de qualidade verde antes do tráfego
14
+ evidenciaExigida: Endurecer com PASS + npm run check exit 0
15
+ - criterio: Rollback exercitado, não só documentado
16
+ evidenciaExigida: registro do ensaio de volta
17
+ - criterio: Assinatura de release verificada
18
+ evidenciaExigida: verificação fail-closed da assinatura do artefato
19
+ ---
20
+
21
+ # Fase 6 — Lançar
22
+
23
+ O Gage leva à produção com rede de segurança: assinatura verificada, rollback ensaiado, observabilidade
24
+ de pé ANTES do tráfego, rollout gradual atrás de flag. Lançar é irreversível na prática.
25
+
26
+ **Gate:** o `launch-checklist` guarda a saída. Sem gate verde, sem volta garantida e sem alertas ativos,
27
+ o lançamento segura — um dia de preparo custa menos que um incidente com o usuário.
@@ -0,0 +1,27 @@
1
+ ---
2
+ fase: operar
3
+ titulo: Operar
4
+ agentesAtivos: [devops, architect]
5
+ outputs:
6
+ - métricas e alertas em produção
7
+ - runbooks de incidente
8
+ - relatório de operação
9
+ gate:
10
+ gateKeeper: devops
11
+ criterios:
12
+ - criterio: Observabilidade viva (métricas, logs, alertas)
13
+ evidenciaExigida: dashboards e alertas respondendo a dados reais
14
+ - criterio: Resposta a incidente ensaiada
15
+ evidenciaExigida: runbook executável + dono de plantão definido
16
+ - criterio: Dívida e aprendizados capturados
17
+ evidenciaExigida: itens registrados para a próxima Descoberta
18
+ ---
19
+
20
+ # Fase 7 — Operar
21
+
22
+ O dia 2 em diante: o Gage cuida da saúde em produção e a Aria avalia o que a realidade ensinou. Aqui
23
+ não há checklist único — o gate é a operação REAL respondendo (observabilidade viva, incidente
24
+ ensaiado), e o aprendizado volta a alimentar a Descoberta (o ciclo fecha).
25
+
26
+ **Gate:** critérios de operação, sem checklist fixo. Produção que não se observa não se opera — e
27
+ aprendizado que não se captura é retrabalho futuro.
@@ -0,0 +1,35 @@
1
+ # Conformidade de dados — o essencial (LGPD/GDPR)
2
+
3
+ Conformidade de dados pessoais não é o departamento jurídico dizendo "não" — é o contrato entre o
4
+ produto e o titular do dado. O essencial cabe em cinco perguntas que todo sistema que toca dado
5
+ pessoal precisa responder com FUNÇÃO, não com promessa.
6
+
7
+ ## As cinco perguntas
8
+
9
+ 1. **Base legal** — por que temos o direito de coletar isto? (consentimento, execução de contrato,
10
+ obrigação legal, legítimo interesse). Sem base declarada, a coleta é indevida.
11
+ 2. **Finalidade** — para que este dado específico é usado? A finalidade precede a coleta; dado sem
12
+ finalidade é passivo.
13
+ 3. **Minimização** — coletamos só o necessário para a finalidade? Campo "por via das dúvidas" viola.
14
+ 4. **Retenção** — por quanto tempo guardamos, e existe descarte automático quando a finalidade acaba?
15
+ Retenção sem prazo é não-conformidade.
16
+ 5. **Direitos do titular** — acesso, correção, exclusão e portabilidade EXISTEM como operação real?
17
+ Prometer na política e não implementar é pior que não prometer.
18
+
19
+ ## Dados sensíveis (tratamento reforçado)
20
+
21
+ Saúde, biometria, origem racial/étnica, convicção religiosa/política, orientação sexual, dados de
22
+ crianças e adolescentes: base legal mais estrita, minimização agressiva, e exposição = severidade P0.
23
+
24
+ ## Sinais de não-conformidade (achados comuns)
25
+
26
+ - PII em logs/telemetria (nome, CPF, e-mail em texto plano no log).
27
+ - Retenção infinita (nunca se apaga nada "por segurança").
28
+ - Consentimento amarrado — "aceite tudo ou não use" para finalidades separáveis.
29
+ - Direito do titular como promessa sem função (não há endpoint que exclui/exporta).
30
+ - Compartilhamento com terceiro sem base nem registro.
31
+
32
+ ## Como emitir o parecer
33
+
34
+ Cada não-conformidade cita: o dado concreto, o princípio/artigo violado, o risco (exposição/multa/
35
+ quebra de confiança) e a correção mínima. Severidade amarrada ao risco: exposição de PII sensível = P0.
@@ -0,0 +1,220 @@
1
+ ---
2
+ id: owasp-secure-coding-gates
3
+ domain: security
4
+ agents: [qa]
5
+ when: "ao revisar código quanto a segurança antes de commit/merge"
6
+ ---
7
+
8
+ # OWASP Secure Coding Gates — o que reprova ou aprova um diff
9
+
10
+ > Fonte: OWASP CheatSheetSeries (github.com/OWASP/CheatSheetSeries) — XSS Prevention,
11
+ > SQL Injection Prevention, Password Storage, Authentication, Session Management,
12
+ > Input Validation e CI/CD Security Cheat Sheets. As regras abaixo são citação/derivação direta
13
+ > dessas folhas, não opinião.
14
+
15
+ ## O problema
16
+
17
+ Code review de segurança vira teatro quando o revisor escreve "valide o input" e "cuidado com XSS"
18
+ e aprova. Isso não é gate — é prosa. Um gate de verdade tem **critério binário**: olha-se o sink, o
19
+ contexto e o construtor da query, e decide-se REPROVA ou APROVA com base num fato verificável no
20
+ diff. Os tells de revisão fraca:
21
+
22
+ - "Sanitize tudo" — sanitização global no input é a **defesa errada**; o certo é encoding por
23
+ **contexto de saída** e parametrização na query. Quem sanitiza no input deixa passar o que importa.
24
+ - Aceitar `escape()` manual de aspas em SQL como mitigação ("STRONGLY DISCOURAGED" pela OWASP).
25
+ - Aprovar hash de senha com SHA-256/MD5 "com salt" achando que resolve.
26
+ - Pinar GitHub Action por tag (`@v4`) achando que é versão fixa — tag é mutável.
27
+ - Confiar em validação client-side de input.
28
+
29
+ ## O conhecimento / os princípios
30
+
31
+ ### 1. XSS — encoding é por CONTEXTO de saída, não global
32
+
33
+ A regra-mãe da OWASP: a mesma variável precisa de encoding **diferente** dependendo de **onde** ela é
34
+ escrita no HTML. Não existe "encoding universal". Cada contexto tem seu sink seguro e seu esquema.
35
+
36
+ | Contexto de saída | Encoding exigido | Sink seguro (aprova) | Sink perigoso (reprova) |
37
+ |---|---|---|---|
38
+ | Corpo HTML (`<div>$var</div>`) | HTML entity: `&`→`&amp;` `<`→`&lt;` `>`→`&gt;` `"`→`&quot;` `'`→`&#x27;` | `.textContent`, `createTextNode()`, `.insertAdjacentText()` | `innerHTML`, `outerHTML`, `document.write()` |
39
+ | Atributo HTML (`<div id="$var">`) | HTML attribute encoding `&#xHH;` **+ aspas obrigatórias** em volta do valor | `.setAttribute(nomeFixo, var)`, `.className` | atributo sem aspas; nome de atributo dinâmico |
40
+ | JavaScript (dentro de `<script>` ou `on*`) | JS encoding `\xHH`, **só em valor entre aspas** | `JSON.parse`/dados, nunca código | `eval()`, `setTimeout(str)`, `setInterval(str)`, gerar código com a var |
41
+ | URL (`href`/`src`) | URL encoding `%HH`, **depois** HTML attribute encoding | `encodeURIComponent(x)` | concatenar em `href` sem validar esquema (`javascript:` passa) |
42
+ | CSS (valor de propriedade) | só em **valor** de propriedade CSS | `style.property = x` | var em nome de propriedade ou seletor; `url(javascript:...)` |
43
+
44
+ **Contextos perigosos — REPROVA sempre que a var entra direto neles** (encoding não protege):
45
+ `<script>` diretamente, dentro de comentário HTML `<!-- -->`, `<style>` direto, nome de handler de
46
+ evento, callback de função.
47
+
48
+ **HTML autorado pelo usuário** (precisa permitir tags): único caminho aprovado é sanitização com
49
+ **DOMPurify** — `let clean = DOMPurify.sanitize(dirty);` — e **nunca** modificar a string depois de
50
+ sanitizada (re-mutação reabre o buraco).
51
+
52
+ Framework com auto-escape (React/Angular/Lit) **aprova por padrão**, mas REPROVA se o diff usa o
53
+ escape-hatch sem sanitização: `dangerouslySetInnerHTML` (React), `bypassSecurityTrustAs*` (Angular),
54
+ `unsafeHTML` (Lit), `inner-h-t-m-l` (Polymer).
55
+
56
+ ### 2. SQL Injection — parametrização, não escaping
57
+
58
+ A defesa primária é **prepared statement com query parametrizada**: o SQL é definido inteiro primeiro,
59
+ e o valor entra como bind variable depois. Concatenar input na string da query é REPROVA imediata.
60
+
61
+ ```java
62
+ // REPROVA — concatenação de input na query
63
+ String query = "SELECT account_balance FROM user_data WHERE user_name = "
64
+ + request.getParameter("customerName");
65
+ Statement statement = connection.createStatement();
66
+ ResultSet rs = statement.executeQuery(query);
67
+
68
+ // APROVA — prepared statement, valor via setString
69
+ String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";
70
+ PreparedStatement pstmt = connection.prepareStatement(query);
71
+ pstmt.setString(1, request.getParameter("customerName"));
72
+ ResultSet rs = pstmt.executeQuery();
73
+ ```
74
+
75
+ ```java
76
+ // ORM também: HQL concatenado REPROVA
77
+ Query bad = session.createQuery("from Inventory where productID='" + userParam + "'");
78
+ // APROVA — named parameter
79
+ Query good = session.createQuery("from Inventory where productID=:productid");
80
+ good.setParameter("productid", userParam);
81
+ ```
82
+
83
+ `escape()` manual de aspas é **"STRONGLY DISCOURAGED"** e "fragile compared to other defenses" — não
84
+ aceitar como mitigação suficiente.
85
+
86
+ **O que NÃO pode ser parametrizado** (bind variable não cobre): **nome de tabela, nome de coluna,
87
+ e ordem `ASC`/`DESC`**. Nesses casos a única defesa aprovada é **allow-list mapeando para valores
88
+ fixos**, nunca passar o input adiante:
89
+
90
+ ```java
91
+ // APROVA — nome de tabela via allow-list (switch), nunca concatenado
92
+ switch (param) {
93
+ case "Value1": tableName = "fooTable"; break;
94
+ case "Value2": tableName = "barTable"; break;
95
+ default: throw new InputValidationException("unexpected value provided for table name");
96
+ }
97
+ // APROVA — sort order mapeado a literal, não concatenado do input
98
+ String sql = "... order by Salary " + (sortOrder ? "ASC" : "DESC");
99
+ ```
100
+
101
+ ### 3. Armazenamento de senha — ordem de algoritmo e parâmetros mínimos
102
+
103
+ Hash genérico (MD5, SHA-1, SHA-256), mesmo com salt, **REPROVA**. A OWASP define ordem de preferência
104
+ e parâmetros numéricos mínimos:
105
+
106
+ | Ordem | Algoritmo | Parâmetros mínimos (OWASP) |
107
+ |---|---|---|
108
+ | 1º | **Argon2id** | `m=19456` (19 MiB), `t=2`, `p=1` (ou m=47104/t=1, ou m=7168/t=5) |
109
+ | 2º | **scrypt** (se Argon2id indisponível) | `N=2^17` (128 MiB), `r=8`, `p=1` |
110
+ | 3º | **bcrypt** (legado) | work factor **≥ 10**; limite de **72 bytes** de senha |
111
+ | 4º | **PBKDF2** (só p/ FIPS-140) | SHA-256: **600.000** iter · SHA-512: **220.000** iter |
112
+
113
+ bcrypt tem dois caveats que REPROVAM se ignorados: o limite de 72 bytes e o **null byte** truncando o
114
+ hash. Pré-hash recomendado: `bcrypt(base64(hmac-sha384(data:$password, key:$pepper)), $salt, $cost)`.
115
+
116
+ **Pepper** (opcional, reforça): é compartilhado entre as senhas, **não** é armazenado junto do hash —
117
+ fica em secrets vault/HSM, separado do banco.
118
+
119
+ ### 4. Autenticação — lockout, mensagens genéricas, comprimento, MFA
120
+
121
+ | Regra | Critério (REPROVA se violado) |
122
+ |---|---|
123
+ | Anti-brute-force | Lockout por **conta** (não por IP). Threshold + janela de observação + duração; ideal **exponencial** (1s dobrando a cada falha). CAPTCHA/throttling complementam. |
124
+ | Mensagem de erro | **Genérica e idêntica** p/ usuário inexistente, senha errada ou conta desabilitada: `"Login failed; Invalid user ID or password."` Revelar qual falhou = enumeração = REPROVA. |
125
+ | Recuperação de senha | Mensagem genérica: `"If that email address is in our database, we will send you an email to reset your password"`. |
126
+ | Comprimento mínimo | **8** com MFA ativo · **15** sem MFA. Máximo **≥ 64** (permitir passphrase). Aceitar Unicode/espaço; sem regra de composição obrigatória. |
127
+ | MFA | "by far the best defense" — teria prevenido **99.9%** dos comprometimentos. Exigir em fluxos sensíveis. |
128
+
129
+ ### 5. Gestão de sessão — atributos de cookie e ciclo de vida
130
+
131
+ Cookie de sessão tem que carregar **todos** estes atributos — falta de qualquer um REPROVA:
132
+
133
+ ```
134
+ Set-Cookie: __Host-SessionID=<value>; Secure; HttpOnly; SameSite=Strict; Path=/
135
+ ```
136
+
137
+ | Atributo | Exigência |
138
+ |---|---|
139
+ | `Secure` | obrigatório — só trafega via HTTPS |
140
+ | `HttpOnly` | obrigatório — JS não lê via `document.cookie` (corta roubo por XSS) |
141
+ | `SameSite` | `Strict` (preferido) ou `Lax`. **Nunca** `None` sem `Secure`. |
142
+ | Prefixo `__Host-` | recomendado p/ session ID (força Secure + Path=/ + sem Domain) |
143
+
144
+ | Propriedade | Critério |
145
+ |---|---|
146
+ | Entropia do session ID | **≥ 64 bits** (≥ 16 chars hex); gerar via **CSPRNG** com saída ≥ 128 bits. Conteúdo "meaningless" — sem PII. |
147
+ | Idle timeout | 2–5 min (alto valor) · 15–30 min (baixo risco) |
148
+ | Absolute timeout | 4–8 h |
149
+ | Regeneração | **Regenerar o ID após login / qualquer mudança de privilégio** (`session_regenerate_id(true)` em PHP). Não regenerar = fixação de sessão = REPROVA. |
150
+ | Logout | Invalidar server-side (framework) **e** expirar o cookie no cliente (`Expires` no passado / `Max-Age=0`); `Cache-Control: no-store`. |
151
+
152
+ ### 6. Validação de input — allow-list, server-side, e não é defesa primária
153
+
154
+ | Princípio | Regra |
155
+ |---|---|
156
+ | Allow-list > deny-list | Defina **o que É permitido**; tudo o mais é negado. Deny-list "é trivial de burlar" e bloqueia input válido (`O'Brian`). Deny-list só como camada extra, nunca primária. |
157
+ | Onde validar | **Server-side, antes de processar.** Validação client-side (JS) "can be circumvented" — não conta como controle. |
158
+ | Syntactic vs semantic | Syntactic: formato (SSN, data, moeda). Semantic: regra de negócio (start < end, preço na faixa). |
159
+ | Escopo | Validação **não** é defesa primária contra XSS/SQLi — "should not be used as the primary method". Reduz impacto, mas **encoding por contexto e parametrização continuam sendo a defesa primária**. Aprovar input validation no lugar de parametrização = REPROVA. |
160
+
161
+ ### 7. Segurança de CI/CD — secrets, least-privilege, pin por SHA
162
+
163
+ | Área | Critério (REPROVA se violado) |
164
+ |---|---|
165
+ | Secrets no código | **Nunca** hardcoded em repo ou config de pipeline. Detectar com **git-leaks/git-secrets**. Não imprimir/logar em console, log ou histórico de comando. |
166
+ | Vault + credenciais curtas | Usar HashiCorp Vault / AWS Secrets Manager / CyberArk. Preferir **credenciais temporárias/OTP** (ou OIDC) a token longevo. |
167
+ | Least privilege | "deny by default". Pipeline com mínimo de permissão; conta de OS do runner **sem root**. Não compartilhar credencial entre pipelines de sensibilidades diferentes. |
168
+ | Pin de dependência/action | **Version pinning + verificação de hash/checksum** contra hash bom conhecido. Em lockfile (`package-lock.json`/`Pipfile.lock`) e **enforce o lockfile**. Para GitHub Actions, pinar por **commit SHA** (tag é mutável → REPROVA pinar por `@v4`). |
169
+ | SCM | Branches protegidos; PR **revisado e não-bypassável** antes do merge; **sem auto-merge**; MFA habilitado; commits **assinados** (Sigstore/Signserver). |
170
+ | Execução | Builds em nós isolados; comunicação SCM↔CI via **TLS 1.2+**; restringir acesso por IP; **aprovação manual** antes de deploy em produção; Docker **sem `--privileged`**. |
171
+ | Logs | Formato parseável (JSON/syslog); **nunca** logar senha/token/API key em texto puro; centralizar em SIEM com alertas. |
172
+
173
+ ## Checklist (responda — qualquer "não" reprova o diff)
174
+
175
+ XSS
176
+ - [ ] Toda var dinâmica usa encoding do **contexto** correto (HTML body / attr / JS / URL / CSS)?
177
+ - [ ] Nenhum `innerHTML`/`document.write`/`eval`/`setTimeout(string)` com dado de usuário?
178
+ - [ ] HTML autorado pelo usuário passa por **DOMPurify** e não é mutado depois?
179
+ - [ ] Nenhum escape-hatch de framework (`dangerouslySetInnerHTML`, `bypassSecurityTrustAs*`) sem sanitização?
180
+
181
+ SQLi
182
+ - [ ] Toda query usa **prepared statement / bind variable** (zero concatenação de input)?
183
+ - [ ] Nome de tabela/coluna/`ASC|DESC` vem de **allow-list**, não do input?
184
+ - [ ] Nenhuma mitigação baseada só em `escape()` de aspas?
185
+
186
+ Auth & senha
187
+ - [ ] Senha hasheada com **Argon2id/scrypt/bcrypt** nos parâmetros mínimos (não SHA/MD5)?
188
+ - [ ] Lockout por conta + mensagem de erro genérica (sem enumeração)?
189
+ - [ ] Mínimo 8 (c/ MFA) ou 15 (s/ MFA), máximo ≥ 64?
190
+
191
+ Sessão
192
+ - [ ] Cookie com `Secure; HttpOnly; SameSite=Strict/Lax` (e `__Host-` no session ID)?
193
+ - [ ] ID com ≥ 128 bits de CSPRNG; **regenerado no login**; invalidado no logout?
194
+ - [ ] Idle e absolute timeout definidos?
195
+
196
+ Input & CI/CD
197
+ - [ ] Validação **allow-list, server-side** — e não substituindo parametrização/encoding?
198
+ - [ ] Zero secret hardcoded; vault + credencial curta/OIDC?
199
+ - [ ] Actions/deps pinadas por **SHA + hash** em lockfile enforçado; runner sem root, sem `--privileged`?
200
+ - [ ] PR revisado não-bypassável, sem auto-merge, aprovação manual p/ produção?
201
+
202
+ ## Tabela de decisão "use X quando Y"
203
+
204
+ | Quando (Y) | Use (X) |
205
+ |---|---|
206
+ | Var vai dentro de `<div>`/corpo HTML | HTML entity encoding ou `.textContent` |
207
+ | Var vai num atributo HTML (`id`, `class`...) | attribute encoding `&#xHH;` + aspas + `setAttribute(nomeFixo, var)` |
208
+ | Var vai dentro de `<script>` / handler `on*` | JS encoding `\xHH` só em valor entre aspas; nunca gerar código |
209
+ | Var vira `href`/`src` | `encodeURIComponent` + attribute encoding; validar esquema (bloquear `javascript:`) |
210
+ | Usuário precisa enviar HTML rico | DOMPurify, sem mutar depois |
211
+ | Valor de usuário num `WHERE`/`VALUES` | prepared statement + bind variable |
212
+ | Parte da query é nome de tabela/coluna/sort | allow-list → literal fixo (switch/map) |
213
+ | Armazenar senha nova | Argon2id (m=19456,t=2,p=1); senha longa → pré-hash bcrypt c/ HMAC |
214
+ | Compliance FIPS-140 impede Argon2 | PBKDF2-HMAC-SHA256 600k iter |
215
+ | Cookie de sessão | `__Host-`/`Secure; HttpOnly; SameSite=Strict; Path=/` |
216
+ | Após autenticar / elevar privilégio | regenerar session ID |
217
+ | Filtrar input de usuário | allow-list, server-side (complemento, não substituto de encoding/parametrização) |
218
+ | Credencial no pipeline | vault + token curto/OIDC, nunca hardcoded |
219
+ | Consumir GitHub Action / dependência externa | pin por commit SHA + hash em lockfile enforçado |
220
+ | Pipeline acessa recurso de plataforma | least privilege, deny-by-default, runner sem root |