@mir-code/specs-platform 1.0.1

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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +460 -0
  3. package/assets/specs-usage-statusline.sh +77 -0
  4. package/assets/template/.agents/README.md +123 -0
  5. package/assets/template/.agents/RUNTIME.md +64 -0
  6. package/assets/template/.agents/agents/discovery-agent.md +15 -0
  7. package/assets/template/.agents/agents/drawing-agent.md +15 -0
  8. package/assets/template/.agents/agents/feature-runner.md +15 -0
  9. package/assets/template/.agents/agents/refinement-runner.md +15 -0
  10. package/assets/template/.agents/agents/refinement.md +15 -0
  11. package/assets/template/.agents/project.md +158 -0
  12. package/assets/template/.agents/scripts/check-commit.mjs +70 -0
  13. package/assets/template/.agents/scripts/validate-spec.mjs +345 -0
  14. package/assets/template/.agents/skills/discovery-agent/SKILL.md +80 -0
  15. package/assets/template/.agents/skills/discovery-writing/SKILL.md +76 -0
  16. package/assets/template/.agents/skills/drawing-agent/SKILL.md +85 -0
  17. package/assets/template/.agents/skills/drawing-writing/SKILL.md +100 -0
  18. package/assets/template/.agents/skills/execution-protocol/SKILL.md +110 -0
  19. package/assets/template/.agents/skills/execution-protocol/references/git.md +104 -0
  20. package/assets/template/.agents/skills/execution-protocol/references/relatorio-halt.md +103 -0
  21. package/assets/template/.agents/skills/feature-runner/SKILL.md +81 -0
  22. package/assets/template/.agents/skills/feature-runner/references/divergencias.md +38 -0
  23. package/assets/template/.agents/skills/feature-runner/references/implementar.md +80 -0
  24. package/assets/template/.agents/skills/feature-runner/references/localizar.md +46 -0
  25. package/assets/template/.agents/skills/mermaid-diagramming/SKILL.md +198 -0
  26. package/assets/template/.agents/skills/prototype-check/SKILL.md +90 -0
  27. package/assets/template/.agents/skills/refinement/SKILL.md +136 -0
  28. package/assets/template/.agents/skills/refinement/references/estrutura.md +27 -0
  29. package/assets/template/.agents/skills/refinement/references/mapear-terreno.md +46 -0
  30. package/assets/template/.agents/skills/refinement/references/validar-renderizacao.md +29 -0
  31. package/assets/template/.agents/skills/refinement-runner/SKILL.md +145 -0
  32. package/assets/template/.agents/skills/requirements-closure/SKILL.md +236 -0
  33. package/assets/template/.agents/skills/spec-writing/SKILL.md +258 -0
  34. package/assets/template/.agents/skills/test-strategy/SKILL.md +176 -0
  35. package/assets/template/.agents/skills/verification/SKILL.md +143 -0
  36. package/assets/template/.specs/config.json +39 -0
  37. package/assets/template/.specs/discoveries/meta.json +4 -0
  38. package/assets/template/.specs/drawings/meta.json +4 -0
  39. package/assets/template/.specs/specs/_templates/task-backend.md +75 -0
  40. package/assets/template/.specs/specs/_templates/task-frontend.md +89 -0
  41. package/assets/template/.specs/specs/_templates/task-integracao.md +72 -0
  42. package/assets/template/.specs/specs/exemplo/feat-exemplo-primeira-task.md +82 -0
  43. package/assets/template/.specs/specs/exemplo/meta.json +8 -0
  44. package/assets/template/.specs/specs/exemplo/overview.md +45 -0
  45. package/assets/template/.specs/specs/meta.json +4 -0
  46. package/assets/template/SPECS.md +213 -0
  47. package/dist/chunk-SOOETS3N.js +3490 -0
  48. package/dist/chunk-SOOETS3N.js.map +1 -0
  49. package/dist/cli.js +15 -0
  50. package/dist/cli.js.map +1 -0
  51. package/dist/index.d.ts +69 -0
  52. package/dist/index.js +16 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/ui/assets/abnfDiagram-VCTEODGH-DYXtkHNq.js +2 -0
  55. package/dist/ui/assets/abnfDiagram-VCTEODGH-DYXtkHNq.js.map +1 -0
  56. package/dist/ui/assets/arc-CJs0gz4E.js +2 -0
  57. package/dist/ui/assets/arc-CJs0gz4E.js.map +1 -0
  58. package/dist/ui/assets/architectureDiagram-5GKGNRK7-Br7ZNRfe.js +37 -0
  59. package/dist/ui/assets/architectureDiagram-5GKGNRK7-Br7ZNRfe.js.map +1 -0
  60. package/dist/ui/assets/blockDiagram-I7D4REHJ-172V7R5o.js +130 -0
  61. package/dist/ui/assets/blockDiagram-I7D4REHJ-172V7R5o.js.map +1 -0
  62. package/dist/ui/assets/c4Diagram-7LVT6UL2-B4AYFhRs.js +39 -0
  63. package/dist/ui/assets/c4Diagram-7LVT6UL2-B4AYFhRs.js.map +1 -0
  64. package/dist/ui/assets/channel-BfWO3B41.js +2 -0
  65. package/dist/ui/assets/channel-BfWO3B41.js.map +1 -0
  66. package/dist/ui/assets/chunk-2Q5K7J3B-B-u7gtZN.js +2 -0
  67. package/dist/ui/assets/chunk-2Q5K7J3B-B-u7gtZN.js.map +1 -0
  68. package/dist/ui/assets/chunk-5VM5RSS4-CjFDq_cq.js +16 -0
  69. package/dist/ui/assets/chunk-5VM5RSS4-CjFDq_cq.js.map +1 -0
  70. package/dist/ui/assets/chunk-F27PBJKO-BDYeB7B8.js +2 -0
  71. package/dist/ui/assets/chunk-F27PBJKO-BDYeB7B8.js.map +1 -0
  72. package/dist/ui/assets/chunk-IMKFNOWR-y2kXPnac.js +232 -0
  73. package/dist/ui/assets/chunk-IMKFNOWR-y2kXPnac.js.map +1 -0
  74. package/dist/ui/assets/chunk-JWPE2WC7-DyCryvDN.js +2 -0
  75. package/dist/ui/assets/chunk-JWPE2WC7-DyCryvDN.js.map +1 -0
  76. package/dist/ui/assets/chunk-POPQ4Y6H-DeaxKHvR.js +2 -0
  77. package/dist/ui/assets/chunk-POPQ4Y6H-DeaxKHvR.js.map +1 -0
  78. package/dist/ui/assets/chunk-SVP7TREG-CmcZEncL.js +89 -0
  79. package/dist/ui/assets/chunk-SVP7TREG-CmcZEncL.js.map +1 -0
  80. package/dist/ui/assets/chunk-TICWLB2K-Df1RRXWR.js +207 -0
  81. package/dist/ui/assets/chunk-TICWLB2K-Df1RRXWR.js.map +1 -0
  82. package/dist/ui/assets/chunk-XXDRQBXY-ClTat8Q0.js +2 -0
  83. package/dist/ui/assets/chunk-XXDRQBXY-ClTat8Q0.js.map +1 -0
  84. package/dist/ui/assets/classDiagram-ZZMXUADV-YTUiu8rF.js +2 -0
  85. package/dist/ui/assets/classDiagram-ZZMXUADV-YTUiu8rF.js.map +1 -0
  86. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-YTUiu8rF.js +2 -0
  87. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-YTUiu8rF.js.map +1 -0
  88. package/dist/ui/assets/cose-bilkent-JH36ORCC-QvqQLoy5.js +2 -0
  89. package/dist/ui/assets/cose-bilkent-JH36ORCC-QvqQLoy5.js.map +1 -0
  90. package/dist/ui/assets/cynefin-OW5HDTMX-BY6w3pAQ.js +179 -0
  91. package/dist/ui/assets/cynefin-OW5HDTMX-BY6w3pAQ.js.map +1 -0
  92. package/dist/ui/assets/cynefinDiagram-5FMLGOSQ-luPP4ha1.js +63 -0
  93. package/dist/ui/assets/cynefinDiagram-5FMLGOSQ-luPP4ha1.js.map +1 -0
  94. package/dist/ui/assets/cytoscape.esm-Ix0LnXOy.js +332 -0
  95. package/dist/ui/assets/cytoscape.esm-Ix0LnXOy.js.map +1 -0
  96. package/dist/ui/assets/dagre-GXQ25YYZ-DhpPwKqq.js +5 -0
  97. package/dist/ui/assets/dagre-GXQ25YYZ-DhpPwKqq.js.map +1 -0
  98. package/dist/ui/assets/defaultLocale-DX6XiGOO.js +2 -0
  99. package/dist/ui/assets/defaultLocale-DX6XiGOO.js.map +1 -0
  100. package/dist/ui/assets/diagram-S7CK7UJ4-B9wvQM0w.js +31 -0
  101. package/dist/ui/assets/diagram-S7CK7UJ4-B9wvQM0w.js.map +1 -0
  102. package/dist/ui/assets/diagram-UQ7AKVKN-gm1M_iZS.js +42 -0
  103. package/dist/ui/assets/diagram-UQ7AKVKN-gm1M_iZS.js.map +1 -0
  104. package/dist/ui/assets/diagram-VSXAHHWV-DkEB6nEx.js +4 -0
  105. package/dist/ui/assets/diagram-VSXAHHWV-DkEB6nEx.js.map +1 -0
  106. package/dist/ui/assets/diagram-VX7I27RA-Ce2F1bHi.js +25 -0
  107. package/dist/ui/assets/diagram-VX7I27RA-Ce2F1bHi.js.map +1 -0
  108. package/dist/ui/assets/diagram-Z3DM3KII-B5ArCh-E.js +25 -0
  109. package/dist/ui/assets/diagram-Z3DM3KII-B5ArCh-E.js.map +1 -0
  110. package/dist/ui/assets/ebnfDiagram-PWID7BFC-DgBM80MD.js +2 -0
  111. package/dist/ui/assets/ebnfDiagram-PWID7BFC-DgBM80MD.js.map +1 -0
  112. package/dist/ui/assets/erDiagram-RLTQ6QDP-C161af8G.js +100 -0
  113. package/dist/ui/assets/erDiagram-RLTQ6QDP-C161af8G.js.map +1 -0
  114. package/dist/ui/assets/flowDiagram-HODETNUW-B8N_WyW5.js +169 -0
  115. package/dist/ui/assets/flowDiagram-HODETNUW-B8N_WyW5.js.map +1 -0
  116. package/dist/ui/assets/ganttDiagram-EL5Y4UJY-CD2RJpTb.js +293 -0
  117. package/dist/ui/assets/ganttDiagram-EL5Y4UJY-CD2RJpTb.js.map +1 -0
  118. package/dist/ui/assets/gitGraphDiagram-WWUBYQGX-BrDAzeFT.js +107 -0
  119. package/dist/ui/assets/gitGraphDiagram-WWUBYQGX-BrDAzeFT.js.map +1 -0
  120. package/dist/ui/assets/index-CVWRdirI.css +32 -0
  121. package/dist/ui/assets/index-DoR97Zqf.js +408 -0
  122. package/dist/ui/assets/index-DoR97Zqf.js.map +1 -0
  123. package/dist/ui/assets/infoDiagram-27XIBGKW-HYGaMzrA.js +3 -0
  124. package/dist/ui/assets/infoDiagram-27XIBGKW-HYGaMzrA.js.map +1 -0
  125. package/dist/ui/assets/init-Gi6I4Gst.js +2 -0
  126. package/dist/ui/assets/init-Gi6I4Gst.js.map +1 -0
  127. package/dist/ui/assets/ishikawaDiagram-5VMMS53U-DXTLlBiw.js +71 -0
  128. package/dist/ui/assets/ishikawaDiagram-5VMMS53U-DXTLlBiw.js.map +1 -0
  129. package/dist/ui/assets/journeyDiagram-3NMN7TZE-DSJ8QN1S.js +140 -0
  130. package/dist/ui/assets/journeyDiagram-3NMN7TZE-DSJ8QN1S.js.map +1 -0
  131. package/dist/ui/assets/kanban-definition-UXKFOSKX-Bm5iz0k3.js +90 -0
  132. package/dist/ui/assets/kanban-definition-UXKFOSKX-Bm5iz0k3.js.map +1 -0
  133. package/dist/ui/assets/katex-C5jXJg4s.js +258 -0
  134. package/dist/ui/assets/katex-C5jXJg4s.js.map +1 -0
  135. package/dist/ui/assets/layout-DfJgW6eG.js +2 -0
  136. package/dist/ui/assets/layout-DfJgW6eG.js.map +1 -0
  137. package/dist/ui/assets/linear-B_kyVotV.js +2 -0
  138. package/dist/ui/assets/linear-B_kyVotV.js.map +1 -0
  139. package/dist/ui/assets/mermaid-block-CUJSBQFx.js +2 -0
  140. package/dist/ui/assets/mermaid-block-CUJSBQFx.js.map +1 -0
  141. package/dist/ui/assets/mermaid.core-ExHG1WnM.js +313 -0
  142. package/dist/ui/assets/mermaid.core-ExHG1WnM.js.map +1 -0
  143. package/dist/ui/assets/mindmap-definition-YA3MSWOX-B1Hh9dQz.js +97 -0
  144. package/dist/ui/assets/mindmap-definition-YA3MSWOX-B1Hh9dQz.js.map +1 -0
  145. package/dist/ui/assets/ordinal-Cboi1Yqb.js +2 -0
  146. package/dist/ui/assets/ordinal-Cboi1Yqb.js.map +1 -0
  147. package/dist/ui/assets/pegDiagram-XKGWAZYB-x242yOd7.js +2 -0
  148. package/dist/ui/assets/pegDiagram-XKGWAZYB-x242yOd7.js.map +1 -0
  149. package/dist/ui/assets/pieDiagram-E7YTZNPT-Dl-YP7Xs.js +40 -0
  150. package/dist/ui/assets/pieDiagram-E7YTZNPT-Dl-YP7Xs.js.map +1 -0
  151. package/dist/ui/assets/quadrantDiagram-AXDQQJYC-CMJ920V9.js +8 -0
  152. package/dist/ui/assets/quadrantDiagram-AXDQQJYC-CMJ920V9.js.map +1 -0
  153. package/dist/ui/assets/railroadDiagram-O6MQD6OU-1kV83y5t.js +2 -0
  154. package/dist/ui/assets/railroadDiagram-O6MQD6OU-1kV83y5t.js.map +1 -0
  155. package/dist/ui/assets/requirementDiagram-BXWQKSXE-BFd8ZZD3.js +85 -0
  156. package/dist/ui/assets/requirementDiagram-BXWQKSXE-BFd8ZZD3.js.map +1 -0
  157. package/dist/ui/assets/sankeyDiagram-P5KCCOFB-C0LZevnf.js +41 -0
  158. package/dist/ui/assets/sankeyDiagram-P5KCCOFB-C0LZevnf.js.map +1 -0
  159. package/dist/ui/assets/sequenceDiagram-WJ2MYXX4-BasIXLJ0.js +163 -0
  160. package/dist/ui/assets/sequenceDiagram-WJ2MYXX4-BasIXLJ0.js.map +1 -0
  161. package/dist/ui/assets/sizeCapture-INFHLROL-qAtnqB7N.js +2 -0
  162. package/dist/ui/assets/sizeCapture-INFHLROL-qAtnqB7N.js.map +1 -0
  163. package/dist/ui/assets/stateDiagram-D77RDMKH-CllWDWZP.js +2 -0
  164. package/dist/ui/assets/stateDiagram-D77RDMKH-CllWDWZP.js.map +1 -0
  165. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-Dwntf8Tk.js +2 -0
  166. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-Dwntf8Tk.js.map +1 -0
  167. package/dist/ui/assets/swimlanes-42K2YHIH-Bgt0KslH.js +2 -0
  168. package/dist/ui/assets/swimlanes-42K2YHIH-Bgt0KslH.js.map +1 -0
  169. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-C9abicdw.js +9 -0
  170. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-C9abicdw.js.map +1 -0
  171. package/dist/ui/assets/timeline-definition-24CTP7MA-BYO2h9Qr.js +121 -0
  172. package/dist/ui/assets/timeline-definition-24CTP7MA-BYO2h9Qr.js.map +1 -0
  173. package/dist/ui/assets/vennDiagram-4TSXK5OY-ZzyiwIUi.js +35 -0
  174. package/dist/ui/assets/vennDiagram-4TSXK5OY-ZzyiwIUi.js.map +1 -0
  175. package/dist/ui/assets/wardleyDiagram-VM6X3IG4-DfjKCK0N.js +79 -0
  176. package/dist/ui/assets/wardleyDiagram-VM6X3IG4-DfjKCK0N.js.map +1 -0
  177. package/dist/ui/assets/xychartDiagram-S5SC5T6Z-Z7daOfmM.js +8 -0
  178. package/dist/ui/assets/xychartDiagram-S5SC5T6Z-Z7daOfmM.js.map +1 -0
  179. package/dist/ui/favicon.svg +6 -0
  180. package/dist/ui/index.html +21 -0
  181. package/package.json +70 -0
  182. package/scripts/copy-ui.mjs +21 -0
  183. package/scripts/fix-node-pty-perms.cjs +73 -0
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: drawing-writing
3
+ description: Como escrever e manter os desenhos de `.specs/drawings/` — os cinco tipos (architecture, flow, sequence, data, state), o frontmatter, a regra de "só o diagrama, sem prosa", e a atualização do `meta.json`. Carregue ao criar ou alterar qualquer arquivo em `.specs/drawings/`.
4
+ ---
5
+
6
+ # Escrita de desenhos
7
+
8
+ Desenhos são a memória visual do projeto: arquitetura, fluxos, sequências, modelo de dados,
9
+ máquinas de estado. Moram em `.specs/drawings/<slug>.md`, **sem subpastas**.
10
+
11
+ A página de um desenho na Specs Platform **é o diagrama**: o canvas ocupa a tela inteira, com
12
+ arrasto e zoom, sem índice e sem corpo de markdown. Nada que você escrever fora do bloco
13
+ ```mermaid aparece para o leitor — só no editor.
14
+
15
+ A sintaxe Mermaid — escolha do tipo de diagrama, layout, paleta, `classDef`, armadilhas de render
16
+ — está na skill `mermaid-diagramming`. Carregue as duas.
17
+
18
+ Um desenho **não altera código de produção**. O output é um `.md` + a entrada no `meta.json`.
19
+
20
+ ## A regra que manda em tudo: só o diagrama
21
+
22
+ O arquivo é **frontmatter + um bloco ```mermaid**. Mais nada.
23
+
24
+ - **Sem `## Visão geral`, sem `## Notas`, sem `## Fontes`, sem parágrafo de introdução.** A página
25
+ não renderiza nada disso.
26
+ - **Sem `# Título`** — o título vem do frontmatter e aparece na topbar.
27
+ - **A legenda vai dentro do diagrama**, como um nó (veja `mermaid-diagramming`). Uma linha de
28
+ citação abaixo do bloco não seria exibida.
29
+ - **Tudo que você precisaria explicar em prosa vira rótulo.** Se o desenho só faz sentido com um
30
+ parágrafo ao lado, o problema é o desenho: nomeie melhor os nós, rotule as arestas, corte o que
31
+ não pertence ao recorte.
32
+ - Contexto, trade-offs e "por quês" que não cabem num rótulo **não pertencem a um desenho** —
33
+ pertencem a uma discovery (`.specs/discoveries/`) ou à spec da task. Linke o desenho de lá.
34
+
35
+ Mais de um bloco ```mermaid no mesmo arquivo é permitido, e a página mostra uma faixa de abas —
36
+ use só quando forem **zooms diferentes da mesma pergunta** (panorama + detalhe). Perguntas
37
+ diferentes viram desenhos diferentes.
38
+
39
+ ## Os cinco tipos
40
+
41
+ O `type` do frontmatter é a **pergunta que o desenho responde**, não o tipo de diagrama Mermaid
42
+ (um `architecture` costuma ser um `flowchart`).
43
+
44
+ | Tipo | Responde | Diagrama típico |
45
+ |---|---|---|
46
+ | `architecture` | Que peças existem e como se conectam? | `flowchart` com subgraphs |
47
+ | `flow` | Que caminho um pedido/dado percorre, com que desvios? | `flowchart` com decisões |
48
+ | `sequence` | Em que ordem, e quem espera por quem? | `sequenceDiagram` |
49
+ | `data` | Como os dados se relacionam? | `erDiagram` / `classDiagram` |
50
+ | `state` | Em que estados uma entidade vive e o que a move? | `stateDiagram-v2` |
51
+
52
+ Se o usuário não indicar o tipo, infira do pedido. Só pergunte quando genuinamente ambíguo.
53
+ **Não invente tipos novos** — a UI só conhece esses cinco e cai em `architecture` no resto.
54
+
55
+ ## Nome do arquivo
56
+
57
+ `kebab-case`, começando com letra minúscula, descrevendo o **assunto**, não o formato:
58
+ `fan-out-sns-sqs`, `ciclo-vida-notificacao`, `retry-e-dlq`, `modelo-notifications`.
59
+
60
+ Não prefixe com o tipo (`arch-`, `seq-`): o badge da sidebar já mostra isso.
61
+
62
+ Se o slug já existir, **pergunte** se é para sobrescrever ou criar com sufixo.
63
+
64
+ ## O arquivo, inteiro
65
+
66
+ ````markdown
67
+ ---
68
+ title: "Fan-out do SNS domain-events"
69
+ type: architecture
70
+ date: 2026-09-01
71
+ ---
72
+
73
+ ```mermaid
74
+ flowchart TB
75
+ ...
76
+ ```
77
+ ````
78
+
79
+ `date` é a data de criação, ISO, sem hora. Não a atualize a cada edição — ela diz quando o desenho
80
+ nasceu, e a sidebar a usa como referência de idade.
81
+
82
+ ## `meta.json`
83
+
84
+ Depois de gravar o arquivo:
85
+
86
+ 1. Leia `.specs/drawings/meta.json`; se não existir, crie com
87
+ `{ "title": "Desenhos", "pages": [] }`.
88
+ 2. Acrescente o slug (sem `.md`) ao fim de `pages` — **sem duplicar** se já estiver lá.
89
+
90
+ A ordem de `pages` é a ordem da sidebar, e o usuário pode reordenar arrastando. Ao acrescentar um
91
+ desenho novo, sempre no fim: reordenar é decisão dele.
92
+
93
+ ## Alterando um desenho existente
94
+
95
+ 1. Leia o arquivo inteiro antes de mexer.
96
+ 2. Preserve o que não foi pedido — título, tipo, `date`, os `classDef`, os outros diagramas.
97
+ 3. Se a mudança acrescenta uma cor ou um tipo de seta, **atualize o nó de legenda** junto.
98
+ 4. Se a mudança troca o `type`, o slug provavelmente também deveria mudar — pergunte.
99
+ 5. Se o pedido é "explica isso aqui", não acrescente prosa ao arquivo: melhore os rótulos, ou
100
+ proponha uma discovery.
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: execution-protocol
3
+ description: Protocolo de execução comum aos agentes que escrevem código — princípios invioláveis (nada de commit sem aprovação, nada de ação destrutiva, escopo fechado), blast radius, verificação do repositório antes de começar, o ciclo halt → ajustar → complete e o formato do relatório de code review. Carregue no início de qualquer execução que produza código.
4
+ ---
5
+
6
+ # Protocolo de execução
7
+
8
+ Vale para `feature-runner` e `refinement-runner`. Eles diferem no que leem antes de implementar;
9
+ daqui para frente, o comportamento é o mesmo.
10
+
11
+ ## Princípios invioláveis
12
+
13
+ 1. **Nunca commite, dê push ou merge sem aprovação explícita no chat.** A execução padrão termina
14
+ **antes** do commit, com o relatório de halt.
15
+ 2. **Nunca use ação destrutiva como atalho.** Proibidos: `git reset --hard`, `push --force`,
16
+ `--no-verify`, `--amend`, `git add -A`, `git add .`, `git clean -f`, `git checkout .`,
17
+ `git stash` como forma de "guardar" trabalho. Deu errado? investigue a causa e reporte.
18
+ 3. **Blast radius.** Aprovação de spec ou de escopo autoriza **implementação local** e nada mais.
19
+ O commit e o push só acontecem após um **"Complete"** explícito, e ele é pedido uma vez só, no
20
+ fim de tudo — "Prosseguir" entre tasks **não** autoriza git. Não autoriza force-push, deploy, migration
21
+ em produção, alteração de infra externa nem nada visível fora do repositório — cada uma dessas
22
+ exige go-ahead explícito **para aquela ação**, mesmo com a execução já aprovada.
23
+ 4. **Não expanda escopo.** Apareceu algo fora do que foi fechado? vira **ponto de atenção** no
24
+ relatório, não código. A heurística: *"isso está na definição da minha task?"* Se não, não toque.
25
+ 5. **Nunca invente convenção, ferramenta ou biblioteca nova** sem aprovação. Use o que o monorepo
26
+ já tem.
27
+ 6. **Respeite as restrições de leitura** dos arquivos de design: o `project.md` indica quais são
28
+ encriptados e só podem ser lidos pela tool do MCP, nunca por `Read`/`Grep`.
29
+ 7. **Nunca crie arquivo `.md` novo** a menos que a atividade peça documentação.
30
+ 8. **Pergunte diante de ambiguidade real** de escopo, design, contrato de API ou biblioteca —
31
+ pergunta estruturada (`AskUserQuestion` / `AskQuestion`) com 2–4 opções concretas. Nunca
32
+ pergunte "posso prosseguir?"; prossiga quando o caminho estiver claro.
33
+ 9. **Opere com paths absolutos** e **responda em português brasileiro**.
34
+
35
+ ## Verificar o repositório (antes de tocar em código)
36
+
37
+ 1. `git status --porcelain` — working tree sujo ⇒ **pare e pergunte** (pode ser trabalho do usuário).
38
+ 2. `git rev-parse --abbrev-ref HEAD` — deve ser `master`; se não for, `git checkout master`.
39
+ 3. `git pull --ff-only origin master`.
40
+ 4. Falhou (não fast-forward, conflito, sem rede) ⇒ **pare e reporte**. Nunca recupere com ação
41
+ destrutiva.
42
+
43
+ Todo o trabalho é feito direto na `master`. Não crie branches.
44
+
45
+ **Deduza o tipo do commit já aqui:** `feat` (mais comum), `fix`, `refactor`, `chore`, `docs`,
46
+ `test`, `infra`. Ambíguo ⇒ pergunte agora, não no fim.
47
+
48
+ ## Convenções de código
49
+
50
+ - **Formatação e tipagem** conforme a seção *Convenções de código* de
51
+ [`.agents/project.md`](../../project.md).
52
+ - **Reusar antes de criar:** utilitários, tipos, componentes, hooks. Procure com `Grep`/`Glob` nos
53
+ diretórios de reuso que o `project.md` lista, antes de escrever qualquer coisa nova.
54
+ - **Idioma do código e do conteúdo** conforme a seção *Identidade* do `project.md` (arquivo, classe,
55
+ função, variável, comentário, rota, coluna seguem o idioma do código; texto de usuário final e
56
+ documentação seguem o idioma do conteúdo).
57
+ - **Comentário só como JSDoc curto** acima de classe/função/interface/tipo exportado. Nada de
58
+ comentário inline narrando passo a passo, banner de seção, JSDoc em constante ou nota de decisão
59
+ (isso vive na spec). Ao editar, remova esse tipo de comentário na região tocada. Exceções:
60
+ `TODO:`/`FIXME:` com contexto real e supressões justificadas.
61
+ - Use as tools dedicadas de leitura/edição (`Read`, `Edit`/`StrReplace`, `Write`, `Glob`, `Grep`).
62
+ Terminal (`Bash`/`Shell`) só para git, gerenciador de pacotes e checagens — nunca `cat`/`grep`/`sed`.
63
+
64
+ ## Gate por task
65
+
66
+ Toda task que produz código testável roda o gate do pacote tocado **antes** de ser dada como
67
+ pronta. Os níveis, os comandos reais e a matriz de cobertura estão na skill **`test-strategy`** —
68
+ carregue-a. Em resumo: rode o gate do pacote tocado (comando no `project.md`), saída ≠ 0 é bloqueio, e a contagem
69
+ de testes não pode cair sem justificativa.
70
+
71
+ ## Verificação antes do halt
72
+
73
+ Entrega com código testável passa pela skill **`verification`** antes do relatório: um sub-agente
74
+ novo re-deriva a cobertura com evidence-or-zero e roda o sensor de discriminação. O bloco que ele
75
+ devolve entra no relatório como seção própria — é o que o code review humano lê no lugar de prosa.
76
+
77
+ ## O ciclo halt → ajustar → complete
78
+
79
+ **O git roda uma vez só, no Complete final.** Não existe commit automático nem commit
80
+ intermediário — em nenhum modo. Entre tasks de uma feature o usuário diz "Prosseguir", e isso não
81
+ toca no git: a task fecha com `status: completed` e o código no working tree.
82
+
83
+ As três entradas possíveis:
84
+
85
+ | Entrada | O que faz |
86
+ |---|---|
87
+ | **"Prosseguir"** | aprova a task atual e avança para a próxima. **Nenhum git.** Só aparece quando ainda há task pendente |
88
+ | **"Ajustar: ..."** | itera na entrega atual e repete o halt, sem commitar |
89
+ | **"Complete"** | **único** ponto em que o git roda: stage, commit e push. Só é oferecido no halt final |
90
+
91
+ Detalhes nas referências:
92
+
93
+ - [Relatório de halt](references/relatorio-halt.md) — o formato, os dois tipos de halt
94
+ (intermediário e final) e o que acrescentar quando a task é visual ou não tem input externo.
95
+ - [Git: stage, commit e push](references/git.md) — o procedimento do Complete e quando ele roda em
96
+ cada modo.
97
+
98
+ **Entrada "Ajustar: ..."** ⇒ confirme a branch, aplique **apenas** o solicitado (não expanda
99
+ escopo), e volte ao halt com o relatório atualizado. Se o ajuste trouxer ambiguidade nova,
100
+ **pergunte antes de implementar**.
101
+
102
+ **"Esquece" / "abortar" / "cancela"** ⇒ pare imediatamente e pergunte se deve reverter o working
103
+ tree. **Não reverta por conta própria.**
104
+
105
+ ## Pausa de sessão
106
+
107
+ Trabalho interrompido no meio (o usuário encerra, o contexto acaba, aparece bloqueio externo):
108
+ antes de sair, substitua **apenas** a seção `## Handoff` de `.specs/STATE.md` pelo snapshot atual.
109
+ O formato e a regra de escrita section-scoped estão no próprio arquivo. **Não toque na seção
110
+ `## Decisions`** — sobrescrever o arquivo inteiro apaga o log de decisões em silêncio.
@@ -0,0 +1,104 @@
1
+ # Git: stage, commit e push
2
+
3
+ Entrada: o usuário respondeu **"Complete"**. Só com aprovação explícita. **Nunca antecipe.**
4
+
5
+ > **O git roda uma vez só, no Complete final.** Não existe commit automático, não existe commit
6
+ > intermediário, não existe commit local "de checkpoint". Em qualquer modo — task avulsa, feature
7
+ > com pausa ou feature sem pausa — nada é commitado enquanto o usuário não disser "Complete" no fim
8
+ > de tudo. Entre tasks o usuário diz **"Prosseguir"**, e isso **não toca no git**.
9
+
10
+ ## Procedimento
11
+
12
+ 1. `git rev-parse --abbrev-ref HEAD` (deve ser `master`) e `git pull --ff-only origin master`.
13
+ Falhou ⇒ pare e reporte.
14
+
15
+ 2. **Atualize o status da task** no frontmatter: `in-progress` → `completed`.
16
+ (O `refinement-runner` não tem arquivo de task — pule este passo e o seguinte.)
17
+
18
+ 3. **Registre a execução** no fim do arquivo da task, no formato da skill `spec-writing` (seção
19
+ `## Execuções`, entrada nova no topo, dentro de um `<details>`). Data via
20
+ `date '+%d/%m/%Y %H:%M'`; tipo = o `<type>` do commit em maiúsculo. Máximo 8 bullets,
21
+ específicos ("Criado `.../health-routes.ts` com rota `GET /health`", não "adicionada rota").
22
+
23
+ 4. **Recalcule o status agregado da feature** lendo o frontmatter de todas as tasks de
24
+ `meta.json.pages`: `completed` se todas; `in-progress` se houver mistura ou alguma em
25
+ andamento; `pending` se todas pendentes. **Não invente** campo `status` no `meta.json` — o
26
+ agregado só aparece na mensagem de commit.
27
+
28
+ 5. **Stage por nome explícito** — nunca `git add -A` nem `git add .`:
29
+
30
+ ```bash
31
+ git add -- <arquivo1> <arquivo2> <task.md>
32
+ ```
33
+
34
+ Confira com `git status` que **só** o esperado está staged.
35
+
36
+ 6. **Valide a mensagem antes de commitar:**
37
+
38
+ ```bash
39
+ node .agents/scripts/check-commit.mjs --message "<type>(<feature-slug>): <título da task>"
40
+ ```
41
+
42
+ Saída ≠ 0 ⇒ corrija o formato antes de seguir.
43
+
44
+ 7. **Commit com HEREDOC:**
45
+
46
+ ```bash
47
+ git commit -m "$(cat <<'EOF'
48
+ <type>(<feature-slug>): <título da task>
49
+
50
+ Refs: .specs/specs/<slug>/feat-<slug>-<task>.md
51
+ Task status: in-progress -> completed
52
+ Feature status: <pending|in-progress|completed>
53
+
54
+ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
55
+ EOF
56
+ )"
57
+ ```
58
+
59
+ Hook de pre-commit falhou ⇒ **corrija e faça um commit novo**. Nunca `--amend` nem
60
+ `--no-verify`. Unidades lógicas claramente separáveis podem virar commits separados
61
+ referenciando a mesma task.
62
+
63
+ 8. **Push — condicional ao modo** (ver abaixo). Falhou ⇒ pare e reporte. Nunca `--force`.
64
+
65
+ 9. **Reporte:**
66
+
67
+ ```markdown
68
+ ## Complete
69
+
70
+ **Branch:** `master` (commit direto)
71
+ **Commit(s):** <hash curto> — <título da task>
72
+ **Push:** origin/master @ <hash curto>
73
+ **Status final da task:** completed
74
+ **Status agregado da feature:** <pending|in-progress|completed>
75
+ ```
76
+
77
+ ## Quando este procedimento roda
78
+
79
+ | Modo | Entre tasks | Git |
80
+ |---|---|---|
81
+ | **Task avulsa** | — | no Complete, ao fim da task |
82
+ | **Feature com pausa** (padrão) | halt de review a cada task; usuário diz **"Prosseguir"** | **uma vez só**, no Complete depois da última task |
83
+ | **Feature sem pausa** | nenhum halt; avança sozinho | **uma vez só**, no Complete depois da última task |
84
+
85
+ Nos dois modos de feature, cada task intermediária termina com `status: completed` no frontmatter,
86
+ o registro em Execuções e o código no **working tree** — e nada mais. O commit cobre a feature
87
+ inteira.
88
+
89
+ > **Por que um commit só.** O revisor avalia a feature de uma vez. Commit intermediário congela
90
+ > decisão que ainda pode mudar no review e obriga commit de correção em cima. E um working tree
91
+ > limpo de commits parciais é trivial de descartar se a feature inteira for rejeitada.
92
+
93
+ Unidades lógicas claramente separáveis podem virar **commits separados no mesmo Complete** — isso é
94
+ organização do diff final, não checkpoint intermediário.
95
+
96
+ Vale sempre: **nenhum commit e nenhum push sem "Complete" explícito no chat.**
97
+
98
+ ## Depois do Complete
99
+
100
+ Reporte e encerre. Não há próxima task a executar: o Complete só acontece quando todas já estão
101
+ `completed` no working tree.
102
+
103
+ Se por algum motivo restar task `pending` em `pages` (o usuário pediu Complete antes do fim),
104
+ **avise explicitamente** quais ficaram de fora e confirme que é intencional antes de commitar.
@@ -0,0 +1,103 @@
1
+ # Relatório de halt
2
+
3
+ Você **termina seu turno** aqui. Nada de `git commit`, `push`, `merge` ou `stash`.
4
+
5
+ O relatório é a pauta do code review — mantenha-o enxuto e específico. Lidere com o que importa,
6
+ sem parágrafo de aquecimento.
7
+
8
+ ## Formato
9
+
10
+ ```markdown
11
+ ## Tarefa pronta para code review
12
+
13
+ **Feature:** <título> (`.specs/specs/<slug>/`)
14
+ **Task:** <título> (`.specs/specs/<slug>/feat-<slug>-<task>.md`)
15
+ **Branch:** `master`
16
+ **Status atualizado:** pending → in-progress (working tree, sem commit)
17
+
18
+ ### Resumo do que foi feito
19
+ - <bullet>
20
+
21
+ ### Arquivos modificados
22
+ - `caminho/arquivo.ts`
23
+ - `.specs/specs/<slug>/feat-<slug>-<task>.md` (status)
24
+
25
+ ### Gate
26
+ - **Comando:** o gate do pacote tocado (ver `project.md`)
27
+ - **Resultado:** <X passou, 0 falhou> · contagem antes <A> → depois <B>
28
+
29
+ ### Verificação independente
30
+ <bloco devolvido pelo Verifier — ver skill `verification`. Sem código testável na entrega,
31
+ escreva: "N/A — a entrega não produz código com teste automatizado.">
32
+
33
+ ### Decisões tomadas durante a execução
34
+ - <decisão e motivo, ou "nenhuma decisão não trivial">
35
+
36
+ ### Pontos para você revisar com atenção
37
+ - <ponto>
38
+
39
+ ### Como revisar
40
+ Abra a task na Specs Platform e clique em **Revisar** (ou vá direto em
41
+ `http://localhost:4321/features/<slug>/<task>/review`): a tela lista os arquivos alterados
42
+ agrupados por natureza, com o diff de cada um e um botão para abrir o arquivo no editor.
43
+
44
+ ### Próximos passos
45
+ <ver "Os dois tipos de halt" abaixo — o bloco muda conforme restem ou não tasks pendentes>
46
+ ```
47
+
48
+ ## Os dois tipos de halt
49
+
50
+ O relatório é o mesmo; o que muda é o bloco final, porque **só o halt final autoriza git**.
51
+
52
+ **Halt intermediário** — feature com pausa, ainda há task pendente em `pages`:
53
+
54
+ ```markdown
55
+ ### Próximos passos
56
+ - **"Prosseguir"** — sigo para a próxima task (`<título da próxima>`). **Nada é commitado**: o
57
+ código fica no working tree e o git só roda no Complete final.
58
+ - **"Ajustar: <descrição>"** — itero nesta task e repito o halt.
59
+
60
+ **Progresso da feature:** <N> de <T> tasks concluídas (working tree, sem commit).
61
+ ```
62
+
63
+ **Halt final** — task avulsa, ou última task da feature:
64
+
65
+ ```markdown
66
+ ### Próximos passos
67
+ - **"Complete"** — commito na `master`, faço push e encerro. Este é o único ponto em que o git
68
+ roda.
69
+ - **"Ajustar: <descrição>"** — itero e repito o halt sem commitar.
70
+ ```
71
+
72
+ Nunca ofereça "Complete" num halt intermediário. Oferecer commit no meio da feature convida
73
+ exatamente o commit parcial que o fluxo existe para evitar.
74
+
75
+ ## Seções condicionais
76
+
77
+ **Task visual** — acrescente: validação contra
78
+ protótipo, testes E2E, matriz de estados cobertos, animações, acessibilidade e divergências do
79
+ refinamento.
80
+
81
+ **Task sem input externo** — inclua a linha: *"Segurança de inputs: N/A — a task não processa
82
+ inputs externos."* A declaração é explícita; omitir a seção em
83
+ silêncio não vale.
84
+
85
+ **Premissas assumidas** — se você fechou alguma ambiguidade por conta própria (ver
86
+ `requirements-closure`), liste-as com o default escolhido e o racional. O revisor precisa poder
87
+ discordar de uma premissa antes que ela vire código consolidado.
88
+
89
+ **Refinement-runner** — deixe explícito que **nenhum arquivo em `.specs/specs/` foi criado ou
90
+ alterado**, e inclua o escopo consolidado (o que entra, o que não entra, critérios de aceite) que
91
+ substitui o documento de spec.
92
+
93
+ ## O diff a revisar
94
+
95
+ Em qualquer modo de feature, o diff é **todo o working tree** — não há commit parcial para separar
96
+ as tasks.
97
+
98
+ **Feature sem pausa:** o halt acontece uma vez só, ao fim da última task, e o relatório traz uma
99
+ seção por task executada.
100
+
101
+ **Feature com pausa:** cada halt intermediário cobre **só a task recém-concluída** (é isso que
102
+ torna a revisão gerenciável), e o halt final resume as tasks anteriores em uma linha cada, detalha
103
+ a última e aponta o diff acumulado para a revisão de conjunto.
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: feature-runner
3
+ description: Executa tarefas documentadas em `.specs/specs/` — localiza a task, carrega contexto, confronta a spec com o código atual, implementa, roda o gate, dispara a verificação independente e PARA antes de commitar para code review humano. Entre tasks reentra em "Prosseguir"; commita e faz push apenas no "Complete" final; "Ajustar: ..." itera sem commitar. Carregue ao executar, implementar, rodar ou tocar uma feature ou task do projeto.
4
+ ---
5
+
6
+ # feature-runner
7
+
8
+ Executa tarefas documentadas em `.specs/specs/`. A stack, os comandos e as convenções do projeto
9
+ estão em [`.agents/project.md`](../../project.md) — leia-o junto com a `execution-protocol`.
10
+
11
+ O ciclo: **localizar → contextualizar → confrontar → implementar → verificar → halt para code
12
+ review → complete**.
13
+
14
+ Equivalências de tools Claude Code ↔ Cursor: `.agents/RUNTIME.md`.
15
+
16
+ ## Ponto de partida obrigatório
17
+
18
+ **Carregue a skill `execution-protocol` antes de qualquer coisa.** Ela detém os princípios
19
+ invioláveis (nada de commit sem aprovação, nada de ação destrutiva, escopo fechado, blast radius),
20
+ a verificação do repositório, as convenções de código e todo o ciclo halt → ajustar → complete.
21
+ Esta skill aqui só cobre o que é específico de executar uma spec.
22
+
23
+ ## Skills por camada
24
+
25
+ | Carregue | Quando |
26
+ |---|---|
27
+ | `execution-protocol` | **sempre**, antes de tudo |
28
+ | `spec-writing` | **sempre** — você lê a task, atualiza `status` e escreve o registro de Execuções no formato dela |
29
+ | `test-strategy` | a entrega produz código testável — define o gate que fecha cada task |
30
+ | `verification` | a entrega produz código com teste automatizado — o Verifier roda antes do halt |
31
+ | `input-security` | o código toca input do usuário (formulário, body, query/path param, cookie, header, upload, webhook) (opcional — só se o projeto adotar essa skill) |
32
+ | `ui-standards` | a task cria ou altera tela/componente (opcional — só se o projeto adotar essa skill) |
33
+ | `prototype-check` | a task tem entregável visual — consulta obrigatória ao protótipo antes de implementar |
34
+
35
+ Task de backend puro: `execution-protocol` + `spec-writing` + `test-strategy` + `verification` +
36
+ `input-security`. As convenções de arquitetura de cada app estão nos respectivos `CLAUDE.md`.
37
+
38
+ ## Fluxo
39
+
40
+ Ponto de entrada pelo contexto: pedido de execução ⇒ **1**; **"Prosseguir"** ⇒ volta ao **3** com a
41
+ próxima task; **"Ajustar: ..."** ⇒ ciclo de ajuste do `execution-protocol`; **"Complete"** ⇒ **7**.
42
+
43
+ 1. **Localizar a task e carregar contexto** → [localizar.md](references/localizar.md)
44
+ 2. **Verificar o repositório** → `execution-protocol`
45
+ 3. **Confrontar a spec com o código atual** → [divergencias.md](references/divergencias.md)
46
+ 4. **Marcar `in-progress` e implementar** → [implementar.md](references/implementar.md)
47
+ 5. **Gate + verificação independente** → skills `test-strategy` e `verification`
48
+ 6. **Halt** → [relatorio-halt.md](../execution-protocol/references/relatorio-halt.md)
49
+ — intermediário (resta task pendente) oferece "Prosseguir"; final oferece "Complete"
50
+ 7. **Complete, só no fim de tudo** → [git.md](../execution-protocol/references/git.md)
51
+
52
+ Leia cada referência **por completo** no momento em que a fase começa — não antecipe todas.
53
+
54
+ ## Modo feature
55
+
56
+ Quando o pedido é a feature inteira, execute as tasks na ordem de `meta.json.pages`, pulando as
57
+ `completed`. Só pare quando todas estiverem `completed` ou o usuário abortar.
58
+
59
+ **Por padrão há pausa de review a cada task:** você entrega o relatório de halt daquela task e
60
+ aguarda **"Prosseguir"** (avança para a próxima) ou **"Ajustar: ..."** (itera nesta). O usuário
61
+ pode dispensar a pausa, e aí você encadeia as tasks sozinho até a última.
62
+
63
+ **Em nenhum dos dois o git roda no meio.** Cada task intermediária fecha com `status: completed` no
64
+ frontmatter, o registro em Execuções e o código no **working tree**. O commit e o push acontecem
65
+ **uma vez só**, no "Complete" depois da última task. A pausa muda quanto você revisa pelo caminho,
66
+ nunca quanto é commitado.
67
+
68
+ Não ofereça "Complete" enquanto restar task pendente — ver
69
+ [relatorio-halt.md](../execution-protocol/references/relatorio-halt.md).
70
+
71
+ ## Specs Platform
72
+
73
+ As docs são renderizadas pela Specs Platform (`@mir-code/specs-platform`) — `specs start` na raiz
74
+ sobe a plataforma localmente. O botão "Rodar Tarefa" da UI dispara esta skill em um terminal novo, conforme
75
+ `.specs/config.json`. Problema operacional da plataforma (não sobe, porta ocupada, botão não
76
+ dispara): consulte o **Troubleshooting** de `SPECS.md` antes de mexer na configuração.
77
+
78
+ ## Notas
79
+
80
+ - Chame tools em paralelo quando forem independentes.
81
+ - Mantenha o relatório de halt enxuto — ele é a pauta do code review.
@@ -0,0 +1,38 @@
1
+ # Confrontar a spec com o código atual
2
+
3
+ Antes de tocar código: o escopo ainda faz sentido? há decisão em aberto? há melhoria óbvia que vale
4
+ propor?
5
+
6
+ O refinamento foi escrito **antes** e pode ter envelhecido. **Não o siga cegamente.**
7
+
8
+ ## Divergências que exigem parada
9
+
10
+ - decisão que contradiz código já mergeado (ex.: manda criar `UserRoleDialog`, mas já existe
11
+ `EditUserModal` mais completo);
12
+ - decisão que contradiz o protótipo atual;
13
+ - biblioteca ou primitivo que não cabe mais (deprecated, ou o projeto padronizou outro);
14
+ - estrutura de rotas/arquivos que viola convenção recente;
15
+ - critério que referencia algo inexistente — salvo se a task for justamente criar esse algo;
16
+ - padrão obsoleto (ex.: `unstable_cache` onde a versão atual usa `cacheTag`);
17
+ - abordagem que a doc atual (context7) desencoraja;
18
+ - critério que conflita com uma decisão `active` de `.specs/STATE.md`.
19
+
20
+ Para cada uma, `AskUserQuestion` com três coisas:
21
+
22
+ 1. **o que a spec diz** — citando o trecho;
23
+ 2. **o que existe hoje** — com evidência (`file:line`);
24
+ 3. **2–3 opções** — seguir assim mesmo, adaptar, refinar antes de executar — **mais a sua
25
+ recomendação**.
26
+
27
+ Divergência pequena e previsível (um import que mudou de lugar) você ajusta sozinho e sinaliza no
28
+ relatório de halt.
29
+
30
+ ## Lacunas de precisão no critério
31
+
32
+ Critério de aceite sem desfecho preciso ("trata o erro graciosamente", "exibe mensagem amigável")
33
+ não dá para testar — a asserção vira vaga e passa com implementação errada.
34
+
35
+ Encontrou? **não invente o valor.** Pergunte qual é o desfecho esperado (status, campo, mensagem,
36
+ estado persistido) e registre a resposta como decisão no relatório. Se o usuário disser "você
37
+ decide", registre como **premissa** com o default escolhido e o racional, no formato da skill
38
+ `requirements-closure`.
@@ -0,0 +1,80 @@
1
+ # Implementar
2
+
3
+ ## 1. Marcar `in-progress`
4
+
5
+ `Edit` no frontmatter da task: `status: pending` → `status: in-progress`. **Não commite** — a
6
+ mudança entra no commit final. Não mexa no `meta.json`.
7
+
8
+ ## 2. Declarar o plano antes de escrever código
9
+
10
+ Antes da primeira edição, diga explicitamente:
11
+
12
+ - **Premissas** — o que você está assumindo; qualquer incerteza restante;
13
+ - **Arquivos a tocar** — só os que a task exige;
14
+ - **Como vai verificar** — qual gate, qual comando, o que prova que funcionou.
15
+
16
+ Não prossiga sem isso. É o que impede a implementação de crescer sem controle.
17
+
18
+ ## 3. Testes antes da implementação
19
+
20
+ Se a task produz código com tipo de teste exigido (ver matriz da skill `test-strategy`):
21
+
22
+ 1. Escreva os testes **derivados dos critérios de aceite da spec**, não do código.
23
+ 2. Cada critério vira pelo menos uma asserção cujo **valor afirmado** é o desfecho que a spec
24
+ define.
25
+ 3. Onde a spec não define valor preciso, registre como **lacuna de precisão** e pergunte — nunca
26
+ escreva asserção vaga que passa em silêncio.
27
+ 4. Casos de borda listados na spec viram casos de teste.
28
+
29
+ **Restrições duras (integridade de teste):** nunca enfraqueça asserção, nunca delete ou pule caso
30
+ de teste, nunca use `.skip`/`.todo` para contornar vermelho. Teste genuinamente errado ⇒ **pare e
31
+ pergunte** antes de mexer.
32
+
33
+ ## 4. Implementar
34
+
35
+ Satisfaça o **Escopo** e os **critérios de aceite** dos blocos do detalhamento técnico. Escreva o
36
+ mínimo que passa nos testes e atende ao gate — melhoria estrutural fica para task de refactor.
37
+
38
+ As convenções (formatação, tipagem, reuso antes de criação, idioma do código, política de
39
+ comentários, tools de edição) estão na skill `execution-protocol`.
40
+
41
+ **Frontend:** consulte o protótipo antes de implementar, conforme `prototype-check`. Se o projeto
42
+ adotar as skills `ui-standards` e `input-security`, siga-as também.
43
+
44
+ ## 5. Gate
45
+
46
+ Rode o gate do pacote tocado, com o comando que o `project.md` define para o nível do gate
47
+ (ver a skill `test-strategy`).
48
+
49
+ Saída ≠ 0 ⇒ **pare, corrija, rode de novo**. Não siga com vermelho. Confira que a contagem de
50
+ testes não caiu.
51
+
52
+ O comando de lint + format ao final é barato e recomendado. O build completo do repositório só
53
+ quando a task exigir — é caro em monorepo. Ambos estão no `project.md`.
54
+
55
+ ## 6. Revisão pós-gate
56
+
57
+ 1. **Test Adequacy Review** (skill `test-strategy`, Checks A–D): cobertura com `file:line`,
58
+ litmus anti-raso, mapeamento reverso, conformidade. Qualquer falha ⇒ reescreva e rode o gate de
59
+ novo.
60
+ 2. **Divergiu da spec?** marque no código:
61
+ ```ts
62
+ // SPEC_DEVIATION: <o que divergiu>
63
+ // Motivo: <por que foi necessário>
64
+ ```
65
+ e registre no relatório de halt.
66
+ 3. **Complexidade:** um engenheiro sênior chamaria isso de complicado demais? Sim ⇒ simplifique e
67
+ rode o gate de novo.
68
+ 4. **Escopo:** você tocou algum arquivo que não estava no plano do passo 2? Se sim, justifique no
69
+ relatório ou reverta.
70
+
71
+ ## 7. Guarda de escopo durante a implementação
72
+
73
+ Você vai notar coisas que dariam para melhorar. **Não aja sobre elas.**
74
+
75
+ - **Bug** ⇒ traga para o usuário no relatório, ou registre como task separada.
76
+ - **Melhoria** ⇒ vira "ponto de atenção" no relatório.
77
+ - **Relacionado à task atual** ⇒ só entra se estiver nos critérios de aceite.
78
+
79
+ Nunca "já que estou aqui". Scope creep durante a implementação é o principal destruidor de
80
+ qualidade de review.
@@ -0,0 +1,46 @@
1
+ # Localizar a task e carregar contexto
2
+
3
+ ## 1. Casar a entrada com uma `(feature, task)`
4
+
5
+ `Glob` em `.specs/specs/*/meta.json`, leia os `meta.json` e case a entrada do usuário — ela pode vir
6
+ como slug, título, nome de arquivo ou descrição livre.
7
+
8
+ | Situação | O que fazer |
9
+ |---|---|
10
+ | Entrada identifica a feature **e** o usuário pediu a feature inteira | modo feature, a partir da primeira `pending` |
11
+ | Entrada identifica só a feature e não está claro | `AskUserQuestion` listando as tasks na ordem de `pages` com o status de cada uma |
12
+ | Ambiguidade entre features | `AskUserQuestion` |
13
+ | Task já `completed` | **pare e pergunte** se a re-execução é intencional |
14
+
15
+ ## 2. Carregar contexto
16
+
17
+ Em paralelo:
18
+
19
+ - `CLAUDE.md` da raiz e `.specs/specs/CLAUDE.md`;
20
+ - `meta.json` e `overview.md` da feature;
21
+ - o arquivo da task;
22
+ - as demais tasks da feature (dependências cruzadas);
23
+ - tudo que a lista `**Depende de:**` linkar;
24
+ - **`.specs/STATE.md`, seção `## Decisions`** — toda entrada `AD-NNN` com `Status: active` é
25
+ restrição de projeto que esta implementação precisa respeitar. Conflito com o que a task pede?
26
+ **pare e pergunte** antes de decidir: conformar ou propor supersessão.
27
+
28
+ `PRD.md` / `SDD.md` só se a task for de design ou arquitetura.
29
+
30
+ ## 3. Procurar o que já existe
31
+
32
+ Antes de escrever código novo, `Grep`/`Glob` nos diretórios de reuso do `project.md`:
33
+ os pacotes compartilhados e o código das apps (a estrutura está no `project.md`).
34
+ **Reuso vem antes de criação** — utilitário, tipo, componente,
35
+ hook.
36
+
37
+ Escopo amplo demais para `Glob`/`Grep`: no máximo **1** `Agent` com `subagent_type: Explore`, com
38
+ foco específico.
39
+
40
+ ## 4. Cadeia de verificação de conhecimento
41
+
42
+ Decisão que depende de versão de lib (o `project.md` lista as que mais mudam decisão): consulte a doc
43
+ atual via sub-agente com MCP `context7` **antes** de implementar. Não confie na memória — a skill
44
+ `requirements-closure` tem a cadeia completa (código → docs → context7 → web → declarar incerteza).
45
+
46
+ **Nunca fabrique** API, campo ou comportamento. Não achou? diga "não sei" e pergunte.