@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,534 @@
1
+ #!/usr/bin/env bash
2
+ # =============================================================================
3
+ # best-practices-auditor.sh - Supabase Best Practices Audit (Worker Script)
4
+ # =============================================================================
5
+ # execution_type: Worker
6
+ # pattern: EXEC-W-001
7
+ # tasks: db-best-practices-audit
8
+ # token_savings: 92%
9
+ # =============================================================================
10
+ # Based on 30 Supabase Agent Skills rules
11
+ # =============================================================================
12
+
13
+ set -euo pipefail
14
+
15
+ # Colors
16
+ RED='\033[0;31m'
17
+ GREEN='\033[0;32m'
18
+ YELLOW='\033[1;33m'
19
+ BLUE='\033[0;34m'
20
+ CYAN='\033[0;36m'
21
+ NC='\033[0m'
22
+
23
+ # Defaults
24
+ SECTION="all"
25
+ VERBOSE=false
26
+ OUTPUT_FORMAT="terminal"
27
+ DB_URL=""
28
+
29
+ usage() {
30
+ cat << EOF
31
+ Usage: $(basename "$0") [OPTIONS]
32
+
33
+ Audit database against Supabase best practices (30 rules).
34
+
35
+ OPTIONS:
36
+ --all Run all audits (default)
37
+ --connections Connection management audit
38
+ --fk-indexes Foreign key index audit
39
+ --rls RLS coverage audit
40
+ --schema Schema quality audit
41
+ --performance Query performance audit
42
+ --indexes Index quality audit
43
+ --vacuum Vacuum & statistics audit
44
+ --audit-trail Audit trail check
45
+ --json Output as JSON (for programmatic use)
46
+ -v, --verbose Verbose output
47
+ -h, --help Show this help
48
+
49
+ EXAMPLES:
50
+ $(basename "$0") --all
51
+ $(basename "$0") --rls --fk-indexes
52
+ $(basename "$0") --performance --json
53
+
54
+ ENVIRONMENT:
55
+ SUPABASE_DB_URL or DATABASE_URL Required. PostgreSQL connection string.
56
+ EOF
57
+ }
58
+
59
+ log_info() { echo -e "${BLUE}ℹ${NC} $1"; }
60
+ log_success() { echo -e "${GREEN}✓${NC} $1"; }
61
+ log_warning() { echo -e "${YELLOW}⚠${NC} $1"; }
62
+ log_error() { echo -e "${RED}✗${NC} $1"; }
63
+ log_section() { echo -e "\n${CYAN}═══ $1 ═══${NC}\n"; }
64
+
65
+ check_env() {
66
+ DB_URL="${SUPABASE_DB_URL:-${DATABASE_URL:-}}"
67
+ if [[ -z "$DB_URL" ]]; then
68
+ log_error "SUPABASE_DB_URL or DATABASE_URL not set"
69
+ exit 1
70
+ fi
71
+ }
72
+
73
+ # =============================================================================
74
+ # 1. Connection Management Audit
75
+ # =============================================================================
76
+ audit_connections() {
77
+ log_section "CONNECTION MANAGEMENT AUDIT"
78
+
79
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
80
+ \echo 'Active Connections by State:'
81
+ SELECT state, COUNT(*) as count, array_agg(DISTINCT usename) as users
82
+ FROM pg_stat_activity
83
+ WHERE datname = current_database()
84
+ GROUP BY state
85
+ ORDER BY count DESC;
86
+
87
+ \echo ''
88
+ \echo 'Configuration:'
89
+ SELECT name, setting, unit
90
+ FROM pg_settings
91
+ WHERE name IN (
92
+ 'max_connections',
93
+ 'idle_in_transaction_session_timeout',
94
+ 'statement_timeout',
95
+ 'lock_timeout'
96
+ );
97
+
98
+ \echo ''
99
+ \echo 'Connection Pool Check:'
100
+ SELECT
101
+ (SELECT COUNT(*) FROM pg_stat_activity WHERE datname = current_database()) as active_conn,
102
+ (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') as max_conn,
103
+ ROUND(100.0 * (SELECT COUNT(*) FROM pg_stat_activity WHERE datname = current_database()) /
104
+ (SELECT setting::int FROM pg_settings WHERE name = 'max_connections'), 1) as usage_pct;
105
+ SQL
106
+ }
107
+
108
+ # =============================================================================
109
+ # 2. Foreign Key Index Audit
110
+ # =============================================================================
111
+ audit_fk_indexes() {
112
+ log_section "FOREIGN KEY INDEX AUDIT"
113
+
114
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
115
+ \echo 'Foreign Keys WITHOUT Indexes (CRITICAL):'
116
+ SELECT
117
+ c.conrelid::regclass AS table_name,
118
+ a.attname AS fk_column,
119
+ c.confrelid::regclass AS references_table,
120
+ pg_size_pretty(pg_relation_size(c.conrelid)) AS table_size
121
+ FROM pg_constraint c
122
+ JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
123
+ WHERE c.contype = 'f'
124
+ AND c.conrelid::regclass::text NOT LIKE 'pg_%'
125
+ AND NOT EXISTS (
126
+ SELECT 1 FROM pg_index i
127
+ WHERE i.indrelid = c.conrelid
128
+ AND a.attnum = ANY(i.indkey)
129
+ )
130
+ ORDER BY pg_relation_size(c.conrelid) DESC;
131
+
132
+ \echo ''
133
+ \echo 'Summary:'
134
+ SELECT
135
+ (SELECT COUNT(*) FROM pg_constraint WHERE contype = 'f') AS total_fks,
136
+ COUNT(*) AS fks_without_index
137
+ FROM pg_constraint c
138
+ JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
139
+ WHERE c.contype = 'f'
140
+ AND NOT EXISTS (
141
+ SELECT 1 FROM pg_index i
142
+ WHERE i.indrelid = c.conrelid
143
+ AND a.attnum = ANY(i.indkey)
144
+ );
145
+ SQL
146
+ }
147
+
148
+ # =============================================================================
149
+ # 3. RLS Coverage Audit
150
+ # =============================================================================
151
+ audit_rls() {
152
+ log_section "RLS COVERAGE AUDIT"
153
+
154
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
155
+ \echo 'Tables WITHOUT RLS (Security Risk):'
156
+ SELECT
157
+ t.tablename,
158
+ pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::regclass)) AS size,
159
+ (SELECT COUNT(*) FROM pg_attribute a
160
+ WHERE a.attrelid = quote_ident(t.tablename)::regclass
161
+ AND a.attname LIKE '%user%') AS has_user_column
162
+ FROM pg_tables t
163
+ WHERE t.schemaname = 'public'
164
+ AND t.rowsecurity = false
165
+ ORDER BY pg_relation_size(quote_ident(t.tablename)::regclass) DESC;
166
+
167
+ \echo ''
168
+ \echo 'Tables with RLS but NO POLICIES (Completely Blocked):'
169
+ SELECT t.tablename
170
+ FROM pg_tables t
171
+ WHERE t.schemaname = 'public'
172
+ AND t.rowsecurity = true
173
+ AND NOT EXISTS (
174
+ SELECT 1 FROM pg_policies p
175
+ WHERE p.tablename = t.tablename
176
+ AND p.schemaname = 'public'
177
+ );
178
+
179
+ \echo ''
180
+ \echo 'Policy Coverage Summary:'
181
+ SELECT
182
+ t.tablename,
183
+ t.rowsecurity AS rls_enabled,
184
+ COUNT(p.policyname) AS policy_count,
185
+ ARRAY_AGG(DISTINCT p.cmd) FILTER (WHERE p.cmd IS NOT NULL) AS operations_covered
186
+ FROM pg_tables t
187
+ LEFT JOIN pg_policies p ON p.tablename = t.tablename AND p.schemaname = 'public'
188
+ WHERE t.schemaname = 'public'
189
+ GROUP BY t.tablename, t.rowsecurity
190
+ ORDER BY t.rowsecurity DESC, policy_count;
191
+
192
+ \echo ''
193
+ \echo 'RLS Summary:'
194
+ SELECT
195
+ COUNT(*) AS total_tables,
196
+ COUNT(*) FILTER (WHERE rowsecurity) AS rls_enabled,
197
+ COUNT(*) FILTER (WHERE NOT rowsecurity) AS rls_disabled,
198
+ ROUND(100.0 * COUNT(*) FILTER (WHERE rowsecurity) / COUNT(*), 1) AS coverage_pct
199
+ FROM pg_tables
200
+ WHERE schemaname = 'public';
201
+ SQL
202
+ }
203
+
204
+ # =============================================================================
205
+ # 4. Schema Quality Audit
206
+ # =============================================================================
207
+ audit_schema() {
208
+ log_section "SCHEMA QUALITY AUDIT"
209
+
210
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
211
+ \echo 'Potential Data Type Issues:'
212
+ SELECT
213
+ c.table_name,
214
+ c.column_name,
215
+ c.data_type,
216
+ CASE
217
+ WHEN c.data_type = 'timestamp without time zone' THEN 'Use TIMESTAMPTZ'
218
+ WHEN c.data_type = 'character varying' AND c.character_maximum_length > 255 THEN 'Consider TEXT'
219
+ WHEN c.data_type = 'double precision' AND c.column_name LIKE '%price%' THEN 'Use NUMERIC for money'
220
+ WHEN c.data_type = 'double precision' AND c.column_name LIKE '%amount%' THEN 'Use NUMERIC for money'
221
+ WHEN c.data_type = 'integer' AND c.column_name = 'id' THEN 'Consider BIGINT for PKs'
222
+ WHEN c.data_type = 'json' THEN 'Use JSONB instead'
223
+ END AS recommendation
224
+ FROM information_schema.columns c
225
+ WHERE c.table_schema = 'public'
226
+ AND (
227
+ c.data_type = 'timestamp without time zone'
228
+ OR (c.data_type = 'character varying' AND c.character_maximum_length > 255)
229
+ OR (c.data_type = 'double precision' AND (c.column_name LIKE '%price%' OR c.column_name LIKE '%amount%'))
230
+ OR (c.data_type = 'integer' AND c.column_name = 'id')
231
+ OR c.data_type = 'json'
232
+ )
233
+ ORDER BY c.table_name;
234
+
235
+ \echo ''
236
+ \echo 'Primary Key Types:'
237
+ SELECT
238
+ tc.table_name,
239
+ c.column_name,
240
+ c.data_type,
241
+ CASE
242
+ WHEN c.data_type = 'uuid' THEN 'OK'
243
+ WHEN c.data_type = 'bigint' THEN 'OK'
244
+ WHEN c.data_type = 'integer' THEN 'Consider BIGINT'
245
+ ELSE 'Review'
246
+ END AS status
247
+ FROM information_schema.table_constraints tc
248
+ JOIN information_schema.key_column_usage kcu
249
+ ON tc.constraint_name = kcu.constraint_name
250
+ JOIN information_schema.columns c
251
+ ON c.table_name = kcu.table_name AND c.column_name = kcu.column_name
252
+ WHERE tc.constraint_type = 'PRIMARY KEY'
253
+ AND tc.table_schema = 'public'
254
+ ORDER BY status DESC, tc.table_name;
255
+
256
+ \echo ''
257
+ \echo 'Naming Convention Check (should be snake_case):'
258
+ SELECT 'table' AS type, tablename AS name, 'Contains uppercase' AS issue
259
+ FROM pg_tables WHERE schemaname = 'public' AND tablename ~ '[A-Z]'
260
+ UNION ALL
261
+ SELECT 'column', table_name || '.' || column_name, 'Contains uppercase'
262
+ FROM information_schema.columns
263
+ WHERE table_schema = 'public' AND column_name ~ '[A-Z]';
264
+ SQL
265
+ }
266
+
267
+ # =============================================================================
268
+ # 5. Query Performance Audit
269
+ # =============================================================================
270
+ audit_performance() {
271
+ log_section "QUERY PERFORMANCE AUDIT"
272
+
273
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
274
+ \echo 'pg_stat_statements status:'
275
+ SELECT
276
+ CASE WHEN EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'pg_stat_statements')
277
+ THEN 'ENABLED'
278
+ ELSE 'DISABLED - run: CREATE EXTENSION pg_stat_statements'
279
+ END AS status;
280
+
281
+ \echo ''
282
+ \echo 'Top 10 Slow Queries (mean_exec_time > 100ms):'
283
+ SELECT
284
+ ROUND(mean_exec_time::numeric, 2) AS mean_ms,
285
+ calls,
286
+ ROUND(total_exec_time::numeric, 2) AS total_ms,
287
+ LEFT(query, 100) AS query_preview
288
+ FROM pg_stat_statements
289
+ WHERE mean_exec_time > 100
290
+ AND query NOT LIKE '%pg_stat%'
291
+ ORDER BY mean_exec_time DESC
292
+ LIMIT 10;
293
+
294
+ \echo ''
295
+ \echo 'Sequential Scans on Large Tables (potential index needed):'
296
+ SELECT
297
+ schemaname,
298
+ relname AS table_name,
299
+ seq_scan,
300
+ seq_tup_read,
301
+ idx_scan,
302
+ pg_size_pretty(pg_relation_size(relid)) AS size,
303
+ CASE
304
+ WHEN idx_scan = 0 AND seq_scan > 100 THEN 'CRITICAL: No index usage'
305
+ WHEN seq_tup_read / NULLIF(seq_scan, 0) > 10000 THEN 'HIGH: Large seq scans'
306
+ ELSE 'OK'
307
+ END AS status
308
+ FROM pg_stat_user_tables
309
+ WHERE seq_scan > 0
310
+ AND pg_relation_size(relid) > 10000000 -- > 10MB
311
+ ORDER BY seq_tup_read DESC
312
+ LIMIT 10;
313
+ SQL
314
+ }
315
+
316
+ # =============================================================================
317
+ # 6. Index Quality Audit
318
+ # =============================================================================
319
+ audit_indexes() {
320
+ log_section "INDEX QUALITY AUDIT"
321
+
322
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
323
+ \echo 'Potentially Unused Indexes (candidates for removal):'
324
+ SELECT
325
+ schemaname,
326
+ relname AS table_name,
327
+ indexrelname AS index_name,
328
+ pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
329
+ idx_scan AS times_used
330
+ FROM pg_stat_user_indexes
331
+ WHERE idx_scan < 10
332
+ AND pg_relation_size(indexrelid) > 1000000 -- > 1MB
333
+ AND indexrelname NOT LIKE '%pkey%'
334
+ AND indexrelname NOT LIKE '%pk%'
335
+ ORDER BY pg_relation_size(indexrelid) DESC
336
+ LIMIT 10;
337
+
338
+ \echo ''
339
+ \echo 'Duplicate Indexes:'
340
+ SELECT
341
+ indrelid::regclass AS table_name,
342
+ array_agg(indexrelid::regclass) AS index_names
343
+ FROM pg_index
344
+ GROUP BY indrelid, indkey
345
+ HAVING COUNT(*) > 1;
346
+
347
+ \echo ''
348
+ \echo 'Index Types Distribution:'
349
+ SELECT
350
+ am.amname AS index_type,
351
+ COUNT(*) AS count
352
+ FROM pg_index i
353
+ JOIN pg_class c ON c.oid = i.indexrelid
354
+ JOIN pg_am am ON am.oid = c.relam
355
+ WHERE c.relnamespace = 'public'::regnamespace
356
+ GROUP BY am.amname
357
+ ORDER BY count DESC;
358
+ SQL
359
+ }
360
+
361
+ # =============================================================================
362
+ # 7. Vacuum & Statistics Audit
363
+ # =============================================================================
364
+ audit_vacuum() {
365
+ log_section "VACUUM & STATISTICS AUDIT"
366
+
367
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
368
+ \echo 'Tables with High Dead Tuple Count:'
369
+ SELECT
370
+ schemaname,
371
+ relname AS table_name,
372
+ n_live_tup,
373
+ n_dead_tup,
374
+ ROUND(100.0 * n_dead_tup / NULLIF(n_live_tup + n_dead_tup, 0), 1) AS dead_pct,
375
+ last_vacuum,
376
+ last_autovacuum,
377
+ last_analyze,
378
+ last_autoanalyze
379
+ FROM pg_stat_user_tables
380
+ WHERE n_dead_tup > 1000
381
+ ORDER BY n_dead_tup DESC
382
+ LIMIT 10;
383
+
384
+ \echo ''
385
+ \echo 'Tables Never Analyzed:'
386
+ SELECT relname AS table_name, last_analyze, last_autoanalyze
387
+ FROM pg_stat_user_tables
388
+ WHERE last_analyze IS NULL AND last_autoanalyze IS NULL;
389
+
390
+ \echo ''
391
+ \echo 'Autovacuum Settings:'
392
+ SELECT name, setting, unit
393
+ FROM pg_settings
394
+ WHERE name LIKE 'autovacuum%'
395
+ ORDER BY name;
396
+ SQL
397
+ }
398
+
399
+ # =============================================================================
400
+ # 8. Audit Trail Check
401
+ # =============================================================================
402
+ audit_trail() {
403
+ log_section "AUDIT TRAIL CHECK"
404
+
405
+ psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
406
+ \echo 'pgaudit status:'
407
+ SELECT
408
+ CASE WHEN EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'pgaudit')
409
+ THEN 'INSTALLED'
410
+ ELSE 'NOT INSTALLED'
411
+ END AS pgaudit_status;
412
+
413
+ \echo ''
414
+ \echo 'Tables configured for audit (via auditor role):'
415
+ SELECT table_name, array_agg(privilege_type ORDER BY privilege_type) as privileges
416
+ FROM information_schema.table_privileges
417
+ WHERE grantee = 'auditor'
418
+ GROUP BY table_name
419
+ ORDER BY table_name;
420
+
421
+ \echo ''
422
+ \echo 'pgaudit configuration:'
423
+ SELECT name, setting
424
+ FROM pg_settings
425
+ WHERE name LIKE 'pgaudit%';
426
+ SQL
427
+ }
428
+
429
+ # =============================================================================
430
+ # Score Summary
431
+ # =============================================================================
432
+ show_score_summary() {
433
+ log_section "AUDIT SCORE SUMMARY"
434
+
435
+ cat << 'EOF'
436
+ ┌─────────────────┬────────┬────────┬────────┬───────┐
437
+ │ Category │ Weight │ Checks │ Passed │ Score │
438
+ ├─────────────────┼────────┼────────┼────────┼───────┤
439
+ │ Connection │ 15% │ 5 │ - │ - │
440
+ │ FK Indexes │ 15% │ 2 │ - │ - │
441
+ │ RLS │ 20% │ 4 │ - │ - │
442
+ │ Schema │ 15% │ 6 │ - │ - │
443
+ │ Query Perf │ 15% │ 4 │ - │ - │
444
+ │ Indexes │ 10% │ 3 │ - │ - │
445
+ │ Vacuum │ 10% │ 4 │ - │ - │
446
+ ├─────────────────┼────────┼────────┼────────┼───────┤
447
+ │ TOTAL │ 100% │ 28 │ - │ - │
448
+ └─────────────────┴────────┴────────┴────────┴───────┘
449
+
450
+ Issue Classification:
451
+
452
+ CRITICAL (Fix Now):
453
+ • FKs without indexes on tables >10k rows
454
+ • User tables without RLS
455
+ • Connection usage >90%
456
+
457
+ HIGH (Fix This Sprint):
458
+ • pg_stat_statements not enabled
459
+ • Sequential scans on large tables
460
+ • TIMESTAMP without timezone
461
+
462
+ MEDIUM (Schedule Fix):
463
+ • Schema naming inconsistencies
464
+ • Unused indexes
465
+ • Tables needing vacuum
466
+
467
+ Maps to 30 Supabase Agent Skills rules.
468
+ EOF
469
+ }
470
+
471
+ # =============================================================================
472
+ # Main
473
+ # =============================================================================
474
+ SECTIONS=()
475
+
476
+ while [[ $# -gt 0 ]]; do
477
+ case $1 in
478
+ --all) SECTIONS=("all"); shift ;;
479
+ --connections) SECTIONS+=("connections"); shift ;;
480
+ --fk-indexes) SECTIONS+=("fk"); shift ;;
481
+ --rls) SECTIONS+=("rls"); shift ;;
482
+ --schema) SECTIONS+=("schema"); shift ;;
483
+ --performance) SECTIONS+=("performance"); shift ;;
484
+ --indexes) SECTIONS+=("indexes"); shift ;;
485
+ --vacuum) SECTIONS+=("vacuum"); shift ;;
486
+ --audit-trail) SECTIONS+=("audit"); shift ;;
487
+ --json) OUTPUT_FORMAT="json"; shift ;;
488
+ -v|--verbose) VERBOSE=true; shift ;;
489
+ -h|--help) usage; exit 0 ;;
490
+ *) echo "Unknown option: $1"; usage; exit 1 ;;
491
+ esac
492
+ done
493
+
494
+ # Default to all if no sections specified
495
+ if [[ ${#SECTIONS[@]} -eq 0 ]]; then
496
+ SECTIONS=("all")
497
+ fi
498
+
499
+ check_env
500
+
501
+ echo ""
502
+ echo "================================================"
503
+ echo " DB-OPS Best Practices Auditor"
504
+ echo " Sections: ${SECTIONS[*]}"
505
+ echo "================================================"
506
+ echo ""
507
+
508
+ for section in "${SECTIONS[@]}"; do
509
+ case $section in
510
+ all)
511
+ audit_connections
512
+ audit_fk_indexes
513
+ audit_rls
514
+ audit_schema
515
+ audit_performance
516
+ audit_indexes
517
+ audit_vacuum
518
+ audit_trail
519
+ show_score_summary
520
+ ;;
521
+ connections) audit_connections ;;
522
+ fk) audit_fk_indexes ;;
523
+ rls) audit_rls ;;
524
+ schema) audit_schema ;;
525
+ performance) audit_performance ;;
526
+ indexes) audit_indexes ;;
527
+ vacuum) audit_vacuum ;;
528
+ audit) audit_trail ;;
529
+ esac
530
+ done
531
+
532
+ echo ""
533
+ log_success "Best practices audit completed"
534
+ log_info "For detailed remediation, see: pods/dev-ia/knowledge/db/schema-review-checklist.md"