@fontdata/ai-harness 2.0.0 → 2.1.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 (131) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +9 -2
  3. package/LICENSE +21 -0
  4. package/README.md +174 -140
  5. package/{src → dist}/catalog.js +5 -12
  6. package/dist/cli.js +174 -0
  7. package/dist/comentarios/command.js +74 -0
  8. package/dist/comentarios/instalar.js +33 -0
  9. package/dist/config/config.js +98 -0
  10. package/dist/contratos/artefatos.js +284 -0
  11. package/dist/contratos/eventos.js +103 -0
  12. package/dist/doctor/checks.js +424 -0
  13. package/dist/init.js +240 -0
  14. package/dist/install/atomic.js +51 -0
  15. package/dist/install/flags.js +99 -0
  16. package/dist/install/hooks.js +47 -0
  17. package/dist/install/lock.js +39 -0
  18. package/dist/install/plan.js +209 -0
  19. package/dist/install/selection.js +77 -0
  20. package/dist/install/settings.js +108 -0
  21. package/dist/memoria/indice.js +195 -0
  22. package/dist/migrar/migrar.js +426 -0
  23. package/dist/rastro/command.js +46 -0
  24. package/dist/run.js +86 -0
  25. package/dist/types.js +1 -0
  26. package/dist/update/legado.js +74 -0
  27. package/dist/update/update.js +284 -0
  28. package/package.json +17 -8
  29. package/templates/CLAUDE.md +59 -30
  30. package/templates/agents/auditor-plano.md +42 -0
  31. package/templates/agents/investigador.md +32 -0
  32. package/templates/agents/qa.md +44 -0
  33. package/templates/agents/revisor-testes.md +40 -0
  34. package/templates/catalog.json +24 -61
  35. package/templates/commands/atualizar-deps.md +43 -9
  36. package/templates/commands/diagrama.md +35 -10
  37. package/templates/commands/gerar-env.md +39 -10
  38. package/templates/commands/gerar-testes.md +42 -10
  39. package/templates/commands/git-commit-push.md +0 -0
  40. package/templates/commands/onboarding.md +44 -15
  41. package/templates/commands/refatorar.md +50 -10
  42. package/templates/commands/revisar-pr.md +56 -12
  43. package/templates/commands/sincronizar-claude-md.md +177 -9
  44. package/templates/commands/versao.md +0 -0
  45. package/templates/hooks/comentarios/check.mjs +210 -0
  46. package/templates/hooks/hooks.json +34 -0
  47. package/templates/hooks/lembrete.mjs +29 -0
  48. package/templates/hooks/lib/config.mjs +40 -0
  49. package/templates/hooks/lib/hook.mjs +85 -0
  50. package/templates/hooks/lib/rastro.mjs +130 -0
  51. package/templates/hooks/lib/segredos.mjs +91 -0
  52. package/templates/hooks/lib/temas.mjs +111 -0
  53. package/templates/hooks/lib/trabalho.mjs +94 -0
  54. package/templates/hooks/proteger-contratos.mjs +56 -0
  55. package/templates/hooks/segredo-no-commit.mjs +76 -0
  56. package/templates/hooks/sem-jargao.mjs +58 -0
  57. package/templates/hooks/task-so-fecha-verde.mjs +33 -0
  58. package/templates/legado/manifesto.json +1267 -0
  59. package/templates/rules/comentarios.md +166 -0
  60. package/templates/rules/harness-projeto.md +41 -0
  61. package/templates/skills/auditar-performance/SKILL.md +53 -0
  62. package/templates/skills/auditar-performance/references/pontos-quentes.md +35 -0
  63. package/templates/skills/auditar-performance/templates/relatorios/CLIENTE.md +26 -0
  64. package/templates/skills/auditar-performance/templates/relatorios/TECNICO.md +27 -0
  65. package/templates/skills/auditar-seguranca/SKILL.md +67 -0
  66. package/templates/skills/auditar-seguranca/references/seguranca-tecnica.md +23 -0
  67. package/templates/skills/auditar-seguranca/templates/relatorios/CLIENTE.md +30 -0
  68. package/templates/skills/auditar-seguranca/templates/relatorios/TECNICO.md +38 -0
  69. package/templates/skills/auditar-ui/SKILL.md +64 -0
  70. package/templates/skills/auditar-ui/references/lentes.md +33 -0
  71. package/templates/skills/auditar-ui/templates/relatorios/CLIENTE.md +26 -0
  72. package/templates/skills/auditar-ui/templates/relatorios/TECNICO.md +31 -0
  73. package/templates/skills/evoluir-harness/SKILL.md +81 -0
  74. package/templates/skills/evoluir-harness/references/agent.md +83 -0
  75. package/templates/skills/evoluir-harness/references/auditoria.md +107 -0
  76. package/templates/skills/evoluir-harness/references/code-reviewer.md +68 -0
  77. package/templates/skills/evoluir-harness/references/design-system.md +56 -0
  78. package/templates/skills/evoluir-harness/references/hook.md +95 -0
  79. package/templates/skills/evoluir-harness/references/rule.md +67 -0
  80. package/templates/skills/evoluir-harness/references/skill.md +63 -0
  81. package/templates/skills/executar-plan/SKILL.md +114 -0
  82. package/templates/skills/executar-plan/references/delegacao.md +43 -0
  83. package/templates/skills/executar-plan/references/retomada.md +33 -0
  84. package/templates/skills/executar-plan/templates/BLOQUEIOS.md +30 -0
  85. package/templates/skills/harness/SKILL.md +75 -0
  86. package/templates/skills/harness/references/auto-tag.md +118 -0
  87. package/templates/skills/harness/references/ignores.md +40 -0
  88. package/templates/skills/harness/references/scaffold.md +29 -0
  89. package/templates/skills/harness/references/validar-ideia.md +42 -0
  90. package/templates/skills/memoria/SKILL.md +52 -0
  91. package/templates/skills/nova-tarefa/SKILL.md +97 -0
  92. package/templates/skills/nova-tarefa/references/isso-ja-existe.md +24 -0
  93. package/templates/skills/nova-tarefa/references/regras-do-plano.md +33 -0
  94. package/templates/skills/nova-tarefa/templates/DECISOES.md +20 -0
  95. package/templates/skills/nova-tarefa/templates/PLAN.md +58 -0
  96. package/templates/skills/nova-tarefa/templates/SPEC.md +37 -0
  97. package/templates/skills/resolver-bug/SKILL.md +104 -0
  98. package/templates/skills/resolver-bug/references/relatorio-para-cliente.md +26 -0
  99. package/templates/skills/resolver-bug/templates/PLAN.md +62 -0
  100. package/templates/skills/resolver-bug/templates/relatorios/CLIENTE.md +29 -0
  101. package/templates/skills/resolver-bug/templates/relatorios/TECNICO.md +32 -0
  102. package/bin/cli.js +0 -122
  103. package/src/init.js +0 -317
  104. package/src/installer.js +0 -92
  105. package/src/run.js +0 -99
  106. package/templates/commands/auditar-performance.md +0 -27
  107. package/templates/commands/auditar-seguranca.md +0 -64
  108. package/templates/commands/auditar-ui.md +0 -38
  109. package/templates/commands/codigo-morto.md +0 -22
  110. package/templates/commands/configurar-auto-tag.md +0 -185
  111. package/templates/commands/configurar-comentarios.md +0 -543
  112. package/templates/commands/configurar-orquestrador.md +0 -13
  113. package/templates/commands/corrigir-review.md +0 -11
  114. package/templates/commands/criar-agents.md +0 -42
  115. package/templates/commands/criar-code-reviewer.md +0 -30
  116. package/templates/commands/criar-hooks.md +0 -32
  117. package/templates/commands/criar-rag.md +0 -25
  118. package/templates/commands/criar-rules.md +0 -31
  119. package/templates/commands/criar-skill.md +0 -22
  120. package/templates/commands/design-system.md +0 -27
  121. package/templates/commands/executar-plan.md +0 -36
  122. package/templates/commands/gerar-claude-md.md +0 -66
  123. package/templates/commands/gerar-ignore.md +0 -37
  124. package/templates/commands/gerar-spec.md +0 -33
  125. package/templates/commands/harness.md +0 -34
  126. package/templates/commands/nova-tarefa.md +0 -60
  127. package/templates/commands/resolver-bug.md +0 -25
  128. package/templates/commands/review-por-task.md +0 -16
  129. package/templates/commands/scaffold.md +0 -25
  130. package/templates/commands/validar-commands.md +0 -24
  131. package/templates/commands/validar-ideia.md +0 -36
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: executar-plan
3
+ description: Executa o plano aprovado de um trabalho com sub-agents em paralelo, fase a fase, com TDD, gates de revisor-testes e qa, bloqueios registrados sem parar a execução e retomada de onde parou.
4
+ argument-hint: "[id do trabalho]"
5
+ ---
6
+
7
+ # Executar plano — orquestração com sub-agents
8
+
9
+ Trabalho: $ARGUMENTS
10
+
11
+ Você é o **ORQUESTRADOR**. Você não implementa nada: lê o plano, delega cada task a sub-agents, aplica os gates e
12
+ mantém o estado em disco. **Sempre relate no chat qual agent está ativo**, principalmente nos gates.
13
+
14
+ ## Passo 0 — Identificar o trabalho (somente leitura)
15
+
16
+ 1. Use o id informado; sem id, procure em `docs/trabalhos/` o único `PLAN.md` com status `aguardando-aprovacao`
17
+ ou `em-execucao`. Com mais de um, pergunte qual.
18
+ 2. Leia `SPEC.md`, `PLAN.md`, `DECISOES.md` e `BLOQUEIOS.md` do trabalho, o `CLAUDE.md` da raiz e as rules. Quando
19
+ existir `.claude/rules/harness-projeto.md`, delegue cada task ao agent do domínio, aplique os portões extras
20
+ depois de `revisor-testes` e `qa` e passe aos gates o comando da suíte declarado.
21
+ 3. Confirme que o plano pode ser executado: `auditoria_plano: aprovado` no frontmatter e nenhum achado `contrato-*`
22
+ deste trabalho em `npx @fontdata/ai-harness doctor`. Sem isso, pare e sugira `/nova-tarefa`.
23
+
24
+ ## Passo 1 — Retomada
25
+
26
+ Descubra onde a execução está seguindo `references/retomada.md`: status das tasks no frontmatter, bloqueios
27
+ abertos e eventos do rastro. Apresente ao usuário:
28
+
29
+ - tasks concluídas, pendentes, bloqueadas e a retomar;
30
+ - o plano de execução a partir daqui (fases, paralelismo, agents).
31
+
32
+ **🚦 Aguarde a confirmação** para começar ou retomar.
33
+
34
+ ## Passo 2 — Iniciar
35
+
36
+ 1. No `PLAN.md`, troque apenas a linha `status:` do plano para `em-execucao` (e `atualizado_em`).
37
+ 2. Grave `.ai-harness/estado.json` com `{"trabalho_ativo": "<id>"}` — é por ele que os hooks e o rastro sabem
38
+ qual trabalho está em curso.
39
+
40
+ ## Passo 3 — Executar fase por fase
41
+
42
+ 1. Nunca inicie uma fase antes de todas as tasks da anterior estarem `concluida` (ou `bloqueada`/`pulada` com
43
+ registro).
44
+ 2. Dentro da fase, dispare em paralelo as tasks `paralelizavel: true` cujas dependências estão concluídas.
45
+ 3. Ao delegar uma task, registre o início, troque o status da task para `em-andamento` e passe ao sub-agent o
46
+ contexto de `references/delegacao.md`:
47
+
48
+ ```bash
49
+ npx @fontdata/ai-harness evento task_iniciada --trabalho <id> --task <T-SS.NN> --nome executar-plan
50
+ ```
51
+
52
+ ## Passo 4 — Dúvida vira bloqueio, não pergunta
53
+
54
+ Durante a execução **você não pergunta nada ao usuário**. Se uma task não pode seguir sem uma decisão:
55
+
56
+ 1. Registre o bloqueio em `docs/trabalhos/<id>/BLOQUEIOS.md` (crie a partir de `templates/BLOQUEIOS.md`):
57
+ pergunta, contexto, opções e o que destrava.
58
+ 2. Troque o status da task para `bloqueada` e registre:
59
+
60
+ ```bash
61
+ npx @fontdata/ai-harness evento bloqueio_aberto --trabalho <id> --task <T-SS.NN> --nome executar-plan --dados '{"bloqueio_id":"B-01"}'
62
+ ```
63
+
64
+ 3. **Pule a task e as que dependem dela** e siga com o restante.
65
+
66
+ ## Passo 5 — Gate de cada task
67
+
68
+ Quando o sub-agent disser que terminou:
69
+
70
+ 1. **`revisor-testes`** (no plugin, `fontdata:revisor-testes`): os testes críticos existem e falhariam com a
71
+ implementação errada?
72
+ 2. **`qa`** (no plugin, `fontdata:qa`): critérios de aceite com evidência e suíte completa. O `qa` registra
73
+ `suite_verde` ou `suite_vermelha` no rastro.
74
+ 3. **Portões extras** de `.claude/rules/harness-projeto.md`, na ordem declarada. Com o portão **code-reviewer por
75
+ task em contexto limpo**:
76
+ - delegue ao agent `code-reviewer` do projeto num **sub-agent novo**, passando só a task, o diff e a `SPEC.md` —
77
+ nunca a conversa de implementação (sem o agent, registre um bloqueio sugerindo `/evoluir-harness code-reviewer`);
78
+ - item **BLOQUEANTE** volta ao implementador e, depois da correção, a task passa de novo por `revisor-testes` e
79
+ `qa`; IMPORTANTE e SUGESTÃO entram no relatório da fase;
80
+ - registre o veredito no rastro:
81
+
82
+ ```bash
83
+ npx @fontdata/ai-harness evento agent_veredito --trabalho <id> --task <T-SS.NN> --nome code-reviewer --dados '{"veredito":"aprovado","motivo":"..."}'
84
+ ```
85
+
86
+ 4. Só com os vereditos `APROVADO` (inclusive dos portões extras) e `suite_verde` registrado, troque o status da task
87
+ para `concluida` e registre `task_concluida`. Reprovada: devolva ao implementador com os achados — no máximo
88
+ **2 voltas**; na terceira, vira bloqueio (Passo 4).
89
+
90
+ ## Passo 6 — Gate de fase e progresso
91
+
92
+ Ao fim de cada fase, rode o critério de gate da fase. Só avance se passar; se falhar, registre um bloqueio e
93
+ siga com o que não depende da fase. Exiba: tasks concluídas, bloqueadas (com o motivo), vereditos dos gates e dos
94
+ portões extras (com os achados IMPORTANTE e SUGESTÃO do `code-reviewer`), estado da suíte e a próxima fase.
95
+
96
+ ## Passo 7 — Encerramento
97
+
98
+ 1. Com todas as tasks `concluida`, troque o status do plano para `concluido` e registre:
99
+
100
+ ```bash
101
+ npx @fontdata/ai-harness evento trabalho_concluido --trabalho <id> --nome executar-plan
102
+ ```
103
+
104
+ 2. Grave `{"trabalho_ativo": null}` em `.ai-harness/estado.json`.
105
+ 3. Com bloqueios abertos, apresente cada um ao usuário. Cada resposta vira decisão em `DECISOES.md`
106
+ (`decisao_registrada`), o bloqueio é fechado (`bloqueio_fechado`) e a task volta para `pendente` numa nova
107
+ rodada desta skill.
108
+
109
+ ## Restrições
110
+
111
+ - **Não** modifique `SPEC.md`, `CLAUDE.md` nem o conteúdo do plano — só o status das tasks e do plano.
112
+ - **Não** implemente fora do escopo do plano nem invente solução alternativa para task bloqueada.
113
+ - **Não** feche task sem `suite_verde` no rastro.
114
+ - Conteúdo em **pt-BR**.
@@ -0,0 +1,43 @@
1
+ # Delegação de uma task
2
+
3
+ ## Contexto passado ao sub-agent
4
+
5
+ > Você é responsável pela task **T-SS.NN — [título]** do trabalho `docs/trabalhos/<id>/`.
6
+ >
7
+ > - **Input:** [o que já está pronto]
8
+ > - **Output esperado:** [arquivo, função ou estrutura exata]
9
+ > - **Testes críticos:**
10
+ > - [teste 1]
11
+ > - [teste 2]
12
+ > - **Critério de aceite:** [verificável com sim ou não]
13
+ >
14
+ > Siga as convenções do `CLAUDE.md` e as rules do projeto. Escreva os testes primeiro (RED), confirme que falham,
15
+ > implemente o mínimo para passar (GREEN) e rode a suíte do módulo.
16
+ >
17
+ > **Não** altere `SPEC.md`, `CLAUDE.md` nem o `PLAN.md`: quem atualiza o status é o orquestrador.
18
+ > **Não** pergunte nada ao usuário: se precisar de uma decisão, pare e descreva a dúvida, as opções e o que
19
+ > destrava — o orquestrador registra como bloqueio.
20
+ >
21
+ > Comentários: o padrão é não comentar (bloco interno até 3 linhas, docstring pública até 5, sem cabeçalho de
22
+ > arquivo). **Não** escreva no código o número da task, a fase, o plano, a data nem o que você investigou.
23
+ >
24
+ > Na área de código legado tocada, preserve o padrão local do arquivo; convenções novas valem para arquivo novo.
25
+
26
+ ## Gates depois da implementação
27
+
28
+ 1. **revisor-testes** recebe a task e os arquivos alterados. Veredito `REPROVADO` → volta ao implementador com os
29
+ achados.
30
+ 2. **qa** recebe a task, os critérios de aceite e o comando da suíte completa. Ele registra a suíte no rastro:
31
+ - `suite_verde` com `--resultado ok` e `{"comando", "total", "falhas": 0}`;
32
+ - `suite_vermelha` com `--resultado falha` e o número de falhas.
33
+ 3. **Voltas:** no máximo 2 retornos ao implementador por task. Na terceira reprovação, a task vira bloqueio.
34
+
35
+ ## Fechamento
36
+
37
+ Só com `revisor-testes` e `qa` aprovados e `suite_verde` no rastro:
38
+
39
+ ```bash
40
+ npx @fontdata/ai-harness evento task_concluida --trabalho <id> --task <T-SS.NN> --nome executar-plan
41
+ ```
42
+
43
+ e troque o status da task para `concluida` no frontmatter do `PLAN.md`.
@@ -0,0 +1,33 @@
1
+ # Retomada da execução
2
+
3
+ A execução pode parar a qualquer momento — sessão encerrada, contexto esgotado, máquina desligada. A skill não
4
+ depende de memória da conversa: o estado está em disco.
5
+
6
+ ## De onde vem o estado
7
+
8
+ 1. **Frontmatter do `PLAN.md`:** `status` do plano e `tasks[].status`
9
+ (`pendente`, `em-andamento`, `concluida`, `bloqueada`, `pulada`).
10
+ 2. **`BLOQUEIOS.md`:** bloqueios com `status: aberto` e a task que cada um parou.
11
+ 3. **Rastro do trabalho** (`docs/eventos/<id>.jsonl`, incluindo `<id>.N.jsonl`): último evento de cada task —
12
+ `task_iniciada`, `suite_verde`, `suite_vermelha`, `agent_veredito`, `task_concluida`.
13
+
14
+ Quando frontmatter e rastro divergem, **o frontmatter define o status** e o rastro explica o que aconteceu.
15
+
16
+ ## Como decidir o próximo passo
17
+
18
+ | Situação da task | O que fazer |
19
+ |---|---|
20
+ | `concluida` | Nada |
21
+ | `bloqueada` com bloqueio aberto | Continua parada até a decisão do usuário |
22
+ | `bloqueada` com bloqueio resolvido | Voltar para `pendente` |
23
+ | `em-andamento` sem `task_concluida` no rastro | **Retomar do começo**: o trabalho parcial pode estar inconsistente; confira o `git status` antes |
24
+ | `em-andamento` com `suite_verde` e vereditos aprovados | Faltou só fechar: gravar `concluida` e `task_concluida` |
25
+ | `pendente` com dependências concluídas | Pronta para executar |
26
+ | `pendente` com dependência bloqueada | Continua esperando |
27
+
28
+ A próxima task é a primeira `pendente` cujas dependências estão todas `concluida`, respeitando a ordem das fases.
29
+
30
+ ## Sem rastro nesta máquina
31
+
32
+ O rastro não é versionado por padrão. Num clone novo, confie no frontmatter e trate `em-andamento` como
33
+ "retomar do começo".
@@ -0,0 +1,30 @@
1
+ ---
2
+ schema_versao: 1
3
+ tipo: bloqueios
4
+ id: "{{id}}"
5
+ trabalho_tipo: "{{trabalho_tipo}}"
6
+ titulo: "Bloqueios — {{titulo}}"
7
+ status: aberto
8
+ criado_em: "{{data}}"
9
+ atualizado_em: "{{data}}"
10
+ arquivos: []
11
+ bloqueios:
12
+ - id: B-01
13
+ task: T-01.02
14
+ status: aberto
15
+ aberto_em: "{{data}}"
16
+ resolvido_em: null
17
+ decisao: null
18
+ ---
19
+
20
+ # Bloqueios — {{titulo}}
21
+
22
+ Dúvidas que pararam uma task durante a execução. Cada bloqueio é resolvido por uma decisão registrada em
23
+ `DECISOES.md`; depois disso, a task volta para `pendente`.
24
+
25
+ ## B-01 — Pergunta objetiva que precisa de resposta
26
+
27
+ - **Task:** T-01.02
28
+ - **Contexto:** o que foi encontrado e por que a task não pode seguir.
29
+ - **Opções:** as alternativas possíveis, com a consequência de cada uma.
30
+ - **O que destrava:** a informação ou a escolha necessária.
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: harness
3
+ description: Conduz o setup do harness em ordem, uma etapa por vez com confirmação entre elas (ideia, contexto, ignores, plano, scaffold, montagem, auto-tag, execução). Com argumento, roda só a etapa pedida.
4
+ argument-hint: "[etapa: ideia|contexto|ignores|plano|scaffold|montar|auto-tag|executar]"
5
+ ---
6
+
7
+ # /harness — setup guiado do projeto
8
+
9
+ Etapa ou contexto inicial (opcional): $ARGUMENTS
10
+
11
+ Você conduz a configuração do harness **em ordem**, parando para validar com o usuário antes de cada avanço. Cada
12
+ etapa usa uma skill do catálogo ou uma referência desta skill. **Leia a referência de uma etapa só quando ela
13
+ chegar**, nunca todas de uma vez.
14
+
15
+ ## Etapa isolada
16
+
17
+ Com uma etapa em `$ARGUMENTS` (`ideia`, `contexto`, `ignores`, `plano`, `scaffold`, `montar`, `auto-tag` ou
18
+ `executar`), rode **só essa etapa**, lendo só a referência dela, e encerre com o `doctor`. Sem argumento de etapa,
19
+ siga o fluxo completo abaixo.
20
+
21
+ ## Antes de começar
22
+
23
+ 1. Pergunte se é um **projeto novo** ou **existente** (se não foi dito).
24
+ - **Novo:** todas as etapas.
25
+ - **Existente:** pule `ideia`, `scaffold` e `executar`. Em `contexto` e `ignores`, leve o código atual em conta.
26
+ 2. Em projeto existente, comece por `npx @fontdata/ai-harness doctor` e trate os erros antes de seguir.
27
+ 3. Se o projeto ainda usa o **layout de documentos anterior à 2.1** (pastas separadas por tipo de documento dentro
28
+ de `docs/`), proponha `npx @fontdata/ai-harness migrar`, que move tudo para `docs/trabalhos/<id>/`.
29
+
30
+ ## Sequência
31
+
32
+ As referências ficam na pasta `references` desta skill.
33
+
34
+ 1. **ideia** — siga a referência `validar-ideia.md`: o escopo cabe no tempo previsto com multi-agents? Com veredito
35
+ AJUSTAR ou REPROVAR, pare e ajuste antes de seguir.
36
+ 2. **contexto** — `/sincronizar-claude-md`: gera o `SPEC.md` principal (entrevista de requisitos), o `CLAUDE.md` e
37
+ a seção de orquestração que faltarem, e reconcilia o que já existe.
38
+ 3. **ignores** — siga a referência `ignores.md`: `.claudeignore` e `.gitignore` conforme a stack.
39
+ 4. **plano** — `/nova-tarefa start`: cria o trabalho em `docs/trabalhos/<id>/` com `SPEC.md` e `PLAN.md`
40
+ auditados. **Não** dispare a execução: o scaffold vem antes.
41
+ 5. **scaffold** — siga a referência `scaffold.md`: estrutura inicial, rota `/health` e testes de smoke. Confirme que
42
+ o servidor sobe.
43
+ 6. **montar** — monte o harness com `/evoluir-harness`, nesta ordem:
44
+ 1. `/evoluir-harness` sem argumento — audita a pasta `.claude` e mostra o que falta;
45
+ 2. preencha `.claude/rules/harness-projeto.md` (instalada pelo init): mapa de agents por domínio, portões
46
+ extras, comando da suíte e verificação manual; apague as seções que não valem;
47
+ 3. `/evoluir-harness skill` — skills antes dos agents, que dependem delas;
48
+ 4. `/evoluir-harness agent` — só os agents de domínio: `revisor-testes`, `qa`, `investigador` e
49
+ `auditor-plano` já vêm instalados;
50
+ 5. `/evoluir-harness code-reviewer`;
51
+ 6. `/evoluir-harness rule` — incluindo a de precedência em código legado, quando houver legado;
52
+ 7. `/evoluir-harness hook` — só hooks específicos dos agents; os hooks do harness já estão ativos;
53
+ 8. `/evoluir-harness design-system`, quando o projeto tiver interface.
54
+
55
+ O padrão de comentários (rule, hook e catraca) já vem do `npx @fontdata/ai-harness init`: não recrie. Sugira
56
+ pular o que não fizer sentido para o projeto.
57
+ 7. **auto-tag** (opcional) — siga a referência `auto-tag.md`: GitHub Action que cria a tag quando a versão chega na
58
+ branch de produção.
59
+ 8. **executar** — `/executar-plan <id>`, **só com a confirmação explícita** do usuário.
60
+
61
+ Ao final (fluxo completo ou etapa isolada), rode `npx @fontdata/ai-harness doctor` e mostre o resultado.
62
+
63
+ ## 🚦 GATE entre etapas
64
+
65
+ Ao concluir cada etapa, apresente o que foi feito, o que vem a seguir e **aguarde confirmação explícita** antes de
66
+ avançar. Nenhum arquivo é gravado sem aprovação do conteúdo proposto — nem nesta skill, nem nas referências.
67
+
68
+ ## Regras
69
+
70
+ - **Não avance de etapa sem confirmação explícita.**
71
+ - Relate sempre qual etapa e qual agent estão ativos.
72
+ - Respeite TDD e os gates entre fases.
73
+ - Etapa que não se aplica ao projeto é pulada só com o OK do usuário.
74
+ - Não reescreva `SPEC.md`, `CLAUDE.md` nem planos fora da etapa que cuida deles.
75
+ - Conteúdo gerado em **pt-BR**.
@@ -0,0 +1,118 @@
1
+ # Etapa auto-tag — tag automática quando a versão chega na produção
2
+
3
+ Configure uma **GitHub Action** que **cria a tag** quando um novo número de versão chega na branch de produção
4
+ (`main` por padrão; o usuário pode indicar outra). Separa dois papéis:
5
+
6
+ - **Versionar** — humano, com `/versao` (bump e changelog, com aprovação). Sem tag, sem push.
7
+ - **Taguear e deployar** — automático, por esta Action, quando o arquivo de versão muda na produção.
8
+
9
+ A tag é a fonte única do release e a criação é **idempotente**. Esta etapa **não faz push nem cria tag**.
10
+
11
+ ## Passo 0 — Pré-checagem (somente leitura)
12
+
13
+ 1. `git remote -v`: o remoto é **GitHub**? Se não, avise que GitHub Actions não se aplica e pergunte como seguir.
14
+ 2. Branch de produção: a indicada, senão a padrão do remoto (`git symbolic-ref --short refs/remotes/origin/HEAD`).
15
+ **Confirme com o usuário.**
16
+ 3. Já existe `.github/workflows/auto-tag.yml`? Trate como **ajuste**, preservando o que for local.
17
+
18
+ ## Passo 1 — Fonte de verdade da versão
19
+
20
+ Identifique **todas** as fontes lendo o projeto (não assuma). Para cada uma: arquivo, campo, formato (`X.Y.Z` ou
21
+ `X.Y.Z.W`) e a extração via shell.
22
+
23
+ - **Node / JS-TS:** `package.json` → `jq -r '.version' package.json`; Expo: `jq -r '.expo.version' app.json`.
24
+ - **.NET:** `*.csproj` ou `Directory.Build.props` → `grep -oPm1 '(?<=<Version>)[^<]+' App.csproj`
25
+ (senão `<FileVersion>`).
26
+ - **Delphi:** `*.dproj` (`VerInfo_Keys` com `FileVersion`/`ProductVersion`, ou `MajorVersion`/`MinorVersion`/
27
+ `Release`/`Build`) e/ou constante `.pas` (ex.: `cVersao`). Escolha **uma** fonte canônica e cite o arquivo:linha.
28
+ - `grep -oPm1 'FileVersion=\K[0-9.]+' Projeto.dproj`
29
+ - ou as quatro partes com `grep`/`sed`, concatenadas;
30
+ - ou `grep -oPm1 "cVersao\s*=\s*'\K[0-9.]+" Sobre.pas`
31
+ - **Flutter:** `grep -oPm1 '(?<=^version: )[0-9.+]+' pubspec.yaml`
32
+ - **Python:** `grep -oPm1 '(?<=^version = ")[^"]+' pyproject.toml` (ou `__version__`).
33
+ - **Genérico:** `cat VERSION`, constante `VERSION`/`APP_VERSION`.
34
+
35
+ Sem fonte encontrada, **pergunte** onde a versão é registrada. Determine também:
36
+
37
+ - **App único** → tag `v<versão>`; **monorepo** → `<app>-v<versão>`, um arquivo de versão por app.
38
+ - Se o `/versao` está instalado (é ele quem gera o commit de release que dispara a Action).
39
+ - Como o deploy é disparado pela tag (`deploy-*.yml` ou webhook externo, ex.: Expo/EAS): define o `RELEASE_PAT`.
40
+
41
+ ## Passo 2 — Rascunho da Action (sem gravar)
42
+
43
+ ```yaml
44
+ name: Auto-tag na <BRANCH_PRODUCAO>
45
+
46
+ on:
47
+ push:
48
+ branches: [<BRANCH_PRODUCAO>]
49
+ paths:
50
+ - <ARQUIVO(S)_DE_VERSAO>
51
+
52
+ permissions:
53
+ contents: write
54
+
55
+ jobs:
56
+ auto-tag:
57
+ runs-on: ubuntu-latest
58
+ steps:
59
+ - uses: actions/checkout@v4
60
+ with:
61
+ fetch-depth: 0
62
+ token: ${{ secrets.RELEASE_PAT || github.token }}
63
+
64
+ - name: Criar tag se a versão for nova
65
+ run: |
66
+ set -euo pipefail
67
+ VERSION="$(jq -r '.version' package.json)" # troque pela extração da fonte detectada
68
+ if [ -z "$VERSION" ] || [ "$VERSION" = "null" ]; then
69
+ echo "Não consegui ler a versão"; exit 1
70
+ fi
71
+ TAG="v$VERSION" # monorepo: TAG="<app>-v$VERSION"
72
+ if git rev-parse -q --verify "refs/tags/$TAG" >/dev/null; then
73
+ echo "Tag $TAG já existe, nada a fazer."; exit 0
74
+ fi
75
+ git config user.name "github-actions[bot]"
76
+ git config user.email "github-actions[bot]@users.noreply.github.com"
77
+ git tag -a "$TAG" -m "Release $TAG"
78
+ git push origin "$TAG"
79
+ ```
80
+
81
+ - `paths:` lista **exatamente** os arquivos de versão, para rodar só quando a versão muda.
82
+ - Troque a linha `VERSION=` pela extração da stack; **não** use `jq` fora de JSON (Delphi e .NET usam `grep -oP`/`sed`).
83
+ - Monorepo: loop pelos apps, uma tag por app, com a checagem de idempotência dentro do loop.
84
+ - A checagem `git rev-parse --verify refs/tags/$TAG` é obrigatória: nunca recrie tag.
85
+
86
+ ## Passo 3 — `RELEASE_PAT` (documentar, nunca criar)
87
+
88
+ - O `GITHUB_TOKEN` padrão **não dispara outras Actions**. Se o deploy é um workflow disparado pela tag, a Action
89
+ precisa empurrar a tag com um **`RELEASE_PAT`**.
90
+ - Deploy por webhook externo dispensa o PAT.
91
+ - Como o usuário cria: PAT fine-grained com _Contents: Read and write_ no repositório (ou classic com `repo`), salvo
92
+ em **Settings → Secrets and variables → Actions** como `RELEASE_PAT`.
93
+ - **Nunca** coloque token em arquivo versionado nem crie o secret por conta própria.
94
+
95
+ ## Passo 4 — 🚦 GATE antes de gravar
96
+
97
+ Apresente: branch de produção e formato de tag; fontes de versão e linha de extração; o `auto-tag.yml` completo; se
98
+ o `RELEASE_PAT` é necessário e por quê. **Grave só após aprovação explícita.**
99
+
100
+ ## Passo 5 — Gravar e verificar
101
+
102
+ 1. Escreva `.github/workflows/auto-tag.yml`.
103
+ 2. Crie ou atualize `docs/versionamento-tags.md`: a tag aponta um commit (o commit de release precisa estar na
104
+ produção antes da tag), o fluxo abaixo, a pegadinha `GITHUB_TOKEN` × `RELEASE_PAT` e a tabela app → arquivo de
105
+ versão → formato da tag → workflow de deploy.
106
+ 3. Ajuste docs ou comandos que mandavam criar ou empurrar tag manualmente.
107
+ 4. Valide a sintaxe do YAML. **Não** rode `git push` nem crie tag; sugira o commit
108
+ `chore: Configura auto-tag na <branch> via GitHub Actions` (ou `/git-commit-push`, se instalado).
109
+
110
+ ```
111
+ /versao → push do commit de release → merge na produção → Action cria a tag → deploy dispara pela tag
112
+ ```
113
+
114
+ ## Guardrails
115
+
116
+ - Replique o padrão do projeto (formato de versão e de tag); nunca imponha um novo.
117
+ - Para refazer deploy, use o gatilho manual do workflow de deploy, nunca recrie a tag.
118
+ - A branch de produção é produção: trate-a como tal.
@@ -0,0 +1,40 @@
1
+ # Etapa ignores — `.claudeignore` e `.gitignore`
2
+
3
+ Analise a estrutura do projeto e proponha os arquivos de exclusão de contexto. Se a stack não estiver clara, leia
4
+ o `SPEC.md` e o `CLAUDE.md` da raiz ou pergunte antes.
5
+
6
+ ## `.claudeignore`
7
+
8
+ Seções obrigatórias, nesta ordem:
9
+
10
+ ```
11
+ # Dependências
12
+ [diretórios de dependências da stack]
13
+
14
+ # Build e arquivos gerados
15
+ [diretórios de build e arquivos gerados]
16
+
17
+ # Segredos e variáveis de ambiente
18
+ [todos os padrões de arquivos com credenciais]
19
+
20
+ # Banco de dados local
21
+ [arquivos de banco de desenvolvimento]
22
+
23
+ # Uploads e mídia
24
+ [diretórios de arquivos enviados pelo usuário]
25
+
26
+ # Cache e logs
27
+ [diretórios de cache e arquivos de log]
28
+ ```
29
+
30
+ ## `.gitignore`
31
+
32
+ Versão reforçada cobrindo as mesmas categorias. Se já existir, **reconcilie**: acrescente o que falta e preserve o
33
+ que o projeto já tem. Mantenha versionados `.ai-harness/` e `.claude/`; o rastro em `docs/eventos/` fica fora do
34
+ versionamento por padrão.
35
+
36
+ ## Regras
37
+
38
+ - Seja conservador: em caso de dúvida, exclua.
39
+ - Nunca exclua código-fonte, testes ou documentação (`SPEC.md`, `CLAUDE.md`, `docs/trabalhos/`).
40
+ - 🚦 Mostre o conteúdo proposto dos dois arquivos e grave só após aprovação.
@@ -0,0 +1,29 @@
1
+ # Etapa scaffold — estrutura inicial do projeto
2
+
3
+ Leia o `SPEC.md` e o `CLAUDE.md` da raiz e o `PLAN.md` do trabalho de start em `docs/trabalhos/<id>/` (criado na
4
+ etapa plano, com `/nova-tarefa start`). Sem esse plano, pare e volte à etapa plano.
5
+
6
+ ## O que gerar
7
+
8
+ 1. **Estrutura de pastas** — todos os diretórios definidos na seção de estrutura do `CLAUDE.md`, cada um com um
9
+ `README.md` de uma linha descrevendo sua responsabilidade.
10
+ 2. **Configuração** — os arquivos da stack (`package.json`, `tsconfig.json`, `requirements.txt`, `.env.example` e
11
+ o que mais for necessário). Instale as dependências depois de criá-los. `.gitignore` e `.claudeignore` já vêm da
12
+ etapa ignores: só complemente.
13
+ 3. **Ponto de entrada mínimo** — `main.py`, `index.ts` ou `server.js`, conforme a stack, com o servidor
14
+ inicializado e uma rota `/health` que responde 200. Nenhuma lógica de negócio.
15
+ 4. **Testes** — o framework definido no `CLAUDE.md`, a pasta de testes espelhando a estrutura do projeto e um teste
16
+ de smoke que verifica se o servidor sobe.
17
+
18
+ ## O que não fazer
19
+
20
+ - Nenhuma lógica de negócio, modelo de dados ou endpoint além de `/health`.
21
+ - Nenhum componente de UI além do layout base.
22
+ - Não disparar a execução do plano: isso é a etapa executar, com confirmação.
23
+
24
+ ## Critério de conclusão
25
+
26
+ - 🚦 Antes de gravar, apresente a árvore de pastas e a lista de arquivos e aguarde aprovação.
27
+ - Ao terminar, rode os comandos de verificação do `CLAUDE.md` e confirme que o servidor sobe e o smoke passa.
28
+ - Registre o comando da suíte em `.claude/rules/harness-projeto.md`, na seção "Suíte de testes", ou deixe anotado
29
+ para a etapa montar.
@@ -0,0 +1,42 @@
1
+ # Etapa ideia — validar se o escopo cabe na janela
2
+
3
+ Aja como **arquiteto de software sênior**, especialista em dimensionar escopo de projetos construídos com Claude
4
+ Code e multi-agents. Dê um diagnóstico **honesto e acionável**. Na dúvida, erre para o lado pessimista.
5
+
6
+ ## Contexto
7
+
8
+ - **Ideia:** o que o usuário descreveu ao chamar o `/harness` ou nesta conversa.
9
+ - **Janela de tempo:** se não foi informada, assuma **~4 horas** (formato imersão) e **diga que assumiu**.
10
+ - **Modo de execução:** TDD obrigatório e sub-agents implementando módulos independentes em paralelo.
11
+
12
+ Ideia ausente ou vaga demais: **pare e faça as perguntas mínimas**, uma por vez, antes de avaliar.
13
+
14
+ ## Critérios
15
+
16
+ Para cada um, um veredito curto com a **evidência ou o risco concreto**, sem respostas genéricas.
17
+
18
+ 1. **Decomposição em módulos** — 2 a 4 módulos que agents separados implementariam de forma **genuinamente
19
+ independente** (não tocam os mesmos arquivos nem dependem um do outro para começar). Não dar para quebrar assim
20
+ já é alerta sobre o escopo.
21
+ 2. **Fatia vertical entregável** — o menor caminho ponta a ponta **funcionando** ao fim da janela, mesmo simples.
22
+ Sem fatia demonstrável, o escopo está errado.
23
+ 3. **Complexidade oculta** — autenticação de terceiros, pagamentos, uploads, tempo real, integrações externas,
24
+ processamento pesado, mobile nativo, infra e deploy. Para cada uma presente, diga como **cortar, simular ou
25
+ adiar**.
26
+ 4. **Stack** — está clara e é dominada? Se precisa ser decidida antes, sinalize como pré-requisito bloqueante.
27
+ 5. **Testabilidade (TDD)** — para pelo menos 2 módulos, os **testes críticos** (um de entrada válida e um de caso
28
+ de erro) escritos antes do código. Se o comportamento essencial é difícil de testar, explique por quê.
29
+ 6. **Estimativa realista** — esforço por módulo, soma e comparação com a janela, pessimista onde houver incerteza.
30
+
31
+ ## Veredito
32
+
33
+ Feche com **um** dos três, justificado em até 3 linhas:
34
+
35
+ - ✅ **APROVADO** — cabe na janela. Liste em 1 linha os módulos e a fatia vertical alvo e siga para a etapa
36
+ contexto (`/sincronizar-claude-md`), após confirmação.
37
+ - ✂️ **AJUSTAR** — boa ideia, grande demais. **Reescreva a ideia recortada em 2 a 3 frases**, preservando a
38
+ essência, pronta para virar SPEC. Diga o que ficou de fora (backlog).
39
+ - ❌ **REPROVAR** — inviável mesmo recortada. Explique o porquê e **proponha uma alternativa no mesmo domínio**
40
+ que caiba, com a mesma estrutura de módulos.
41
+
42
+ Com AJUSTAR ou REPROVAR, o `/harness` não avança até o usuário aceitar a nova ideia.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: memoria
3
+ description: Mostra quem já mexeu num arquivo e por quê — trabalhos anteriores, tipo, status e causa raiz — e aponta regressões candidatas de um bug a partir do histórico registrado nos trabalhos do projeto.
4
+ argument-hint: "[caminho de arquivo ou id de um bug]"
5
+ ---
6
+
7
+ # Memória do projeto
8
+
9
+ Pergunta: $ARGUMENTS
10
+
11
+ A memória é um **índice** gerado a partir do frontmatter dos trabalhos em `docs/trabalhos/` e do rastro de eventos.
12
+ Não é busca semântica: toda resposta aponta um trabalho e os documentos dele, e pode ser conferida.
13
+
14
+ ## Passo 1 — Atualizar o índice
15
+
16
+ ```bash
17
+ npx @fontdata/ai-harness memoria
18
+ ```
19
+
20
+ O índice fica em `.ai-harness/memoria/indice.json` (gerado, fora do controle de versão). Artefatos fora do contrato
21
+ aparecem como aviso e não entram no índice.
22
+
23
+ ## Passo 2 — Quem mexeu neste arquivo?
24
+
25
+ ```bash
26
+ npx @fontdata/ai-harness memoria --arquivo <caminho>
27
+ ```
28
+
29
+ A saída lista os trabalhos em ordem cronológica, com tipo, status e causa raiz. Para explicar **por quê**, leia os
30
+ documentos de cada trabalho listado (`SPEC.md`, `PLAN.md`, `DECISOES.md` e relatórios) e cite o trecho.
31
+
32
+ ## Passo 3 — Este bug é regressão?
33
+
34
+ ```bash
35
+ npx @fontdata/ai-harness memoria --regressao <id-do-bug>
36
+ ```
37
+
38
+ Um trabalho anterior que tocou os mesmos arquivos é **coincidência** até que valham as três condições juntas:
39
+
40
+ 1. o arquivo está na **causa raiz** do bug — o campo `arquivos` do trabalho do bug;
41
+ 2. a **ordem cronológica** está estabelecida — o trabalho anterior terminou antes de o bug aparecer;
42
+ 3. a causa raiz foi **comprovada** — `causa_raiz: comprovada` no `PLAN.md` do bug.
43
+
44
+ A saída marca cada trabalho como `candidata` ou `descartada`, com o motivo. Mesmo com uma candidata, confirme lendo o
45
+ que o trabalho anterior mudou antes de afirmar a regressão; sem as três condições, diga explicitamente que é
46
+ coincidência.
47
+
48
+ ## Limites
49
+
50
+ - Só enxerga trabalhos cujo frontmatter segue o contrato e tem `arquivos` preenchido.
51
+ - Sem o rastro nesta máquina, a data de cada trabalho vem da última atualização dos documentos.
52
+ - Conteúdo em **pt-BR**.