@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,442 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
/**
|
|
4
|
+
* owner-layer.cjs — MANIFESTO DA CAMADA DO DONO (Story SF12.1, ADR-027 Decisão 1/3).
|
|
5
|
+
*
|
|
6
|
+
* Declaração ÚNICA do que "é do dono" neste repositório. Substitui o
|
|
7
|
+
* `scripts/personal-data-patterns.cjs` previsto no draft da story: duas
|
|
8
|
+
* declarações separadas do que é do dono seriam a própria dispersão que esta
|
|
9
|
+
* story existe para corrigir, aplicada ao nosso artefato (`DF-SF12.1-1`).
|
|
10
|
+
*
|
|
11
|
+
* Exporta DUAS declarações e DOIS oráculos de alcance DISJUNTO:
|
|
12
|
+
*
|
|
13
|
+
* 1. `layers` → a CAMADA DO DONO, declarada por manifesto lógico (globs),
|
|
14
|
+
* nunca por raiz física (mover o dado do pod quebraria a
|
|
15
|
+
* autocontenção que o `pod-export` exige — ADR-027 Decisão 1).
|
|
16
|
+
* Oráculo: `scanContainment()`.
|
|
17
|
+
* 2. `patterns` → a lista ENUMERADA de padrões de dado pessoal já classificados.
|
|
18
|
+
* Oráculo: `scanEnumeration()`.
|
|
19
|
+
*
|
|
20
|
+
* ALCANCE DE CADA ORÁCULO — declarado aqui e repetido no teste, porque um AC que
|
|
21
|
+
* promete mais que o instrumento é a classe de defeito que este projeto já pagou
|
|
22
|
+
* nove vezes no SF11:
|
|
23
|
+
*
|
|
24
|
+
* • CONTENÇÃO prova: "nenhum arquivo dentro da camada declarada é publicado sem
|
|
25
|
+
* ser um placeholder `*.example.*` marcado com sentinela (ou um não-`.example.`
|
|
26
|
+
* explicitamente permitido por path, com a sua regra)". Pega dado NÃO ENUMERADO
|
|
27
|
+
* — inclusive DNA de TERCEIRO extraído pelo `mind-extractor` — desde que esteja
|
|
28
|
+
* dentro da camada. NÃO pega nada fora dela.
|
|
29
|
+
* • ENUMERAÇÃO prova: "estas strings específicas não aparecem em nenhum arquivo
|
|
30
|
+
* publicado fora da allowlist". Pega dado CONHECIDO em qualquer lugar do
|
|
31
|
+
* tarball. NÃO prova ausência de "dado pessoal" em geral — dado pessoal não
|
|
32
|
+
* tem gramática sintática (um nome próprio, um cargo, uma tese editorial não
|
|
33
|
+
* têm forma reconhecível, ao contrário de `sk-`/`AKIA`/`ghp_`).
|
|
34
|
+
*
|
|
35
|
+
* • LACUNA RESIDUAL, NOMEADA E SEM INSTRUMENTO: dado pessoal NÃO ENUMERADO e
|
|
36
|
+
* FORA da camada declarada. Nenhum oráculo daqui o cobre e nenhum AC da
|
|
37
|
+
* SF12.1 declara que cobre (`DEBT-SF12.1-B`). O que a encolhe é centralizar:
|
|
38
|
+
* cada dado movido para dentro da camada sai do oráculo que depende de
|
|
39
|
+
* memória humana (enumeração) e entra no que não depende (contenção).
|
|
40
|
+
*
|
|
41
|
+
* MANUTENÇÃO DA ENUMERAÇÃO (dono declarado da lista): quem acrescenta um dado
|
|
42
|
+
* pessoal novo acrescenta o padrão correspondente NA MESMA MUDANÇA, com `origin`
|
|
43
|
+
* preenchido. O `pc-devops` confere a lista como item nomeado do ritual de
|
|
44
|
+
* publicação (`template/.claude/agents/pc-devops.md`, seção "Publicação no npm").
|
|
45
|
+
* A garantia real, porém, NÃO é a diligência de ninguém: é a contenção, que não
|
|
46
|
+
* precisa que alguém lembre.
|
|
47
|
+
*
|
|
48
|
+
* PROJEÇÕES: a declaração é uma só; o que muda é onde se enumeram os arquivos.
|
|
49
|
+
* • repo → `template/…`, `scripts/…`, `LICENSE` …
|
|
50
|
+
* • tarball → `package/template/…` (o consumidor tira o prefixo `package/`
|
|
51
|
+
* antes de chamar as funções deste módulo — ver `stripPackagePrefix`).
|
|
52
|
+
*
|
|
53
|
+
* Node >= 18, zero dependências. Não tem efeito colateral: só declara e varre.
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Identidade fictícia canônica do repositório (ADR-027 Decisão 4, DF-SF12.1-6).
|
|
58
|
+
// UMA identidade fictícia, reusada em TODA fixture — "fixture é exemplo, e
|
|
59
|
+
// exemplo ensina" (lição SF11): fixtures com nomes fictícios diferentes ensinam
|
|
60
|
+
// que qualquer nome serve ali, inclusive um real.
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
const FICTIONAL_IDENTITY = Object.freeze({
|
|
63
|
+
nome: 'Alexa Exemplo',
|
|
64
|
+
handle: '@alexa.exemplo',
|
|
65
|
+
origin: 'template/pods/content-carousel/workflows/wf-content-carousel.smoke.json + scripts/__fixtures__/voz-do-dono/',
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// SENTINELA de placeholder (ADR-027 Decisão 3, DF-SF12.1-2).
|
|
70
|
+
// Serve a dois consumidores, e por isso não é ornamento:
|
|
71
|
+
// (a) o ORÁCULO distingue placeholder de dado real sem adivinhar semântica;
|
|
72
|
+
// (b) o AGENTE detecta "ainda não personalizado" sem diffar contra o
|
|
73
|
+
// `.example` — o diff quebra em silêncio se o usuário editar um campo só.
|
|
74
|
+
// Duas formas aceitas, conforme o AC12 ("`meta.placeholder: true` / `pc:placeholder`"):
|
|
75
|
+
// • YAML com bloco `meta:` no schema (ex.: voice-dna) → `meta.placeholder: true`;
|
|
76
|
+
// • demais formatos, e YAML cujo schema NÃO tem `meta:` (ex.: dono.example.yaml,
|
|
77
|
+
// cuja raiz é `dono:`) → marcador `pc:placeholder` em COMENTÁRIO — forma que
|
|
78
|
+
// não inventa campo novo em schema consumido por agente.
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
const SENTINEL_COMMENT = 'pc:placeholder';
|
|
81
|
+
const SENTINEL_YAML_RE = /^\s*placeholder:\s*true\s*(#.*)?$/m;
|
|
82
|
+
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// 1) CAMADA DO DONO — globs relativos à RAIZ DO TEMPLATE (`template/`).
|
|
85
|
+
//
|
|
86
|
+
// `allowNonExample` lista, POR PATH, os arquivos da camada que legitimamente não
|
|
87
|
+
// são `*.example.*`, cada um com a `rule` que a máquina verifica. Um arquivo da
|
|
88
|
+
// camada que não é `.example.` e não está aqui REPROVA — é assim que a contenção
|
|
89
|
+
// pega dado não enumerado.
|
|
90
|
+
//
|
|
91
|
+
// `machineConsumers` nomeia os campos de CLASSE P (parâmetro de mecanismo,
|
|
92
|
+
// ADR-027 Decisão 4): personalização que alimenta um veto de máquina. O
|
|
93
|
+
// reconhecimento é por grep, não por julgamento — um campo P sem consumidor
|
|
94
|
+
// rastreável é erro de declaração.
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
const layers = [
|
|
97
|
+
{
|
|
98
|
+
id: 'voice-dna',
|
|
99
|
+
level: 'transversal',
|
|
100
|
+
glob: 'knowledge/voice-dna/**',
|
|
101
|
+
description:
|
|
102
|
+
'DNA de voz: do dono (voice-dna.yaml) e de terceiros extraídos pelo mind-extractor ({slug}-dna.yaml). ' +
|
|
103
|
+
'Nenhum dos dois é publicável — o de terceiro é dado pessoal de OUTRA pessoa.',
|
|
104
|
+
instancePath: 'knowledge/voice-dna/voice-dna.yaml',
|
|
105
|
+
allowNonExample: [
|
|
106
|
+
{
|
|
107
|
+
path: 'knowledge/voice-dna/README.md',
|
|
108
|
+
rule: 'mechanism-doc',
|
|
109
|
+
reason:
|
|
110
|
+
'Explica o MECANISMO (o que é o DNA, como o pod o consome, como instanciar). É autossuficiente ' +
|
|
111
|
+
'por exigência do ADR-027 Decisão 6: `docs/` NÃO entra em package.json.files, então delegar a ' +
|
|
112
|
+
'explicação a docs/mecanismos/ produziria doc inalcançável na instalação. Coberto apenas pela ' +
|
|
113
|
+
'ENUMERAÇÃO — declarado, não escondido.',
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
machineConsumers: [],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: 'dono-do-pod',
|
|
120
|
+
level: 'pod',
|
|
121
|
+
glob: 'pods/*/knowledge/dono*.yaml',
|
|
122
|
+
description:
|
|
123
|
+
'Configuração de dono por pod (ADR-010): trio de atribuição (nome/handle/autoridade) + guia de estilo ' +
|
|
124
|
+
'(degrau 2 da escada ADR-013).',
|
|
125
|
+
instancePath: 'pods/{pod}/knowledge/dono.yaml',
|
|
126
|
+
allowNonExample: [],
|
|
127
|
+
machineConsumers: [
|
|
128
|
+
{
|
|
129
|
+
field: 'dono.voz.lexico_proibido',
|
|
130
|
+
consumer: 'scripts/veto-checks/lexical-check.cjs',
|
|
131
|
+
class: 'P',
|
|
132
|
+
floor: ['—', '–'],
|
|
133
|
+
floorOrigin:
|
|
134
|
+
'achado R5/SF7.2 (em-dash/en-dash como "tell" de IA) — é fato do framework, não gosto do dono; ' +
|
|
135
|
+
'descer abaixo do piso exige atribuição explícita (padrão memoryCost.acceptedBy), subir é livre.',
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
id: 'exemplos-do-pod',
|
|
141
|
+
level: 'pod',
|
|
142
|
+
glob: 'pods/*/examples/**',
|
|
143
|
+
description:
|
|
144
|
+
'PREVENTIVO (SF12.1, 2ª rodada — exigência do dono). Um `examples/` autorado é o caminho por onde ' +
|
|
145
|
+
'OPINIÃO e POSICIONAMENTO do dono chegam à instalação de terceiros sem passar por nenhum gate: o ' +
|
|
146
|
+
'agente lê o exemplo como referência de padrão e imita o ASSUNTO junto com a FORMA. A régua do dono: ' +
|
|
147
|
+
'"como isso é opinião e não regra ou comportamento do framework, então não deve ir pra instalação ' +
|
|
148
|
+
'padrão". Logo, exemplo publicado é ESQUELETO marcado (`*.example.*` + sentinela), nunca peça pronta. ' +
|
|
149
|
+
'Isto NÃO detecta opinião (não existe gramática sintática para opinião, mesma doutrina do ADR-027 ' +
|
|
150
|
+
'Decisão 3) — ele fecha o CANAL por onde ela passava, que é o que a máquina consegue garantir.',
|
|
151
|
+
instancePath: 'pods/{pod}/examples/',
|
|
152
|
+
allowNonExample: [
|
|
153
|
+
{
|
|
154
|
+
path: 'pods/*/examples/README.md',
|
|
155
|
+
rule: 'mechanism-doc',
|
|
156
|
+
reason: 'Índice do diretório: diz o que cada exemplo é e como usar. Coberto pela enumeração.',
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
machineConsumers: [],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
id: 'memoria-do-pod',
|
|
163
|
+
level: 'pod',
|
|
164
|
+
glob: 'pods/*/memory/**',
|
|
165
|
+
description:
|
|
166
|
+
'3ª camada — conhecimento GERADO pelo uso (ADR-027 Decisão 9). O template já shippa o slot vazio com o ' +
|
|
167
|
+
'mecanismo intacto; o que faltava era a guarda de regressão que impede um learnings real (atribuído ao ' +
|
|
168
|
+
'dono) de chegar ao pacote.',
|
|
169
|
+
instancePath: 'pods/{pod}/memory/',
|
|
170
|
+
allowNonExample: [
|
|
171
|
+
{
|
|
172
|
+
path: 'pods/*/memory/README.md',
|
|
173
|
+
rule: 'mechanism-doc',
|
|
174
|
+
reason: 'Descreve o contrato do store de memória do pod; não carrega conteúdo aprendido.',
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
path: 'pods/*/memory/learnings.jsonl',
|
|
178
|
+
rule: 'empty',
|
|
179
|
+
reason:
|
|
180
|
+
'Log cru append-only. O template distribui o SLOT, nunca o conteúdo: qualquer byte aqui é ' +
|
|
181
|
+
'experiência de uma instância vazando para o pacote.',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
path: 'pods/*/memory/learnings.consolidated.md',
|
|
185
|
+
rule: 'no-heuristics',
|
|
186
|
+
reason:
|
|
187
|
+
'Consolidado curado. O template distribui só o CABEÇALHO funcional; qualquer heurística (linha ' +
|
|
188
|
+
'`- **[gatilho]** …`, formato de pod-memory.cjs:731/741) é conhecimento de instância.',
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
machineConsumers: [],
|
|
192
|
+
},
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
// 2) ENUMERAÇÃO — padrões de dado pessoal JÁ CLASSIFICADOS.
|
|
197
|
+
//
|
|
198
|
+
// Régua (Decisão 8 do pré-épico SF12): um padrão entra aqui quando é uma
|
|
199
|
+
// CARACTERÍSTICA DO DONO que direcionaria o comportamento a objetivos pessoais
|
|
200
|
+
// dele. Identidade de PUBLICAÇÃO não entra — `@daniellins/power-claude` é decisão
|
|
201
|
+
// de produto da SF11.9 e está nos 7 usos legítimos de `bin/cli.js`; incluí-la
|
|
202
|
+
// quebraria toda invocação do CLI sem proteger ninguém.
|
|
203
|
+
//
|
|
204
|
+
// ┌─ LEIA ANTES DE ACRESCENTAR UM PADRÃO DE NOME PRÓPRIO ────────────────────┐
|
|
205
|
+
// │ **VARRER POR NOME DO DONO FOI APOSENTADO COMO PROXY** (decisão dele, │
|
|
206
|
+
// │ 2026-08-05, ADR-027 Emenda 2). O alvo NÃO é o nome — é a OPINIÃO. │
|
|
207
|
+
// │ │
|
|
208
|
+
// │ *"Como criador do framework, não teria problema eu ser citado em algum │
|
|
209
|
+
// │ local. Esse é o menor dos problemas. O problema é uma preferência │
|
|
210
|
+
// │ minha atrapalhar o resultado de outra pessoa que usa o framework."* │
|
|
211
|
+
// │ │
|
|
212
|
+
// │ Existem HOJE ~25 arquivos publicados que citam o dono pelo primeiro nome │
|
|
213
|
+
// │ (`\bDaniel\b`) — em atribuição de regra ("Restrição inegociável", │
|
|
214
|
+
// │ "PARA no Daniel"), em fixtures (`id: 'daniel'`) e em crédito de autoria. │
|
|
215
|
+
// │ **Eles FICAM, por decisão explícita.** Não são defeito, não são dívida, │
|
|
216
|
+
// │ e uma varredura por nome vai reencontrá-los todos. │
|
|
217
|
+
// │ │
|
|
218
|
+
// │ Acrescentar `Daniel` (ou qualquer primeiro nome) a esta lista reprovaria │
|
|
219
|
+
// │ os 25 e faria alguém "consertar" o que o dono decidiu manter — desfazendo│
|
|
220
|
+
// │ uma decisão dele achando que está limpando. O que se varre é opinião │
|
|
221
|
+
// │ (`docs/mecanismos/dono-parametrizado.md`, régua T4), e opinião não tem │
|
|
222
|
+
// │ gramática sintática: o instrumento contra ela é a CONTENÇÃO da camada, │
|
|
223
|
+
// │ não a enumeração. │
|
|
224
|
+
// └──────────────────────────────────────────────────────────────────────────┘
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
const patterns = [
|
|
227
|
+
{
|
|
228
|
+
role: 'nome-civil',
|
|
229
|
+
pattern: 'Daniel Lins',
|
|
230
|
+
description:
|
|
231
|
+
'Nome civil do dono. Cobre "Daniel Lins da Silva" por substring. Autoria legítima na raiz ' +
|
|
232
|
+
'(LICENSE/package.json/README.md) está na allowlist.',
|
|
233
|
+
origin: 'Incidente @daniellins/power-claude@0.16.0 (CHANGELOG.md, §"Incidente pós-publicação") — 6 dos 9 arquivos.',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
role: 'slug',
|
|
237
|
+
pattern: 'daniel-lins',
|
|
238
|
+
description: 'Slug hifenizado do nome — cobre nome de ARQUIVO (ex.: o `<slug>-voice-dna.yaml` removido por esta story).',
|
|
239
|
+
origin: 'Incidente 0.16.0 + achado da auditoria SF12.1: 4 referências cruzadas hardcodavam esse nome de arquivo.',
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
role: 'path-maquina',
|
|
243
|
+
pattern: '/Users/daniellinsdasilva',
|
|
244
|
+
description: 'Path da máquina pessoal do dono — vaza estrutura de diretórios locais e o username do SO.',
|
|
245
|
+
origin: 'Incidente 0.16.0 (template/knowledge/voice-dna/README.md citava o path do corpus).',
|
|
246
|
+
},
|
|
247
|
+
];
|
|
248
|
+
|
|
249
|
+
// ---------------------------------------------------------------------------
|
|
250
|
+
// 3) ALLOWLIST da ENUMERAÇÃO — por PATH EXATO, nunca por padrão genérico.
|
|
251
|
+
//
|
|
252
|
+
// Por que existe (AC2): este próprio arquivo CONTÉM os literais perigosos (é a
|
|
253
|
+
// lista deles) e é publicado (`scripts/` está em package.json.files) — sem a
|
|
254
|
+
// allowlist, o oráculo se autoderrota. A allowlist é restrita a paths exatos
|
|
255
|
+
// para não virar escotilha: um arquivo NOVO com o mesmo conteúdo continua sendo
|
|
256
|
+
// reprovado (kill-test do AC2).
|
|
257
|
+
// ---------------------------------------------------------------------------
|
|
258
|
+
const enumerationAllowlist = [
|
|
259
|
+
{
|
|
260
|
+
path: 'LICENSE',
|
|
261
|
+
reason: 'Autoria legítima. Sempre incluído pelo npm, não controlável por package.json.files.',
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
path: 'package.json',
|
|
265
|
+
reason: 'Campo `author` + nome do escopo npm. Sempre incluído pelo npm.',
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
path: 'README.md',
|
|
269
|
+
reason: 'Página do npm; a atribuição de licença é autoria legítima. Sempre incluído pelo npm.',
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
path: 'scripts/owner-layer.cjs',
|
|
273
|
+
reason: 'ESTE arquivo — é a declaração dos padrões, logo contém todos eles. AC2.',
|
|
274
|
+
},
|
|
275
|
+
];
|
|
276
|
+
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
// Helpers de path/glob. Suporte mínimo e explícito: `*` (um segmento, sem `/`)
|
|
279
|
+
// e `**` (qualquer número de segmentos). Nada de regex arbitrária no manifesto —
|
|
280
|
+
// a fronteira precisa ser legível em `git diff`.
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
function globToRegExp(glob) {
|
|
283
|
+
let out = '^';
|
|
284
|
+
for (let i = 0; i < glob.length; i++) {
|
|
285
|
+
const c = glob[i];
|
|
286
|
+
if (c === '*') {
|
|
287
|
+
if (glob[i + 1] === '*') {
|
|
288
|
+
out += '.*';
|
|
289
|
+
i++;
|
|
290
|
+
if (glob[i + 1] === '/') i++; // `**/` casa também com zero segmentos
|
|
291
|
+
} else {
|
|
292
|
+
out += '[^/]*';
|
|
293
|
+
}
|
|
294
|
+
} else if ('\\^$.|?+()[]{}'.includes(c)) {
|
|
295
|
+
out += `\\${c}`;
|
|
296
|
+
} else {
|
|
297
|
+
out += c;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return new RegExp(`${out}$`);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** Path do glob da camada projetado na raiz do repo (`template/…`). */
|
|
304
|
+
function layerGlobInRepo(layer) {
|
|
305
|
+
return `template/${layer.glob}`;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/** Remove o prefixo `package/` que o `npm pack` adiciona a todo path do tarball. */
|
|
309
|
+
function stripPackagePrefix(p) {
|
|
310
|
+
return p.startsWith('package/') ? p.slice('package/'.length) : p;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function isExampleFile(logicalPath) {
|
|
314
|
+
return /\.example\./.test(logicalPath.split('/').pop());
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
function hasSentinel(content) {
|
|
318
|
+
if (content.includes(SENTINEL_COMMENT)) return true;
|
|
319
|
+
return SENTINEL_YAML_RE.test(content);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function layerOf(logicalPath) {
|
|
323
|
+
return layers.find((l) => globToRegExp(layerGlobInRepo(l)).test(logicalPath)) || null;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
function allowedNonExampleEntry(layer, logicalPath) {
|
|
327
|
+
const rel = logicalPath.replace(/^template\//, '');
|
|
328
|
+
return layer.allowNonExample.find((e) => globToRegExp(e.path).test(rel)) || null;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const NON_EXAMPLE_RULES = {
|
|
332
|
+
'mechanism-doc': () => null,
|
|
333
|
+
empty: (content) => (content.trim() === '' ? null : 'arquivo deveria ser vazio (slot, não conteúdo)'),
|
|
334
|
+
'no-heuristics': (content) => {
|
|
335
|
+
const hits = content.split(/\r?\n/).filter((l) => /^- \*\*\[/.test(l));
|
|
336
|
+
return hits.length === 0 ? null : `contém ${hits.length} heurística(s) consolidada(s): ${hits[0].slice(0, 80)}`;
|
|
337
|
+
},
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
// ---------------------------------------------------------------------------
|
|
341
|
+
// ORÁCULO 1 — CONTENÇÃO (AC12).
|
|
342
|
+
// `files`: [{ path, content }] com path LÓGICO (sem o prefixo `package/`).
|
|
343
|
+
// ---------------------------------------------------------------------------
|
|
344
|
+
function scanContainment(files) {
|
|
345
|
+
const violations = [];
|
|
346
|
+
for (const f of files) {
|
|
347
|
+
const layer = layerOf(f.path);
|
|
348
|
+
if (!layer) continue;
|
|
349
|
+
if (isExampleFile(f.path)) {
|
|
350
|
+
if (!hasSentinel(f.content)) {
|
|
351
|
+
violations.push({
|
|
352
|
+
path: f.path,
|
|
353
|
+
layer: layer.id,
|
|
354
|
+
reason: `placeholder SEM sentinela (esperado "${SENTINEL_COMMENT}" em comentário ou "placeholder: true" sob meta:)`,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
const allowed = allowedNonExampleEntry(layer, f.path);
|
|
360
|
+
if (!allowed) {
|
|
361
|
+
violations.push({
|
|
362
|
+
path: f.path,
|
|
363
|
+
layer: layer.id,
|
|
364
|
+
reason:
|
|
365
|
+
'arquivo dentro da camada do dono que NÃO é `*.example.*` e não está declarado em `allowNonExample` ' +
|
|
366
|
+
`da camada "${layer.id}"`,
|
|
367
|
+
});
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
const rule = NON_EXAMPLE_RULES[allowed.rule];
|
|
371
|
+
if (!rule) {
|
|
372
|
+
violations.push({ path: f.path, layer: layer.id, reason: `regra desconhecida no manifesto: "${allowed.rule}"` });
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
const problem = rule(f.content);
|
|
376
|
+
if (problem) {
|
|
377
|
+
violations.push({ path: f.path, layer: layer.id, reason: `regra "${allowed.rule}": ${problem}` });
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return violations;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// ---------------------------------------------------------------------------
|
|
384
|
+
// ORÁCULO 2 — ENUMERAÇÃO (AC1/AC9).
|
|
385
|
+
// ---------------------------------------------------------------------------
|
|
386
|
+
function isAllowlisted(logicalPath) {
|
|
387
|
+
return enumerationAllowlist.some((e) => e.path === logicalPath);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Padrão por PAPEL (`nome-civil` | `slug` | `path-maquina`).
|
|
392
|
+
* Existe para que consumidores — em especial o próprio teste — refiram os
|
|
393
|
+
* literais perigosos SEM os escrever: qualquer arquivo publicado que os escreva
|
|
394
|
+
* literalmente precisaria entrar na allowlist, alargando a fronteira. Referir
|
|
395
|
+
* por papel mantém a allowlist restrita aos 4 paths do AC2.
|
|
396
|
+
*/
|
|
397
|
+
function patternByRole(role) {
|
|
398
|
+
const found = patterns.find((p) => p.role === role);
|
|
399
|
+
if (!found) throw new Error(`owner-layer: nenhum padrão com role "${role}"`);
|
|
400
|
+
return found.pattern;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
function scanEnumeration(files) {
|
|
404
|
+
const violations = [];
|
|
405
|
+
for (const f of files) {
|
|
406
|
+
if (isAllowlisted(f.path)) continue;
|
|
407
|
+
const lines = f.content.split(/\r?\n/);
|
|
408
|
+
for (const p of patterns) {
|
|
409
|
+
lines.forEach((line, idx) => {
|
|
410
|
+
if (line.includes(p.pattern)) {
|
|
411
|
+
violations.push({
|
|
412
|
+
path: f.path,
|
|
413
|
+
pattern: p.pattern,
|
|
414
|
+
line: idx + 1,
|
|
415
|
+
excerpt: line.trim().slice(0, 120),
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return violations;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
module.exports = {
|
|
425
|
+
FICTIONAL_IDENTITY,
|
|
426
|
+
SENTINEL_COMMENT,
|
|
427
|
+
layers,
|
|
428
|
+
patterns,
|
|
429
|
+
enumerationAllowlist,
|
|
430
|
+
// helpers expostos para os testes e para quem implementar a Frente 4
|
|
431
|
+
globToRegExp,
|
|
432
|
+
layerGlobInRepo,
|
|
433
|
+
stripPackagePrefix,
|
|
434
|
+
isExampleFile,
|
|
435
|
+
hasSentinel,
|
|
436
|
+
layerOf,
|
|
437
|
+
isAllowlisted,
|
|
438
|
+
patternByRole,
|
|
439
|
+
// oráculos
|
|
440
|
+
scanContainment,
|
|
441
|
+
scanEnumeration,
|
|
442
|
+
};
|