@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,357 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
/**
|
|
4
|
+
* pod-memory-note.cjs — Story SF11.5 / ADR-020 §Revisão 3 (`DF-SF10.21-15` a `-19`).
|
|
5
|
+
*
|
|
6
|
+
* O comentário que o DONO digita no checkpoint bloqueante (ao `approve` ou ao `revise`)
|
|
7
|
+
* vira uma entrada de aprendizado do pod. Invocador FINO sobre `podMemory.append` — a
|
|
8
|
+
* captura vive na CAMADA DO COMANDO, nunca no motor:
|
|
9
|
+
*
|
|
10
|
+
* - `pc-run-pod.cjs` fica INTOCADO (`DF-SF10.21-15`). `approve`/`revise` continuam
|
|
11
|
+
* decidindo transição e só isso; o que o humano PENSOU do artefato não é insumo de
|
|
12
|
+
* transição de máquina de estados.
|
|
13
|
+
* - Este script NÃO importa `pc-run-pod.cjs`. O único acoplamento ao motor é a LEITURA
|
|
14
|
+
* do `state.json` que ele já escreve (`pod`, `run_id`, `steps`) — verificável por grep.
|
|
15
|
+
*
|
|
16
|
+
* VÃO QUE ISTO FECHA (medido em código, não hipótese): `revise()` não appenda NADA. Um
|
|
17
|
+
* artefato que passou em todos os vetos e ainda assim foi reprovado pelo dono desaparecia
|
|
18
|
+
* sem deixar o porquê — a informação mais valiosa do pod (`DF-SF10.21-17`).
|
|
19
|
+
*
|
|
20
|
+
* A MENSAGEM NUNCA VIAJA POR ARGV (`DF-SF10.21-15`, razão explícita de recusa da opção
|
|
21
|
+
* `node -e` inline): o texto do dono tem aspas, acentos e quebras de linha, e argv é
|
|
22
|
+
* visível em `ps` e no histórico do shell. Só `--file <arquivo>` ou stdin. Qualquer flag
|
|
23
|
+
* de texto livre (`--message`, `--comment`, ...) é ERRO DE USO explícito, não silêncio.
|
|
24
|
+
*
|
|
25
|
+
* SILÊNCIO NÃO VIRA LEARNING (`DF-SF10.21-17`): o comentário é OPCIONAL — a opcionalidade
|
|
26
|
+
* vive no COMANDO, que simplesmente não invoca este script quando o dono não comenta.
|
|
27
|
+
* Este script invocado com mensagem vazia é CHAMADA ERRADA: exit 2, zero append, nunca
|
|
28
|
+
* uma entrada fabricada.
|
|
29
|
+
*
|
|
30
|
+
* `attributed_by` é o ENUM FECHADO de `pod-memory.cjs` (`VALID_ATTRIBUTION = {human,
|
|
31
|
+
* deterministic_rule}`) — NÃO é nome de pessoa. Aqui é sempre a string literal "human"
|
|
32
|
+
* (`DF-SF10.21-16`): a proveniência humana é preservada também em `tier: normal`, sem
|
|
33
|
+
* gastar slot de pin. NÃO CONFUNDIR com `pod-spec.json → memoryCost.acceptedBy`
|
|
34
|
+
* ("Alexa Exemplo"), que é atribuição NOMINAL de outro campo, com outro propósito.
|
|
35
|
+
* Omitir `attributed_by` cairia em `null` em silêncio (`pod-memory.cjs:351`, o default só
|
|
36
|
+
* é cobrado em `critical`) — por isso o literal é fixado aqui e testado por igualdade.
|
|
37
|
+
*
|
|
38
|
+
* Uso:
|
|
39
|
+
* node scripts/pod-memory-note.cjs --state <state.json> \
|
|
40
|
+
* --workflow-file <pods/<pod>/workflows/wf-*.yaml> \
|
|
41
|
+
* --step <id> --verdict approve|revise \
|
|
42
|
+
* [--file <arquivo com o comentário>] (omitido ⇒ lê stdin) \
|
|
43
|
+
* [--tier critical] [--pod-root <dir>]
|
|
44
|
+
*
|
|
45
|
+
* Exit: 0 gravado · 2 erro de uso (inclui mensagem vazia) · 1 falha de execução.
|
|
46
|
+
* Node >= 18, sem dependências externas.
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
const fs = require('node:fs');
|
|
50
|
+
const path = require('node:path');
|
|
51
|
+
const podMemory = require('./pod-memory.cjs');
|
|
52
|
+
const { podRootFor } = require('./validate-pod-workflow.cjs');
|
|
53
|
+
|
|
54
|
+
const VERDICTS = new Set(['approve', 'revise']);
|
|
55
|
+
// Espelham `pod-memory.cjs:80-81` (TIER_NORMAL/TIER_CRITICAL não estão no module.exports
|
|
56
|
+
// da biblioteca — copiar o literal é o único caminho sem editar o contrato dela).
|
|
57
|
+
const TIER_NORMAL = 'normal';
|
|
58
|
+
const TIER_CRITICAL = 'critical';
|
|
59
|
+
// Rótulo determinístico por veredito — o `trigger` NUNCA é fabricado a partir do conteúdo
|
|
60
|
+
// do comentário (texto livre do dono viraria chave de dedup imprevisível). A "história" do
|
|
61
|
+
// julgamento vive em `recommendation` (verbatim) e em `evidence`/`source_run_id`.
|
|
62
|
+
const VERDICT_LABEL = { approve: 'aprovado', revise: 'revisado' };
|
|
63
|
+
// ENUM de pod-memory.cjs — NUNCA um nome próprio (ver cabeçalho).
|
|
64
|
+
const ATTRIBUTED_BY_HUMAN = 'human';
|
|
65
|
+
// Classe do registro, preservada por `append` (SF8.3). Marca de auditoria: distingue o
|
|
66
|
+
// julgamento humano do checkpoint dos registros que o runner monta sozinho
|
|
67
|
+
// (`verification_failed`, `ok_pattern`). Não altera dedup/ranking/poda.
|
|
68
|
+
const TYPE_CHECKPOINT_COMMENT = 'checkpoint_comment';
|
|
69
|
+
|
|
70
|
+
/** Erro de USO (o chamador errou): a CLI traduz para exit 2. */
|
|
71
|
+
class UsageError extends Error {}
|
|
72
|
+
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Núcleo puro (testável sem CLI)
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Apara SOMENTE as bordas em branco (artefato de arquivo/stdin: o editor acrescenta `\n`
|
|
79
|
+
* final). O conteúdo INTERNO é preservado byte a byte — aspas, acentos e quebras de linha
|
|
80
|
+
* do dono chegam íntegros ao log cru.
|
|
81
|
+
*/
|
|
82
|
+
function normalizeMessage(raw) {
|
|
83
|
+
return String(raw == null ? '' : raw).replace(/^\uFEFF/, '').trim();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** True quando o dono não disse nada (silêncio não vira learning). */
|
|
87
|
+
function isSilence(raw) {
|
|
88
|
+
return normalizeMessage(raw) === '';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Monta a entrada de memória a partir do julgamento humano. Determinística: mesmo
|
|
93
|
+
* (step, verdict, message, runId) ⇒ mesma entrada, exceto `id`/`ts` (do motor).
|
|
94
|
+
* @returns {object} entry no contrato público de `podMemory.append`
|
|
95
|
+
*/
|
|
96
|
+
function buildNoteEntry({ step, verdict, message, runId, tier }) {
|
|
97
|
+
if (!step || typeof step !== 'string' || step.trim() === '') {
|
|
98
|
+
throw new UsageError('pod-memory-note: --step é obrigatório (id da etapa do checkpoint)');
|
|
99
|
+
}
|
|
100
|
+
if (!VERDICTS.has(verdict)) {
|
|
101
|
+
throw new UsageError(
|
|
102
|
+
`pod-memory-note: --verdict inválido ${JSON.stringify(verdict)} (use "approve" ou "revise")`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
const t = tier || TIER_NORMAL;
|
|
106
|
+
if (t !== TIER_NORMAL && t !== TIER_CRITICAL) {
|
|
107
|
+
throw new UsageError(`pod-memory-note: --tier inválido "${t}" (use "normal" ou "critical")`);
|
|
108
|
+
}
|
|
109
|
+
const text = normalizeMessage(message);
|
|
110
|
+
if (text === '') {
|
|
111
|
+
throw new UsageError(
|
|
112
|
+
'pod-memory-note: mensagem VAZIA — silêncio não vira learning (DF-SF10.21-17). ' +
|
|
113
|
+
'Nada foi gravado. O comentário é opcional: quando o dono não comenta, o comando ' +
|
|
114
|
+
'simplesmente NÃO invoca este script.',
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
trigger: `checkpoint "${step.trim()}" ${VERDICT_LABEL[verdict]} pelo dono`,
|
|
119
|
+
recommendation: text,
|
|
120
|
+
evidence: { step: step.trim(), verdict, run_id: runId || null },
|
|
121
|
+
tier: t,
|
|
122
|
+
// Fixado, nunca omitido: omissão cai em null silencioso para tier normal.
|
|
123
|
+
attributed_by: ATTRIBUTED_BY_HUMAN,
|
|
124
|
+
source_run_id: runId || null,
|
|
125
|
+
type: TYPE_CHECKPOINT_COMMENT,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Grava o comentário do checkpoint na memória do pod e CONSOLIDA na sequência, devolvendo
|
|
131
|
+
* o ledger de eviction do motor (mesmo padrão de `forge-ingest-memory.cjs:120-131` — quem
|
|
132
|
+
* consolida trata `evicted`; nenhum emissor monta contador próprio, ADR-023 §C2).
|
|
133
|
+
*
|
|
134
|
+
* @param {{pod:string, podDir:string, step:string, verdict:'approve'|'revise',
|
|
135
|
+
* message:string, runId?:string, tier?:string}} args
|
|
136
|
+
* @returns {{appended:boolean, reason?:string, entry?:object, ledger:?string,
|
|
137
|
+
* consolidateError:?Error}}
|
|
138
|
+
*/
|
|
139
|
+
function noteCheckpointComment(args) {
|
|
140
|
+
const { pod, podDir, message } = args;
|
|
141
|
+
if (!pod) throw new UsageError('pod-memory-note: `pod` é obrigatório');
|
|
142
|
+
if (!podDir) throw new UsageError('pod-memory-note: `podDir` é obrigatório');
|
|
143
|
+
// Silêncio é resposta legítima da BIBLIOTECA (nenhum append, sem exceção); a CLI é que
|
|
144
|
+
// trata a chamada com mensagem vazia como uso errado (o comando não deveria chamá-la).
|
|
145
|
+
if (isSilence(message)) return { appended: false, reason: 'empty', ledger: null, consolidateError: null };
|
|
146
|
+
|
|
147
|
+
const entry = buildNoteEntry(args);
|
|
148
|
+
const opts = { podDir };
|
|
149
|
+
const { entry: record } = podMemory.append(pod, entry, opts);
|
|
150
|
+
|
|
151
|
+
// Consolida SEMPRE (não a cada K): a captura é rara — uma por decisão de checkpoint — e
|
|
152
|
+
// é justamente o ato que empurra a cauda para fora do artefato orçado. Appendar e não
|
|
153
|
+
// ver o que saiu é o sub-relato que ADR-022/ADR-023 fecharam.
|
|
154
|
+
let ledger = null;
|
|
155
|
+
let consolidateError = null;
|
|
156
|
+
try {
|
|
157
|
+
const res = podMemory.consolidate(pod, opts);
|
|
158
|
+
ledger = podMemory.formatEvictionLedger(pod, res);
|
|
159
|
+
} catch (e) {
|
|
160
|
+
consolidateError = e; // surface, não suprime — a CLI reporta; o append já está em disco.
|
|
161
|
+
}
|
|
162
|
+
return { appended: true, entry: record, ledger, consolidateError };
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
// Leitura de contexto (state.json do motor — LEITURA apenas, zero import do runner)
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
/** Lê o `state.json` do run e valida os campos que esta captura consome. */
|
|
170
|
+
function readRunContext(statePath) {
|
|
171
|
+
const p = path.resolve(statePath);
|
|
172
|
+
let state;
|
|
173
|
+
try {
|
|
174
|
+
state = JSON.parse(fs.readFileSync(p, 'utf8'));
|
|
175
|
+
} catch (e) {
|
|
176
|
+
throw new UsageError(`pod-memory-note: state.json ilegível em ${p}: ${e.message}`);
|
|
177
|
+
}
|
|
178
|
+
for (const k of ['pod', 'run_id', 'steps']) {
|
|
179
|
+
if (!(k in state)) throw new UsageError(`pod-memory-note: state.json inválido (campo "${k}" ausente) em ${p}`);
|
|
180
|
+
}
|
|
181
|
+
return state;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Diretório do pod onde a memória vive. Precedência idêntica à do runner (SF9.2
|
|
186
|
+
* CONCERNS-1): (1) override explícito; (2) roteamento GRAVADO no state (`memory_pod_dir`,
|
|
187
|
+
* honrado sem re-derivar — é o que impede a captura de um run isolado contaminar o pod
|
|
188
|
+
* real); (3) raiz do pod derivada do `--workflow-file`.
|
|
189
|
+
*/
|
|
190
|
+
function resolveMemoryPodDir({ state, workflowFile, podRootOverride, memoryPodDirOverride }) {
|
|
191
|
+
if (memoryPodDirOverride) return path.resolve(memoryPodDirOverride);
|
|
192
|
+
if (state && state.memory_pod_dir) return path.resolve(state.memory_pod_dir);
|
|
193
|
+
if (!workflowFile) {
|
|
194
|
+
throw new UsageError('pod-memory-note: --workflow-file é obrigatório (deriva a raiz do pod)');
|
|
195
|
+
}
|
|
196
|
+
return podRootFor(path.resolve(workflowFile), podRootOverride);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// ---------------------------------------------------------------------------
|
|
200
|
+
// CLI
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
|
|
203
|
+
// Flags de TEXTO LIVRE recusadas por desenho — a mensagem nunca entra por argv. Recusar
|
|
204
|
+
// NOMEANDO é o ponto: aceitar-e-ignorar traria de volta, em silêncio, o defeito que
|
|
205
|
+
// `DF-SF10.21-15` fechou.
|
|
206
|
+
const FORBIDDEN_TEXT_FLAGS = new Set([
|
|
207
|
+
'--message', '--comment', '--recommendation', '--note', '--text', '--msg', '-m',
|
|
208
|
+
]);
|
|
209
|
+
|
|
210
|
+
const USAGE = [
|
|
211
|
+
'Uso: node scripts/pod-memory-note.cjs --state <state.json> --workflow-file <wf.yaml> \\',
|
|
212
|
+
' --step <id> --verdict approve|revise [--file <arquivo>] [--tier critical] [--pod-root <dir>]',
|
|
213
|
+
'',
|
|
214
|
+
'A mensagem do dono NUNCA entra por argv: use --file <arquivo> ou stdin.',
|
|
215
|
+
].join('\n');
|
|
216
|
+
|
|
217
|
+
function parseArgs(args) {
|
|
218
|
+
const o = { tier: TIER_NORMAL };
|
|
219
|
+
const need = (i, flag) => {
|
|
220
|
+
if (i >= args.length) throw new UsageError(`pod-memory-note: ${flag} exige um valor`);
|
|
221
|
+
return args[i];
|
|
222
|
+
};
|
|
223
|
+
for (let i = 0; i < args.length; i++) {
|
|
224
|
+
const a = args[i];
|
|
225
|
+
if (FORBIDDEN_TEXT_FLAGS.has(a)) {
|
|
226
|
+
throw new UsageError(
|
|
227
|
+
`pod-memory-note: "${a}" NÃO existe por desenho — o comentário do dono nunca viaja ` +
|
|
228
|
+
'por argv (aspas/acentos/quebras de linha quebram no shell, e argv é visível em ' +
|
|
229
|
+
'`ps` e no histórico). Escreva o texto num arquivo e use --file <arquivo>, ou envie ' +
|
|
230
|
+
'por stdin. (ADR-020 DF-SF10.21-15)',
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
switch (a) {
|
|
234
|
+
case '--state': o.state = need(++i, '--state'); break;
|
|
235
|
+
case '--workflow-file': o.workflowFile = need(++i, '--workflow-file'); break;
|
|
236
|
+
case '--pod-root': o.podRoot = need(++i, '--pod-root'); break;
|
|
237
|
+
case '--memory-pod-dir': o.memoryPodDir = need(++i, '--memory-pod-dir'); break;
|
|
238
|
+
case '--step': o.step = need(++i, '--step'); break;
|
|
239
|
+
case '--verdict': o.verdict = need(++i, '--verdict'); break;
|
|
240
|
+
case '--file': o.file = need(++i, '--file'); break;
|
|
241
|
+
case '--tier': o.tier = need(++i, '--tier'); break;
|
|
242
|
+
case '--help': case '-h': o.help = true; break;
|
|
243
|
+
default:
|
|
244
|
+
throw new UsageError(
|
|
245
|
+
`pod-memory-note: argumento não reconhecido ${JSON.stringify(a)}.\n${USAGE}`,
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return o;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/** Lê a mensagem: `--file` OU stdin. Nunca argv. */
|
|
253
|
+
function readMessage(o) {
|
|
254
|
+
if (o.file) {
|
|
255
|
+
const p = path.resolve(o.file);
|
|
256
|
+
try {
|
|
257
|
+
return fs.readFileSync(p, 'utf8');
|
|
258
|
+
} catch (e) {
|
|
259
|
+
throw new UsageError(`pod-memory-note: --file ilegível (${p}): ${e.message}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (process.stdin.isTTY) {
|
|
263
|
+
throw new UsageError(
|
|
264
|
+
'pod-memory-note: sem --file e sem stdin — nada a gravar.\n' +
|
|
265
|
+
'Escreva o comentário do dono num arquivo (ferramenta de escrita, nunca heredoc/echo) ' +
|
|
266
|
+
`e passe --file <arquivo>.\n${USAGE}`,
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
try {
|
|
270
|
+
return fs.readFileSync(0, 'utf8');
|
|
271
|
+
} catch (e) {
|
|
272
|
+
throw new UsageError(`pod-memory-note: falha ao ler stdin: ${e.message}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function main() {
|
|
277
|
+
let o;
|
|
278
|
+
try {
|
|
279
|
+
o = parseArgs(process.argv.slice(2));
|
|
280
|
+
} catch (e) {
|
|
281
|
+
console.error(e.message);
|
|
282
|
+
process.exit(2);
|
|
283
|
+
}
|
|
284
|
+
if (o.help) {
|
|
285
|
+
console.log(USAGE);
|
|
286
|
+
process.exit(0);
|
|
287
|
+
}
|
|
288
|
+
try {
|
|
289
|
+
if (!o.state) throw new UsageError(`pod-memory-note: --state é obrigatório.\n${USAGE}`);
|
|
290
|
+
const state = readRunContext(o.state);
|
|
291
|
+
if (o.step && !Object.prototype.hasOwnProperty.call(state.steps, o.step)) {
|
|
292
|
+
throw new UsageError(
|
|
293
|
+
`pod-memory-note: etapa "${o.step}" não existe no run ${state.run_id} ` +
|
|
294
|
+
`(etapas: ${Object.keys(state.steps).join(', ')}). Comentário NÃO gravado.`,
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
const podDir = resolveMemoryPodDir({
|
|
298
|
+
state,
|
|
299
|
+
workflowFile: o.workflowFile,
|
|
300
|
+
podRootOverride: o.podRoot,
|
|
301
|
+
memoryPodDirOverride: o.memoryPodDir,
|
|
302
|
+
});
|
|
303
|
+
const message = readMessage(o);
|
|
304
|
+
if (isSilence(message)) {
|
|
305
|
+
// Exit 2 com zero append: o comando não deveria ter chamado. Fail-loud > entrada vazia.
|
|
306
|
+
throw new UsageError(
|
|
307
|
+
'pod-memory-note: mensagem VAZIA (--file/stdin sem conteúdo) — silêncio não vira ' +
|
|
308
|
+
'learning (DF-SF10.21-17). NADA foi gravado. O comentário é opcional: quando o dono ' +
|
|
309
|
+
'não comenta, o comando simplesmente NÃO invoca este script. Se ele comentou, ' +
|
|
310
|
+
`escreva o texto num arquivo e passe --file <arquivo>.\n${USAGE}`,
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
const r = noteCheckpointComment({
|
|
314
|
+
pod: state.pod,
|
|
315
|
+
podDir,
|
|
316
|
+
step: o.step,
|
|
317
|
+
verdict: o.verdict,
|
|
318
|
+
message,
|
|
319
|
+
runId: state.run_id,
|
|
320
|
+
tier: o.tier,
|
|
321
|
+
});
|
|
322
|
+
console.log(
|
|
323
|
+
`[memory] comentário do dono gravado: pod "${state.pod}" · etapa "${o.step}" · ` +
|
|
324
|
+
`veredito "${o.verdict}" · tier ${r.entry.tier} · run ${state.run_id}`,
|
|
325
|
+
);
|
|
326
|
+
if (r.ledger) console.error(r.ledger);
|
|
327
|
+
if (r.consolidateError) {
|
|
328
|
+
console.error(
|
|
329
|
+
`[memory] AVISO: a entrada JÁ FOI GRAVADA no log cru, mas a consolidação falhou: ` +
|
|
330
|
+
`${r.consolidateError.message}\n NÃO reexecute este comando (duplicaria a entrada): ` +
|
|
331
|
+
'corrija a causa e reconsolide.',
|
|
332
|
+
);
|
|
333
|
+
process.exit(1);
|
|
334
|
+
}
|
|
335
|
+
process.exit(0);
|
|
336
|
+
} catch (e) {
|
|
337
|
+
console.error(e instanceof UsageError ? e.message : `pod-memory-note: ${e.message}`);
|
|
338
|
+
process.exit(e instanceof UsageError ? 2 : 1);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
if (require.main === module) main();
|
|
343
|
+
|
|
344
|
+
module.exports = {
|
|
345
|
+
buildNoteEntry,
|
|
346
|
+
noteCheckpointComment,
|
|
347
|
+
normalizeMessage,
|
|
348
|
+
isSilence,
|
|
349
|
+
readRunContext,
|
|
350
|
+
resolveMemoryPodDir,
|
|
351
|
+
parseArgs,
|
|
352
|
+
UsageError,
|
|
353
|
+
ATTRIBUTED_BY_HUMAN,
|
|
354
|
+
TYPE_CHECKPOINT_COMMENT,
|
|
355
|
+
VERDICT_LABEL,
|
|
356
|
+
FORBIDDEN_TEXT_FLAGS,
|
|
357
|
+
};
|