@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.
- package/LICENSE +21 -0
- package/README.md +121 -0
- package/bin/cli.js +124 -0
- package/installer/__tests__/doctor-ready-oracles.test.cjs +140 -0
- package/installer/__tests__/merge-settings.test.cjs +330 -0
- package/installer/adopt.js +161 -0
- package/installer/copy.js +203 -0
- package/installer/doctor.js +266 -0
- package/installer/install.js +155 -0
- package/installer/manifest.js +102 -0
- package/installer/motor-scripts.js +50 -0
- package/installer/motor-scripts.json +39 -0
- package/installer/uninstall.js +99 -0
- package/installer/update.js +376 -0
- package/installer/util.js +113 -0
- package/installer/wizard.js +64 -0
- package/package.json +26 -0
- package/scripts/__fixtures__/anti-path-demo/agents/ap-writer.md +13 -0
- package/scripts/__fixtures__/anti-path-demo/templates/write-tmpl.md +7 -0
- package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.smoke.json +10 -0
- package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.yaml +25 -0
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/agents/content-chief.md +1 -0
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/workflows/wf-criacao-redteam.yaml +3 -0
- package/scripts/__fixtures__/assess-tier/retrofit-leve/pod-spec.json +13 -0
- package/scripts/__fixtures__/fidelity/fake-green-average-in-band.yaml +21 -0
- package/scripts/__fixtures__/fidelity/fake-green-average.yaml +18 -0
- package/scripts/__fixtures__/fidelity/fake-green-denominator.yaml +19 -0
- package/scripts/__fixtures__/fidelity/fake-green-missing-evidence.yaml +18 -0
- package/scripts/__fixtures__/fidelity/fake-green-threshold.yaml +18 -0
- package/scripts/__fixtures__/fidelity/fake-green-weight.yaml +18 -0
- package/scripts/__fixtures__/fidelity/golden.yaml +31 -0
- package/scripts/__fixtures__/fidelity/trindade-incoherent.yaml +15 -0
- package/scripts/__fixtures__/forge-canonical/pod-spec-example.json +37 -0
- package/scripts/__fixtures__/migrate-squad/authored/agents/offer-engineer.md +17 -0
- package/scripts/__fixtures__/migrate-squad/authored/knowledge/no-source.md +7 -0
- package/scripts/__fixtures__/migrate-squad/authored/knowledge/value-stack-method.md +8 -0
- package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.smoke.json +24 -0
- package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.spec.json +45 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/HEADLINE.md +3 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/README.md +4 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/agents/hormozi-offer.md +14 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/dead-redundant.md +4 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/method-guide.md +6 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/veto-screen.md +4 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/config/config.yaml +2 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/data/case-library.md +3 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/scripts/validate-mvn.py +16 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/sops/sop-sample.md +3 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/squad-io.yaml +14 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/tasks/gather-context.md +7 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/templates/output-tmpl.md +5 -0
- package/scripts/__fixtures__/migrate-squad/legacy-squad/workflows/wf-sample.yaml +24 -0
- package/scripts/__fixtures__/pipeline/pipelines/pipeline-checkpoint.yaml +21 -0
- package/scripts/__fixtures__/pipeline/pipelines/pipeline-demo.yaml +22 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/agents/maker.md +13 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.consolidated.md +8 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.jsonl +83 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/templates/make-tmpl.md +8 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-a/workflows/wf-a.yaml +16 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/agents/user.md +13 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.consolidated.md +8 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.jsonl +14 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/templates/use-tmpl.md +6 -0
- package/scripts/__fixtures__/pipeline/pods/pipe-b/workflows/wf-b.yaml +16 -0
- package/scripts/__fixtures__/pod-run/agents/forge-chief.md +13 -0
- package/scripts/__fixtures__/pod-run/agents/pod-critic.md +13 -0
- package/scripts/__fixtures__/pod-run/templates/build-tmpl.md +8 -0
- package/scripts/__fixtures__/pod-run/templates/gate-tmpl.md +6 -0
- package/scripts/__fixtures__/pod-run/workflows/wf-min.yaml +43 -0
- package/scripts/__fixtures__/pod-run/workflows/wf-skip-modes.yaml +50 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-all-skippable.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-criteria-escalar-de-bloco.yaml +40 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-skip-mode-desconhecido.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-unknown-key.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/invalid-cycle.yaml +26 -0
- package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-backedge.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-forward.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/invalid-handoff-open.yaml +27 -0
- package/scripts/__fixtures__/pod-workflow/invalid-knowledge-shape.yaml +18 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-agent.yaml +15 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-outputs.yaml +15 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-template.yaml +15 -0
- package/scripts/__fixtures__/pod-workflow/invalid-missing-veto.yaml +13 -0
- package/scripts/__fixtures__/pod-workflow/invalid-template-not-on-disk.yaml +16 -0
- package/scripts/__fixtures__/pod-workflow/invalid-veto-prose.yaml +17 -0
- package/scripts/__fixtures__/pod-workflow/knowledge/a.md +4 -0
- package/scripts/__fixtures__/pod-workflow/knowledge/b.md +4 -0
- package/scripts/__fixtures__/pod-workflow/knowledge/c.md +4 -0
- package/scripts/__fixtures__/pod-workflow/templates/step-tmpl.md +7 -0
- package/scripts/__fixtures__/pod-workflow/valid-checkpoint-skip-modes.yaml +29 -0
- package/scripts/__fixtures__/pod-workflow/valid-fix-loop.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/valid-knowledge.yaml +30 -0
- package/scripts/__fixtures__/pod-workflow/valid-veto-always-true.yaml +20 -0
- package/scripts/__fixtures__/pod-workflow/valid.yaml +27 -0
- package/scripts/__fixtures__/smoke-canary/agents/canary-reporter.md +13 -0
- package/scripts/__fixtures__/smoke-canary/agents/canary-researcher.md +13 -0
- package/scripts/__fixtures__/smoke-canary/agents/canary-synth.md +13 -0
- package/scripts/__fixtures__/smoke-canary/memory/learnings.consolidated.md +10 -0
- package/scripts/__fixtures__/smoke-canary/memory/learnings.jsonl +448 -0
- package/scripts/__fixtures__/smoke-canary/templates/report-tmpl.md +9 -0
- package/scripts/__fixtures__/smoke-canary/templates/research-tmpl.md +7 -0
- package/scripts/__fixtures__/smoke-canary/templates/synth-tmpl.md +9 -0
- package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.smoke.json +11 -0
- package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml +53 -0
- package/scripts/__fixtures__/source-audit/fake-green-bronze-unsignaled.yaml +10 -0
- package/scripts/__fixtures__/source-audit/fake-green-counts.yaml +9 -0
- package/scripts/__fixtures__/source-audit/fake-green-missing-evidence.yaml +9 -0
- package/scripts/__fixtures__/source-audit/fake-green-unclassified.yaml +10 -0
- package/scripts/__fixtures__/source-audit/fake-green-verdict.yaml +10 -0
- package/scripts/__fixtures__/source-audit/golden-blocked.yaml +10 -0
- package/scripts/__fixtures__/source-audit/golden.yaml +11 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-count.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-field.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-fileref.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-json.md +13 -0
- package/scripts/__fixtures__/sweep-forms/agents/forms-section.md +13 -0
- package/scripts/__fixtures__/sweep-forms/specs/wf-forms.spec.json +5 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_count.md +5 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_field.md +3 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_fileref.md +3 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_json.md +0 -0
- package/scripts/__fixtures__/sweep-forms/templates/t_section.md +3 -0
- package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.smoke.json +13 -0
- package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.yaml +67 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-1-noop-state-json.fixture.md +18 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-2-crash-buildworkflowyaml.fixture.md +26 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-3-nasce-verde-skip-modes.fixture.md +29 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-4-guarda-sem-irmao.fixture.md +17 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5a-diff-stat-sem-guarda.fixture.md +17 -0
- package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5b-test-f-sobre-diretorio.fixture.md +20 -0
- package/scripts/__fixtures__/veto-checks/copy-clean.md +4 -0
- package/scripts/__fixtures__/veto-checks/copy-dashes.md +4 -0
- package/scripts/__fixtures__/veto-checks/n8n-bad.md +18 -0
- package/scripts/__fixtures__/veto-checks/n8n-ok.md +22 -0
- package/scripts/__fixtures__/veto-checks/page-bad.html +7 -0
- package/scripts/__fixtures__/veto-checks/phash/copy.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/distinct.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/distinct2.png +0 -0
- package/scripts/__fixtures__/veto-checks/phash/make-fixtures.cjs +203 -0
- package/scripts/__fixtures__/veto-checks/phash/ref.png +0 -0
- package/scripts/__fixtures__/veto-checks/slide-ok.html +15 -0
- package/scripts/__fixtures__/veto-checks/slide-overflow.html +14 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/agents/vc-checker.md +13 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/templates/check-tmpl.md +6 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.smoke.json +10 -0
- package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.yaml +19 -0
- package/scripts/__fixtures__/voz-do-dono/README.md +23 -0
- package/scripts/__fixtures__/voz-do-dono/dono-escalar.yaml +9 -0
- package/scripts/__fixtures__/voz-do-dono/dono-guia.yaml +10 -0
- package/scripts/__fixtures__/voz-do-dono/peca-3a-pessoa.md +6 -0
- package/scripts/__fixtures__/voz-do-dono/peca-com-lexico-proibido.md +6 -0
- package/scripts/__fixtures__/voz-do-dono/peca-limpa-1a-pessoa.md +6 -0
- package/scripts/__tests__/derive-ready-transitions.test.cjs +269 -0
- package/scripts/__tests__/enforce-cycle-authority.test.cjs +869 -0
- package/scripts/__tests__/enforce-git-push-authority.test.cjs +701 -0
- package/scripts/__tests__/enforce-ready-oracles.test.cjs +745 -0
- package/scripts/__tests__/motor-scripts.test.cjs +339 -0
- package/scripts/__tests__/pc-run-pod-counter.test.cjs +58 -0
- package/scripts/__tests__/pc-run-pod.test.cjs +578 -0
- package/scripts/__tests__/validate-pod-workflow.test.cjs +90 -0
- package/scripts/__tests__/validate-story-acs.test.cjs +607 -0
- package/scripts/anti-path.test.cjs +163 -0
- package/scripts/arena.cjs +514 -0
- package/scripts/arena.test.cjs +213 -0
- package/scripts/brief-leitura-obrigatoria.test.cjs +364 -0
- package/scripts/consolidate-knowledge-runner.test.cjs +249 -0
- package/scripts/default-funcional.test.cjs +153 -0
- package/scripts/derive-ready-transitions.cjs +325 -0
- package/scripts/forge-additive.test.cjs +158 -0
- package/scripts/forge-assess-tier.cjs +205 -0
- package/scripts/forge-assess-tier.test.cjs +114 -0
- package/scripts/forge-canonical.test.cjs +624 -0
- package/scripts/forge-generate.cjs +1303 -0
- package/scripts/forge-harden-learning.cjs +921 -0
- package/scripts/forge-harden-learning.test.cjs +242 -0
- package/scripts/forge-ingest-memory.cjs +136 -0
- package/scripts/forge-upgrade-pod.cjs +368 -0
- package/scripts/forge.test.cjs +609 -0
- package/scripts/harden-knowledge.test.cjs +612 -0
- package/scripts/harness-g5-lite.cjs +243 -0
- package/scripts/harness-g5-lite.test.cjs +134 -0
- package/scripts/hn-carousel-contrato-entrada.test.cjs +96 -0
- package/scripts/migrate-squad-orchestration.test.cjs +146 -0
- package/scripts/migration-manifest-sf3.2.test.cjs +382 -0
- package/scripts/migration-manifest-sf3.3.test.cjs +170 -0
- package/scripts/migration-manifest-sf5.5.test.cjs +189 -0
- package/scripts/migration-manifest.cjs +1146 -0
- package/scripts/migration-manifest.test.cjs +186 -0
- package/scripts/npm-scope-invocation.test.cjs +194 -0
- package/scripts/owner-layer.cjs +442 -0
- package/scripts/owner-layer.test.cjs +358 -0
- package/scripts/pc-run-pipeline.cjs +289 -0
- package/scripts/pc-run-pipeline.test.cjs +256 -0
- package/scripts/pc-run-pod-countgte.test.cjs +66 -0
- package/scripts/pc-run-pod.cjs +1355 -0
- package/scripts/phash-gate.test.cjs +433 -0
- package/scripts/pod-export-compile.cjs +487 -0
- package/scripts/pod-export-compile.test.cjs +312 -0
- package/scripts/pod-export-executor.cjs +678 -0
- package/scripts/pod-export-executor.test.cjs +1341 -0
- package/scripts/pod-export-hardening.test.cjs +531 -0
- package/scripts/pod-export-postprocess.cjs +427 -0
- package/scripts/pod-export-postprocess.test.cjs +558 -0
- package/scripts/pod-export-queue-race.test.cjs +865 -0
- package/scripts/pod-export-release.cjs +473 -0
- package/scripts/pod-export-release.test.cjs +267 -0
- package/scripts/pod-export-service.cjs +1297 -0
- package/scripts/pod-export-service.test.cjs +489 -0
- package/scripts/pod-export-tools.cjs +470 -0
- package/scripts/pod-export-ui.cjs +805 -0
- package/scripts/pod-export-ui.test.cjs +301 -0
- package/scripts/pod-memory-budget.test.cjs +309 -0
- package/scripts/pod-memory-note.cjs +357 -0
- package/scripts/pod-memory-note.test.cjs +452 -0
- package/scripts/pod-memory.cjs +1252 -0
- package/scripts/pod-memory.test.cjs +951 -0
- package/scripts/render-png.test.cjs +307 -0
- package/scripts/smoke-isolation.test.cjs +100 -0
- package/scripts/smoke-pod-workflow.cjs +755 -0
- package/scripts/smoke-sweep.test.cjs +170 -0
- package/scripts/validate-adopt.js +235 -0
- package/scripts/validate-branding.js +84 -0
- package/scripts/validate-budgets.js +140 -0
- package/scripts/validate-fidelity-output.cjs +267 -0
- package/scripts/validate-fidelity-output.test.cjs +101 -0
- package/scripts/validate-install.js +230 -0
- package/scripts/validate-no-clone.cjs +220 -0
- package/scripts/validate-no-clone.test.cjs +77 -0
- package/scripts/validate-pipeline.cjs +145 -0
- package/scripts/validate-pod-workflow.cjs +878 -0
- package/scripts/validate-source-audit.cjs +170 -0
- package/scripts/validate-source-audit.test.cjs +90 -0
- package/scripts/validate-story-acs.cjs +862 -0
- package/scripts/validate-update-scope-motor.js +421 -0
- package/scripts/veto-checks/html-valid.cjs +92 -0
- package/scripts/veto-checks/lexical-check.cjs +62 -0
- package/scripts/veto-checks/phash-gate.cjs +589 -0
- package/scripts/veto-checks/render-gate.cjs +165 -0
- package/scripts/veto-checks/render-png.cjs +358 -0
- package/scripts/veto-checks.test.cjs +219 -0
- package/scripts/watcher-audit.cjs +178 -0
- package/template/.claude/CLAUDE.md +103 -0
- package/template/.claude/agents/pc-analyst.md +100 -0
- package/template/.claude/agents/pc-architect.md +32 -0
- package/template/.claude/agents/pc-dev.md +27 -0
- package/template/.claude/agents/pc-devops.md +45 -0
- package/template/.claude/agents/pc-planner.md +32 -0
- package/template/.claude/agents/pc-po.md +25 -0
- package/template/.claude/agents/pc-qa.md +25 -0
- package/template/.claude/commands/power/academy.md +9 -0
- package/template/.claude/commands/power/automation.md +9 -0
- package/template/.claude/commands/power/content-carousel.md +267 -0
- package/template/.claude/commands/power/content.md +9 -0
- package/template/.claude/commands/power/dev.md +9 -0
- package/template/.claude/commands/power/forge.md +224 -0
- package/template/.claude/commands/power/hormozi.md +221 -0
- package/template/.claude/commands/power/modo.md +57 -0
- package/template/.claude/hooks/README.md +114 -0
- package/template/.claude/hooks/context-budget.cjs +64 -0
- package/template/.claude/hooks/enforce-cycle-authority.cjs +457 -0
- package/template/.claude/hooks/enforce-git-push-authority.cjs +925 -0
- package/template/.claude/hooks/enforce-ready-oracles.cjs +502 -0
- package/template/.claude/rules/authority.md +76 -0
- package/template/.claude/rules/curadoria-de-conhecimento.md +30 -0
- package/template/.claude/rules/model-matrix.md +34 -0
- package/template/.claude/rules/orchestration.md +133 -0
- package/template/.claude/settings.json +50 -0
- package/template/.claude/skills/pc-apply-qa-fixes/SKILL.md +108 -0
- package/template/.claude/skills/pc-apply-qa-fixes/references/fix-loop.md +40 -0
- package/template/.claude/skills/pc-apply-qa-fixes/references/fix-request-template.md +70 -0
- package/template/.claude/skills/pc-arena/SKILL.md +96 -0
- package/template/.claude/skills/pc-close-story/SKILL.md +105 -0
- package/template/.claude/skills/pc-commit/SKILL.md +108 -0
- package/template/.claude/skills/pc-develop-story/SKILL.md +116 -0
- package/template/.claude/skills/pc-full-cycle/SKILL.md +150 -0
- package/template/.claude/skills/pc-pipeline/SKILL.md +63 -0
- package/template/.claude/skills/pc-pipeline/references/gate-templates.md +46 -0
- package/template/.claude/skills/pc-review-story/SKILL.md +129 -0
- package/template/.claude/skills/pc-review-story/references/false-positive-detection.md +50 -0
- package/template/.claude/skills/pc-review-story/references/nfr-assess.md +47 -0
- package/template/.claude/skills/pc-review-story/references/risk-profile.md +75 -0
- package/template/.claude/skills/pc-review-story/references/security-checklist.md +69 -0
- package/template/.claude/skills/pc-review-story/references/test-design.md +37 -0
- package/template/.claude/skills/pc-review-story/references/trace-requirements.md +46 -0
- package/template/.claude/skills/pc-run-pod/SKILL.md +123 -0
- package/template/.claude/skills/pc-validate-story/SKILL.md +114 -0
- package/template/.claude/skills/pc-wave/SKILL.md +133 -0
- package/template/.env.example +10 -0
- package/template/knowledge/analyst/brainstorming.md +40 -0
- package/template/knowledge/analyst/brief-skeleton.md +32 -0
- package/template/knowledge/analyst/competitor-skeleton.md +39 -0
- package/template/knowledge/analyst/elicitation-menu.md +49 -0
- package/template/knowledge/analyst/market-research-skeleton.md +36 -0
- package/template/knowledge/analyst/research-prompt-structure.md +48 -0
- package/template/knowledge/analyst/roi-skeleton.md +51 -0
- package/template/knowledge/voice-dna/README.md +99 -0
- package/template/knowledge/voice-dna/voice-dna.example.yaml +157 -0
- package/template/pods/README.md +64 -0
- package/template/pods/academy/README.md +37 -0
- package/template/pods/academy/agents/academy-chief.md +27 -0
- package/template/pods/academy/examples/palestra.example.md +142 -0
- package/template/pods/academy/pod-spec.json +44 -0
- package/template/pods/academy/templates/materiais-tmpl.md +17 -0
- package/template/pods/academy/templates/revisao-didatica-tmpl.md +20 -0
- package/template/pods/academy/workflows/wf-materiais-revisao.yaml +30 -0
- package/template/pods/authority-content/README.md +43 -0
- package/template/pods/authority-content/agents/content-chief.md +28 -0
- package/template/pods/authority-content/pod-spec.json +45 -0
- package/template/pods/authority-content/templates/criacao-na-voz-tmpl.md +17 -0
- package/template/pods/authority-content/templates/red-team-factual-tmpl.md +23 -0
- package/template/pods/authority-content/workflows/wf-criacao-redteam.yaml +30 -0
- package/template/pods/automation/README.md +37 -0
- package/template/pods/automation/agents/langgraph-architect.md +30 -0
- package/template/pods/automation/agents/n8n-architect.md +30 -0
- package/template/pods/automation/examples/README.md +46 -0
- package/template/pods/automation/examples/n8n-content-radar.example.json +380 -0
- package/template/pods/automation/knowledge/langgraph-patterns.md +126 -0
- package/template/pods/automation/knowledge/n8n-patterns.md +131 -0
- package/template/pods/automation/memory/README.md +16 -0
- package/template/pods/automation/memory/learnings.consolidated.md +8 -0
- package/template/pods/automation/memory/learnings.jsonl +0 -0
- package/template/pods/automation/pod-spec.json +109 -0
- package/template/pods/automation/specs/wf-langgraph-build.spec.json +107 -0
- package/template/pods/automation/squad-io.yaml +28 -0
- package/template/pods/automation/templates/lg-build-tmpl.md +17 -0
- package/template/pods/automation/templates/lg-design-tmpl.md +23 -0
- package/template/pods/automation/templates/lg-discover-tmpl.md +20 -0
- package/template/pods/automation/templates/lg-handoff-tmpl.md +20 -0
- package/template/pods/automation/templates/lg-test-tmpl.md +20 -0
- package/template/pods/automation/templates/n8n-build-tmpl.md +14 -0
- package/template/pods/automation/templates/n8n-design-tmpl.md +23 -0
- package/template/pods/automation/templates/n8n-discover-tmpl.md +20 -0
- package/template/pods/automation/templates/n8n-handoff-tmpl.md +20 -0
- package/template/pods/automation/templates/n8n-test-tmpl.md +20 -0
- package/template/pods/automation/workflows/wf-langgraph-build.smoke.json +11 -0
- package/template/pods/automation/workflows/wf-langgraph-build.yaml +64 -0
- package/template/pods/automation/workflows/wf-n8n-build.smoke.json +11 -0
- package/template/pods/automation/workflows/wf-n8n-build.yaml +65 -0
- package/template/pods/content-carousel/README.md +91 -0
- package/template/pods/content-carousel/agents/carousel-builder.md +28 -0
- package/template/pods/content-carousel/agents/carousel-visual.md +24 -0
- package/template/pods/content-carousel/agents/hn-curator.md +74 -0
- package/template/pods/content-carousel/config/heuristic-watcher-rubric.yaml +59 -0
- package/template/pods/content-carousel/knowledge/aquisicao-ancora.md +443 -0
- package/template/pods/content-carousel/knowledge/cta-brief.md +25 -0
- package/template/pods/content-carousel/knowledge/dono.example.yaml +45 -0
- package/template/pods/content-carousel/knowledge/identidade-visual-mascote.md +62 -0
- package/template/pods/content-carousel/knowledge/image-generation.md +62 -0
- package/template/pods/content-carousel/knowledge/selecao-de-ancora.md +60 -0
- package/template/pods/content-carousel/knowledge/slides-html.md +56 -0
- package/template/pods/content-carousel/memory/README.md +18 -0
- package/template/pods/content-carousel/memory/learnings.consolidated.md +6 -0
- package/template/pods/content-carousel/memory/learnings.jsonl +0 -0
- package/template/pods/content-carousel/pod-spec.json +100 -0
- package/template/pods/content-carousel/squad-io.yaml +10 -0
- package/template/pods/content-carousel/templates/assembly-tmpl.md +23 -0
- package/template/pods/content-carousel/templates/digest-tmpl.md +29 -0
- package/template/pods/content-carousel/templates/visuals-tmpl.md +20 -0
- package/template/pods/content-carousel/workflows/wf-content-carousel.smoke.json +23 -0
- package/template/pods/content-carousel/workflows/wf-content-carousel.yaml +80 -0
- package/template/pods/dev-ia/README.md +45 -0
- package/template/pods/dev-ia/agents/db-architect.md +33 -0
- package/template/pods/dev-ia/agents/ux-architect.md +29 -0
- package/template/pods/dev-ia/knowledge/db/migration-protocol.md +95 -0
- package/template/pods/dev-ia/knowledge/db/rls-patterns.md +101 -0
- package/template/pods/dev-ia/knowledge/db/schema-review-checklist.md +76 -0
- package/template/pods/dev-ia/memory/README.md +16 -0
- package/template/pods/dev-ia/memory/learnings.consolidated.md +8 -0
- package/template/pods/dev-ia/memory/learnings.jsonl +0 -0
- package/template/pods/dev-ia/pod-spec.json +34 -0
- package/template/pods/dev-ia/templates/schema-review-tmpl.md +23 -0
- package/template/pods/dev-ia/templates/ux-flow-review-tmpl.md +23 -0
- package/template/pods/dev-ia/tools/db-ops/backup-manager.sh +321 -0
- package/template/pods/dev-ia/tools/db-ops/best-practices-auditor.sh +534 -0
- package/template/pods/dev-ia/tools/db-ops/bootstrap-runner.sh +255 -0
- package/template/pods/dev-ia/tools/db-ops/data-loader.sh +616 -0
- package/template/pods/dev-ia/tools/db-ops/detect-database.sh +113 -0
- package/template/pods/dev-ia/tools/db-ops/explain-analyzer.sh +285 -0
- package/template/pods/dev-ia/tools/db-ops/health-checker.sh +323 -0
- package/template/pods/dev-ia/tools/db-ops/migration-runner.sh +308 -0
- package/template/pods/dev-ia/tools/db-ops/postgresql-schema-loader.sh +334 -0
- package/template/pods/dev-ia/tools/db-ops/query-runner.sh +171 -0
- package/template/pods/dev-ia/tools/db-ops/rls-policy-installer.sh +480 -0
- package/template/pods/dev-ia/tools/db-ops/rls-test-suite.sh +172 -0
- package/template/pods/dev-ia/tools/db-ops/schema-context-loader.sh +176 -0
- package/template/pods/hormozi-method/README.md +52 -0
- package/template/pods/hormozi-method/agents/acquisition-strategist.md +33 -0
- package/template/pods/hormozi-method/agents/conversion-copywriter.md +34 -0
- package/template/pods/hormozi-method/agents/monetization-architect.md +35 -0
- package/template/pods/hormozi-method/agents/offer-engineer.md +37 -0
- package/template/pods/hormozi-method/knowledge/core-four-leads.md +51 -0
- package/template/pods/hormozi-method/knowledge/grand-slam-offer.md +66 -0
- package/template/pods/hormozi-method/knowledge/growth-decision.md +38 -0
- package/template/pods/hormozi-method/knowledge/hooks-and-ads.md +56 -0
- package/template/pods/hormozi-method/knowledge/launch-email.md +31 -0
- package/template/pods/hormozi-method/knowledge/money-model.md +46 -0
- package/template/pods/hormozi-method/knowledge/opportunity-screening.md +44 -0
- package/template/pods/hormozi-method/knowledge/pages.md +25 -0
- package/template/pods/hormozi-method/knowledge/pos-lancamento-leads.md +56 -0
- package/template/pods/hormozi-method/knowledge/pricing.md +36 -0
- package/template/pods/hormozi-method/knowledge/retention-ltv.md +37 -0
- package/template/pods/hormozi-method/knowledge/scale-roadmap.md +35 -0
- package/template/pods/hormozi-method/knowledge/swipefiles-curados.md +44 -0
- package/template/pods/hormozi-method/knowledge/value-equation-diagnostic.md +77 -0
- package/template/pods/hormozi-method/memory/README.md +16 -0
- package/template/pods/hormozi-method/memory/learnings.consolidated.md +6 -0
- package/template/pods/hormozi-method/memory/learnings.jsonl +0 -0
- package/template/pods/hormozi-method/pod-spec.json +50 -0
- package/template/pods/hormozi-method/specs/wf-full-launch-sequence.spec.json +149 -0
- package/template/pods/hormozi-method/specs/wf-lead-magnet-pipeline.spec.json +125 -0
- package/template/pods/hormozi-method/specs/wf-money-model-design.spec.json +117 -0
- package/template/pods/hormozi-method/specs/wf-paid-ads-campaign.spec.json +132 -0
- package/template/pods/hormozi-method/specs/wf-scaling-diagnostic.spec.json +121 -0
- package/template/pods/hormozi-method/squad-io.yaml +43 -0
- package/template/pods/hormozi-method/templates/conversion-copywriter-tmpl.md +20 -0
- package/template/pods/hormozi-method/templates/launch-execucao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/launch-fechamento-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/launch-pos-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/launch-preparacao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/lm-copy-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/lm-distribuicao-tmpl.md +18 -0
- package/template/pods/hormozi-method/templates/lm-estrategia-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/mm-arquitetura-tmpl.md +18 -0
- package/template/pods/hormozi-method/templates/mm-copy-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/mm-diagnostico-tmpl.md +14 -0
- package/template/pods/hormozi-method/templates/monetization-architect-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/offer-engineer-tmpl.md +20 -0
- package/template/pods/hormozi-method/templates/paid-criativos-tmpl.md +19 -0
- package/template/pods/hormozi-method/templates/paid-fundacao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/paid-teste-escala-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/scaling-diagnostico-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/scaling-priorizacao-tmpl.md +17 -0
- package/template/pods/hormozi-method/templates/scaling-roadmap-tmpl.md +17 -0
- package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.smoke.json +12 -0
- package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.yaml +56 -0
- package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.smoke.json +11 -0
- package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.yaml +45 -0
- package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.smoke.json +9 -0
- package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.yaml +45 -0
- package/template/pods/hormozi-method/workflows/wf-money-model-design.smoke.json +11 -0
- package/template/pods/hormozi-method/workflows/wf-money-model-design.yaml +45 -0
- package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.smoke.json +9 -0
- package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.yaml +46 -0
- package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.smoke.json +11 -0
- package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.yaml +44 -0
- package/template/pods/squad-forge/README.md +53 -0
- package/template/pods/squad-forge/agents/forge-chief.md +31 -0
- package/template/pods/squad-forge/agents/mind-extractor.md +29 -0
- package/template/pods/squad-forge/agents/pod-critic.md +26 -0
- package/template/pods/squad-forge/config/heuristic-watcher-rubric.yaml +74 -0
- package/template/pods/squad-forge/knowledge/fidelity-rubric.yaml +176 -0
- package/template/pods/squad-forge/knowledge/g6-memory-check.md +17 -0
- package/template/pods/squad-forge/knowledge/memory-ingest.md +16 -0
- package/template/pods/squad-forge/knowledge/source-audit-rubric.yaml +60 -0
- package/template/pods/squad-forge/memory/README.md +16 -0
- package/template/pods/squad-forge/memory/learnings.consolidated.md +8 -0
- package/template/pods/squad-forge/memory/learnings.jsonl +0 -0
- package/template/pods/squad-forge/pod-spec.json +166 -0
- package/template/pods/squad-forge/squad-io.yaml +13 -0
- package/template/pods/squad-forge/tasks/pipeline.md +158 -0
- package/template/pods/squad-forge/templates/discovery-tmpl.md +40 -0
- package/template/pods/squad-forge/templates/generation-tmpl.md +18 -0
- package/template/pods/squad-forge/templates/red-team-tmpl.md +17 -0
- package/template/pods/squad-forge/templates/register-tmpl.md +17 -0
- package/template/pods/squad-forge/templates/workflow-tmpl.yaml +101 -0
- package/template/pods/squad-forge/workflows/wf-forge.smoke.json +12 -0
- package/template/pods/squad-forge/workflows/wf-forge.yaml +60 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ux-architect
|
|
3
|
+
description: "Arquiteto de UX/UI — fluxos de usuário, revisão UX de stories e telas, acessibilidade essencial e design system leve. Use para: desenhar fluxo e wireframe textual de feature, revisar UX de story/tela, rodar checklist de acessibilidade, decidir tokens/espaçamento/tipografia."
|
|
4
|
+
model: sonnet
|
|
5
|
+
budget_tokens: 1200
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# ux-architect
|
|
9
|
+
|
|
10
|
+
## Papel
|
|
11
|
+
|
|
12
|
+
Arquiteto de UX/UI do pod dev-ia. Guardião da experiência: mobile-first, todo estado desenhado, acessível por default. Critério de qualidade: nenhuma tela chega ao papel Dev sem os 4 estados (loading/empty/error/success) especificados e sem funcionar em 360px.
|
|
13
|
+
|
|
14
|
+
## Missões
|
|
15
|
+
|
|
16
|
+
| Missão | O que faz |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `*flow` | Fluxo de usuário e wireframe textual de uma feature: jornada passo a passo (entrada → ações → saídas), wireframe em blocos/ASCII por tela, estados de cada passo, pontos de fricção e de decisão. Entrada: story ou SPEC; saída: seção UX anexável à story, consumível pelo Dev sem ferramenta de design. |
|
|
19
|
+
| `*review` | Revisão UX de story/tela: hierarquia visual (1 ação primária por tela), estados vazios/erro/carregando especificados, mobile-first ≥ 360px, feedback visual < 200ms em toda interação (resposta otimista ou skeleton), consistência com padrões já existentes no produto. Veredito com lista acionável por severidade. |
|
|
20
|
+
| `*a11y` | Checklist de acessibilidade essencial: contraste (4.5:1 texto, 3:1 componentes/ícones), foco visível com ordem lógica, semântica (landmarks, hierarquia de headings, labels em inputs, alt em imagens), operável 100% por teclado, alvos de toque ≥ 44px, erros anunciados (`aria-live`). PASS/FAIL por item, com evidência. |
|
|
21
|
+
| `*ds` | Decisões de design system leve: tokens semânticos (nunca hex soltos no código), escala de espaçamento (base 4/8px), tipografia com escala e pesos limitados, raio/elevação e estados de componente (hover/focus/active/disabled). Saída: tabela de tokens. Estende o DS do projeto quando existir — nunca cria um paralelo. |
|
|
22
|
+
|
|
23
|
+
## Regras de ouro
|
|
24
|
+
|
|
25
|
+
- **Mobile-first sempre:** desenhe para 360px e expanda; layout que só funciona em desktop é NO-GO.
|
|
26
|
+
- **Todo estado da UI desenhado:** loading, empty, error e success especificados antes do dev — "só o caminho feliz" reprova a revisão.
|
|
27
|
+
- **Acessibilidade não é opcional:** item FAIL do `*a11y` bloqueia como bug funcional, não como melhoria futura.
|
|
28
|
+
- **Segue o design system do projeto quando existir;** sem DS, propõe o mínimo via `*ds` antes de inventar estilo tela a tela.
|
|
29
|
+
- **Não implementa nem publica:** especifica e revisa; código é do papel Dev, push é do devops.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Protocolo de Migration Segura (PostgreSQL/Supabase)
|
|
2
|
+
|
|
3
|
+
Toda mudança de schema segue este protocolo. Fases são gates: não avança sem passar na anterior.
|
|
4
|
+
|
|
5
|
+
## Fase 0 — Plano
|
|
6
|
+
|
|
7
|
+
Antes de escrever SQL, documentar:
|
|
8
|
+
|
|
9
|
+
- **Propósito** da migration e ACs que atende.
|
|
10
|
+
- **Objetos afetados** (tabelas, funções, triggers, policies, índices).
|
|
11
|
+
- **Breaking changes** e impacto na aplicação (o app precisa de deploy antes/depois?).
|
|
12
|
+
- **Plano de rollback** (obrigatório — ver Fase 6). Migration sem rollback documentado não executa.
|
|
13
|
+
- **Janela**: precisa de downtime? Se sim, quanto e quando; se não, qual padrão zero-downtime cobre.
|
|
14
|
+
- **Idempotência**: usar `IF NOT EXISTS`, `CREATE OR REPLACE`, `DROP ... IF EXISTS` — a migration deve ser segura de rodar duas vezes.
|
|
15
|
+
|
|
16
|
+
## Fase 1 — Verificação de ordem (verify-order)
|
|
17
|
+
|
|
18
|
+
DDL na ordem certa evita falha no meio da execução:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
extensions → types/enums → functions → tables (pais antes de filhos/FKs)
|
|
22
|
+
→ indexes → triggers → RLS enable → policies → grants → seeds
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Checks heurísticos: função chamada antes de criada? RLS/policy antes da tabela existir? Trigger antes da função? View sobre view na ordem errada? FK para tabela ainda não criada?
|
|
26
|
+
|
|
27
|
+
Automático: `tools/db-ops/migration-runner.sh {path} --verify-order`
|
|
28
|
+
|
|
29
|
+
## Fase 2 — Dry-run (obrigatório)
|
|
30
|
+
|
|
31
|
+
Executar a migration inteira dentro de transação revertida:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
psql "$DB_URL" -v ON_ERROR_STOP=1 <<'SQL'
|
|
35
|
+
BEGIN;
|
|
36
|
+
\i {path}
|
|
37
|
+
ROLLBACK;
|
|
38
|
+
SQL
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Valida: sintaxe, dependências, ordem de execução, violações de constraint. NÃO valida: correção dos dados, performance. Automático: `migration-runner.sh {path} --dry-run`.
|
|
42
|
+
|
|
43
|
+
## Fase 3 — Snapshot pré-migration
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
TS=$(date +%Y%m%d%H%M%S)
|
|
47
|
+
pg_dump "$DB_URL" --schema-only --clean --if-exists > "supabase/snapshots/${TS}_before.sql"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Sem snapshot recente (<24h para produção), não aplica. `tools/db-ops/backup-manager.sh` automatiza snapshot/restore.
|
|
51
|
+
|
|
52
|
+
## Fase 4 — Aplicação
|
|
53
|
+
|
|
54
|
+
1. **Advisory lock** — impede migrations concorrentes:
|
|
55
|
+
`SELECT pg_try_advisory_lock(hashtext('dbops:migrate'))` → se falso, outra migration em curso: PARAR.
|
|
56
|
+
2. Aplicar com `psql -v ON_ERROR_STOP=1 -f {path}` (transação; falha = rollback automático do PostgreSQL).
|
|
57
|
+
3. Snapshot pós-migration + diff (`before` vs `after`) para auditoria.
|
|
58
|
+
4. Liberar o lock: `SELECT pg_advisory_unlock(hashtext('dbops:migrate'))`.
|
|
59
|
+
|
|
60
|
+
Automático (lock + snapshots + diff): `migration-runner.sh {path}`.
|
|
61
|
+
|
|
62
|
+
## Fase 5 — Smoke-test e pós-checks
|
|
63
|
+
|
|
64
|
+
- Contagens de linhas batem com o esperado; integridade de FKs verificada.
|
|
65
|
+
- `*rls` audit: nenhuma tabela nova sem RLS; policies bloqueiam acesso não autorizado.
|
|
66
|
+
- `ANALYZE` nas tabelas afetadas; checar slow query log e hot paths.
|
|
67
|
+
- Aplicação funciona (queries reais, não só o schema).
|
|
68
|
+
|
|
69
|
+
## Fase 6 — Rollback (estratégias, em ordem de preferência)
|
|
70
|
+
|
|
71
|
+
1. **Roll-forward (preferida):** NOVA migration que desfaz a mudança; testar em staging; aplicar pelo mesmo protocolo.
|
|
72
|
+
2. **PITR:** restaurar para ponto anterior à migration (parar writes → restore → validar integridade → retomar). Para emergências com perda de dados.
|
|
73
|
+
3. **Manual (última opção):** backup de emergência ANTES; rodar rollback script em transação; arquivar dados antes de dropar; dropar objetos em ordem reversa; smoke-test.
|
|
74
|
+
|
|
75
|
+
Pós-rollback: app funcional, RLS ok, performance normal, `ANALYZE`, documentar incidente + causa-raiz.
|
|
76
|
+
|
|
77
|
+
## Padrões zero-downtime
|
|
78
|
+
|
|
79
|
+
| Mudança | Padrão seguro |
|
|
80
|
+
|---|---|
|
|
81
|
+
| Adicionar coluna | `ADD COLUMN ... DEFAULT ...` (seguro em PG moderno) |
|
|
82
|
+
| Remover coluna | Expand/contract: app para de usar → deploy → só então `DROP COLUMN` |
|
|
83
|
+
| Renomear coluna | Nunca `RENAME` direto: add nova → backfill → app lê ambas → app só nova → drop antiga |
|
|
84
|
+
| Criar índice | `CREATE INDEX CONCURRENTLY` (fora de transação) |
|
|
85
|
+
| Adicionar constraint | `ADD CONSTRAINT ... NOT VALID` (sem scan) → `VALIDATE CONSTRAINT` depois (cancelável) |
|
|
86
|
+
| Backfill grande | Em lotes com pausa; nunca UPDATE de tabela inteira em uma transação |
|
|
87
|
+
|
|
88
|
+
## STOPs críticos — NÃO aplicar se
|
|
89
|
+
|
|
90
|
+
- RLS ausente em tabela exposta sem justificativa documentada.
|
|
91
|
+
- Sem backup/snapshot nas últimas 24h (produção).
|
|
92
|
+
- Não testada em staging / dry-run não executado.
|
|
93
|
+
- Sem plano de rollback preparado.
|
|
94
|
+
- Mudança breaking sem plano de deploy coordenado com o app.
|
|
95
|
+
- Ninguém disponível para suportar caso algo quebre.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Padrões de RLS (Row Level Security)
|
|
2
|
+
|
|
3
|
+
Princípio: **RLS habilitada por default em toda tabela acessível por cliente.** Exceções (tabelas operacionais service-role-only) são decisão documentada. Defense in depth: RLS + constraints + defaults + triggers.
|
|
4
|
+
|
|
5
|
+
## Padrões canônicos
|
|
6
|
+
|
|
7
|
+
### Dados do próprio usuário (owner) — o padrão KISS
|
|
8
|
+
```sql
|
|
9
|
+
ALTER TABLE t ENABLE ROW LEVEL SECURITY;
|
|
10
|
+
CREATE POLICY "t_owner" ON t FOR ALL TO authenticated
|
|
11
|
+
USING ((SELECT auth.uid()) = user_id)
|
|
12
|
+
WITH CHECK ((SELECT auth.uid()) = user_id);
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Acesso por time
|
|
16
|
+
```sql
|
|
17
|
+
team_id IN (SELECT team_id FROM team_members WHERE user_id = (SELECT auth.uid()))
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Por papel (role) — sempre app_metadata, NUNCA user_metadata
|
|
21
|
+
```sql
|
|
22
|
+
(auth.jwt() -> 'app_metadata' ->> 'role') = 'admin'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Leitura pública, escrita autenticada
|
|
26
|
+
```sql
|
|
27
|
+
CREATE POLICY "public_read" ON t FOR SELECT TO anon, authenticated USING (true);
|
|
28
|
+
CREATE POLICY "auth_write" ON t FOR INSERT TO authenticated
|
|
29
|
+
WITH CHECK ((SELECT auth.uid()) = user_id);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Multi-tenant (isolamento por organização)
|
|
33
|
+
```sql
|
|
34
|
+
CREATE POLICY "org_isolation" ON t FOR ALL TO authenticated
|
|
35
|
+
USING (org_id = (auth.jwt() ->> 'org_id')::uuid)
|
|
36
|
+
WITH CHECK (org_id = (auth.jwt() ->> 'org_id')::uuid);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Temporal (conteúdo publicado)
|
|
40
|
+
```sql
|
|
41
|
+
published_at IS NOT NULL AND published_at <= now()
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Hierárquico (acesso via pai)
|
|
45
|
+
```sql
|
|
46
|
+
EXISTS (SELECT 1 FROM parent p WHERE p.id = t.parent_id AND p.user_id = (SELECT auth.uid()))
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### SECURITY DEFINER (checagens complexas, rápido)
|
|
50
|
+
```sql
|
|
51
|
+
CREATE FUNCTION user_has_access(uuid) RETURNS boolean
|
|
52
|
+
LANGUAGE sql SECURITY DEFINER STABLE AS $$ ... $$;
|
|
53
|
+
-- policy: USING (user_has_access(id))
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Armadilhas (custam caro)
|
|
57
|
+
|
|
58
|
+
- ❌ `auth.uid()` sem embrulhar em `(SELECT ...)` → reavaliado por linha, ordens de magnitude mais lento.
|
|
59
|
+
- ❌ `user_metadata` em policy → editável pelo próprio usuário = escalação de privilégio. Só `app_metadata`.
|
|
60
|
+
- ❌ Colunas de policy sem índice → full scan em toda query.
|
|
61
|
+
- ❌ Sem tratamento de NULL → quebra para anon (auth.uid() é NULL sem sessão).
|
|
62
|
+
- ❌ RLS habilitada com 0 policies → tabela inacessível para todos (parece bug de app).
|
|
63
|
+
- ❌ Service role usada no código do app para "contornar" RLS → buraco de segurança, nunca fazer.
|
|
64
|
+
|
|
65
|
+
## Cobertura de policies
|
|
66
|
+
|
|
67
|
+
- **Boa:** 1 policy `FOR ALL` (abordagem KISS) OU 4 policies granulares (SELECT/INSERT/UPDATE/DELETE).
|
|
68
|
+
- **Incompleta:** granular com 1–3 policies — operações não cobertas falham silenciosamente.
|
|
69
|
+
- Granular por operação é preferível quando leitura e escrita têm regras diferentes.
|
|
70
|
+
|
|
71
|
+
## Auditoria de cobertura
|
|
72
|
+
|
|
73
|
+
```sql
|
|
74
|
+
-- Tabelas sem RLS (risco)
|
|
75
|
+
SELECT tablename FROM pg_tables
|
|
76
|
+
WHERE schemaname='public' AND rowsecurity = false ORDER BY tablename;
|
|
77
|
+
|
|
78
|
+
-- Cobertura por tabela
|
|
79
|
+
SELECT t.tablename, COUNT(p.policyname) AS policies, ARRAY_AGG(p.cmd) AS cmds
|
|
80
|
+
FROM pg_tables t
|
|
81
|
+
LEFT JOIN pg_policies p ON p.tablename = t.tablename AND p.schemaname='public'
|
|
82
|
+
WHERE t.schemaname='public' AND t.rowsecurity
|
|
83
|
+
GROUP BY t.tablename ORDER BY policies;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Automático: `tools/db-ops/rls-test-suite.sh {table}` (matriz de permissões multi-usuário) e `tools/db-ops/rls-policy-installer.sh {table} {kiss|read-only|private|team|custom} [owner_column]`.
|
|
87
|
+
|
|
88
|
+
## Teste obrigatório: positivo E negativo
|
|
89
|
+
|
|
90
|
+
Toda policy é validada com impersonação de usuário real:
|
|
91
|
+
|
|
92
|
+
```sql
|
|
93
|
+
BEGIN;
|
|
94
|
+
SET LOCAL role authenticated;
|
|
95
|
+
SET LOCAL request.jwt.claims TO '{"sub":"<user-uuid>","role":"authenticated"}';
|
|
96
|
+
-- caso positivo: o dono vê/edita suas linhas
|
|
97
|
+
-- caso negativo: outro usuário NÃO vê/edita (0 linhas — não erro)
|
|
98
|
+
ROLLBACK;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Sem camada de Auth presente, `auth.uid()` retorna NULL — avisar explicitamente. Rodar auditoria de RLS: após toda migration, antes de todo deploy, ao criar tabela nova.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Checklist de Design e Revisão de Schema
|
|
2
|
+
|
|
3
|
+
Usado em duas direções: desenhar schema novo (`*model`) e auditar schema existente (`*audit`).
|
|
4
|
+
|
|
5
|
+
## Gate KISS — ANTES de qualquer design (obrigatório)
|
|
6
|
+
|
|
7
|
+
O objetivo é impedir over-engineering. Passos, em ordem:
|
|
8
|
+
|
|
9
|
+
0. **Contexto primeiro:** carregar o schema vivo (banco é a fonte da verdade). Nunca propor entidade sem saber o que já existe.
|
|
10
|
+
1. **Validar realidade:** o sistema funciona hoje? Se funciona (filesystem/API ok, nada quebra) → PARAR.
|
|
11
|
+
2. **Validar dor:** perguntar explicitamente ao usuário. "Não tem problema / funciona bem" → PARAR.
|
|
12
|
+
3. **Alavancar o existente:** tabelas atuais resolvem? Estender tabela > criar tabela nova.
|
|
13
|
+
4. **Incremento mínimo:** 0 mudanças > 1 campo > 1 tabela > várias tabelas.
|
|
14
|
+
5. **Trade-offs:** apresentar opções (REUSE | EXTEND | CREATE | RECONSIDER); o usuário decide.
|
|
15
|
+
|
|
16
|
+
**Red flags (qualquer um = parar e revalidar):** 3+ tabelas sem pedido explícito; 10+ campos sem dor validada; analytics/tracking presumido sem evidência; design para "necessidade futura"; não checou schema existente; <100 registros (considerar JSON/arquivo); usuário único (considerar SQLite); zero relacionamentos (reconsiderar se precisa de DB).
|
|
17
|
+
|
|
18
|
+
**Regra de ouro:** "Se funciona hoje, mudar exige justificativa extraordinária."
|
|
19
|
+
|
|
20
|
+
## Modelagem de domínio
|
|
21
|
+
|
|
22
|
+
- [ ] Requisitos de negócio entendidos; entidades núcleo identificadas
|
|
23
|
+
- [ ] Relacionamentos mapeados (1:1, 1:N, M:N — junção com PK composta ou própria)
|
|
24
|
+
- [ ] Regras de negócio documentadas (viram CHECK/trigger, não só código de app)
|
|
25
|
+
- [ ] Access patterns analisados ANTES do design (como os dados serão consultados?)
|
|
26
|
+
- [ ] Escala estimada (linhas, QPS, crescimento)
|
|
27
|
+
|
|
28
|
+
## Tabelas e tipos
|
|
29
|
+
|
|
30
|
+
- [ ] Baseline em toda tabela: `id UUID PK (gen_random_uuid())`, `created_at`, `updated_at`
|
|
31
|
+
- [ ] `TIMESTAMPTZ` (nunca TIMESTAMP) · `JSONB` (nunca JSON) · `TEXT` (não VARCHAR sem limite real) · `NUMERIC` para dinheiro (nunca FLOAT)
|
|
32
|
+
- [ ] Normalização até 3NF, desnormalização só com justificativa de performance
|
|
33
|
+
- [ ] Soft delete (`deleted_at`) quando trilha de auditoria for necessária
|
|
34
|
+
- [ ] JSONB para perfis/metadata flexíveis; colunas para o que é consultado/indexado
|
|
35
|
+
|
|
36
|
+
## Constraints (integridade no banco, não só no app)
|
|
37
|
+
|
|
38
|
+
- [ ] FKs SEMPRE — com `ON DELETE/ON UPDATE` apropriados (CASCADE/SET NULL conscientes)
|
|
39
|
+
- [ ] `NOT NULL` em campos obrigatórios; `DEFAULT` onde faz sentido
|
|
40
|
+
- [ ] `CHECK` para regras de negócio; `UNIQUE` para chaves naturais
|
|
41
|
+
- [ ] Nomes de constraint significativos (aparecem em erros)
|
|
42
|
+
|
|
43
|
+
## Índices
|
|
44
|
+
|
|
45
|
+
- [ ] TODA FK indexada (crítico para JOINs — não é automático!)
|
|
46
|
+
- [ ] Colunas de WHERE e ORDER BY dos hot paths
|
|
47
|
+
- [ ] Parciais para queries filtradas; GIN para JSONB/arrays/full-text
|
|
48
|
+
- [ ] Colunas usadas em policies RLS indexadas
|
|
49
|
+
- [ ] Sem índices redundantes/inúteis (verificar `pg_stat_user_indexes`)
|
|
50
|
+
- [ ] Em produção: sempre `CREATE INDEX CONCURRENTLY`
|
|
51
|
+
|
|
52
|
+
## Segurança
|
|
53
|
+
|
|
54
|
+
- [ ] RLS em toda tabela exposta (ver `rls-patterns.md`); exceções documentadas
|
|
55
|
+
- [ ] `auth.uid()` embrulhado em SELECT; `app_metadata`, nunca `user_metadata`
|
|
56
|
+
- [ ] Policies testadas com impersonação (positivo E negativo)
|
|
57
|
+
- [ ] Credenciais só por env var; SSL (`sslmode=require`) e pooler em produção
|
|
58
|
+
- [ ] Dados sensíveis/PII: criptografia e conformidade (LGPD/GDPR); retenção definida
|
|
59
|
+
|
|
60
|
+
## Performance e operação
|
|
61
|
+
|
|
62
|
+
- [ ] `EXPLAIN (ANALYZE, BUFFERS)` nos hot paths; `pg_stat_statements` habilitado
|
|
63
|
+
- [ ] Timeouts: `statement_timeout≈30s`, `lock_timeout≈10s`, `idle_in_transaction_session_timeout≈60s`
|
|
64
|
+
- [ ] Pooling de conexões; particionamento se >100M linhas
|
|
65
|
+
- [ ] Autovacuum ativo; `ANALYZE` após operações em massa; bloat monitorado
|
|
66
|
+
- [ ] Backups diários automáticos + PITR; restore testado
|
|
67
|
+
|
|
68
|
+
## Documentação
|
|
69
|
+
|
|
70
|
+
- [ ] `COMMENT ON TABLE/COLUMN` para tudo que não é óbvio
|
|
71
|
+
- [ ] Policies RLS e propósito de índices documentados
|
|
72
|
+
- [ ] ERD atualizado; plano de migration documentado (ver `migration-protocol.md`)
|
|
73
|
+
|
|
74
|
+
## Scorecard de auditoria (`*audit`)
|
|
75
|
+
|
|
76
|
+
Para schema existente, gerar scorecard por seção (tabelas/constraints/índices/segurança/performance/docs) com: ✅ conforme, ⚠️ atenção, ❌ crítico. Todo ❌ vira item de ação com fix sugerido. Execução determinística: `tools/db-ops/best-practices-auditor.sh`.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Memória do pod `dev-ia` — OPERANTE (SF2.3)
|
|
2
|
+
|
|
3
|
+
> Instalada por forge-generate.cjs via o motor `scripts/pod-memory.cjs` (SF2.1).
|
|
4
|
+
> Tier: STANDARD/COMPLEX. Esta memória NÃO é scaffold morto: nasce cabeada ao lifecycle.
|
|
5
|
+
|
|
6
|
+
## Cabeamento (nenhuma ação manual necessária)
|
|
7
|
+
|
|
8
|
+
- `learnings.jsonl` — log cru append-only. O runner (`pc-run-pod`, SF2.2) faz `append()`
|
|
9
|
+
ao fim de cada etapa/run. O AGENTE NUNCA lê este arquivo (auditoria apenas).
|
|
10
|
+
- `learnings.consolidated.md` — top-N curado (`consolidate()`), no path canônico que
|
|
11
|
+
`getConsolidatedForBrief()` entrega ao brief da run. É o ÚNICO que o agente lê.
|
|
12
|
+
- Auditoria de aderência por run: `config/heuristic-watcher-rubric.yaml` +
|
|
13
|
+
`scripts/watcher-audit.cjs` (executado pelo `pod-critic`).
|
|
14
|
+
|
|
15
|
+
Assim que este pod rodar via `pc-run-pod`, injeção do consolidado no brief e append de
|
|
16
|
+
learnings funcionam sem qualquer passo manual — a operância é o cabeamento ao motor pronto.
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pod": "dev-ia",
|
|
3
|
+
"workflowId": "dev-ia",
|
|
4
|
+
"interface": true,
|
|
5
|
+
"critical": true,
|
|
6
|
+
"handoffs": 0,
|
|
7
|
+
"_adr": "ADR-004 adendo 2026-07-25 (forma STANDARD-interface, caso de fronteira SF6.2). Tier STANDARD/COMPLEX pela criticidade (db-architect: migrations/RLS), com supressão de wf-*.yaml e squad-io.yaml — zero handoff artefato-a-artefato entre os 2 especialistas. O processo do ciclo dev vive nas skills pc-* (validate-story-draft/develop-story/review-story/apply-qa-fixes/close-story/pc-commit), não neste pod. Fabricar um wf db->ux tornaria o pod um segundo orquestrador (anti-padrão 'frankenstein', ADR-001/§G4). Enforcement do crítico: QA adversarial (âncora opus) + gatilho de escalada 'migration de dados' da model-matrix + scripts determinísticos de tools/db-ops/ — tudo DENTRO do ciclo pc-*, onde o db-architect é acionado ad hoc por story.",
|
|
8
|
+
"_sources": {
|
|
9
|
+
"job_interface": "template/pods/dev-ia/README.md:5 — 'O ciclo já existe como skills; este pod é a formalização fina — o mapa de quando usar cada uma.' + README.md:13-20 (o ciclo dev é tabela de SKILLS, não de agentes do pod)",
|
|
10
|
+
"especialistas_ad_hoc": "template/pods/dev-ia/README.md:33-39 (secao 'Quando usar o quê' = condição->entrada: 'Schema, RLS, migration ou performance de banco -> db-architect'; ux-architect por 'Design de fluxo/UI') + agent-authority.md §'Papéis POWER CLAUDE' ('db-architect, ux-architect entram por gatilho registrado na story')",
|
|
11
|
+
"criticality_db": "agents/db-architect.md:19-20 (*migrate: fases verify-order->dry-run->snapshot->apply; *rls: policies RLS) — entregável crítico de persistência (ADR-004). O critical do pod é o MÁX dos 2 especialistas: db-architect critical:true domina ux-architect (critical:false).",
|
|
12
|
+
"agents_reais": "agents/db-architect.md (6 comandos: *model/*migrate/*rls/*optimize/*audit/*ops) + agents/ux-architect.md (4 missões: *flow/*review/*a11y/*ds) — 10 pontos de entrada independentes, nenhuma sequência declarada"
|
|
13
|
+
},
|
|
14
|
+
"interface_evidence": {
|
|
15
|
+
"zero_handoff_artefato": "Nenhum output de db-architect é input de ux-architect (ou vice-versa) no mesmo pedido. db-architect produz schema/DDL/migration/RLS/audit (persistência, agents/db-architect.md:18-23); ux-architect produz seção UX/veredito/a11y/tokens (interface, agents/ux-architect.md:18-21). Camadas ortogonais.",
|
|
16
|
+
"output_consumido_pelo_ciclo_nao_pelo_par": "agents/ux-architect.md:18 — *flow gera 'seção UX anexável à story, consumível pelo Dev sem ferramenta de design': o consumidor é o papel Dev do ciclo pc-*, NÃO o db-architect. Simetricamente, o schema/DDL do db-architect é consumido pela implementação (papel Dev), não pelo ux-architect.",
|
|
17
|
+
"invocacao_condicional_nao_sequencial": "README.md:33-39 é mapa condição->entrada, não pipeline. Nenhuma linha declara 'rode X depois Y' entre os 2 agentes; cada um é acionado ad hoc pela condição da story (agent-authority.md §'Papéis POWER CLAUDE').",
|
|
18
|
+
"processo_do_critico_fora_do_pod": "As etapas checkpointáveis do ciclo (validação de story, QA gate) já são as skills validate-story-draft/review-story (README.md:13-20). Formalizá-las aqui duplicaria o orquestrador (Escopo OUT da story SF6.2)."
|
|
19
|
+
},
|
|
20
|
+
"agents": [
|
|
21
|
+
{
|
|
22
|
+
"name": "db-architect",
|
|
23
|
+
"step": "schema-review",
|
|
24
|
+
"output": "schema-review",
|
|
25
|
+
"sections": ["## Contexto (schema vivo)", "## Modelagem / Mudança proposta", "## Migration (dry-run + rollback)", "## RLS e segurança", "## Índices e performance"]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "ux-architect",
|
|
29
|
+
"step": "ux-flow-review",
|
|
30
|
+
"output": "ux-flow-review",
|
|
31
|
+
"sections": ["## Contexto (story/tela)", "## Fluxo e wireframe textual", "## Estados (loading/empty/error/success)", "## Acessibilidade essencial", "## Veredito por severidade"]
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Template de saída — etapa `schema-review` (agente `db-architect`, artefato `schema-review`)
|
|
2
|
+
|
|
3
|
+
> Gerado por forge-generate.cjs (SF1.4 + ADR-005). Preencher com o artefato real da etapa.
|
|
4
|
+
> FORMA (seções `##`) verificada por checkTemplateConformance; VETO ORTOGONAL via o
|
|
5
|
+
> campo de máquina `confianca` abaixo (fora dos headings — ADR-005 Decisão A).
|
|
6
|
+
|
|
7
|
+
## Contexto (schema vivo)
|
|
8
|
+
<!-- preencher: conteúdo de "Contexto (schema vivo)" -->
|
|
9
|
+
|
|
10
|
+
## Modelagem / Mudança proposta
|
|
11
|
+
<!-- preencher: conteúdo de "Modelagem / Mudança proposta" -->
|
|
12
|
+
|
|
13
|
+
## Migration (dry-run + rollback)
|
|
14
|
+
<!-- preencher: conteúdo de "Migration (dry-run + rollback)" -->
|
|
15
|
+
|
|
16
|
+
## RLS e segurança
|
|
17
|
+
<!-- preencher: conteúdo de "RLS e segurança" -->
|
|
18
|
+
|
|
19
|
+
## Índices e performance
|
|
20
|
+
<!-- preencher: conteúdo de "Índices e performance" -->
|
|
21
|
+
|
|
22
|
+
<!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
|
|
23
|
+
confianca: <alta|media|baixa>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Template de saída — etapa `ux-flow-review` (agente `ux-architect`, artefato `ux-flow-review`)
|
|
2
|
+
|
|
3
|
+
> Gerado por forge-generate.cjs (SF1.4 + ADR-005). Preencher com o artefato real da etapa.
|
|
4
|
+
> FORMA (seções `##`) verificada por checkTemplateConformance; VETO ORTOGONAL via o
|
|
5
|
+
> campo de máquina `confianca` abaixo (fora dos headings — ADR-005 Decisão A).
|
|
6
|
+
|
|
7
|
+
## Contexto (story/tela)
|
|
8
|
+
<!-- preencher: conteúdo de "Contexto (story/tela)" -->
|
|
9
|
+
|
|
10
|
+
## Fluxo e wireframe textual
|
|
11
|
+
<!-- preencher: conteúdo de "Fluxo e wireframe textual" -->
|
|
12
|
+
|
|
13
|
+
## Estados (loading/empty/error/success)
|
|
14
|
+
<!-- preencher: conteúdo de "Estados (loading/empty/error/success)" -->
|
|
15
|
+
|
|
16
|
+
## Acessibilidade essencial
|
|
17
|
+
<!-- preencher: conteúdo de "Acessibilidade essencial" -->
|
|
18
|
+
|
|
19
|
+
## Veredito por severidade
|
|
20
|
+
<!-- preencher: conteúdo de "Veredito por severidade" -->
|
|
21
|
+
|
|
22
|
+
<!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
|
|
23
|
+
confianca: <alta|media|baixa>
|