@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daniellins/power-claude",
3
- "version": "0.17.1",
3
+ "version": "0.17.2",
4
4
  "description": "Lean, budget-gated agent framework for Claude Code — pods by job-to-be-done",
5
5
  "author": "Daniel Lins",
6
6
  "license": "MIT",
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
- * (second-brain docs/benchmark/PROTOCOLO-4-bracos.md; RELATORIO-FINAL.md) para N≥2
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
- || readEnvVar(path.join(os.homedir(), 'projetos/dev/second-brain/app/.env.local'), 'ANTHROPIC_API_KEY');
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
- || readEnvVar(path.join(os.homedir(), 'projetos/bench/.env'), 'OPENROUTER_API_KEY');
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 second-brain/app/.env.local).'); process.exit(1); }
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 do `second-brain` — isola o blast
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 no `second-brain`; aqui é genérico/parametrizável):
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, second-brain/app): lê SÓ de
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
- (`second-brain`); o `--pod-root` não é necessário — o motor deriva a raiz do pod pelo path do `wf`.
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 (`second-brain`); o
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** (`second-brain/.power-claude/`), nunca do `template/` — o framework não acumula aprendizado de uma instalação específica.
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 (`second-brain/docs/benchmark/PROTOCOLO-4-bracos.md`) para N braços quaisquer — não só 4, não só pod-vs-squad.
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` · protocolo-fonte `second-brain/docs/benchmark/PROTOCOLO-4-bracos.md` (+ `RELATORIO-FINAL.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, `second-brain`). Metodologia: *$100M* / frameworks operacionais de escala, Alex Hormozi. Aplica o framework documentado; não encarna a pessoa.
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, `second-brain`). Metodologia: *$100M Offers*, Alex Hormozi (Cap. 4 — Starving Crowd; antipadrões estruturais). Aplica o framework documentado; não encarna a pessoa.
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: second-brain@docs/benchmark-4-bracos:docs/benchmark/ANEXO-A-processo-daniel-geracao-squads.md
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)?