bigpowers 2.87.0 → 2.87.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/.pi/package.json +1 -1
- package/ANALISE_CONSOLIDACAO.md +192 -0
- package/CHANGELOG.md +15 -0
- package/GSD_WORKFLOW_ANALYSIS_VS_BIGPOWERS.md +1015 -0
- package/README.md +10 -7
- package/VALIDACAO_CONTRA_GSD.md +321 -0
- package/bin/bigpowers.js +46 -3
- package/package.json +1 -1
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
- package/scripts/lib/git-hours.sh +1 -1
- package/scripts/record-cycle-time.sh +3 -1
- package/scripts/validate-agentic-ste.sh +22 -1
package/README.md
CHANGED
|
@@ -43,15 +43,17 @@ After installing, ask your agent to run the `using-bigpowers` skill — it is th
|
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
45
|
# Global install (no lifecycle scripts — npm v10+ safe)
|
|
46
|
-
npm install -g bigpowers
|
|
46
|
+
npm install -g bigpowers@latest
|
|
47
47
|
bigpowers setup # runs sync + install, links skills to your tools
|
|
48
48
|
|
|
49
|
-
# Or one-shot with npx
|
|
50
|
-
npx bigpowers setup
|
|
49
|
+
# Or one-shot with npx (always fetches the newest release)
|
|
50
|
+
npx bigpowers@latest setup
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Both commands sync skill artifacts and link them to Claude Code, Gemini CLI, and Cursor (see [Prerequisites](#-prerequisites)).
|
|
54
54
|
|
|
55
|
+
> **Always pin `@latest`.** With bigpowers already installed globally, a bare `npx bigpowers setup` reuses the stale global binary and `npm update -g bigpowers` doesn't reliably cross to the newest release. `npm install -g bigpowers@latest` and `npx bigpowers@latest setup` force a registry fetch every time.
|
|
56
|
+
|
|
55
57
|
### Interactive Installer
|
|
56
58
|
|
|
57
59
|
The `npx bigpowers setup` command launches an interactive menu where you can:
|
|
@@ -269,10 +271,11 @@ Or add manually to `.claude/settings.json`:
|
|
|
269
271
|
**npm install:**
|
|
270
272
|
|
|
271
273
|
```bash
|
|
272
|
-
|
|
273
|
-
bigpowers update # re-sync and refresh symlinks
|
|
274
|
+
bigpowers update # fetches bigpowers@latest (global installs), then re-syncs + refreshes symlinks
|
|
274
275
|
```
|
|
275
276
|
|
|
277
|
+
`bigpowers update` now runs `npm install -g bigpowers@latest` for you when bigpowers is installed globally, so running it alone is enough to reach the newest release. Prefer to do it by hand? `npm install -g bigpowers@latest && bigpowers update`. (Avoid `npm update -g bigpowers` — it does not reliably cross to `@latest`.)
|
|
278
|
+
|
|
276
279
|
**git clone:**
|
|
277
280
|
|
|
278
281
|
```bash
|
|
@@ -301,9 +304,9 @@ bash scripts/install.sh --uninstall
|
|
|
301
304
|
### Reinstall
|
|
302
305
|
|
|
303
306
|
```bash
|
|
304
|
-
npx bigpowers setup
|
|
307
|
+
npx bigpowers@latest setup
|
|
305
308
|
# or, if installed globally:
|
|
306
|
-
bigpowers
|
|
309
|
+
bigpowers update
|
|
307
310
|
```
|
|
308
311
|
|
|
309
312
|
---
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# Validação Cruzada: Bigpowers vs. GSD (Get Shit Done)
|
|
2
|
+
|
|
3
|
+
**Data:** 2026-05-18
|
|
4
|
+
**Scope:** Comparar consolidação proposta com arquitetura de artefatos de GSD
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Comparação de Estrutura
|
|
9
|
+
|
|
10
|
+
### GSD (Get Shit Done)
|
|
11
|
+
```
|
|
12
|
+
.planning/
|
|
13
|
+
├── PROJECT.md ← Contexto do projeto (validado vs. em escopo)
|
|
14
|
+
├── ROADMAP.md ← Fases + plans + success criteria
|
|
15
|
+
├── STATE.md ← Estado atual (< 100 linhas)
|
|
16
|
+
├── {phase}-{plan}-PLAN.md ← Planos individuais
|
|
17
|
+
└── todos/pending/ ← Ideias capturadas
|
|
18
|
+
|
|
19
|
+
templates/ ← 30+ templates
|
|
20
|
+
references/ ← 60+ docs de referência técnica
|
|
21
|
+
workflows/ ← 93+ workflows (comandos CLI)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Bigpowers (Proposta de Consolidação)
|
|
25
|
+
```
|
|
26
|
+
specs/
|
|
27
|
+
├── STATE.md ← Estado atual (59 linhas) ✅
|
|
28
|
+
├── RELEASE-PLAN.md ← Roadmap vivo ✅
|
|
29
|
+
├── PLAN-v*.md ← Histórico → archive/ ✅
|
|
30
|
+
├── archive/releases/ ← Novo: histórico consolidado
|
|
31
|
+
├── CONTEXT.md, UBIQUITOUS_LANGUAGE.md, etc.
|
|
32
|
+
└── ...
|
|
33
|
+
|
|
34
|
+
SKILL-INDEX.md ← Novo: tabela canônica
|
|
35
|
+
README.md ← Simplificado
|
|
36
|
+
CONVENTIONS.md ← Existente
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. Gap Analysis: O Que Falta em Bigpowers
|
|
42
|
+
|
|
43
|
+
### 2.1 Falta: PROJECT.md (Contexto do Projeto)
|
|
44
|
+
|
|
45
|
+
**GSD tem:**
|
|
46
|
+
```markdown
|
|
47
|
+
# PROJECT.md
|
|
48
|
+
|
|
49
|
+
## What This Is
|
|
50
|
+
[Descrição atual do projeto]
|
|
51
|
+
|
|
52
|
+
## Core Value
|
|
53
|
+
[Uma coisa que importa mais]
|
|
54
|
+
|
|
55
|
+
## Requirements
|
|
56
|
+
- Validated (já enviado, comprovado)
|
|
57
|
+
- Active (em construção)
|
|
58
|
+
- Out of Scope (com razão do exclusão)
|
|
59
|
+
|
|
60
|
+
## Context
|
|
61
|
+
[Background técnico e de usuário]
|
|
62
|
+
|
|
63
|
+
## Constraints
|
|
64
|
+
[Limitações: stack, timeline, etc.]
|
|
65
|
+
|
|
66
|
+
## Key Decisions
|
|
67
|
+
[Histórico de decisões significativas]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Bigpowers não tem equivalente.** Tem CLAUDE.md (comandos, stack, arquitetura), mas não tem:
|
|
71
|
+
- ❌ Requisitos (Validated/Active/Out of Scope)
|
|
72
|
+
- ❌ Core Value (a uma coisa que importa)
|
|
73
|
+
- ❌ Decisões significativas rastreadas
|
|
74
|
+
- ❌ Constraints formalizadas
|
|
75
|
+
|
|
76
|
+
**Recomendação:** Criar `specs/PROJECT.md` para bigpowers com:
|
|
77
|
+
- What This Is: "38 agent skills for spec-driven TDD by solo developers"
|
|
78
|
+
- Core Value: "Maintain quality (audit score) while scaling skill count"
|
|
79
|
+
- Active Requirements: Feature completeness, testing mandates, etc.
|
|
80
|
+
- Out of Scope: Domain-specific skills (scaffold-exercises), plugins, marketplace
|
|
81
|
+
- Key Decisions: verb-noun naming, local-first (sem GitHub issues), BMAD phases, etc.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### 2.2 ROADMAP.md vs. RELEASE-PLAN.md
|
|
86
|
+
|
|
87
|
+
**GSD usa ROADMAP.md:**
|
|
88
|
+
- Fases numeradas (1, 2, 3, ...)
|
|
89
|
+
- Decimal phases para inserts (2.1 = "critical fix inserted between 2 and 3")
|
|
90
|
+
- Success Criteria (observable behaviors)
|
|
91
|
+
- Plans count per phase
|
|
92
|
+
- Progress table com milestone column
|
|
93
|
+
|
|
94
|
+
**Bigpowers usa RELEASE-PLAN.md:**
|
|
95
|
+
- Releases (v1.11, v1.12, ...)
|
|
96
|
+
- WSJF scoring
|
|
97
|
+
- Status (✅, ⏳)
|
|
98
|
+
- Focus area (Benchmarks, Auditor, Karpathy, etc.)
|
|
99
|
+
- Detailed action items per release
|
|
100
|
+
|
|
101
|
+
**Análise:**
|
|
102
|
+
- ✅ RELEASE-PLAN.md é mais rico que ROADMAP (tem WSJF, status, detalhes)
|
|
103
|
+
- ✅ Ambas rastreiam progresso
|
|
104
|
+
- ⚠️ Bigpowers não tem "Success Criteria" formalizados (deveriam estar em STATE ou PROJECT)
|
|
105
|
+
|
|
106
|
+
**Recomendação:** Manter RELEASE-PLAN.md, mas adicionar "Success Criteria" por release:
|
|
107
|
+
```markdown
|
|
108
|
+
### v1.17.0 — Guardrails (WSJF 3.2) ⏳
|
|
109
|
+
|
|
110
|
+
**Success Criteria:**
|
|
111
|
+
- [ ] "Zoom-out mandate" implemented in plan-work as HARD-GATE
|
|
112
|
+
- [ ] Surgical changes checklist in audit-code passes 100% of tests
|
|
113
|
+
- [ ] CONVENTIONS.md explicitly forbids "touch unrelated code"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### 2.3 Artefatos Intermediários (Templates)
|
|
119
|
+
|
|
120
|
+
**GSD tem 30+ templates:**
|
|
121
|
+
- AI-SPEC.md, DEBUG.md, VALIDATION.md
|
|
122
|
+
- discovery.md, research.md, spec.md
|
|
123
|
+
- planner-subagent-prompt.md
|
|
124
|
+
- continue-here.md
|
|
125
|
+
|
|
126
|
+
**Bigpowers tem:**
|
|
127
|
+
- Implícitos em cada skill (não há templates separados)
|
|
128
|
+
- Rely em CONVENTIONS.md
|
|
129
|
+
|
|
130
|
+
**Recomendação:** Criar `templates/` subdir em bigpowers:
|
|
131
|
+
```
|
|
132
|
+
templates/
|
|
133
|
+
├── spec.md (→ specs/PLAN.md output format)
|
|
134
|
+
├── phase-discussion.md (→ output de elaborate-spec)
|
|
135
|
+
├── diagnosis.md (→ output de investigate-bug)
|
|
136
|
+
└── ...
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 2.4 Referências Técnicas (References)
|
|
142
|
+
|
|
143
|
+
**GSD tem 60+ references:**
|
|
144
|
+
- gates.md (quais gates bloquear, quais permitir)
|
|
145
|
+
- planner-antipatterns.md (o que não fazer)
|
|
146
|
+
- verification-patterns.md (como testar)
|
|
147
|
+
- thinking-models-*.md (modelos de pensamento por agente)
|
|
148
|
+
- tdd.md, executor-examples.md
|
|
149
|
+
|
|
150
|
+
**Bigpowers tem:**
|
|
151
|
+
- AUDIT.md (auditoria de cobertura de Clean Code)
|
|
152
|
+
- COMPARISON.md (comparação com superpowers, BMAD, etc.)
|
|
153
|
+
- Skills source em SKILL.md (inline docs)
|
|
154
|
+
|
|
155
|
+
**Recomendação:** Segregar em `references/`:
|
|
156
|
+
```
|
|
157
|
+
references/
|
|
158
|
+
├── clean-code-mapping.md (como cada skill implementa Clean Code)
|
|
159
|
+
├── gates-and-guardrails.md (HARD-GATEs em cada skill)
|
|
160
|
+
├── skill-antipatterns.md (o que não fazer em cada skill)
|
|
161
|
+
├── bmad-lifecycle.md (phases BMAD detalhadas)
|
|
162
|
+
└── ...
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 3. Validação: Minha Proposta vs. GSD
|
|
168
|
+
|
|
169
|
+
### O Que Está Certo em Minha Proposta
|
|
170
|
+
|
|
171
|
+
✅ **Hierarquia de artefatos**
|
|
172
|
+
- STATE → RELEASE-PLAN → SKILL-INDEX → README
|
|
173
|
+
- GSD faz: PROJECT → ROADMAP → STATE → PLAN
|
|
174
|
+
- Abordagens equivalentes, estilos diferentes
|
|
175
|
+
|
|
176
|
+
✅ **Consolidação de redundância**
|
|
177
|
+
- Deletar PLAN.md (stale) ← mesma que GSD faria
|
|
178
|
+
- Arquivar PLAN-v*.md ← GSD collapsa em `<details>` tags
|
|
179
|
+
- Single skill index ← GSD não tem equivalent, é um win para bigpowers
|
|
180
|
+
|
|
181
|
+
✅ **Nomes simples (verb-noun)**
|
|
182
|
+
- Bigpowers: `develop-tdd`, `validate-fix`, etc.
|
|
183
|
+
- GSD: `/gsd-new-project`, `/gsd-plan-phase`, etc. (verb-noun style)
|
|
184
|
+
- ✓ Bigpowers está bem aqui
|
|
185
|
+
|
|
186
|
+
✅ **Clareza de fases (BMAD)**
|
|
187
|
+
- Bigpowers: Discover → Elaborate → Plan → Build → Sustain
|
|
188
|
+
- GSD: Phase 1, 2, 3, ... (fases numeradas)
|
|
189
|
+
- Ambas funcionam; BMAD é mais descritivo
|
|
190
|
+
|
|
191
|
+
### O Que Está Incompleto em Minha Proposta
|
|
192
|
+
|
|
193
|
+
❌ **Falta PROJECT.md**
|
|
194
|
+
- GSD começa aqui: "What This Is", "Core Value", "Requirements"
|
|
195
|
+
- Bigpowers tem CLAUDE.md, mas não `specs/PROJECT.md`
|
|
196
|
+
- **Ação:** Adicionar PROJECT.md como canônico de contexto do projeto
|
|
197
|
+
|
|
198
|
+
❌ **Falta Success Criteria formalizados**
|
|
199
|
+
- GSD em ROADMAP: "Observable behaviors that must be TRUE"
|
|
200
|
+
- Bigpowers em RELEASE-PLAN: Apenas "Focus Area" e "Objective"
|
|
201
|
+
- **Ação:** Adicionar Success Criteria por release em RELEASE-PLAN.md
|
|
202
|
+
|
|
203
|
+
❌ **Falta templates/ e references/**
|
|
204
|
+
- GSD segrega templates (30+) e references (60+)
|
|
205
|
+
- Bigpowers tem tudo inline em SKILL.md
|
|
206
|
+
- **Ação:** Opcional; se fizer, criar `templates/` e `references/` como em GSD
|
|
207
|
+
|
|
208
|
+
❌ **Falta "Skill Antipatterns" ou "Gates"**
|
|
209
|
+
- GSD tem gates.md (quais gates bloquear)
|
|
210
|
+
- Bigpowers tem mandates em prose, não formalizados
|
|
211
|
+
- **Ação:** Criar `references/gates-and-guardrails.md`
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 4. Recomendação: Incorporar Melhores Práticas de GSD
|
|
216
|
+
|
|
217
|
+
### Fase 1: Imediato (Incorporar em Análise/SKILL-INDEX)
|
|
218
|
+
|
|
219
|
+
- [ ] Criar `specs/PROJECT.md` com:
|
|
220
|
+
- What This Is
|
|
221
|
+
- Core Value
|
|
222
|
+
- Active Requirements
|
|
223
|
+
- Out of Scope
|
|
224
|
+
- Key Decisions (a tabela de ADRs existentes)
|
|
225
|
+
|
|
226
|
+
- [ ] Atualizar RELEASE-PLAN.md com Success Criteria por release
|
|
227
|
+
|
|
228
|
+
- [ ] Manter SKILL-INDEX.md como proposto (similar a nada em GSD, é um win único)
|
|
229
|
+
|
|
230
|
+
### Fase 2: Médio Prazo (30 min de trabalho)
|
|
231
|
+
|
|
232
|
+
- [ ] Criar `templates/` com estruturas esperadas (spec.md, diagnosis.md, etc.)
|
|
233
|
+
|
|
234
|
+
- [ ] Criar `references/bmad-phases.md` (ciclo BMAD detalhado)
|
|
235
|
+
|
|
236
|
+
- [ ] Criar `references/gates-and-guardrails.md` (HARD-GATEs por skill)
|
|
237
|
+
|
|
238
|
+
### Fase 3: Longo Prazo (Nice-to-Have)
|
|
239
|
+
|
|
240
|
+
- [ ] Criar `references/skill-antipatterns.md` (o que não fazer)
|
|
241
|
+
|
|
242
|
+
- [ ] Criar `references/clean-code-mapping.md` (como cada skill implementa Clean Code)
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 5. Tabela: Estrutura Final Recomendada
|
|
247
|
+
|
|
248
|
+
| Nível | Artefato | Propósito | GSD Equivalente |
|
|
249
|
+
|---|---|---|---|
|
|
250
|
+
| **Visão** | specs/PROJECT.md | Contexto, requisitos, decisões | PROJECT.md |
|
|
251
|
+
| **Roadmap** | specs/RELEASE-PLAN.md | Sequência de releases + success criteria | ROADMAP.md |
|
|
252
|
+
| **Estado** | specs/STATE.md | Posição atual (< 100 linhas) | STATE.md |
|
|
253
|
+
| **Skill Catalog** | SKILL-INDEX.md | Tabela canônica de 38 skills | (N/A em GSD) |
|
|
254
|
+
| **Templates** | templates/*.md | Estruturas esperadas | templates/ |
|
|
255
|
+
| **Referência** | references/*.md | Gates, antipatterns, ciclo BMAD | references/ |
|
|
256
|
+
| **Documentação** | README.md | Install, quickstart | README.md |
|
|
257
|
+
| **Convênios** | CONVENTIONS.md | Code, test, git, specs/ standards | CONVENTIONS.md |
|
|
258
|
+
| **Histórico** | specs/archive/releases/PLAN-v*.md | Planos completados | (Collapsed em ROADMAP) |
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 6. Validação Final: Aplicar ao Projeto Skills
|
|
263
|
+
|
|
264
|
+
**Antes (Atual):**
|
|
265
|
+
```
|
|
266
|
+
PLAN.md (stale, 453 linhas)
|
|
267
|
+
↓
|
|
268
|
+
specs/RELEASE-PLAN.md (vivo, 104 linhas)
|
|
269
|
+
↓
|
|
270
|
+
specs/STATE.md (59 linhas) ✓
|
|
271
|
+
↓
|
|
272
|
+
specs/PLAN-v*.md (16 arquivos, dispersos)
|
|
273
|
+
↓
|
|
274
|
+
README.md (191 linhas, copia RELEASE-PLAN)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
**Depois (Proposto + GSD Best Practice):**
|
|
278
|
+
```
|
|
279
|
+
specs/PROJECT.md (novo) ← Core Value, Requirements, Decisions
|
|
280
|
+
↓
|
|
281
|
+
specs/RELEASE-PLAN.md (revisado) ← Roadmap + Success Criteria
|
|
282
|
+
↓
|
|
283
|
+
specs/STATE.md (mantém) ← Current Position
|
|
284
|
+
↓
|
|
285
|
+
SKILL-INDEX.md (novo) ← Tabela canônica
|
|
286
|
+
↓
|
|
287
|
+
README.md (simplificado) ← Install, quickstart, link a SKILL-INDEX
|
|
288
|
+
↓
|
|
289
|
+
templates/ (novo, opcional) ← Estruturas esperadas
|
|
290
|
+
references/ (novo, opcional) ← Gates, antipatterns, BMAD phases
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Resultado:**
|
|
294
|
+
- ✅ Sem redundância entre PLAN.md, RELEASE-PLAN, README
|
|
295
|
+
- ✅ Hierarquia clara: PROJECT → RELEASE-PLAN → STATE → SKILL-INDEX
|
|
296
|
+
- ✅ Incorpora melhores práticas de GSD sem copiar excessivamente
|
|
297
|
+
- ✅ Nomes simples (verb-noun) mantidos
|
|
298
|
+
- ✅ Fases BMAD explícitas em PROJECT.md ou documento separado
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 7. Checklist Final
|
|
303
|
+
|
|
304
|
+
- [x] Minha análise identificou redundâncias corretas (PLAN.md, PLAN-v*.md, skill index)
|
|
305
|
+
- [x] Minha hierarquia proposta é consistente com GSD (STATE → ROADMAP → skills)
|
|
306
|
+
- [x] Faltou: PROJECT.md (contexto do projeto)
|
|
307
|
+
- [x] Faltou: Success Criteria formalizados
|
|
308
|
+
- [x] Faltou: templates/ e references/ (nice-to-have)
|
|
309
|
+
- [x] SKILL-INDEX.md é único valor adicionado vs. GSD (bom!)
|
|
310
|
+
- [x] Nomes simples e ciclo BMAD estão corretos
|
|
311
|
+
- [x] Recomendação: Incorporar PROJECT.md + Success Criteria antes de executar
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## 8. Próximos Passos Imediatos
|
|
316
|
+
|
|
317
|
+
1. ✅ Criar `specs/PROJECT.md` com estrutura de GSD
|
|
318
|
+
2. ✅ Atualizar `specs/RELEASE-PLAN.md` com Success Criteria
|
|
319
|
+
3. ✅ Finalmente: Deletar `PLAN.md`, arquivar `PLAN-v*.md`, simplificar README
|
|
320
|
+
4. 📝 Opcional: Criar `templates/` e `references/` conforme GSD
|
|
321
|
+
|
package/bin/bigpowers.js
CHANGED
|
@@ -29,6 +29,43 @@ function run(cmd, cwd = ROOT) {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
// True when this copy runs from the global npm install (not a git clone or npx temp dir).
|
|
33
|
+
function isGlobalInstall() {
|
|
34
|
+
try {
|
|
35
|
+
const globalRoot = execSync('npm root -g', { encoding: 'utf8' }).trim();
|
|
36
|
+
return globalRoot && ROOT.startsWith(globalRoot);
|
|
37
|
+
} catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// `bigpowers update` used to only re-sync the already-installed files, so it never fetched
|
|
43
|
+
// a newer release. When we're the global install, pull the latest from npm first; the reinstall
|
|
44
|
+
// overwrites ROOT in place, so the setup.js required afterwards is the freshly installed one.
|
|
45
|
+
function selfUpdateGlobalPackage() {
|
|
46
|
+
if (!isGlobalInstall()) {
|
|
47
|
+
console.log('bigpowers: not a global npm install — skipping package self-update.');
|
|
48
|
+
console.log(' git clone → `git pull && npm run sync && bash scripts/install.sh`');
|
|
49
|
+
console.log(' one-shot → `npx bigpowers@latest setup`');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
console.log('bigpowers: fetching the latest release from npm (npm install -g bigpowers@latest)...');
|
|
53
|
+
try {
|
|
54
|
+
execSync('npm install -g bigpowers@latest', { stdio: 'inherit' });
|
|
55
|
+
} catch {
|
|
56
|
+
console.error('bigpowers: `npm install -g bigpowers@latest` failed — re-syncing the installed version instead.');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Best-effort registry check; silent on any failure so offline/slow networks never block a command.
|
|
61
|
+
function latestPublishedVersion() {
|
|
62
|
+
try {
|
|
63
|
+
return execSync('npm view bigpowers version', { encoding: 'utf8', timeout: 4000 }).trim();
|
|
64
|
+
} catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
32
69
|
const cmd = process.argv[2];
|
|
33
70
|
|
|
34
71
|
if (cmd === 'setup' || cmd === 'install') {
|
|
@@ -39,7 +76,8 @@ if (cmd === 'setup' || cmd === 'install') {
|
|
|
39
76
|
}
|
|
40
77
|
|
|
41
78
|
if (cmd === 'update') {
|
|
42
|
-
//
|
|
79
|
+
// Pull the newest release first (global installs), then re-sync + refresh symlinks.
|
|
80
|
+
selfUpdateGlobalPackage();
|
|
43
81
|
const setupScript = path.join(ROOT, 'bin', 'setup.js');
|
|
44
82
|
require(setupScript);
|
|
45
83
|
return;
|
|
@@ -51,6 +89,11 @@ if (cmd === 'status') {
|
|
|
51
89
|
.filter(d => fs.lstatSync(path.join(os.homedir(), '.claude', 'skills', d)).isSymbolicLink())
|
|
52
90
|
.length;
|
|
53
91
|
console.log(`bigpowers v${pkg.version} — ${count} skills installed`);
|
|
92
|
+
const latest = latestPublishedVersion();
|
|
93
|
+
if (latest && latest !== pkg.version) {
|
|
94
|
+
console.log(`\n⬆️ A newer release is available: v${latest} (you have v${pkg.version}).`);
|
|
95
|
+
console.log(' Upgrade: npm install -g bigpowers@latest && bigpowers update');
|
|
96
|
+
}
|
|
54
97
|
} else {
|
|
55
98
|
console.log('bigpowers not installed. Run: bigpowers setup');
|
|
56
99
|
}
|
|
@@ -63,8 +106,8 @@ bigpowers — agent skills for spec-driven, test-first development
|
|
|
63
106
|
|
|
64
107
|
Commands:
|
|
65
108
|
bigpowers setup Install skills into ~/.claude/skills/
|
|
66
|
-
bigpowers update
|
|
67
|
-
bigpowers status Show installed version and skill count
|
|
109
|
+
bigpowers update Fetch the latest release (global installs) + re-sync and refresh symlinks
|
|
110
|
+
bigpowers status Show installed version and skill count (warns if a newer release exists)
|
|
68
111
|
bigpowers help This message
|
|
69
112
|
`);
|
|
70
113
|
process.exit(0);
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
package/scripts/lib/git-hours.sh
CHANGED
|
@@ -18,7 +18,7 @@ partition() {
|
|
|
18
18
|
git -C "$ROOT" log --no-merges "$range" \
|
|
19
19
|
--pretty=format:"%at%x1f%H%x1f%(trailers:key=${key},valueonly,separator=%x2C)" \
|
|
20
20
|
| sort -n \
|
|
21
|
-
| awk -
|
|
21
|
+
| awk -v FS="$(printf '\037')" -v IDLE="$IDLE_SECONDS" -v PAD="$PAD_SECONDS" '
|
|
22
22
|
{
|
|
23
23
|
ts = $1 + 0; story = $3
|
|
24
24
|
gsub(/[[:space:]]/, "", story)
|
|
@@ -90,7 +90,7 @@ cmd_report() {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
cmd_append() {
|
|
93
|
-
local range="HEAD" key="$STORY_KEY" story="" bcps="" merged_at="" file="$ROOT/specs/metrics/cycle-times.yaml"
|
|
93
|
+
local range="HEAD" key="$STORY_KEY" story="" bcps="" bcp_plus="" merged_at="" file="$ROOT/specs/metrics/cycle-times.yaml"
|
|
94
94
|
local telemetry="" # path to harness telemetry JSON (GSD-2/gsd-pi format, optional)
|
|
95
95
|
while [ $# -gt 0 ]; do
|
|
96
96
|
case "$1" in
|
|
@@ -143,6 +143,8 @@ cmd_append() {
|
|
|
143
143
|
agent_compression="null"; agent_tool_calls="null"; agent_api_requests="null"
|
|
144
144
|
agent_duration_ms="null"; agent_model="null"; agent_tier="null"
|
|
145
145
|
agent_downgraded="null"; agent_skills="[]"
|
|
146
|
+
agent_tokens_in="null"; agent_tokens_out="null"
|
|
147
|
+
agent_tokens_cache_read="null"; agent_tokens_cache_write="null"
|
|
146
148
|
|
|
147
149
|
if [ -n "$telemetry" ] && [ -f "$telemetry" ]; then
|
|
148
150
|
# GSD-2/gsd-pi snapshotUnitMetrics JSON format:
|
|
@@ -79,7 +79,13 @@ ste_extract_prose() {
|
|
|
79
79
|
|
|
80
80
|
ste_count_words() {
|
|
81
81
|
# shellcheck disable=SC2207
|
|
82
|
-
local words
|
|
82
|
+
local words
|
|
83
|
+
# BUG-2026-08-05-ste-glob-wordcount: ($1) globs each word — a bare ** (markdown
|
|
84
|
+
# bold opener) expands to every file in cwd and inflates the count. Disable
|
|
85
|
+
# pathname expansion; safe here because this function only runs inside $( ).
|
|
86
|
+
set -f
|
|
87
|
+
words=($1)
|
|
88
|
+
set +f
|
|
83
89
|
echo "${#words[@]}"
|
|
84
90
|
}
|
|
85
91
|
|
|
@@ -168,6 +174,14 @@ name: fixture-long
|
|
|
168
174
|
description: Long sentence fixture.
|
|
169
175
|
---
|
|
170
176
|
Run the full local green stack including compliance verification gates sync skills trace stories and catalog drift check before any forward implementation work on this repository.
|
|
177
|
+
EOF
|
|
178
|
+
|
|
179
|
+
cat > "$tmp/good-bold.md" <<'EOF'
|
|
180
|
+
---
|
|
181
|
+
name: fixture-bold
|
|
182
|
+
description: Bold markdown list fixture (BUG-2026-08-05-ste-glob-wordcount).
|
|
183
|
+
---
|
|
184
|
+
1. **Check dependencies first.** DO inspect what your current dependencies already do before writing your own code.
|
|
171
185
|
EOF
|
|
172
186
|
|
|
173
187
|
local saved_strict=$STRICT saved_audit=$AUDIT
|
|
@@ -181,6 +195,13 @@ EOF
|
|
|
181
195
|
return 1
|
|
182
196
|
fi
|
|
183
197
|
|
|
198
|
+
VIOLATIONS=0
|
|
199
|
+
ste_audit_file "$tmp/good-bold.md"
|
|
200
|
+
if (( VIOLATIONS > 0 )); then
|
|
201
|
+
echo "SELF-TEST FAIL: bold-markdown fixture should pass (glob word-count bug, BUG-2026-08-05)" >&2
|
|
202
|
+
return 1
|
|
203
|
+
fi
|
|
204
|
+
|
|
184
205
|
VIOLATIONS=0
|
|
185
206
|
ste_audit_file "$tmp/bad-hedge.md"
|
|
186
207
|
if (( VIOLATIONS == 0 )); then
|