@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,323 @@
1
+ #!/usr/bin/env bash
2
+ # =============================================================================
3
+ # health-checker.sh - Database Health Check (Worker Script)
4
+ # =============================================================================
5
+ # execution_type: Worker
6
+ # pattern: EXEC-W-001
7
+ # tasks: db-env-check, db-smoke-test, schema-audit
8
+ # token_savings: 95%
9
+ # =============================================================================
10
+
11
+ set -euo pipefail
12
+
13
+ # Colors
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ BLUE='\033[0;34m'
18
+ NC='\033[0m' # No Color
19
+
20
+ # Defaults
21
+ MODE="quick"
22
+ VERBOSE=false
23
+ DB_URL=""
24
+
25
+ usage() {
26
+ cat << EOF
27
+ Usage: $(basename "$0") [OPTIONS]
28
+
29
+ Database health checker for Supabase/PostgreSQL.
30
+
31
+ OPTIONS:
32
+ --quick Quick health check (default)
33
+ --full Full health check with all metrics
34
+ --smoke-test Post-migration smoke tests
35
+ --schema-audit Schema quality audit
36
+ --security-audit Security-focused audit
37
+ -v, --verbose Verbose output
38
+ -h, --help Show this help
39
+
40
+ EXAMPLES:
41
+ $(basename "$0") --quick
42
+ $(basename "$0") --smoke-test
43
+ $(basename "$0") --schema-audit --verbose
44
+
45
+ ENVIRONMENT:
46
+ SUPABASE_DB_URL or DATABASE_URL Required. PostgreSQL connection string.
47
+ EOF
48
+ }
49
+
50
+ log_info() { echo -e "${BLUE}ℹ${NC} $1"; }
51
+ log_success() { echo -e "${GREEN}✓${NC} $1"; }
52
+ log_warning() { echo -e "${YELLOW}⚠${NC} $1"; }
53
+ log_error() { echo -e "${RED}✗${NC} $1"; }
54
+
55
+ check_env() {
56
+ DB_URL="${SUPABASE_DB_URL:-${DATABASE_URL:-}}"
57
+ if [[ -z "$DB_URL" ]]; then
58
+ log_error "SUPABASE_DB_URL or DATABASE_URL not set"
59
+ exit 1
60
+ fi
61
+ if [[ -n "${SUPABASE_DB_URL:-}" ]]; then
62
+ log_success "SUPABASE_DB_URL present (redacted)"
63
+ else
64
+ log_success "DATABASE_URL present (redacted)"
65
+ fi
66
+ }
67
+
68
+ check_connection() {
69
+ log_info "Testing database connection..."
70
+ if psql "$DB_URL" -c "SELECT 1" > /dev/null 2>&1; then
71
+ log_success "Database connection OK"
72
+ return 0
73
+ else
74
+ log_error "Database connection FAILED"
75
+ return 1
76
+ fi
77
+ }
78
+
79
+ check_ssl() {
80
+ log_info "Checking SSL configuration..."
81
+ if echo "$DB_URL" | grep -q "sslmode="; then
82
+ log_success "SSL mode configured"
83
+ else
84
+ log_warning "Consider adding sslmode=require"
85
+ fi
86
+ }
87
+
88
+ check_pooler() {
89
+ log_info "Checking connection pooler..."
90
+ if echo "$DB_URL" | grep -q "pooler"; then
91
+ log_success "Using connection pooler"
92
+ else
93
+ log_warning "Consider using pooler host for better performance"
94
+ fi
95
+ }
96
+
97
+ check_client_tools() {
98
+ log_info "Checking PostgreSQL client tools..."
99
+ local tools_ok=true
100
+
101
+ if command -v psql &> /dev/null; then
102
+ log_success "psql: $(psql --version | head -1)"
103
+ else
104
+ log_error "psql not found"
105
+ tools_ok=false
106
+ fi
107
+
108
+ if command -v pg_dump &> /dev/null; then
109
+ log_success "pg_dump: $(pg_dump --version | head -1)"
110
+ else
111
+ log_error "pg_dump not found"
112
+ tools_ok=false
113
+ fi
114
+
115
+ $tools_ok
116
+ }
117
+
118
+ get_db_stats() {
119
+ log_info "Collecting database statistics..."
120
+
121
+ psql "$DB_URL" -t -A << 'SQL'
122
+ SELECT json_build_object(
123
+ 'version', version(),
124
+ 'database_size', pg_size_pretty(pg_database_size(current_database())),
125
+ 'table_count', (SELECT count(*) FROM pg_tables WHERE schemaname = 'public'),
126
+ 'index_count', (SELECT count(*) FROM pg_indexes WHERE schemaname = 'public'),
127
+ 'active_connections', (SELECT count(*) FROM pg_stat_activity WHERE state = 'active')
128
+ );
129
+ SQL
130
+ }
131
+
132
+ run_smoke_tests() {
133
+ log_info "Running smoke tests..."
134
+
135
+ # Test 1: Tables exist
136
+ local table_count
137
+ table_count=$(psql "$DB_URL" -t -A -c "SELECT count(*) FROM pg_tables WHERE schemaname = 'public'")
138
+ if [[ "$table_count" -gt 0 ]]; then
139
+ log_success "Tables exist: $table_count tables in public schema"
140
+ else
141
+ log_warning "No tables in public schema"
142
+ fi
143
+
144
+ # Test 2: RLS enabled
145
+ local rls_enabled
146
+ rls_enabled=$(psql "$DB_URL" -t -A -c "SELECT count(*) FROM pg_tables WHERE schemaname = 'public' AND rowsecurity = true")
147
+ log_info "Tables with RLS enabled: $rls_enabled"
148
+
149
+ # Test 3: No pending migrations (if using supabase)
150
+ if [[ -d "supabase/migrations" ]]; then
151
+ local migration_count
152
+ migration_count=$(ls -1 supabase/migrations/*.sql 2>/dev/null | wc -l || echo "0")
153
+ log_info "Local migrations: $migration_count files"
154
+ fi
155
+
156
+ # Test 4: Connection pool health
157
+ local idle_connections
158
+ idle_connections=$(psql "$DB_URL" -t -A -c "SELECT count(*) FROM pg_stat_activity WHERE state = 'idle'")
159
+ if [[ "$idle_connections" -lt 50 ]]; then
160
+ log_success "Connection pool healthy: $idle_connections idle connections"
161
+ else
162
+ log_warning "High idle connections: $idle_connections (consider reviewing)"
163
+ fi
164
+
165
+ log_success "Smoke tests completed"
166
+ }
167
+
168
+ run_schema_audit() {
169
+ log_info "Running schema audit..."
170
+
171
+ psql "$DB_URL" << 'SQL'
172
+ \echo ''
173
+ \echo '=== SCHEMA AUDIT REPORT ==='
174
+ \echo ''
175
+
176
+ -- Tables without primary key
177
+ \echo '--- Tables without PRIMARY KEY ---'
178
+ SELECT tablename
179
+ FROM pg_tables t
180
+ WHERE schemaname = 'public'
181
+ AND NOT EXISTS (
182
+ SELECT 1 FROM pg_constraint c
183
+ WHERE c.conrelid = (schemaname || '.' || tablename)::regclass
184
+ AND c.contype = 'p'
185
+ );
186
+
187
+ -- Tables without RLS
188
+ \echo ''
189
+ \echo '--- Tables without RLS ---'
190
+ SELECT tablename,
191
+ CASE WHEN rowsecurity THEN '✓ Enabled' ELSE '✗ DISABLED' END as rls_status
192
+ FROM pg_tables
193
+ WHERE schemaname = 'public'
194
+ ORDER BY rowsecurity, tablename;
195
+
196
+ -- Columns without NOT NULL that probably should have it
197
+ \echo ''
198
+ \echo '--- Nullable columns (potential issues) ---'
199
+ SELECT table_name, column_name, data_type
200
+ FROM information_schema.columns
201
+ WHERE table_schema = 'public'
202
+ AND is_nullable = 'YES'
203
+ AND column_name IN ('id', 'created_at', 'updated_at', 'user_id')
204
+ ORDER BY table_name, column_name;
205
+
206
+ -- Indexes
207
+ \echo ''
208
+ \echo '--- Index coverage ---'
209
+ SELECT
210
+ t.tablename,
211
+ count(i.indexname) as index_count
212
+ FROM pg_tables t
213
+ LEFT JOIN pg_indexes i ON t.tablename = i.tablename AND t.schemaname = i.schemaname
214
+ WHERE t.schemaname = 'public'
215
+ GROUP BY t.tablename
216
+ ORDER BY index_count, t.tablename;
217
+
218
+ \echo ''
219
+ \echo '=== END OF AUDIT ==='
220
+ SQL
221
+
222
+ log_success "Schema audit completed"
223
+ }
224
+
225
+ run_security_audit() {
226
+ log_info "Running security audit..."
227
+
228
+ psql "$DB_URL" << 'SQL'
229
+ \echo ''
230
+ \echo '=== SECURITY AUDIT REPORT ==='
231
+ \echo ''
232
+
233
+ -- RLS policies
234
+ \echo '--- RLS Policies by Table ---'
235
+ SELECT
236
+ schemaname || '.' || tablename as table_name,
237
+ policyname,
238
+ permissive,
239
+ roles,
240
+ cmd
241
+ FROM pg_policies
242
+ WHERE schemaname = 'public'
243
+ ORDER BY tablename, policyname;
244
+
245
+ -- Public functions
246
+ \echo ''
247
+ \echo '--- Public Functions (review for security) ---'
248
+ SELECT
249
+ routine_name,
250
+ routine_type,
251
+ security_type
252
+ FROM information_schema.routines
253
+ WHERE routine_schema = 'public'
254
+ ORDER BY routine_name;
255
+
256
+ -- Grants on public schema
257
+ \echo ''
258
+ \echo '--- Grants on public schema ---'
259
+ SELECT grantee, privilege_type
260
+ FROM information_schema.table_privileges
261
+ WHERE table_schema = 'public'
262
+ GROUP BY grantee, privilege_type
263
+ ORDER BY grantee;
264
+
265
+ \echo ''
266
+ \echo '=== END OF SECURITY AUDIT ==='
267
+ SQL
268
+
269
+ log_success "Security audit completed"
270
+ }
271
+
272
+ # Parse arguments
273
+ while [[ $# -gt 0 ]]; do
274
+ case $1 in
275
+ --quick) MODE="quick"; shift ;;
276
+ --full) MODE="full"; shift ;;
277
+ --smoke-test) MODE="smoke"; shift ;;
278
+ --schema-audit) MODE="schema"; shift ;;
279
+ --security-audit) MODE="security"; shift ;;
280
+ -v|--verbose) VERBOSE=true; shift ;;
281
+ -h|--help) usage; exit 0 ;;
282
+ *) echo "Unknown option: $1"; usage; exit 1 ;;
283
+ esac
284
+ done
285
+
286
+ # Main execution
287
+ echo ""
288
+ echo "================================================"
289
+ echo " DB-OPS Health Checker"
290
+ echo " Mode: $MODE"
291
+ echo "================================================"
292
+ echo ""
293
+
294
+ check_env
295
+ check_client_tools
296
+ check_connection || exit 1
297
+
298
+ case $MODE in
299
+ quick)
300
+ check_ssl
301
+ check_pooler
302
+ get_db_stats
303
+ ;;
304
+ full)
305
+ check_ssl
306
+ check_pooler
307
+ get_db_stats
308
+ run_smoke_tests
309
+ run_schema_audit
310
+ ;;
311
+ smoke)
312
+ run_smoke_tests
313
+ ;;
314
+ schema)
315
+ run_schema_audit
316
+ ;;
317
+ security)
318
+ run_security_audit
319
+ ;;
320
+ esac
321
+
322
+ echo ""
323
+ log_success "Health check completed"
@@ -0,0 +1,308 @@
1
+ #!/usr/bin/env bash
2
+ # =============================================================================
3
+ # migration-runner.sh - Safe Migration Execution (Hybrid Script)
4
+ # =============================================================================
5
+ # execution_type: Hybrid (Worker executes, Human confirms for production)
6
+ # pattern: EXEC-HY-001
7
+ # tasks: db-apply-migration, db-dry-run, db-verify-order
8
+ # token_savings: 91%
9
+ # =============================================================================
10
+
11
+ set -euo pipefail
12
+
13
+ # Colors
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ BLUE='\033[0;34m'
18
+ NC='\033[0m'
19
+
20
+ # Defaults
21
+ DRY_RUN=false
22
+ VERIFY_ORDER=false
23
+ CREATE_SNAPSHOT=true
24
+ LOCK_KEY="dbops_migration_$(date +%s)"
25
+ DB_URL=""
26
+
27
+ usage() {
28
+ cat << EOF
29
+ Usage: $(basename "$0") [OPTIONS] <migration_file>
30
+
31
+ Safely execute database migrations with locks and snapshots.
32
+
33
+ OPTIONS:
34
+ --dry-run Execute in BEGIN/ROLLBACK (test mode)
35
+ --verify-order Only verify DDL ordering, don't execute
36
+ --no-snapshot Skip pre-migration snapshot
37
+ --force Skip confirmation prompts
38
+ -h, --help Show this help
39
+
40
+ EXAMPLES:
41
+ $(basename "$0") supabase/migrations/001_create_users.sql
42
+ $(basename "$0") supabase/migrations/002_add_rls.sql --dry-run
43
+ $(basename "$0") supabase/migrations/003_indexes.sql --verify-order
44
+
45
+ SAFETY FEATURES:
46
+ • Advisory lock prevents concurrent migrations
47
+ • Pre-migration snapshot for rollback
48
+ • Dry-run mode for testing
49
+ • DDL ordering verification
50
+
51
+ ENVIRONMENT:
52
+ SUPABASE_DB_URL or DATABASE_URL Required. PostgreSQL connection string.
53
+ EOF
54
+ }
55
+
56
+ log_info() { echo -e "${BLUE}ℹ${NC} $1"; }
57
+ log_success() { echo -e "${GREEN}✓${NC} $1"; }
58
+ log_warning() { echo -e "${YELLOW}⚠${NC} $1"; }
59
+ log_error() { echo -e "${RED}✗${NC} $1"; }
60
+
61
+ check_env() {
62
+ DB_URL="${SUPABASE_DB_URL:-${DATABASE_URL:-}}"
63
+ if [[ -z "$DB_URL" ]]; then
64
+ log_error "SUPABASE_DB_URL or DATABASE_URL not set"
65
+ exit 1
66
+ fi
67
+ }
68
+
69
+ acquire_lock() {
70
+ log_info "Acquiring migration lock..."
71
+
72
+ local got_lock
73
+ got_lock=$(psql "$DB_URL" -t -A -c "SELECT pg_try_advisory_lock(hashtext('$LOCK_KEY'))")
74
+
75
+ if [[ "$got_lock" == "t" ]]; then
76
+ log_success "Migration lock acquired"
77
+ return 0
78
+ else
79
+ log_error "Another migration is running. Wait or check for stale locks."
80
+ return 1
81
+ fi
82
+ }
83
+
84
+ release_lock() {
85
+ log_info "Releasing migration lock..."
86
+ psql "$DB_URL" -c "SELECT pg_advisory_unlock(hashtext('$LOCK_KEY'))" > /dev/null 2>&1 || true
87
+ log_success "Lock released"
88
+ }
89
+
90
+ # Trap to ensure lock is released
91
+ cleanup() {
92
+ release_lock
93
+ }
94
+
95
+ verify_ddl_order() {
96
+ local file="$1"
97
+
98
+ log_info "Verifying DDL ordering..."
99
+
100
+ # Extract DDL statements
101
+ local sql
102
+ sql=$(cat "$file")
103
+
104
+ # Check for common ordering issues
105
+ local issues=0
106
+
107
+ # Issue 1: DROP before CREATE of same object
108
+ if grep -qE "DROP TABLE.*IF EXISTS.*(\w+)" "$file"; then
109
+ local dropped_tables
110
+ dropped_tables=$(grep -oE "DROP TABLE.*IF EXISTS.*(\w+)" "$file" | grep -oE "\w+$")
111
+
112
+ for table in $dropped_tables; do
113
+ if grep -qE "CREATE TABLE.*$table" "$file"; then
114
+ # Check order
115
+ local drop_line create_line
116
+ drop_line=$(grep -n "DROP TABLE.*$table" "$file" | head -1 | cut -d: -f1)
117
+ create_line=$(grep -n "CREATE TABLE.*$table" "$file" | head -1 | cut -d: -f1)
118
+
119
+ if [[ -n "$create_line" && "$drop_line" -gt "$create_line" ]]; then
120
+ log_error "DROP TABLE $table appears after CREATE TABLE"
121
+ ((issues++))
122
+ fi
123
+ fi
124
+ done
125
+ fi
126
+
127
+ # Issue 2: Foreign key references table created later
128
+ if grep -qiE "REFERENCES\s+(\w+)" "$file"; then
129
+ log_info "Checking foreign key references..."
130
+ # This is a simplified check - full verification would need proper SQL parsing
131
+ fi
132
+
133
+ # Issue 3: Index on table that doesn't exist yet
134
+ if grep -qiE "CREATE INDEX.*ON\s+(\w+)" "$file"; then
135
+ log_info "Checking index targets..."
136
+ fi
137
+
138
+ if [[ $issues -eq 0 ]]; then
139
+ log_success "DDL ordering verified - no issues found"
140
+ return 0
141
+ else
142
+ log_error "Found $issues ordering issues"
143
+ return 1
144
+ fi
145
+ }
146
+
147
+ run_dry_run() {
148
+ local file="$1"
149
+
150
+ log_info "Running dry-run (BEGIN/ROLLBACK)..."
151
+
152
+ local sql
153
+ sql=$(cat "$file")
154
+
155
+ local start_time end_time duration
156
+
157
+ start_time=$(date +%s.%N)
158
+
159
+ # Execute in transaction that rolls back
160
+ if psql "$DB_URL" -v ON_ERROR_STOP=1 << EOF
161
+ BEGIN;
162
+ $sql
163
+ ROLLBACK;
164
+ EOF
165
+ then
166
+ end_time=$(date +%s.%N)
167
+ duration=$(echo "$end_time - $start_time" | bc)
168
+
169
+ log_success "Dry-run completed in ${duration}s"
170
+ log_info "No changes were made (rolled back)"
171
+ return 0
172
+ else
173
+ log_error "Dry-run failed - migration has errors"
174
+ return 1
175
+ fi
176
+ }
177
+
178
+ apply_migration() {
179
+ local file="$1"
180
+
181
+ # Create pre-migration snapshot
182
+ if $CREATE_SNAPSHOT; then
183
+ log_info "Creating pre-migration snapshot..."
184
+ local script_dir
185
+ script_dir="$(dirname "$0")"
186
+ if [[ -x "$script_dir/backup-manager.sh" ]]; then
187
+ "$script_dir/backup-manager.sh" --snapshot "pre_migration_$(basename "$file" .sql)" --schema-only
188
+ else
189
+ log_warning "backup-manager.sh not found, skipping snapshot"
190
+ fi
191
+ fi
192
+
193
+ log_info "Applying migration: $file"
194
+
195
+ local sql
196
+ sql=$(cat "$file")
197
+
198
+ local start_time end_time duration
199
+
200
+ start_time=$(date +%s.%N)
201
+
202
+ # Execute
203
+ if psql "$DB_URL" -v ON_ERROR_STOP=1 << EOF
204
+ BEGIN;
205
+ $sql
206
+ COMMIT;
207
+ EOF
208
+ then
209
+ end_time=$(date +%s.%N)
210
+ duration=$(echo "$end_time - $start_time" | bc)
211
+
212
+ log_success "Migration applied in ${duration}s"
213
+ return 0
214
+ else
215
+ log_error "Migration failed"
216
+ log_info "Database was not modified (transaction rolled back)"
217
+ return 1
218
+ fi
219
+ }
220
+
221
+ # Parse arguments
222
+ MIGRATION_FILE=""
223
+ FORCE=false
224
+
225
+ while [[ $# -gt 0 ]]; do
226
+ case $1 in
227
+ --dry-run) DRY_RUN=true; shift ;;
228
+ --verify-order) VERIFY_ORDER=true; shift ;;
229
+ --no-snapshot) CREATE_SNAPSHOT=false; shift ;;
230
+ --force) FORCE=true; shift ;;
231
+ -h|--help) usage; exit 0 ;;
232
+ *)
233
+ MIGRATION_FILE="$1"
234
+ shift
235
+ ;;
236
+ esac
237
+ done
238
+
239
+ if [[ -z "$MIGRATION_FILE" ]]; then
240
+ usage
241
+ exit 1
242
+ fi
243
+
244
+ if [[ ! -f "$MIGRATION_FILE" ]]; then
245
+ log_error "File not found: $MIGRATION_FILE"
246
+ exit 1
247
+ fi
248
+
249
+ check_env
250
+
251
+ echo ""
252
+ echo "================================================"
253
+ echo " DB-OPS Migration Runner"
254
+ echo " File: $MIGRATION_FILE"
255
+ echo " Mode: $(if $DRY_RUN; then echo "DRY-RUN"; elif $VERIFY_ORDER; then echo "VERIFY-ORDER"; else echo "APPLY"; fi)"
256
+ echo "================================================"
257
+ echo ""
258
+
259
+ log_info "File: $MIGRATION_FILE"
260
+ log_info "Size: $(du -h "$MIGRATION_FILE" | cut -f1)"
261
+ log_info "Lines: $(wc -l < "$MIGRATION_FILE")"
262
+ echo ""
263
+
264
+ # Always verify order first
265
+ if ! verify_ddl_order "$MIGRATION_FILE"; then
266
+ if ! $FORCE; then
267
+ log_error "Fix ordering issues before proceeding"
268
+ exit 1
269
+ fi
270
+ log_warning "Proceeding despite ordering issues (--force)"
271
+ fi
272
+
273
+ if $VERIFY_ORDER; then
274
+ log_success "Verification complete"
275
+ exit 0
276
+ fi
277
+
278
+ # Acquire lock
279
+ trap cleanup EXIT
280
+ if ! acquire_lock; then
281
+ exit 1
282
+ fi
283
+
284
+ echo ""
285
+
286
+ if $DRY_RUN; then
287
+ run_dry_run "$MIGRATION_FILE"
288
+ else
289
+ # Show warning for production
290
+ if ! $FORCE; then
291
+ log_warning "╔════════════════════════════════════════════════════════════╗"
292
+ log_warning "║ ⚠️ PRODUCTION MIGRATION WARNING ⚠️ ║"
293
+ log_warning "╠════════════════════════════════════════════════════════════╣"
294
+ log_warning "║ This will modify the database schema. ║"
295
+ log_warning "║ ║"
296
+ log_warning "║ Recommended: Run --dry-run first ║"
297
+ log_warning "╚════════════════════════════════════════════════════════════╝"
298
+ echo ""
299
+ log_info "Use --force to skip this warning"
300
+ log_info "Or run: $(basename "$0") $MIGRATION_FILE --dry-run"
301
+ exit 0
302
+ fi
303
+
304
+ apply_migration "$MIGRATION_FILE"
305
+ fi
306
+
307
+ echo ""
308
+ log_info "Run health check: ./scripts/db-ops/health-checker.sh --smoke-test"