@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.

Files changed (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +121 -0
  3. package/bin/cli.js +124 -0
  4. package/installer/__tests__/doctor-ready-oracles.test.cjs +140 -0
  5. package/installer/__tests__/merge-settings.test.cjs +330 -0
  6. package/installer/adopt.js +161 -0
  7. package/installer/copy.js +203 -0
  8. package/installer/doctor.js +266 -0
  9. package/installer/install.js +155 -0
  10. package/installer/manifest.js +102 -0
  11. package/installer/motor-scripts.js +50 -0
  12. package/installer/motor-scripts.json +39 -0
  13. package/installer/uninstall.js +99 -0
  14. package/installer/update.js +376 -0
  15. package/installer/util.js +113 -0
  16. package/installer/wizard.js +64 -0
  17. package/package.json +26 -0
  18. package/scripts/__fixtures__/anti-path-demo/agents/ap-writer.md +13 -0
  19. package/scripts/__fixtures__/anti-path-demo/templates/write-tmpl.md +7 -0
  20. package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.smoke.json +10 -0
  21. package/scripts/__fixtures__/anti-path-demo/workflows/wf-ap.yaml +25 -0
  22. package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/agents/content-chief.md +1 -0
  23. package/scripts/__fixtures__/assess-tier/retrofit-leve/pod/workflows/wf-criacao-redteam.yaml +3 -0
  24. package/scripts/__fixtures__/assess-tier/retrofit-leve/pod-spec.json +13 -0
  25. package/scripts/__fixtures__/fidelity/fake-green-average-in-band.yaml +21 -0
  26. package/scripts/__fixtures__/fidelity/fake-green-average.yaml +18 -0
  27. package/scripts/__fixtures__/fidelity/fake-green-denominator.yaml +19 -0
  28. package/scripts/__fixtures__/fidelity/fake-green-missing-evidence.yaml +18 -0
  29. package/scripts/__fixtures__/fidelity/fake-green-threshold.yaml +18 -0
  30. package/scripts/__fixtures__/fidelity/fake-green-weight.yaml +18 -0
  31. package/scripts/__fixtures__/fidelity/golden.yaml +31 -0
  32. package/scripts/__fixtures__/fidelity/trindade-incoherent.yaml +15 -0
  33. package/scripts/__fixtures__/forge-canonical/pod-spec-example.json +37 -0
  34. package/scripts/__fixtures__/migrate-squad/authored/agents/offer-engineer.md +17 -0
  35. package/scripts/__fixtures__/migrate-squad/authored/knowledge/no-source.md +7 -0
  36. package/scripts/__fixtures__/migrate-squad/authored/knowledge/value-stack-method.md +8 -0
  37. package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.smoke.json +24 -0
  38. package/scripts/__fixtures__/migrate-squad/authored/specs/wf-sample.spec.json +45 -0
  39. package/scripts/__fixtures__/migrate-squad/legacy-squad/HEADLINE.md +3 -0
  40. package/scripts/__fixtures__/migrate-squad/legacy-squad/README.md +4 -0
  41. package/scripts/__fixtures__/migrate-squad/legacy-squad/agents/hormozi-offer.md +14 -0
  42. package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/dead-redundant.md +4 -0
  43. package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/method-guide.md +6 -0
  44. package/scripts/__fixtures__/migrate-squad/legacy-squad/checklists/veto-screen.md +4 -0
  45. package/scripts/__fixtures__/migrate-squad/legacy-squad/config/config.yaml +2 -0
  46. package/scripts/__fixtures__/migrate-squad/legacy-squad/data/case-library.md +3 -0
  47. package/scripts/__fixtures__/migrate-squad/legacy-squad/scripts/validate-mvn.py +16 -0
  48. package/scripts/__fixtures__/migrate-squad/legacy-squad/sops/sop-sample.md +3 -0
  49. package/scripts/__fixtures__/migrate-squad/legacy-squad/squad-io.yaml +14 -0
  50. package/scripts/__fixtures__/migrate-squad/legacy-squad/tasks/gather-context.md +7 -0
  51. package/scripts/__fixtures__/migrate-squad/legacy-squad/templates/output-tmpl.md +5 -0
  52. package/scripts/__fixtures__/migrate-squad/legacy-squad/workflows/wf-sample.yaml +24 -0
  53. package/scripts/__fixtures__/pipeline/pipelines/pipeline-checkpoint.yaml +21 -0
  54. package/scripts/__fixtures__/pipeline/pipelines/pipeline-demo.yaml +22 -0
  55. package/scripts/__fixtures__/pipeline/pods/pipe-a/agents/maker.md +13 -0
  56. package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.consolidated.md +8 -0
  57. package/scripts/__fixtures__/pipeline/pods/pipe-a/memory/learnings.jsonl +83 -0
  58. package/scripts/__fixtures__/pipeline/pods/pipe-a/templates/make-tmpl.md +8 -0
  59. package/scripts/__fixtures__/pipeline/pods/pipe-a/workflows/wf-a.yaml +16 -0
  60. package/scripts/__fixtures__/pipeline/pods/pipe-b/agents/user.md +13 -0
  61. package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.consolidated.md +8 -0
  62. package/scripts/__fixtures__/pipeline/pods/pipe-b/memory/learnings.jsonl +14 -0
  63. package/scripts/__fixtures__/pipeline/pods/pipe-b/templates/use-tmpl.md +6 -0
  64. package/scripts/__fixtures__/pipeline/pods/pipe-b/workflows/wf-b.yaml +16 -0
  65. package/scripts/__fixtures__/pod-run/agents/forge-chief.md +13 -0
  66. package/scripts/__fixtures__/pod-run/agents/pod-critic.md +13 -0
  67. package/scripts/__fixtures__/pod-run/templates/build-tmpl.md +8 -0
  68. package/scripts/__fixtures__/pod-run/templates/gate-tmpl.md +6 -0
  69. package/scripts/__fixtures__/pod-run/workflows/wf-min.yaml +43 -0
  70. package/scripts/__fixtures__/pod-run/workflows/wf-skip-modes.yaml +50 -0
  71. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-all-skippable.yaml +30 -0
  72. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-criteria-escalar-de-bloco.yaml +40 -0
  73. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-skip-mode-desconhecido.yaml +30 -0
  74. package/scripts/__fixtures__/pod-workflow/invalid-checkpoint-unknown-key.yaml +29 -0
  75. package/scripts/__fixtures__/pod-workflow/invalid-cycle.yaml +26 -0
  76. package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-backedge.yaml +29 -0
  77. package/scripts/__fixtures__/pod-workflow/invalid-fix-loop-forward.yaml +29 -0
  78. package/scripts/__fixtures__/pod-workflow/invalid-handoff-open.yaml +27 -0
  79. package/scripts/__fixtures__/pod-workflow/invalid-knowledge-shape.yaml +18 -0
  80. package/scripts/__fixtures__/pod-workflow/invalid-missing-agent.yaml +15 -0
  81. package/scripts/__fixtures__/pod-workflow/invalid-missing-outputs.yaml +15 -0
  82. package/scripts/__fixtures__/pod-workflow/invalid-missing-template.yaml +15 -0
  83. package/scripts/__fixtures__/pod-workflow/invalid-missing-veto.yaml +13 -0
  84. package/scripts/__fixtures__/pod-workflow/invalid-template-not-on-disk.yaml +16 -0
  85. package/scripts/__fixtures__/pod-workflow/invalid-veto-prose.yaml +17 -0
  86. package/scripts/__fixtures__/pod-workflow/knowledge/a.md +4 -0
  87. package/scripts/__fixtures__/pod-workflow/knowledge/b.md +4 -0
  88. package/scripts/__fixtures__/pod-workflow/knowledge/c.md +4 -0
  89. package/scripts/__fixtures__/pod-workflow/templates/step-tmpl.md +7 -0
  90. package/scripts/__fixtures__/pod-workflow/valid-checkpoint-skip-modes.yaml +29 -0
  91. package/scripts/__fixtures__/pod-workflow/valid-fix-loop.yaml +30 -0
  92. package/scripts/__fixtures__/pod-workflow/valid-knowledge.yaml +30 -0
  93. package/scripts/__fixtures__/pod-workflow/valid-veto-always-true.yaml +20 -0
  94. package/scripts/__fixtures__/pod-workflow/valid.yaml +27 -0
  95. package/scripts/__fixtures__/smoke-canary/agents/canary-reporter.md +13 -0
  96. package/scripts/__fixtures__/smoke-canary/agents/canary-researcher.md +13 -0
  97. package/scripts/__fixtures__/smoke-canary/agents/canary-synth.md +13 -0
  98. package/scripts/__fixtures__/smoke-canary/memory/learnings.consolidated.md +10 -0
  99. package/scripts/__fixtures__/smoke-canary/memory/learnings.jsonl +448 -0
  100. package/scripts/__fixtures__/smoke-canary/templates/report-tmpl.md +9 -0
  101. package/scripts/__fixtures__/smoke-canary/templates/research-tmpl.md +7 -0
  102. package/scripts/__fixtures__/smoke-canary/templates/synth-tmpl.md +9 -0
  103. package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.smoke.json +11 -0
  104. package/scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml +53 -0
  105. package/scripts/__fixtures__/source-audit/fake-green-bronze-unsignaled.yaml +10 -0
  106. package/scripts/__fixtures__/source-audit/fake-green-counts.yaml +9 -0
  107. package/scripts/__fixtures__/source-audit/fake-green-missing-evidence.yaml +9 -0
  108. package/scripts/__fixtures__/source-audit/fake-green-unclassified.yaml +10 -0
  109. package/scripts/__fixtures__/source-audit/fake-green-verdict.yaml +10 -0
  110. package/scripts/__fixtures__/source-audit/golden-blocked.yaml +10 -0
  111. package/scripts/__fixtures__/source-audit/golden.yaml +11 -0
  112. package/scripts/__fixtures__/sweep-forms/agents/forms-count.md +13 -0
  113. package/scripts/__fixtures__/sweep-forms/agents/forms-field.md +13 -0
  114. package/scripts/__fixtures__/sweep-forms/agents/forms-fileref.md +13 -0
  115. package/scripts/__fixtures__/sweep-forms/agents/forms-json.md +13 -0
  116. package/scripts/__fixtures__/sweep-forms/agents/forms-section.md +13 -0
  117. package/scripts/__fixtures__/sweep-forms/specs/wf-forms.spec.json +5 -0
  118. package/scripts/__fixtures__/sweep-forms/templates/t_count.md +5 -0
  119. package/scripts/__fixtures__/sweep-forms/templates/t_field.md +3 -0
  120. package/scripts/__fixtures__/sweep-forms/templates/t_fileref.md +3 -0
  121. package/scripts/__fixtures__/sweep-forms/templates/t_json.md +0 -0
  122. package/scripts/__fixtures__/sweep-forms/templates/t_section.md +3 -0
  123. package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.smoke.json +13 -0
  124. package/scripts/__fixtures__/sweep-forms/workflows/wf-forms.yaml +67 -0
  125. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-1-noop-state-json.fixture.md +18 -0
  126. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-2-crash-buildworkflowyaml.fixture.md +26 -0
  127. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-3-nasce-verde-skip-modes.fixture.md +29 -0
  128. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-4-guarda-sem-irmao.fixture.md +17 -0
  129. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5a-diff-stat-sem-guarda.fixture.md +17 -0
  130. package/scripts/__fixtures__/validate-story-acs-corpus/corpus-5b-test-f-sobre-diretorio.fixture.md +20 -0
  131. package/scripts/__fixtures__/veto-checks/copy-clean.md +4 -0
  132. package/scripts/__fixtures__/veto-checks/copy-dashes.md +4 -0
  133. package/scripts/__fixtures__/veto-checks/n8n-bad.md +18 -0
  134. package/scripts/__fixtures__/veto-checks/n8n-ok.md +22 -0
  135. package/scripts/__fixtures__/veto-checks/page-bad.html +7 -0
  136. package/scripts/__fixtures__/veto-checks/phash/copy.png +0 -0
  137. package/scripts/__fixtures__/veto-checks/phash/distinct.png +0 -0
  138. package/scripts/__fixtures__/veto-checks/phash/distinct2.png +0 -0
  139. package/scripts/__fixtures__/veto-checks/phash/make-fixtures.cjs +203 -0
  140. package/scripts/__fixtures__/veto-checks/phash/ref.png +0 -0
  141. package/scripts/__fixtures__/veto-checks/slide-ok.html +15 -0
  142. package/scripts/__fixtures__/veto-checks/slide-overflow.html +14 -0
  143. package/scripts/__fixtures__/veto-checks/sweep-pod/agents/vc-checker.md +13 -0
  144. package/scripts/__fixtures__/veto-checks/sweep-pod/templates/check-tmpl.md +6 -0
  145. package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.smoke.json +10 -0
  146. package/scripts/__fixtures__/veto-checks/sweep-pod/workflows/wf-vc.yaml +19 -0
  147. package/scripts/__fixtures__/voz-do-dono/README.md +23 -0
  148. package/scripts/__fixtures__/voz-do-dono/dono-escalar.yaml +9 -0
  149. package/scripts/__fixtures__/voz-do-dono/dono-guia.yaml +10 -0
  150. package/scripts/__fixtures__/voz-do-dono/peca-3a-pessoa.md +6 -0
  151. package/scripts/__fixtures__/voz-do-dono/peca-com-lexico-proibido.md +6 -0
  152. package/scripts/__fixtures__/voz-do-dono/peca-limpa-1a-pessoa.md +6 -0
  153. package/scripts/__tests__/derive-ready-transitions.test.cjs +269 -0
  154. package/scripts/__tests__/enforce-cycle-authority.test.cjs +869 -0
  155. package/scripts/__tests__/enforce-git-push-authority.test.cjs +701 -0
  156. package/scripts/__tests__/enforce-ready-oracles.test.cjs +745 -0
  157. package/scripts/__tests__/motor-scripts.test.cjs +339 -0
  158. package/scripts/__tests__/pc-run-pod-counter.test.cjs +58 -0
  159. package/scripts/__tests__/pc-run-pod.test.cjs +578 -0
  160. package/scripts/__tests__/validate-pod-workflow.test.cjs +90 -0
  161. package/scripts/__tests__/validate-story-acs.test.cjs +607 -0
  162. package/scripts/anti-path.test.cjs +163 -0
  163. package/scripts/arena.cjs +514 -0
  164. package/scripts/arena.test.cjs +213 -0
  165. package/scripts/brief-leitura-obrigatoria.test.cjs +364 -0
  166. package/scripts/consolidate-knowledge-runner.test.cjs +249 -0
  167. package/scripts/default-funcional.test.cjs +153 -0
  168. package/scripts/derive-ready-transitions.cjs +325 -0
  169. package/scripts/forge-additive.test.cjs +158 -0
  170. package/scripts/forge-assess-tier.cjs +205 -0
  171. package/scripts/forge-assess-tier.test.cjs +114 -0
  172. package/scripts/forge-canonical.test.cjs +624 -0
  173. package/scripts/forge-generate.cjs +1303 -0
  174. package/scripts/forge-harden-learning.cjs +921 -0
  175. package/scripts/forge-harden-learning.test.cjs +242 -0
  176. package/scripts/forge-ingest-memory.cjs +136 -0
  177. package/scripts/forge-upgrade-pod.cjs +368 -0
  178. package/scripts/forge.test.cjs +609 -0
  179. package/scripts/harden-knowledge.test.cjs +612 -0
  180. package/scripts/harness-g5-lite.cjs +243 -0
  181. package/scripts/harness-g5-lite.test.cjs +134 -0
  182. package/scripts/hn-carousel-contrato-entrada.test.cjs +96 -0
  183. package/scripts/migrate-squad-orchestration.test.cjs +146 -0
  184. package/scripts/migration-manifest-sf3.2.test.cjs +382 -0
  185. package/scripts/migration-manifest-sf3.3.test.cjs +170 -0
  186. package/scripts/migration-manifest-sf5.5.test.cjs +189 -0
  187. package/scripts/migration-manifest.cjs +1146 -0
  188. package/scripts/migration-manifest.test.cjs +186 -0
  189. package/scripts/npm-scope-invocation.test.cjs +194 -0
  190. package/scripts/owner-layer.cjs +442 -0
  191. package/scripts/owner-layer.test.cjs +358 -0
  192. package/scripts/pc-run-pipeline.cjs +289 -0
  193. package/scripts/pc-run-pipeline.test.cjs +256 -0
  194. package/scripts/pc-run-pod-countgte.test.cjs +66 -0
  195. package/scripts/pc-run-pod.cjs +1355 -0
  196. package/scripts/phash-gate.test.cjs +433 -0
  197. package/scripts/pod-export-compile.cjs +487 -0
  198. package/scripts/pod-export-compile.test.cjs +312 -0
  199. package/scripts/pod-export-executor.cjs +678 -0
  200. package/scripts/pod-export-executor.test.cjs +1341 -0
  201. package/scripts/pod-export-hardening.test.cjs +531 -0
  202. package/scripts/pod-export-postprocess.cjs +427 -0
  203. package/scripts/pod-export-postprocess.test.cjs +558 -0
  204. package/scripts/pod-export-queue-race.test.cjs +865 -0
  205. package/scripts/pod-export-release.cjs +473 -0
  206. package/scripts/pod-export-release.test.cjs +267 -0
  207. package/scripts/pod-export-service.cjs +1297 -0
  208. package/scripts/pod-export-service.test.cjs +489 -0
  209. package/scripts/pod-export-tools.cjs +470 -0
  210. package/scripts/pod-export-ui.cjs +805 -0
  211. package/scripts/pod-export-ui.test.cjs +301 -0
  212. package/scripts/pod-memory-budget.test.cjs +309 -0
  213. package/scripts/pod-memory-note.cjs +357 -0
  214. package/scripts/pod-memory-note.test.cjs +452 -0
  215. package/scripts/pod-memory.cjs +1252 -0
  216. package/scripts/pod-memory.test.cjs +951 -0
  217. package/scripts/render-png.test.cjs +307 -0
  218. package/scripts/smoke-isolation.test.cjs +100 -0
  219. package/scripts/smoke-pod-workflow.cjs +755 -0
  220. package/scripts/smoke-sweep.test.cjs +170 -0
  221. package/scripts/validate-adopt.js +235 -0
  222. package/scripts/validate-branding.js +84 -0
  223. package/scripts/validate-budgets.js +140 -0
  224. package/scripts/validate-fidelity-output.cjs +267 -0
  225. package/scripts/validate-fidelity-output.test.cjs +101 -0
  226. package/scripts/validate-install.js +230 -0
  227. package/scripts/validate-no-clone.cjs +220 -0
  228. package/scripts/validate-no-clone.test.cjs +77 -0
  229. package/scripts/validate-pipeline.cjs +145 -0
  230. package/scripts/validate-pod-workflow.cjs +878 -0
  231. package/scripts/validate-source-audit.cjs +170 -0
  232. package/scripts/validate-source-audit.test.cjs +90 -0
  233. package/scripts/validate-story-acs.cjs +862 -0
  234. package/scripts/validate-update-scope-motor.js +421 -0
  235. package/scripts/veto-checks/html-valid.cjs +92 -0
  236. package/scripts/veto-checks/lexical-check.cjs +62 -0
  237. package/scripts/veto-checks/phash-gate.cjs +589 -0
  238. package/scripts/veto-checks/render-gate.cjs +165 -0
  239. package/scripts/veto-checks/render-png.cjs +358 -0
  240. package/scripts/veto-checks.test.cjs +219 -0
  241. package/scripts/watcher-audit.cjs +178 -0
  242. package/template/.claude/CLAUDE.md +103 -0
  243. package/template/.claude/agents/pc-analyst.md +100 -0
  244. package/template/.claude/agents/pc-architect.md +32 -0
  245. package/template/.claude/agents/pc-dev.md +27 -0
  246. package/template/.claude/agents/pc-devops.md +45 -0
  247. package/template/.claude/agents/pc-planner.md +32 -0
  248. package/template/.claude/agents/pc-po.md +25 -0
  249. package/template/.claude/agents/pc-qa.md +25 -0
  250. package/template/.claude/commands/power/academy.md +9 -0
  251. package/template/.claude/commands/power/automation.md +9 -0
  252. package/template/.claude/commands/power/content-carousel.md +267 -0
  253. package/template/.claude/commands/power/content.md +9 -0
  254. package/template/.claude/commands/power/dev.md +9 -0
  255. package/template/.claude/commands/power/forge.md +224 -0
  256. package/template/.claude/commands/power/hormozi.md +221 -0
  257. package/template/.claude/commands/power/modo.md +57 -0
  258. package/template/.claude/hooks/README.md +114 -0
  259. package/template/.claude/hooks/context-budget.cjs +64 -0
  260. package/template/.claude/hooks/enforce-cycle-authority.cjs +457 -0
  261. package/template/.claude/hooks/enforce-git-push-authority.cjs +925 -0
  262. package/template/.claude/hooks/enforce-ready-oracles.cjs +502 -0
  263. package/template/.claude/rules/authority.md +76 -0
  264. package/template/.claude/rules/curadoria-de-conhecimento.md +30 -0
  265. package/template/.claude/rules/model-matrix.md +34 -0
  266. package/template/.claude/rules/orchestration.md +133 -0
  267. package/template/.claude/settings.json +50 -0
  268. package/template/.claude/skills/pc-apply-qa-fixes/SKILL.md +108 -0
  269. package/template/.claude/skills/pc-apply-qa-fixes/references/fix-loop.md +40 -0
  270. package/template/.claude/skills/pc-apply-qa-fixes/references/fix-request-template.md +70 -0
  271. package/template/.claude/skills/pc-arena/SKILL.md +96 -0
  272. package/template/.claude/skills/pc-close-story/SKILL.md +105 -0
  273. package/template/.claude/skills/pc-commit/SKILL.md +108 -0
  274. package/template/.claude/skills/pc-develop-story/SKILL.md +116 -0
  275. package/template/.claude/skills/pc-full-cycle/SKILL.md +150 -0
  276. package/template/.claude/skills/pc-pipeline/SKILL.md +63 -0
  277. package/template/.claude/skills/pc-pipeline/references/gate-templates.md +46 -0
  278. package/template/.claude/skills/pc-review-story/SKILL.md +129 -0
  279. package/template/.claude/skills/pc-review-story/references/false-positive-detection.md +50 -0
  280. package/template/.claude/skills/pc-review-story/references/nfr-assess.md +47 -0
  281. package/template/.claude/skills/pc-review-story/references/risk-profile.md +75 -0
  282. package/template/.claude/skills/pc-review-story/references/security-checklist.md +69 -0
  283. package/template/.claude/skills/pc-review-story/references/test-design.md +37 -0
  284. package/template/.claude/skills/pc-review-story/references/trace-requirements.md +46 -0
  285. package/template/.claude/skills/pc-run-pod/SKILL.md +123 -0
  286. package/template/.claude/skills/pc-validate-story/SKILL.md +114 -0
  287. package/template/.claude/skills/pc-wave/SKILL.md +133 -0
  288. package/template/.env.example +10 -0
  289. package/template/knowledge/analyst/brainstorming.md +40 -0
  290. package/template/knowledge/analyst/brief-skeleton.md +32 -0
  291. package/template/knowledge/analyst/competitor-skeleton.md +39 -0
  292. package/template/knowledge/analyst/elicitation-menu.md +49 -0
  293. package/template/knowledge/analyst/market-research-skeleton.md +36 -0
  294. package/template/knowledge/analyst/research-prompt-structure.md +48 -0
  295. package/template/knowledge/analyst/roi-skeleton.md +51 -0
  296. package/template/knowledge/voice-dna/README.md +99 -0
  297. package/template/knowledge/voice-dna/voice-dna.example.yaml +157 -0
  298. package/template/pods/README.md +64 -0
  299. package/template/pods/academy/README.md +37 -0
  300. package/template/pods/academy/agents/academy-chief.md +27 -0
  301. package/template/pods/academy/examples/palestra.example.md +142 -0
  302. package/template/pods/academy/pod-spec.json +44 -0
  303. package/template/pods/academy/templates/materiais-tmpl.md +17 -0
  304. package/template/pods/academy/templates/revisao-didatica-tmpl.md +20 -0
  305. package/template/pods/academy/workflows/wf-materiais-revisao.yaml +30 -0
  306. package/template/pods/authority-content/README.md +43 -0
  307. package/template/pods/authority-content/agents/content-chief.md +28 -0
  308. package/template/pods/authority-content/pod-spec.json +45 -0
  309. package/template/pods/authority-content/templates/criacao-na-voz-tmpl.md +17 -0
  310. package/template/pods/authority-content/templates/red-team-factual-tmpl.md +23 -0
  311. package/template/pods/authority-content/workflows/wf-criacao-redteam.yaml +30 -0
  312. package/template/pods/automation/README.md +37 -0
  313. package/template/pods/automation/agents/langgraph-architect.md +30 -0
  314. package/template/pods/automation/agents/n8n-architect.md +30 -0
  315. package/template/pods/automation/examples/README.md +46 -0
  316. package/template/pods/automation/examples/n8n-content-radar.example.json +380 -0
  317. package/template/pods/automation/knowledge/langgraph-patterns.md +126 -0
  318. package/template/pods/automation/knowledge/n8n-patterns.md +131 -0
  319. package/template/pods/automation/memory/README.md +16 -0
  320. package/template/pods/automation/memory/learnings.consolidated.md +8 -0
  321. package/template/pods/automation/memory/learnings.jsonl +0 -0
  322. package/template/pods/automation/pod-spec.json +109 -0
  323. package/template/pods/automation/specs/wf-langgraph-build.spec.json +107 -0
  324. package/template/pods/automation/squad-io.yaml +28 -0
  325. package/template/pods/automation/templates/lg-build-tmpl.md +17 -0
  326. package/template/pods/automation/templates/lg-design-tmpl.md +23 -0
  327. package/template/pods/automation/templates/lg-discover-tmpl.md +20 -0
  328. package/template/pods/automation/templates/lg-handoff-tmpl.md +20 -0
  329. package/template/pods/automation/templates/lg-test-tmpl.md +20 -0
  330. package/template/pods/automation/templates/n8n-build-tmpl.md +14 -0
  331. package/template/pods/automation/templates/n8n-design-tmpl.md +23 -0
  332. package/template/pods/automation/templates/n8n-discover-tmpl.md +20 -0
  333. package/template/pods/automation/templates/n8n-handoff-tmpl.md +20 -0
  334. package/template/pods/automation/templates/n8n-test-tmpl.md +20 -0
  335. package/template/pods/automation/workflows/wf-langgraph-build.smoke.json +11 -0
  336. package/template/pods/automation/workflows/wf-langgraph-build.yaml +64 -0
  337. package/template/pods/automation/workflows/wf-n8n-build.smoke.json +11 -0
  338. package/template/pods/automation/workflows/wf-n8n-build.yaml +65 -0
  339. package/template/pods/content-carousel/README.md +91 -0
  340. package/template/pods/content-carousel/agents/carousel-builder.md +28 -0
  341. package/template/pods/content-carousel/agents/carousel-visual.md +24 -0
  342. package/template/pods/content-carousel/agents/hn-curator.md +74 -0
  343. package/template/pods/content-carousel/config/heuristic-watcher-rubric.yaml +59 -0
  344. package/template/pods/content-carousel/knowledge/aquisicao-ancora.md +443 -0
  345. package/template/pods/content-carousel/knowledge/cta-brief.md +25 -0
  346. package/template/pods/content-carousel/knowledge/dono.example.yaml +45 -0
  347. package/template/pods/content-carousel/knowledge/identidade-visual-mascote.md +62 -0
  348. package/template/pods/content-carousel/knowledge/image-generation.md +62 -0
  349. package/template/pods/content-carousel/knowledge/selecao-de-ancora.md +60 -0
  350. package/template/pods/content-carousel/knowledge/slides-html.md +56 -0
  351. package/template/pods/content-carousel/memory/README.md +18 -0
  352. package/template/pods/content-carousel/memory/learnings.consolidated.md +6 -0
  353. package/template/pods/content-carousel/memory/learnings.jsonl +0 -0
  354. package/template/pods/content-carousel/pod-spec.json +100 -0
  355. package/template/pods/content-carousel/squad-io.yaml +10 -0
  356. package/template/pods/content-carousel/templates/assembly-tmpl.md +23 -0
  357. package/template/pods/content-carousel/templates/digest-tmpl.md +29 -0
  358. package/template/pods/content-carousel/templates/visuals-tmpl.md +20 -0
  359. package/template/pods/content-carousel/workflows/wf-content-carousel.smoke.json +23 -0
  360. package/template/pods/content-carousel/workflows/wf-content-carousel.yaml +80 -0
  361. package/template/pods/dev-ia/README.md +45 -0
  362. package/template/pods/dev-ia/agents/db-architect.md +33 -0
  363. package/template/pods/dev-ia/agents/ux-architect.md +29 -0
  364. package/template/pods/dev-ia/knowledge/db/migration-protocol.md +95 -0
  365. package/template/pods/dev-ia/knowledge/db/rls-patterns.md +101 -0
  366. package/template/pods/dev-ia/knowledge/db/schema-review-checklist.md +76 -0
  367. package/template/pods/dev-ia/memory/README.md +16 -0
  368. package/template/pods/dev-ia/memory/learnings.consolidated.md +8 -0
  369. package/template/pods/dev-ia/memory/learnings.jsonl +0 -0
  370. package/template/pods/dev-ia/pod-spec.json +34 -0
  371. package/template/pods/dev-ia/templates/schema-review-tmpl.md +23 -0
  372. package/template/pods/dev-ia/templates/ux-flow-review-tmpl.md +23 -0
  373. package/template/pods/dev-ia/tools/db-ops/backup-manager.sh +321 -0
  374. package/template/pods/dev-ia/tools/db-ops/best-practices-auditor.sh +534 -0
  375. package/template/pods/dev-ia/tools/db-ops/bootstrap-runner.sh +255 -0
  376. package/template/pods/dev-ia/tools/db-ops/data-loader.sh +616 -0
  377. package/template/pods/dev-ia/tools/db-ops/detect-database.sh +113 -0
  378. package/template/pods/dev-ia/tools/db-ops/explain-analyzer.sh +285 -0
  379. package/template/pods/dev-ia/tools/db-ops/health-checker.sh +323 -0
  380. package/template/pods/dev-ia/tools/db-ops/migration-runner.sh +308 -0
  381. package/template/pods/dev-ia/tools/db-ops/postgresql-schema-loader.sh +334 -0
  382. package/template/pods/dev-ia/tools/db-ops/query-runner.sh +171 -0
  383. package/template/pods/dev-ia/tools/db-ops/rls-policy-installer.sh +480 -0
  384. package/template/pods/dev-ia/tools/db-ops/rls-test-suite.sh +172 -0
  385. package/template/pods/dev-ia/tools/db-ops/schema-context-loader.sh +176 -0
  386. package/template/pods/hormozi-method/README.md +52 -0
  387. package/template/pods/hormozi-method/agents/acquisition-strategist.md +33 -0
  388. package/template/pods/hormozi-method/agents/conversion-copywriter.md +34 -0
  389. package/template/pods/hormozi-method/agents/monetization-architect.md +35 -0
  390. package/template/pods/hormozi-method/agents/offer-engineer.md +37 -0
  391. package/template/pods/hormozi-method/knowledge/core-four-leads.md +51 -0
  392. package/template/pods/hormozi-method/knowledge/grand-slam-offer.md +66 -0
  393. package/template/pods/hormozi-method/knowledge/growth-decision.md +38 -0
  394. package/template/pods/hormozi-method/knowledge/hooks-and-ads.md +56 -0
  395. package/template/pods/hormozi-method/knowledge/launch-email.md +31 -0
  396. package/template/pods/hormozi-method/knowledge/money-model.md +46 -0
  397. package/template/pods/hormozi-method/knowledge/opportunity-screening.md +44 -0
  398. package/template/pods/hormozi-method/knowledge/pages.md +25 -0
  399. package/template/pods/hormozi-method/knowledge/pos-lancamento-leads.md +56 -0
  400. package/template/pods/hormozi-method/knowledge/pricing.md +36 -0
  401. package/template/pods/hormozi-method/knowledge/retention-ltv.md +37 -0
  402. package/template/pods/hormozi-method/knowledge/scale-roadmap.md +35 -0
  403. package/template/pods/hormozi-method/knowledge/swipefiles-curados.md +44 -0
  404. package/template/pods/hormozi-method/knowledge/value-equation-diagnostic.md +77 -0
  405. package/template/pods/hormozi-method/memory/README.md +16 -0
  406. package/template/pods/hormozi-method/memory/learnings.consolidated.md +6 -0
  407. package/template/pods/hormozi-method/memory/learnings.jsonl +0 -0
  408. package/template/pods/hormozi-method/pod-spec.json +50 -0
  409. package/template/pods/hormozi-method/specs/wf-full-launch-sequence.spec.json +149 -0
  410. package/template/pods/hormozi-method/specs/wf-lead-magnet-pipeline.spec.json +125 -0
  411. package/template/pods/hormozi-method/specs/wf-money-model-design.spec.json +117 -0
  412. package/template/pods/hormozi-method/specs/wf-paid-ads-campaign.spec.json +132 -0
  413. package/template/pods/hormozi-method/specs/wf-scaling-diagnostic.spec.json +121 -0
  414. package/template/pods/hormozi-method/squad-io.yaml +43 -0
  415. package/template/pods/hormozi-method/templates/conversion-copywriter-tmpl.md +20 -0
  416. package/template/pods/hormozi-method/templates/launch-execucao-tmpl.md +17 -0
  417. package/template/pods/hormozi-method/templates/launch-fechamento-tmpl.md +17 -0
  418. package/template/pods/hormozi-method/templates/launch-pos-tmpl.md +17 -0
  419. package/template/pods/hormozi-method/templates/launch-preparacao-tmpl.md +17 -0
  420. package/template/pods/hormozi-method/templates/lm-copy-tmpl.md +17 -0
  421. package/template/pods/hormozi-method/templates/lm-distribuicao-tmpl.md +18 -0
  422. package/template/pods/hormozi-method/templates/lm-estrategia-tmpl.md +17 -0
  423. package/template/pods/hormozi-method/templates/mm-arquitetura-tmpl.md +18 -0
  424. package/template/pods/hormozi-method/templates/mm-copy-tmpl.md +17 -0
  425. package/template/pods/hormozi-method/templates/mm-diagnostico-tmpl.md +14 -0
  426. package/template/pods/hormozi-method/templates/monetization-architect-tmpl.md +17 -0
  427. package/template/pods/hormozi-method/templates/offer-engineer-tmpl.md +20 -0
  428. package/template/pods/hormozi-method/templates/paid-criativos-tmpl.md +19 -0
  429. package/template/pods/hormozi-method/templates/paid-fundacao-tmpl.md +17 -0
  430. package/template/pods/hormozi-method/templates/paid-teste-escala-tmpl.md +17 -0
  431. package/template/pods/hormozi-method/templates/scaling-diagnostico-tmpl.md +17 -0
  432. package/template/pods/hormozi-method/templates/scaling-priorizacao-tmpl.md +17 -0
  433. package/template/pods/hormozi-method/templates/scaling-roadmap-tmpl.md +17 -0
  434. package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.smoke.json +12 -0
  435. package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.yaml +56 -0
  436. package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.smoke.json +11 -0
  437. package/template/pods/hormozi-method/workflows/wf-grand-slam-offer.yaml +45 -0
  438. package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.smoke.json +9 -0
  439. package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.yaml +45 -0
  440. package/template/pods/hormozi-method/workflows/wf-money-model-design.smoke.json +11 -0
  441. package/template/pods/hormozi-method/workflows/wf-money-model-design.yaml +45 -0
  442. package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.smoke.json +9 -0
  443. package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.yaml +46 -0
  444. package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.smoke.json +11 -0
  445. package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.yaml +44 -0
  446. package/template/pods/squad-forge/README.md +53 -0
  447. package/template/pods/squad-forge/agents/forge-chief.md +31 -0
  448. package/template/pods/squad-forge/agents/mind-extractor.md +29 -0
  449. package/template/pods/squad-forge/agents/pod-critic.md +26 -0
  450. package/template/pods/squad-forge/config/heuristic-watcher-rubric.yaml +74 -0
  451. package/template/pods/squad-forge/knowledge/fidelity-rubric.yaml +176 -0
  452. package/template/pods/squad-forge/knowledge/g6-memory-check.md +17 -0
  453. package/template/pods/squad-forge/knowledge/memory-ingest.md +16 -0
  454. package/template/pods/squad-forge/knowledge/source-audit-rubric.yaml +60 -0
  455. package/template/pods/squad-forge/memory/README.md +16 -0
  456. package/template/pods/squad-forge/memory/learnings.consolidated.md +8 -0
  457. package/template/pods/squad-forge/memory/learnings.jsonl +0 -0
  458. package/template/pods/squad-forge/pod-spec.json +166 -0
  459. package/template/pods/squad-forge/squad-io.yaml +13 -0
  460. package/template/pods/squad-forge/tasks/pipeline.md +158 -0
  461. package/template/pods/squad-forge/templates/discovery-tmpl.md +40 -0
  462. package/template/pods/squad-forge/templates/generation-tmpl.md +18 -0
  463. package/template/pods/squad-forge/templates/red-team-tmpl.md +17 -0
  464. package/template/pods/squad-forge/templates/register-tmpl.md +17 -0
  465. package/template/pods/squad-forge/templates/workflow-tmpl.yaml +101 -0
  466. package/template/pods/squad-forge/workflows/wf-forge.smoke.json +12 -0
  467. 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
+ };