@daniellins/power-claude 0.17.1 → 0.17.2
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.
- package/package.json +1 -1
- package/scripts/arena.cjs +1 -2
- package/scripts/pod-export-executor.cjs +8 -3
- package/scripts/pod-export-service.cjs +3 -3
- package/template/.claude/commands/power/forge.md +1 -1
- package/template/.claude/commands/power/hormozi.md +1 -1
- package/template/.claude/rules/orchestration.md +1 -1
- package/template/.claude/skills/pc-arena/SKILL.md +2 -2
- package/template/pods/hormozi-method/knowledge/growth-decision.md +1 -1
- package/template/pods/hormozi-method/knowledge/opportunity-screening.md +1 -1
- package/template/pods/squad-forge/knowledge/source-audit-rubric.yaml +1 -1
package/package.json
CHANGED
package/scripts/arena.cjs
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* arena.cjs — MOTOR determinístico da skill `pc-arena` (harness de comparação cega
|
|
5
5
|
* reutilizável). ADR-009 Decisão 1/2. Generaliza o protocolo do benchmark 4-braços
|
|
6
|
-
* (
|
|
7
|
-
* braços quaisquer.
|
|
6
|
+
* (documentado em `docs/adr/ADR-009-...`) para N≥2 braços quaisquer.
|
|
8
7
|
*
|
|
9
8
|
* FRONTEIRA (ADR-002 reaplicada à AVALIAÇÃO): este motor faz o DETERMINÍSTICO e
|
|
10
9
|
* propenso-a-bug — permutação de rótulos com uniquidade validada (bijeção braço↔rótulo),
|
|
@@ -491,10 +491,14 @@ function setupRun({ bundleDir, lockOverride, payload = {}, deps = {}, log }) {
|
|
|
491
491
|
const inputsDir = payload.inputs_dir
|
|
492
492
|
? (path.isAbsolute(payload.inputs_dir) ? payload.inputs_dir : path.resolve(payload.__dir || process.cwd(), payload.inputs_dir))
|
|
493
493
|
: null;
|
|
494
|
+
// Fallback de chave por arquivo `.env` — SÓ se o dev declarar o path na env var genérica
|
|
495
|
+
// `PC_ANTHROPIC_ENV_FILE`/`PC_OPENROUTER_ENV_FILE` (mesmo padrão de `PC_CLONE_DENYLIST` em
|
|
496
|
+
// validate-no-clone.cjs). Sem a env var, não há fallback de path — só `process.env` direto.
|
|
497
|
+
// Nenhum path de máquina pessoal fica embutido no código distribuído.
|
|
494
498
|
const anthropicKey = process.env.ANTHROPIC_API_KEY
|
|
495
|
-
||
|
|
499
|
+
|| (process.env.PC_ANTHROPIC_ENV_FILE ? readEnvVar(process.env.PC_ANTHROPIC_ENV_FILE, 'ANTHROPIC_API_KEY') : null);
|
|
496
500
|
const orKey = process.env.OPENROUTER_API_KEY
|
|
497
|
-
||
|
|
501
|
+
|| (process.env.PC_OPENROUTER_ENV_FILE ? readEnvVar(process.env.PC_OPENROUTER_ENV_FILE, 'OPENROUTER_API_KEY') : null);
|
|
498
502
|
return {
|
|
499
503
|
bundleRoot, bundle, lockPath, coherence, whitelist, inputsDir,
|
|
500
504
|
payload, anthropicKey, orKey, deps,
|
|
@@ -601,6 +605,7 @@ async function main() {
|
|
|
601
605
|
const runIdArg = positionals[2];
|
|
602
606
|
if (!bundleDir || !cmd) {
|
|
603
607
|
console.error('Uso: node scripts/pod-export-executor.cjs <bundle-dir> <run|resume|approve|status> [runId] [--input <payload.json>] [--runs-root <dir>] [--lock <path>] [--kill-during <phase>]');
|
|
608
|
+
console.error('`run` exige chave de API: ANTHROPIC_API_KEY / OPENROUTER_API_KEY no ambiente, ou arquivo apontado por PC_ANTHROPIC_ENV_FILE / PC_OPENROUTER_ENV_FILE.');
|
|
604
609
|
process.exit(2);
|
|
605
610
|
}
|
|
606
611
|
const runsRoot = flags.runsRoot ? path.resolve(flags.runsRoot) : path.join(REPO_ROOT, '.power-claude', 'pod-export-runs');
|
|
@@ -611,7 +616,7 @@ async function main() {
|
|
|
611
616
|
run.log(`[coerência] framework_version motor=${run.coherence.engineVersion} == lock=${run.coherence.lockVersion} (AC16 OK)`);
|
|
612
617
|
|
|
613
618
|
if (cmd === 'run') {
|
|
614
|
-
if (!run.anthropicKey) { console.error('[FALHA] ANTHROPIC_API_KEY não encontrada (env ou
|
|
619
|
+
if (!run.anthropicKey) { console.error('[FALHA] ANTHROPIC_API_KEY não encontrada (env ANTHROPIC_API_KEY, ou arquivo apontado por PC_ANTHROPIC_ENV_FILE).'); process.exit(1); }
|
|
615
620
|
const runId = runIdArg || ('pex-' + new Date().toISOString().replace(/[:.]/g, '-'));
|
|
616
621
|
const memoryPodDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pex-mem-')); // DF2-2: memória efêmera, NUNCA o bundle.
|
|
617
622
|
run.log(`\n=== RUN ${runId} — pod ${run.pod} — modelos ${JSON.stringify(run.bundle.modelo_pinado.agents)} ===`);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* pod-export-service.cjs — SERVIÇO-IRMÃO de longa duração do épico pod-export (F2, Story SF10.3).
|
|
5
5
|
*
|
|
6
|
-
* Processo systemd PRÓPRIO na VPS (fora da instância Next.js
|
|
6
|
+
* Processo systemd PRÓPRIO na VPS (fora da instância Next.js de deploy — isola o blast
|
|
7
7
|
* radius, ADR-018 premissa travada linha 24). NÃO reimplementa nada de SF10.2: hospeda o executor
|
|
8
8
|
* (`pod-export-executor.cjs`) por spawn e reusa o motor (`pc-run-pod.cjs`) por import (frontier
|
|
9
9
|
* command_check). Sem superfície de rede: o trigger é um CONTRATO DE DIRETÓRIO (DF2-5).
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
* motor degrada MUDO e um .cjs plantado sob scripts/veto-checks/ passaria pelo nome
|
|
53
53
|
* (NOTE-1 do gate de SF10.3; Story SF10.9/AC1, aferido dentro de assertCommandCheckFrontier).
|
|
54
54
|
*
|
|
55
|
-
* CONFIG por ENV (a instância VPS-específica vive
|
|
55
|
+
* CONFIG por ENV (a instância VPS-específica vive fora deste repo; aqui é genérico/parametrizável):
|
|
56
56
|
* PODEXPORT_BUNDLE_DIR (obrigatório p/ start) — dir do bundle compilado por F1.
|
|
57
57
|
* PODEXPORT_QUEUE_DIR (obrigatório p/ start) — raiz da fila (pending/processing/done/failed).
|
|
58
58
|
* PODEXPORT_RUNS_DIR (default <repo>/.power-claude/pod-export-runs) — runs root do executor.
|
|
@@ -113,7 +113,7 @@ function safeRunId(id) {
|
|
|
113
113
|
// ---------------------------------------------------------------------------
|
|
114
114
|
|
|
115
115
|
/**
|
|
116
|
-
* Padrão `getAnthropicApiKey` da plataforma (achado concreto
|
|
116
|
+
* Padrão `getAnthropicApiKey` da plataforma (achado concreto na app de deploy): lê SÓ de
|
|
117
117
|
* `process.env` (env da VPS/systemd), lança fail-loud se ausente. NUNCA hardcoded, NUNCA por
|
|
118
118
|
* usuário/client/request. O valor NÃO é logado nem devolvido — só um booleano de presença.
|
|
119
119
|
*/
|
|
@@ -66,7 +66,7 @@ node scripts/pc-run-pod.cjs start squad-forge forge \
|
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
Sempre pela **flag** `--task-ref`, nunca posicional. Rode a partir da raiz do repo
|
|
69
|
-
(
|
|
69
|
+
(`<seu-repo>`); o `--pod-root` não é necessário — o motor deriva a raiz do pod pelo path do `wf`.
|
|
70
70
|
|
|
71
71
|
O `start` imprime `[start] run <run-id> → <caminho do state.json>` e já emite o `[dispatch]` da
|
|
72
72
|
etapa `discovery`, com o bloco `--- BRIEF ---` (o `next` NÃO é necessário para ver o brief — ele só
|
|
@@ -37,7 +37,7 @@ node scripts/pc-run-pod.cjs start hormozi-method wf-grand-slam-offer \
|
|
|
37
37
|
--task-ref "<descrição livre do negócio/oferta>"
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Sempre pela **flag** `--task-ref`, nunca posicional. Rode a partir da raiz do repo (
|
|
40
|
+
Sempre pela **flag** `--task-ref`, nunca posicional. Rode a partir da raiz do repo (`<seu-repo>`); o
|
|
41
41
|
`--pod-root` não é necessário — o motor deriva a raiz do pod pelo path do `wf`.
|
|
42
42
|
|
|
43
43
|
O `start` imprime `[start] run <run-id> → <caminho do state.json>`. **Guarde esse caminho**: todos os
|
|
@@ -121,7 +121,7 @@ Nasceu de **7 erros da mesma classe numa única sessão** (2026-08-06/07), todos
|
|
|
121
121
|
|
|
122
122
|
Um aprendizado de ciclo (o que `.power-claude/cycle/learnings.md` tentava capturar por story, hoje morto e `gitignored`) vira regra ou comportamento duradouro por **curadoria manual do dono**: ele lê o aprendizado, decide que vale a pena reter, e o promove para um arquivo em `.claude/rules/*.md`. Não existe pipeline automático (`learnings.jsonl`, poda, consolidação, orçamento de admissão) — e a prova de que esse caminho já funciona é este próprio arquivo: `orchestration.md` nasceu assim, por curadoria, não por pipeline.
|
|
123
123
|
|
|
124
|
-
**Por que não existe pipeline:** custo × volume não fecha conta. `.power-claude/cycle/learnings.md` acumulou 18 entradas em 4 meses antes de morrer — volume baixo demais para pagar o aparato que um pipeline exigiria (custo de memória por admissão, poda periódica, consolidação, orçamento de tokens). A arquitetura já está decidida e não é reaberta aqui: memória de papel é da **instância** (
|
|
124
|
+
**Por que não existe pipeline:** custo × volume não fecha conta. `.power-claude/cycle/learnings.md` acumulou 18 entradas em 4 meses antes de morrer — volume baixo demais para pagar o aparato que um pipeline exigiria (custo de memória por admissão, poda periódica, consolidação, orçamento de tokens). A arquitetura já está decidida e não é reaberta aqui: memória de papel é da **instância** (`<sua-instância>/.power-claude/`), nunca do `template/` — o framework não acumula aprendizado de uma instalação específica.
|
|
125
125
|
|
|
126
126
|
## Referências
|
|
127
127
|
|
|
@@ -5,7 +5,7 @@ description: "Harness de comparação CEGA reutilizável: compara N≥2 braços
|
|
|
5
5
|
|
|
6
6
|
# pc-arena — Harness de Comparação Cega (coordenadora)
|
|
7
7
|
|
|
8
|
-
Skill irmã de `pc-run-pod`. Lá o **pod é dado** e o script é o motor; aqui o **experimento é dado** (N braços, rubrica, insumos) e o motor é **`scripts/arena.cjs`**, na granularidade "rodada de comparação cega". Generaliza o protocolo do benchmark 4-braços
|
|
8
|
+
Skill irmã de `pc-run-pod`. Lá o **pod é dado** e o script é o motor; aqui o **experimento é dado** (N braços, rubrica, insumos) e o motor é **`scripts/arena.cjs`**, na granularidade "rodada de comparação cega". Generaliza o protocolo do benchmark 4-braços para N braços quaisquer — não só 4, não só pod-vs-squad.
|
|
9
9
|
|
|
10
10
|
**A cegueira é a premissa central** — um embaralhamento silenciosamente errado invalida o experimento inteiro. Por isso a lógica propensa-a-bug (permutação com uniquidade, mapa selado, reveal-gate, hash, tally, veredito) vive **em código testável**, não em prosa: `scripts/arena.cjs` (motor determinístico) + `scripts/arena.test.cjs` (regressão dos 2 bugs reais de embaralhamento que a operação MANUAL do benchmark cometeu). Esta skill é o **protocolo**; a máquina é do motor — do not fake green.
|
|
11
11
|
|
|
@@ -93,4 +93,4 @@ Emite: (1) tabela de revelação rótulo→braço por rodada; (2) scores pondera
|
|
|
93
93
|
|
|
94
94
|
## Referência
|
|
95
95
|
|
|
96
|
-
`docs/adr/ADR-009-pc-arena-selagem-e-permutacao-em-motor.md` · motor `scripts/arena.cjs` + suíte `scripts/arena.test.cjs` · página de uso `docs/mecanismos/pc-arena.md
|
|
96
|
+
`docs/adr/ADR-009-pc-arena-selagem-e-permutacao-em-motor.md` · motor `scripts/arena.cjs` + suíte `scripts/arena.test.cjs` · página de uso `docs/mecanismos/pc-arena.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Growth Decision — Mais, Melhor ou Novo
|
|
2
2
|
|
|
3
|
-
> **Fonte:** destilado do squad legado `hormozi` (workflow de árvore de decisão estratégica), migração registrada em `docs/stories/epic-sf5-migracao-hormozi-rodada-final.md` (EPIC SF5, story SF5.5
|
|
3
|
+
> **Fonte:** destilado do squad legado `hormozi` (workflow de árvore de decisão estratégica), migração registrada em `docs/stories/epic-sf5-migracao-hormozi-rodada-final.md` (EPIC SF5, story SF5.5). Metodologia: *$100M* / frameworks operacionais de escala, Alex Hormozi. Aplica o framework documentado; não encarna a pessoa.
|
|
4
4
|
|
|
5
5
|
Decisão de **onde investir o próximo recurso de crescimento**. Evita o erro mais comum — fazer "novo" quando deveria fazer "mais" do que já funciona. Princípio: **Volume → Eficiência → Inovação, nesta ordem.**
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Opportunity Screening — gate PASS/FAIL antes de criar oferta
|
|
2
2
|
|
|
3
|
-
> **Fonte:** destilado do squad legado `hormozi` (workflow de veto de oportunidade + checklists de validação de mercado e antipadrões), migração registrada em `docs/stories/epic-sf5-migracao-hormozi-rodada-final.md` (EPIC SF5, story SF5.5
|
|
3
|
+
> **Fonte:** destilado do squad legado `hormozi` (workflow de veto de oportunidade + checklists de validação de mercado e antipadrões), migração registrada em `docs/stories/epic-sf5-migracao-hormozi-rodada-final.md` (EPIC SF5, story SF5.5). Metodologia: *$100M Offers*, Alex Hormozi (Cap. 4 — Starving Crowd; antipadrões estruturais). Aplica o framework documentado; não encarna a pessoa.
|
|
4
4
|
|
|
5
5
|
Gate obrigatório de **due-diligence de oportunidade**: valida um mercado/ideia de negócio ANTES de investir em qualquer oferta. Resultado é uma decisão **PASS/FAIL** justificada. Filosofia: "uma ótima oferta para um mercado ruim sempre falhará".
|
|
6
6
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# E ouro ou bronze) e do agente + QA — nunca do validador (ADR-014/ADR-008).
|
|
8
8
|
# Distincao: esta rubrica audita a ENTRADA; fidelity-rubric.yaml audita a SAIDA (SF7.1).
|
|
9
9
|
#
|
|
10
|
-
# Fonte:
|
|
10
|
+
# Fonte: docs/benchmark/ANEXO-A-processo-daniel-geracao-squads.md (processo do dono para geracao de squads, destilado do benchmark 4-bracos)
|
|
11
11
|
# :12 — "Eu valido a materia-prima cognitiva... Meu foco sao os experts clonados: as fontes sao ouro?"
|
|
12
12
|
# :20 — "*source-audit + *curadoria-score — as fontes por tras de cada clone sao ouro (comentarios,
|
|
13
13
|
# entrevistas longas, stories, cases) ou bronze (palestra antiga, generico, terceiros)?
|