@daniellins/power-claude 0.16.3

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.

Potentially problematic release.


This version of @daniellins/power-claude might be problematic. Click here for more details.

Files changed (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +121 -0
  3. package/bin/cli.js +124 -0
  4. package/installer/__tests__/doctor-ready-oracles.test.cjs +140 -0
  5. package/installer/__tests__/merge-settings.test.cjs +330 -0
  6. package/installer/adopt.js +161 -0
  7. package/installer/copy.js +203 -0
  8. package/installer/doctor.js +266 -0
  9. package/installer/install.js +155 -0
  10. package/installer/manifest.js +102 -0
  11. package/installer/motor-scripts.js +50 -0
  12. package/installer/motor-scripts.json +39 -0
  13. package/installer/uninstall.js +99 -0
  14. package/installer/update.js +376 -0
  15. package/installer/util.js +113 -0
  16. package/installer/wizard.js +64 -0
  17. package/package.json +26 -0
  18. package/scripts/__fixtures__/anti-path-demo/agents/ap-writer.md +13 -0
  19. package/scripts/__fixtures__/anti-path-demo/templates/write-tmpl.md +7 -0
  20. package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.smoke.json +10 -0
  21. package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.yaml +25 -0
  22. package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/agents/content-chief.md +1 -0
  23. package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/workflows/wf-criacao-redteam.yaml +3 -0
  24. package/scripts/__fixtures__/assess-tier/retrofit-leve/pod-spec.json +13 -0
  25. package/scripts/__fixtures__/fidelity/fake-green-average-in-band.yaml +21 -0
  26. package/scripts/__fixtures__/fidelity/fake-green-average.yaml +18 -0
  27. package/scripts/__fixtures__/fidelity/fake-green-denominator.yaml +19 -0
  28. package/scripts/__fixtures__/fidelity/fake-green-missing-evidence.yaml +18 -0
  29. package/scripts/__fixtures__/fidelity/fake-green-threshold.yaml +18 -0
  30. package/scripts/__fixtures__/fidelity/fake-green-weight.yaml +18 -0
  31. package/scripts/__fixtures__/fidelity/golden.yaml +31 -0
  32. package/scripts/__fixtures__/fidelity/trindade-incoherent.yaml +15 -0
  33. package/scripts/__fixtures__/forge-canonical/pod-spec-example.json +37 -0
  34. package/scripts/__fixtures__/migrate-squad/authored/agents/offer-engineer.md +17 -0
  35. package/scripts/__fixtures__/migrate-squad/authored/knowledge/no-source.md +7 -0
  36. package/scripts/__fixtures__/migrate-squad/authored/knowledge/value-stack-method.md +8 -0
  37. package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.smoke.json +24 -0
  38. package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.spec.json +45 -0
  39. package/scripts/__fixtures__/migrate-squad/legacy-squad/HEADLINE.md +3 -0
  40. package/scripts/__fixtures__/migrate-squad/legacy-squad/README.md +4 -0
  41. package/scripts/__fixtures__/migrate-squad/legacy-squad/agents/hormozi-offer.md +14 -0
  42. package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/dead-redundant.md +4 -0
  43. package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/method-guide.md +6 -0
  44. package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/veto-screen.md +4 -0
  45. package/scripts/__fixtures__/migrate-squad/legacy-squad/config/config.yaml +2 -0
  46. package/scripts/__fixtures__/migrate-squad/legacy-squad/data/case-library.md +3 -0
  47. package/scripts/__fixtures__/migrate-squad/legacy-squad/scripts/validate-mvn.py +16 -0
  48. package/scripts/__fixtures__/migrate-squad/legacy-squad/sops/sop-sample.md +3 -0
  49. package/scripts/__fixtures__/migrate-squad/legacy-squad/squad-io.yaml +14 -0
  50. package/scripts/__fixtures__/migrate-squad/legacy-squad/tasks/gather-context.md +7 -0
  51. package/scripts/__fixtures__/migrate-squad/legacy-squad/templates/output-tmpl.md +5 -0
  52. package/scripts/__fixtures__/migrate-squad/legacy-squad/workflows/wf-sample.yaml +24 -0
  53. package/scripts/__fixtures__/pipeline/pipelines/pipeline-checkpoint.yaml +21 -0
  54. package/scripts/__fixtures__/pipeline/pipelines/pipeline-demo.yaml +22 -0
  55. package/scripts/__fixtures__/pipeline/pods/pipe-a/agents/maker.md +13 -0
  56. package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.consolidated.md +8 -0
  57. package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.jsonl +83 -0
  58. package/scripts/__fixtures__/pipeline/pods/pipe-a/templates/make-tmpl.md +8 -0
  59. package/scripts/__fixtures__/pipeline/pods/pipe-a/workflows/wf-a.yaml +16 -0
  60. package/scripts/__fixtures__/pipeline/pods/pipe-b/agents/user.md +13 -0
  61. package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.consolidated.md +8 -0
  62. package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.jsonl +14 -0
  63. package/scripts/__fixtures__/pipeline/pods/pipe-b/templates/use-tmpl.md +6 -0
  64. package/scripts/__fixtures__/pipeline/pods/pipe-b/workflows/wf-b.yaml +16 -0
  65. package/scripts/__fixtures__/pod-run/agents/forge-chief.md +13 -0
  66. package/scripts/__fixtures__/pod-run/agents/pod-critic.md +13 -0
  67. package/scripts/__fixtures__/pod-run/templates/build-tmpl.md +8 -0
  68. package/scripts/__fixtures__/pod-run/templates/gate-tmpl.md +6 -0
  69. package/scripts/__fixtures__/pod-run/workflows/wf-min.yaml +43 -0
  70. package/scripts/__fixtures__/pod-run/workflows/wf-skip-modes.yaml +50 -0
  71. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-all-skippable.yaml +30 -0
  72. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-criteria-escalar-de-bloco.yaml +40 -0
  73. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-skip-mode-desconhecido.yaml +30 -0
  74. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-unknown-key.yaml +29 -0
  75. package/scripts/__fixtures__/pod-workflow/invalid-cycle.yaml +26 -0
  76. package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-backedge.yaml +29 -0
  77. package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-forward.yaml +29 -0
  78. package/scripts/__fixtures__/pod-workflow/invalid-handoff-open.yaml +27 -0
  79. package/scripts/__fixtures__/pod-workflow/invalid-knowledge-shape.yaml +18 -0
  80. package/scripts/__fixtures__/pod-workflow/invalid-missing-agent.yaml +15 -0
  81. package/scripts/__fixtures__/pod-workflow/invalid-missing-outputs.yaml +15 -0
  82. package/scripts/__fixtures__/pod-workflow/invalid-missing-template.yaml +15 -0
  83. package/scripts/__fixtures__/pod-workflow/invalid-missing-veto.yaml +13 -0
  84. package/scripts/__fixtures__/pod-workflow/invalid-template-not-on-disk.yaml +16 -0
  85. package/scripts/__fixtures__/pod-workflow/invalid-veto-prose.yaml +17 -0
  86. package/scripts/__fixtures__/pod-workflow/knowledge/a.md +4 -0
  87. package/scripts/__fixtures__/pod-workflow/knowledge/b.md +4 -0
  88. package/scripts/__fixtures__/pod-workflow/knowledge/c.md +4 -0
  89. package/scripts/__fixtures__/pod-workflow/templates/step-tmpl.md +7 -0
  90. package/scripts/__fixtures__/pod-workflow/valid-checkpoint-skip-modes.yaml +29 -0
  91. package/scripts/__fixtures__/pod-workflow/valid-fix-loop.yaml +30 -0
  92. package/scripts/__fixtures__/pod-workflow/valid-knowledge.yaml +30 -0
  93. package/scripts/__fixtures__/pod-workflow/valid-veto-always-true.yaml +20 -0
  94. package/scripts/__fixtures__/pod-workflow/valid.yaml +27 -0
  95. package/scripts/__fixtures__/smoke-canary/agents/canary-reporter.md +13 -0
  96. package/scripts/__fixtures__/smoke-canary/agents/canary-researcher.md +13 -0
  97. package/scripts/__fixtures__/smoke-canary/agents/canary-synth.md +13 -0
  98. package/scripts/__fixtures__/smoke-canary/memory/learnings.consolidated.md +10 -0
  99. package/scripts/__fixtures__/smoke-canary/memory/learnings.jsonl +448 -0
  100. package/scripts/__fixtures__/smoke-canary/templates/report-tmpl.md +9 -0
  101. package/scripts/__fixtures__/smoke-canary/templates/research-tmpl.md +7 -0
  102. package/scripts/__fixtures__/smoke-canary/templates/synth-tmpl.md +9 -0
  103. package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.smoke.json +11 -0
  104. package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml +53 -0
  105. package/scripts/__fixtures__/source-audit/fake-green-bronze-unsignaled.yaml +10 -0
  106. package/scripts/__fixtures__/source-audit/fake-green-counts.yaml +9 -0
  107. package/scripts/__fixtures__/source-audit/fake-green-missing-evidence.yaml +9 -0
  108. package/scripts/__fixtures__/source-audit/fake-green-unclassified.yaml +10 -0
  109. package/scripts/__fixtures__/source-audit/fake-green-verdict.yaml +10 -0
  110. package/scripts/__fixtures__/source-audit/golden-blocked.yaml +10 -0
  111. package/scripts/__fixtures__/source-audit/golden.yaml +11 -0
  112. package/scripts/__fixtures__/sweep-forms/agents/forms-count.md +13 -0
  113. package/scripts/__fixtures__/sweep-forms/agents/forms-field.md +13 -0
  114. package/scripts/__fixtures__/sweep-forms/agents/forms-fileref.md +13 -0
  115. package/scripts/__fixtures__/sweep-forms/agents/forms-json.md +13 -0
  116. package/scripts/__fixtures__/sweep-forms/agents/forms-section.md +13 -0
  117. package/scripts/__fixtures__/sweep-forms/specs/wf-forms.spec.json +5 -0
  118. package/scripts/__fixtures__/sweep-forms/templates/t_count.md +5 -0
  119. package/scripts/__fixtures__/sweep-forms/templates/t_field.md +3 -0
  120. package/scripts/__fixtures__/sweep-forms/templates/t_fileref.md +3 -0
  121. package/scripts/__fixtures__/sweep-forms/templates/t_json.md +0 -0
  122. package/scripts/__fixtures__/sweep-forms/templates/t_section.md +3 -0
  123. package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.smoke.json +13 -0
  124. package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.yaml +67 -0
  125. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-1-noop-state-json.fixture.md +18 -0
  126. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-2-crash-buildworkflowyaml.fixture.md +26 -0
  127. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-3-nasce-verde-skip-modes.fixture.md +29 -0
  128. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-4-guarda-sem-irmao.fixture.md +17 -0
  129. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5a-diff-stat-sem-guarda.fixture.md +17 -0
  130. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5b-test-f-sobre-diretorio.fixture.md +20 -0
  131. package/scripts/__fixtures__/veto-checks/copy-clean.md +4 -0
  132. package/scripts/__fixtures__/veto-checks/copy-dashes.md +4 -0
  133. package/scripts/__fixtures__/veto-checks/n8n-bad.md +18 -0
  134. package/scripts/__fixtures__/veto-checks/n8n-ok.md +22 -0
  135. package/scripts/__fixtures__/veto-checks/page-bad.html +7 -0
  136. package/scripts/__fixtures__/veto-checks/phash/copy.png +0 -0
  137. package/scripts/__fixtures__/veto-checks/phash/distinct.png +0 -0
  138. package/scripts/__fixtures__/veto-checks/phash/distinct2.png +0 -0
  139. package/scripts/__fixtures__/veto-checks/phash/make-fixtures.cjs +203 -0
  140. package/scripts/__fixtures__/veto-checks/phash/ref.png +0 -0
  141. package/scripts/__fixtures__/veto-checks/slide-ok.html +15 -0
  142. package/scripts/__fixtures__/veto-checks/slide-overflow.html +14 -0
  143. package/scripts/__fixtures__/veto-checks/sweep-pod/agents/vc-checker.md +13 -0
  144. package/scripts/__fixtures__/veto-checks/sweep-pod/templates/check-tmpl.md +6 -0
  145. package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.smoke.json +10 -0
  146. package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.yaml +19 -0
  147. package/scripts/__fixtures__/voz-do-dono/README.md +23 -0
  148. package/scripts/__fixtures__/voz-do-dono/dono-escalar.yaml +9 -0
  149. package/scripts/__fixtures__/voz-do-dono/dono-guia.yaml +10 -0
  150. package/scripts/__fixtures__/voz-do-dono/peca-3a-pessoa.md +6 -0
  151. package/scripts/__fixtures__/voz-do-dono/peca-com-lexico-proibido.md +6 -0
  152. package/scripts/__fixtures__/voz-do-dono/peca-limpa-1a-pessoa.md +6 -0
  153. package/scripts/__tests__/derive-ready-transitions.test.cjs +269 -0
  154. package/scripts/__tests__/enforce-cycle-authority.test.cjs +869 -0
  155. package/scripts/__tests__/enforce-git-push-authority.test.cjs +701 -0
  156. package/scripts/__tests__/enforce-ready-oracles.test.cjs +745 -0
  157. package/scripts/__tests__/motor-scripts.test.cjs +339 -0
  158. package/scripts/__tests__/pc-run-pod-counter.test.cjs +58 -0
  159. package/scripts/__tests__/pc-run-pod.test.cjs +578 -0
  160. package/scripts/__tests__/validate-pod-workflow.test.cjs +90 -0
  161. package/scripts/__tests__/validate-story-acs.test.cjs +607 -0
  162. package/scripts/anti-path.test.cjs +163 -0
  163. package/scripts/arena.cjs +514 -0
  164. package/scripts/arena.test.cjs +213 -0
  165. package/scripts/brief-leitura-obrigatoria.test.cjs +364 -0
  166. package/scripts/consolidate-knowledge-runner.test.cjs +249 -0
  167. package/scripts/default-funcional.test.cjs +153 -0
  168. package/scripts/derive-ready-transitions.cjs +325 -0
  169. package/scripts/forge-additive.test.cjs +158 -0
  170. package/scripts/forge-assess-tier.cjs +205 -0
  171. package/scripts/forge-assess-tier.test.cjs +114 -0
  172. package/scripts/forge-canonical.test.cjs +624 -0
  173. package/scripts/forge-generate.cjs +1303 -0
  174. package/scripts/forge-harden-learning.cjs +921 -0
  175. package/scripts/forge-harden-learning.test.cjs +242 -0
  176. package/scripts/forge-ingest-memory.cjs +136 -0
  177. package/scripts/forge-upgrade-pod.cjs +368 -0
  178. package/scripts/forge.test.cjs +609 -0
  179. package/scripts/harden-knowledge.test.cjs +612 -0
  180. package/scripts/harness-g5-lite.cjs +243 -0
  181. package/scripts/harness-g5-lite.test.cjs +134 -0
  182. package/scripts/hn-carousel-contrato-entrada.test.cjs +96 -0
  183. package/scripts/migrate-squad-orchestration.test.cjs +146 -0
  184. package/scripts/migration-manifest-sf3.2.test.cjs +382 -0
  185. package/scripts/migration-manifest-sf3.3.test.cjs +170 -0
  186. package/scripts/migration-manifest-sf5.5.test.cjs +189 -0
  187. package/scripts/migration-manifest.cjs +1146 -0
  188. package/scripts/migration-manifest.test.cjs +186 -0
  189. package/scripts/npm-scope-invocation.test.cjs +194 -0
  190. package/scripts/owner-layer.cjs +442 -0
  191. package/scripts/owner-layer.test.cjs +358 -0
  192. package/scripts/pc-run-pipeline.cjs +289 -0
  193. package/scripts/pc-run-pipeline.test.cjs +256 -0
  194. package/scripts/pc-run-pod-countgte.test.cjs +66 -0
  195. package/scripts/pc-run-pod.cjs +1355 -0
  196. package/scripts/phash-gate.test.cjs +433 -0
  197. package/scripts/pod-export-compile.cjs +487 -0
  198. package/scripts/pod-export-compile.test.cjs +312 -0
  199. package/scripts/pod-export-executor.cjs +678 -0
  200. package/scripts/pod-export-executor.test.cjs +1341 -0
  201. package/scripts/pod-export-hardening.test.cjs +531 -0
  202. package/scripts/pod-export-postprocess.cjs +427 -0
  203. package/scripts/pod-export-postprocess.test.cjs +558 -0
  204. package/scripts/pod-export-queue-race.test.cjs +865 -0
  205. package/scripts/pod-export-release.cjs +473 -0
  206. package/scripts/pod-export-release.test.cjs +267 -0
  207. package/scripts/pod-export-service.cjs +1297 -0
  208. package/scripts/pod-export-service.test.cjs +489 -0
  209. package/scripts/pod-export-tools.cjs +470 -0
  210. package/scripts/pod-export-ui.cjs +805 -0
  211. package/scripts/pod-export-ui.test.cjs +301 -0
  212. package/scripts/pod-memory-budget.test.cjs +309 -0
  213. package/scripts/pod-memory-note.cjs +357 -0
  214. package/scripts/pod-memory-note.test.cjs +452 -0
  215. package/scripts/pod-memory.cjs +1252 -0
  216. package/scripts/pod-memory.test.cjs +951 -0
  217. package/scripts/render-png.test.cjs +307 -0
  218. package/scripts/smoke-isolation.test.cjs +100 -0
  219. package/scripts/smoke-pod-workflow.cjs +755 -0
  220. package/scripts/smoke-sweep.test.cjs +170 -0
  221. package/scripts/validate-adopt.js +235 -0
  222. package/scripts/validate-branding.js +84 -0
  223. package/scripts/validate-budgets.js +140 -0
  224. package/scripts/validate-fidelity-output.cjs +267 -0
  225. package/scripts/validate-fidelity-output.test.cjs +101 -0
  226. package/scripts/validate-install.js +230 -0
  227. package/scripts/validate-no-clone.cjs +220 -0
  228. package/scripts/validate-no-clone.test.cjs +77 -0
  229. package/scripts/validate-pipeline.cjs +145 -0
  230. package/scripts/validate-pod-workflow.cjs +878 -0
  231. package/scripts/validate-source-audit.cjs +170 -0
  232. package/scripts/validate-source-audit.test.cjs +90 -0
  233. package/scripts/validate-story-acs.cjs +862 -0
  234. package/scripts/validate-update-scope-motor.js +421 -0
  235. package/scripts/veto-checks/html-valid.cjs +92 -0
  236. package/scripts/veto-checks/lexical-check.cjs +62 -0
  237. package/scripts/veto-checks/phash-gate.cjs +589 -0
  238. package/scripts/veto-checks/render-gate.cjs +165 -0
  239. package/scripts/veto-checks/render-png.cjs +358 -0
  240. package/scripts/veto-checks.test.cjs +219 -0
  241. package/scripts/watcher-audit.cjs +178 -0
  242. package/template/.claude/CLAUDE.md +103 -0
  243. package/template/.claude/agents/pc-analyst.md +100 -0
  244. package/template/.claude/agents/pc-architect.md +32 -0
  245. package/template/.claude/agents/pc-dev.md +27 -0
  246. package/template/.claude/agents/pc-devops.md +45 -0
  247. package/template/.claude/agents/pc-planner.md +32 -0
  248. package/template/.claude/agents/pc-po.md +25 -0
  249. package/template/.claude/agents/pc-qa.md +25 -0
  250. package/template/.claude/commands/power/academy.md +9 -0
  251. package/template/.claude/commands/power/automation.md +9 -0
  252. package/template/.claude/commands/power/content-carousel.md +267 -0
  253. package/template/.claude/commands/power/content.md +9 -0
  254. package/template/.claude/commands/power/dev.md +9 -0
  255. package/template/.claude/commands/power/forge.md +224 -0
  256. package/template/.claude/commands/power/hormozi.md +221 -0
  257. package/template/.claude/commands/power/modo.md +57 -0
  258. package/template/.claude/hooks/README.md +114 -0
  259. package/template/.claude/hooks/context-budget.cjs +64 -0
  260. package/template/.claude/hooks/enforce-cycle-authority.cjs +457 -0
  261. package/template/.claude/hooks/enforce-git-push-authority.cjs +925 -0
  262. package/template/.claude/hooks/enforce-ready-oracles.cjs +502 -0
  263. package/template/.claude/rules/authority.md +76 -0
  264. package/template/.claude/rules/curadoria-de-conhecimento.md +30 -0
  265. package/template/.claude/rules/model-matrix.md +34 -0
  266. package/template/.claude/rules/orchestration.md +133 -0
  267. package/template/.claude/settings.json +50 -0
  268. package/template/.claude/skills/pc-apply-qa-fixes/SKILL.md +108 -0
  269. package/template/.claude/skills/pc-apply-qa-fixes/references/fix-loop.md +40 -0
  270. package/template/.claude/skills/pc-apply-qa-fixes/references/fix-request-template.md +70 -0
  271. package/template/.claude/skills/pc-arena/SKILL.md +96 -0
  272. package/template/.claude/skills/pc-close-story/SKILL.md +105 -0
  273. package/template/.claude/skills/pc-commit/SKILL.md +108 -0
  274. package/template/.claude/skills/pc-develop-story/SKILL.md +116 -0
  275. package/template/.claude/skills/pc-full-cycle/SKILL.md +150 -0
  276. package/template/.claude/skills/pc-pipeline/SKILL.md +63 -0
  277. package/template/.claude/skills/pc-pipeline/references/gate-templates.md +46 -0
  278. package/template/.claude/skills/pc-review-story/SKILL.md +129 -0
  279. package/template/.claude/skills/pc-review-story/references/false-positive-detection.md +50 -0
  280. package/template/.claude/skills/pc-review-story/references/nfr-assess.md +47 -0
  281. package/template/.claude/skills/pc-review-story/references/risk-profile.md +75 -0
  282. package/template/.claude/skills/pc-review-story/references/security-checklist.md +69 -0
  283. package/template/.claude/skills/pc-review-story/references/test-design.md +37 -0
  284. package/template/.claude/skills/pc-review-story/references/trace-requirements.md +46 -0
  285. package/template/.claude/skills/pc-run-pod/SKILL.md +123 -0
  286. package/template/.claude/skills/pc-validate-story/SKILL.md +114 -0
  287. package/template/.claude/skills/pc-wave/SKILL.md +133 -0
  288. package/template/.env.example +10 -0
  289. package/template/knowledge/analyst/brainstorming.md +40 -0
  290. package/template/knowledge/analyst/brief-skeleton.md +32 -0
  291. package/template/knowledge/analyst/competitor-skeleton.md +39 -0
  292. package/template/knowledge/analyst/elicitation-menu.md +49 -0
  293. package/template/knowledge/analyst/market-research-skeleton.md +36 -0
  294. package/template/knowledge/analyst/research-prompt-structure.md +48 -0
  295. package/template/knowledge/analyst/roi-skeleton.md +51 -0
  296. package/template/knowledge/voice-dna/README.md +99 -0
  297. package/template/knowledge/voice-dna/voice-dna.example.yaml +157 -0
  298. package/template/pods/README.md +64 -0
  299. package/template/pods/academy/README.md +37 -0
  300. package/template/pods/academy/agents/academy-chief.md +27 -0
  301. package/template/pods/academy/examples/palestra.example.md +142 -0
  302. package/template/pods/academy/pod-spec.json +44 -0
  303. package/template/pods/academy/templates/materiais-tmpl.md +17 -0
  304. package/template/pods/academy/templates/revisao-didatica-tmpl.md +20 -0
  305. package/template/pods/academy/workflows/wf-materiais-revisao.yaml +30 -0
  306. package/template/pods/authority-content/README.md +43 -0
  307. package/template/pods/authority-content/agents/content-chief.md +28 -0
  308. package/template/pods/authority-content/pod-spec.json +45 -0
  309. package/template/pods/authority-content/templates/criacao-na-voz-tmpl.md +17 -0
  310. package/template/pods/authority-content/templates/red-team-factual-tmpl.md +23 -0
  311. package/template/pods/authority-content/workflows/wf-criacao-redteam.yaml +30 -0
  312. package/template/pods/automation/README.md +37 -0
  313. package/template/pods/automation/agents/langgraph-architect.md +30 -0
  314. package/template/pods/automation/agents/n8n-architect.md +30 -0
  315. package/template/pods/automation/examples/README.md +46 -0
  316. package/template/pods/automation/examples/n8n-content-radar.example.json +380 -0
  317. package/template/pods/automation/knowledge/langgraph-patterns.md +126 -0
  318. package/template/pods/automation/knowledge/n8n-patterns.md +131 -0
  319. package/template/pods/automation/memory/README.md +16 -0
  320. package/template/pods/automation/memory/learnings.consolidated.md +8 -0
  321. package/template/pods/automation/memory/learnings.jsonl +0 -0
  322. package/template/pods/automation/pod-spec.json +109 -0
  323. package/template/pods/automation/specs/wf-langgraph-build.spec.json +107 -0
  324. package/template/pods/automation/squad-io.yaml +28 -0
  325. package/template/pods/automation/templates/lg-build-tmpl.md +17 -0
  326. package/template/pods/automation/templates/lg-design-tmpl.md +23 -0
  327. package/template/pods/automation/templates/lg-discover-tmpl.md +20 -0
  328. package/template/pods/automation/templates/lg-handoff-tmpl.md +20 -0
  329. package/template/pods/automation/templates/lg-test-tmpl.md +20 -0
  330. package/template/pods/automation/templates/n8n-build-tmpl.md +14 -0
  331. package/template/pods/automation/templates/n8n-design-tmpl.md +23 -0
  332. package/template/pods/automation/templates/n8n-discover-tmpl.md +20 -0
  333. package/template/pods/automation/templates/n8n-handoff-tmpl.md +20 -0
  334. package/template/pods/automation/templates/n8n-test-tmpl.md +20 -0
  335. package/template/pods/automation/workflows/wf-langgraph-build.smoke.json +11 -0
  336. package/template/pods/automation/workflows/wf-langgraph-build.yaml +64 -0
  337. package/template/pods/automation/workflows/wf-n8n-build.smoke.json +11 -0
  338. package/template/pods/automation/workflows/wf-n8n-build.yaml +65 -0
  339. package/template/pods/content-carousel/README.md +91 -0
  340. package/template/pods/content-carousel/agents/carousel-builder.md +28 -0
  341. package/template/pods/content-carousel/agents/carousel-visual.md +24 -0
  342. package/template/pods/content-carousel/agents/hn-curator.md +74 -0
  343. package/template/pods/content-carousel/config/heuristic-watcher-rubric.yaml +59 -0
  344. package/template/pods/content-carousel/knowledge/aquisicao-ancora.md +443 -0
  345. package/template/pods/content-carousel/knowledge/cta-brief.md +25 -0
  346. package/template/pods/content-carousel/knowledge/dono.example.yaml +45 -0
  347. package/template/pods/content-carousel/knowledge/identidade-visual-mascote.md +62 -0
  348. package/template/pods/content-carousel/knowledge/image-generation.md +62 -0
  349. package/template/pods/content-carousel/knowledge/selecao-de-ancora.md +60 -0
  350. package/template/pods/content-carousel/knowledge/slides-html.md +56 -0
  351. package/template/pods/content-carousel/memory/README.md +18 -0
  352. package/template/pods/content-carousel/memory/learnings.consolidated.md +6 -0
  353. package/template/pods/content-carousel/memory/learnings.jsonl +0 -0
  354. package/template/pods/content-carousel/pod-spec.json +100 -0
  355. package/template/pods/content-carousel/squad-io.yaml +10 -0
  356. package/template/pods/content-carousel/templates/assembly-tmpl.md +23 -0
  357. package/template/pods/content-carousel/templates/digest-tmpl.md +29 -0
  358. package/template/pods/content-carousel/templates/visuals-tmpl.md +20 -0
  359. package/template/pods/content-carousel/workflows/wf-content-carousel.smoke.json +23 -0
  360. package/template/pods/content-carousel/workflows/wf-content-carousel.yaml +80 -0
  361. package/template/pods/dev-ia/README.md +45 -0
  362. package/template/pods/dev-ia/agents/db-architect.md +33 -0
  363. package/template/pods/dev-ia/agents/ux-architect.md +29 -0
  364. package/template/pods/dev-ia/knowledge/db/migration-protocol.md +95 -0
  365. package/template/pods/dev-ia/knowledge/db/rls-patterns.md +101 -0
  366. package/template/pods/dev-ia/knowledge/db/schema-review-checklist.md +76 -0
  367. package/template/pods/dev-ia/memory/README.md +16 -0
  368. package/template/pods/dev-ia/memory/learnings.consolidated.md +8 -0
  369. package/template/pods/dev-ia/memory/learnings.jsonl +0 -0
  370. package/template/pods/dev-ia/pod-spec.json +34 -0
  371. package/template/pods/dev-ia/templates/schema-review-tmpl.md +23 -0
  372. package/template/pods/dev-ia/templates/ux-flow-review-tmpl.md +23 -0
  373. package/template/pods/dev-ia/tools/db-ops/backup-manager.sh +321 -0
  374. package/template/pods/dev-ia/tools/db-ops/best-practices-auditor.sh +534 -0
  375. package/template/pods/dev-ia/tools/db-ops/bootstrap-runner.sh +255 -0
  376. package/template/pods/dev-ia/tools/db-ops/data-loader.sh +616 -0
  377. package/template/pods/dev-ia/tools/db-ops/detect-database.sh +113 -0
  378. package/template/pods/dev-ia/tools/db-ops/explain-analyzer.sh +285 -0
  379. package/template/pods/dev-ia/tools/db-ops/health-checker.sh +323 -0
  380. package/template/pods/dev-ia/tools/db-ops/migration-runner.sh +308 -0
  381. package/template/pods/dev-ia/tools/db-ops/postgresql-schema-loader.sh +334 -0
  382. package/template/pods/dev-ia/tools/db-ops/query-runner.sh +171 -0
  383. package/template/pods/dev-ia/tools/db-ops/rls-policy-installer.sh +480 -0
  384. package/template/pods/dev-ia/tools/db-ops/rls-test-suite.sh +172 -0
  385. package/template/pods/dev-ia/tools/db-ops/schema-context-loader.sh +176 -0
  386. package/template/pods/hormozi-method/README.md +52 -0
  387. package/template/pods/hormozi-method/agents/acquisition-strategist.md +33 -0
  388. package/template/pods/hormozi-method/agents/conversion-copywriter.md +34 -0
  389. package/template/pods/hormozi-method/agents/monetization-architect.md +35 -0
  390. package/template/pods/hormozi-method/agents/offer-engineer.md +37 -0
  391. package/template/pods/hormozi-method/knowledge/core-four-leads.md +51 -0
  392. package/template/pods/hormozi-method/knowledge/grand-slam-offer.md +66 -0
  393. package/template/pods/hormozi-method/knowledge/growth-decision.md +38 -0
  394. package/template/pods/hormozi-method/knowledge/hooks-and-ads.md +56 -0
  395. package/template/pods/hormozi-method/knowledge/launch-email.md +31 -0
  396. package/template/pods/hormozi-method/knowledge/money-model.md +46 -0
  397. package/template/pods/hormozi-method/knowledge/opportunity-screening.md +44 -0
  398. package/template/pods/hormozi-method/knowledge/pages.md +25 -0
  399. package/template/pods/hormozi-method/knowledge/pos-lancamento-leads.md +56 -0
  400. package/template/pods/hormozi-method/knowledge/pricing.md +36 -0
  401. package/template/pods/hormozi-method/knowledge/retention-ltv.md +37 -0
  402. package/template/pods/hormozi-method/knowledge/scale-roadmap.md +35 -0
  403. package/template/pods/hormozi-method/knowledge/swipefiles-curados.md +44 -0
  404. package/template/pods/hormozi-method/knowledge/value-equation-diagnostic.md +77 -0
  405. package/template/pods/hormozi-method/memory/README.md +16 -0
  406. package/template/pods/hormozi-method/memory/learnings.consolidated.md +6 -0
  407. package/template/pods/hormozi-method/memory/learnings.jsonl +0 -0
  408. package/template/pods/hormozi-method/pod-spec.json +50 -0
  409. package/template/pods/hormozi-method/specs/wf-full-launch-sequence.spec.json +149 -0
  410. package/template/pods/hormozi-method/specs/wf-lead-magnet-pipeline.spec.json +125 -0
  411. package/template/pods/hormozi-method/specs/wf-money-model-design.spec.json +117 -0
  412. package/template/pods/hormozi-method/specs/wf-paid-ads-campaign.spec.json +132 -0
  413. package/template/pods/hormozi-method/specs/wf-scaling-diagnostic.spec.json +121 -0
  414. package/template/pods/hormozi-method/squad-io.yaml +43 -0
  415. package/template/pods/hormozi-method/templates/conversion-copywriter-tmpl.md +20 -0
  416. package/template/pods/hormozi-method/templates/launch-execucao-tmpl.md +17 -0
  417. package/template/pods/hormozi-method/templates/launch-fechamento-tmpl.md +17 -0
  418. package/template/pods/hormozi-method/templates/launch-pos-tmpl.md +17 -0
  419. package/template/pods/hormozi-method/templates/launch-preparacao-tmpl.md +17 -0
  420. package/template/pods/hormozi-method/templates/lm-copy-tmpl.md +17 -0
  421. package/template/pods/hormozi-method/templates/lm-distribuicao-tmpl.md +18 -0
  422. package/template/pods/hormozi-method/templates/lm-estrategia-tmpl.md +17 -0
  423. package/template/pods/hormozi-method/templates/mm-arquitetura-tmpl.md +18 -0
  424. package/template/pods/hormozi-method/templates/mm-copy-tmpl.md +17 -0
  425. package/template/pods/hormozi-method/templates/mm-diagnostico-tmpl.md +14 -0
  426. package/template/pods/hormozi-method/templates/monetization-architect-tmpl.md +17 -0
  427. package/template/pods/hormozi-method/templates/offer-engineer-tmpl.md +20 -0
  428. package/template/pods/hormozi-method/templates/paid-criativos-tmpl.md +19 -0
  429. package/template/pods/hormozi-method/templates/paid-fundacao-tmpl.md +17 -0
  430. package/template/pods/hormozi-method/templates/paid-teste-escala-tmpl.md +17 -0
  431. package/template/pods/hormozi-method/templates/scaling-diagnostico-tmpl.md +17 -0
  432. package/template/pods/hormozi-method/templates/scaling-priorizacao-tmpl.md +17 -0
  433. package/template/pods/hormozi-method/templates/scaling-roadmap-tmpl.md +17 -0
  434. package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.smoke.json +12 -0
  435. package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.yaml +56 -0
  436. package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.smoke.json +11 -0
  437. package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.yaml +45 -0
  438. package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.smoke.json +9 -0
  439. package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.yaml +45 -0
  440. package/template/pods/hormozi-method/workflows/wf-money-model-design.smoke.json +11 -0
  441. package/template/pods/hormozi-method/workflows/wf-money-model-design.yaml +45 -0
  442. package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.smoke.json +9 -0
  443. package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.yaml +46 -0
  444. package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.smoke.json +11 -0
  445. package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.yaml +44 -0
  446. package/template/pods/squad-forge/README.md +53 -0
  447. package/template/pods/squad-forge/agents/forge-chief.md +31 -0
  448. package/template/pods/squad-forge/agents/mind-extractor.md +29 -0
  449. package/template/pods/squad-forge/agents/pod-critic.md +26 -0
  450. package/template/pods/squad-forge/config/heuristic-watcher-rubric.yaml +74 -0
  451. package/template/pods/squad-forge/knowledge/fidelity-rubric.yaml +176 -0
  452. package/template/pods/squad-forge/knowledge/g6-memory-check.md +17 -0
  453. package/template/pods/squad-forge/knowledge/memory-ingest.md +16 -0
  454. package/template/pods/squad-forge/knowledge/source-audit-rubric.yaml +60 -0
  455. package/template/pods/squad-forge/memory/README.md +16 -0
  456. package/template/pods/squad-forge/memory/learnings.consolidated.md +8 -0
  457. package/template/pods/squad-forge/memory/learnings.jsonl +0 -0
  458. package/template/pods/squad-forge/pod-spec.json +166 -0
  459. package/template/pods/squad-forge/squad-io.yaml +13 -0
  460. package/template/pods/squad-forge/tasks/pipeline.md +158 -0
  461. package/template/pods/squad-forge/templates/discovery-tmpl.md +40 -0
  462. package/template/pods/squad-forge/templates/generation-tmpl.md +18 -0
  463. package/template/pods/squad-forge/templates/red-team-tmpl.md +17 -0
  464. package/template/pods/squad-forge/templates/register-tmpl.md +17 -0
  465. package/template/pods/squad-forge/templates/workflow-tmpl.yaml +101 -0
  466. package/template/pods/squad-forge/workflows/wf-forge.smoke.json +12 -0
  467. package/template/pods/squad-forge/workflows/wf-forge.yaml +60 -0
@@ -0,0 +1,126 @@
1
+ # Langgraph — Padrões de produção (Python)
2
+
3
+ Referência de trabalho do pod `automation`. Carregado sob demanda pelos comandos do `langgraph-architect`.
4
+
5
+ ## 1. StateGraph básico com TypedDict
6
+
7
+ ```python
8
+ from typing import Annotated, TypedDict
9
+ from langgraph.graph import StateGraph, START, END
10
+ from langgraph.graph.message import add_messages
11
+
12
+ class AgentState(TypedDict):
13
+ messages: Annotated[list, add_messages] # reducer: acumula
14
+ iteracoes: int # sobrescreve (default)
15
+ resultado: str | None
16
+
17
+ def analisar(state: AgentState) -> dict:
18
+ """Node retorna APENAS os campos que atualiza — nunca o estado inteiro mutado."""
19
+ return {"iteracoes": state["iteracoes"] + 1}
20
+
21
+ builder = StateGraph(AgentState)
22
+ builder.add_node("analisar", analisar)
23
+ builder.add_edge(START, "analisar")
24
+ builder.add_edge("analisar", END)
25
+ graph = builder.compile()
26
+ ```
27
+
28
+ - Estado é **TypedDict ou Pydantic BaseModel** — nunca dict solto. Pydantic quando precisa validação em runtime.
29
+ - Campos acumulativos (mensagens, logs) usam reducer via `Annotated[list, add_messages]` ou `operator.add`; sem reducer, cada node sobrescreve.
30
+
31
+ ## 2. Conditional edges
32
+
33
+ ```python
34
+ def rotear(state: AgentState) -> str:
35
+ if state["iteracoes"] >= 5:
36
+ return "encerrar" # condição de parada SEMPRE primeiro
37
+ if state.get("resultado"):
38
+ return "revisar"
39
+ return "analisar"
40
+
41
+ builder.add_conditional_edges("analisar", rotear,
42
+ {"analisar": "analisar", "revisar": "revisar", "encerrar": END})
43
+ ```
44
+
45
+ - A função de roteamento cobre **todos** os valores possíveis; o mapa lista todas as rotas. Valor fora do mapa = crash em produção.
46
+ - Condição de parada checada **antes** das rotas de continuação — nunca depender só do `recursion_limit`.
47
+
48
+ ## 3. Checkpointer (memória/persistência)
49
+
50
+ ```python
51
+ from langgraph.checkpoint.memory import MemorySaver # dev/teste
52
+ from langgraph.checkpoint.sqlite import SqliteSaver # single-node
53
+ from langgraph.checkpoint.postgres import PostgresSaver # produção
54
+
55
+ graph = builder.compile(checkpointer=PostgresSaver.from_conn_string(DB_URL))
56
+ config = {"configurable": {"thread_id": "cliente-123"}} # 1 thread = 1 conversa/execução
57
+ graph.invoke({"messages": [...], "iteracoes": 0}, config)
58
+ ```
59
+
60
+ - `thread_id` é a chave de retomada: mesma thread = continua do checkpoint; thread nova = do zero.
61
+ - Checkpointer é pré-requisito de interrupt/HITL e de retomada após crash. `MemorySaver` nunca em produção.
62
+
63
+ ## 4. Interrupt / Human-in-the-loop
64
+
65
+ ```python
66
+ from langgraph.types import interrupt, Command
67
+
68
+ def aprovar_envio(state: AgentState) -> dict:
69
+ """Pausa antes de ação irreversível; humano aprova, edita ou rejeita."""
70
+ decisao = interrupt({"proposta": state["resultado"], "acao": "enviar e-mail ao cliente"})
71
+ if decisao["aprovado"]:
72
+ return {"resultado": decisao.get("texto_editado", state["resultado"])}
73
+ return {"resultado": None}
74
+
75
+ # Retomada (ex.: handler de API depois da resposta humana):
76
+ graph.invoke(Command(resume={"aprovado": True}), config)
77
+ ```
78
+
79
+ - `interrupt()` exige checkpointer. O grafo congela; a retomada re-executa o node do início — código antes do `interrupt` deve ser idempotente.
80
+ - Padrão de payload: mostrar ao humano exatamente o que será feito + dados para decidir; nunca "aprovar? s/n" sem contexto.
81
+
82
+ ## 5. Subgrafos
83
+
84
+ ```python
85
+ sub = sub_builder.compile()
86
+ builder.add_node("pesquisa", sub) # subgrafo entra como node
87
+ ```
88
+
89
+ - Usar quando um bloco tem estado próprio ou é reutilizado entre grafos. Estados diferentes: envolver com função que traduz estado pai ↔ filho.
90
+ - Cada subgrafo testável isoladamente — mesmo racional de quebrar workflow monolítico.
91
+
92
+ ## 6. Streaming
93
+
94
+ ```python
95
+ for chunk in graph.stream(inputs, config, stream_mode="updates"):
96
+ ... # "updates": deltas por node | "values": estado completo | "messages": tokens de LLM
97
+ ```
98
+
99
+ - `stream_mode="updates"` para observabilidade de execução (qual node rodou, o que mudou); `"messages"` para UI de chat token a token.
100
+
101
+ ## 7. Limites de recursão
102
+
103
+ ```python
104
+ graph.invoke(inputs, {"recursion_limit": 25, "configurable": {"thread_id": "t1"}})
105
+ ```
106
+
107
+ - `recursion_limit` (default 25) conta **supersteps**, não iterações lógicas. É o airbag — a condição de parada no estado (`iteracoes >= N`) é o freio. Ambos obrigatórios.
108
+ - Estourar o limite levanta `GraphRecursionError`: capturar e degradar com graça (salvar estado parcial, notificar), não deixar subir cru.
109
+
110
+ ## 8. Erro e retry
111
+
112
+ ```python
113
+ from langgraph.pregel import RetryPolicy
114
+ builder.add_node("chamar_api", chamar_api,
115
+ retry=RetryPolicy(max_attempts=3, backoff_factor=2.0, retry_on=(TimeoutError,)))
116
+ ```
117
+
118
+ - `RetryPolicy` por node para falha transitória (rede, 429). Erro de lógica não se retenta — se trata: node de fallback via conditional edge com rota de erro no estado (`state["erro"]`).
119
+ - Ação irreversível + retry = duplicação. Nodes com efeito externo precisam de idempotência (chave externa) ou interrupt antes.
120
+
121
+ ## 9. Teste de grafos
122
+
123
+ - **Nodes puros primeiro:** cada node é função `state -> dict` — teste unitário direto, sem grafo, com estado sintético (incluindo estados de erro).
124
+ - **Roteamento:** testar a função de conditional edge para cada valor possível do estado — é onde bugs de produção moram.
125
+ - **Grafo compilado:** `graph.invoke` com `MemorySaver` e LLM mockado (fake model ou `with_structured_output` stub); assert no estado final e na sequência de nodes via `stream(stream_mode="updates")`.
126
+ - **Custo:** registrar tokens por caminho no teste de integração (callback de contagem); comparar com o custo estimado no `*design` — divergência grande = desenho desatualizado.
@@ -0,0 +1,131 @@
1
+ # N8N — Padrões de produção
2
+
3
+ Referência de trabalho do pod `automation`. Padrões validados em automações reais de PME. Carregado sob demanda pelos comandos do `n8n-architect`.
4
+
5
+ ## 1. Estrutura do workflow JSON
6
+
7
+ Um workflow exportado tem quatro chaves principais:
8
+
9
+ ```json
10
+ {
11
+ "name": "Nome do Workflow",
12
+ "nodes": [
13
+ {
14
+ "parameters": { "...": "config específica do node" },
15
+ "id": "uuid-estável",
16
+ "name": "Nome único no workflow",
17
+ "type": "n8n-nodes-base.httpRequest",
18
+ "typeVersion": 4.2,
19
+ "position": [240, 0],
20
+ "onError": "continueRegularOutput"
21
+ }
22
+ ],
23
+ "connections": {
24
+ "Nome Do Node Origem": {
25
+ "main": [[ { "node": "Nome Do Node Destino", "type": "main", "index": 0 } ]]
26
+ }
27
+ },
28
+ "settings": { "executionOrder": "v1", "timezone": "UTC", "errorWorkflow": "<id>" }
29
+ }
30
+ ```
31
+
32
+ Regras práticas:
33
+ - `settings.timezone` é **dado da instância, não default do framework**: `UTC` é o valor neutro
34
+ (válido em qualquer lugar, sem horário de verão), e é aqui só para o JSON ser importável.
35
+ **Ajuste para o fuso de quem opera** (`America/Sao_Paulo`, `Europe/Lisbon`, …) — um cron herdado
36
+ com o fuso de outra pessoa dispara na hora errada **e não falha de forma visível**.
37
+ - `connections` referencia nodes pelo **name**, não pelo id — renomear node exige atualizar conexões.
38
+ - `main` é array de arrays: o array externo é o índice de **saída** (IF tem saída 0=true, 1=false); `index` no destino é a **entrada** (Merge com 3 entradas usa 0, 1, 2).
39
+ - `typeVersion` importa: parâmetros mudam entre versões (IF v1 vs v2.2, Google Sheets v4+). Exportar de instância atual, não de memória.
40
+
41
+ ## 2. Error handling
42
+
43
+ **Error workflow (padrão preferido):** workflow separado começando com node `Error Trigger` (`n8n-nodes-base.errorTrigger`); registrar em `settings.errorWorkflow` de cada workflow de produção. O payload recebido:
44
+
45
+ ```json
46
+ {
47
+ "workflow": { "id": "...", "name": "Workflow que falhou" },
48
+ "execution": {
49
+ "id": "...", "url": "https://n8n.../executions/...",
50
+ "error": { "message": "...", "stack": "..." },
51
+ "lastNodeExecuted": "Nome Do Node"
52
+ }
53
+ }
54
+ ```
55
+
56
+ Um único error workflow atende todos os workflows de produção: formata o payload acima e notifica o canal de operação (e-mail/WhatsApp) com nome do workflow, node que falhou e link da execução.
57
+
58
+ **Tratamento inline (complementar):** `onError: "continueRegularOutput"` no node que pode falhar → item de erro segue com campo `error` → node IF separa branch de erro (condição: `$json.error` existe) → branch falso alerta/loga. Usar quando a falha parcial não deve derrubar a execução (ex.: 1 de 3 feeds fora do ar).
59
+
60
+ ```text
61
+ [HTTP Request (onError: continue)] → [IF $json.error notExists?]
62
+ true → segue o fluxo normal
63
+ false → [Alerta operador] (+ opcional: grava em log de falhas)
64
+ ```
65
+
66
+ Nunca: engolir erro sem branch de tratamento (`continueRegularOutput` sem IF a jusante é falha silenciosa).
67
+
68
+ ## 3. Retry com backoff
69
+
70
+ - Node-level: em nodes HTTP Request e afins, `retryOnFail: true`, `maxTries` (2–5), `waitBetweenTries` (ms). Cobre falha transitória de rede.
71
+
72
+ ```json
73
+ { "retryOnFail": true, "maxTries": 3, "waitBetweenTries": 5000 }
74
+ ```
75
+
76
+ - Backoff real (429/rate limit): loop explícito com `Wait` node e contador no item:
77
+
78
+ ```text
79
+ [Set tentativa=1] → [HTTP Request (onError: continue)] → [IF sucesso?]
80
+ true → segue
81
+ false → [IF tentativa < 4?]
82
+ true → [Wait {{ $json.tentativa * 30 }}s] → [Set tentativa+1] → volta ao Request
83
+ false → [Alerta: desistiu após 4 tentativas]
84
+ ```
85
+
86
+ Teto de tentativas é obrigatório — sem ele o loop de retry é loop infinito.
87
+ - Timeout sempre configurado em chamadas externas (`options.timeout`, ex.: 30000 ms); default infinito é anti-pattern.
88
+ - Retry só para falha transitória (timeout, 429, 5xx). Erro 4xx de payload não se retenta — se corrige.
89
+
90
+ ## 4. Dedupe / idempotência com chave externa
91
+
92
+ - Node `Remove Duplicates` (`n8n-nodes-base.removeDuplicates`), operação `removeItemsSeenInPreviousExecutions`: dedupe **entre execuções** por chave (`dedupeValue`, ex.: `={{ $json.link }}` ou id externo). É o padrão para "processar cada item uma vez na vida".
93
+ - Alternativa com auditoria: consultar storage (Sheets/Postgres/Redis) pela chave antes de agir; gravar chave após efeito confirmado.
94
+ - Efeitos externos (criar cobrança, enviar mensagem): usar chave de idempotência da API destino quando existir (ex.: `Idempotency-Key` no Stripe). Reexecução manual do workflow NÃO pode duplicar efeito — teste isso antes de entregar.
95
+
96
+ ## 5. Webhook seguro
97
+
98
+ - Autenticação sempre: Header Auth (token em credential store) no mínimo; HMAC (validar assinatura no primeiro node) para provedores que suportam (Meta, Stripe). Validação HMAC num Code node logo após o Webhook:
99
+
100
+ ```javascript
101
+ const crypto = require('crypto');
102
+ const assinaturaRecebida = $json.headers['x-hub-signature-256'] || '';
103
+ const esperada = 'sha256=' + crypto
104
+ .createHmac('sha256', $env.WEBHOOK_APP_SECRET) // segredo via env/credential, nunca inline
105
+ .update(JSON.stringify($json.body))
106
+ .digest('hex');
107
+ if (!crypto.timingSafeEqual(Buffer.from(assinaturaRecebida), Buffer.from(esperada))) {
108
+ throw new Error('Assinatura HMAC inválida — payload rejeitado');
109
+ }
110
+ return $input.all();
111
+ ```
112
+
113
+ - Validar payload antes de agir: IF checando campos obrigatórios; payload inválido → resposta 400 + log, nunca segue o fluxo.
114
+ - `Respond to Webhook` cedo (202) e processar depois, quando o provedor tem timeout curto (WhatsApp: 10s).
115
+ - Path do webhook não é segredo — tratar como público mesmo com UUID.
116
+
117
+ ## 6. Integrações comuns (PMEs)
118
+
119
+ - **WhatsApp (API oficial / Cloud API):** webhook de entrada com verificação de token GET + HMAC; envio via HTTP Request para `graph.facebook.com/v*/{phone-id}/messages` com credential Header Auth. Janela de 24h: fora dela, só template aprovado.
120
+ - **Google Sheets** (`n8n-nodes-base.googleSheets` v4+): operação `append` para log/registro, `appendOrUpdate` com coluna-chave para upsert idempotente. Sheets é UI de operação barata para PME — não é banco; acima de ~10k linhas, migrar.
121
+ - **HTTP Request** (`n8n-nodes-base.httpRequest` v4+): o canivete para API sem node nativo. Sempre: credential store (Header/OAuth2), `timeout`, `retryOnFail`, paginação explícita quando a API pagina.
122
+ - **Agendamento** (`n8n-nodes-base.scheduleTrigger`): cron expression explícita (`0 7 * * *`) + `settings.timezone` declarado — sem timezone, o cron roda no fuso do servidor e "7h" vira surpresa.
123
+
124
+ ## 7. Anti-patterns (veto em review)
125
+
126
+ - **Polling agressivo:** trigger a cada minuto contra API sem necessidade — usar webhook quando existir; senão, o maior intervalo que o negócio tolera.
127
+ - **Credencial em texto:** token/senha em parâmetro, expressão, Code node ou committed no JSON exportado. Só credential store.
128
+ - **Workflow monolítico:** 40+ nodes, múltiplos jobs num workflow só — quebrar por responsabilidade e ligar via `Execute Workflow`; cada sub-workflow testável isoladamente.
129
+ - **Falha silenciosa:** `onError: continueRegularOutput` sem branch de erro a jusante; execução "verde" com metade dos itens perdidos.
130
+ - **Code node como muleta universal:** reimplementar em JS o que node nativo faz (dedupe, merge, filtro) — mais superfície de bug, menos legibilidade para quem opera.
131
+ - **Sem dono nem runbook:** workflow em produção que só o criador entende. Entrega inclui `*docs`.
@@ -0,0 +1,16 @@
1
+ # Memória do pod `automation` — OPERANTE (SF2.3)
2
+
3
+ > Instalada por forge-generate.cjs via o motor `scripts/pod-memory.cjs` (SF2.1).
4
+ > Tier: STANDARD/COMPLEX. Esta memória NÃO é scaffold morto: nasce cabeada ao lifecycle.
5
+
6
+ ## Cabeamento (nenhuma ação manual necessária)
7
+
8
+ - `learnings.jsonl` — log cru append-only. O runner (`pc-run-pod`, SF2.2) faz `append()`
9
+ ao fim de cada etapa/run. O AGENTE NUNCA lê este arquivo (auditoria apenas).
10
+ - `learnings.consolidated.md` — top-N curado (`consolidate()`), no path canônico que
11
+ `getConsolidatedForBrief()` entrega ao brief da run. É o ÚNICO que o agente lê.
12
+ - Auditoria de aderência por run: `config/heuristic-watcher-rubric.yaml` +
13
+ `scripts/watcher-audit.cjs` (executado pelo `pod-critic`).
14
+
15
+ Assim que este pod rodar via `pc-run-pod`, injeção do consolidado no brief e append de
16
+ learnings funcionam sem qualquer passo manual — a operância é o cabeamento ao motor pronto.
@@ -0,0 +1,8 @@
1
+ # Memória consolidada — automation
2
+
3
+ > Curado por pod-memory.cjs (SF2.1). Único artefato de memória lido pelo agente.
4
+ > Log cru (learnings.jsonl) NÃO é lido pelo agente — auditoria apenas.
5
+
6
+ ## Heurísticas (top-N)
7
+
8
+ _Nenhuma heurística consolidada ainda._
@@ -0,0 +1,109 @@
1
+ {
2
+ "pod": "automation",
3
+ "workflowId": "n8n-build",
4
+ "_adr": "ADR-005 Decisão B: a ordem do DAG é DADO DECLARADO (agents[] ordenado = ordem topológica das 5 fases do 'Fluxo típico'), nunca readdir/alfabético. ADR-002: os 3 itens da 'Regra do pod (inegociável)' que exigem julgamento (error handling explícito, idempotência onde aplicável, qualidade do runbook) viram checkpoint.blocking; a fatia machine-redutível de 'documentação de operação' (o entregável existe em disco) vira veto file_referenced_exists. ADR-004: critical:true — automação em produção (README §'Regra do pod'). Retrofit SF6.3: formaliza o 'Fluxo típico' (README:14-20) do pod em wf-*.yaml seguível por pc-run-pod.",
5
+ "_sources": {
6
+ "fluxo_tipico": "README.md:14-20 'Fluxo típico' — 5 fases numeradas: 1. Descoberta (*discover n8n / entrevista equivalente), 2. Desenho (*design; 'Aprovação do desenho ANTES de gerar código' :17), 3. Geração (*build; 'JSON importável (N8N) ou código Python tipado (Langgraph)' :18), 4. Teste (execução + red-team via *review :19), 5. Handoff de deploy (runbook *docs :20). DAG linear descoberta→desenho→geração→teste→handoff.",
7
+ "regra_do_pod": "README.md:22-28 'Regra do pod (inegociável)': error handling explícito (:26), idempotência onde aplicável (:27), documentação de operação/runbook (:28). Condições de JULGAMENTO ('error handling está de fato explícito?', 'onde aplicável') → checkpoint.blocking nas etapas de Teste (error handling+idempotência) e Handoff (qualidade do runbook), fronteira ADR-002. A fatia objetiva ('o entregável de automação existe em disco') → veto file_referenced_exists em n8n-handoff.",
8
+ "criterio_de_track": "README.md:9-12 — critério de escolha N8N vs Langgraph é decisão da Fase 1 (Descoberta): 'mover e transformar dados entre sistemas' → N8N; 'um agente decide, com estado e supervisão humana' → Langgraph. Decidido POR PROCESSO, antes do Desenho.",
9
+ "decisao_2_workflows": "AC1 — DECISÃO POR EVIDÊNCIA: DOIS wf-*.yaml (wf-n8n-build.yaml + wf-langgraph-build.yaml, este em specs/wf-langgraph-build.spec.json), NÃO um único parametrizado. Racional decisivo (mecanismo): validate-pod-workflow.cjs:291 e pc-run-pod.cjs exigem `agent` LITERAL FIXO por etapa — não há parametrização de agente. Um único wf forçaria UM agente (n8n-architect OU langgraph-architect) sobre AMBOS os tracks, o que é falso: os dois agentes têm golden rules distintas (n8n-architect: error workflow/credential store/webhook autenticado, agents/n8n-architect.md:27-30; langgraph-architect: recursion_limit+condição de parada/estado tipado/interrupt antes de ação irreversível, agents/langgraph-architect.md:26-30) e ENTREGÁVEIS distintos (JSON importável vs código Python tipado, README:18). 'Agente-executor como parâmetro decidido na Fase 1' NÃO é construível sem inventar orquestração (No Invention / Escopo OUT 'sem duplicar orquestração'). NÃO é '90% duplicado': todo step diverge no agent, no template (guidance n8n nodes/connections vs langgraph state/edges) e o build diverge no tipo de entregável. A FORMA compartilhada (5 fases lineares) é a metodologia do pod, não duplicação de orquestração — pc-run-pod roda um wf por run, sem orquestração compartilhada entre eles.",
10
+ "json_schema_valid_linha_do_tempo": "LINHA DO TEMPO da decisão (preservada por inteiro — Risco 3 da SF7.8). [2026-07-25, REJEITADO no retrofit SF6.3] AC3/fronteira ADR-002 explicitada no brief ('validação de JSON importável pode ser json_schema_valid?'): AVALIADO para n8n-build e REJEITADO por evidência de mecanismo — à época, evalVeto json_schema_valid fazia JSON.parse do ARTEFATO INTEIRO (exigia artefato JSON puro), o que colidia com checkTemplateConformance (todo artefato de etapa deve conter as seções ##+ do template) e com stepTemplate (todo template gerado carrega headings ## + o campo-âncora `confianca`). A validação estrutural ficou como CHECKPOINT de red-team (n8n-test) — resposta honesta, não veto fabricado — e o débito registrado como CONCERNS-1 do gate SF6.3. [2026-07-29, ADOTADO na SF7.8] ADR-011 Decisão 1 (SF7.2) resolveu a colisão NO NÍVEL DA FORMA: `json_schema_valid` ganhou `extract:{section,fence}` — valida o bloco ```json da seção declarada, não o artefato inteiro; headings/`confianca` do template ficam intactos. A etapa n8n-build agora carrega o veto de importabilidade por máquina (nodes/connections, n8n-patterns.md:7) ALÉM do checkpoint de red-team, fechando o CONCERNS-1 de ponta a ponta (capacidade SF7.2 + adoção SF7.8).",
11
+ "agentes": "agents/n8n-architect.md (30 linhas, comandos *discover/*design/*build/*review/*docs — cobre as 5 fases) + agents/langgraph-architect.md (30 linhas, *design/*build/*hitl/*review/*memory)."
12
+ },
13
+ "handoffs": 4,
14
+ "critical": true,
15
+ "agents": [
16
+ {
17
+ "name": "n8n-architect",
18
+ "step": "n8n-discover",
19
+ "output": "process-map-n8n",
20
+ "sections": [
21
+ "## Trigger",
22
+ "## Passos e Sistemas",
23
+ "## Volumes e Modos de Falha",
24
+ "## Quem Opera"
25
+ ],
26
+ "veto": [
27
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod (ADR-005 Decisão A) — campo de máquina ortogonal fora dos headings; derivável pelo sweep (valor presente fora do pattern)" }
28
+ ],
29
+ "_sources": "README.md:16 Fase 1 Descoberta + agents/n8n-architect.md:18 *discover ('trigger, passos e decisões, sistemas envolvidos e suas APIs, volumes, modos de falha conhecidos, quem opera hoje')."
30
+ },
31
+ {
32
+ "name": "n8n-architect",
33
+ "step": "n8n-design",
34
+ "output": "design-n8n",
35
+ "sections": [
36
+ "## Nodes",
37
+ "## Conexoes e Branch de Erro",
38
+ "## Retry e Timeout",
39
+ "## Pontos de Dedupe",
40
+ "## Tabela de Riscos"
41
+ ],
42
+ "veto": [
43
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod (ADR-005 Decisão A)" }
44
+ ],
45
+ "checkpoint": {
46
+ "blocking": true,
47
+ "criteria": "Desenho aprovado ANTES de gerar código (README:17): lista de nodes validados contra o catálogo, branch/workflow de erro, política de retry+timeout por node externo, pontos de dedupe, tabela de riscos — APROVAÇÃO HUMANA por escrito, JULGAMENTO (fronteira ADR-002), NUNCA veto de máquina.",
48
+ "_sources": "README.md:17 'Aprovação do desenho ANTES de gerar código' + agents/n8n-architect.md:19 *design (nodes, conexões, branch de erro, retry/timeout, dedupe, tabela de riscos, para aprovação)."
49
+ },
50
+ "_sources": "README.md:17 Fase 2 Desenho + agents/n8n-architect.md:19 *design."
51
+ },
52
+ {
53
+ "name": "n8n-architect",
54
+ "step": "n8n-build",
55
+ "output": "workflow-json",
56
+ "sections": [
57
+ "## Workflow JSON Importavel",
58
+ "## Validacao de Parseabilidade"
59
+ ],
60
+ "veto": [
61
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod (ADR-005 Decisão A) — mantida junto do veto de domínio, mesmo padrão das demais etapas." },
62
+ { "type": "json_schema_valid", "schema": { "required": ["connections", "nodes"] }, "extract": { "section": "## Workflow JSON Importavel", "fence": "json" }, "_sources": "SF7.8/ADR-011 Decisão 1: prova de importabilidade por máquina — bloco ```json da seção real do template (n8n-build-tmpl.md:7), shape mínimo N8N (nodes/connections, n8n-patterns.md:7). required ordena connections primeiro (o sweep remove required[0] — o defeito exato do CONCERNS-1). Ver _sources.json_schema_valid_linha_do_tempo." }
63
+ ],
64
+ "_sources": "README.md:18 Fase 3 Geração ('JSON importável (N8N)') + agents/n8n-architect.md:20 *build ('nodes + connections + settings, valida parseabilidade antes de entregar') + knowledge/n8n-patterns.md:7-30 (estrutura do workflow JSON)."
65
+ },
66
+ {
67
+ "name": "n8n-architect",
68
+ "step": "n8n-test",
69
+ "output": "review-n8n",
70
+ "sections": [
71
+ "## Achados por Severidade",
72
+ "## Error Handling",
73
+ "## Idempotencia",
74
+ "## Custo por Execucao"
75
+ ],
76
+ "veto": [
77
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod (ADR-005 Decisão A)" }
78
+ ],
79
+ "checkpoint": {
80
+ "blocking": true,
81
+ "criteria": "Regra do pod (inegociável), itens 1-2 (README:26-27): error handling EXPLÍCITO (error workflow ou onError + branch de tratamento — falha silenciosa é bug de entrega) E idempotência ONDE APLICÁVEL (dedupe por chave externa, reexecução não duplica efeito) confirmados no red-team (*review), sem achado crítico aberto. JULGAMENTO humano ('está de fato explícito?', 'onde aplicável'), fronteira ADR-002, NUNCA veto de máquina.",
82
+ "_sources": "README.md:19 Fase 4 Teste (red-team via *review) + :26-27 Regra do pod (error handling, idempotência) + agents/n8n-architect.md:21 *review (SPOF, credenciais, loops, custo, ausência de error handling/dedupe) + knowledge/n8n-patterns.md:37-90 (error handling, retry, dedupe)."
83
+ },
84
+ "_sources": "README.md:19 Fase 4 Teste + :26-27 Regra do pod itens 1-2 + agents/n8n-architect.md:21 *review."
85
+ },
86
+ {
87
+ "name": "n8n-architect",
88
+ "step": "n8n-handoff",
89
+ "output": "runbook-n8n",
90
+ "sections": [
91
+ "## O Que Faz",
92
+ "## Como Saber Que Quebrou",
93
+ "## Como Reexecutar com Seguranca",
94
+ "## Credenciais e Dono"
95
+ ],
96
+ "veto": [
97
+ { "type": "file_referenced_exists", "field": "entregavel", "_sources": "Regra do pod item 3 (README:28 'documentação de operação'), FATIA machine-checkável: o runbook referencia o entregável de automação (campo `entregavel`) e file_referenced_exists prova que ele EXISTE em disco (o artefato de n8n-build). Ortogonal (campo fora dos headings), derivável pelo sweep (path inexistente → bloqueia). Espelha squad-forge/pod-spec.json step register (file_referenced_exists entry_point)." },
98
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod" }
99
+ ],
100
+ "checkpoint": {
101
+ "blocking": true,
102
+ "criteria": "Regra do pod (inegociável), item 3 (README:28): runbook OPERÁVEL — o que a automação faz, como saber que quebrou (onde olhar), como reexecutar com segurança, credenciais necessárias, quem é o dono. COMPLETUDE/qualidade QUALITATIVA (julgamento humano), fronteira ADR-002, NUNCA veto — a fatia objetiva ('o entregável existe') é o veto file_referenced_exists acima.",
103
+ "_sources": "README.md:20 Fase 5 Handoff de deploy (runbook *docs) + :28 Regra do pod item 3 + agents/n8n-architect.md:22 *docs (o que faz, como saber que quebrou, como reexecutar, credenciais, dono)."
104
+ },
105
+ "_sources": "README.md:20 Fase 5 Handoff + :28 Regra do pod item 3 + agents/n8n-architect.md:22 *docs."
106
+ }
107
+ ],
108
+ "smoke_scenario": "workflows/wf-n8n-build.smoke.json"
109
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "pod": "automation",
3
+ "workflowId": "langgraph-build",
4
+ "_adr": "ADR-005 Decisão B: agents[] ordenado = ordem topológica das 5 fases (Descoberta→Desenho→Geração→Teste→Handoff). Segundo workflow do pod `automation` (track Langgraph), irmão de wf-n8n-build.yaml — ver pod-spec._sources.decisao_2_workflows para o racional de 2 wf-*.yaml. Gerado por forge-generate.cjs --additive (MERGE em squad-io.yaml, padrão multi-workflow do hormozi-method/specs/). Namespace pod-wide (M3): step-ids lg-* e outputs *-lg/graph-code NÃO colidem com os n8n-* de wf-n8n-build.",
5
+ "_sources": {
6
+ "fluxo_tipico": "README.md:14-20 'Fluxo típico' — MESMAS 5 fases do track N8N; divergem só no agente-executor (langgraph-architect) e no entregável da Geração (código Python tipado, README:18).",
7
+ "track_langgraph": "README.md:10-12 — 'um agente decide, com estado e supervisão humana' → Langgraph; agents/langgraph-architect.md (grafos Langgraph em Python, agentes com estado em produção).",
8
+ "descoberta_langgraph": "README.md:16 'Descoberta do processo — *discover (n8n) OU entrevista equivalente'. langgraph-architect não tem comando *discover próprio; a descoberta do track Langgraph é a 'entrevista equivalente', conduzida pelo próprio langgraph-architect (executor do track, cujo *design pressupõe o processo entendido — agents/langgraph-architect.md:18). Nenhum agente de descoberta separado é inventado (No Invention).",
9
+ "regra_do_pod": "README.md:22-28 — mesma Regra inegociável, sabor Langgraph: error handling = estados de erro e retry (RetryPolicy/rota de erro no estado, langgraph-patterns.md:112-119); idempotência = ação irreversível exige interrupt ou chave de idempotência (langgraph-patterns.md:119); documentação de operação = runbook + config de checkpointer/persistência (*memory, agents/langgraph-architect.md:22). Julgamento → checkpoint (lg-test, lg-handoff); fatia objetiva (entregável existe) → veto file_referenced_exists (lg-handoff)."
10
+ },
11
+ "handoffs": 4,
12
+ "critical": true,
13
+ "agents": [
14
+ {
15
+ "name": "langgraph-architect",
16
+ "step": "lg-discover",
17
+ "output": "process-map-lg",
18
+ "sections": [
19
+ "## Processo e Decisao",
20
+ "## Estado Necessario",
21
+ "## Pontos de Supervisao Humana",
22
+ "## Quem Opera"
23
+ ],
24
+ "veto": [
25
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod (ADR-005 Decisão A) — campo de máquina ortogonal fora dos headings" }
26
+ ],
27
+ "_sources": "README.md:16 Fase 1 Descoberta ('entrevista equivalente' para o track Langgraph) — processo, decisão de LLM, estado necessário, pontos de supervisão humana, quem opera. Ver _sources.descoberta_langgraph."
28
+ },
29
+ {
30
+ "name": "langgraph-architect",
31
+ "step": "lg-design",
32
+ "output": "design-lg",
33
+ "sections": [
34
+ "## Schema de Estado",
35
+ "## Nodes e Responsabilidade",
36
+ "## Edges Condicionais",
37
+ "## Condicao de Parada e Limite",
38
+ "## Checkpoints"
39
+ ],
40
+ "veto": [
41
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod (ADR-005 Decisão A)" }
42
+ ],
43
+ "checkpoint": {
44
+ "blocking": true,
45
+ "criteria": "Desenho aprovado ANTES de gerar código (README:17): schema de estado (campos, tipos, reducers), nodes com responsabilidade única, edges condicionais com TODAS as rotas mapeadas (rota default de erro incluída), condição de parada explícita E limite de iterações, checkpoints — APROVAÇÃO HUMANA por escrito, JULGAMENTO (ADR-002), NUNCA veto.",
46
+ "_sources": "README.md:17 'Aprovação do desenho ANTES de gerar código' + agents/langgraph-architect.md:18 *design + :30 (toda edge condicional cobre todos os valores) + knowledge/langgraph-patterns.md:32-46 (conditional edges, condição de parada primeiro)."
47
+ },
48
+ "_sources": "README.md:17 Fase 2 Desenho + agents/langgraph-architect.md:18 *design."
49
+ },
50
+ {
51
+ "name": "langgraph-architect",
52
+ "step": "lg-build",
53
+ "output": "graph-code",
54
+ "sections": [
55
+ "## Codigo do Grafo",
56
+ "## Estado Tipado",
57
+ "## Recursion Limit"
58
+ ],
59
+ "veto": [
60
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod. Entregável = código Python tipado (README:18), NÃO JSON — json_schema_valid é inaplicável a este track (ver pod-spec._sources.json_schema_valid_avaliado_e_rejeitado); a validação (recursion_limit + estado tipado) fica no red-team lg-test." }
61
+ ],
62
+ "_sources": "README.md:18 Fase 3 Geração ('código Python tipado (Langgraph)') + agents/langgraph-architect.md:19 *build (StateGraph com TypedDict/Pydantic, type hints, docstrings, recursion_limit configurado) + knowledge/langgraph-patterns.md:5-25,102-108."
63
+ },
64
+ {
65
+ "name": "langgraph-architect",
66
+ "step": "lg-test",
67
+ "output": "review-lg",
68
+ "sections": [
69
+ "## Achados por Severidade",
70
+ "## Rotas Nao Tratadas",
71
+ "## Custo de Tokens por Caminho",
72
+ "## Acoes Irreversiveis"
73
+ ],
74
+ "veto": [
75
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod (ADR-005 Decisão A)" }
76
+ ],
77
+ "checkpoint": {
78
+ "blocking": true,
79
+ "criteria": "Regra do pod (inegociável), itens 1-2 sabor Langgraph (README:26-27): error handling EXPLÍCITO (estados de erro e retry — RetryPolicy/rota de erro no estado, checkpointer presente) E idempotência ONDE APLICÁVEL (ação irreversível protegida por interrupt ou chave de idempotência; código antes do interrupt idempotente) confirmados no red-team (*review), sem ciclo sem saída nem rota não tratada. JULGAMENTO humano, fronteira ADR-002, NUNCA veto.",
80
+ "_sources": "README.md:19 Fase 4 Teste + :26-27 Regra do pod + agents/langgraph-architect.md:21 *review (ciclos sem saída, rotas não tratadas, custo de tokens, ações irreversíveis sem interrupt, checkpointer ausente) + :26-28 golden rules + knowledge/langgraph-patterns.md:79,119."
81
+ },
82
+ "_sources": "README.md:19 Fase 4 Teste + :26-27 Regra do pod itens 1-2 + agents/langgraph-architect.md:21 *review."
83
+ },
84
+ {
85
+ "name": "langgraph-architect",
86
+ "step": "lg-handoff",
87
+ "output": "runbook-lg",
88
+ "sections": [
89
+ "## O Que Faz",
90
+ "## Como Saber Que Quebrou",
91
+ "## Como Reexecutar com Seguranca",
92
+ "## Checkpointer e Dono"
93
+ ],
94
+ "veto": [
95
+ { "type": "file_referenced_exists", "field": "entregavel", "_sources": "Regra do pod item 3 (README:28), FATIA machine-checkável: o runbook referencia o entregável (campo `entregavel` = artefato de lg-build) e file_referenced_exists prova que existe em disco. Ortogonal, derivável pelo sweep (path inexistente → bloqueia)." },
96
+ { "type": "field_matches", "field": "confianca", "pattern": "^(alta|media|baixa)$", "_sources": "âncora de conformidade do pod" }
97
+ ],
98
+ "checkpoint": {
99
+ "blocking": true,
100
+ "criteria": "Regra do pod (inegociável), item 3 (README:28): runbook OPERÁVEL — o que faz, como saber que quebrou, como reexecutar com segurança, config de checkpointer/persistência (retomada após falha) e quem é o dono. COMPLETUDE QUALITATIVA (julgamento), fronteira ADR-002, NUNCA veto — a fatia objetiva ('entregável existe') é o veto file_referenced_exists acima.",
101
+ "_sources": "README.md:20 Fase 5 Handoff + :28 Regra do pod item 3 + agents/langgraph-architect.md:22 *memory (checkpointing/persistência, retomada após falha)."
102
+ },
103
+ "_sources": "README.md:20 Fase 5 Handoff + :28 Regra do pod item 3 + agents/langgraph-architect.md:22 *memory."
104
+ }
105
+ ],
106
+ "smoke_scenario": "workflows/wf-langgraph-build.smoke.json"
107
+ }
@@ -0,0 +1,28 @@
1
+ # squad-io.yaml — contrato de handoff do pod `automation` (SF1.4).
2
+ # Cada handoff liga o output de uma etapa ao input da etapa a jusante.
3
+ pod: automation
4
+ handoffs:
5
+ - from: n8n-discover
6
+ to: n8n-design
7
+ artifact: process-map-n8n
8
+ - from: n8n-design
9
+ to: n8n-build
10
+ artifact: design-n8n
11
+ - from: n8n-build
12
+ to: n8n-test
13
+ artifact: workflow-json
14
+ - from: n8n-test
15
+ to: n8n-handoff
16
+ artifact: review-n8n
17
+ - from: lg-discover
18
+ to: lg-design
19
+ artifact: process-map-lg
20
+ - from: lg-design
21
+ to: lg-build
22
+ artifact: design-lg
23
+ - from: lg-build
24
+ to: lg-test
25
+ artifact: graph-code
26
+ - from: lg-test
27
+ to: lg-handoff
28
+ artifact: review-lg
@@ -0,0 +1,17 @@
1
+ # Template de saída — etapa `lg-build` (agente `langgraph-architect`, artefato `graph-code`)
2
+
3
+ > Gerado por forge-generate.cjs (SF1.4 + ADR-005). Preencher com o artefato real da etapa.
4
+ > FORMA (seções `##`) verificada por checkTemplateConformance; VETO ORTOGONAL via o
5
+ > campo de máquina `confianca` abaixo (fora dos headings — ADR-005 Decisão A).
6
+
7
+ ## Codigo do Grafo
8
+ <!-- preencher: conteúdo de "Codigo do Grafo" -->
9
+
10
+ ## Estado Tipado
11
+ <!-- preencher: conteúdo de "Estado Tipado" -->
12
+
13
+ ## Recursion Limit
14
+ <!-- preencher: conteúdo de "Recursion Limit" -->
15
+
16
+ <!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
17
+ confianca: <alta|media|baixa>
@@ -0,0 +1,23 @@
1
+ # Template de saída — etapa `lg-design` (agente `langgraph-architect`, artefato `design-lg`)
2
+
3
+ > Gerado por forge-generate.cjs (SF1.4 + ADR-005). Preencher com o artefato real da etapa.
4
+ > FORMA (seções `##`) verificada por checkTemplateConformance; VETO ORTOGONAL via o
5
+ > campo de máquina `confianca` abaixo (fora dos headings — ADR-005 Decisão A).
6
+
7
+ ## Schema de Estado
8
+ <!-- preencher: conteúdo de "Schema de Estado" -->
9
+
10
+ ## Nodes e Responsabilidade
11
+ <!-- preencher: conteúdo de "Nodes e Responsabilidade" -->
12
+
13
+ ## Edges Condicionais
14
+ <!-- preencher: conteúdo de "Edges Condicionais" -->
15
+
16
+ ## Condicao de Parada e Limite
17
+ <!-- preencher: conteúdo de "Condicao de Parada e Limite" -->
18
+
19
+ ## Checkpoints
20
+ <!-- preencher: conteúdo de "Checkpoints" -->
21
+
22
+ <!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
23
+ confianca: <alta|media|baixa>
@@ -0,0 +1,20 @@
1
+ # Template de saída — etapa `lg-discover` (agente `langgraph-architect`, artefato `process-map-lg`)
2
+
3
+ > Gerado por forge-generate.cjs (SF1.4 + ADR-005). Preencher com o artefato real da etapa.
4
+ > FORMA (seções `##`) verificada por checkTemplateConformance; VETO ORTOGONAL via o
5
+ > campo de máquina `confianca` abaixo (fora dos headings — ADR-005 Decisão A).
6
+
7
+ ## Processo e Decisao
8
+ <!-- preencher: conteúdo de "Processo e Decisao" -->
9
+
10
+ ## Estado Necessario
11
+ <!-- preencher: conteúdo de "Estado Necessario" -->
12
+
13
+ ## Pontos de Supervisao Humana
14
+ <!-- preencher: conteúdo de "Pontos de Supervisao Humana" -->
15
+
16
+ ## Quem Opera
17
+ <!-- preencher: conteúdo de "Quem Opera" -->
18
+
19
+ <!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
20
+ confianca: <alta|media|baixa>
@@ -0,0 +1,20 @@
1
+ # Template de saída — etapa `lg-handoff` (agente `langgraph-architect`, artefato `runbook-lg`)
2
+
3
+ > Gerado por forge-generate.cjs (SF1.4 + ADR-005). Preencher com o artefato real da etapa.
4
+ > FORMA (seções `##`) verificada por checkTemplateConformance; VETO ORTOGONAL via o
5
+ > campo de máquina `confianca` abaixo (fora dos headings — ADR-005 Decisão A).
6
+
7
+ ## O Que Faz
8
+ <!-- preencher: conteúdo de "O Que Faz" -->
9
+
10
+ ## Como Saber Que Quebrou
11
+ <!-- preencher: conteúdo de "Como Saber Que Quebrou" -->
12
+
13
+ ## Como Reexecutar com Seguranca
14
+ <!-- preencher: conteúdo de "Como Reexecutar com Seguranca" -->
15
+
16
+ ## Checkpointer e Dono
17
+ <!-- preencher: conteúdo de "Checkpointer e Dono" -->
18
+
19
+ <!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
20
+ confianca: <alta|media|baixa>