@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,62 @@
|
|
|
1
|
+
# Geração de imagem via OpenRouter — capa e CTA
|
|
2
|
+
|
|
3
|
+
Procedimento do comando `*visuals {news-digest} {ref-pinterest} [{modelo}]` do `carousel-visual`.
|
|
4
|
+
|
|
5
|
+
## Restrição inegociável de direito autoral
|
|
6
|
+
|
|
7
|
+
A imagem do Pinterest fornecida pelo usuário é **referência de ESTILO e COMPOSIÇÃO — nunca base copiada**:
|
|
8
|
+
|
|
9
|
+
- **PROIBIDO** enviar a imagem de referência ao modelo (img2img, init image, edição sobre ela, "faça igual a esta").
|
|
10
|
+
- **PROIBIDO** prompt que descreva o CONTEÚDO específico da referência a ponto de reproduzi-la (mesma cena, mesmos objetos, mesmo enquadramento com o mesmo assunto).
|
|
11
|
+
- **PERMITIDO** extrair e usar atributos abstratos: paleta de cores, iluminação, técnica/acabamento (ex.: flat, 3D, colagem, grão de filme), densidade visual, tipo de composição (ex.: sujeito central, regra dos terços, negative space no topo), mood.
|
|
12
|
+
- Ao final, comparar o resultado com a referência: se um observador razoável diria "é a mesma imagem/uma derivação dela", REGENERAR com prompt ajustado. Só então declarar `referencia_copiada: nao`.
|
|
13
|
+
|
|
14
|
+
## Passo 1 — Extrair o estilo da referência (em texto)
|
|
15
|
+
|
|
16
|
+
Analisar a imagem do Pinterest e escrever 5-8 atributos de estilo/composição (paleta, luz, técnica, composição, mood, textura). Esses atributos — e SÓ eles — carregam a referência para o prompt.
|
|
17
|
+
|
|
18
|
+
## Passo 2 — Montar os prompts
|
|
19
|
+
|
|
20
|
+
- **Capa:** tema visual derivado da NOTÍCIA (metáfora visual do assunto do digest) + atributos de estilo extraídos + diretivas de uso: formato 4:5 (1080×1350), área de respiro para o título (a capa recebe texto por cima via HTML), sem texto embutido na imagem, alto contraste na zona do título.
|
|
21
|
+
- **CTA:** mesma família visual da capa (mesma paleta/técnica), mais sóbrio/escuro para sustentar frase curta em destaque, sem texto embutido.
|
|
22
|
+
|
|
23
|
+
### Andaime de prompt SCDS (absorvido do corpus — SF7.5/AC18)
|
|
24
|
+
|
|
25
|
+
Estruture cada prompt de capa/CTA nos 5 blocos, para repetibilidade entre rodadas:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
[SUBJECT]: o foco visual (a metáfora derivada da notícia)
|
|
29
|
+
[SETTING]: o ambiente/cenário
|
|
30
|
+
[STYLE]: técnica + mood + paleta (os atributos extraídos da referência entram AQUI)
|
|
31
|
+
[TECHNICAL]: aspect ratio 4:5, zona de respiro para o título, sem texto na imagem
|
|
32
|
+
[NEGATIVE]: sem cara de banco de imagem, sem clipart, sem marca d'água, sem texto
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Fonte: corpus do benchmark, `ai-content-designer/SKILL.md`, "Always structure prompts with
|
|
36
|
+
SCDS: [SUBJECT]... [SETTING]... [STYLE]... Mood... Color palette... [TECHNICAL]: Aspect ratio
|
|
37
|
+
{ratio}, 2K resolution, no text in image; [NEGATIVE]: No stock photo feel, no clipart, no
|
|
38
|
+
watermarks, no text".
|
|
39
|
+
|
|
40
|
+
## Credencial da OpenRouter — regra inegociável
|
|
41
|
+
|
|
42
|
+
**Origem única.** A `OPENROUTER_API_KEY` vem do arquivo `.env` da raiz do repositório do projeto, carregado no ambiente do processo (`set -a; source .env; set +a` em subshell) — **e de nenhuma outra origem**. Não existe origem secundária, alternativa ou de fallback.
|
|
43
|
+
|
|
44
|
+
**Não procurar em outro lugar.** Se a variável estiver ausente ou vazia no ambiente, sua tarefa **não é encontrar a chave** — é parar e reportar (abaixo). Como a única origem permitida é a nomeada acima, **qualquer outra origem é proibida, esteja ou não listada aqui**. A lista a seguir são exemplos do que essa regra já proíbe, não a fronteira dela: arquivos de perfil do shell (`~/.zshrc`, `~/.zshenv`, `~/.zprofile`, `~/.bashrc`, `~/.bash_profile`, `~/.profile`), Keychain do macOS (`security find-generic-password` e equivalentes), qualquer gerenciador de segredo ou cofre de credencial (CLI, agente ou GUI), histórico de shell, variáveis de ambiente de outros processos (inclusive do processo pai) e varredura de filesystem procurando padrão de chave.
|
|
45
|
+
|
|
46
|
+
**Nunca expor o valor.** A chave é **usada**, nunca **exibida**: não imprimir, ecoar, logar, colar em relatório, artefato, prompt log ou mensagem, nem escrever em arquivo — **nem completo, nem parcial**. Prefixo, sufixo, "últimos 4", comprimento, hash ou qualquer derivado que permita conferir o valor são igualmente proibidos. Não escrever o valor literal na linha de comando (argv é visível em `ps` e no histórico): referencie a variável já carregada no ambiente.
|
|
47
|
+
|
|
48
|
+
**Chave ausente ou vazia: reportar e parar.** Não gerar, não iterar, não improvisar. O relatório diz apenas: que `OPENROUTER_API_KEY` está ausente ou vazia, que ela deve estar no `.env` da raiz do repositório, e que o operador precisa preenchê-la e **re-despachar a mesma etapa**. Nunca o valor, nunca uma dica sobre o valor, nunca uma sugestão de onde mais procurar.
|
|
49
|
+
|
|
50
|
+
## Passo 3 — Chamar o modelo via OpenRouter
|
|
51
|
+
|
|
52
|
+
- Modelo: o fornecido pelo usuário na rodada; **default: Nano Banana 2 (Gemini 3.1 Flash Image)**.
|
|
53
|
+
- Endpoint: API da OpenRouter (`https://openrouter.ai/api/v1/chat/completions`), autenticação via `OPENROUTER_API_KEY` obtida **exclusivamente** conforme a seção "Credencial da OpenRouter" acima, pedido de saída de imagem (modality image) com o prompt do Passo 2.
|
|
54
|
+
- Salvar cada imagem retornada em `assets/` da rodada (`cover-bg.png`, `cta-bg.png`).
|
|
55
|
+
- Falha de API, chave ausente ou chave vazia: reportar e parar — nunca substituir por imagem de banco/stock, pela própria referência, por placeholder ou por qualquer arte fabricada. A forma do relatório está na seção "Credencial da OpenRouter".
|
|
56
|
+
|
|
57
|
+
## Passo 4 — Entregar o `visual-set` (templates/visuals-tmpl.md)
|
|
58
|
+
|
|
59
|
+
- `## Prompt da Capa` e `## Prompt do CTA`: prompts finais enviados + modelo usado + iterações (prompt log completo).
|
|
60
|
+
- `## Arquivos Gerados`: paths dos backgrounds salvos.
|
|
61
|
+
- `## Conformidade de Referencia`: atributos extraídos da referência + justificativa de por que o resultado NÃO é cópia/derivação (comparação explícita).
|
|
62
|
+
- Campos de máquina: `referencia_copiada: nao` (só após a comparação do Passo 1/regeneração) e `confianca: alta|media|baixa`.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Seleção e validação de âncora além do HN — destilado do corpus (SF7.5/AC18)
|
|
2
|
+
|
|
3
|
+
Complemento ao contrato de `knowledge/aquisicao-ancora.md` §0: o pipeline SEMPRE parte de uma
|
|
4
|
+
âncora fixada pelo usuário — este documento ajuda o DONO a escolher e validar essa âncora
|
|
5
|
+
quando a fonte não é o Hacker News, e ajuda o curador a qualificar o "sinal de relevância" e a
|
|
6
|
+
diferenciar os ângulos. Absorvido com adjudicação seletiva do corpus congelado do benchmark
|
|
7
|
+
4-braços (skill `ai-content-miner`): só entrou o que complementa o que o pod já tinha.
|
|
8
|
+
|
|
9
|
+
## 1. Onde procurar âncora fora do HN (taxonomia em 3 camadas)
|
|
10
|
+
|
|
11
|
+
A taxonomia é do mecanismo; **a lista de fontes é sua** — ela depende do seu tema, e a lista de
|
|
12
|
+
outra pessoa direciona mal o seu conteúdo. Monte a sua uma vez, em `knowledge/`, e reuse:
|
|
13
|
+
|
|
14
|
+
- **Camada 1 — fontes primárias** (quem PRODUZ o fato: criadores, pesquisadores, a própria
|
|
15
|
+
organização que anunciou; prioridade máxima). Como reconhecer: publica o fato em primeira
|
|
16
|
+
mão, tem o que perder se errar, e é citada pelas outras camadas.
|
|
17
|
+
- **Camada 2 — fontes secundárias** (comunidade e agregadores: fóruns técnicos, vídeo, listas
|
|
18
|
+
de lançamento). Úteis para **sinal de tração**, nunca para o fato — confirme sempre na
|
|
19
|
+
camada 1 antes de publicar.
|
|
20
|
+
- **Camada 3 — fontes especializadas** (nicho, setor ou região) — entram quando o tema pede
|
|
21
|
+
recorte que as duas primeiras não cobrem.
|
|
22
|
+
- Regra que acompanha a taxonomia: credibilidade de fonte primeiro — verificar a afirmação na
|
|
23
|
+
fonte primária antes de amplificar; citar e atribuir sempre.
|
|
24
|
+
|
|
25
|
+
Fonte: corpus do benchmark, `ai-content-miner/references/source-taxonomy.md` ("Tier 1 sources
|
|
26
|
+
are searched every run. Tier 2 when doing weekly sweeps. Tier 3 for specialized topics") e
|
|
27
|
+
`ai-content-miner/SKILL.md` ("Source credibility first — Prioritize Tier 1 sources... Verify
|
|
28
|
+
claims before amplifying. Always cite and attribute").
|
|
29
|
+
|
|
30
|
+
## 2. Sinais de tração para validar a âncora (qualquer fonte)
|
|
31
|
+
|
|
32
|
+
O HN dá score/comentários de graça; fora dele, use sinais equivalentes para o campo "sinal de
|
|
33
|
+
relevância" do digest:
|
|
34
|
+
|
|
35
|
+
- Mesmo assunto em 3+ fontes primárias em 24h.
|
|
36
|
+
- Reação de nomes grandes da área ao item.
|
|
37
|
+
- Repositório com >1K stars em 24h; >500 upvotes com discussão substantiva em fórum técnico.
|
|
38
|
+
- Cobertura por 2+ newsletters de referência na mesma semana.
|
|
39
|
+
|
|
40
|
+
Fonte: corpus do benchmark, `ai-content-miner/SKILL.md`, bloco "Virality signals (boost score
|
|
41
|
+
by +5 when detected): Same topic appears in 3+ Tier 1 sources within 24h; Big names react...;
|
|
42
|
+
GitHub repo gains >1K stars in 24h; 2+ Tier 1 newsletters cover in same week; >500 upvotes on
|
|
43
|
+
Reddit with substantive discussion".
|
|
44
|
+
|
|
45
|
+
## 3. Diferenciação dos ângulos — framework 5 Cs (com trava de uso)
|
|
46
|
+
|
|
47
|
+
Para cumprir "a visão do especialista aparece de verdade" nos ângulos 4-5 do digest
|
|
48
|
+
(por que importa / e agora), diferencie com pelo menos 2 destes, nunca os 5 na mesma peça:
|
|
49
|
+
|
|
50
|
+
| C | O que adiciona |
|
|
51
|
+
|---|---|
|
|
52
|
+
| Context | Conecta ao quadro maior ("isso importa porque, no Brasil...") |
|
|
53
|
+
| Comparison | Compara com o que existia antes ("antes: US$100/dia; agora: US$10") |
|
|
54
|
+
| Consequence | Projeta o impacto ("em 12 meses isso significa...") |
|
|
55
|
+
| Case | Traz experiência própria do dono ("testei com meu time e...") |
|
|
56
|
+
| Counsel | Dá ação prática ("se você é X, faça Y amanhã") |
|
|
57
|
+
|
|
58
|
+
Fonte: corpus do benchmark, `ai-content-miner/SKILL.md`, "Differentiation — The 5 Cs
|
|
59
|
+
Framework" + "Regra de ouro: Sempre usar pelo menos 2 Cs por peça de conteúdo. Nunca aplicar
|
|
60
|
+
todos os 5 na mesma peça — dilui o impacto e aumenta o tamanho sem ganho de engajamento".
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Slides do carrossel em HTML — especificação
|
|
2
|
+
|
|
3
|
+
Procedimento do comando `*assemble {news-digest} {visual-set}` do `carousel-builder` (parte 1: capa + slides internos; o CTA segue `knowledge/cta-brief.md`).
|
|
4
|
+
|
|
5
|
+
## Formato base (todas as 7 peças)
|
|
6
|
+
|
|
7
|
+
- Um arquivo HTML autocontido por slide: CSS inline ou em `<style>` no próprio arquivo, sem dependência de rede (fontes do sistema ou websafe).
|
|
8
|
+
- Canvas 1080×1350 px (4:5, feed do Instagram): `body`/container com dimensão fixa.
|
|
9
|
+
- HTML que parseia sem erro — validar antes de entregar (peça quebrada não entra no pacote).
|
|
10
|
+
- Nomenclatura da rodada: `01-capa.html`, `02-slide.html` … `06-slide.html`, `07-cta.html` (+ `assets/` com os backgrounds gerados).
|
|
11
|
+
- **LUGAR — invariante do pod, não preferência de estilo (`ADR-028 DF-SF12.2-1`).** As 7 peças são
|
|
12
|
+
escritas na **RAIZ do `runDir`**, lado a lado com `artifacts/`, `assets/` e `png/` — **nunca** dentro
|
|
13
|
+
de um subdiretório (`pieces/`, `html/`, `slides/` e afins). Não é convenção estética: o veto
|
|
14
|
+
`command_check render-png.cjs` da etapa recebe `--html-dir ".."` como argumento **LITERAL** (a
|
|
15
|
+
`ADR-011` Decisão 2 proíbe interpolação em `command_check`, por modelo de ameaça), então ele procura
|
|
16
|
+
as peças **exatamente ali**. Peça escrita em outro lugar ⇒ o veto conta 0 de 7 esperadas e a etapa
|
|
17
|
+
**BLOQUEIA**, com a causa nomeada. Vale IGUAL nos dois runtimes que executam este pod — o CLI
|
|
18
|
+
(`pc-run-pod.cjs`) e o executor de export —, porque a invariante é do POD e viaja com ele. Layout do
|
|
19
|
+
`runDir` numa rodada fechada: `01-capa.html` … `07-cta.html`, `assets/`, `png/` (gerado pelo veto),
|
|
20
|
+
`artifacts/`.
|
|
21
|
+
|
|
22
|
+
## Capa (`01-capa.html`)
|
|
23
|
+
|
|
24
|
+
- Background: `assets/cover-bg.png` do `visual-set` (imagem GERADA — nunca a referência do Pinterest).
|
|
25
|
+
- Título da notícia reescrito como gancho (≤10 palavras), tipografia grande (≥72 px), na zona de respiro prevista no prompt da capa.
|
|
26
|
+
- Overlay/gradiente sutil se necessário para garantir contraste do título sobre a imagem.
|
|
27
|
+
|
|
28
|
+
## Slides internos (`02`–`06` — exatamente 5)
|
|
29
|
+
|
|
30
|
+
- **Um ângulo do digest por slide**, na ordem de progressão do `news-digest` (gancho → fato → como funciona → por que importa → e agora).
|
|
31
|
+
- Hierarquia por slide: título curto (≤8 palavras, ≥56 px) + corpo de 2-4 frases (≥36 px) — uma ideia por tela.
|
|
32
|
+
- Legibilidade: contraste mínimo AA (texto vs fundo), margens ≥64 px, sem parágrafo com mais de 4 linhas renderizadas.
|
|
33
|
+
- Consistência: mesma paleta derivada do visual-set nas 7 peças (capa e CTA carregam a imagem; os internos ecoam a paleta em fundo sólido/degradê discreto — texto legível vem antes de decoração).
|
|
34
|
+
- Conteúdo fiel ao digest: cada afirmação existe no `news-digest`; slide não introduz fato novo.
|
|
35
|
+
- Numeração de progresso discreta (ex.: "2/7") e handle do dono (`knowledge/dono.yaml`) em rodapé sutil.
|
|
36
|
+
- Fonte técnica de nicho (HN ou equivalente) NUNCA no corpo do slide: se a citação tiver ganho real, entra discreta no rodapé (regra de audiência — regra de ouro do `hn-curator`).
|
|
37
|
+
|
|
38
|
+
## Revisão de língua pré-fechamento (gate absorvido do corpus — SF7.5/AC18)
|
|
39
|
+
|
|
40
|
+
Antes de fechar o pacote, revisar TODO o texto renderizável com rigor: acentuação completa
|
|
41
|
+
(agudos, circunflexos, til, cedilha, crase), ortografia, pontuação e concordância — o slide
|
|
42
|
+
renderiza o texto EXATAMENTE como está no HTML, e erro de língua vira erro permanente na peça
|
|
43
|
+
publicada. Texto com erro não fecha pacote.
|
|
44
|
+
|
|
45
|
+
Fonte: corpus do benchmark, `carrossel-instagram/SKILL.md`, Fase 3 ("Todo texto DEVE passar
|
|
46
|
+
por esta revisão ANTES de renderizar PNGs. O carousel-generator renderiza o texto EXATAMENTE
|
|
47
|
+
como está no HTML — erros no input serão erros permanentes nos PNGs") e GRAMMAR GATE ("Texto
|
|
48
|
+
DEVE estar 100% correto em PT-BR antes de renderizar").
|
|
49
|
+
|
|
50
|
+
## Pacote final (`carousel-package`, templates/assembly-tmpl.md)
|
|
51
|
+
|
|
52
|
+
- `## Slides Internos`: lista dos 5 arquivos com o ângulo de cada um (≥5 itens — veto do workflow).
|
|
53
|
+
- `## Slide CTA`: conforme `knowledge/cta-brief.md`.
|
|
54
|
+
- `## Pacote Final`: os 7 paths na ordem de publicação + assets — **relativos à raiz do `runDir`**
|
|
55
|
+
(`01-capa.html`, nunca `pieces/01-capa.html`), coerentes com a invariante de lugar acima.
|
|
56
|
+
- Campo de máquina `confianca: alta|media|baixa`.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Memória do pod `content-carousel` — 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
|
+
> No template ela nasce ZERADA (regra fixa de absorção, precedente SF5.6): a experiência
|
|
6
|
+
> é por-instância e não é distribuída.
|
|
7
|
+
|
|
8
|
+
## Cabeamento (nenhuma ação manual necessária)
|
|
9
|
+
|
|
10
|
+
- `learnings.jsonl` — log cru append-only. O runner (`pc-run-pod`, SF2.2) faz `append()`
|
|
11
|
+
ao fim de cada etapa/run. O AGENTE NUNCA lê este arquivo (auditoria apenas).
|
|
12
|
+
- `learnings.consolidated.md` — top-N curado (`consolidate()`), no path canônico que
|
|
13
|
+
`getConsolidatedForBrief()` entrega ao brief da run. É o ÚNICO que o agente lê.
|
|
14
|
+
- Auditoria de aderência por run: `config/heuristic-watcher-rubric.yaml` +
|
|
15
|
+
`scripts/watcher-audit.cjs` (executado pelo `pod-critic`).
|
|
16
|
+
|
|
17
|
+
Assim que este pod rodar via `pc-run-pod`, injeção do consolidado no brief e append de
|
|
18
|
+
learnings funcionam sem qualquer passo manual — a operância é o cabeamento ao motor pronto.
|
|
File without changes
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pod": "content-carousel",
|
|
3
|
+
"workflowId": "content-carousel",
|
|
4
|
+
"_adr": "ADR-005 Decisão B: a ordem do DAG é DADO DECLARADO (agents[] ordenado = ordem topológica do pipeline digest → visuals → assembly), nunca readdir/alfabético. Pod gerado via forge-chief *new (pipeline squad-forge, Fases 1-5).",
|
|
5
|
+
"_sources": {
|
|
6
|
+
"estrutura": "Brief de escopo (Fase 1 Discovery): capa + 5 slides internos + CTA = 7 peças, fixo (resposta do usuário na elicitação)",
|
|
7
|
+
"modelo_imagem": "Default Nano Banana 2 (Gemini 3.1 Flash Image) via OpenRouter (resposta do usuário na elicitação); parametrizável por rodada conforme a necessidade original ('cada rodada com ... um modelo de imagem diferentes que eu forneço')",
|
|
8
|
+
"restricao_referencia": "Necessidade original: imagem do Pinterest é REFERÊNCIA DE ESTILO E COMPOSIÇÃO — a imagem gerada nunca pode ser cópia ou derivação direta (direito autoral). Machine-redutível ao campo referencia_copiada: ^nao$ (veto da etapa visuals)",
|
|
9
|
+
"fronteira_veto_checkpoint": "ADR-002: contagens/padrões → veto.assertions; julgamento de qualidade visual/copy → checkpoint.blocking na etapa final"
|
|
10
|
+
},
|
|
11
|
+
"handoffs": 2,
|
|
12
|
+
"dna": false,
|
|
13
|
+
"critical": false,
|
|
14
|
+
"agents": [
|
|
15
|
+
{
|
|
16
|
+
"name": "hn-curator",
|
|
17
|
+
"step": "digest",
|
|
18
|
+
"output": "news-digest",
|
|
19
|
+
"sections": [
|
|
20
|
+
"## Noticia",
|
|
21
|
+
"## Sintese Acessivel",
|
|
22
|
+
"## Angulos para Slides"
|
|
23
|
+
],
|
|
24
|
+
"veto": [
|
|
25
|
+
{
|
|
26
|
+
"type": "count_gte",
|
|
27
|
+
"field": "Angulos para Slides",
|
|
28
|
+
"n": 5,
|
|
29
|
+
"_sources": "Estrutura fixa: 5 slides internos exigem ≥5 ângulos de conteúdo no digest — contagem machine-redutível"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "field_matches",
|
|
33
|
+
"field": "confianca",
|
|
34
|
+
"pattern": "^(alta|media|baixa)$",
|
|
35
|
+
"_sources": "convenção de conformidade do pod (âncora squad-forge/hormozi-method); campo de máquina ortogonal fora dos headings (ADR-005 Decisão A)"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "carousel-visual",
|
|
41
|
+
"step": "visuals",
|
|
42
|
+
"output": "visual-set",
|
|
43
|
+
"sections": [
|
|
44
|
+
"## Prompt da Capa",
|
|
45
|
+
"## Prompt do CTA",
|
|
46
|
+
"## Arquivos Gerados",
|
|
47
|
+
"## Conformidade de Referencia"
|
|
48
|
+
],
|
|
49
|
+
"veto": [
|
|
50
|
+
{
|
|
51
|
+
"type": "field_matches",
|
|
52
|
+
"field": "referencia_copiada",
|
|
53
|
+
"pattern": "^nao$",
|
|
54
|
+
"_sources": "Restrição de direito autoral da necessidade original: a etapa declara explicitamente que a imagem gerada não é cópia/derivação direta da referência; valor fora do pattern bloqueia"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"type": "field_matches",
|
|
58
|
+
"field": "confianca",
|
|
59
|
+
"pattern": "^(alta|media|baixa)$",
|
|
60
|
+
"_sources": "convenção de conformidade do pod (âncora)"
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "carousel-builder",
|
|
66
|
+
"step": "assembly",
|
|
67
|
+
"output": "carousel-package",
|
|
68
|
+
"sections": [
|
|
69
|
+
"## Slides Internos",
|
|
70
|
+
"## Slide CTA",
|
|
71
|
+
"## Pacote Final"
|
|
72
|
+
],
|
|
73
|
+
"veto": [
|
|
74
|
+
{
|
|
75
|
+
"type": "count_gte",
|
|
76
|
+
"field": "Slides Internos",
|
|
77
|
+
"n": 5,
|
|
78
|
+
"_sources": "Estrutura fixa capa+5+CTA: ≥5 slides internos listados — contagem machine-redutível"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"type": "field_matches",
|
|
82
|
+
"field": "confianca",
|
|
83
|
+
"pattern": "^(alta|media|baixa)$",
|
|
84
|
+
"_sources": "convenção de conformidade do pod (âncora)"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"type": "command_check",
|
|
88
|
+
"command": "lexical-check.cjs",
|
|
89
|
+
"args": ["--max", "0", "--pattern", "[—–]"],
|
|
90
|
+
"_sources": "Guarda de voz (ADR-013 Decisão 3, 1º wiring real do lexical-check.cjs/SF7.2): veto léxico default DERIVADO de voz.lexico_proibido do guia do dono (dono.example.yaml: em-dash U+2014 e en-dash U+2013). Args LITERAIS (ADR-011 proíbe interpolação): derivação em tempo de AUTORIA — ao editar voz.lexico_proibido na instância, o agente atualiza estes args junto (golden rule do carousel-builder)"
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"checkpoint": {
|
|
94
|
+
"blocking": true,
|
|
95
|
+
"criteria": "Carrossel completo conferido: capa + 5 slides internos + CTA = 7 peças; capa e CTA com background gerado (não cópia da referência Pinterest); frase de fechamento forte e remissão à autoridade do dono (knowledge/dono.yaml) presentes; VOZ DO DONO conferida em julgamento (ADR-013): peça inteira na 1ª pessoa do dono, dono NUNCA citado em 3ª pessoa como fonte externa (defeito R2 do benchmark — citação factual de TERCEIROS continua legítima), tom conforme voz.tom do guia. JULGAMENTO HUMANO — nunca veto de máquina (fronteira ADR-002); endurecer a cláusula de 3ª pessoa a veto é opt-in via *harden-learning."
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"smoke_scenario": "workflows/wf-content-carousel.smoke.json"
|
|
100
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# squad-io.yaml — contrato de handoff do pod `content-carousel` (SF1.4).
|
|
2
|
+
# Cada handoff liga o output de uma etapa ao input da etapa a jusante.
|
|
3
|
+
pod: content-carousel
|
|
4
|
+
handoffs:
|
|
5
|
+
- from: digest
|
|
6
|
+
to: visuals
|
|
7
|
+
artifact: news-digest
|
|
8
|
+
- from: visuals
|
|
9
|
+
to: assembly
|
|
10
|
+
artifact: visual-set
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Template de saída — etapa `assembly` (agente `carousel-builder`, artefato `carousel-package`)
|
|
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
|
+
## Slides Internos
|
|
8
|
+
<!-- count_gte "Slides Internos": conte itens de lista sob este heading — bullets (`- `/`* `), linhas numeradas (`1.` `2.` ...) OU linhas de tabela (`| ... |`, o separador `|---|---|` NÃO conta). Prosa corrida NÃO conta. -->
|
|
9
|
+
<!-- preencher: conteúdo de "Slides Internos" -->
|
|
10
|
+
|
|
11
|
+
## Slide CTA
|
|
12
|
+
<!-- preencher: conteúdo de "Slide CTA" -->
|
|
13
|
+
|
|
14
|
+
## Pacote Final
|
|
15
|
+
<!-- LUGAR (ADR-028 DF-SF12.2-1): os 7 paths são RELATIVOS À RAIZ do runDir — `01-capa.html`,
|
|
16
|
+
`02-slide.html` … `07-cta.html` (+ `assets/`). NUNCA prefixados por subdiretório
|
|
17
|
+
(`pieces/01-capa.html` está ERRADO). O veto `render-png.cjs` da etapa recebe `--html-dir ".."`
|
|
18
|
+
como argumento LITERAL (ADR-011 proíbe interpolação): peça fora da raiz não é encontrada e a
|
|
19
|
+
etapa BLOQUEIA. Ver `knowledge/slides-html.md`, "Formato base". -->
|
|
20
|
+
<!-- preencher: conteúdo de "Pacote Final" -->
|
|
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,29 @@
|
|
|
1
|
+
# Template de saída — etapa `digest` (agente `hn-curator`, artefato `news-digest`)
|
|
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
|
+
## Noticia
|
|
8
|
+
<!-- preencher: conteúdo de "Noticia" -->
|
|
9
|
+
|
|
10
|
+
## Sintese Acessivel
|
|
11
|
+
<!-- preencher: conteúdo de "Sintese Acessivel" -->
|
|
12
|
+
|
|
13
|
+
## Angulos para Slides
|
|
14
|
+
<!-- count_gte "Angulos para Slides": conte itens de lista sob este heading — bullets (`- `/`* `), linhas numeradas (`1.` `2.` ...) OU linhas de tabela (`| ... |`, o separador `|---|---|` NÃO conta). Prosa corrida NÃO conta. -->
|
|
15
|
+
<!-- preencher: conteúdo de "Angulos para Slides" -->
|
|
16
|
+
|
|
17
|
+
<!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
|
|
18
|
+
confianca: <alta|media|baixa>
|
|
19
|
+
|
|
20
|
+
<!-- Campo de máquina da ENTRADA (ADR-020 DF-SF10.21-3/-11) — NÃO é heading. Par <modo>:<fonte> que
|
|
21
|
+
esta run de fato usou, espelhando o `entrada=`/`fonte=` da linha `Tarefa:` do brief. O veto
|
|
22
|
+
`field_matches` da etapa aceita SÓ as combinações implementadas: os pares estão na MATRIZ
|
|
23
|
+
`knowledge/aquisicao-ancora.md` §0.3 e o pattern literal vive só no `wf`; qualquer outro valor
|
|
24
|
+
BLOQUEIA a etapa. Nome do campo NÃO pode ser `fonte`: extractField casa a PRIMEIRA ocorrência no
|
|
25
|
+
artefato inteiro e a seção `## Noticia` já registra a fonte (domínio do artigo).
|
|
26
|
+
Em `entrada=roteiro` (ADR-026), o bloco `pc:fidelidade-roteiro` é gravado DEPOIS destes dois campos,
|
|
27
|
+
sob o heading `## Fidelidade ao Roteiro` — seção EXTRA do artefato, que este template não exige e
|
|
28
|
+
não proíbe (conformidade é superset). Ver `aquisicao-ancora.md` §1b.5. -->
|
|
29
|
+
contrato_entrada: <ancora:hn|roteiro:proprio>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Template de saída — etapa `visuals` (agente `carousel-visual`, artefato `visual-set`)
|
|
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
|
+
## Prompt da Capa
|
|
8
|
+
<!-- preencher: conteúdo de "Prompt da Capa" -->
|
|
9
|
+
|
|
10
|
+
## Prompt do CTA
|
|
11
|
+
<!-- preencher: conteúdo de "Prompt do CTA" -->
|
|
12
|
+
|
|
13
|
+
## Arquivos Gerados
|
|
14
|
+
<!-- preencher: conteúdo de "Arquivos Gerados" -->
|
|
15
|
+
|
|
16
|
+
## Conformidade de Referencia
|
|
17
|
+
<!-- preencher: conteúdo de "Conformidade de Referencia" -->
|
|
18
|
+
|
|
19
|
+
<!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
|
|
20
|
+
confianca: <alta|media|baixa>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Cenário de smoke do wf-content-carousel (autorado junto do pod-spec no *new, padrão wf-forge.smoke.json). 'artifacts' = artefato CONFORME por etapa (caminho feliz) do canário 'notícia de exemplo do HN sobre um release de modelo open-source'. O sweep --sweep DERIVA as violações (3a por etapa: 1 seção obrigatória removida; 3b por assertion: count_gte→0 itens sob o heading, field_matches→valor fora do pattern) a partir destes conformes + template + spec. target_step=visuals (legado 4-provas): template_violation remove a seção '## Conformidade de Referencia'; veto_violation mantém a forma mas declara referencia_copiada: sim (viola ^nao$). SF11.6/ADR-020: o conforme de 'digest' declara `contrato_entrada: ancora:hn` — obrigatório desde que a etapa ganhou a assertion field_matches sobre o par <modo>:<fonte>; sem esta linha o smoke cai para 0/4 (verificado POR EXECUÇÃO antes de atualizar este sidecar, guarda SF10.18). Os títulos de ângulo/slide do canário NÃO colocam a fonte técnica como protagonista (REGRA DE AUDIÊNCIA do hn-curator) — é fixture, mas fixture também ensina.",
|
|
3
|
+
"target_step": "visuals",
|
|
4
|
+
"artifacts": {
|
|
5
|
+
"digest": "## Noticia\nItem HN 40000001 (news.ycombinator.com/item?id=40000001), capturado no timestamp fornecido. Artigo: release de um modelo open-source de geracao de codigo. Score 850, 420 comentarios.\n\n## Sintese Acessivel\nUm laboratorio liberou um modelo de IA de codigo aberto que roda em hardware comum. Importa porque reduz o custo de entrada para desenvolvedores.\n\n## Angulos para Slides\n1. Rodar IA de codigo sem pagar API\n2. O que exatamente foi lancado\n3. Como funciona, explicado sem jargao\n4. O impacto pratico para quem desenvolve\n5. O que a comunidade espera acontecer agora\n\nconfianca: alta\ncontrato_entrada: ancora:hn\n",
|
|
6
|
+
"visuals": "## Prompt da Capa\nComposicao central com negative space no topo, paleta azul-eletrico sobre grafite, acabamento flat com grao sutil, 4:5 1080x1350, sem texto embutido. Modelo: Nano Banana 2 via OpenRouter. 1 iteracao.\n\n## Prompt do CTA\nMesma familia visual da capa, fundo mais sobrio e escuro para frase em destaque, sem texto embutido. Modelo: Nano Banana 2 via OpenRouter. 1 iteracao.\n\n## Arquivos Gerados\n- assets/cover-bg.png\n- assets/cta-bg.png\n\n## Conformidade de Referencia\nAtributos extraidos da referencia Pinterest (paleta, luz, composicao central, acabamento flat) usados SO como texto; a referencia nao foi enviada ao modelo; comparacao final: resultado nao e copia nem derivacao direta.\n\nreferencia_copiada: nao\nconfianca: alta\n",
|
|
7
|
+
"assembly": "## Slides Internos\n- 02-slide.html: Rodar IA de codigo sem pagar API\n- 03-slide.html: O que exatamente foi lancado\n- 04-slide.html: Como funciona, explicado sem jargao\n- 05-slide.html: O impacto pratico para quem desenvolve\n- 06-slide.html: O que a comunidade espera acontecer agora\n\n## Slide CTA\n07-cta.html: background assets/cta-bg.png, frase de fechamento 'Quem entende isso hoje sai na frente.', remissao a autoridade tecnica de Alexa Exemplo (@alexa.exemplo, dono ficticio de teste), acao: seguir.\n\n## Pacote Final\n01-capa.html, 02-06 slides internos, 07-cta.html + assets/: 7 pecas na ordem de publicacao.\n\nconfianca: alta\n"
|
|
8
|
+
},
|
|
9
|
+
"_comment_aux_files": "SF11.11/ADR-025 DF-SF11.11-6: aux_files sao arquivos NAO-artefato plantados no runDir no despacho da etapa. Os 7 HTML abaixo existem para que a prova 2 EXERCITE o command_check render-png.cjs (que verifica o PRODUTO da etapa em disco, nao o texto do artefato) em vez de ser contornada por ele. A mudanca deste sidecar E A PROVA, nao uma regressao: sem ela o smoke cai para 2/4 com bloqueio por contagem em assembly. Cenario sem aux_files = comportamento byte-identico ao anterior (chave opcional).",
|
|
10
|
+
"aux_files": {
|
|
11
|
+
"assembly": {
|
|
12
|
+
"01-capa.html": "<!doctype html>\n<html lang=\"pt-BR\">\n<head><meta charset=\"utf-8\"><title>01-capa.html</title>\n<style>html,body{width:1080px;height:1350px;margin:0;background:#101820;color:#fff;font-family:sans-serif}</style>\n</head>\n<body><main>01-capa.html</main></body>\n</html>\n",
|
|
13
|
+
"02-slide.html": "<!doctype html>\n<html lang=\"pt-BR\">\n<head><meta charset=\"utf-8\"><title>02-slide.html</title>\n<style>html,body{width:1080px;height:1350px;margin:0;background:#101820;color:#fff;font-family:sans-serif}</style>\n</head>\n<body><main>02-slide.html</main></body>\n</html>\n",
|
|
14
|
+
"03-slide.html": "<!doctype html>\n<html lang=\"pt-BR\">\n<head><meta charset=\"utf-8\"><title>03-slide.html</title>\n<style>html,body{width:1080px;height:1350px;margin:0;background:#101820;color:#fff;font-family:sans-serif}</style>\n</head>\n<body><main>03-slide.html</main></body>\n</html>\n",
|
|
15
|
+
"04-slide.html": "<!doctype html>\n<html lang=\"pt-BR\">\n<head><meta charset=\"utf-8\"><title>04-slide.html</title>\n<style>html,body{width:1080px;height:1350px;margin:0;background:#101820;color:#fff;font-family:sans-serif}</style>\n</head>\n<body><main>04-slide.html</main></body>\n</html>\n",
|
|
16
|
+
"05-slide.html": "<!doctype html>\n<html lang=\"pt-BR\">\n<head><meta charset=\"utf-8\"><title>05-slide.html</title>\n<style>html,body{width:1080px;height:1350px;margin:0;background:#101820;color:#fff;font-family:sans-serif}</style>\n</head>\n<body><main>05-slide.html</main></body>\n</html>\n",
|
|
17
|
+
"06-slide.html": "<!doctype html>\n<html lang=\"pt-BR\">\n<head><meta charset=\"utf-8\"><title>06-slide.html</title>\n<style>html,body{width:1080px;height:1350px;margin:0;background:#101820;color:#fff;font-family:sans-serif}</style>\n</head>\n<body><main>06-slide.html</main></body>\n</html>\n",
|
|
18
|
+
"07-cta.html": "<!doctype html>\n<html lang=\"pt-BR\">\n<head><meta charset=\"utf-8\"><title>07-cta.html</title>\n<style>html,body{width:1080px;height:1350px;margin:0;background:#101820;color:#fff;font-family:sans-serif}</style>\n</head>\n<body><main>07-cta.html</main></body>\n</html>\n"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"template_violation": "## Prompt da Capa\nComposicao central, paleta azul-eletrico, flat, 4:5.\n\n## Prompt do CTA\nMesma familia visual, fundo sobrio.\n\n## Arquivos Gerados\n- assets/cover-bg.png\n- assets/cta-bg.png\n\nreferencia_copiada: nao\nconfianca: alta\n",
|
|
22
|
+
"veto_violation": "## Prompt da Capa\nComposicao central, paleta azul-eletrico, flat, 4:5.\n\n## Prompt do CTA\nMesma familia visual, fundo sobrio.\n\n## Arquivos Gerados\n- assets/cover-bg.png\n- assets/cta-bg.png\n\n## Conformidade de Referencia\nComparacao feita.\n\nreferencia_copiada: sim\nconfianca: alta\n"
|
|
23
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# wf-content-carousel.yaml — gerado por forge-generate.cjs (SF1.4).
|
|
2
|
+
# Contrato: templates/workflow-tmpl.yaml. Validador: scripts/validate-pod-workflow.cjs.
|
|
3
|
+
#
|
|
4
|
+
# GUARDA (Story SF10.18): qualquer mudança em `veto.assertions` (deste arquivo OU do
|
|
5
|
+
# `command_check` que ele referencia) exige rodar, ANTES de commitar:
|
|
6
|
+
# node scripts/smoke-pod-workflow.cjs pods/content-carousel/workflows/wf-content-carousel.yaml
|
|
7
|
+
# e confirmar 4/4. Motivo (precedente real na instância que originou este pod): dois
|
|
8
|
+
# commits adicionaram vetos ao `wf` sem atualizar o sidecar `.smoke.json` ao lado,
|
|
9
|
+
# derrubando o smoke 4/4 -> 2/4 -> 1/4 sem detecção até a Story SF10.18 fechar a
|
|
10
|
+
# lacuna. Esta é disciplina DOCUMENTADA, não um guard mecânico.
|
|
11
|
+
|
|
12
|
+
state_machine:
|
|
13
|
+
states: [init, running, review, complete, failed]
|
|
14
|
+
initial: init
|
|
15
|
+
terminal: [complete, failed]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- id: digest
|
|
19
|
+
agent: hn-curator
|
|
20
|
+
template: templates/digest-tmpl.md
|
|
21
|
+
inputs: [brief]
|
|
22
|
+
outputs: [news-digest]
|
|
23
|
+
# SF10.1/D2: knowledge citado pela fase (export-readiness). ATENÇÃO (SF11.2 / ADR-021
|
|
24
|
+
# DF-SF11.2-4): este campo NÃO é mais inerte ao runtime — o motor (pc-run-pod.cjs)
|
|
25
|
+
# resolve cada entrada em path absoluto, injeta a lista na seção de LEITURA OBRIGATÓRIA
|
|
26
|
+
# do brief e BLOQUEIA o despacho se algum arquivo não existir
|
|
27
|
+
# (`leitura_obrigatoria_ausente`). Apontar para arquivo inexistente quebra a etapa.
|
|
28
|
+
knowledge: [aquisicao-ancora.md, selecao-de-ancora.md]
|
|
29
|
+
depends_on: []
|
|
30
|
+
veto:
|
|
31
|
+
assertions:
|
|
32
|
+
- { type: count_gte, field: "Angulos para Slides", n: 5, _sources: "Estrutura fixa: 5 slides internos exigem ≥5 ângulos de conteúdo no digest — contagem machine-redutível" }
|
|
33
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "convenção de conformidade do pod (âncora squad-forge/hormozi-method); campo de máquina ortogonal fora dos headings (ADR-005 Decisão A)" }
|
|
34
|
+
- { type: field_matches, field: contrato_entrada, pattern: "^(ancora:hn|roteiro:proprio)$", _sources: "ADR-020 DF-SF10.21-3/-11 + ADR-026 DF-SF11.7-3: âncora de MÁQUINA da entrada parametrizada. O par <modo>:<fonte> declarado no digest tem que ser uma COMBINAÇÃO IMPLEMENTADA — hoje `ancora:hn` (§1 do knowledge) e `roteiro:proprio` (§1b). Alargar de uma para duas alternativas é SUPERSET por construção (nenhum digest antigo passa a falhar) e o sweep do smoke continua derivável (o pattern não é universal). Sem esta assertion, 'a entrada é parâmetro' seria 100% disciplina de agente e inverificável em disco. O QUE ELA PROVA: propriedade do artefato, binária e sem limiar calibrável — declarar entrada fora do conjunto implementado BLOQUEIA a etapa. O QUE ELA NÃO PROVA: PROVENIÊNCIA (que o agente de fato buscou naquela fonte). É declaração AUTO-ATESTADA, mesma honestidade de `referencia_copiada`; o fail-closed que impede o default silencioso vive no agente e em knowledge/aquisicao-ancora.md §0.2, não aqui. NOME load-bearing: NÃO pode ser `fonte` — extractField casa a PRIMEIRA ocorrência no artefato inteiro e a seção `## Noticia` prescreve registrar 'fonte (domínio do artigo)', o que bloquearia todo digest legítimo. Pelo mesmo motivo (ADR-026 DF-SF11.7-17), o bloco `pc:fidelidade-roteiro` do modo `roteiro` é gravado DEPOIS de `confianca:` e `contrato_entrada:`: um trecho citado do roteiro do dono contendo `- confianca: ...` sequestraria o veto se viesse antes. INVARIANTE DE MANUTENÇÃO: este pattern é o espelho do conjunto de seções de aquisição implementadas em knowledge/aquisicao-ancora.md (§1 e §1b), e a MATRIZ de aplicabilidade por modo (§0.3) é o único lugar do pod que o espelha — fonte ou modo novo = 1 seção + 1 linha na matriz + 1 token aqui + sidecar + smoke 4/4. O valor LITERAL do pattern vive aqui e em nenhum outro arquivo do pod." }
|
|
35
|
+
# SF11.10/ADR-024 — GATE DE TEXTO ANTES DO CUSTO. O roteiro é conferido AQUI, antes de
|
|
36
|
+
# `visuals` gastar geração de imagem. `skip_modes: ["yolo"]`: o ritmo autônomo NÃO tem
|
|
37
|
+
# este gate (a etapa vai direto a `done` e o state grava `checkpoint: null`) — pular não
|
|
38
|
+
# é aprovar; `approve` continua PROIBIDO ao autônomo (ADR-020), e o gate de `assembly`
|
|
39
|
+
# segue sem `skip_modes`, isto é, bloqueando nos dois ritmos.
|
|
40
|
+
# POSIÇÃO LOAD-BEARING (ADR-025 DF-SF11.11-9 / OBS-4): `checkpoint` é a ÚLTIMA chave da
|
|
41
|
+
# etapa. O parser YAML-lite não suporta escalar de bloco e, se alguém trocar o `criteria`
|
|
42
|
+
# de uma linha física por `criteria: |`, ele descarta o resto EM SILÊNCIO — engolindo a
|
|
43
|
+
# chave irmã que viesse depois. Com `checkpoint` por último, só o próprio campo se perde,
|
|
44
|
+
# e o validador (`checkCheckpoint`) o nomeia. Não mova esta chave para cima.
|
|
45
|
+
checkpoint: { blocking: true, skip_modes: ["yolo"], criteria: "Roteiro conferido ANTES de qualquer imagem ser gerada. (0) QUAL É A SUA PERGUNTA - descubra ANTES de ler o resto: abra o digest e leia o campo `contrato_entrada:` (fora dos headings, no fecho do artefato; quando existe, o bloco `pc:fidelidade-roteiro` vem DEPOIS dele). Se o valor começa com `ancora:`, vale a SEÇÃO A e a SEÇÃO B NÃO se aplica. Se começa com `roteiro:`, vale a SEÇÃO B e a SEÇÃO A NÃO se aplica. Não existe run em que as duas valham; a SEÇÃO C vale nos dois. Se a seção que você leria não bate com a run que VOCÊ pediu, o conformador declarou o modo errado - isso sozinho já é `revise`. || SEÇÃO A - VOCÊ NÃO ESCREVEU ESTE TEXTO (entrada=ancora). (A1) O QUE SE CONFERE: a notícia e os fatos são rastreáveis à fonte declarada (item/URL/data em `## Noticia`, sem número inventado); a síntese explica para quem não é da área, sem jargão; e os >=5 ângulos de `## Angulos para Slides` formam um ARCO NARRATIVO (abertura que prende, desenvolvimento que ensina, fechamento que conclui) e não uma lista de tópicos soltos que repetem a mesma ideia. (A2) CLÁUSULA DA LIÇÃO (mesma régua da subseção `Consequência e conselho` de knowledge/aquisicao-ancora.md): o aprendizado de um case precisa ser um ENSINAMENTO APLICÁVEL - uma lição e um direcionamento. Análise de circunstância não é lição: fechar o raciocínio na causa do episódio explica a notícia e não entrega nada ao leitor. Se nenhum ângulo entrega algo que o leitor possa APLICAR na própria realidade, o roteiro ainda não está pronto. || SEÇÃO B - VOCÊ ESCREVEU ESTE TEXTO (entrada=roteiro). A pergunta aqui NÃO é se o roteiro está bom: você escreveu, você já sabe. A pergunta é uma só - O CONFORMADOR PRESERVOU O QUE VOCÊ ESCREVEU? Leia NESTA ordem. (B1) O bloco `pc:fidelidade-roteiro`, no fim do artefato: confira o cabeçalho de proveniência (`roteiro=` é o SEU arquivo? `sha256=`, `ts=`) e depois as linhas de mapeamento - uma por ângulo, cada uma com o trecho-fonte citado do seu texto, o ângulo produzido e a classe. (B2) PRIMEIRO as linhas de classe `REESCRITO`: são exatamente onde a redação deixou de ser a sua. Cada uma traz o motivo declarado; motivo que não convence é `revise`. `PRESERVADO` e `RECORTADO` você confere por amostragem. (B3) DEPOIS a lista do que NÃO COUBE: é a metade da fidelidade que a contagem de ângulos jamais pega - o que do seu roteiro ficou de FORA. (B4) POR FIM as `observações`: em `entrada=roteiro` o conformador é proibido de corrigir, atualizar, aprofundar, traduzir ou reordenar o seu texto por conta própria - ele OBSERVA e REGISTRA, e quem decide é você, aqui. Lista vazia é resposta legítima, e é diferente de ausente. (B5) O QUE VOCÊ NÃO PRECISA JULGAR AQUI: se o roteiro está bom, se a lição está boa, se o arco fecha - isso é a SEÇÃO A e não é a sua run. (B6) LIMITE HONESTO, dito na cara: NÃO existe veto de máquina sobre fidelidade. Nenhum script conferiu que o trecho-fonte citado existe mesmo no seu arquivo - quem confere é você, agora. Trecho que você não escreveu é citação fabricada: `revise` e diga isso com todas as letras. || SEÇÃO C - VALE NOS DOIS MODOS. (C1) FRONTEIRA HONESTA - o que este gate NÃO cobre: aqui não se aprova a COPY LITERAL de cada peça nem NADA do visual. Copy e objeto gráfico são a mesma decisão e só existem dentro do canvas; eles são julgados no checkpoint de `assembly`, que continua sendo a aprovação final do carrossel. (C2) O QUE CUSTA CORRIGIR AQUI: `revise` nesta etapa devolve SÓ o `digest` a pending e re-despacha o curador - ZERO imagem gerada, zero imagem repaga. Depois de `visuals` o mesmo defeito de roteiro só se conserta com uma run nova do zero. Diga a correção com as suas palavras: ela vira aprendizado do pod e insumo do re-despacho. (C3) JULGAMENTO HUMANO - nunca veto de máquina (fronteira ADR-002)." }
|
|
46
|
+
|
|
47
|
+
- id: visuals
|
|
48
|
+
agent: carousel-visual
|
|
49
|
+
template: templates/visuals-tmpl.md
|
|
50
|
+
inputs: [news-digest]
|
|
51
|
+
outputs: [visual-set]
|
|
52
|
+
knowledge: [image-generation.md, identidade-visual-mascote.md] # SF10.1/D2
|
|
53
|
+
depends_on: [digest]
|
|
54
|
+
checkpoint: null
|
|
55
|
+
veto:
|
|
56
|
+
assertions:
|
|
57
|
+
- { type: field_matches, field: referencia_copiada, pattern: "^nao$", _sources: "Restrição de direito autoral da necessidade original: a etapa declara explicitamente que a imagem gerada não é cópia/derivação direta da referência; valor fora do pattern bloqueia" }
|
|
58
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "convenção de conformidade do pod (âncora)" }
|
|
59
|
+
|
|
60
|
+
- id: assembly
|
|
61
|
+
agent: carousel-builder
|
|
62
|
+
template: templates/assembly-tmpl.md
|
|
63
|
+
inputs: [visual-set]
|
|
64
|
+
outputs: [carousel-package]
|
|
65
|
+
knowledge: [slides-html.md, cta-brief.md, identidade-visual-mascote.md] # SF10.1/D2
|
|
66
|
+
depends_on: [visuals]
|
|
67
|
+
# GUARDA (SF10.18): este veto tem command_check (lexical-check.cjs, render-png.cjs) — ver
|
|
68
|
+
# comentário de cabeçalho do arquivo antes de alterar qualquer assertion aqui. O sidecar
|
|
69
|
+
# `.smoke.json` declara `aux_files.assembly` com 7 HTML mínimos: eles NÃO são resíduo nem
|
|
70
|
+
# regressão — são o que faz o smoke EXERCITAR o `render-png.cjs` em vez de ficar cego a ele
|
|
71
|
+
# (SF11.11 / ADR-025 DF-SF11.11-6). Removê-los derruba a prova 2 para bloqueio por contagem.
|
|
72
|
+
veto:
|
|
73
|
+
assertions:
|
|
74
|
+
- { type: count_gte, field: "Slides Internos", n: 5, _sources: "Estrutura fixa capa+5+CTA: ≥5 slides internos listados — contagem machine-redutível" }
|
|
75
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "convenção de conformidade do pod (âncora)" }
|
|
76
|
+
- { type: command_check, command: "lexical-check.cjs", args: ["--max", "0", "--pattern", "[—–]"], _sources: "Guarda de voz (ADR-013 Decisão 3, 1º wiring real do lexical-check.cjs/SF7.2): veto léxico default DERIVADO de voz.lexico_proibido do guia do dono (dono.example.yaml: em-dash U+2014 e en-dash U+2013). Os args são LITERAIS por segurança (ADR-011 proíbe interpolação em command_check) — a derivação é em tempo de AUTORIA: ao editar voz.lexico_proibido na instância, o agente atualiza estes args junto (golden rule de elicitação do carousel-builder)" }
|
|
77
|
+
- { type: command_check, command: "render-png.cjs", args: ["--html-dir", "..", "--out-dir", "../png", "--width", "1080", "--height", "1350", "--expect", "7"], timeout_ms: 180000, _sources: "O ENTREGÁVEL NASCE ANTES DO GATE. ADR-025 (DF-SF11.11-1 a -4). O QUE ESTE command_check FAZ: renderiza em headless Chrome os 7 HTML da raiz do runDir, grava os PNG em png/, lê o IHDR de cada PNG gerado e exige 1080x1350 EXATOS (igualdade de inteiros, sem limiar - ADR-018 DF4-5), exige EXATAMENTE 7 arquivos, e faz upsert de um bloco no artefato com arquivo, dimensão e sha256. POR QUE AQUI E NÃO DEPOIS DO APPROVE: verifyStep roda em advance ANTES de isBlocking e de awaiting_approval, logo os PNG existem, medidos, no instante em que o dono é convocado - ele aprova o ARQUIVO QUE PUBLICA, não um proxy HTML. Idêntico em interactive e yolo por construção: verifyStep e evalVeto não leem o modo. Zero linha de motor (DF2-1 preservado). O QUE ELE NÃO PROVA: qualidade, encaixe copy x canvas, contraste, overflow - isso é o julgamento humano do checkpoint abaixo (fronteira ADR-002); overflow tem script próprio (render-gate.cjs), dívida 1 do DF-SF11.11-13. LIMITE MEDIDO NA IMPLEMENTAÇÃO: a dimensão do PNG vem do --window-size do Chrome, não do CSS - logo a checagem de dimensão é pós-condição SOBRE O RENDERIZADOR (pega escala dobrada, PNG truncado, binário que sai 0 escrevendo outra coisa: a classe green-fake do chromium-snap), não veto sobre o conteúdo do HTML. SEM ESCAPE HATCH, por decisão de desenho do ADR-025: Chrome ausente ou render falho BLOQUEIA a etapa e a rodada não fecha, nem entregando HTML - a alternativa reintroduziria a degradação silenciosa que a SF11.4b eliminou. Args LITERAIS (ADR-011 proíbe interpolação); o runDir sai do artifactPath pelo invariante runDir/artifacts/step.md. Requer framework com scripts/veto-checks/render-png.cjs blessed; ausente na instalação, capabilityGaps faz o start RECUSAR nomeando o script. Ver docs/mecanismos/veto-entregavel-png.md no repositório do framework." }
|
|
78
|
+
# POSIÇÃO LOAD-BEARING (ADR-025 DF-SF11.11-9 / OBS-4): `checkpoint` é a ÚLTIMA chave da
|
|
79
|
+
# etapa — ver a nota equivalente em `digest`. Não mova esta chave para cima.
|
|
80
|
+
checkpoint: { blocking: true, criteria: "APROVAÇÃO FINAL DO CARROSSEL. (0) O QUE VOCÊ ESTÁ APROVANDO: os 7 arquivos .png em `<runDir>/png/` (01-capa.png a 07-cta.png) - eles são EXATAMENTE o que vai ao Instagram. O HTML é fonte, não entregável; se você aprovar aqui, publica o que viu. Abra os 7. (1) O QUE A MÁQUINA JÁ GARANTIU, NÃO GASTE OLHO NISSO: as 7 peças existem e cada PNG mede 1080x1350 - verificado por `render-png.cjs` ANTES desta pergunta (se você chegou aqui, isso está certo; o bloco `pc:entregavel-png` no artefato lista arquivo, dimensão e sha256). (2) O QUE SÓ O OLHO HUMANO VÊ, e é por isso que este gate existe - defeitos invisíveis no HTML como texto e visíveis só no render: rótulo ou título quebrando em duas linhas; quebra DENTRO de um valor que não deveria quebrar (moeda separada do número, unidade separada da grandeza); parágrafo estourando o número de linhas que a caixa comporta; contraste do texto sobre o background gerado; encaixe copy x canvas peça a peça. Confira também: capa e CTA com background gerado (não cópia da referência); frase de fechamento forte e remissão à autoridade do dono (`knowledge/dono.yaml`) presentes; VOZ DO DONO em julgamento (ADR-013): peça inteira na 1ª pessoa do dono, dono NUNCA citado em 3ª pessoa como fonte externa (citação factual de TERCEIROS continua legítima), tom conforme `voz.tom` do guia. (3) CONFERIR TAMBÉM (ADR-020 DF-SF10.21-4): NENHUMA peça exibe sinal de relevância da plataforma de origem - pontos, upvotes, curtidas, views ou contagem de comentários; esse número é insumo de curadoria do digest e não é conteúdo de roteiro. Não há veto de máquina para essa regra (veto lexical foi avaliado e RECUSADO: é proxy sintático de regra semântica, com falso-positivo legítimo quando o TEMA da notícia é o próprio sinal) - ela é conferida AQUI, por leitura. (4) SE ESTA RODADA PARTIU DE UM ROTEIRO SEU (o `contrato_entrada` do digest começa com `roteiro:`): confira também se a copy das peças ainda SOA COMO VOCÊ ESCREVEU, ou se foi reformulada no caminho. O gate de `digest` cobriu a conformação do seu texto em ângulos; ele NÃO cobriu a passagem de ângulo para copy de slide - esta é a única parada em que isso é visível, e não há bloco de fidelidade aqui para instrumentá-la (ADR-026 DF-SF11.7-23). Em rodada `ancora:` esta cláusula é vacuamente satisfeita: o texto não é seu. JULGAMENTO HUMANO - nunca veto de máquina (fronteira ADR-002); endurecer a cláusula de 3ª pessoa a veto é opt-in via *harden-learning." }
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Pod Dev-IA — Desenvolvimento de Software com IA
|
|
2
|
+
|
|
3
|
+
## Propósito
|
|
4
|
+
|
|
5
|
+
Desenvolver software com IA em ciclo disciplinado: cada story passa por validação antes de codar, implementação rastreável e QA gate independente antes de fechar. O ciclo já existe como skills; este pod é a formalização fina — o mapa de quando usar cada uma.
|
|
6
|
+
|
|
7
|
+
## O ciclo
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
SPEC → epic → story → validação → implementação → QA gate independente → fechamento
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| Etapa | Skill | O que faz |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| Validação da story | `validate-story-draft` | Checklist de prontidão; GO/NO-GO antes de qualquer código |
|
|
16
|
+
| Implementação | `develop-story` | Implementa os ACs, atualiza checkboxes e File List |
|
|
17
|
+
| QA gate | `review-story` | Revisão independente; veredito PASS/CONCERNS/FAIL/WAIVED |
|
|
18
|
+
| Correções de QA | `apply-qa-fixes` | Aplica achados do gate e devolve para re-review — nunca se auto-aprova |
|
|
19
|
+
| Fechamento | `close-story` | Bookkeeping final de story já aprovada pelo QA |
|
|
20
|
+
| Commit local | `pc-commit` | Commit convencional local; nunca faz push |
|
|
21
|
+
|
|
22
|
+
## Princípios comprovados (ciclo de 2026-07-21)
|
|
23
|
+
|
|
24
|
+
1. **Separação implementador/aprovador.** Quem implementa não se aprova. No ciclo de validação, essa separação pegou um **"fake green" real**: relato de sucesso que os gates re-executados desmentiram.
|
|
25
|
+
2. **Verificação independente re-executa gates.** O revisor roda testes/lint/typecheck de novo em vez de confiar no relato do implementador. Confiança é output de execução, não de prosa.
|
|
26
|
+
3. **Branch guard + push com aprovação humana.** Trabalho em branch própria; push só com aprovação humana explícita — nunca automático no fim do ciclo.
|
|
27
|
+
|
|
28
|
+
## Referência de validação
|
|
29
|
+
|
|
30
|
+
- `docs/stories/1.1.story.md` — story completa do ciclo validado (chat-gateway, 2026-07-21).
|
|
31
|
+
- `docs/qa/gates/1.1-esqueleto-auth.yaml` — gate de QA correspondente, com veredito independente registrado.
|
|
32
|
+
|
|
33
|
+
## Quando usar o quê
|
|
34
|
+
|
|
35
|
+
- Story pronta para codar → `validate-story-draft` primeiro; só implementa com GO.
|
|
36
|
+
- Gate reprovou → `apply-qa-fixes` e re-review via `review-story`; nunca fechar por cansaço.
|
|
37
|
+
- Bug fix trivial → ciclo curto (implementa → gate), sem burocracia de epic.
|
|
38
|
+
- Schema, RLS, migration ou performance de banco → agente `db-architect` (abaixo).
|
|
39
|
+
| `ux-architect` | Design de fluxo/UI, revisão UX de stories (estados, mobile-first, a11y), design system leve | `*flow` `*review` `*a11y` `*ds` |
|
|
40
|
+
|
|
41
|
+
## Agentes
|
|
42
|
+
|
|
43
|
+
| Agente | Job | Conhecimento |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| `agents/db-architect.md` | Banco de dados PostgreSQL/Supabase: modelagem (`*model`), migrations seguras (`*migrate`), RLS (`*rls`), otimização (`*optimize`), auditoria (`*audit`), operações (`*ops`) | `knowledge/db/` (protocolo de migration, padrões RLS, checklist de schema) + `tools/db-ops/` (13 scripts determinísticos: migration-runner, backup-manager, health-checker, rls-test-suite etc.) |
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: db-architect
|
|
3
|
+
description: "Arquiteto de banco de dados PostgreSQL/Supabase — schema, RLS, migrations seguras e performance. Use para: modelar domínio e desenhar schema, planejar/aplicar migration com rollback, criar políticas RLS, otimizar queries e índices, auditar schema existente."
|
|
4
|
+
model: sonnet
|
|
5
|
+
budget_tokens: 1200
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# db-architect
|
|
9
|
+
|
|
10
|
+
## Papel
|
|
11
|
+
|
|
12
|
+
Arquiteto de banco de dados e engenheiro de confiabilidade PostgreSQL/Supabase. Guardião da integridade dos dados: correto antes de rápido, tudo versionado e reversível, segurança por default. Critério de qualidade: nenhuma mudança de schema chega em produção sem dry-run, snapshot e plano de rollback documentado — e nenhuma tabela nova nasce sem justificar por que as existentes não bastam.
|
|
13
|
+
|
|
14
|
+
## Comandos
|
|
15
|
+
|
|
16
|
+
| Comando | O que faz | Carrega |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| `*model` | Modelagem de domínio → schema. Começa pelo gate KISS (reusar > estender > criar; 0 mudanças > 1 campo > 1 tabela); depois entidades, relacionamentos, regras de negócio, access patterns, tipos e índices. Saída: schema documentado + DDL. | `knowledge/db/schema-review-checklist.md` |
|
|
19
|
+
| `*migrate` | Plano e execução de migration segura: fases (verify-order → dry-run → snapshot → apply com advisory lock → smoke-test), padrões zero-downtime (expand/contract, CONCURRENTLY, NOT VALID) e rollback (roll-forward preferido, PITR, manual). | `knowledge/db/migration-protocol.md` |
|
|
20
|
+
| `*rls` | Políticas RLS: escolhe padrão (owner, team, role, public-read, multi-tenant), gera policies com `auth.uid()` embrulhado em SELECT, indexa colunas de policy, testa casos positivo e negativo. | `knowledge/db/rls-patterns.md` |
|
|
21
|
+
| `*optimize` | Análise de queries e índices: hot paths via pg_stat_statements, EXPLAIN (ANALYZE, BUFFERS), recomendação de índices (FKs sempre; parciais; GIN p/ JSONB), tuning de timeouts e pooling. | `tools/db-ops/explain-analyzer.sh` |
|
|
22
|
+
| `*audit` | Auditoria de schema existente: cobertura RLS, constraints, tipos (TIMESTAMPTZ, JSONB, NUMERIC p/ dinheiro), índices ausentes/inúteis, scorecard de best practices. | `knowledge/db/schema-review-checklist.md` + `tools/db-ops/best-practices-auditor.sh` |
|
|
23
|
+
| `*ops` | Operações via scripts determinísticos em `tools/db-ops/`: migration-runner (dry-run/apply/verify-order), backup-manager (snapshot/restore), health-checker, rls-test-suite, rls-policy-installer, query-runner, data-loader, bootstrap-runner, detect-database, schema-context-loader. Ler `--help` de cada um antes de usar. | `tools/db-ops/` |
|
|
24
|
+
|
|
25
|
+
Antes de qualquer trabalho: resolver conexão via `$SUPABASE_DB_URL` ou `$DATABASE_URL` (nessa ordem) e carregar contexto do schema vivo (`tools/db-ops/schema-context-loader.sh`) — o banco é a fonte da verdade, nunca propor entidade sem saber o que já existe.
|
|
26
|
+
|
|
27
|
+
## Regras de ouro
|
|
28
|
+
|
|
29
|
+
- **Nunca CREATE/ALTER/DROP sem plano de rollback documentado** — snapshot antes, roll-forward preparado, instrução de desfazer registrada no plano.
|
|
30
|
+
- **RLS por default em toda tabela exposta a cliente.** Ausência de RLS é decisão explícita e documentada (ex.: tabela operacional service-role-only), nunca esquecimento.
|
|
31
|
+
- **Migrations idempotentes e dry-run antes de aplicar:** `IF NOT EXISTS`/`OR REPLACE`, execução em BEGIN/ROLLBACK primeiro, `ON_ERROR_STOP` sempre, advisory lock contra migrations concorrentes.
|
|
32
|
+
- **Gate KISS antes de criar tabela:** se funciona hoje, mudar exige justificativa extraordinária; 3+ tabelas ou 10+ campos sem dor validada pelo usuário = parar e revalidar.
|
|
33
|
+
- **Credenciais só por env** (`SUPABASE_DB_URL`/`DATABASE_URL`), nunca parseadas com sed/awk, nunca ecoadas; segredos sempre redigidos no output.
|