{"_id":"@daniellins/power-claude","_rev":"12-f87e291d95998b5d6c5543f098f238eb","name":"@daniellins/power-claude","dist-tags":{"latest":"0.17.2"},"versions":{"0.17.1":{"name":"@daniellins/power-claude","version":"0.17.1","author":{"name":"Daniel Lins"},"license":"MIT","_id":"@daniellins/power-claude@0.17.1","maintainers":[{"name":"daniellins","email":"daniel.lins@gmail.com"}],"homepage":"https://github.com/daniellins/power-claude-core#readme","bugs":{"url":"https://github.com/daniellins/power-claude-core/issues"},"bin":{"power-claude":"bin/cli.js"},"dist":{"shasum":"3a154ff6398b335f065f2d5f7ed16370086fb710","tarball":"https://registry.npmjs.org/@daniellins/power-claude/-/power-claude-0.17.1.tgz","fileCount":279,"integrity":"sha512-f9I7dTxT7ZRSjgCO3tw9fzdY5RRF+yEMghd2TDP1fvKXzoAqeLJZ0CBXjBqgpI/0eB5pPreRGOfRG4U2hU9E3w==","signatures":[{"sig":"MEUCIQD4OuixGISc2OFKu1/H6dwZtZvlPHGWfXXKX7Vnofy61AIgGO9+34bI/7TAXkoR3tYP7cnsIfZtMycbweRwqc/ewEY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2109921},"engines":{"node":">=18"},"gitHead":"8619f56ab113b6eaf4d1765e12f0e3c762972ca8","scripts":{"test":"node scripts/validate-install.js && node scripts/validate-adopt.js && node scripts/validate-update-scope-motor.js && node scripts/__tests__/validate-pod-workflow.test.cjs && node scripts/__tests__/pc-run-pod.test.cjs && node scripts/__tests__/pc-run-pod-tokens.test.cjs && node scripts/__tests__/pc-run-pod-describe.test.cjs && node scripts/__tests__/pc-run-pod-resolve.test.cjs && node scripts/__tests__/pc-run-pod-render-criteria.test.cjs && node scripts/__tests__/pc-run-pod-apply-production.test.cjs && node scripts/__tests__/pc-run-pod-content-carousel.test.cjs && node scripts/__tests__/pc-run-pod-content-carousel-b2.test.cjs && node scripts/__tests__/pc-run-pod-non-carousel-b2.test.cjs && node scripts/__tests__/pc-run-pod-counter.test.cjs && node scripts/pc-run-pod-countgte.test.cjs && node scripts/forge.test.cjs && node scripts/forge-assess-tier.test.cjs && node scripts/forge-additive.test.cjs && node scripts/forge-canonical.test.cjs && node scripts/__tests__/forge-register-entry-point.test.cjs && node scripts/migration-manifest.test.cjs && node scripts/migration-manifest-sf3.2.test.cjs && node scripts/migration-manifest-sf3.3.test.cjs && node scripts/migration-manifest-sf5.5.test.cjs && node scripts/validate-no-clone.test.cjs && node scripts/migrate-squad-orchestration.test.cjs && node scripts/pod-memory.test.cjs && node scripts/pod-memory-budget.test.cjs && node scripts/pod-memory-note.test.cjs && node scripts/forge-harden-learning.test.cjs && node scripts/harden-knowledge.test.cjs && node scripts/consolidate-knowledge-runner.test.cjs && node scripts/smoke-pod-workflow.cjs scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml && node scripts/smoke-sweep.test.cjs && node scripts/smoke-isolation.test.cjs && node scripts/harness-g5-lite.test.cjs && node scripts/__tests__/motor-scripts.test.cjs && node scripts/validate-fidelity-output.test.cjs && node scripts/validate-source-audit.test.cjs && node scripts/arena.test.cjs && node scripts/veto-checks.test.cjs && node scripts/phash-gate.test.cjs && node scripts/render-png.test.cjs && node scripts/hn-carousel-contrato-entrada.test.cjs && node scripts/anti-path.test.cjs && node scripts/brief-leitura-obrigatoria.test.cjs && node scripts/pc-run-pipeline.test.cjs && node scripts/pod-export-compile.test.cjs && node scripts/pod-export-executor.test.cjs && node scripts/pod-export-postprocess.test.cjs && node scripts/pod-export-release.test.cjs && node scripts/pod-export-service.test.cjs && node scripts/pod-export-ui.test.cjs && node scripts/pod-export-hardening.test.cjs && node scripts/pod-export-queue-race.test.cjs && node scripts/npm-scope-invocation.test.cjs && node scripts/default-funcional.test.cjs && node scripts/owner-layer.test.cjs && node scripts/__tests__/enforce-cycle-authority.test.cjs && node scripts/__tests__/enforce-git-push-authority.test.cjs && node scripts/__tests__/validate-story-acs.test.cjs && node scripts/__tests__/validate-spec-coverage.test.cjs && node scripts/__tests__/spec-wf-criteria-sync.test.cjs && node scripts/__tests__/enforce-ready-oracles.test.cjs && node scripts/__tests__/derive-ready-transitions.test.cjs && node installer/__tests__/doctor-ready-oracles.test.cjs && node installer/__tests__/merge-settings.test.cjs && node scripts/__tests__/dist-tarball-boundary.test.cjs && node scripts/__tests__/build-public-tree-scripts.test.cjs","prepack":"node scripts/gen-dist-ignore.cjs","validate":"node scripts/validate-budgets.js template/pods template/.claude/agents && node scripts/validate-branding.js && node scripts/validate-no-clone.cjs template && node scripts/validate-git-vetor.cjs","prepublishOnly":"node scripts/gen-dist-ignore.cjs"},"_npmUser":{"name":"daniellins","email":"daniel.lins@gmail.com"},"repository":{"url":"git+https://github.com/daniellins/power-claude-core.git","type":"git"},"_npmVersion":"11.17.0","description":"Lean, budget-gated agent framework for Claude Code — pods by job-to-be-done","directories":{},"_nodeVersion":"26.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/power-claude_0.17.1_1788138471194_0.8166717728912887","host":"s3://npm-registry-packages-npm-production"}},"0.17.2":{"name":"@daniellins/power-claude","version":"0.17.2","description":"Lean, budget-gated agent framework for Claude Code — pods by job-to-be-done","author":{"name":"Daniel Lins"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/daniellins/power-claude-core.git"},"homepage":"https://github.com/daniellins/power-claude-core#readme","bugs":{"url":"https://github.com/daniellins/power-claude-core/issues"},"bin":{"power-claude":"bin/cli.js"},"publishConfig":{"access":"public"},"engines":{"node":">=18"},"scripts":{"test":"node scripts/validate-install.js && node scripts/validate-adopt.js && node scripts/validate-update-scope-motor.js && node scripts/__tests__/validate-pod-workflow.test.cjs && node scripts/__tests__/pc-run-pod.test.cjs && node scripts/__tests__/pc-run-pod-tokens.test.cjs && node scripts/__tests__/pc-run-pod-describe.test.cjs && node scripts/__tests__/pc-run-pod-resolve.test.cjs && node scripts/__tests__/pc-run-pod-render-criteria.test.cjs && node scripts/__tests__/pc-run-pod-apply-production.test.cjs && node scripts/__tests__/pc-run-pod-content-carousel.test.cjs && node scripts/__tests__/pc-run-pod-content-carousel-b2.test.cjs && node scripts/__tests__/pc-run-pod-non-carousel-b2.test.cjs && node scripts/__tests__/pc-run-pod-counter.test.cjs && node scripts/pc-run-pod-countgte.test.cjs && node scripts/forge.test.cjs && node scripts/forge-assess-tier.test.cjs && node scripts/forge-additive.test.cjs && node scripts/forge-canonical.test.cjs && node scripts/__tests__/forge-register-entry-point.test.cjs && node scripts/migration-manifest.test.cjs && node scripts/migration-manifest-sf3.2.test.cjs && node scripts/migration-manifest-sf3.3.test.cjs && node scripts/migration-manifest-sf5.5.test.cjs && node scripts/validate-no-clone.test.cjs && node scripts/migrate-squad-orchestration.test.cjs && node scripts/pod-memory.test.cjs && node scripts/pod-memory-budget.test.cjs && node scripts/pod-memory-note.test.cjs && node scripts/forge-harden-learning.test.cjs && node scripts/harden-knowledge.test.cjs && node scripts/consolidate-knowledge-runner.test.cjs && node scripts/smoke-pod-workflow.cjs scripts/__fixtures__/smoke-canary/workflows/wf-canary.yaml && node scripts/smoke-sweep.test.cjs && node scripts/smoke-isolation.test.cjs && node scripts/harness-g5-lite.test.cjs && node scripts/__tests__/motor-scripts.test.cjs && node scripts/validate-fidelity-output.test.cjs && node scripts/validate-source-audit.test.cjs && node scripts/arena.test.cjs && node scripts/veto-checks.test.cjs && node scripts/phash-gate.test.cjs && node scripts/render-png.test.cjs && node scripts/hn-carousel-contrato-entrada.test.cjs && node scripts/anti-path.test.cjs && node scripts/brief-leitura-obrigatoria.test.cjs && node scripts/pc-run-pipeline.test.cjs && node scripts/pod-export-compile.test.cjs && node scripts/pod-export-executor.test.cjs && node scripts/pod-export-postprocess.test.cjs && node scripts/pod-export-release.test.cjs && node scripts/pod-export-service.test.cjs && node scripts/pod-export-ui.test.cjs && node scripts/pod-export-hardening.test.cjs && node scripts/pod-export-queue-race.test.cjs && node scripts/npm-scope-invocation.test.cjs && node scripts/default-funcional.test.cjs && node scripts/owner-layer.test.cjs && node scripts/__tests__/enforce-cycle-authority.test.cjs && node scripts/__tests__/enforce-git-push-authority.test.cjs && node scripts/__tests__/validate-story-acs.test.cjs && node scripts/__tests__/validate-spec-coverage.test.cjs && node scripts/__tests__/spec-wf-criteria-sync.test.cjs && node scripts/__tests__/enforce-ready-oracles.test.cjs && node scripts/__tests__/derive-ready-transitions.test.cjs && node installer/__tests__/doctor-ready-oracles.test.cjs && node installer/__tests__/merge-settings.test.cjs && node scripts/__tests__/dist-tarball-boundary.test.cjs && node scripts/__tests__/build-public-tree-scripts.test.cjs","prepack":"node scripts/gen-dist-ignore.cjs","prepublishOnly":"node scripts/gen-dist-ignore.cjs","validate":"node scripts/validate-budgets.js template/pods template/.claude/agents && node scripts/validate-branding.js && node scripts/validate-no-clone.cjs template && node scripts/validate-git-vetor.cjs"},"gitHead":"8a5b653a1226a26327fa534cafb8a3b93e638ab0","_id":"@daniellins/power-claude@0.17.2","_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-UA99MqCcLzLSAnOZAjJLLYrQ504WgCLV9EPY1UeOkMxz1EpcHcjEtvFqQ+voZ/B1jebZ6nP9/AlKE2st56Z2iw==","shasum":"306b43fecdb6ed4c10d7848cad5ea630d40358ad","tarball":"https://registry.npmjs.org/@daniellins/power-claude/-/power-claude-0.17.2.tgz","fileCount":279,"unpackedSize":2110349,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID6q6ojiW8yzcNQTOna/u+Xlk4XTQWpf1NbVhrQ/qLXHAiBPB8loMsmYcGoUAocG4jX9duOLFAs49E3vhoG37YWmHg=="}]},"_npmUser":{"name":"daniellins","email":"daniel.lins@gmail.com"},"directories":{},"maintainers":[{"name":"daniellins","email":"daniel.lins@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/power-claude_0.17.2_1788275496193_0.9872743854700572"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-09T20:22:03.285Z","modified":"2026-09-01T15:11:36.546Z","0.16.0":"2026-08-05T01:14:19.972Z","0.16.3":"2026-08-09T20:22:03.886Z","0.16.4":"2026-08-12T01:17:12.536Z","0.17.0":"2026-08-30T21:00:45.311Z","0.17.1":"2026-08-31T01:07:51.383Z","0.17.2":"2026-09-01T15:11:36.343Z"},"bugs":{"url":"https://github.com/daniellins/power-claude-core/issues"},"author":{"name":"Daniel Lins"},"license":"MIT","homepage":"https://github.com/daniellins/power-claude-core#readme","repository":{"type":"git","url":"git+https://github.com/daniellins/power-claude-core.git"},"description":"Lean, budget-gated agent framework for Claude Code — pods by job-to-be-done","maintainers":[{"name":"daniellins","email":"daniel.lins@gmail.com"}],"readme":"# POWER CLAUDE\n\nFramework enxuto de agentes para Claude Code — **pods por job-to-be-done**, com budget de tokens como gate de qualidade.\n\nVocê o instala dentro de um projeto seu, e ele acrescenta ali agentes, regras, skills e verificações\nautomáticas que o Claude Code passa a usar. Não substitui o Claude Code: dá forma ao que ele faz, e\nverifica o resultado em disco antes de você confiar nele.\n\n## Para quem chega agora\n\nSe esta é a sua primeira vez, o caminho mais curto é este, nesta ordem:\n\n1. **[Comece aqui](docs/mecanismos/aprendizado/getting-started.md)** — instalar, conferir a instalação\n   com o `doctor` e rodar o primeiro comando. Poucos minutos, sem pré-requisito de leitura.\n2. **[Guia de conceitos](docs/mecanismos/aprendizado/guia-de-conceitos.md)** — os termos que o framework\n   usa o tempo todo (pod, workflow, etapa, veto, checkpoint, budget, skill), um parágrafo cada.\n3. **Um tutorial de ponta a ponta**, conforme o que você quer fazer primeiro:\n   - [rodar um pod do começo ao fim](docs/mecanismos/aprendizado/tutorial-rodar-um-pod.md);\n   - [levar uma story do pedido ao merge](docs/mecanismos/aprendizado/tutorial-ciclo-de-story.md);\n   - [criar um pod novo com o forge](docs/mecanismos/aprendizado/tutorial-criar-pod-com-forge.md).\n\nPrefere perguntar a ler? Depois de instalar, digite `/power:tutor` no Claude Code — ele aponta o\npróximo passo certo para o seu caso, sem você ter que escolher sozinho por qual destes documentos\ncomeçar.\n\nSe você prefere instalar antes de ler, vá direto para a seção **Instalação**, logo abaixo — o\ngetting-started continua valendo depois.\n\n## Princípios\n\n1. **Pods por job-to-be-done** — em vez de dezenas de agentes genéricos, cada pod resolve um trabalho concreto (criar conteúdo com autoridade, montar aulas, automatizar processos, desenvolver com IA, forjar novos pods). Você instala só o que usa.\n2. **Budget de tokens como gate** — todo agente declara `budget_tokens` no frontmatter e um validador determinístico ([`scripts/validate-budgets.js`](scripts/validate-budgets.js)) bloqueia qualquer agente que estoure o próprio budget, o teto global (1.500 tokens) ou 150 linhas. Contexto enxuto não é convenção: é gate.\n3. **Enforcement determinístico** — regras críticas viram hooks e scripts, não pedidos educados no prompt. Exemplo: o hook [`enforce-git-push-authority.cjs`](template/.claude/hooks/enforce-git-push-authority.cjs) bloqueia `git push` fora do fluxo autorizado, direto no `PreToolUse`.\n4. **Verificação adversarial embutida** — os pods incluem agentes críticos (red-team) que revisam o próprio output antes de você confiar nele.\n5. **Garantia por código, não por prosa** — um pod é dado declarativo (`workflows/wf-*.yaml` + templates de etapa + `squad-io.yaml`), executado por um runner determinístico ([`scripts/pc-run-pod.cjs`](scripts/pc-run-pod.cjs), skill `pc-run-pod`) que verifica o artefato EM DISCO — existe, casa com o template, todas as `veto.assertions` passam — antes de liberar a etapa seguinte. A garantia de processo é código, não prosa no prompt do agente.\n\n## Instalação\n\nO framework é distribuído pelo npm. Dentro do projeto onde você quer usá-lo:\n\n```bash\ncd seu-projeto\nnpx @daniellins/power-claude install --yes\n```\n\n`--yes` é o modo não-interativo: instala todos os pods, assume os padrões e **nunca** sobrescreve nem\nremove arquivo seu. Para escolher quais pods entram e decidir sobre o `git init` com commit inicial,\nrode a forma interativa:\n\n```bash\nnpx @daniellins/power-claude install\n```\n\nEm qualquer um dos dois, o instalador registra o que colocou em `.power-claude/manifest.json` — é esse\nmanifesto que dá base ao `update` e ao `uninstall`. Logo depois de instalar, confira a instalação:\n\n```bash\nnpx @daniellins/power-claude doctor\n```\n\nO instalador **nunca sobrescreve** arquivos seus: conflitos são perguntados (interativo) ou preservados (`--yes`). O `.claude/settings.json` recebe merge aditivo em `hooks`/`permissions` (a entrada nova do template é acrescentada sem remover nem alterar o que você já tem); nas demais chaves, suas chaves vencem, as do template entram só onde faltam.\n\nO npm é o caminho de instalação — não `git clone`. Um clone do repositório serve para ler e auditar o\ncódigo, nunca para instalar; o que o instalador copia é o que o pacote publica.\n\n## Comandos do CLI\n\n| Comando | O que faz |\n|---|---|\n| `power-claude install` | Instala o framework no diretório atual (default) |\n| `power-claude adopt` | Adota uma instalação montada à mão (sem manifest): classifica o disco contra o template (idêntico / modificado / ausente), gera o `.power-claude/manifest.json` sem sobrescrever nada e coloca a instalação ao alcance do `update` |\n| `power-claude update` | Atualiza; arquivos que você modificou são preservados (com diff resumido no modo interativo) |\n| `power-claude doctor` | Diagnóstico: integridade do manifest, hooks, `.gitignore`, gate de budgets, tamanho do CLAUDE.md e execução dos workflows dos pods instalados |\n| `power-claude uninstall` | Remove apenas o que o instalador colocou e continua intacto; o que você modificou fica |\n| `power-claude --help` / `--version` | Ajuda / versão |\n\nFlags globais: `--yes` (`-y`) para modo não-interativo; `--scope motor`, só em `update`, restringe a\natualização aos scripts do motor (ver a nota da próxima seção).\n\n## Estrutura instalada\n\n```text\nseu-projeto/\n├── .claude/\n│   ├── CLAUDE.md                  # instruções enxutas (budget ~2.000 tokens)\n│   ├── settings.json              # hooks + permissions (merge com o seu)\n│   ├── agents/                    # papéis do ciclo (pc-planner, pc-dev, pc-qa, pc-devops, ...)\n│   ├── commands/                  # comandos /power:*\n│   ├── rules/                     # autoridade, orquestração, matriz de modelos, curadoria\n│   ├── skills/                    # pc-run-pod, pc-full-cycle, pc-pipeline, pc-arena, ...\n│   └── hooks/\n│       ├── enforce-git-push-authority.cjs\n│       ├── enforce-cycle-authority.cjs\n│       ├── enforce-ready-oracles.cjs\n│       └── context-budget.cjs\n├── pods/\n│   ├── academy/                   # aulas, palestras, treinamentos\n│   ├── authority-content/         # conteúdo com voz própria e fact-check\n│   ├── automation/                # N8N + Langgraph\n│   ├── content-carousel/          # carrosséis a partir de uma fonte, com fact-check\n│   ├── dev-ia/                    # ciclo de desenvolvimento com IA\n│   ├── hormozi-method/            # oferta, aquisição e diagnóstico de escala\n│   └── squad-forge/               # cria novos agentes e pods\n├── knowledge/\n│   ├── voice-dna/                 # DNA de voz para conteúdo autoral (opcional)\n│   └── analyst/                   # base de pesquisa compartilhada\n├── scripts/                       # motor: runner, memória, validadores, vetos\n└── .power-claude/\n    └── manifest.json              # estado da instalação (base do update/uninstall)\n```\n\nO catálogo dos pods, com o job-to-be-done de cada um, está em [`template/pods/README.md`](template/pods/README.md).\n\n**O que viaja para a sua instalação, e o que não viaja.** `install` copia o `template/` inteiro (o\n`.claude/` acima, com agentes, regras, skills, comandos e hooks, mais os pods que você escolheu) **e**\nos scripts do motor declarados em [`installer/motor-scripts.json`](installer/motor-scripts.json) — o\nrunner, a memória evolutiva dos pods, os validadores de workflow e os vetos vão junto, em `scripts/`,\ncom o mesmo contrato de preservação do template (o que você modificar não é sobrescrito; `update\n--scope motor` é a via explícita para atualizar só esses scripts). O que **não** viaja é o que só faz\nsentido no repositório do framework: testes, fixtures e um punhado de scripts nomeados na lista\n`exclude` do mesmo manifesto. A documentação também não entra no pacote npm (`package.json` →\n`files: [\"bin\",\"installer\",\"template\",\"scripts\"]`) — ela vive neste repositório, que é o que você está\nlendo agora.\n\n## Personalização\n\nOpcional, em três degraus — e **nenhum pod exige que você construa um DNA de voz.** Os pods que assinam\npeças **em seu nome** perguntam quem é você — **uma vez, três campos** (nome, handle, uma linha de\nautoridade). Tudo o mais — voz, tom, léxico, objetivos — é opcional, tem default funcional, e vai se\najustando com o seu feedback durante o uso.\n\n| Degrau | O que você fornece | Onde mora | O que muda |\n|---|---|---|---|\n| **1 — sem voz** | nada | — | Roda. Saída correta, tom neutro. |\n| **2 — guia de estilo** | pessoa gramatical, léxico proibido, uma linha de tom | `pods/<pod>/knowledge/dono.yaml` (cópia de `dono.example.yaml`) | O texto para de soar como assistente. Melhor custo-benefício. |\n| **3 — DNA de voz** | um corpus do que você já escreveu | `knowledge/voice-dna/voice-dna.yaml`, extraído por `/power:forge` → `mind-extractor` → `*extract {corpus}` | O texto passa a soar como você, com evidência citada por campo. |\n\n**Uma ressalva honesta, porque os pods não são iguais.** Os pods de **método** (`dev-ia`,\n`automation`, `hormozi-method`) não dependem de quem você é: sem personalizar nenhum campo, a\nsaída deles é a mesma. Já os pods de **identidade** (`content-carousel`, `authority-content`,\n`academy`, `squad-forge`) produzem peças assinadas — sem o trio de atribuição, a saída não é\nneutra, é **genérica**, que é exatamente o defeito que esses pods existem para evitar. Por isso o\ntrio é a única coisa que um pod pode pedir antes de prosseguir; voz e estilo, nunca.\n\n**Nada disso vai para o pacote.** O DNA de voz e a configuração de dono são dado pessoal: o\ntemplate distribui só os `*.example.*`, e um oráculo (`scripts/owner-layer.cjs` +\n`scripts/owner-layer.test.cjs`) reprova o empacotamento se qualquer arquivo dessa camada sair sem\nser um placeholder marcado. Passo a passo de instanciação: `knowledge/voice-dna/README.md` na sua\ninstalação.\n\n## Para quem avalia o framework\n\nSe você já conhece o terreno e quer julgar profundidade em vez de aprender do zero:\n\n- **[Índice dos mecanismos](docs/mecanismos/README.md)** — a referência densa: uma página por\n  mecanismo entregue, agrupada por área funcional, com comandos reais e ligação para o \"porquê\".\n  É o melhor lugar para medir o que o framework realmente faz.\n- **[Releases do GitHub](../../releases)** — o histórico versão a versão, com o que entrou em cada\n  release; o corpo de cada Release deriva do `CHANGELOG.md` do repositório de desenvolvimento (privado\n  por decisão). Este README não mantém vitrine de novidades: quem responde por \"o que mudou desde a\n  última vez que olhei\" são as Releases.\n- **[Decisões arquiteturais (ADR)](docs/adr)** — cada decisão não trivial com alternativas\n  consideradas, o que foi medido e o que foi recusado. É onde ver o critério, não só o resultado.\n- **[Pesquisa e registros de investigação](docs/research)** — o que foi medido antes de decidir,\n  inclusive quando a medição derrubou a hipótese.\n\n**Sobre as referências a `docs/stories` e `docs/qa` que você vai encontrar nos ADRs e na pesquisa.** Elas\napontam para o registro de execução do framework — as stories de desenvolvimento e os gates de qualidade que\nas aprovam. Esse registro é **privado por decisão explícita, não por descuido**: o que se publica aqui é o\ncritério (o porquê e o que foi medido), enquanto o diário de execução, que carrega contexto operacional e\npessoal de quem trabalha nele, fica fora. Um link quebrado para `docs/stories/...` ou `docs/qa/...` num ADR\né, portanto, o comportamento esperado desta fronteira — não um arquivo perdido.\n\n## Validação no repositório do framework\n\n```bash\nnpm test           # suíte completa: instalador, adopt, runner, memória, migração, smoke/sweep\nnpm run validate   # budgets + branding + validate-no-clone\n```\n\n## Licença\n\n[MIT](LICENSE) — Copyright (c) 2026 **Daniel Lins**.\n\nUse, copie e adapte à vontade, mantendo a atribuição a Daniel Lins conforme a licença.\n","readmeFilename":"README.md"}