@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,368 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ /**
4
+ * forge-upgrade-pod.cjs — formaliza um pod EXISTENTE em v0.3 (Story SF1.4, item e).
5
+ *
6
+ * upgrade-in-place (SPEC §G4): NÃO regenera do zero. Preserva os agentes já
7
+ * validados, gera os artefatos ausentes proporcionais ao tier, e aplica a
8
+ * RECONCILIAÇÃO WORKFLOW-AWARE BOUNDED (v4) sobre cada agente preservado.
9
+ *
10
+ * Pipeline: (1) *assess de tier sobre o pod existente → (2) gera artefatos
11
+ * ausentes (forge-generate.cjs, preservando agentes) → (3) reconciliação bounded
12
+ * → (4) valida estático (validate-pod-workflow.cjs) → (5) smoke dinâmico (SF1.3,
13
+ * quando disponível) → (6) pod-critic *review (gate G6) → (7) registro.
14
+ * Passos 5–6 são despachados FORA deste script (agente/QA); ele cobre 1–4 e a
15
+ * reconciliação, e SINALIZA quando um agente excede o bound (recomenda *new).
16
+ *
17
+ * Bound da reconciliação (v4) — APENAS:
18
+ * (i) remover auto-sequenciamento / auto-chamada a outro agente;
19
+ * (ii) escopar a saída do agente ao artefato da etapa (nota workflow-aware).
20
+ * Qualquer coisa além disso (reescrever papel, refazer comandos, redividir
21
+ * responsabilidades — ex.: agente que DECIDE sozinho entre caminhos do processo)
22
+ * EXCEDE o bound ⇒ o comando reporta e recomenda `*new` para aquele agente,
23
+ * sem forçar a reconciliação (Risco 2).
24
+ *
25
+ * Uso:
26
+ * node scripts/forge-upgrade-pod.cjs <podDir> [--critical] [--handoffs N] [--apply]
27
+ * (sem --apply: dry-run, não escreve nos agentes; imprime o plano)
28
+ *
29
+ * Node >= 18, sem dependências externas.
30
+ */
31
+
32
+ const fs = require('node:fs');
33
+ const path = require('node:path');
34
+ const { classifyTier } = require('./forge-assess-tier.cjs');
35
+ const { generatePod } = require('./forge-generate.cjs');
36
+
37
+ // ---------------------------------------------------------------------------
38
+ // Padrões de reconciliação (v4). Auditáveis e num único lugar.
39
+ // ---------------------------------------------------------------------------
40
+
41
+ // (i) Auto-sequenciamento: o agente chama/invoca/despacha OUTRO agente por conta
42
+ // própria (o runner passa a orquestrar, não o agente). Casável por linha.
43
+ const AUTO_SEQUENCING = [
44
+ /\bdepois\s+(disso|de\s+\w+)[^.]*\b(chame|invoque|acione|despache|passe\s+para|delegue)\b/i,
45
+ /\b(chame|invoque|acione|despache|delegue)\s+(o\s+)?(agente|subagente)\b/i,
46
+ /\bem\s+seguida[^.]*\b(chame|invoque|acione|despache)\b/i,
47
+ /\bpassa?\s+(a\s+bola|o\s+bastão)\s+(para|ao)\b/i,
48
+ ];
49
+
50
+ // (ii) Fora do bound: o agente ORQUESTRA/DECIDE o fluxo — escolhe sozinho entre
51
+ // caminhos do processo, não apenas produz um artefato. Isso é cirurgia de
52
+ // capacidade, não ajuste de prosa ⇒ recomenda *new.
53
+ //
54
+ // [SF6.1 fix round — CONCERNS-1] O 3º regex era `/orquestr[ao]\b[^.]*\b(...agentes)\b/`:
55
+ // o `[^.]*` GULOSO (inclui newlines) casava "Orquestra a criação de novos pods,
56
+ // AGENTES" (papel-de-domínio: `agentes` é OBJETO DA CRIAÇÃO, não alvo de orquestração
57
+ // de fluxo) como se fosse auto-sequenciamento em runtime — falso-positivo em QUALQUER
58
+ // agente orquestrador. Refino: a palavra-de-processo tem de ser o OBJETO DIRETO (near)
59
+ // de "orquestra" — só artigos/quantificadores entre elas —, distinguindo "orquestra
60
+ // AS ETAPAS / OS AGENTES" (fluxo/dispatch, out-of-bound) de "orquestra A CRIAÇÃO DE
61
+ // agentes" (domínio: um substantivo de criação governa o objeto → não casa). Sem `[^.]*`.
62
+ const OUT_OF_BOUND = [
63
+ /\bdecid[ei]\s+(sozinho\s+)?(entre|qual)\b[^.]*\bcaminho/i,
64
+ /\bescolhe\s+(o\s+)?(caminho|fluxo|rota|pipeline)\b/i,
65
+ /\borquestr[ao]\s+(?:(?:o|a|os|as|todo|toda|todos|todas)\s+)*(?:fases?|etapas?|pipelines?|fluxos?|agentes?|processos?)\b/i,
66
+ /\bramifica\s+(o\s+)?(fluxo|processo)\s+entre\b/i,
67
+ ];
68
+
69
+ /**
70
+ * Reconcilia o texto de UM agente dentro do bound.
71
+ * Retorna { status, text, removed[], reason }.
72
+ * status 'recommend-new' ⇒ excede o bound; text inalterado, reason preenchido.
73
+ * status 'reconciled' ⇒ dentro do bound; text ajustado, removed[] lista as
74
+ * linhas de auto-sequenciamento retiradas.
75
+ * status 'clean' ⇒ nada a reconciliar.
76
+ */
77
+ function reconcileAgent(text) {
78
+ // Detecção de excesso de bound PRIMEIRO — nunca "forçar" preservação.
79
+ for (const re of OUT_OF_BOUND) {
80
+ const m = text.match(re);
81
+ if (m) {
82
+ return {
83
+ status: 'recommend-new',
84
+ text,
85
+ removed: [],
86
+ reason: `agente decide/orquestra o fluxo ("${m[0].trim()}") — excede o bound (reescrever papel), recomenda *new`,
87
+ };
88
+ }
89
+ }
90
+
91
+ const lines = text.split(/\r?\n/);
92
+ const removed = [];
93
+ const kept = [];
94
+ for (const line of lines) {
95
+ if (AUTO_SEQUENCING.some((re) => re.test(line))) {
96
+ removed.push(line.trim());
97
+ continue; // (i) remove a auto-chamada — o runner orquestra.
98
+ }
99
+ kept.push(line);
100
+ }
101
+
102
+ if (removed.length === 0) {
103
+ return { status: 'clean', text, removed: [], reason: null };
104
+ }
105
+
106
+ // (ii) escopar output à etapa: nota workflow-aware, sem reescrever o papel.
107
+ let out = kept.join('\n');
108
+ const scopeNote =
109
+ '\n> [reconciliação v0.3] Este agente é invocado POR ETAPA pelo runner ' +
110
+ '(`pc-run-pod`): produz apenas o artefato da sua etapa, a partir do template, ' +
111
+ 'e NÃO se auto-sequencia — a orquestração é do runner.\n';
112
+ if (!out.includes('[reconciliação v0.3]')) out += scopeNote;
113
+
114
+ return { status: 'reconciled', text: out, removed, reason: null };
115
+ }
116
+
117
+ /** Lê os agentes do pod (arquivos .md em agents/, exceto README). */
118
+ function readAgents(podDir) {
119
+ const dir = path.join(podDir, 'agents');
120
+ if (!fs.existsSync(dir)) return [];
121
+ return fs
122
+ .readdirSync(dir)
123
+ .filter((f) => f.endsWith('.md') && f !== 'README.md')
124
+ .map((f) => ({ name: f.replace(/\.md$/, ''), file: path.join(dir, f) }));
125
+ }
126
+
127
+ /** Erro de fail-loud: ordem do DAG não declarada (ADR-005 Decisão B → exit 2). */
128
+ class SpecRequiredError extends Error {
129
+ constructor(message) {
130
+ super(message);
131
+ this.name = 'SpecRequiredError';
132
+ this.exitCode = 2;
133
+ }
134
+ }
135
+
136
+ /** Carrega a spec de ordem: `--spec <file>` OU `pods/<pod>/pod-spec.json`. */
137
+ function loadSpec(podDir, opts) {
138
+ const specPath = opts.spec ? path.resolve(opts.spec) : path.join(podDir, 'pod-spec.json');
139
+ if (!fs.existsSync(specPath)) return null;
140
+ let data;
141
+ try {
142
+ data = JSON.parse(fs.readFileSync(specPath, 'utf8'));
143
+ } catch (e) {
144
+ throw new Error(`pod-spec.json inválido (${path.relative(process.cwd(), specPath)}): ${e.message}`);
145
+ }
146
+ return { path: specPath, data };
147
+ }
148
+
149
+ /** Fontes candidatas para AUTORAR a spec (README do pod; wf-*.yaml de squad legado). */
150
+ function specSourceCandidates(podDir) {
151
+ const out = [];
152
+ const readme = path.join(podDir, 'README.md');
153
+ if (fs.existsSync(readme)) out.push(`${path.relative(process.cwd(), readme)} (fluxo descrito na prosa do pod)`);
154
+ // squad legado correlato: <repo>/squads/<base>/workflows, base = nome do pod sem sufixo "-method".
155
+ const base = path.basename(podDir).replace(/-method$/, '');
156
+ const legacyWf = path.resolve(podDir, '..', '..', 'squads', base, 'workflows');
157
+ if (fs.existsSync(legacyWf)) {
158
+ for (const f of fs.readdirSync(legacyWf).filter((n) => /^wf-.*\.ya?ml$/.test(n))) {
159
+ out.push(`${path.relative(process.cwd(), path.join(legacyWf, f))} (workflow legado — evidência de reconciliação, ADR-005 §B4)`);
160
+ }
161
+ }
162
+ if (out.length === 0) out.push('(nenhuma fonte auto-detectada; autore pod-spec.json a partir do domínio)');
163
+ return out;
164
+ }
165
+
166
+ /**
167
+ * Executa o upgrade-in-place sobre um pod existente.
168
+ * A ORDEM DO DAG é DADO DECLARADO (ADR-005 Decisão B): exige `pods/<pod>/pod-spec.json`
169
+ * ou `--spec <file>`. Sem declaração ⇒ SpecRequiredError (exit 2). NUNCA readdir/alfabético.
170
+ * apply=false ⇒ dry-run (não escreve nos agentes). Retorna um relatório estruturado.
171
+ */
172
+ function upgradePod(podDir, opts = {}) {
173
+ const apply = Boolean(opts.apply);
174
+ const agents = readAgents(podDir); // TODOS os agentes do pod (reconciliação + tier).
175
+ if (agents.length === 0) throw new Error(`nenhum agente em ${podDir}/agents/`);
176
+
177
+ // (0) Fonte da ordem do DAG — obrigatória (ADR-005 Decisão B). Fail-loud sem ela.
178
+ const loaded = loadSpec(podDir, opts);
179
+ if (!loaded) {
180
+ const candidates = specSourceCandidates(podDir);
181
+ throw new SpecRequiredError(
182
+ `ordem do DAG não declarada para o pod "${path.basename(podDir)}". ` +
183
+ `Crie pods/${path.basename(podDir)}/pod-spec.json (ou passe --spec <file>): ` +
184
+ `spec.agents[] ORDENADO = ordem topológica do DAG (ADR-005 — a ordem é dado declarado, ` +
185
+ `nunca readdir/alfabético).\nFontes candidatas para AUTORAR a spec:\n` +
186
+ candidates.map((c) => ` - ${c}`).join('\n'),
187
+ );
188
+ }
189
+ const spec = loaded.data;
190
+ const specAgents = Array.isArray(spec.agents) ? spec.agents : [];
191
+ if (specAgents.length === 0) throw new Error(`spec sem agents[] ordenado (${path.relative(process.cwd(), loaded.path)})`);
192
+
193
+ // (1) Valida a spec contra o disco. Agente na spec sem arquivo ⇒ erro.
194
+ const diskNames = new Set(agents.map((a) => a.name));
195
+ const workflowNames = new Set();
196
+ for (const sa of specAgents) {
197
+ const nm = typeof sa === 'string' ? sa : sa.name;
198
+ if (!nm) throw new Error(`entrada de agents[] na spec sem "name"`);
199
+ if (!diskNames.has(nm)) throw new Error(`agente "${nm}" declarado na spec sem arquivo em agents/${nm}.md`);
200
+ workflowNames.add(nm);
201
+ }
202
+
203
+ // (2) *assess de tier sobre TODOS os agentes do pod (ADR-005 §B3), não só os do workflow.
204
+ const assessment = classifyTier({
205
+ pod: spec.pod || path.basename(podDir),
206
+ agents: agents.map((a) => a.name),
207
+ workflows: fs.existsSync(path.join(podDir, 'workflows'))
208
+ ? fs.readdirSync(path.join(podDir, 'workflows')).filter((f) => /^wf-.*\.ya?ml$/.test(f)).length
209
+ : 0,
210
+ handoffs: Number(opts.handoffs || spec.handoffs || 0),
211
+ dna: Boolean(opts.dna || spec.dna),
212
+ critical: Boolean(opts.critical || spec.critical),
213
+ });
214
+
215
+ // (3) gera artefatos na ORDEM DA SPEC (agents[] ordenado = etapas do DAG). O generator
216
+ // só escreve em workflows/ templates/ squad-io.yaml memory/, nunca em agents/ (AC6).
217
+ const genSpec = {
218
+ pod: spec.pod || path.basename(podDir),
219
+ workflowId: spec.workflowId,
220
+ agents: specAgents, // ORDEM = declaração da spec (com sections/veto por etapa).
221
+ handoffs: Number(opts.handoffs || spec.handoffs || 0),
222
+ dna: Boolean(opts.dna || spec.dna),
223
+ critical: Boolean(opts.critical || spec.critical),
224
+ // Forma STANDARD-interface (ADR-004 adendo): propaga `interface` da spec — suprime
225
+ // wf/squad-io fabricados (validado contra handoffs:0 dentro de generatePod).
226
+ interface: spec.interface === true,
227
+ // Memória em SIMPLE segue opcional no upgrade (SPEC §G2): mesma flag da geração.
228
+ memoryOpt: Boolean(opts.withMemory) || spec.memoryOpt === true,
229
+ // SF12.4a/ADR-030 — propaga os 3 campos canônicos + escada_de_voz da spec CARREGADA
230
+ // (`--spec`/`pod-spec.json`) para a spec EFETIVAMENTE RECEBIDA por generatePod
231
+ // (AC48c cláusula 1: o relato de `derived` é sobre ESTE objeto, não sobre disco).
232
+ // Ausentes na spec carregada ⇒ ausentes aqui também ⇒ generatePod reporta (AC48c).
233
+ ritmo: spec.ritmo,
234
+ contrato_entrada: spec.contrato_entrada,
235
+ entregavel: spec.entregavel,
236
+ escada_de_voz: spec.escada_de_voz,
237
+ };
238
+ // STANDARD/COMPLEX recebe/mantém a memória operante; SIMPLE só sob --with-memory.
239
+ // C.1/SF3.1 (fecha G1): repassa o `assessment.tier` AGREGADO — computado acima sobre
240
+ // TODOS os agentes+workflows do pod (linhas ~195-204) mas até aqui IGNORADO — como
241
+ // tierOverride. Antes, generatePod re-classificava pela spec isolada (só os agentes
242
+ // do workflow), rebaixando silenciosamente um pod COMPLEX a SIMPLE e pulando
243
+ // squad-io/memória. Agora o aparato proporcional ao pod inteiro é gerado.
244
+ // Bug real (ADR-004 §2, confirmado na branch SF6.2): generatePod era chamado
245
+ // INCONDICIONALMENTE — até o dry-run escrevia no pod. Fix: dry-run repassa
246
+ // dryRun=true → generatePod computa o PLANO (written[]/skipped[]) SEM tocar disco.
247
+ // Toda escrita (generatePod + reconciliação §245 + spec §250) fica sob --apply.
248
+ const gen = generatePod(genSpec, podDir, {
249
+ withMemory: Boolean(opts.withMemory) || spec.memoryOpt === true,
250
+ tierOverride: assessment.tier,
251
+ dryRun: !apply,
252
+ // SF12.4a/ADR-030 Bloco O (AC48/Emenda 1) — `*upgrade-pod` é sempre 'derived': a spec
253
+ // é SINTETIZADA de um pod já em disco, nunca autorada fresca. Preserva o comportamento
254
+ // atual (campo ausente nunca para o processo) e reporta o que falta (AC48c).
255
+ specOrigin: 'derived',
256
+ // SF12.6/ADR-030 Bloco C (Decisão 7.2) — leniência POR PATH para o guard novo (`wf`
257
+ // fail-loud). `opts.allowDivergentOverwrite` (repetível via `--allow-divergent-overwrite
258
+ // <path>`) chega como array de strings relativas ao cwd — resolvidas a absoluto aqui
259
+ // (generatePod compara por path.resolve). Ausente ⇒ [] (leniência SEMPRE por path,
260
+ // nunca "sim para tudo" — AC12).
261
+ allowDivergentOverwrite: (opts.allowDivergentOverwrite || []).map((p) => path.resolve(p)),
262
+ });
263
+
264
+ // (4) reconciliação bounded sobre CADA agente do pod (inclui os fora do workflow).
265
+ const reconciliation = [];
266
+ for (const a of agents) {
267
+ const before = fs.readFileSync(a.file, 'utf8');
268
+ const r = reconcileAgent(before);
269
+ const inWorkflow = workflowNames.has(a.name);
270
+ reconciliation.push({ agent: a.name, status: r.status, removed: r.removed, reason: r.reason, inWorkflow });
271
+ if (apply && r.status === 'reconciled') fs.writeFileSync(a.file, r.text);
272
+ // status 'recommend-new' e 'clean' NÃO alteram o arquivo (preservação).
273
+ }
274
+
275
+ // (5) persiste a spec COM o pod quando aplicada via --spec (fonte da verdade em git).
276
+ if (apply && opts.spec) {
277
+ const dest = path.join(podDir, 'pod-spec.json');
278
+ if (path.resolve(opts.spec) !== path.resolve(dest)) {
279
+ fs.writeFileSync(dest, JSON.stringify(spec, null, 2) + '\n');
280
+ }
281
+ }
282
+
283
+ const recommendNew = reconciliation.filter((r) => r.status === 'recommend-new').map((r) => r.agent);
284
+ const notInWorkflow = reconciliation.filter((r) => !r.inWorkflow).map((r) => r.agent);
285
+
286
+ return {
287
+ tier: assessment.tier,
288
+ assessment,
289
+ generated: gen.written,
290
+ skipped: gen.skipped,
291
+ // SF12.6/ADR-030 Bloco C — repassa o relato por classe do guard novo (merged[] já
292
+ // existia; divergent[]/preserved[] são novos — AC11-AC15).
293
+ merged: gen.merged,
294
+ divergent: gen.divergent,
295
+ preserved: gen.preserved,
296
+ reconciliation,
297
+ recommendNew,
298
+ notInWorkflow,
299
+ applied: apply,
300
+ specPath: loaded.path,
301
+ };
302
+ }
303
+
304
+ function main() {
305
+ const args = process.argv.slice(2);
306
+ let podDir = null;
307
+ const opts = { allowDivergentOverwrite: [] };
308
+ for (let i = 0; i < args.length; i++) {
309
+ if (args[i] === '--apply') opts.apply = true;
310
+ else if (args[i] === '--critical') opts.critical = true;
311
+ else if (args[i] === '--dna') opts.dna = true;
312
+ else if (args[i] === '--with-memory') opts.withMemory = true;
313
+ else if (args[i] === '--handoffs') opts.handoffs = Number(args[++i]);
314
+ else if (args[i] === '--spec') opts.spec = args[++i];
315
+ // SF12.6/ADR-030 Bloco C (AC18, Decisão 7.2) — repetível; forma nua (sem valor) é um erro
316
+ // de uso comum, não a leniência global proibida (essa é sobre a FORMA do dado dentro de
317
+ // generatePod — aqui é só coleta de path por path).
318
+ else if (args[i] === '--allow-divergent-overwrite') opts.allowDivergentOverwrite.push(args[++i]);
319
+ else podDir = args[i];
320
+ }
321
+ if (!podDir) {
322
+ console.error('Uso: node scripts/forge-upgrade-pod.cjs <podDir> [--spec <file>] [--critical] [--dna] ' +
323
+ '[--with-memory] [--handoffs N] [--allow-divergent-overwrite <path>]... [--apply]');
324
+ process.exit(2);
325
+ }
326
+ let r;
327
+ try {
328
+ r = upgradePod(path.resolve(podDir), opts);
329
+ } catch (e) {
330
+ console.error(`[erro] ${e.message}`);
331
+ process.exit(e && e.exitCode ? e.exitCode : 1);
332
+ }
333
+ console.log(`tier: ${r.tier}${r.applied ? '' : ' (dry-run — use --apply para gravar a reconciliação)'}`);
334
+ console.log(`ordem do DAG: declarada em ${path.relative(process.cwd(), r.specPath)}`);
335
+ console.log('artefatos gerados (ausentes):');
336
+ for (const w of r.generated) console.log(` + ${path.relative(process.cwd(), w)}`);
337
+ if (r.merged && r.merged.length) {
338
+ console.log('merge (squad-io.yaml — seções preservadas + novas):');
339
+ for (const m of r.merged) console.log(` ~ ${path.relative(process.cwd(), m)}`);
340
+ }
341
+ if (r.preserved && r.preserved.length) {
342
+ console.log('templates PRESERVADOS (divergem do que seria gerado — write-once, ADR-030 Decisão 7.1):');
343
+ for (const p of r.preserved) console.log(` = ${path.relative(process.cwd(), p)}`);
344
+ }
345
+ if (r.divergent && r.divergent.length) {
346
+ console.log('artefatos DIVERGENTES da spec (guard por classe, ADR-030 Bloco C):');
347
+ for (const d of r.divergent) console.log(` ! ${path.relative(process.cwd(), d)}`);
348
+ }
349
+ console.log('reconciliação por agente (bounded):');
350
+ for (const rec of r.reconciliation) {
351
+ const wf = rec.inWorkflow ? '' : ' [not-in-workflow]';
352
+ const detail = rec.status === 'recommend-new' ? ` — ${rec.reason}`
353
+ : rec.status === 'reconciled' ? ` — ${rec.removed.length} auto-sequenciamento(s) removido(s)` : '';
354
+ console.log(` · ${rec.agent}: ${rec.status}${wf}${detail}`);
355
+ }
356
+ if (r.notInWorkflow.length) {
357
+ console.log(`\n·· fora deste workflow (preservados no pod): ${r.notInWorkflow.join(', ')}`);
358
+ }
359
+ if (r.recommendNew.length) {
360
+ console.log(`\n>> RECOMENDA *new para: ${r.recommendNew.join(', ')} (excedem o bound — não foram forçados).`);
361
+ }
362
+ console.log('\nPróximo: validate-pod-workflow.cjs (estático) → smoke (SF1.3) → pod-critic *review (G6) → registro.');
363
+ process.exit(0);
364
+ }
365
+
366
+ if (require.main === module) main();
367
+
368
+ module.exports = { upgradePod, reconcileAgent, readAgents, loadSpec, specSourceCandidates, SpecRequiredError, AUTO_SEQUENCING, OUT_OF_BOUND };