primocode 10.19.0 → 11.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 (116) hide show
  1. package/LICENSES/opencode-MIT.txt +24 -0
  2. package/LICENSES/pptxgenjs-MIT.txt +31 -0
  3. package/README.md +16 -3
  4. package/agentes/acessibilidade.md +10 -0
  5. package/agentes/ambiente.md +10 -0
  6. package/agentes/api.md +10 -0
  7. package/agentes/backend.md +10 -0
  8. package/agentes/copy.md +10 -0
  9. package/agentes/css-layout.md +10 -0
  10. package/agentes/dados.md +10 -0
  11. package/agentes/depuracao.md +10 -0
  12. package/agentes/design.md +10 -0
  13. package/agentes/docs.md +10 -0
  14. package/agentes/frontend.md +10 -0
  15. package/agentes/geral/capacidades/arquivos.json +132 -0
  16. package/agentes/geral/capacidades/codigo.json +132 -0
  17. package/agentes/geral/capacidades/dados.json +126 -0
  18. package/agentes/geral/capacidades/depuracao.json +126 -0
  19. package/agentes/geral/capacidades/escrita.json +126 -0
  20. package/agentes/geral/capacidades/git.json +126 -0
  21. package/agentes/geral/capacidades/pesquisa.json +126 -0
  22. package/agentes/geral/capacidades/seguranca.json +132 -0
  23. package/agentes/geral/capacidades/shell.json +132 -0
  24. package/agentes/geral/capacidades/web.json +126 -0
  25. package/agentes/git-pr.md +10 -0
  26. package/agentes/indice.md +86 -0
  27. package/agentes/nextjs.md +10 -0
  28. package/agentes/node.md +10 -0
  29. package/agentes/performance.md +10 -0
  30. package/agentes/pesquisa.md +10 -0
  31. package/agentes/python.md +10 -0
  32. package/agentes/react.md +10 -0
  33. package/agentes/refatoracao.md +10 -0
  34. package/agentes/revisor.md +10 -0
  35. package/agentes/seguranca.md +10 -0
  36. package/agentes/sql.md +10 -0
  37. package/agentes/testes.md +10 -0
  38. package/agentes/typescript.md +10 -0
  39. package/agentes/ux.md +10 -0
  40. package/bin/primocode.js +65 -8
  41. package/editor/helpers/camera_viva.py +28 -2
  42. package/lib/act.js +79 -10
  43. package/lib/agentes/index.js +146 -0
  44. package/lib/agentes/nucleo.js +18 -0
  45. package/lib/catalogo.js +12 -2
  46. package/lib/cli/review.js +64 -0
  47. package/lib/cli/subcomandos.js +34 -0
  48. package/lib/cli/tentativas.js +107 -0
  49. package/lib/cli/util.js +51 -0
  50. package/lib/comandos-extra.js +4 -2
  51. package/lib/editor-pro-maquina.js +165 -0
  52. package/lib/editor-pro.js +10 -7
  53. package/lib/entregaveis/cli.js +26 -0
  54. package/lib/entregaveis/especialistas.js +50 -0
  55. package/lib/entregaveis/nucleo.js +111 -0
  56. package/lib/entregaveis/slides.js +221 -0
  57. package/lib/estudio/materiais.js +172 -0
  58. package/lib/fundo.js +34 -1
  59. package/lib/kits.js +41 -2
  60. package/lib/nomes.js +6 -0
  61. package/lib/placar.js +173 -0
  62. package/lib/plugin/autoteste.js +99 -0
  63. package/lib/plugin/edicao-visual.js +133 -0
  64. package/lib/plugin/pesquisar.js +92 -0
  65. package/lib/plugin/preview-cli.js +38 -0
  66. package/lib/plugin/preview.js +89 -0
  67. package/lib/plugin/tunel.js +27 -0
  68. package/lib/review.js +134 -0
  69. package/lib/session/compactacao.js +124 -0
  70. package/lib/statusline.js +52 -0
  71. package/lib/tool/diagnostico.js +100 -0
  72. package/lib/tool/perguntar.js +60 -0
  73. package/lib/tool/reparar-entrada.js +66 -0
  74. package/lib/tool/web.js +102 -0
  75. package/lib/tools.js +20 -1
  76. package/lib/ui.js +1 -1
  77. package/materiais/saas-linear/base.ts +84 -0
  78. package/materiais/saas-linear/camera/Camera.tsx +38 -0
  79. package/materiais/saas-linear/fontes/OFL-Inter.txt +93 -0
  80. package/materiais/saas-linear/fontes/OFL-Newsreader.txt +93 -0
  81. package/materiais/saas-linear/fontes/inter-400.woff2 +0 -0
  82. package/materiais/saas-linear/fontes/inter-600.woff2 +0 -0
  83. package/materiais/saas-linear/fontes/newsreader-400.woff2 +0 -0
  84. package/materiais/saas-linear/formas/Agenda.tsx +46 -0
  85. package/materiais/saas-linear/formas/CaixaPrompt.tsx +41 -0
  86. package/materiais/saas-linear/formas/CartoesIntegracao.tsx +57 -0
  87. package/materiais/saas-linear/formas/Cursor.tsx +40 -0
  88. package/materiais/saas-linear/formas/Menu.tsx +46 -0
  89. package/materiais/saas-linear/formas/Monitor.tsx +28 -0
  90. package/materiais/saas-linear/paleta.json +18 -0
  91. package/materiais/saas-linear/pecas.json +590 -0
  92. package/materiais/saas-linear/regras.md +40 -0
  93. package/materiais/saas-linear/sons/Som.tsx +39 -0
  94. package/materiais/saas-linear/sons/assinatura.mp3 +0 -0
  95. package/materiais/saas-linear/sons/clique.mp3 +0 -0
  96. package/materiais/saas-linear/sons/impacto.mp3 +0 -0
  97. package/materiais/saas-linear/sons/pop-cartao.mp3 +0 -0
  98. package/materiais/saas-linear/sons/pop-palavra.mp3 +0 -0
  99. package/materiais/saas-linear/sons/subida.mp3 +0 -0
  100. package/materiais/saas-linear/sons/swoosh.mp3 +0 -0
  101. package/materiais/saas-linear/sons/trilha.mp3 +0 -0
  102. package/materiais/saas-linear/sons/whoosh-entra.mp3 +0 -0
  103. package/materiais/saas-linear/sons/whoosh-sai.mp3 +0 -0
  104. package/materiais/saas-linear/texturas/Fundo.tsx +18 -0
  105. package/materiais/saas-linear/texturas/Particulas.tsx +22 -0
  106. package/materiais/saas-linear/tipografia/FraseSerifa.tsx +25 -0
  107. package/materiais/saas-linear/tipografia/Marca.tsx +20 -0
  108. package/materiais/saas-linear/tipografia/MarcaFinal.tsx +22 -0
  109. package/materiais/saas-linear/tipografia/Saudacao.tsx +27 -0
  110. package/materiais/saas-linear/transicoes/Cena.tsx +38 -0
  111. package/materiais/saas-linear/transicoes/CorteImpacto.tsx +16 -0
  112. package/package.json +3 -1
  113. package/skills/deck-conferido/SKILL.md +29 -0
  114. package/vendor/pptxgenjs/carregar.js +12 -0
  115. package/vendor/pptxgenjs/jszip.min.js +13 -0
  116. package/vendor/pptxgenjs/pptxgen.cjs.js +7370 -0
@@ -0,0 +1,126 @@
1
+ {
2
+ "grupo": "depuracao",
3
+ "descricao": "Depuração",
4
+ "itens": [
5
+ {
6
+ "id": "dep-reproduzir",
7
+ "nome": "Reproduzir o bug",
8
+ "receita": "ache o menor comando/entrada que falha; copie a saída exata",
9
+ "prova": "comando que falha 3 de 3 vezes"
10
+ },
11
+ {
12
+ "id": "dep-ler-erro",
13
+ "nome": "Ler uma pilha de erro",
14
+ "receita": "comece pela última linha (o erro), depois o primeiro frame no SEU código",
15
+ "prova": "frase: \"falha em X porque Y\""
16
+ },
17
+ {
18
+ "id": "dep-bisect-comentar",
19
+ "nome": "Isolar por eliminação",
20
+ "receita": "comente metade do código/entrada; o bug sumiu? está na metade tirada; repita",
21
+ "prova": "trecho de até 10 linhas"
22
+ },
23
+ {
24
+ "id": "dep-print-certo",
25
+ "nome": "Logar com método",
26
+ "receita": "log antes e depois da suspeita com valores reais (JSON.stringify), não \"chegou aqui\"",
27
+ "prova": "valor inesperado visto"
28
+ },
29
+ {
30
+ "id": "dep-undefined",
31
+ "nome": "undefined / null inesperado",
32
+ "receita": "ache onde o valor nasce, não onde quebra; confira nome, caminho e forma do dado",
33
+ "prova": "valor aparece no log com o formato certo"
34
+ },
35
+ {
36
+ "id": "dep-async",
37
+ "nome": "Ordem errada de async",
38
+ "receita": "procure await esquecido, promessa solta, callback chamado duas vezes; log com timestamp",
39
+ "prova": "ordem dos logs confere"
40
+ },
41
+ {
42
+ "id": "dep-so-na-minha",
43
+ "nome": "Funciona aqui e não lá",
44
+ "receita": "compare versão, SO, variáveis, dados e rede; liste a 1ª diferença real",
45
+ "prova": "diferença nomeada e igualada"
46
+ },
47
+ {
48
+ "id": "dep-flaky",
49
+ "nome": "Teste intermitente",
50
+ "receita": "rode 20x em laço; procure tempo, ordem, estado compartilhado, rede real",
51
+ "prova": "20 de 20 verdes"
52
+ },
53
+ {
54
+ "id": "dep-memoria",
55
+ "nome": "Vazamento de memória",
56
+ "receita": "meça RSS ao longo do tempo; heap snapshot antes/depois; procure listeners e caches sem limite",
57
+ "prova": "curva de memória estável"
58
+ },
59
+ {
60
+ "id": "dep-loop-infinito",
61
+ "nome": "Programa travado",
62
+ "receita": "kill -QUIT (Node/Java mostra pilha) ou py-spy dump; veja onde está parado",
63
+ "prova": "linha onde trava identificada"
64
+ },
65
+ {
66
+ "id": "dep-regressao",
67
+ "nome": "Quebrou depois de uma mudança",
68
+ "receita": "git diff da última boa; git bisect",
69
+ "prova": "commit culpado"
70
+ },
71
+ {
72
+ "id": "dep-http-erro",
73
+ "nome": "Erro de HTTP",
74
+ "receita": "curl -v: status, headers, corpo; compare com a documentação; token expirado?",
75
+ "prova": "resposta 2xx"
76
+ },
77
+ {
78
+ "id": "dep-cors",
79
+ "nome": "Erro de CORS",
80
+ "receita": "CORS é do SERVIDOR: header Access-Control-Allow-Origin certo e resposta ao OPTIONS",
81
+ "prova": "chamada do navegador passa"
82
+ },
83
+ {
84
+ "id": "dep-import",
85
+ "nome": "Módulo não encontrado",
86
+ "receita": "confira nome, caminho relativo, extensão, ESM x CJS e se o pacote está no package.json",
87
+ "prova": "import resolve"
88
+ },
89
+ {
90
+ "id": "dep-build",
91
+ "nome": "Build falha",
92
+ "receita": "leia o PRIMEIRO erro, não os 50 seguintes; limpe cache só depois de entender",
93
+ "prova": "build termina com código 0"
94
+ },
95
+ {
96
+ "id": "dep-porta",
97
+ "nome": "Servidor não sobe",
98
+ "receita": "erro EADDRINUSE: porta ocupada; EACCES: permissão; veja o log inteiro",
99
+ "prova": "curl na porta responde"
100
+ },
101
+ {
102
+ "id": "dep-lento",
103
+ "nome": "Algo ficou lento",
104
+ "receita": "meça com profiler/time; ache o gargalo antes de mexer",
105
+ "prova": "número antes e depois"
106
+ },
107
+ {
108
+ "id": "dep-encoding",
109
+ "nome": "Acento quebrado",
110
+ "receita": "confira UTF-8 da origem ao destino (arquivo, banco, header Content-Type)",
111
+ "prova": "texto com acento ida e volta"
112
+ },
113
+ {
114
+ "id": "dep-fuso",
115
+ "nome": "Data/hora errada",
116
+ "receita": "tudo em UTC no banco; converta só na borda; confira Date vs timezone",
117
+ "prova": "mesma data em duas zonas"
118
+ },
119
+ {
120
+ "id": "dep-numero",
121
+ "nome": "Conta com decimal errada",
122
+ "receita": "nunca float para dinheiro: inteiro em centavos ou decimal",
123
+ "prova": "0.1+0.2 não aparece no resultado"
124
+ }
125
+ ]
126
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "grupo": "escrita",
3
+ "descricao": "Escrita e comunicação",
4
+ "itens": [
5
+ {
6
+ "id": "esc-readme",
7
+ "nome": "README que funciona",
8
+ "receita": "o que é; instalar; usar; exemplo copiável; problemas comuns",
9
+ "prova": "guia seguido do zero"
10
+ },
11
+ {
12
+ "id": "esc-commit",
13
+ "nome": "Mensagem de commit",
14
+ "receita": "tipo(escopo): o que muda, no imperativo; corpo diz o porquê",
15
+ "prova": "git log legível"
16
+ },
17
+ {
18
+ "id": "esc-email",
19
+ "nome": "E-mail profissional",
20
+ "receita": "assunto com a ação; 1º parágrafo com o pedido; prazo; 5 linhas",
21
+ "prova": "resposta possível em 1 linha"
22
+ },
23
+ {
24
+ "id": "esc-resumo",
25
+ "nome": "Resumo executivo",
26
+ "receita": "conclusão primeiro; 3 pontos; decisão pedida; próximo passo",
27
+ "prova": "leitura de 30 segundos"
28
+ },
29
+ {
30
+ "id": "esc-changelog",
31
+ "nome": "Changelog",
32
+ "receita": "por versão: Adicionado, Mudado, Corrigido; link do PR",
33
+ "prova": "versão e data certas"
34
+ },
35
+ {
36
+ "id": "esc-titulo",
37
+ "nome": "Título que vende",
38
+ "receita": "benefício concreto, número ou prazo; 3 variações",
39
+ "prova": "escolha com motivo"
40
+ },
41
+ {
42
+ "id": "esc-cta",
43
+ "nome": "Botão e chamada",
44
+ "receita": "verbo e o que acontece (\"Criar minha conta\"); sem \"Enviar\"",
45
+ "prova": "texto do botão testado em 390px"
46
+ },
47
+ {
48
+ "id": "esc-erro-msg",
49
+ "nome": "Mensagem de erro",
50
+ "receita": "o que houve; por quê; o que fazer agora; sem culpar a pessoa",
51
+ "prova": "leitura sem jargão"
52
+ },
53
+ {
54
+ "id": "esc-vazio",
55
+ "nome": "Texto de estado vazio",
56
+ "receita": "diga o benefício e a primeira ação; um botão",
57
+ "prova": "tela vazia útil"
58
+ },
59
+ {
60
+ "id": "esc-pitch",
61
+ "nome": "Pitch de 1 minuto",
62
+ "receita": "problema, solução, prova, pedido",
63
+ "prova": "cabe em 150 palavras"
64
+ },
65
+ {
66
+ "id": "esc-post",
67
+ "nome": "Post para rede social",
68
+ "receita": "gancho na 1ª linha; 1 ideia; fecho com pergunta; formato da rede",
69
+ "prova": "gancho em até 12 palavras"
70
+ },
71
+ {
72
+ "id": "esc-roteiro-video",
73
+ "nome": "Roteiro curto",
74
+ "receita": "gancho 3s; promessa; 3 beats; fecho; marcação de imagem",
75
+ "prova": "duração estimada por palavra"
76
+ },
77
+ {
78
+ "id": "esc-tom",
79
+ "nome": "Ajustar tom",
80
+ "receita": "defina 3 adjetivos da marca; reescreva com exemplo antes e depois",
81
+ "prova": "texto antes e depois"
82
+ },
83
+ {
84
+ "id": "esc-cortar",
85
+ "nome": "Cortar 30% do texto",
86
+ "receita": "tire advérbios, repetições e introdução; mantenha números e nomes",
87
+ "prova": "contagem de palavras antes e depois"
88
+ },
89
+ {
90
+ "id": "esc-traduzir",
91
+ "nome": "Traduzir sem perder sentido",
92
+ "receita": "traduza ideia, não palavra; mantenha termos técnicos; glossário",
93
+ "prova": "reler no idioma de destino"
94
+ },
95
+ {
96
+ "id": "esc-ata",
97
+ "nome": "Ata de reunião",
98
+ "receita": "decisões, responsáveis, prazos, pendências, nessa ordem",
99
+ "prova": "cada decisão com dono e data"
100
+ },
101
+ {
102
+ "id": "esc-faq",
103
+ "nome": "FAQ",
104
+ "receita": "as 7 perguntas reais (do suporte), resposta curta primeiro",
105
+ "prova": "cada resposta com até 3 linhas"
106
+ },
107
+ {
108
+ "id": "esc-proposta",
109
+ "nome": "Proposta comercial",
110
+ "receita": "problema do cliente; entrega; prazo; preço; próximos passos",
111
+ "prova": "cliente entende o que compra"
112
+ },
113
+ {
114
+ "id": "esc-doc-api",
115
+ "nome": "Documentar endpoint",
116
+ "receita": "método, URL, parâmetros, exemplo de pedido e resposta, erros",
117
+ "prova": "curl do exemplo funciona"
118
+ },
119
+ {
120
+ "id": "esc-licoes",
121
+ "nome": "Lições aprendidas",
122
+ "receita": "o que aconteceu; por que; o que muda; dono",
123
+ "prova": "3 ações concretas"
124
+ }
125
+ ]
126
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "grupo": "git",
3
+ "descricao": "Git e versionamento",
4
+ "itens": [
5
+ {
6
+ "id": "git-desfazer-commit",
7
+ "nome": "Desfazer o último commit sem perder o trabalho",
8
+ "receita": "git reset --soft HEAD~1 (mantém staged); --mixed tira do stage; nunca --hard sem git stash antes",
9
+ "prova": "git status mostra as mudanças ainda lá"
10
+ },
11
+ {
12
+ "id": "git-corrigir-mensagem",
13
+ "nome": "Corrigir a mensagem do último commit",
14
+ "receita": "git commit --amend -m \"nova\" (só se ainda não foi enviado)",
15
+ "prova": "git log -1 mostra a nova mensagem"
16
+ },
17
+ {
18
+ "id": "git-guardar-trabalho",
19
+ "nome": "Guardar trabalho em andamento",
20
+ "receita": "git stash push -u -m \"nome\"; voltar com git stash pop",
21
+ "prova": "git status limpo e stash list com o item"
22
+ },
23
+ {
24
+ "id": "git-nova-branch",
25
+ "nome": "Criar branch a partir da main atualizada",
26
+ "receita": "git switch main && git pull --rebase && git switch -c tipo/assunto",
27
+ "prova": "git branch --show-current"
28
+ },
29
+ {
30
+ "id": "git-conflito",
31
+ "nome": "Resolver conflito de merge",
32
+ "receita": "git status lista; abra cada arquivo, ache <<<<<<<, decida a intenção dos dois lados, git add, continue",
33
+ "prova": "grep -r '<<<<<<<' vazio e teste verde"
34
+ },
35
+ {
36
+ "id": "git-rebase-limpo",
37
+ "nome": "Atualizar branch com rebase",
38
+ "receita": "git fetch && git rebase origin/main; em conflito, resolva e git rebase --continue",
39
+ "prova": "git log --oneline --graph curto e linear"
40
+ },
41
+ {
42
+ "id": "git-achar-bug",
43
+ "nome": "Achar o commit que quebrou (bisect)",
44
+ "receita": "git bisect start; bisect bad; bisect good <sha>; rode o teste a cada passo; git bisect reset",
45
+ "prova": "SHA culpado e o diff dele"
46
+ },
47
+ {
48
+ "id": "git-quem-mudou",
49
+ "nome": "Ver quem mudou uma linha e por quê",
50
+ "receita": "git blame -L a,b arquivo; git log -S\"texto\" -- arquivo",
51
+ "prova": "SHA e mensagem do commit"
52
+ },
53
+ {
54
+ "id": "git-trazer-commit",
55
+ "nome": "Levar um commit para outra branch",
56
+ "receita": "git cherry-pick <sha>; conflito: resolva e --continue",
57
+ "prova": "git log mostra o commit novo"
58
+ },
59
+ {
60
+ "id": "git-limpar-branches",
61
+ "nome": "Apagar branches já mescladas",
62
+ "receita": "git branch --merged main ",
63
+ "prova": " grep -v main "
64
+ },
65
+ {
66
+ "id": "git-voltar-arquivo",
67
+ "nome": "Restaurar um arquivo de outro commit",
68
+ "receita": "git restore --source=<sha> -- caminho",
69
+ "prova": "git diff mostra só o arquivo esperado"
70
+ },
71
+ {
72
+ "id": "git-remover-segredo",
73
+ "nome": "Segredo foi commitado",
74
+ "receita": "REVOGUE a chave agora; depois git filter-repo ou BFG; force-push só com o aval do dono",
75
+ "prova": "rg pela chave em todo o histórico vazio"
76
+ },
77
+ {
78
+ "id": "git-gitignore",
79
+ "nome": "Parar de rastrear arquivo",
80
+ "receita": "adicione ao .gitignore e git rm --cached caminho",
81
+ "prova": "git status não lista mais o arquivo"
82
+ },
83
+ {
84
+ "id": "git-diff-util",
85
+ "nome": "Ler o diff antes de commitar",
86
+ "receita": "git diff --stat, depois git diff --staged; confira se não há .env, log ou debug esquecido",
87
+ "prova": "resumo do diff lido e sem sobras"
88
+ },
89
+ {
90
+ "id": "git-tag-release",
91
+ "nome": "Marcar versão",
92
+ "receita": "git tag -a v1.2.0 -m \"nota\"; git push origin v1.2.0 (só com pedido)",
93
+ "prova": "git tag -l mostra"
94
+ },
95
+ {
96
+ "id": "git-worktree",
97
+ "nome": "Trabalhar em duas branches ao mesmo tempo",
98
+ "receita": "git worktree add ../pasta branch",
99
+ "prova": "git worktree list"
100
+ },
101
+ {
102
+ "id": "git-descrever-pr",
103
+ "nome": "Escrever descrição de PR",
104
+ "receita": "título curto; o que mudou; por que; como testar; risco; screenshot se UI",
105
+ "prova": "um revisor entende sem abrir o chat"
106
+ },
107
+ {
108
+ "id": "git-historico-arquivo",
109
+ "nome": "Ver a história de um arquivo",
110
+ "receita": "git log --follow -p -- caminho",
111
+ "prova": "commits listados com o diff"
112
+ },
113
+ {
114
+ "id": "git-submodulo",
115
+ "nome": "Atualizar submódulo",
116
+ "receita": "git submodule update --init --recursive",
117
+ "prova": "git submodule status sem '-'"
118
+ },
119
+ {
120
+ "id": "git-reflog",
121
+ "nome": "Recuperar commit perdido",
122
+ "receita": "git reflog; git switch -c recuperada <sha>",
123
+ "prova": "branch nova com o commit"
124
+ }
125
+ ]
126
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "grupo": "pesquisa",
3
+ "descricao": "Pesquisa e investigação",
4
+ "itens": [
5
+ {
6
+ "id": "pes-pergunta",
7
+ "nome": "Afinar a pergunta",
8
+ "receita": "escreva o que muda a decisão; o que já se sabe; o prazo da informação",
9
+ "prova": "pergunta em 1 frase"
10
+ },
11
+ {
12
+ "id": "pes-fonte-primaria",
13
+ "nome": "Achar fonte primária",
14
+ "receita": "doc oficial, repo, changelog, norma, paper; cite URL e data",
15
+ "prova": "link aberto e lido"
16
+ },
17
+ {
18
+ "id": "pes-comparar",
19
+ "nome": "Comparar 2 a 4 opções",
20
+ "receita": "critérios antes; tabela; dado e fonte por célula; recomendação com motivo",
21
+ "prova": "tabela e 1 recomendação"
22
+ },
23
+ {
24
+ "id": "pes-versao",
25
+ "nome": "Versão atual de uma ferramenta",
26
+ "receita": "changelog/releases oficiais, data do último release; confira no terminal (--version)",
27
+ "prova": "versão e data citadas"
28
+ },
29
+ {
30
+ "id": "pes-licenca",
31
+ "nome": "Licença de um repo",
32
+ "receita": "arquivo LICENSE do repo (não o README); MIT/Apache/BSD ok para copiar; GPL/AGPL só ideia",
33
+ "prova": "nome da licença e link do arquivo"
34
+ },
35
+ {
36
+ "id": "pes-numeros",
37
+ "nome": "Número ou estatística",
38
+ "receita": "ache a fonte original, o ano e a metodologia; recuse número sem origem",
39
+ "prova": "fonte e ano ao lado do número"
40
+ },
41
+ {
42
+ "id": "pes-concorrentes",
43
+ "nome": "Mapear concorrentes",
44
+ "receita": "lista de 5, preço, público, diferença, onde são fracos; prints e links",
45
+ "prova": "tabela com links"
46
+ },
47
+ {
48
+ "id": "pes-doc-lib",
49
+ "nome": "Usar biblioteca nova",
50
+ "receita": "leia a doc da versão instalada, exemplo mínimo, rode antes de integrar",
51
+ "prova": "exemplo mínimo rodando"
52
+ },
53
+ {
54
+ "id": "pes-repo-estudo",
55
+ "nome": "Estudar um repositório",
56
+ "receita": "clone raso, README, árvore, ponto de entrada, 1 fluxo ponta a ponta; rode",
57
+ "prova": "resumo e o que rodou"
58
+ },
59
+ {
60
+ "id": "pes-erro-desconhecido",
61
+ "nome": "Erro que não conheço",
62
+ "receita": "busque a mensagem exata entre aspas e o nome da lib; issue do repo primeiro",
63
+ "prova": "issue/commit que explica"
64
+ },
65
+ {
66
+ "id": "pes-contraditorio",
67
+ "nome": "Fontes discordam",
68
+ "receita": "diga que discordam, mostre as duas, explique a diferença (data, escopo)",
69
+ "prova": "divergência explicada"
70
+ },
71
+ {
72
+ "id": "pes-resumir-longo",
73
+ "nome": "Resumir documento grande",
74
+ "receita": "índice primeiro; leia por seção; resumo por seção e síntese de 5 linhas",
75
+ "prova": "resumo cita seções"
76
+ },
77
+ {
78
+ "id": "pes-timeline",
79
+ "nome": "Linha do tempo de um assunto",
80
+ "receita": "eventos com data e fonte, em ordem; marque lacunas",
81
+ "prova": "lista datada"
82
+ },
83
+ {
84
+ "id": "pes-tendencia",
85
+ "nome": "O que é novo na área",
86
+ "receita": "releases e changelogs dos últimos 90 dias; separe hype de adoção",
87
+ "prova": "3 itens com fonte"
88
+ },
89
+ {
90
+ "id": "pes-benchmark",
91
+ "nome": "Comparar desempenho",
92
+ "receita": "mesma máquina, mesmo dado, 5 rodadas, mediana",
93
+ "prova": "tabela com comando"
94
+ },
95
+ {
96
+ "id": "pes-api-terceiro",
97
+ "nome": "Entender API de terceiro",
98
+ "receita": "doc, limites, autenticação, exemplo curl que funciona",
99
+ "prova": "curl real 200"
100
+ },
101
+ {
102
+ "id": "pes-padrao",
103
+ "nome": "Qual o padrão da indústria",
104
+ "receita": "RFC/spec/guia oficial; como os 2 maiores fazem",
105
+ "prova": "norma citada"
106
+ },
107
+ {
108
+ "id": "pes-risco",
109
+ "nome": "Riscos de uma escolha",
110
+ "receita": "liste modos de falha, custo de sair, quem mantém; dê probabilidade e impacto",
111
+ "prova": "risco e mitigação por item"
112
+ },
113
+ {
114
+ "id": "pes-decisao",
115
+ "nome": "Registrar decisão",
116
+ "receita": "contexto, opções, escolha, motivo, quando rever (ADR curto)",
117
+ "prova": "arquivo de 10 linhas"
118
+ },
119
+ {
120
+ "id": "pes-checagem",
121
+ "nome": "Checar uma afirmação",
122
+ "receita": "ache a fonte primária ou desminta; marque [LI] e [NÃO CONFERI]",
123
+ "prova": "veredito com fonte"
124
+ }
125
+ ]
126
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "grupo": "seguranca",
3
+ "descricao": "Segurança",
4
+ "itens": [
5
+ {
6
+ "id": "seg-segredo-no-codigo",
7
+ "nome": "Achar segredo no código",
8
+ "receita": "rg -n \"(api[_-]?key",
9
+ "prova": "secret"
10
+ },
11
+ {
12
+ "id": "seg-revogar-chave",
13
+ "nome": "Chave vazou",
14
+ "receita": "revogue e gere nova ANTES de limpar o git; veja o log de uso",
15
+ "prova": "chave antiga retorna 401"
16
+ },
17
+ {
18
+ "id": "seg-senha",
19
+ "nome": "Guardar senha",
20
+ "receita": "argon2id ou bcrypt com custo; nunca MD5/SHA puro; nunca log de senha",
21
+ "prova": "hash no banco, senha em lugar nenhum"
22
+ },
23
+ {
24
+ "id": "seg-sqli",
25
+ "nome": "Injeção de SQL",
26
+ "receita": "parâmetros (?, $1) sempre; nunca concatenar entrada",
27
+ "prova": "payload ' OR 1=1-- não altera a consulta"
28
+ },
29
+ {
30
+ "id": "seg-xss",
31
+ "nome": "XSS",
32
+ "receita": "escape por contexto; textContent em vez de innerHTML; CSP; sanitize HTML permitido",
33
+ "prova": "<script> digitado aparece como texto"
34
+ },
35
+ {
36
+ "id": "seg-csrf",
37
+ "nome": "CSRF",
38
+ "receita": "SameSite=Lax/Strict, token em formulário, cheque Origin",
39
+ "prova": "POST de outro site rejeitado"
40
+ },
41
+ {
42
+ "id": "seg-ssrf",
43
+ "nome": "SSRF",
44
+ "receita": "nunca buscar URL do usuário sem lista de destinos; bloqueie IPs internos",
45
+ "prova": "http://169.254.169.254 recusado"
46
+ },
47
+ {
48
+ "id": "seg-autorizacao",
49
+ "nome": "Autorização por recurso",
50
+ "receita": "em TODA rota, cheque se o usuário é dono do id pedido (IDOR)",
51
+ "prova": "usuário A não lê dado do B"
52
+ },
53
+ {
54
+ "id": "seg-jwt",
55
+ "nome": "JWT sem erro",
56
+ "receita": "assine com segredo forte, valide alg/exp/aud, curta duração, refresh seguro",
57
+ "prova": "token adulterado recusado"
58
+ },
59
+ {
60
+ "id": "seg-cookies",
61
+ "nome": "Cookies de sessão",
62
+ "receita": "HttpOnly, Secure, SameSite; rotacione ao logar",
63
+ "prova": "flags vistas no DevTools"
64
+ },
65
+ {
66
+ "id": "seg-dependencias",
67
+ "nome": "Dependência vulnerável",
68
+ "receita": "npm audit / pip-audit; atualize a menor versão que corrige; teste",
69
+ "prova": "auditoria sem alta/crítica"
70
+ },
71
+ {
72
+ "id": "seg-upload",
73
+ "nome": "Upload seguro",
74
+ "receita": "tipo pelo conteúdo, limite, nome gerado, fora do diretório público",
75
+ "prova": ".php disfarçado recusado"
76
+ },
77
+ {
78
+ "id": "seg-path-traversal",
79
+ "nome": "Caminho de arquivo",
80
+ "receita": "resolva o caminho e confira que continua dentro da pasta base",
81
+ "prova": "../../etc/passwd recusado"
82
+ },
83
+ {
84
+ "id": "seg-shell-injection",
85
+ "nome": "Injeção de comando",
86
+ "receita": "passe argumentos em array (execFile/subprocess sem shell), nunca monte string",
87
+ "prova": "; rm -rf digitado vira texto"
88
+ },
89
+ {
90
+ "id": "seg-rate-limit",
91
+ "nome": "Limitar tentativas",
92
+ "receita": "por IP e por conta; backoff; bloqueio temporário; avisar o dono",
93
+ "prova": "6ª tentativa recusada"
94
+ },
95
+ {
96
+ "id": "seg-logs-sem-segredo",
97
+ "nome": "Logs sem segredo",
98
+ "receita": "mascare token, senha, cartão, CPF; teste com dado falso",
99
+ "prova": "rg pelo valor de teste nos logs vazio"
100
+ },
101
+ {
102
+ "id": "seg-permissao-minima",
103
+ "nome": "Permissão mínima",
104
+ "receita": "chave com escopo só do que usa; usuário de banco sem DROP; container não-root",
105
+ "prova": "teste de permissão negada"
106
+ },
107
+ {
108
+ "id": "seg-backup-teste",
109
+ "nome": "Backup que restaura",
110
+ "receita": "restaure num ambiente de teste e confira",
111
+ "prova": "restauração concluída"
112
+ },
113
+ {
114
+ "id": "seg-headers-https",
115
+ "nome": "Transporte seguro",
116
+ "receita": "HTTPS em tudo, HSTS, cookies Secure, TLS atual",
117
+ "prova": "curl confere"
118
+ },
119
+ {
120
+ "id": "seg-checklist-deploy",
121
+ "nome": "Checklist antes do deploy",
122
+ "receita": "debug desligado, segredos em variáveis, CORS restrito, erros sem pilha ao usuário, backups",
123
+ "prova": "lista marcada item a item"
124
+ },
125
+ {
126
+ "id": "seg-modelo-ameaca",
127
+ "nome": "Modelo de ameaça rápido",
128
+ "receita": "ativos, quem ataca, por onde entra, o que perde; 5 riscos ordenados",
129
+ "prova": "tabela de 5 linhas com mitigação"
130
+ }
131
+ ]
132
+ }