@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,20 @@
|
|
|
1
|
+
# Template de saída — etapa `lg-test` (agente `langgraph-architect`, artefato `review-lg`)
|
|
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
|
+
## Achados por Severidade
|
|
8
|
+
<!-- preencher: conteúdo de "Achados por Severidade" -->
|
|
9
|
+
|
|
10
|
+
## Rotas Nao Tratadas
|
|
11
|
+
<!-- preencher: conteúdo de "Rotas Nao Tratadas" -->
|
|
12
|
+
|
|
13
|
+
## Custo de Tokens por Caminho
|
|
14
|
+
<!-- preencher: conteúdo de "Custo de Tokens por Caminho" -->
|
|
15
|
+
|
|
16
|
+
## Acoes Irreversiveis
|
|
17
|
+
<!-- preencher: conteúdo de "Acoes Irreversiveis" -->
|
|
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,14 @@
|
|
|
1
|
+
# Template de saída — etapa `n8n-build` (agente `n8n-architect`, artefato `workflow-json`)
|
|
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
|
+
## Workflow JSON Importavel
|
|
8
|
+
<!-- preencher: conteúdo de "Workflow JSON Importavel" -->
|
|
9
|
+
|
|
10
|
+
## Validacao de Parseabilidade
|
|
11
|
+
<!-- preencher: conteúdo de "Validacao de Parseabilidade" -->
|
|
12
|
+
|
|
13
|
+
<!-- Campo de máquina do veto default (ADR-005) — NÃO é heading. Troque o placeholder por alta|media|baixa. -->
|
|
14
|
+
confianca: <alta|media|baixa>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Template de saída — etapa `n8n-design` (agente `n8n-architect`, artefato `design-n8n`)
|
|
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
|
+
## Nodes
|
|
8
|
+
<!-- preencher: conteúdo de "Nodes" -->
|
|
9
|
+
|
|
10
|
+
## Conexoes e Branch de Erro
|
|
11
|
+
<!-- preencher: conteúdo de "Conexoes e Branch de Erro" -->
|
|
12
|
+
|
|
13
|
+
## Retry e Timeout
|
|
14
|
+
<!-- preencher: conteúdo de "Retry e Timeout" -->
|
|
15
|
+
|
|
16
|
+
## Pontos de Dedupe
|
|
17
|
+
<!-- preencher: conteúdo de "Pontos de Dedupe" -->
|
|
18
|
+
|
|
19
|
+
## Tabela de Riscos
|
|
20
|
+
<!-- preencher: conteúdo de "Tabela de Riscos" -->
|
|
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,20 @@
|
|
|
1
|
+
# Template de saída — etapa `n8n-discover` (agente `n8n-architect`, artefato `process-map-n8n`)
|
|
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
|
+
## Trigger
|
|
8
|
+
<!-- preencher: conteúdo de "Trigger" -->
|
|
9
|
+
|
|
10
|
+
## Passos e Sistemas
|
|
11
|
+
<!-- preencher: conteúdo de "Passos e Sistemas" -->
|
|
12
|
+
|
|
13
|
+
## Volumes e Modos de Falha
|
|
14
|
+
<!-- preencher: conteúdo de "Volumes e Modos de Falha" -->
|
|
15
|
+
|
|
16
|
+
## Quem Opera
|
|
17
|
+
<!-- preencher: conteúdo de "Quem Opera" -->
|
|
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,20 @@
|
|
|
1
|
+
# Template de saída — etapa `n8n-handoff` (agente `n8n-architect`, artefato `runbook-n8n`)
|
|
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
|
+
## O Que Faz
|
|
8
|
+
<!-- preencher: conteúdo de "O Que Faz" -->
|
|
9
|
+
|
|
10
|
+
## Como Saber Que Quebrou
|
|
11
|
+
<!-- preencher: conteúdo de "Como Saber Que Quebrou" -->
|
|
12
|
+
|
|
13
|
+
## Como Reexecutar com Seguranca
|
|
14
|
+
<!-- preencher: conteúdo de "Como Reexecutar com Seguranca" -->
|
|
15
|
+
|
|
16
|
+
## Credenciais e Dono
|
|
17
|
+
<!-- preencher: conteúdo de "Credenciais e Dono" -->
|
|
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,20 @@
|
|
|
1
|
+
# Template de saída — etapa `n8n-test` (agente `n8n-architect`, artefato `review-n8n`)
|
|
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
|
+
## Achados por Severidade
|
|
8
|
+
<!-- preencher: conteúdo de "Achados por Severidade" -->
|
|
9
|
+
|
|
10
|
+
## Error Handling
|
|
11
|
+
<!-- preencher: conteúdo de "Error Handling" -->
|
|
12
|
+
|
|
13
|
+
## Idempotencia
|
|
14
|
+
<!-- preencher: conteúdo de "Idempotencia" -->
|
|
15
|
+
|
|
16
|
+
## Custo por Execucao
|
|
17
|
+
<!-- preencher: conteúdo de "Custo por Execucao" -->
|
|
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,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Cenário de smoke do wf-langgraph-build (SF6.3, AUTORADO junto do wf). Mesma estrutura do wf-n8n-build.smoke.json: artefato CONFORME por etapa + campo 'confianca'. O sweep --sweep deriva 3a (seção removida) e 3b (field_matches confianca; file_referenced_exists 'entregavel'). lg-handoff.entregavel aponta para 'lg-build.md' (artefato de lg-build no run dir). target_step = lg-handoff.",
|
|
3
|
+
"target_step": "lg-handoff",
|
|
4
|
+
"artifacts": {
|
|
5
|
+
"lg-discover": "## Processo e Decisao\n- Agente triagem de tickets: le o ticket, decide categoria e se escala a humano\n\n## Estado Necessario\n- ticket, categoria, iteracoes, aprovado (campos tipados)\n\n## Pontos de Supervisao Humana\n- Antes de responder ao cliente (acao irreversivel) → interrupt\n\n## Quem Opera\n- Time de suporte; dono: lider de suporte\n\nconfianca: alta\n",
|
|
6
|
+
"lg-design": "## Schema de Estado\n- TypedDict: messages (add_messages), iteracoes int, categoria str|None, aprovado bool\n\n## Nodes e Responsabilidade\n- classificar (LLM), rotear (condicional), responder (interrupt antes)\n\n## Edges Condicionais\n- rotear cobre todas as rotas: encerrar (iteracoes>=5), revisar, classificar; rota default de erro incluida\n\n## Condicao de Parada e Limite\n- iteracoes >= 5 (freio no estado) + recursion_limit 25 (airbag)\n\n## Checkpoints\n- PostgresSaver, thread_id por ticket\n\nconfianca: alta\n",
|
|
7
|
+
"lg-build": "## Codigo do Grafo\n```python\nfrom typing import Annotated, TypedDict\nfrom langgraph.graph import StateGraph, START, END\n\nclass State(TypedDict):\n messages: Annotated[list, add_messages]\n iteracoes: int\n\ndef classificar(state: State) -> dict:\n return {\"iteracoes\": state[\"iteracoes\"] + 1}\n```\n\n## Estado Tipado\n- TypedDict com reducer add_messages; nunca dict solto\n\n## Recursion Limit\nrecursion_limit: 25\n\nconfianca: alta\n",
|
|
8
|
+
"lg-test": "## Achados por Severidade\n- ALTA: nenhum ciclo sem saida garantida\n- MEDIA: revisar custo no pior caminho\n\n## Rotas Nao Tratadas\n- Nenhuma: rotear cobre todos os valores + rota default de erro\n\n## Custo de Tokens por Caminho\n- Melhor caso 1 chamada LLM; pior caso 5 (limite de iteracoes)\n\n## Acoes Irreversiveis\n- Responder ao cliente protegido por interrupt (HITL)\n\nconfianca: alta\n",
|
|
9
|
+
"lg-handoff": "## O Que Faz\n- Agente de triagem de tickets com aprovacao humana antes de responder\n\n## Como Saber Que Quebrou\n- GraphRecursionError capturado + estado parcial salvo; alerta ao dono\n\n## Como Reexecutar com Seguranca\n- Retomar pela mesma thread_id do checkpointer; codigo antes do interrupt e idempotente\n\n## Checkpointer e Dono\n- PostgresSaver (producao), retencao por thread; dono: lider de suporte\n\nentregavel: lg-build.md\nconfianca: alta\n"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# wf-langgraph-build.yaml — gerado por forge-generate.cjs (SF1.4).
|
|
2
|
+
# Contrato: templates/workflow-tmpl.yaml. Validador: scripts/validate-pod-workflow.cjs.
|
|
3
|
+
|
|
4
|
+
state_machine:
|
|
5
|
+
states: [init, running, review, complete, failed]
|
|
6
|
+
initial: init
|
|
7
|
+
terminal: [complete, failed]
|
|
8
|
+
|
|
9
|
+
steps:
|
|
10
|
+
- id: lg-discover
|
|
11
|
+
agent: langgraph-architect
|
|
12
|
+
template: templates/lg-discover-tmpl.md
|
|
13
|
+
inputs: [brief]
|
|
14
|
+
outputs: [process-map-lg]
|
|
15
|
+
depends_on: []
|
|
16
|
+
checkpoint: null
|
|
17
|
+
veto:
|
|
18
|
+
assertions:
|
|
19
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod (ADR-005 Decisão A) — campo de máquina ortogonal fora dos headings" }
|
|
20
|
+
|
|
21
|
+
- id: lg-design
|
|
22
|
+
agent: langgraph-architect
|
|
23
|
+
template: templates/lg-design-tmpl.md
|
|
24
|
+
inputs: [process-map-lg]
|
|
25
|
+
outputs: [design-lg]
|
|
26
|
+
depends_on: [lg-discover]
|
|
27
|
+
checkpoint: { blocking: true, criteria: "Desenho aprovado ANTES de gerar código (README:17): schema de estado (campos, tipos, reducers), nodes com responsabilidade única, edges condicionais com TODAS as rotas mapeadas (rota default de erro incluída), condição de parada explícita E limite de iterações, checkpoints — APROVAÇÃO HUMANA por escrito, JULGAMENTO (ADR-002), NUNCA veto." }
|
|
28
|
+
veto:
|
|
29
|
+
assertions:
|
|
30
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod (ADR-005 Decisão A)" }
|
|
31
|
+
|
|
32
|
+
- id: lg-build
|
|
33
|
+
agent: langgraph-architect
|
|
34
|
+
template: templates/lg-build-tmpl.md
|
|
35
|
+
inputs: [design-lg]
|
|
36
|
+
outputs: [graph-code]
|
|
37
|
+
depends_on: [lg-design]
|
|
38
|
+
checkpoint: null
|
|
39
|
+
veto:
|
|
40
|
+
assertions:
|
|
41
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod. Entregável = código Python tipado (README:18), NÃO JSON — json_schema_valid é inaplicável a este track (ver pod-spec._sources.json_schema_valid_avaliado_e_rejeitado); a validação (recursion_limit + estado tipado) fica no red-team lg-test." }
|
|
42
|
+
|
|
43
|
+
- id: lg-test
|
|
44
|
+
agent: langgraph-architect
|
|
45
|
+
template: templates/lg-test-tmpl.md
|
|
46
|
+
inputs: [graph-code]
|
|
47
|
+
outputs: [review-lg]
|
|
48
|
+
depends_on: [lg-build]
|
|
49
|
+
checkpoint: { blocking: true, criteria: "Regra do pod (inegociável), itens 1-2 sabor Langgraph (README:26-27): error handling EXPLÍCITO (estados de erro e retry — RetryPolicy/rota de erro no estado, checkpointer presente) E idempotência ONDE APLICÁVEL (ação irreversível protegida por interrupt ou chave de idempotência; código antes do interrupt idempotente) confirmados no red-team (*review), sem ciclo sem saída nem rota não tratada. JULGAMENTO humano, fronteira ADR-002, NUNCA veto." }
|
|
50
|
+
veto:
|
|
51
|
+
assertions:
|
|
52
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod (ADR-005 Decisão A)" }
|
|
53
|
+
|
|
54
|
+
- id: lg-handoff
|
|
55
|
+
agent: langgraph-architect
|
|
56
|
+
template: templates/lg-handoff-tmpl.md
|
|
57
|
+
inputs: [review-lg]
|
|
58
|
+
outputs: [runbook-lg]
|
|
59
|
+
depends_on: [lg-test]
|
|
60
|
+
checkpoint: { blocking: true, criteria: "Regra do pod (inegociável), item 3 (README:28): runbook OPERÁVEL — o que faz, como saber que quebrou, como reexecutar com segurança, config de checkpointer/persistência (retomada após falha) e quem é o dono. COMPLETUDE QUALITATIVA (julgamento), fronteira ADR-002, NUNCA veto — a fatia objetiva ('entregável existe') é o veto file_referenced_exists acima." }
|
|
61
|
+
veto:
|
|
62
|
+
assertions:
|
|
63
|
+
- { type: file_referenced_exists, field: entregavel, _sources: "Regra do pod item 3 (README:28), FATIA machine-checkável: o runbook referencia o entregável (campo `entregavel` = artefato de lg-build) e file_referenced_exists prova que existe em disco. Ortogonal, derivável pelo sweep (path inexistente → bloqueia)." }
|
|
64
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod" }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Cenário de smoke do wf-n8n-build (SF6.3, AUTORADO junto do wf; SF7.8 adiciona a derivação do veto de importabilidade). 'artifacts' = artefato CONFORME por etapa (caminho feliz): seções ## do template + campo de máquina 'confianca' (fora dos headings, ADR-005). O sweep --sweep DERIVA as violações por forma (3a: seção removida — a seção-âncora do extract é load-bearing e nunca é a removida; 3b: por assertion — field_matches confianca → valor fora do pattern; file_referenced_exists 'entregavel' → path inexistente; json_schema_valid+extract em n8n-build → bloco ```json da seção '## Workflow JSON Importavel' com required[0]='connections' REMOVIDO e reinserido no lugar, o defeito exato do CONCERNS-1 de SF6.3 — resto do artefato intacto, classe veto isolada). n8n-handoff.entregavel aponta para 'n8n-build.md' (o artefato de n8n-build no run dir), que existe no caminho feliz; o sweep o troca por path inexistente e o runner bloqueia. target_step = n8n-handoff (etapa com o veto de domínio file_referenced_exists).",
|
|
3
|
+
"target_step": "n8n-handoff",
|
|
4
|
+
"artifacts": {
|
|
5
|
+
"n8n-discover": "## Trigger\n- Cron diario 07:00 (n8n-nodes-base.scheduleTrigger), timezone UTC\n\n## Passos e Sistemas\n- Ler feeds RSS → filtrar por palavra-chave → dedupe → enviar e-mail + gravar em Google Sheets\n- Sistemas: RSS, SMTP, Google Sheets API v4\n\n## Volumes e Modos de Falha\n- ~50 itens/dia; feed fora do ar (5xx/timeout); item duplicado entre execucoes\n\n## Quem Opera\n- Time de marketing; dono do workflow: analista de conteudo\n\nconfianca: alta\n",
|
|
6
|
+
"n8n-design": "## Nodes\n- scheduleTrigger, httpRequest (RSS), IF (filtro), removeDuplicates, emailSend, googleSheets(appendOrUpdate)\n\n## Conexoes e Branch de Erro\n- Error workflow dedicado (errorTrigger) registrado em settings.errorWorkflow; onError continueRegularOutput no httpRequest com branch de alerta\n\n## Retry e Timeout\n- httpRequest: retryOnFail maxTries 3, waitBetweenTries 5000, options.timeout 30000\n\n## Pontos de Dedupe\n- removeDuplicates por chave externa (link do item), operacao removeItemsSeenInPreviousExecutions\n\n## Tabela de Riscos\n- Feed fora do ar → branch de erro alerta; rate limit → backoff\n\nconfianca: alta\n",
|
|
7
|
+
"n8n-build": "## Workflow JSON Importavel\n```json\n{\n \"name\": \"Radar de Conteudo IA\",\n \"nodes\": [\n { \"id\": \"a1\", \"name\": \"Cron\", \"type\": \"n8n-nodes-base.scheduleTrigger\", \"typeVersion\": 1, \"position\": [0,0], \"parameters\": {} }\n ],\n \"connections\": {},\n \"settings\": { \"executionOrder\": \"v1\", \"timezone\": \"UTC\", \"errorWorkflow\": \"err-1\" }\n}\n```\n\n## Validacao de Parseabilidade\n- JSON.parse OK; chaves nodes/connections/settings presentes (n8n-patterns.md:7)\n\nconfianca: alta\n",
|
|
8
|
+
"n8n-test": "## Achados por Severidade\n- ALTA: nenhum ponto unico de falha sem branch de erro\n- MEDIA: revisar volume de polling\n\n## Error Handling\n- Error workflow dedicado + onError com branch de alerta (nao ha falha silenciosa)\n\n## Idempotencia\n- removeDuplicates por link garante que reexecucao nao duplica e-mail nem linha na planilha\n\n## Custo por Execucao\n- ~50 chamadas HTTP/dia; dentro do orcamento\n\nconfianca: alta\n",
|
|
9
|
+
"n8n-handoff": "## O Que Faz\n- Envia briefing diario de noticias de IA por e-mail e registra no Google Sheets\n\n## Como Saber Que Quebrou\n- Alerta do error workflow no canal de operacao com nome do workflow, node que falhou e link da execucao\n\n## Como Reexecutar com Seguranca\n- Reexecutar o workflow manualmente e idempotente (dedupe por link); nenhum e-mail/linha duplicado\n\n## Credenciais e Dono\n- Credenciais: SMTP e Google Sheets via credential store; dono: analista de conteudo\n\nentregavel: n8n-build.md\nconfianca: alta\n"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# wf-n8n-build.yaml — gerado por forge-generate.cjs (SF1.4).
|
|
2
|
+
# Contrato: templates/workflow-tmpl.yaml. Validador: scripts/validate-pod-workflow.cjs.
|
|
3
|
+
|
|
4
|
+
state_machine:
|
|
5
|
+
states: [init, running, review, complete, failed]
|
|
6
|
+
initial: init
|
|
7
|
+
terminal: [complete, failed]
|
|
8
|
+
|
|
9
|
+
steps:
|
|
10
|
+
- id: n8n-discover
|
|
11
|
+
agent: n8n-architect
|
|
12
|
+
template: templates/n8n-discover-tmpl.md
|
|
13
|
+
inputs: [brief]
|
|
14
|
+
outputs: [process-map-n8n]
|
|
15
|
+
depends_on: []
|
|
16
|
+
checkpoint: null
|
|
17
|
+
veto:
|
|
18
|
+
assertions:
|
|
19
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod (ADR-005 Decisão A) — campo de máquina ortogonal fora dos headings; derivável pelo sweep (valor presente fora do pattern)" }
|
|
20
|
+
|
|
21
|
+
- id: n8n-design
|
|
22
|
+
agent: n8n-architect
|
|
23
|
+
template: templates/n8n-design-tmpl.md
|
|
24
|
+
inputs: [process-map-n8n]
|
|
25
|
+
outputs: [design-n8n]
|
|
26
|
+
depends_on: [n8n-discover]
|
|
27
|
+
checkpoint: { blocking: true, criteria: "Desenho aprovado ANTES de gerar código (README:17): lista de nodes validados contra o catálogo, branch/workflow de erro, política de retry+timeout por node externo, pontos de dedupe, tabela de riscos — APROVAÇÃO HUMANA por escrito, JULGAMENTO (fronteira ADR-002), NUNCA veto de máquina." }
|
|
28
|
+
veto:
|
|
29
|
+
assertions:
|
|
30
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod (ADR-005 Decisão A)" }
|
|
31
|
+
|
|
32
|
+
- id: n8n-build
|
|
33
|
+
agent: n8n-architect
|
|
34
|
+
template: templates/n8n-build-tmpl.md
|
|
35
|
+
inputs: [design-n8n]
|
|
36
|
+
outputs: [workflow-json]
|
|
37
|
+
depends_on: [n8n-design]
|
|
38
|
+
checkpoint: null
|
|
39
|
+
veto:
|
|
40
|
+
assertions:
|
|
41
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod (ADR-005 Decisão A) — mantida junto do veto de domínio, mesmo padrão das demais etapas." }
|
|
42
|
+
- { type: json_schema_valid, schema: { required: [connections, nodes] }, extract: { section: "## Workflow JSON Importavel", fence: json }, _sources: "SF7.8/ADR-011 Decisão 1: prova de IMPORTABILIDADE por máquina — extrai o bloco ```json da seção real do template (n8n-build-tmpl.md:7) e exige o shape mínimo do N8N (nodes/connections, n8n-patterns.md:7; BACKLOG 'shape mínimo esperado pelo N8N'). Fecha o CONCERNS-1 de SF6.3 de ponta a ponta (capacidade SF7.2 + adoção). required ordena connections primeiro: o sweep deriva a violação removendo required[0] — exatamente o defeito original do CONCERNS-1 (JSON sem connections). Linha do tempo da decisão: pod-spec._sources.json_schema_valid_linha_do_tempo." }
|
|
43
|
+
|
|
44
|
+
- id: n8n-test
|
|
45
|
+
agent: n8n-architect
|
|
46
|
+
template: templates/n8n-test-tmpl.md
|
|
47
|
+
inputs: [workflow-json]
|
|
48
|
+
outputs: [review-n8n]
|
|
49
|
+
depends_on: [n8n-build]
|
|
50
|
+
checkpoint: { blocking: true, criteria: "Regra do pod (inegociável), itens 1-2 (README:26-27): error handling EXPLÍCITO (error workflow ou onError + branch de tratamento — falha silenciosa é bug de entrega) E idempotência ONDE APLICÁVEL (dedupe por chave externa, reexecução não duplica efeito) confirmados no red-team (*review), sem achado crítico aberto. JULGAMENTO humano ('está de fato explícito?', 'onde aplicável'), fronteira ADR-002, NUNCA veto de máquina." }
|
|
51
|
+
veto:
|
|
52
|
+
assertions:
|
|
53
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod (ADR-005 Decisão A)" }
|
|
54
|
+
|
|
55
|
+
- id: n8n-handoff
|
|
56
|
+
agent: n8n-architect
|
|
57
|
+
template: templates/n8n-handoff-tmpl.md
|
|
58
|
+
inputs: [review-n8n]
|
|
59
|
+
outputs: [runbook-n8n]
|
|
60
|
+
depends_on: [n8n-test]
|
|
61
|
+
checkpoint: { blocking: true, criteria: "Regra do pod (inegociável), item 3 (README:28): runbook OPERÁVEL — o que a automação faz, como saber que quebrou (onde olhar), como reexecutar com segurança, credenciais necessárias, quem é o dono. COMPLETUDE/qualidade QUALITATIVA (julgamento humano), fronteira ADR-002, NUNCA veto — a fatia objetiva ('o entregável existe') é o veto file_referenced_exists acima." }
|
|
62
|
+
veto:
|
|
63
|
+
assertions:
|
|
64
|
+
- { type: file_referenced_exists, field: entregavel, _sources: "Regra do pod item 3 (README:28 'documentação de operação'), FATIA machine-checkável: o runbook referencia o entregável de automação (campo `entregavel`) e file_referenced_exists prova que ele EXISTE em disco (o artefato de n8n-build). Ortogonal (campo fora dos headings), derivável pelo sweep (path inexistente → bloqueia). Espelha squad-forge/pod-spec.json step register (file_referenced_exists entry_point)." }
|
|
65
|
+
- { type: field_matches, field: confianca, pattern: "^(alta|media|baixa)$", _sources: "âncora de conformidade do pod" }
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Pod content-carousel — carrossel de notícia configurável
|
|
2
|
+
|
|
3
|
+
Gera um carrossel de Instagram (capa + 5 slides + CTA = 7 peças, entregues como **PNG**
|
|
4
|
+
1080×1350) a partir de uma âncora editorial fixada pelo usuário **ou de um roteiro escrito
|
|
5
|
+
por você**, no fluxo `digest → visuals → assembly` com runner determinístico (`pc-run-pod` +
|
|
6
|
+
`workflows/wf-content-carousel.yaml`).
|
|
7
|
+
|
|
8
|
+
## Requisito de host: headless Chrome é OBRIGATÓRIO (leia antes da primeira rodada)
|
|
9
|
+
|
|
10
|
+
**Sem headless Chrome funcional, uma rodada deste pod NÃO FECHA — e não existe escape hatch.**
|
|
11
|
+
Isto é decisão de desenho (`ADR-025 DF-SF11.11-4`, confirmada sem emenda pelo `ADR-028
|
|
12
|
+
DF-SF12.2-3`), não limitação: o entregável do pod são os 7 **PNG**, o HTML é fonte. A etapa
|
|
13
|
+
`assembly` tem um veto de máquina (`command_check render-png.cjs`) que renderiza as 7 peças e
|
|
14
|
+
exige **exatamente 7 arquivos** com **1080×1350 exatos** (lido do IHDR) **antes** de você ser
|
|
15
|
+
chamado a aprovar. Entregar HTML "porque o Chrome falhou" reintroduziria a degradação
|
|
16
|
+
silenciosa que o framework eliminou — o dono aprova **o arquivo que publica**.
|
|
17
|
+
|
|
18
|
+
**Onde o Chrome precisa existir:** na máquina que roda o CLI (`pc-run-pod.cjs`) **e** no host
|
|
19
|
+
que roda um eventual **export** deste pod (o serviço provisiona Chrome desde a SF11.11 —
|
|
20
|
+
`deploy/pod-export/provision-pod-export.sh`).
|
|
21
|
+
|
|
22
|
+
**A falta nunca é silenciosa — ela aparece em 3 pontos, nesta ordem:**
|
|
23
|
+
|
|
24
|
+
| Quando | Onde | O que você vê |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Antes de despachar qualquer agente | `capabilityGaps` ⇒ o `start` **recusa** | o script blessed ausente neste motor, nomeado |
|
|
27
|
+
| Antes de o serviço de export subir | preflight do `pod-export.service` | Chrome quebrado ⇒ o serviço **recusa arrancar** |
|
|
28
|
+
| Em runtime, num host sem provisionamento | `render-png.cjs` **exit 3** | `instale google-chrome/chromium ou defina CHROME_BIN` |
|
|
29
|
+
|
|
30
|
+
**Como resolver:** instale `google-chrome` ou `chromium` no host, ou aponte `CHROME_BIN` para
|
|
31
|
+
o binário. Detalhe do mecanismo: `docs/mecanismos/veto-entregavel-png.md`, no repositório do
|
|
32
|
+
framework.
|
|
33
|
+
|
|
34
|
+
## Origem
|
|
35
|
+
|
|
36
|
+
Absorvido do benchmark 4-braços pods vs squads (2026-07, 5 rodadas de uso com avaliação cega
|
|
37
|
+
do dono) — **braço A3, vencedor operacional** (maior média, única estrutura 25/25, mais
|
|
38
|
+
barato). Generalizado na absorção (SF7.5/ADR-010): dado de dono parametrizado, fonte de
|
|
39
|
+
notícia parametrizável, memória zerada (a experiência é por-instância).
|
|
40
|
+
|
|
41
|
+
## Configuração por instância
|
|
42
|
+
|
|
43
|
+
- **Dono:** copie `knowledge/dono.example.yaml` → `knowledge/dono.yaml` e preencha (nome,
|
|
44
|
+
handle, linha de autoridade, voz, ação default do CTA). Se ausente/placeholder, o agente
|
|
45
|
+
elicita na 1ª ativação (ADR-010) — a instalação é não-interativa.
|
|
46
|
+
- **Fonte de notícia:** default = Hacker News (API pública, funcional out-of-the-box);
|
|
47
|
+
contrato para plugar outra fonte em `knowledge/aquisicao-ancora.md` §0.
|
|
48
|
+
- **Geração de imagem:** `OPENROUTER_API_KEY` no `.env` do projeto (nunca imprimir a chave).
|
|
49
|
+
|
|
50
|
+
## Conhecimento do pod
|
|
51
|
+
|
|
52
|
+
`knowledge/`: aquisicao-ancora (contrato de fonte + HN default), image-generation (visuais
|
|
53
|
+
via OpenRouter, restrição de não-cópia de referência), slides-html (spec das 7 peças),
|
|
54
|
+
cta-brief (CTA com remissão à autoridade do dono) e identidade-visual-mascote (mecanismo
|
|
55
|
+
validado em campo: doutrina → spec de personagem → character sheet + recorte → cena nas
|
|
56
|
+
peças-herói → crítica "parece feito por ilustrador contratado?").
|
|
57
|
+
|
|
58
|
+
## Limites conhecidos
|
|
59
|
+
|
|
60
|
+
Este pod tem **um** limite que nenhum script pega — quem o pega é você, num checkpoint. Ele
|
|
61
|
+
está escrito aqui porque a decisão foi **declará-lo**, não mecanizá-lo (`ADR-034`
|
|
62
|
+
`DF-REPUB-1`/`DF-REPUB-3`, no repositório do framework; o residual já era nomeado pelo
|
|
63
|
+
`ADR-020` `DF-SF10.21-3`).
|
|
64
|
+
|
|
65
|
+
**(a) `contrato_entrada` é uma DECLARAÇÃO do agente — não é prova de proveniência.** O digest
|
|
66
|
+
fecha com o campo `contrato_entrada: ancora:hn` ou `roteiro:proprio`, e o veto de máquina
|
|
67
|
+
(`workflows/wf-content-carousel.yaml:34`, assertion `field_matches`) confere **só** que o valor
|
|
68
|
+
declarado pertence ao conjunto implementado. Ele **não** confere que o agente buscou de fato
|
|
69
|
+
naquela fonte. Se você pedir um modo e o agente declarar outro — por engano, ou por pegar o
|
|
70
|
+
caminho de menor resistência, já que o brief lhe MOSTRA o pattern exigido —, **nenhum script
|
|
71
|
+
pega**: a etapa avança normalmente. Isto não é hipótese: uma run em que o pedido dizia
|
|
72
|
+
`entrada=roteiro` e o artefato declarou `ancora:hn` avançou para `visuals` em execução real
|
|
73
|
+
de QA (gate `sf10.21` do framework).
|
|
74
|
+
|
|
75
|
+
**(b) O gate que pega isso é o checkpoint humano de `digest`** — e o critério já está escrito
|
|
76
|
+
nele, item (0): *"Se a seção que você leria não bate com a run que VOCÊ pediu, o conformador
|
|
77
|
+
declarou o modo errado - isso sozinho já é `revise`."* No ritmo `interactive` esse `revise`
|
|
78
|
+
custa zero: devolve só o `digest` e re-despacha o curador, com **nenhuma imagem gerada**.
|
|
79
|
+
|
|
80
|
+
**(c) `--mode yolo` PULA esse checkpoint** (`skip_modes: ["yolo"]`). No ritmo autônomo a etapa
|
|
81
|
+
`digest` vai direto a `done`, e um modo mentido só aparece no checkpoint de `assembly` — que
|
|
82
|
+
**não** é pulável, mas só acontece **depois** de `visuals` já ter gerado, e pago, os
|
|
83
|
+
backgrounds de capa e CTA na OpenRouter: é essa geração que se descarta e se repaga na run
|
|
84
|
+
refeita, e é esse o dano máximo do limite. Os 7 PNG que `assembly` mostra **não** são geração
|
|
85
|
+
paga — são os 7 HTML renderizados localmente por `render-png.cjs` (headless Chrome), dentro da
|
|
86
|
+
própria etapa. Em nenhum dos dois ritmos o carrossel chega a publicação sem olho humano.
|
|
87
|
+
|
|
88
|
+
**O que não existe, dito na cara:** não há, hoje, verificação automática de proveniência da
|
|
89
|
+
entrada, e nenhuma está planejada. Um cross-check (`contrato_entrada` × o pedido que você
|
|
90
|
+
escreveu) foi desenhado, custeado e **recusado** por razões medidas em `ADR-034`
|
|
91
|
+
`DF-REPUB-2`, com gatilho de retorno nomeado lá.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: carousel-builder
|
|
3
|
+
description: "Monta o carrossel final: 5 slides internos em HTML explicando a notícia de forma acessível + slide CTA com background, frase forte e remissão à autoridade do dono da instância (knowledge/dono.yaml). Use para: montar os slides internos do carrossel, escrever o slide de CTA final, fechar o pacote de 7 peças de uma rodada, revisar a estrutura do carrossel."
|
|
4
|
+
model: sonnet
|
|
5
|
+
budget_tokens: 1150
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# carousel-builder — montagem do carrossel
|
|
9
|
+
|
|
10
|
+
## Papel
|
|
11
|
+
|
|
12
|
+
Você fecha a rodada: transforma o digest editorial e o visual-set no carrossel completo de 7 peças (capa + 5 slides internos + CTA). Seu critério de qualidade: HTML válido e legível no formato do Instagram, conteúdo fiel ao digest (nada além da fonte), e um CTA que fecha forte com a autoridade técnica do dono da instância.
|
|
13
|
+
|
|
14
|
+
## Comandos
|
|
15
|
+
|
|
16
|
+
- `*assemble {news-digest} {visual-set}` → `knowledge/slides-html.md` — gera a capa (HTML sobre o background gerado) e os 5 slides internos em HTML (um ângulo do digest por slide, progressão acessível), depois o slide CTA conforme `knowledge/cta-brief.md` (background do visual-set + frase forte de fechamento + remissão à autoridade do dono, conforme `knowledge/dono.yaml`). Entrega o `carousel-package` no formato `templates/assembly-tmpl.md` com os 7 arquivos listados.
|
|
17
|
+
|
|
18
|
+
## Regras de ouro
|
|
19
|
+
|
|
20
|
+
- Na 1ª ativação da instância, checar `knowledge/dono.yaml`: se ausente ou ainda com valores de placeholder (iguais a `knowledge/dono.example.yaml`), ELICITAR do usuário os dados do dono (nome, handle, linha de autoridade) E o guia de voz (ADR-013, escada: sem voz / guia de estilo / DNA do dono) no MESMO fluxo, persistindo em `knowledge/dono.yaml` — o CTA não se monta sem dono configurado. `voz` escalar antigo vale como `voz.pessoa: "primeira"` (retrocompat).
|
|
21
|
+
- GUARDA DE VOZ (ADR-013): toda peça sai na 1ª pessoa do dono — o dono NUNCA é citado em 3ª pessoa como fonte externa (defeito R2 do benchmark; citar TERCEIROS factualmente continua legítimo); respeitar `voz.lexico_proibido` (o veto léxico do workflow conta de verdade) e `voz.tom`. Ao alterar `voz.lexico_proibido` na elicitação, ATUALIZAR junto os `args` do veto `lexical-check.cjs` em `workflows/wf-content-carousel.yaml` (a derivação é em tempo de autoria — os args do veto são literais).
|
|
22
|
+
- Estrutura fixa e inegociável: capa + 5 slides internos + CTA = 7 peças — nenhuma a menos, nenhuma duplicada (veto do workflow).
|
|
23
|
+
- Conteúdo dos slides vem SÓ do `news-digest` — nunca adicionar fato que o curador não trouxe.
|
|
24
|
+
- Todo slide em HTML autocontido (CSS inline, 1080×1350) que parseia sem erro — HTML quebrado não entra no pacote.
|
|
25
|
+
- O CTA sempre tem os 3 elementos: background gerado, frase forte de fechamento, remissão à autoridade técnica do dono (nome + handle de `knowledge/dono.yaml`) — faltou um, o slide não está pronto.
|
|
26
|
+
- Um ângulo por slide, uma ideia por tela — hierarquia e legibilidade acima de densidade de informação.
|
|
27
|
+
- **LUGAR DAS PEÇAS — invariante, não estilo (`ADR-028`).** Escreva as 7 peças na **RAIZ do `runDir`** (`01-capa.html` … `07-cta.html`, ao lado de `assets/` e `artifacts/`), **nunca** em subdiretório (`pieces/`, `html/`, `slides/`). O veto `render-png.cjs` recebe `--html-dir ".."` como argumento **LITERAL** (`ADR-011` proíbe interpolação em `command_check`): peça fora da raiz não é encontrada, o veto conta 0 de 7 e a etapa **BLOQUEIA**. Vale igual no CLI e no runtime de export. Os paths do `## Pacote Final` saem relativos à raiz, pelo mesmo motivo. Detalhe em `knowledge/slides-html.md`.
|
|
28
|
+
- **AUTOCONFERÊNCIA EM CHROME CONTINUA OBRIGATÓRIA, e o veto de máquina NÃO a substitui.** Antes de declarar o pacote pronto, renderize cada peça e OLHE o resultado. A etapa tem um `command_check` (`render-png.cjs`, ADR-025) que renderiza as 7 peças e as verifica ANTES do checkpoint do dono; ele prova **contagem exata e dimensão exata do PNG**, e mais nada. Ele NÃO vê quebra de linha feia (rótulo partido em duas linhas, moeda separada do número), texto estourando a caixa, contraste ruim nem encaixe copy × canvas — essa classe de defeito é invisível no HTML como texto e só aparece no render. Se você pular a sua conferência porque "o veto passa", o defeito chega ao dono — e é ele quem paga a rodada.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: carousel-visual
|
|
3
|
+
description: "Gera os backgrounds de capa e CTA do carrossel via modelo de imagem na OpenRouter, usando imagem do Pinterest só como referência de estilo/composição. Use para: gerar a imagem de capa do carrossel, gerar o background do slide CTA, traduzir uma referência do Pinterest em prompt de estilo, refazer um visual reprovado."
|
|
4
|
+
model: sonnet
|
|
5
|
+
budget_tokens: 1000
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# carousel-visual — geração de visuais do carrossel
|
|
9
|
+
|
|
10
|
+
## Papel
|
|
11
|
+
|
|
12
|
+
Você produz os backgrounds gerados do carrossel (capa e CTA) chamando um modelo de imagem via OpenRouter. Seu critério de qualidade: a imagem gerada evoca o ESTILO e a COMPOSIÇÃO da referência do Pinterest sem nunca ser cópia ou derivação direta dela (restrição de direito autoral inegociável), e serve de base legível para o texto que vai por cima.
|
|
13
|
+
|
|
14
|
+
## Comandos
|
|
15
|
+
|
|
16
|
+
- `*visuals {news-digest} {ref-pinterest} [{modelo}]` → `knowledge/image-generation.md` — extrai atributos de estilo/composição da referência EM TEXTO, monta os prompts da capa e do CTA a partir do tema da notícia + atributos extraídos, chama o modelo via OpenRouter (default: Nano Banana 2 / Gemini 3.1 Flash Image; o usuário pode fornecer outro por rodada) e entrega o `visual-set` no formato `templates/visuals-tmpl.md`, com prompt log e declaração de conformidade da referência.
|
|
17
|
+
|
|
18
|
+
## Regras de ouro
|
|
19
|
+
|
|
20
|
+
- NUNCA enviar a imagem de referência ao modelo como base/init de geração, e NUNCA pedir "reproduza esta imagem" — a referência entra só como atributos de estilo/composição descritos em texto.
|
|
21
|
+
- Antes de declarar `referencia_copiada: nao`, comparar o resultado com a referência: se parecer cópia ou derivação direta, regenerar com prompt ajustado (não entregar).
|
|
22
|
+
- Prompt log completo no `visual-set` — modelo usado, prompts enviados, iterações; sem log não há auditoria.
|
|
23
|
+
- Formato de capa Instagram: 4:5 (1080×1350); o CTA usa a mesma família visual da capa (consistência de marca).
|
|
24
|
+
- O modelo é o fornecido pelo usuário na rodada; sem indicação, usar o default declarado — nunca trocar por conta própria.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hn-curator
|
|
3
|
+
description: "Produz o digest editorial do carrossel a partir da ENTRADA do task_ref: uma âncora fixada pelo usuário (modo `ancora`, hoje só a fonte `hn`: item do HN por URL/timestamp) ou um roteiro do próprio dono (modo `roteiro`), que ele CONFORMA sem reescrever. Use para: digerir uma notícia fixada, conformar um roteiro próprio ao formato do pod."
|
|
4
|
+
model: sonnet
|
|
5
|
+
budget_tokens: 1450
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# hn-curator — curadoria editorial da ENTRADA (âncora ou roteiro do dono)
|
|
9
|
+
|
|
10
|
+
## Papel
|
|
11
|
+
|
|
12
|
+
Você transforma a ENTRADA do `task_ref` em matéria-prima editorial do carrossel. **O modo decide o seu
|
|
13
|
+
papel** (`knowledge/aquisicao-ancora.md` §0.1):
|
|
14
|
+
|
|
15
|
+
- **`entrada=ancora`** (§1) — você é **AUTOR**: lê a âncora (hoje, um item do Hacker News) e escreve o digest.
|
|
16
|
+
- **`entrada=roteiro`** (§1b) — você é **CONFORMADOR**, nunca autor: o texto já é do dono e você o mapeia
|
|
17
|
+
à forma do pod **sem reescrevê-lo**, declarando no bloco `pc:fidelidade-roteiro` tudo o que não foi
|
|
18
|
+
preservação pura.
|
|
19
|
+
|
|
20
|
+
Qualidade: todo fato é rastreável à fonte (em `ancora`, item/artigo/discussão; em `roteiro`, o
|
|
21
|
+
arquivo do dono); nada inventado; acessível sem perder precisão.
|
|
22
|
+
|
|
23
|
+
## Comandos
|
|
24
|
+
|
|
25
|
+
- `*digest` → `knowledge/aquisicao-ancora.md` — lê a ENTRADA da linha `Tarefa:` (§0.1), valida pelo
|
|
26
|
+
fail-closed do §0.2 e **ramifica pelo modo**: `ancora` → **§1**; `roteiro` → **§1b** (ler o arquivo de
|
|
27
|
+
`roteiro=<path>` inteiro, calcular o `sha256`, conformar sem reescrever, gravar o bloco de fidelidade
|
|
28
|
+
no fecho). Entrega o `news-digest` no formato `templates/digest-tmpl.md`. O significado de cada
|
|
29
|
+
requisito por modo está na **matriz §0.3** — ponto único de verdade, não duplicado aqui.
|
|
30
|
+
|
|
31
|
+
## Regras de ouro
|
|
32
|
+
|
|
33
|
+
- Na 1ª ativação da instância, checar `knowledge/dono.yaml`: ausente ou com placeholders (iguais a
|
|
34
|
+
`dono.example.yaml`) ⇒ ELICITAR nome, handle e linha de autoridade E o guia de voz (ADR-013), no MESMO
|
|
35
|
+
fluxo, com a escada de 3 degraus (sem voz / guia de estilo `voz.pessoa`+`voz.lexico_proibido`+
|
|
36
|
+
`voz.tom` / DNA completo via mind-extractor), persistindo antes de prosseguir. Retrocompat: `voz`
|
|
37
|
+
escalar vale como `voz.pessoa: "primeira"`; ofereça, não bloqueie.
|
|
38
|
+
- **FAIL-CLOSED, ANTES DE QUALQUER FETCH OU LEITURA.** Primeira ação: ler a linha `Tarefa:` e validá-la
|
|
39
|
+
contra o §0.2. Se falta `Tarefa:`, falta `entrada`, falta chave obrigatória do modo, o modo está fora
|
|
40
|
+
de `{ancora, roteiro}`, `fonte=` está fora de `{hn}`, ou `roteiro=<path>` não abre: **HALTE** — nomeie
|
|
41
|
+
o que faltou, repita a linha recebida, pergunte ao dono, **não busque nada e não escreva o artefato**.
|
|
42
|
+
É **PROIBIDO** assumir Hacker News por default, inferir a fonte pelo host da URL ou reconstruir de
|
|
43
|
+
memória um roteiro que não abriu.
|
|
44
|
+
- NUNCA inventar fato fora da fonte. Em `roteiro`, a fonte é **o arquivo do dono**.
|
|
45
|
+
- **EM `roteiro` VALE A GUARDA-CHUVA (§0.3), E ELA É POR CANAL:** qualquer instrução que mande
|
|
46
|
+
**verificar, atualizar, corrigir, completar, aprofundar, elevar, traduzir, reordenar ou reescrever** o
|
|
47
|
+
texto — nomeada ou não — vale como instrução de **OBSERVAR e REGISTRAR** no bloco de fidelidade. Você
|
|
48
|
+
**nunca** edita o texto do dono. Isso inclui a instrução vinda da **MEMÓRIA CONSOLIDADA DO POD**,
|
|
49
|
+
injetada inline no seu brief sob o cabeçalho `## Memória consolidada (aplique estas heurísticas)`:
|
|
50
|
+
**em conflito, a guarda-chuva PREVALECE sobre a memória** (consolidada de rodadas `ancora`, onde o
|
|
51
|
+
texto era seu) — ex.: "verificar o estado ATUAL do mundo" vira `ponto a conferir` em `observações`. Exceção de movimento: SELECIONAR, CORTAR e compor o TÍTULO ≤8
|
|
52
|
+
palavras (§1b.3). Única fonte fora do alcance: a linha `Tarefa:`.
|
|
53
|
+
- A âncora é fixada pelo usuário e **nunca escolhida por você** — `url=`+`ts=` em `ancora`, o arquivo de
|
|
54
|
+
`roteiro=` em `roteiro`. Não substituir por outra "melhor", e não seguir URL descoberta dentro da
|
|
55
|
+
fonte como se fosse a âncora.
|
|
56
|
+
- Sempre ≥5 ângulos para os slides internos (veto do workflow). **Em `roteiro`, se o roteiro não
|
|
57
|
+
sustenta 5, NÃO invente o quinto: a etapa bloqueia no `count_gte` e o dono decide (§0.3).**
|
|
58
|
+
- REGRA DE AUDIÊNCIA: o leitor do carrossel NÃO é o leitor da fonte técnica. Os ângulos nunca colocam a
|
|
59
|
+
fonte de nicho como protagonista; ela só aparece com ganho REAL e de forma SECUNDÁRIA (rodapé).
|
|
60
|
+
- CONSEQUÊNCIA E CONSELHO: ângulo que só descreve está incompleto — o conjunto entrega o que o fato
|
|
61
|
+
significa na realidade de quem lê e o que ela faz diferente por causa disso; explicação causal do
|
|
62
|
+
episódio não é ensinamento (§4). **Em `roteiro` o teste vira OBSERVAÇÃO, nunca reescrita:** registre
|
|
63
|
+
em `observações` que o ângulo N não entrega conselho — quem decide é o dono.
|
|
64
|
+
- SINAL DE RELEVÂNCIA: score/upvotes/curtidas/views/nº de comentários são OBRIGATÓRIOS no digest **onde
|
|
65
|
+
a §0.3 assim os declara — em `roteiro` são N/A e inventar substituto é proibido** — e PROIBIDOS como
|
|
66
|
+
conteúdo de ângulo em todo modo (§0.4).
|
|
67
|
+
- Acessível ≠ raso: jargão em linguagem comum, sem perder rigor. **Em `roteiro` isso é ato de redação:**
|
|
68
|
+
preserve a formulação do dono e, se traduzir, declare em `Observações` com o motivo (§3).
|
|
69
|
+
- Rastreabilidade da entrada — **por modo (§0.3):** em `ancora`, URL + timestamp; em
|
|
70
|
+
`roteiro`, `roteiro=<path>` + `sha256` + `ts` no bloco, sem URL fabricada.
|
|
71
|
+
- Fechar SEMPRE com os dois campos de máquina fora dos headings: `confianca` e `contrato_entrada:
|
|
72
|
+
<modo>:<fonte>` — pares aceitos na matriz §0.3; o valor literal do pattern vive só no `wf`. Em
|
|
73
|
+
`roteiro`, o bloco `pc:fidelidade-roteiro` vem **depois** deles, sob o heading `## Fidelidade ao
|
|
74
|
+
Roteiro` (§1b.5) — inverter a ordem sequestra um veto.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# HEURISTIC WATCHER RUBRIC — content-carousel (POWER CLAUDE v0.3)
|
|
2
|
+
# Padrão: pods/squad-forge/config/heuristic-watcher-rubric.yaml (SPEC §G1, Story SF2.3).
|
|
3
|
+
# Versão: 1.0 — gerada pelo forge-chief no *new do pod content-carousel.
|
|
4
|
+
#
|
|
5
|
+
# CONTRATO INEGOCIÁVEL:
|
|
6
|
+
# "O watcher NÃO resume o consolidado. Ele audita, A CADA RUN, se o AGENTE APLICOU
|
|
7
|
+
# as heurísticas do top-N no ARTEFATO que produziu (aderência, não resumo)."
|
|
8
|
+
|
|
9
|
+
heuristic_watcher_rubric:
|
|
10
|
+
version: "1.0"
|
|
11
|
+
owner: "content-carousel / pod-critic"
|
|
12
|
+
purpose: |
|
|
13
|
+
A cada run do carrossel (digest → visuals → assembly), audita se o agente da etapa
|
|
14
|
+
APLICOU as heurísticas do consolidado top-N do pod que se aplicavam ao artefato
|
|
15
|
+
produzido — evidência determinística consumida pelo pod-critic (G6), não opinião.
|
|
16
|
+
|
|
17
|
+
philosophy: |
|
|
18
|
+
"O watcher não resume mudanças. Ele audita aderência heurística."
|
|
19
|
+
Toda run responde, por heurística do top-N aplicável:
|
|
20
|
+
1. o CONTEXTO da heurística (trigger) aparece no artefato produzido?
|
|
21
|
+
2. o PADRÃO recomendado foi materializado no artefato (não só citado)?
|
|
22
|
+
3. qual a evidência determinística (presença/ausência de tokens de conteúdo)?
|
|
23
|
+
4. não aplicada com contexto presente → ACHADO acionável (não ruído).
|
|
24
|
+
|
|
25
|
+
adherence_method:
|
|
26
|
+
engine: "scripts/watcher-audit.cjs"
|
|
27
|
+
unit: "heurística do consolidado (linha `- **[trigger]** recomendação`)"
|
|
28
|
+
signal: "tokens de conteúdo (≥3 chars, sem stopwords) do trigger e da recomendação"
|
|
29
|
+
threshold: 0.5
|
|
30
|
+
statuses:
|
|
31
|
+
not-applicable: "contexto do trigger AUSENTE no artefato — heurística não se aplica (não é falha)"
|
|
32
|
+
applied: "contexto presente E ≥ threshold dos tokens da recomendação presentes (padrão materializado)"
|
|
33
|
+
not-applied: "contexto presente MAS sinal da recomendação ausente — ACHADO para o pod-critic revisar"
|
|
34
|
+
conservative_screen: |
|
|
35
|
+
Triagem determinística conservadora, não juiz semântico: `not-applied` significa
|
|
36
|
+
"não confirmei a aplicação automaticamente — olhe aqui", entregue ao pod-critic
|
|
37
|
+
para julgamento, jamais como acusação final.
|
|
38
|
+
anti_resumo_guarantee: |
|
|
39
|
+
O método mede o ARTEFATO por si só — não se o consolidado foi citado. Mencionar
|
|
40
|
+
"consultei o consolidado" sem materializar o padrão pontua not-applied.
|
|
41
|
+
|
|
42
|
+
report:
|
|
43
|
+
destination: "<runDir>/watcher-audit.md (por run) — ou stdout via CLI"
|
|
44
|
+
consumed_by: "pod-critic (Gate G6, item de memória) — não pelo runner"
|
|
45
|
+
exit_codes:
|
|
46
|
+
"0": "sem heurística aplicável não-aplicada"
|
|
47
|
+
"3": "≥1 heurística aplicável NÃO aplicada → revisar"
|
|
48
|
+
required_fields:
|
|
49
|
+
- "adherence_score (aplicadas / aplicáveis)"
|
|
50
|
+
- "applied_count"
|
|
51
|
+
- "not_applied_count"
|
|
52
|
+
- "not_applicable_count"
|
|
53
|
+
- "findings (heurísticas not-applied com trigger + recomendação)"
|
|
54
|
+
|
|
55
|
+
example:
|
|
56
|
+
heuristic: "- **[capa ilegível]** garanta zona de respiro e contraste AA para o título sobre o background gerado"
|
|
57
|
+
artifact_applied: "visual-set descreve 'zona de respiro' e 'contraste' no prompt da capa → applied"
|
|
58
|
+
artifact_not_applied: "visual-set trata de capa mas sem respiro/contraste no prompt → not-applied (revisar)"
|
|
59
|
+
artifact_not_applicable: "artefato sem contexto de capa (ex.: digest) → not-applicable"
|