@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,45 @@
1
+ {
2
+ "pod": "authority-content",
3
+ "workflowId": "criacao-redteam",
4
+ "_adr": "ADR-004 caminho leve (Story SF6.4, SIMPLE): retrofit LEVE — no máximo 1 workflow mínimo, cobrindo só as 2 etapas com o gate mais forte do pipeline de 5 fases (Criação na voz + RED-TEAM FACTUAL). Radar, Adaptação por canal e Publicação+medição permanecem comandos de agente em prosa (`*radar`/`*adapt`/`*errata`, agents/content-chief.md — NÃO tocado), não formalizados em DAG. SEM squad-io.yaml/memória obrigatórios (ADR-004 explícito para SIMPLE).",
5
+ "_sources": {
6
+ "pipeline": "template/pods/authority-content/README.md:7-19 — pipeline 5 fases OBRIGATÓRIAS: (1) Radar/spy (2) Criação na voz (3) RED-TEAM FACTUAL (4) Adaptação por canal (5) Publicação+medição.",
7
+ "gate_mais_forte": "README.md:21-23 'A lição de 2026-07-21': o red-team factual é a ÚNICA fase explicitamente 'inegociável' — o gate de estilo aprovou o que o red-team derrubou de 10 para 6,5 (erro de enunciado + erro de atribuição de fonte). É o candidato natural à formalização como etapa de workflow (mesmo princípio de 'gate mais citado como diferencial' usado em hormozi-method/value_stack_veto e squad-forge/red-team).",
8
+ "escopo_do_workflow": "Só 'Criação na voz' → 'Red-team factual' formalizadas em 2 etapas (2 templates = Escopo IN (d)/AC4, 'templates das 1-2 saídas mais valiosas'). Radar (*radar), Adaptação por canal (*adapt) e Publicação+medição (*errata) permanecem comandos do agente em prosa — workflow MÍNIMO (não exaustivo): forge-generate.cjs gera 1 template por etapa declarada em agents[], e AC4 já limita a contagem a 1-2 por pod.",
9
+ "handoffs_racional": "handoffs:0 — as 2 etapas do workflow são executadas pelo MESMO agente físico (content-chief); não há handoff CROSS-AGENTE (definição do limiar de forge-assess-tier.cjs: '≤1 handoff cross-agente ainda pode ser SIMPLE'). Distinto do padrão de squad-forge/pod-spec.json (handoffs:3), que conta toda aresta sequencial independente de agente físico — ali o número não influenciava o veredito (já STANDARD por >2 agentes); aqui a distinção é decisiva para o veredito SIMPLE e por isso fica registrada.",
10
+ "dna_racional": "dna:false — content-chief consome `knowledge/voice-dna/voice-dna.yaml` (opcional; ausente ⇒ degrau abaixo da escada de voz, sem bloquear) como INSUMO DE ESTILO do conteúdo que PRODUZ (a peça é escrita NA voz do usuário real, README.md:34, agents/content-chief.md *create). Isso NÃO é o gatilho dna/persona/clone de forge-assess-tier.cjs (que mede se o AGENTE clona a mente/voz de um especialista EXTERNO — caso do mind-extractor/Fase 2 do squad-forge). Nota já registrada no header AUTO-DECISION pc-planner da story.",
11
+ "critical_racional": "critical:false — RESSALVA registrada (Escopo IN (a) da story): o red-team factual (*redteam) é rigor de QUALIDADE editorial (nenhuma peça publica sem passar por ele — agents/content-chief.md 'Regras de ouro'), não criticidade de PERSISTÊNCIA/produção no sentido do limiar ADR-004 (dado que, perdido/corrompido, quebra o sistema). Conteúdo reprovado no red-team simplesmente não publica — sem efeito de sistema. A fase de red-team em si NÃO é enfraquecida por esta story (Risco 3 da story, mitigação registrada): agents/content-chief.md não foi tocado."
12
+ },
13
+ "handoffs": 0,
14
+ "workflows": 1,
15
+ "dna": false,
16
+ "critical": false,
17
+ "agents": [
18
+ {
19
+ "name": "content-chief",
20
+ "step": "criacao-na-voz",
21
+ "output": "peca-mae",
22
+ "sections": [
23
+ "## Peça (texto na voz do usuário)",
24
+ "## Rastreio de Números ao Research",
25
+ "## Canal de Origem e Destino"
26
+ ]
27
+ },
28
+ {
29
+ "name": "content-chief",
30
+ "step": "red-team-factual",
31
+ "output": "relatorio-redteam",
32
+ "sections": [
33
+ "## Verificação por Número (fonte primária)",
34
+ "## Verificação de Atribuição de Fonte",
35
+ "## Verificação de Enunciado (o número sustenta a frase?)",
36
+ "## Conflitos de Interesse (dois lados do argumento)",
37
+ "## Veredito"
38
+ ],
39
+ "checkpoint": {
40
+ "blocking": false,
41
+ "criteria": "Caminho leve SIMPLE (ADR-004, Story SF6.4): sem checkpoint bloqueante de máquina/gate humano formal no workflow mínimo — este workflow é smoke estático + caminho feliz, não substitui o rigor do comando `*redteam` (agents/content-chief.md, reprova por default, não tocado por esta story)."
42
+ }
43
+ }
44
+ ]
45
+ }
@@ -0,0 +1,17 @@
1
+ # Template de saída — etapa `criacao-na-voz` (agente `content-chief`, artefato `peca-mae`)
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
+ ## Peça (texto na voz do usuário)
8
+ <!-- preencher: conteúdo de "Peça (texto na voz do usuário)" -->
9
+
10
+ ## Rastreio de Números ao Research
11
+ <!-- preencher: conteúdo de "Rastreio de Números ao Research" -->
12
+
13
+ ## Canal de Origem e Destino
14
+ <!-- preencher: conteúdo de "Canal de Origem e Destino" -->
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 `red-team-factual` (agente `content-chief`, artefato `relatorio-redteam`)
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
+ ## Verificação por Número (fonte primária)
8
+ <!-- preencher: conteúdo de "Verificação por Número (fonte primária)" -->
9
+
10
+ ## Verificação de Atribuição de Fonte
11
+ <!-- preencher: conteúdo de "Verificação de Atribuição de Fonte" -->
12
+
13
+ ## Verificação de Enunciado (o número sustenta a frase?)
14
+ <!-- preencher: conteúdo de "Verificação de Enunciado (o número sustenta a frase?)" -->
15
+
16
+ ## Conflitos de Interesse (dois lados do argumento)
17
+ <!-- preencher: conteúdo de "Conflitos de Interesse (dois lados do argumento)" -->
18
+
19
+ ## Veredito
20
+ <!-- preencher: conteúdo de "Veredito" -->
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,30 @@
1
+ # wf-criacao-redteam.yaml — gerado por forge-generate.cjs (SF1.4).
2
+ # Contrato: templates/workflow-tmpl.yaml. Validador: scripts/validate-pod-workflow.cjs.
3
+
4
+ state_machine:
5
+ states: [init, running, review, complete, failed]
6
+ initial: init
7
+ terminal: [complete, failed]
8
+
9
+ steps:
10
+ - id: criacao-na-voz
11
+ agent: content-chief
12
+ template: templates/criacao-na-voz-tmpl.md
13
+ inputs: [brief]
14
+ outputs: [peca-mae]
15
+ depends_on: []
16
+ checkpoint: null
17
+ veto:
18
+ assertions:
19
+ - { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$" }
20
+
21
+ - id: red-team-factual
22
+ agent: content-chief
23
+ template: templates/red-team-factual-tmpl.md
24
+ inputs: [peca-mae]
25
+ outputs: [relatorio-redteam]
26
+ depends_on: [criacao-na-voz]
27
+ checkpoint: { blocking: false, criteria: "Caminho leve SIMPLE (ADR-004, Story SF6.4): sem checkpoint bloqueante de máquina/gate humano formal no workflow mínimo — este workflow é smoke estático + caminho feliz, não substitui o rigor do comando `*redteam` (agents/content-chief.md, reprova por default, não tocado por esta story)." }
28
+ veto:
29
+ assertions:
30
+ - { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$" }
@@ -0,0 +1,37 @@
1
+ # Pod: automation
2
+
3
+ Automações de processos reais de negócio (PMEs) com **N8N** e **Langgraph**. O job-to-be-done: transformar um processo manual descrito pelo cliente em uma automação operável em produção — com dono, runbook e tratamento de falha.
4
+
5
+ ## Agentes
6
+
7
+ | Agente | Especialidade | Quando usar |
8
+ |---|---|---|
9
+ | `agents/n8n-architect.md` | Workflows N8N (integrações, webhooks, agendamentos) | Processo é orquestração de sistemas: APIs, planilhas, mensageria, e-mail |
10
+ | `agents/langgraph-architect.md` | Grafos Langgraph em Python (agentes com estado) | Processo exige raciocínio de LLM, decisão condicional, human-in-the-loop |
11
+
12
+ Critério de escolha: se a automação é "mover e transformar dados entre sistemas", N8N. Se é "um agente decide, com estado e supervisão humana", Langgraph. Híbridos existem (N8N chama um serviço Langgraph via webhook).
13
+
14
+ ## Fluxo típico
15
+
16
+ 1. **Descoberta do processo** — `*discover` (n8n) ou entrevista equivalente: trigger, passos, sistemas envolvidos, volumes, modos de falha, quem opera.
17
+ 2. **Desenho** — `*design`: diagrama do workflow/grafo, pontos de erro, retry/timeout, custo estimado. Aprovação do desenho ANTES de gerar código.
18
+ 3. **Geração** — `*build`: JSON importável (N8N) ou código Python tipado (Langgraph).
19
+ 4. **Teste** — execução com dados reais de amostra; red-team via `*review` do próprio pod antes de entregar.
20
+ 5. **Handoff de deploy** — runbook de operação (`*docs`), credenciais configuradas pelo cliente no ambiente dele, critérios de monitoramento definidos.
21
+
22
+ ## Regra do pod (inegociável)
23
+
24
+ Toda automação entregue tem:
25
+
26
+ - **Error handling explícito** — error workflow/branch de erro no N8N; estados de erro e retry no Langgraph. Falha silenciosa é bug de entrega, não de operação.
27
+ - **Idempotência onde aplicável** — reprocessar a mesma entrada não pode duplicar efeito (dedupe por chave externa, upsert, checagem de estado antes de agir).
28
+ - **Documentação de operação** — runbook com: o que a automação faz, como saber que quebrou, como reexecutar com segurança, quem é o dono.
29
+
30
+ ## Conhecimento
31
+
32
+ - `knowledge/n8n-patterns.md` — estrutura de workflow JSON, error handling, dedupe, webhooks seguros, integrações comuns, anti-patterns.
33
+ - `knowledge/langgraph-patterns.md` — StateGraph, conditional edges, checkpointing, interrupts/HITL, subgrafos, limites de recursão, testes.
34
+
35
+ ## Exemplos validados
36
+
37
+ - `examples/n8n-content-radar.workflow.json` — briefing diário de notícias de IA (cron → RSS → filtro → dedupe → e-mail + Google Sheets), com error handling. Ver `examples/README.md` para importar.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: langgraph-architect
3
+ description: "Especialista em Langgraph (Python) para agentes com estado em produção. Use para: modelar o grafo de um agente, gerar código tipado do grafo, desenhar human-in-the-loop com interrupts, revisar grafos (red-team), configurar checkpointing/persistência."
4
+ model: sonnet
5
+ budget_tokens: 1200
6
+ ---
7
+
8
+ # langgraph-architect
9
+
10
+ ## Papel
11
+
12
+ Arquiteto de grafos Langgraph em Python para automações que exigem decisão de LLM com estado. Critério de qualidade: nenhum grafo entra em produção sem condição de parada provada, estado tipado e custo de tokens estimado — um agente que pode iterar para sempre é um incidente agendado, não uma feature.
13
+
14
+ ## Comandos
15
+
16
+ | Comando | O que faz | Carrega |
17
+ |---|---|---|
18
+ | `*design` | Modela o grafo: schema de estado (campos, tipos, reducers), nodes e responsabilidade única de cada um, edges condicionais com todas as rotas mapeadas, checkpoints, condição de parada e limite de iterações. Saída: diagrama + tabela estado/transições, para aprovação. | `pods/automation/knowledge/langgraph-patterns.md` |
19
+ | `*build` | Gera o código do grafo a partir do desenho aprovado: `StateGraph` com estado TypedDict/Pydantic, type hints completos, docstrings em cada node, `recursion_limit` configurado. | `pods/automation/knowledge/langgraph-patterns.md` |
20
+ | `*hitl` | Desenha os pontos de human-in-the-loop: onde interromper (`interrupt`), o que o humano vê, como aprova/edita/rejeita, como o grafo retoma (`Command(resume=...)`). | `pods/automation/knowledge/langgraph-patterns.md` |
21
+ | `*review` | Red-team de grafo existente: ciclos sem saída garantida, estados/rotas não tratados em edges condicionais, custo de tokens por caminho (melhor/pior caso), ações irreversíveis sem interrupt, checkpointer ausente. Saída: achados por severidade. | `pods/automation/knowledge/langgraph-patterns.md` |
22
+ | `*memory` | Configura checkpointing/persistência: escolha de checkpointer (memória, SQLite, Postgres), `thread_id`, retenção, retomada após falha. | `pods/automation/knowledge/langgraph-patterns.md` |
23
+
24
+ ## Regras de ouro
25
+
26
+ - **Todo grafo tem condição de parada explícita E limite de iterações** (`recursion_limit` + contador no estado). Loop de agente sem teto é veto.
27
+ - **Estado sempre tipado** — `TypedDict` ou Pydantic; nunca `dict` solto. Reducers declarados para campos acumulativos.
28
+ - **Interrupt obrigatório antes de ação irreversível** (enviar, pagar, deletar, publicar). Autonomia total só para ações reversíveis.
29
+ - **Custo estimado por caminho documentado** (tokens × chamadas no pior caso) antes de ir a produção.
30
+ - **Toda edge condicional cobre todos os valores possíveis** — rota default de erro incluída; `KeyError` em routing é bug de desenho.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: n8n-architect
3
+ description: "Especialista em automações N8N para negócios reais (PMEs). Use para: mapear um processo e desenhar o workflow, gerar o JSON importável, revisar um workflow existente (red-team), escrever o runbook de operação."
4
+ model: sonnet
5
+ budget_tokens: 1200
6
+ ---
7
+
8
+ # n8n-architect
9
+
10
+ ## Papel
11
+
12
+ Arquiteto de automações N8N para PMEs. Traduz processos de negócio em workflows operáveis em produção — não demos. Critério de qualidade: o workflow sobrevive a falha de API, entrada duplicada e operador leigo; se não sobrevive, não está pronto. Desenho aprovado antes de JSON gerado.
13
+
14
+ ## Comandos
15
+
16
+ | Comando | O que faz | Carrega |
17
+ |---|---|---|
18
+ | `*discover` | Entrevista o processo a automatizar: trigger (o que dispara?), passos e decisões, sistemas envolvidos e suas APIs, volumes (execuções/dia, itens/execução), modos de falha conhecidos, quem opera hoje. Saída: mapa do processo em markdown. | — |
19
+ | `*design` | Desenha o workflow: lista de nodes (validados contra o catálogo), conexões, branch/workflow de erro, política de retry e timeout por node externo, pontos de dedupe. Saída: desenho + tabela de riscos, para aprovação. | `pods/automation/knowledge/n8n-patterns.md` |
20
+ | `*build` | Gera o JSON importável (`nodes` + `connections` + `settings`), seguindo o desenho aprovado. Valida parseabilidade antes de entregar. | `pods/automation/knowledge/n8n-patterns.md` |
21
+ | `*review` | Red-team de workflow existente: pontos únicos de falha, credenciais expostas ou hardcoded, loops/polling agressivo, custo por execução, ausência de error handling e de dedupe. Saída: achados por severidade. | `pods/automation/knowledge/n8n-patterns.md` |
22
+ | `*docs` | Runbook de operação: o que faz, como saber que quebrou (onde olhar), como reexecutar com segurança, credenciais necessárias, dono. | — |
23
+
24
+ ## Regras de ouro
25
+
26
+ - **Nunca inventar node.** Todo node citado existe no catálogo do N8N (`n8n-nodes-base.*` ou community node identificado); em dúvida, usar HTTP Request ou Code e declarar o porquê.
27
+ - **Todo workflow tem error handling explícito** — error workflow dedicado ou `onError` + branch de tratamento. Sem exceção.
28
+ - **Credenciais só via credential store do N8N.** Nunca em parâmetros, expressões, Code nodes ou JSON exportado.
29
+ - **Webhook sempre autenticado** (header auth, HMAC ou basic) e com validação de payload antes de agir.
30
+ - **Efeitos externos idempotentes onde aplicável:** dedupe por chave externa antes de criar/enviar/cobrar.
@@ -0,0 +1,46 @@
1
+ # Exemplos — pod automation
2
+
3
+ ## n8n-content-radar.example.json
4
+
5
+ **Content Radar** — briefing diário por RSS: colhe itens de N fontes, filtra pelos SEUS termos e manda um resumo.
6
+
7
+ > **Esqueleto, não workflow pronto** (`pc:placeholder` no JSON). O fluxo é reaproveitável em qualquer
8
+ > assunto; as fontes e os termos são seus — um radar com o nicho de outra pessoa entrega o briefing errado
9
+ > todo dia, sem nunca falhar de forma visível.
10
+
11
+ Fluxo: cron 07h (timezone `UTC`, ajuste para o seu) → 3 feeds RSS em paralelo (`RSS Fonte 1/2/3`) → merge → branch de erro (IF `$json.error`) → filtro por palavras-chave (lista `PATTERNS`, que você preenche) → dedupe entre execuções por link → briefing HTML por e-mail + append linha a linha num Google Sheet.
12
+
13
+ ### Como importar
14
+
15
+ 1. No N8N: **Workflows → Add workflow → Import from File** e selecione `n8n-content-radar.example.json` (ou cole o conteúdo via *Import from Clipboard*).
16
+ 2. O workflow importa **inativo**. Só ative após configurar credenciais e testar.
17
+
18
+ ### Credenciais (via credential store do N8N — nada é hardcoded no JSON)
19
+
20
+ | Node | Credencial | Como configurar |
21
+ |---|---|---|
22
+ | `Envia Briefing por Email` e `Alerta Falha de Feed` | **SMTP** | Credentials → New → SMTP (host, porta, usuário, senha do seu provedor) e selecione no node |
23
+ | `Grava no Google Sheets` | **Google Sheets OAuth2** | Credentials → New → Google Sheets OAuth2 API (client ID/secret do Google Cloud) e selecione no node |
24
+
25
+ ### Configuração após importar
26
+
27
+ 1. **E-mails:** troque `radar@example.com` / `voce@example.com` nos dois nodes de e-mail pelos endereços reais.
28
+ 2. **Planilha:** no node `Grava no Google Sheets`, selecione o spreadsheet e a aba. Crie antes uma planilha com cabeçalhos: `coletado_em`, `titulo`, `link`, `fonte`, `publicado_em`.
29
+ 3. **Feeds (obrigatório):** as URLs em `RSS Fonte 1/2/3` são placeholders (`exemplo-fonte-N`) e **não respondem** — troque pelo `url` dos feeds que você acompanha. Mais ou menos de 3 fontes: ajuste `numberInputs` no node `Merge Feeds` e as conexões.
30
+ 4. **Palavras-chave (obrigatório):** edite a lista `PATTERNS` no node `Filtra Palavras-chave` — ela vem com `termo-1`/`termo-2`, que não casam nada de útil.
31
+ 5. **Horário e fuso:** cron `0 7 * * *` no trigger; `settings.timezone` vem `UTC` (neutro) — troque pelo fuso de quem opera, senão o disparo acontece na hora errada sem erro visível.
32
+
33
+ ### Error handling (como está montado)
34
+
35
+ - Cada node RSS tem `onError: continueRegularOutput` + retry (3 tentativas, 5s): um feed fora do ar **não** derruba a coleta dos demais. O item de erro segue para o IF `Feed OK?`, que o desvia para `Alerta Falha de Feed` (e-mail de alerta ao operador).
36
+ - Falhas em e-mail/Sheets têm retry e, se persistirem, **param a execução** (visível em Executions). Recomendado: criar um error workflow global (node `Error Trigger`) e apontá-lo em **Workflow Settings → Error Workflow** — ver `../knowledge/n8n-patterns.md`, seção 2.
37
+
38
+ ### Idempotência
39
+
40
+ O node `Dedupe por Link` usa `removeItemsSeenInPreviousExecutions` com o link como chave: reexecutar o workflow (manual ou por retry) **não** repete item já enviado/gravado. Para reprocessar do zero, limpe o histórico do node (opção *Clear deduplication history*).
41
+
42
+ ### Teste antes de ativar
43
+
44
+ 1. Execute manualmente (**Test workflow**) e confira: itens filtrados no node de filtro, e-mail recebido, linhas na planilha.
45
+ 2. Execute de novo em seguida: o dedupe deve zerar os itens (prova de idempotência).
46
+ 3. Quebre de propósito uma URL de feed e execute: o alerta de falha deve chegar e os outros feeds devem seguir normais.
@@ -0,0 +1,380 @@
1
+ {
2
+ "name": "Content Radar — Briefing diário por RSS",
3
+ "nodes": [
4
+ {
5
+ "parameters": {
6
+ "rule": {
7
+ "interval": [
8
+ {
9
+ "field": "cronExpression",
10
+ "expression": "0 7 * * *"
11
+ }
12
+ ]
13
+ }
14
+ },
15
+ "id": "a1f2c3d4-0001-4c3a-9b1e-000000000001",
16
+ "name": "Cron Diario 07h",
17
+ "type": "n8n-nodes-base.scheduleTrigger",
18
+ "typeVersion": 1.2,
19
+ "position": [
20
+ -720,
21
+ 40
22
+ ]
23
+ },
24
+ {
25
+ "parameters": {
26
+ "url": "https://exemplo-fonte-1.com/feed.xml",
27
+ "options": {}
28
+ },
29
+ "id": "a1f2c3d4-0002-4c3a-9b1e-000000000002",
30
+ "name": "RSS Fonte 1",
31
+ "type": "n8n-nodes-base.rssFeedRead",
32
+ "typeVersion": 1.1,
33
+ "position": [
34
+ -500,
35
+ -120
36
+ ],
37
+ "onError": "continueRegularOutput",
38
+ "retryOnFail": true,
39
+ "maxTries": 3,
40
+ "waitBetweenTries": 5000
41
+ },
42
+ {
43
+ "parameters": {
44
+ "url": "https://exemplo-fonte-2.com/rss",
45
+ "options": {}
46
+ },
47
+ "id": "a1f2c3d4-0003-4c3a-9b1e-000000000003",
48
+ "name": "RSS Fonte 2",
49
+ "type": "n8n-nodes-base.rssFeedRead",
50
+ "typeVersion": 1.1,
51
+ "position": [
52
+ -500,
53
+ 40
54
+ ],
55
+ "onError": "continueRegularOutput",
56
+ "retryOnFail": true,
57
+ "maxTries": 3,
58
+ "waitBetweenTries": 5000
59
+ },
60
+ {
61
+ "parameters": {
62
+ "url": "https://exemplo-fonte-3.com/feed",
63
+ "options": {}
64
+ },
65
+ "id": "a1f2c3d4-0004-4c3a-9b1e-000000000004",
66
+ "name": "RSS Fonte 3",
67
+ "type": "n8n-nodes-base.rssFeedRead",
68
+ "typeVersion": 1.1,
69
+ "position": [
70
+ -500,
71
+ 200
72
+ ],
73
+ "onError": "continueRegularOutput",
74
+ "retryOnFail": true,
75
+ "maxTries": 3,
76
+ "waitBetweenTries": 5000
77
+ },
78
+ {
79
+ "parameters": {
80
+ "numberInputs": 3
81
+ },
82
+ "id": "a1f2c3d4-0005-4c3a-9b1e-000000000005",
83
+ "name": "Merge Feeds",
84
+ "type": "n8n-nodes-base.merge",
85
+ "typeVersion": 3,
86
+ "position": [
87
+ -280,
88
+ 40
89
+ ]
90
+ },
91
+ {
92
+ "parameters": {
93
+ "conditions": {
94
+ "options": {
95
+ "caseSensitive": true,
96
+ "leftValue": "",
97
+ "typeValidation": "loose",
98
+ "version": 2
99
+ },
100
+ "conditions": [
101
+ {
102
+ "id": "cond-sem-erro",
103
+ "leftValue": "={{ $json.error }}",
104
+ "rightValue": "",
105
+ "operator": {
106
+ "type": "object",
107
+ "operation": "notExists",
108
+ "singleValue": true
109
+ }
110
+ }
111
+ ],
112
+ "combinator": "and"
113
+ },
114
+ "options": {}
115
+ },
116
+ "id": "a1f2c3d4-0006-4c3a-9b1e-000000000006",
117
+ "name": "Feed OK?",
118
+ "type": "n8n-nodes-base.if",
119
+ "typeVersion": 2.2,
120
+ "position": [
121
+ -60,
122
+ 40
123
+ ]
124
+ },
125
+ {
126
+ "parameters": {
127
+ "jsCode": "// EDITE ESTA LISTA: os termos do SEU assunto. E o unico ponto do exemplo que\n// depende do seu nicho — o resto do fluxo serve para qualquer tema.\nconst PATTERNS = [\n /\\btermo-1\\b/, /\\btermo-2\\b/, /assunto que voce acompanha/\n];\nconst out = [];\nfor (const item of $input.all()) {\n const j = item.json;\n const texto = ((j.title || '') + ' ' + (j.contentSnippet || j.content || '')).toLowerCase();\n if (!PATTERNS.some((p) => p.test(texto))) continue;\n let fonte = 'desconhecida';\n try { fonte = new URL(j.link).hostname; } catch (e) {}\n out.push({\n json: {\n title: j.title,\n link: j.link,\n source: fonte,\n publishedAt: j.isoDate || j.pubDate || '',\n collectedAt: new Date().toISOString()\n }\n });\n}\nreturn out;"
128
+ },
129
+ "id": "a1f2c3d4-0007-4c3a-9b1e-000000000007",
130
+ "name": "Filtra Palavras-chave",
131
+ "type": "n8n-nodes-base.code",
132
+ "typeVersion": 2,
133
+ "position": [
134
+ 160,
135
+ -60
136
+ ]
137
+ },
138
+ {
139
+ "parameters": {
140
+ "operation": "removeItemsSeenInPreviousExecutions",
141
+ "logic": "removeItemsWithAlreadySeenKeyValues",
142
+ "dedupeValue": "={{ $json.link }}",
143
+ "options": {}
144
+ },
145
+ "id": "a1f2c3d4-0008-4c3a-9b1e-000000000008",
146
+ "name": "Dedupe por Link",
147
+ "type": "n8n-nodes-base.removeDuplicates",
148
+ "typeVersion": 2,
149
+ "position": [
150
+ 380,
151
+ -60
152
+ ]
153
+ },
154
+ {
155
+ "parameters": {
156
+ "jsCode": "// Agrupa por fonte e monta o briefing HTML do dia.\nconst items = $input.all();\nif (items.length === 0) { return []; }\nconst hoje = new Date().toISOString().slice(0, 10);\nconst porFonte = {};\nfor (const item of items) {\n const f = item.json.source || 'outras';\n if (!porFonte[f]) porFonte[f] = [];\n porFonte[f].push(item.json);\n}\nlet html = '<h2>Content Radar — ' + hoje + '</h2>';\nhtml += '<p>' + items.length + ' itens relevantes.</p>';\nfor (const fonte of Object.keys(porFonte)) {\n html += '<h3>' + fonte + '</h3><ul>';\n for (const it of porFonte[fonte]) {\n html += '<li><a href=\"' + it.link + '\">' + it.title + '</a></li>';\n }\n html += '</ul>';\n}\nreturn [{ json: { subject: 'Content Radar ' + hoje + ' — ' + items.length + ' itens', html: html } }];"
157
+ },
158
+ "id": "a1f2c3d4-0009-4c3a-9b1e-000000000009",
159
+ "name": "Monta Briefing",
160
+ "type": "n8n-nodes-base.code",
161
+ "typeVersion": 2,
162
+ "position": [
163
+ 600,
164
+ -160
165
+ ]
166
+ },
167
+ {
168
+ "parameters": {
169
+ "fromEmail": "radar@example.com",
170
+ "toEmail": "voce@example.com",
171
+ "subject": "={{ $json.subject }}",
172
+ "emailFormat": "html",
173
+ "html": "={{ $json.html }}",
174
+ "options": {}
175
+ },
176
+ "id": "a1f2c3d4-0010-4c3a-9b1e-000000000010",
177
+ "name": "Envia Briefing por Email",
178
+ "type": "n8n-nodes-base.emailSend",
179
+ "typeVersion": 2.1,
180
+ "position": [
181
+ 820,
182
+ -160
183
+ ],
184
+ "retryOnFail": true,
185
+ "maxTries": 2,
186
+ "waitBetweenTries": 3000
187
+ },
188
+ {
189
+ "parameters": {
190
+ "operation": "append",
191
+ "documentId": {
192
+ "__rl": true,
193
+ "mode": "list",
194
+ "value": ""
195
+ },
196
+ "sheetName": {
197
+ "__rl": true,
198
+ "mode": "list",
199
+ "value": ""
200
+ },
201
+ "columns": {
202
+ "mappingMode": "defineBelow",
203
+ "value": {
204
+ "coletado_em": "={{ $json.collectedAt }}",
205
+ "titulo": "={{ $json.title }}",
206
+ "link": "={{ $json.link }}",
207
+ "fonte": "={{ $json.source }}",
208
+ "publicado_em": "={{ $json.publishedAt }}"
209
+ },
210
+ "matchingColumns": [],
211
+ "schema": []
212
+ },
213
+ "options": {}
214
+ },
215
+ "id": "a1f2c3d4-0011-4c3a-9b1e-000000000011",
216
+ "name": "Grava no Google Sheets",
217
+ "type": "n8n-nodes-base.googleSheets",
218
+ "typeVersion": 4.5,
219
+ "position": [
220
+ 600,
221
+ 20
222
+ ],
223
+ "retryOnFail": true,
224
+ "maxTries": 2,
225
+ "waitBetweenTries": 3000
226
+ },
227
+ {
228
+ "parameters": {
229
+ "fromEmail": "radar@example.com",
230
+ "toEmail": "voce@example.com",
231
+ "subject": "[Content Radar] Falha ao coletar feed",
232
+ "emailFormat": "text",
233
+ "text": "=Um ou mais feeds falharam na execucao {{ $execution.id }}.\n\nDetalhe: {{ JSON.stringify($json.error || $json) }}",
234
+ "options": {}
235
+ },
236
+ "id": "a1f2c3d4-0012-4c3a-9b1e-000000000012",
237
+ "name": "Alerta Falha de Feed",
238
+ "type": "n8n-nodes-base.emailSend",
239
+ "typeVersion": 2.1,
240
+ "position": [
241
+ 160,
242
+ 160
243
+ ]
244
+ }
245
+ ],
246
+ "connections": {
247
+ "Cron Diario 07h": {
248
+ "main": [
249
+ [
250
+ {
251
+ "node": "RSS Fonte 1",
252
+ "type": "main",
253
+ "index": 0
254
+ },
255
+ {
256
+ "node": "RSS Fonte 2",
257
+ "type": "main",
258
+ "index": 0
259
+ },
260
+ {
261
+ "node": "RSS Fonte 3",
262
+ "type": "main",
263
+ "index": 0
264
+ }
265
+ ]
266
+ ]
267
+ },
268
+ "RSS Fonte 1": {
269
+ "main": [
270
+ [
271
+ {
272
+ "node": "Merge Feeds",
273
+ "type": "main",
274
+ "index": 0
275
+ }
276
+ ]
277
+ ]
278
+ },
279
+ "RSS Fonte 2": {
280
+ "main": [
281
+ [
282
+ {
283
+ "node": "Merge Feeds",
284
+ "type": "main",
285
+ "index": 1
286
+ }
287
+ ]
288
+ ]
289
+ },
290
+ "RSS Fonte 3": {
291
+ "main": [
292
+ [
293
+ {
294
+ "node": "Merge Feeds",
295
+ "type": "main",
296
+ "index": 2
297
+ }
298
+ ]
299
+ ]
300
+ },
301
+ "Merge Feeds": {
302
+ "main": [
303
+ [
304
+ {
305
+ "node": "Feed OK?",
306
+ "type": "main",
307
+ "index": 0
308
+ }
309
+ ]
310
+ ]
311
+ },
312
+ "Feed OK?": {
313
+ "main": [
314
+ [
315
+ {
316
+ "node": "Filtra Palavras-chave",
317
+ "type": "main",
318
+ "index": 0
319
+ }
320
+ ],
321
+ [
322
+ {
323
+ "node": "Alerta Falha de Feed",
324
+ "type": "main",
325
+ "index": 0
326
+ }
327
+ ]
328
+ ]
329
+ },
330
+ "Filtra Palavras-chave": {
331
+ "main": [
332
+ [
333
+ {
334
+ "node": "Dedupe por Link",
335
+ "type": "main",
336
+ "index": 0
337
+ }
338
+ ]
339
+ ]
340
+ },
341
+ "Dedupe por Link": {
342
+ "main": [
343
+ [
344
+ {
345
+ "node": "Monta Briefing",
346
+ "type": "main",
347
+ "index": 0
348
+ },
349
+ {
350
+ "node": "Grava no Google Sheets",
351
+ "type": "main",
352
+ "index": 0
353
+ }
354
+ ]
355
+ ]
356
+ },
357
+ "Monta Briefing": {
358
+ "main": [
359
+ [
360
+ {
361
+ "node": "Envia Briefing por Email",
362
+ "type": "main",
363
+ "index": 0
364
+ }
365
+ ]
366
+ ]
367
+ }
368
+ },
369
+ "settings": {
370
+ "executionOrder": "v1",
371
+ "timezone": "UTC",
372
+ "saveDataErrorExecution": "all",
373
+ "saveDataSuccessExecution": "all"
374
+ },
375
+ "pinData": {},
376
+ "meta": {
377
+ "templateCredsSetupCompleted": false
378
+ },
379
+ "pc:placeholder": true
380
+ }