@daniellins/power-claude 0.16.3 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @daniellins/power-claude might be problematic. Click here for more details.
- package/README.md +93 -29
- package/installer/motor-scripts.json +199 -35
- package/package.json +11 -3
- package/scripts/__fixtures__/sf17.3/criteria-baseline.json +18 -0
- package/scripts/__fixtures__/validate-spec-coverage/cli-com-orfao.spec.md +7 -0
- package/scripts/__fixtures__/validate-spec-coverage/cli-sem-orfao.spec.md +11 -0
- package/scripts/__fixtures__/validate-spec-coverage/contract4-noorfao.spec.md +11 -0
- package/scripts/__fixtures__/validate-spec-coverage/contract4.spec.md +11 -0
- package/scripts/__fixtures__/validate-spec-coverage/contract4.story.md +5 -0
- package/scripts/__fixtures__/validate-spec-coverage/coverage3-a.story.md +7 -0
- package/scripts/__fixtures__/validate-spec-coverage/coverage3-b.story.md +5 -0
- package/scripts/__fixtures__/validate-spec-coverage/coverage3.spec.md +9 -0
- package/scripts/__fixtures__/validate-spec-coverage/deferido-mutant.spec.md +7 -0
- package/scripts/__fixtures__/validate-spec-coverage/deferido-positive.spec.md +11 -0
- package/scripts/__fixtures__/validate-spec-coverage/deferido-trip-a-no-marker.spec.md +3 -0
- package/scripts/__fixtures__/validate-spec-coverage/deferido-trip-b-empty.spec.md +3 -0
- package/scripts/__fixtures__/validate-spec-coverage/deferido-trip-c-badanchor.spec.md +5 -0
- package/scripts/__fixtures__/validate-spec-coverage/deferido-trip-d-fenced.spec.md +11 -0
- package/scripts/__fixtures__/validate-spec-coverage/deferido-trip-e-dangling.spec.md +3 -0
- package/scripts/__fixtures__/validate-spec-coverage/dup-fr3.spec.md +11 -0
- package/scripts/__fixtures__/validate-spec-coverage/fr6-semantic.spec.md +5 -0
- package/scripts/__fixtures__/validate-spec-coverage/fr6-semantic.story.md +7 -0
- package/scripts/__fixtures__/validate-spec-coverage/rastreio-precision.story.md +19 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-covered-786b82a/README.txt +3 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-covered-786b82a/SPEC-linguagem-clara-fatia2.md +174 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-covered-786b82a/sf17.2.story.md +275 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-covered-786b82a/sf17.3.story.md +244 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-frozen-786b82a/README.txt +7 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-frozen-786b82a/SPEC-linguagem-clara-fatia2.md +174 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-frozen-786b82a/sf17.2.story.md +275 -0
- package/scripts/__fixtures__/validate-spec-coverage-corpus/sf17-fatia2-frozen-786b82a/sf17.3.story.md +242 -0
- package/scripts/__tests__/enforce-git-push-authority.test.cjs +289 -2
- package/scripts/__tests__/forge-register-entry-point.test.cjs +91 -0
- package/scripts/__tests__/pc-run-pod-apply-production.test.cjs +283 -0
- package/scripts/__tests__/pc-run-pod-content-carousel-b2.test.cjs +208 -0
- package/scripts/__tests__/pc-run-pod-content-carousel.test.cjs +219 -0
- package/scripts/__tests__/pc-run-pod-describe.test.cjs +158 -0
- package/scripts/__tests__/pc-run-pod-non-carousel-b2.test.cjs +227 -0
- package/scripts/__tests__/pc-run-pod-render-criteria.test.cjs +270 -0
- package/scripts/__tests__/pc-run-pod-resolve.test.cjs +150 -0
- package/scripts/__tests__/pc-run-pod-tokens.test.cjs +178 -0
- package/scripts/__tests__/pc-run-pod.test.cjs +30 -1
- package/scripts/__tests__/spec-wf-criteria-sync.test.cjs +171 -0
- package/scripts/__tests__/validate-spec-coverage.test.cjs +239 -0
- package/scripts/brief-leitura-obrigatoria.test.cjs +4 -2
- package/scripts/build-public-tree.cjs +372 -0
- package/scripts/derive-ready-transitions.cjs +40 -4
- package/scripts/forge-generate.cjs +39 -8
- package/scripts/pc-run-pod.cjs +223 -40
- package/scripts/pod-export-executor.test.cjs +4 -1
- package/scripts/pod-export-postprocess.test.cjs +3 -1
- package/scripts/pod-export-service.test.cjs +3 -1
- package/scripts/smoke-pod-workflow.cjs +3 -1
- package/scripts/validate-branding.js +19 -3
- package/scripts/validate-git-vetor.cjs +99 -0
- package/scripts/validate-spec-coverage.cjs +364 -0
- package/scripts/veto-checks.test.cjs +6 -2
- package/template/.claude/agents/pc-devops.md +2 -1
- package/template/.claude/agents/pc-tutor.md +78 -0
- package/template/.claude/commands/power/tutor.md +11 -0
- package/template/.claude/hooks/enforce-git-push-authority.cjs +385 -5
- package/template/.claude/hooks/irreversible-remotes.json +1 -0
- package/template/.claude/rules/orchestration.md +2 -1
- package/template/pods/academy/pod-spec.json +1 -1
- package/template/pods/academy/workflows/wf-materiais-revisao.yaml +1 -1
- package/template/pods/authority-content/pod-spec.json +1 -1
- package/template/pods/authority-content/workflows/wf-criacao-redteam.yaml +1 -1
- package/template/pods/automation/pod-spec.json +3 -3
- package/template/pods/automation/specs/wf-langgraph-build.spec.json +3 -3
- package/template/pods/automation/workflows/wf-langgraph-build.yaml +3 -3
- package/template/pods/automation/workflows/wf-n8n-build.yaml +3 -3
- package/template/pods/content-carousel/pod-spec.json +9 -2
- package/template/pods/content-carousel/workflows/wf-content-carousel.yaml +2 -2
- package/template/pods/hormozi-method/specs/wf-full-launch-sequence.spec.json +4 -4
- package/template/pods/hormozi-method/specs/wf-lead-magnet-pipeline.spec.json +3 -3
- package/template/pods/hormozi-method/specs/wf-money-model-design.spec.json +2 -2
- package/template/pods/hormozi-method/specs/wf-paid-ads-campaign.spec.json +3 -3
- package/template/pods/hormozi-method/specs/wf-scaling-diagnostic.spec.json +3 -3
- package/template/pods/hormozi-method/workflows/wf-full-launch-sequence.yaml +4 -4
- package/template/pods/hormozi-method/workflows/wf-lead-magnet-pipeline.yaml +3 -3
- package/template/pods/hormozi-method/workflows/wf-money-model-design.yaml +2 -2
- package/template/pods/hormozi-method/workflows/wf-paid-ads-campaign.yaml +3 -3
- package/template/pods/hormozi-method/workflows/wf-scaling-diagnostic.yaml +3 -3
- package/template/pods/squad-forge/agents/forge-chief.md +1 -1
- package/template/pods/squad-forge/pod-spec.json +2 -2
- package/template/pods/squad-forge/tasks/pipeline.md +20 -8
- package/template/pods/squad-forge/templates/register-tmpl.md +5 -0
- package/template/pods/squad-forge/workflows/wf-forge.smoke.json +2 -2
- package/template/pods/squad-forge/workflows/wf-forge.yaml +2 -2
package/README.md
CHANGED
|
@@ -2,47 +2,67 @@
|
|
|
2
2
|
|
|
3
3
|
Framework enxuto de agentes para Claude Code — **pods por job-to-be-done**, com budget de tokens como gate de qualidade.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Você o instala dentro de um projeto seu, e ele acrescenta ali agentes, regras, skills e verificações
|
|
6
|
+
automáticas que o Claude Code passa a usar. Não substitui o Claude Code: dá forma ao que ele faz, e
|
|
7
|
+
verifica o resultado em disco antes de você confiar nele.
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
2. **Budget de tokens como gate** — todo agente declara `budget_tokens` no frontmatter e um validador determinístico (`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.
|
|
9
|
-
3. **Enforcement determinístico** — regras críticas viram hooks e scripts, não pedidos educados no prompt. Exemplo: o hook `enforce-git-push-authority.cjs` bloqueia `git push` fora do fluxo autorizado, direto no `PreToolUse`.
|
|
10
|
-
4. **Verificação adversarial embutida** — os pods incluem agentes críticos (red-team) que revisam o próprio output antes de você confiar nele.
|
|
11
|
-
5. **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`, 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.
|
|
9
|
+
## Para quem chega agora
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
Se esta é a sua primeira vez, o caminho mais curto é este, nesta ordem:
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
1. **[Comece aqui](docs/mecanismos/aprendizado/getting-started.md)** — instalar, conferir a instalação
|
|
14
|
+
com o `doctor` e rodar o primeiro comando. Poucos minutos, sem pré-requisito de leitura.
|
|
15
|
+
2. **[Guia de conceitos](docs/mecanismos/aprendizado/guia-de-conceitos.md)** — os termos que o framework
|
|
16
|
+
usa o tempo todo (pod, workflow, etapa, veto, checkpoint, budget, skill), um parágrafo cada.
|
|
17
|
+
3. **Um tutorial de ponta a ponta**, conforme o que você quer fazer primeiro:
|
|
18
|
+
- [rodar um pod do começo ao fim](docs/mecanismos/aprendizado/tutorial-rodar-um-pod.md);
|
|
19
|
+
- [levar uma story do pedido ao merge](docs/mecanismos/aprendizado/tutorial-ciclo-de-story.md);
|
|
20
|
+
- [criar um pod novo com o forge](docs/mecanismos/aprendizado/tutorial-criar-pod-com-forge.md).
|
|
16
21
|
|
|
17
|
-
|
|
22
|
+
Prefere perguntar a ler? Depois de instalar, digite `/power:tutor` no Claude Code — ele aponta o
|
|
23
|
+
próximo passo certo para o seu caso, sem você ter que escolher sozinho por qual destes documentos
|
|
24
|
+
começar.
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
Se você prefere instalar antes de ler, vá direto para a seção **Instalação**, logo abaixo — o
|
|
27
|
+
getting-started continua valendo depois.
|
|
20
28
|
|
|
21
|
-
|
|
29
|
+
## Princípios
|
|
30
|
+
|
|
31
|
+
1. **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.
|
|
32
|
+
2. **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.
|
|
33
|
+
3. **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`.
|
|
34
|
+
4. **Verificação adversarial embutida** — os pods incluem agentes críticos (red-team) que revisam o próprio output antes de você confiar nele.
|
|
35
|
+
5. **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.
|
|
22
36
|
|
|
23
37
|
## Instalação
|
|
24
38
|
|
|
25
|
-
|
|
39
|
+
O framework é distribuído pelo npm. Dentro do projeto onde você quer usá-lo:
|
|
26
40
|
|
|
27
41
|
```bash
|
|
28
42
|
cd seu-projeto
|
|
29
|
-
npx
|
|
43
|
+
npx @daniellins/power-claude install --yes
|
|
30
44
|
```
|
|
31
45
|
|
|
32
|
-
|
|
46
|
+
`--yes` é o modo não-interativo: instala todos os pods, assume os padrões e **nunca** sobrescreve nem
|
|
47
|
+
remove arquivo seu. Para escolher quais pods entram e decidir sobre o `git init` com commit inicial,
|
|
48
|
+
rode a forma interativa:
|
|
33
49
|
|
|
34
50
|
```bash
|
|
35
51
|
npx @daniellins/power-claude install
|
|
36
52
|
```
|
|
37
53
|
|
|
38
|
-
|
|
54
|
+
Em qualquer um dos dois, o instalador registra o que colocou em `.power-claude/manifest.json` — é esse
|
|
55
|
+
manifesto que dá base ao `update` e ao `uninstall`. Logo depois de instalar, confira a instalação:
|
|
39
56
|
|
|
40
57
|
```bash
|
|
41
|
-
npx @daniellins/power-claude
|
|
58
|
+
npx @daniellins/power-claude doctor
|
|
42
59
|
```
|
|
43
60
|
|
|
44
61
|
O 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.
|
|
45
62
|
|
|
63
|
+
O npm é o caminho de instalação — não `git clone`. Um clone do repositório serve para ler e auditar o
|
|
64
|
+
código, nunca para instalar; o que o instalador copia é o que o pacote publica.
|
|
65
|
+
|
|
46
66
|
## Comandos do CLI
|
|
47
67
|
|
|
48
68
|
| Comando | O que faz |
|
|
@@ -50,11 +70,12 @@ O instalador **nunca sobrescreve** arquivos seus: conflitos são perguntados (in
|
|
|
50
70
|
| `power-claude install` | Instala o framework no diretório atual (default) |
|
|
51
71
|
| `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` |
|
|
52
72
|
| `power-claude update` | Atualiza; arquivos que você modificou são preservados (com diff resumido no modo interativo) |
|
|
53
|
-
| `power-claude doctor` | Diagnóstico: integridade do manifest, hooks, `.gitignore`, gate de budgets, tamanho do CLAUDE.md |
|
|
73
|
+
| `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 |
|
|
54
74
|
| `power-claude uninstall` | Remove apenas o que o instalador colocou e continua intacto; o que você modificou fica |
|
|
55
75
|
| `power-claude --help` / `--version` | Ajuda / versão |
|
|
56
76
|
|
|
57
|
-
|
|
77
|
+
Flags globais: `--yes` (`-y`) para modo não-interativo; `--scope motor`, só em `update`, restringe a
|
|
78
|
+
atualização aos scripts do motor (ver a nota da próxima seção).
|
|
58
79
|
|
|
59
80
|
## Estrutura instalada
|
|
60
81
|
|
|
@@ -63,30 +84,50 @@ seu-projeto/
|
|
|
63
84
|
├── .claude/
|
|
64
85
|
│ ├── CLAUDE.md # instruções enxutas (budget ~2.000 tokens)
|
|
65
86
|
│ ├── settings.json # hooks + permissions (merge com o seu)
|
|
87
|
+
│ ├── agents/ # papéis do ciclo (pc-planner, pc-dev, pc-qa, pc-devops, ...)
|
|
88
|
+
│ ├── commands/ # comandos /power:*
|
|
89
|
+
│ ├── rules/ # autoridade, orquestração, matriz de modelos, curadoria
|
|
90
|
+
│ ├── skills/ # pc-run-pod, pc-full-cycle, pc-pipeline, pc-arena, ...
|
|
66
91
|
│ └── hooks/
|
|
67
|
-
│
|
|
92
|
+
│ ├── enforce-git-push-authority.cjs
|
|
93
|
+
│ ├── enforce-cycle-authority.cjs
|
|
94
|
+
│ ├── enforce-ready-oracles.cjs
|
|
95
|
+
│ └── context-budget.cjs
|
|
68
96
|
├── pods/
|
|
69
97
|
│ ├── academy/ # aulas, palestras, treinamentos
|
|
70
98
|
│ ├── authority-content/ # conteúdo com voz própria e fact-check
|
|
71
99
|
│ ├── automation/ # N8N + Langgraph
|
|
100
|
+
│ ├── content-carousel/ # carrosséis a partir de uma fonte, com fact-check
|
|
72
101
|
│ ├── dev-ia/ # ciclo de desenvolvimento com IA
|
|
102
|
+
│ ├── hormozi-method/ # oferta, aquisição e diagnóstico de escala
|
|
73
103
|
│ └── squad-forge/ # cria novos agentes e pods
|
|
74
104
|
├── knowledge/
|
|
75
|
-
│
|
|
76
|
-
|
|
77
|
-
|
|
105
|
+
│ ├── voice-dna/ # DNA de voz para conteúdo autoral (opcional)
|
|
106
|
+
│ └── analyst/ # base de pesquisa compartilhada
|
|
107
|
+
├── scripts/ # motor: runner, memória, validadores, vetos
|
|
78
108
|
└── .power-claude/
|
|
79
109
|
└── manifest.json # estado da instalação (base do update/uninstall)
|
|
80
110
|
```
|
|
81
111
|
|
|
82
|
-
|
|
112
|
+
O catálogo dos pods, com o job-to-be-done de cada um, está em [`template/pods/README.md`](template/pods/README.md).
|
|
113
|
+
|
|
114
|
+
**O que viaja para a sua instalação, e o que não viaja.** `install` copia o `template/` inteiro (o
|
|
115
|
+
`.claude/` acima, com agentes, regras, skills, comandos e hooks, mais os pods que você escolheu) **e**
|
|
116
|
+
os scripts do motor declarados em [`installer/motor-scripts.json`](installer/motor-scripts.json) — o
|
|
117
|
+
runner, a memória evolutiva dos pods, os validadores de workflow e os vetos vão junto, em `scripts/`,
|
|
118
|
+
com o mesmo contrato de preservação do template (o que você modificar não é sobrescrito; `update
|
|
119
|
+
--scope motor` é a via explícita para atualizar só esses scripts). O que **não** viaja é o que só faz
|
|
120
|
+
sentido no repositório do framework: testes, fixtures e um punhado de scripts nomeados na lista
|
|
121
|
+
`exclude` do mesmo manifesto. A documentação também não entra no pacote npm (`package.json` →
|
|
122
|
+
`files: ["bin","installer","template","scripts"]`) — ela vive neste repositório, que é o que você está
|
|
123
|
+
lendo agora.
|
|
83
124
|
|
|
84
|
-
## Personalização
|
|
125
|
+
## Personalização
|
|
85
126
|
|
|
86
|
-
**
|
|
87
|
-
perguntam quem é você — **uma vez, três campos** (nome, handle, uma linha de
|
|
88
|
-
mais — voz, tom, léxico, objetivos — é opcional, tem default funcional, e vai se
|
|
89
|
-
seu feedback durante o uso.
|
|
127
|
+
Opcional, em três degraus — e **nenhum pod exige que você construa um DNA de voz.** Os pods que assinam
|
|
128
|
+
peças **em seu nome** perguntam quem é você — **uma vez, três campos** (nome, handle, uma linha de
|
|
129
|
+
autoridade). Tudo o mais — voz, tom, léxico, objetivos — é opcional, tem default funcional, e vai se
|
|
130
|
+
ajustando com o seu feedback durante o uso.
|
|
90
131
|
|
|
91
132
|
| Degrau | O que você fornece | Onde mora | O que muda |
|
|
92
133
|
|---|---|---|---|
|
|
@@ -107,6 +148,29 @@ template distribui só os `*.example.*`, e um oráculo (`scripts/owner-layer.cjs
|
|
|
107
148
|
ser um placeholder marcado. Passo a passo de instanciação: `knowledge/voice-dna/README.md` na sua
|
|
108
149
|
instalação.
|
|
109
150
|
|
|
151
|
+
## Para quem avalia o framework
|
|
152
|
+
|
|
153
|
+
Se você já conhece o terreno e quer julgar profundidade em vez de aprender do zero:
|
|
154
|
+
|
|
155
|
+
- **[Índice dos mecanismos](docs/mecanismos/README.md)** — a referência densa: uma página por
|
|
156
|
+
mecanismo entregue, agrupada por área funcional, com comandos reais e ligação para o "porquê".
|
|
157
|
+
É o melhor lugar para medir o que o framework realmente faz.
|
|
158
|
+
- **[Releases do GitHub](../../releases)** — o histórico versão a versão, com o que entrou em cada
|
|
159
|
+
release; o corpo de cada Release deriva do `CHANGELOG.md` do repositório de desenvolvimento (privado
|
|
160
|
+
por decisão). Este README não mantém vitrine de novidades: quem responde por "o que mudou desde a
|
|
161
|
+
última vez que olhei" são as Releases.
|
|
162
|
+
- **[Decisões arquiteturais (ADR)](docs/adr)** — cada decisão não trivial com alternativas
|
|
163
|
+
consideradas, o que foi medido e o que foi recusado. É onde ver o critério, não só o resultado.
|
|
164
|
+
- **[Pesquisa e registros de investigação](docs/research)** — o que foi medido antes de decidir,
|
|
165
|
+
inclusive quando a medição derrubou a hipótese.
|
|
166
|
+
|
|
167
|
+
**Sobre as referências a `docs/stories` e `docs/qa` que você vai encontrar nos ADRs e na pesquisa.** Elas
|
|
168
|
+
apontam para o registro de execução do framework — as stories de desenvolvimento e os gates de qualidade que
|
|
169
|
+
as aprovam. Esse registro é **privado por decisão explícita, não por descuido**: o que se publica aqui é o
|
|
170
|
+
critério (o porquê e o que foi medido), enquanto o diário de execução, que carrega contexto operacional e
|
|
171
|
+
pessoal de quem trabalha nele, fica fora. Um link quebrado para `docs/stories/...` ou `docs/qa/...` num ADR
|
|
172
|
+
é, portanto, o comportamento esperado desta fronteira — não um arquivo perdido.
|
|
173
|
+
|
|
110
174
|
## Validação no repositório do framework
|
|
111
175
|
|
|
112
176
|
```bash
|
|
@@ -116,6 +180,6 @@ npm run validate # budgets + branding + validate-no-clone
|
|
|
116
180
|
|
|
117
181
|
## Licença
|
|
118
182
|
|
|
119
|
-
[MIT](
|
|
183
|
+
[MIT](LICENSE) — Copyright (c) 2026 **Daniel Lins**.
|
|
120
184
|
|
|
121
185
|
Use, copie e adapte à vontade, mantendo a atribuição a Daniel Lins conforme a licença.
|
|
@@ -1,39 +1,203 @@
|
|
|
1
1
|
{
|
|
2
2
|
"scripts": [
|
|
3
|
-
{
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
{
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
{
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
{
|
|
35
|
-
|
|
36
|
-
|
|
3
|
+
{
|
|
4
|
+
"path": "scripts/pc-run-pod.cjs",
|
|
5
|
+
"owner": "skill:pc-run-pod",
|
|
6
|
+
"reason": "referenced"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"path": "scripts/pod-memory.cjs",
|
|
10
|
+
"owner": "skill:pc-run-pod",
|
|
11
|
+
"reason": "referenced"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"path": "scripts/pod-memory-note.cjs",
|
|
15
|
+
"owner": "skill:pc-run-pod",
|
|
16
|
+
"reason": "referenced",
|
|
17
|
+
"requiredBy": "skill:pc-run-pod"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "scripts/validate-pod-workflow.cjs",
|
|
21
|
+
"owner": "pod:squad-forge",
|
|
22
|
+
"reason": "referenced"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "scripts/smoke-pod-workflow.cjs",
|
|
26
|
+
"owner": "pod:squad-forge",
|
|
27
|
+
"reason": "referenced"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "scripts/harness-g5-lite.cjs",
|
|
31
|
+
"owner": "pod:squad-forge",
|
|
32
|
+
"reason": "referenced"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"path": "scripts/migration-manifest.cjs",
|
|
36
|
+
"owner": "pod:squad-forge",
|
|
37
|
+
"reason": "referenced"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "scripts/watcher-audit.cjs",
|
|
41
|
+
"owner": "pod:squad-forge",
|
|
42
|
+
"reason": "referenced"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "scripts/validate-no-clone.cjs",
|
|
46
|
+
"owner": "pod:squad-forge",
|
|
47
|
+
"reason": "referenced"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": "scripts/forge-assess-tier.cjs",
|
|
51
|
+
"owner": "pod:squad-forge",
|
|
52
|
+
"reason": "referenced"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"path": "scripts/validate-fidelity-output.cjs",
|
|
56
|
+
"owner": "squad-forge/mind-extractor",
|
|
57
|
+
"reason": "referenced"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"path": "scripts/validate-source-audit.cjs",
|
|
61
|
+
"owner": "squad-forge/mind-extractor",
|
|
62
|
+
"reason": "referenced"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"path": "scripts/arena.cjs",
|
|
66
|
+
"owner": "skill:pc-arena",
|
|
67
|
+
"reason": "referenced"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"path": "scripts/forge-generate.cjs",
|
|
71
|
+
"owner": "pod:squad-forge",
|
|
72
|
+
"reason": "referenced"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"path": "scripts/forge-ingest-memory.cjs",
|
|
76
|
+
"owner": "pod:squad-forge",
|
|
77
|
+
"reason": "referenced"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"path": "scripts/forge-upgrade-pod.cjs",
|
|
81
|
+
"owner": "pod:squad-forge",
|
|
82
|
+
"reason": "referenced"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"path": "scripts/forge-harden-learning.cjs",
|
|
86
|
+
"owner": "pod:squad-forge",
|
|
87
|
+
"reason": "referenced"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"path": "scripts/validate-branding.js",
|
|
91
|
+
"owner": "pod:squad-forge",
|
|
92
|
+
"reason": "require-dependency",
|
|
93
|
+
"requiredBy": "scripts/validate-no-clone.cjs"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"path": "scripts/validate-budgets.js",
|
|
97
|
+
"owner": "pods:*",
|
|
98
|
+
"reason": "referenced"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"path": "scripts/veto-checks/lexical-check.cjs",
|
|
102
|
+
"owner": "veto:command_check",
|
|
103
|
+
"reason": "referenced",
|
|
104
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"path": "scripts/veto-checks/html-valid.cjs",
|
|
108
|
+
"owner": "veto:command_check",
|
|
109
|
+
"reason": "referenced",
|
|
110
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"path": "scripts/veto-checks/render-gate.cjs",
|
|
114
|
+
"owner": "veto:command_check",
|
|
115
|
+
"reason": "referenced",
|
|
116
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "scripts/veto-checks/phash-gate.cjs",
|
|
120
|
+
"owner": "veto:command_check",
|
|
121
|
+
"reason": "referenced",
|
|
122
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"path": "scripts/veto-checks/render-png.cjs",
|
|
126
|
+
"owner": "veto:command_check",
|
|
127
|
+
"reason": "referenced",
|
|
128
|
+
"requiredBy": "scripts/pc-run-pod.cjs"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"path": "scripts/pc-run-pipeline.cjs",
|
|
132
|
+
"owner": "skill:pc-pipeline",
|
|
133
|
+
"reason": "referenced",
|
|
134
|
+
"requiredBy": "skill:pc-pipeline"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"path": "scripts/validate-pipeline.cjs",
|
|
138
|
+
"owner": "skill:pc-pipeline",
|
|
139
|
+
"reason": "require-dependency",
|
|
140
|
+
"requiredBy": "scripts/pc-run-pipeline.cjs"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"path": "scripts/pod-export-compile.cjs",
|
|
144
|
+
"owner": "skill:pc-export",
|
|
145
|
+
"reason": "referenced",
|
|
146
|
+
"requiredBy": "skill:pc-export"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"path": "scripts/pod-export-executor.cjs",
|
|
150
|
+
"owner": "skill:pc-export",
|
|
151
|
+
"reason": "referenced",
|
|
152
|
+
"requiredBy": "skill:pc-export"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"path": "scripts/pod-export-release.cjs",
|
|
156
|
+
"owner": "skill:pc-export",
|
|
157
|
+
"reason": "referenced",
|
|
158
|
+
"requiredBy": "skill:pc-export"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"path": "scripts/pod-export-tools.cjs",
|
|
162
|
+
"owner": "skill:pc-export",
|
|
163
|
+
"reason": "require-dependency",
|
|
164
|
+
"requiredBy": "scripts/pod-export-executor.cjs"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"path": "scripts/pod-export-postprocess.cjs",
|
|
168
|
+
"owner": "skill:pc-export",
|
|
169
|
+
"reason": "require-dependency",
|
|
170
|
+
"requiredBy": "scripts/pod-export-executor.cjs"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"path": "scripts/pod-export-service.cjs",
|
|
174
|
+
"owner": "skill:pc-export",
|
|
175
|
+
"reason": "referenced",
|
|
176
|
+
"requiredBy": "skill:pc-export"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"path": "scripts/pod-export-ui.cjs",
|
|
180
|
+
"owner": "skill:pc-export",
|
|
181
|
+
"reason": "referenced",
|
|
182
|
+
"requiredBy": "skill:pc-export"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"path": "scripts/validate-story-acs.cjs",
|
|
186
|
+
"owner": "skill:pc-validate-story",
|
|
187
|
+
"reason": "referenced"
|
|
188
|
+
}
|
|
37
189
|
],
|
|
38
|
-
"exclude": [
|
|
190
|
+
"exclude": [
|
|
191
|
+
"*.test.cjs",
|
|
192
|
+
"__tests__/",
|
|
193
|
+
"__fixtures__/",
|
|
194
|
+
"validate-install.js",
|
|
195
|
+
"validate-adopt.js",
|
|
196
|
+
"validate-update-scope-motor.js",
|
|
197
|
+
"owner-layer.cjs",
|
|
198
|
+
"derive-ready-transitions.cjs",
|
|
199
|
+
"validate-git-vetor.cjs",
|
|
200
|
+
"build-public-tree.cjs",
|
|
201
|
+
"validate-spec-coverage.cjs"
|
|
202
|
+
]
|
|
39
203
|
}
|
package/package.json
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daniellins/power-claude",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
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",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/daniellins/power-claude-core.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/daniellins/power-claude-core#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/daniellins/power-claude-core/issues"
|
|
14
|
+
},
|
|
7
15
|
"bin": {
|
|
8
16
|
"power-claude": "bin/cli.js"
|
|
9
17
|
},
|
|
@@ -20,7 +28,7 @@
|
|
|
20
28
|
"scripts"
|
|
21
29
|
],
|
|
22
30
|
"scripts": {
|
|
23
|
-
"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-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/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__/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",
|
|
24
|
-
"validate": "node scripts/validate-budgets.js template/pods template/.claude/agents && node scripts/validate-branding.js && node scripts/validate-no-clone.cjs template"
|
|
31
|
+
"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",
|
|
32
|
+
"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"
|
|
25
33
|
}
|
|
26
34
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mm-copy": {
|
|
3
|
+
"wf": "template/pods/hormozi-method/workflows/wf-money-model-design.yaml",
|
|
4
|
+
"criteria": "Conferência final do checklist de 8 itens: o retorno por cliente sobre o custo de aquisição é de pelo menos 3 para 1 (LTGP:CAC>=3:1); o caixa fica positivo em até 30 dias (30-day cash flow+); 5+ ofertas; existe uma oferta de continuidade (continuity presente); o preço está ancorado em pelo menos 3 vezes o valor (ancoragem 3x+); há um downsell (oferta de baixo custo para quem recusa a principal); a copy está completa, sem nenhuma peça faltando; a sequência do funil está desenhada (sequência mapeada). Esta etapa reconfere pela 2ª vez o que a Fase 4 do processo já produziu: os itens numéricos (retorno sobre custo, caixa em 30 dias) são conferidos aqui como cálculo e julgamento seu, não como veto automático da máquina."
|
|
5
|
+
},
|
|
6
|
+
"paid-criativos": {
|
|
7
|
+
"wf": "template/pods/hormozi-method/workflows/wf-paid-ads-campaign.yaml",
|
|
8
|
+
"criteria": "Os hooks estão distribuídos por todos os 5 níveis de consciência do público (awareness), sem concentrar 100% num único nível, seguindo a proporção 70-20-10; a fonte de inspiração criativa (swipe file) está documentada; e há congruência landing page × ad verificada (a landing page bate com o anúncio). Isto é uma avaliação qualitativa, um julgamento seu — nunca um veto automático da máquina: as duas condições de ter 100% num único awareness level e de a landing não bater com o anúncio são congruência qualitativa que só o seu olho decide. Já os dois volumes mínimos exigidos — Menos de 50 hooks e Menos de 150 combinações — esses SIM a máquina confere sozinha, de forma automática e sem exigir o seu julgamento, distintos do julgamento qualitativo acima."
|
|
9
|
+
},
|
|
10
|
+
"lg-handoff": {
|
|
11
|
+
"wf": "template/pods/automation/workflows/wf-langgraph-build.yaml",
|
|
12
|
+
"criteria": "Regra inegociável do pod, item 3 do guia do pod: o runbook (o documento de operação) tem de ser OPERÁVEL — precisa explicar o que a automação faz, como saber que ela quebrou, como reexecutar com segurança, trazer a configuração de checkpointer/persistência (o mecanismo que retoma de onde parou após uma falha) e dizer quem é o dono. Julgar se esse runbook está completo é decisão sua, um julgamento de completude — não uma checagem automática da máquina, nunca um veto. A única fatia objetiva que a máquina confere sozinha é a existência em disco do arquivo do entregável: entregável existe (todo o resto da lista acima é julgamento seu)."
|
|
13
|
+
},
|
|
14
|
+
"n8n-handoff": {
|
|
15
|
+
"wf": "template/pods/automation/workflows/wf-n8n-build.yaml",
|
|
16
|
+
"criteria": "Regra inegociável do pod, item 3 do guia do pod: o runbook (o documento de operação) tem de ser OPERÁVEL — precisa explicar o que a automação faz, como saber que ela quebrou (onde olhar quando falhar), como reexecutar com segurança, listar as credenciais necessárias e dizer quem é o dono. Julgar se esse runbook está completo e com qualidade é decisão sua, um julgamento humano — não uma checagem automática da máquina, nunca um veto. A única fatia objetiva que a máquina confere sozinha é a existência em disco do arquivo do entregável: o entregável existe (todo o resto da lista acima é julgamento seu)."
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPEC sintética — CLI exit 0 (fixture AC4, invocação single-arg)
|
|
2
|
+
|
|
3
|
+
Todos os requisitos deferidos por marcador válido; sem story, `orfao` é vazio ⇒ exit 0.
|
|
4
|
+
|
|
5
|
+
**FR-1.** um requisito deliberadamente deferido. _(Deferido: PA-1.)_
|
|
6
|
+
|
|
7
|
+
**NFR-1.** outro deferido. _(Deferido: PA-1.)_
|
|
8
|
+
|
|
9
|
+
## 8. Perguntas de produto abertas
|
|
10
|
+
|
|
11
|
+
**PA-1.** a âncora que resolve os deferimentos acima.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPEC sintética — contrato de 4 conjuntos, SEM órfão (fixture AC14, 2ª SPEC)
|
|
2
|
+
|
|
3
|
+
Idêntica à contract4.spec.md, mas sem o FR-2 órfão: exit 0, `deferido` ainda impresso.
|
|
4
|
+
|
|
5
|
+
**FR-1.** requisito coberto (a story o cita).
|
|
6
|
+
|
|
7
|
+
**NFR-1.** requisito com waiver válido. _(Deferido: ADR-999.)_
|
|
8
|
+
|
|
9
|
+
## Referências
|
|
10
|
+
|
|
11
|
+
ADR-999 é citado aqui, em outro ponto do fixture, para que a âncora do deferimento do NFR-1 resolva.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPEC sintética — contrato de 4 conjuntos (fixture AC14)
|
|
2
|
+
|
|
3
|
+
**FR-1.** requisito coberto (a story o cita).
|
|
4
|
+
|
|
5
|
+
**FR-2.** requisito órfão (nenhuma story o cita, sem waiver).
|
|
6
|
+
|
|
7
|
+
**NFR-1.** requisito com waiver válido. _(Deferido: ADR-999.)_
|
|
8
|
+
|
|
9
|
+
## Referências
|
|
10
|
+
|
|
11
|
+
ADR-999 é citado aqui, em outro ponto do fixture, para que a âncora do deferimento do NFR-1 resolva (não seja pendurada).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPEC sintética — extractDeferrals caso POSITIVO (fixture AC11)
|
|
2
|
+
|
|
3
|
+
**FR-1.** requisito comum, sem marcador.
|
|
4
|
+
|
|
5
|
+
**NFR-2.** portabilidade — deferida. _(Deferido: PA-2.)_
|
|
6
|
+
|
|
7
|
+
**FR-3.** integração — deferida com razão livre. _(Deferido: ADR-005, razão livre)_
|
|
8
|
+
|
|
9
|
+
## 8. Perguntas de produto abertas
|
|
10
|
+
|
|
11
|
+
**PA-2.** âncora que resolve o deferimento do NFR-2. Ver também ADR-005 para o do FR-3.
|