Every test — skill isolation, full pipelines, app from scratch. Baseline (AI alone) vs Treatment (AI + Kit). Real code. Real numbers.
Two distinct test types. Isolation: measures output quality per skill. End-to-end: measures whether skills coordinate and pass context to one another.
Every skill and agent against a real prompt. Pass A = cold model. Pass B = skill loaded. Rubric: 5 criteria × 1-5. Delta ≥ 1.5 = PASS.
PO → Orchestrator → Backend → QA → Security → Reviewer in real sequence. Handoffs explicitly tracked.
4 phases simulating /swarm. Full app: auth + CRUD + validators + 33 passing Jest tests.
Skill 03 in an existing repo. Stack respected. 8 tests passing. Zero invented dependencies.
| Category | Skills | Pass | Baseline avg | Treatment avg | Delta avg |
|---|---|---|---|---|---|
| Management / Coordination | 10 | 10/10 | 2.51 | 4.42 | |
| Product / Design / Content | 8 | 8/8 | 2.48 | 4.60 | |
| Dev / Quality | 10 | 8/10 | 2.97 | 4.54 | |
| Meta / Operational | 10 | 9/10 | 2.66 | 4.52 | |
| Subagents | 15 | 14/15 | 2.62 | 4.73 | |
| TOTAL | 53 | 47/53 | 2.69 | 4.52 | |
| After v2.10.1 fixes | 54 | 50/54 | — | — | 92.6% |
Below are real outputs captured during testing. Same prompt, same model (claude-sonnet-4-6). Left: without the kit. Right: with the skill loaded.
# Como escrever a spec de notificações push
Para documentar essa feature, siga estas etapas:
1. Defina o problema e o objetivo
Comece explicando por que notificações push são necessárias. Por exemplo:
• Os usuários perdem alertas de vencimento de contas
• A taxa de inadimplência interna subiu 12%
2. Escolha o formato de spec
Você pode usar User Stories, Documento de requisitos funcional, ou PRD.
3. Escreva as User Stories principais
• Como usuário, quero receber push quando uma conta está próxima do vencimento
• Como admin, quero configurar quais tipos de alertas são enviados
4. Defina os critérios de aceitação
• O push chega até 24h antes do vencimento
• O usuário pode desativar notificações
⚠ Sem vertical slices · Sem DADO/QUANDO/ENTÃO · Sem prioridade calculada · Sem escopo IN/OUT · Sem regras de negócio · APNs BadDeviceToken não mencionado
Escopo IN: Web Push (Chrome, Firefox, Edge, Safari 16.4+), iOS via APNs, 4 tipos de alerta, consentimento LGPD, histórico 30 dias
Escopo OUT: Android Push (fase 2), push de marketing, analytics de abertura, SMS/e-mail
Slice 1 — Permissão Web
DADO que o usuário está logado pela primeira vez QUANDO abre o dashboard ENTÃO aparece prompt nativo do browser pedindo permissão
DADO que o usuário concede permissão QUANDO o sistema registra o device ENTÃO o push token é salvo no backend associado ao user_id e ao device fingerprint
Slice 2 — Permissão iOS
DADO que o usuário instala o app QUANDO chega na tela de onboarding ENTÃO o sistema exibe tela explicativa antes do prompt nativo iOS
Dependência: Certificado APNs configurado; endpoint POST /api/devices/register com campo platform
Regra de Negócio RN-04: Badge de device deve ser gerenciado com refresh automático. Erro APNs BadDeviceToken → marcar device como inativo. Safari 16.4+ requer user gesture para registrar Service Worker.
✓ Vertical slices · ✓ DADO/QUANDO/ENTÃO · ✓ Prioridade calculada · ✓ APNs BadDeviceToken · ✓ Safari 16.4 · ✓ LGPD · ✓ Dependências explícitas
Como classificar TP vs FP
Para cada finding:
1. Ler o código-fonte na linha indicada
2. Verificar se o input é controlado pelo usuário
3. Verificar se existe sanitização/validação
Categories: True Positive (TP), False Positive (FP), Needs Investigation (NI)
Priorização: ERROR › WARNING › INFO. Dentro de cada nível, priorize SQL injection, RCE, path traversal...
Fix sugerido por TP: [genérico — "corrija a vulnerabilidade usando práticas seguras"]
⚠ Sem comando jq SARIF · Sem tabela de 3 perguntas · Sem suppression gate · Sem fix diffs · Sem anti-bias · Sem triage stats · Sem handoff
Passo 1 — Parsear SARIF:
jq '.runs[].results[] | {rule:.ruleId, level:.level, file:.locations[0].physicalLocation.artifactLocation.uri, line:.locations[0].physicalLocation.region.startLine}' semgrep.sarif
Tabela de 3 perguntas por finding:
| Pergunta | TP se | FP se | |-------------------|--------------------------------|------------------------------| | Input controlado? | req.body, query, params | literal hardcoded, constante | | Sink real? | eval, exec, innerHTML, raw SQL | mock/teste/comentário | | Mitigação? | nenhuma visível | ORM parametrizado, escape | Decisão: 2/3 TP → True Positive | 2/3 FP → False Positive
Anti-bias: 3 FPs consecutivos sem leitura de código = PARAR. "Parece FP" sem evidência = NI, nunca FP.
Suppression gate (mandatory): Before any // nosemgrep — explicit approval: "I confirm this finding is FP because [evidence]. I authorize suppression." Silence = blocked.
✓ jq SARIF · ✓ Tabela TP/FP · ✓ Anti-bias · ✓ Suppression gate · ✓ Fix diffs com owner+esforço · ✓ Triage stats · ✓ Handoff para variant-analysis
1. Autenticação e Autorização
O JWT valida quem é o usuário, mas não valida se ele tem permissão de movimentar o fromAccountId. Verifique se o sub extraído do JWT bate com o dono da conta.
2. Idempotência
Se o cliente re-enviar a mesma requisição, a transferência pode executar duas vezes. Verifique se idempotencyKey é guardado com UNIQUE.
3. Validação de Input
Sem validação, amount pode ser negativo, zero, string ou absurdamente grande.
⚠ Sem severity labels (CRÍTICO/IMPORTANTE) · Sem PoC de ataque · Sem fix com código · Sem checklist Go/No-Go · Sem relatório estruturado · Sem OWASP mapping
🔴 Crítico — F1: IDOR em fromAccountId
PoC executável:
TOKEN=$(curl -s -X POST /api/login \
-d '{"email":"a@test.com","password":"..."}' | jq -r .token)
# Usar fromAccountId do user_B com token de user_A
curl -X POST /api/transfer \
-H "Authorization: Bearer $TOKEN" \
-d '{"fromAccountId":"<conta_de_B>","amount":1000}'
# Esperado: 403 | Vulnerável: 200 + débito na conta de B
Fix obrigatório:
// middleware/ownership.ts
export const assertAccountOwnership = async (req, res, next) => {
const account = await db.account.findUnique({ where: { id: req.body.fromAccountId }});
if (!account || account.ownerId !== req.user.sub)
return res.status(403).json({ error: 'FORBIDDEN' });
next();
};
🔴 Crítico — F2: Race Condition no saldo
Dois requests simultâneos leem mesmo saldo → double-spend. Fix: SELECT ... FOR UPDATE ou transação atômica.
✓ OWASP labels · ✓ PoC curl executável · ✓ Fix com código · ✓ Go/No-Go explícito · ✓ Race condition identificada
Investigando 500 intermitente
Bugs intermitentes que não reproduzem local são clássicos de race condition, estado compartilhado corrompido, ou diferença de dados entre ambientes.
1. Capturar contexto completo: adicionar logging estruturado no handler
2. Verificar Redis: o Redis pode estar retornando null em cache miss e o código não trata esse caso
3. Verificar Prisma: findUnique pode retornar null se o registro não existe
4. Provavelmente é um problema de cache stale ou sessão expirada.
⚠ "Provavelmente é" sem evidência · Sem Evidence Ledger · Sem hipóteses rankeadas · Sem isolation step · Sem fix diff por hipótese · Sem teste de regressão
Passo 1 — Isolamento: Camada = API (não UI, não infra). Funciona local → integração/dado quebra.
Hipóteses rankeadas:
H1 (alta): Prisma retorna null, código acessa .id sem null-check
H2 (média): Redis retorna null em cache miss, código deserializa null
H3 (baixa): Request body malformado em edge case de produção
Evidence Ledger:
| Evidência | Status | Apoia | |------------------------------|---------|--------| | Stack trace com linha exata | PENDING | H1,H2,H3 | | Logs Redis em 5% das req. | PENDING | H2 | | Prisma findUnique sem ? | PENDING | H1 |
Root cause: Não confirmada. "Esta frase tem 'provavelmente' implícito — não é root cause confirmada sem evidência direta."
Fix por H1 (mais provável):
// ANTES — acessa .id sem verificar se order existe
const order = await prisma.order.findUnique({ where: { id } });
return order.id; // 💥 se null
// DEPOIS
const order = await prisma.order.findUnique({ where: { id } });
if (!order) throw new NotFoundError(`Order ${id} not found`);
return order.id;
✓ Isolation step · ✓ Hipóteses rankeadas · ✓ Evidence Ledger · ✓ Recusa "provavelmente" sem evidência · ✓ Fix por hipótese · ✓ Teste de regressão pronto
Sem pipeline, a IA responderia ao pedido diretamente — provavelmente escrevendo um endpoint de uma vez, sem spec, sem auth, sem testes, sem security review.
Resultado: código que "funciona" mas sem testes, sem auth verificada, e com CSV injection aberta
PO → Spec com 2 slices, critérios DADO/QUANDO/ENTÃO, LIMIT 10k documentado
Orchestrator → Cortou 8 skills irrelevantes (UI/UX, Frontend, SEO...), entregou context pack YAML ao Backend
Backend → database.js + auth.js + tasks-export.js — JWT obrigatório, query parametrizada, LIMIT 10k
QA → 12 testes: auth 401, 0 tasks, N tasks, filtro, IDOR, CSV escaping — 12/12 passando
Security → detectou CSV injection que o QA havia perdido — fórmulas Excel em títulos de tasks
Reviewer → APROVADO + commit message com trailers de trade-off
✓ Código real · ✓ 12/12 testes · ✓ IDOR bloqueado · ✓ CSV injection detectado pela chain · ✓ Gate aprovado
Real feature: GET /api/tasks/export.csv. 6 skills invoked in sequence. Handoffs tracked. Real code generated and tested.
12/12 tests passing. Security Review found 0 critical issues. Reviewer approved with a trade-off commit message.
| Skill | Output concreto | Handoff para próxima | Status |
|---|---|---|---|
| 01 PO | Spec 2 slices, critérios DADO/QUANDO/ENTÃO, prioridade calculada, escopo IN/OUT | Schema tasks(id,title,status,created_at,user_id) + critérios de saída | PASS |
| 09 Orchestrator | Pipeline mínimo 6 skills, 8 puladas com justificativa, context pack YAML | Endpoint, auth, response headers, LIMIT 10k, campos CSV | PASS |
| 03 Backend | db/database.js, middleware/auth.js, routes/tasks-export.js — código real | 3 arquivos no repo para QA testar via supertest | PASS |
| 05 QA | 12 testes: 401 sem token, expirado, 0 tasks, N tasks, filtros, IDOR, CSV escaping | 12/12 passando + gaps (rate limit não testado) | 12/12 |
| 06 Security | OWASP audit: 0 críticos, 2 importantes (CSV injection, CORS), 2 informativos | 4 pré-condições de produção documentadas com fix | 0 críticos |
| 11 Reviewer | APROVADO — checklist completo + commit message com trailers de trade-off | — | APROVADO |
⚠️ Security detectou CSV injection que QA não havia coberto — prova que a cadeia de skills funciona como filtro progressivo, não redundante.
A single natural-language request. 4 phases with markdown-based handoffs. Node.js + SQLite app generated from scratch.
Authentication, full CRUD, validators, reusable auth middleware. Context did not get lost between phases.
Jest + supertest. auth.test.js + tasks.test.js. Integração real, sem mock.
app.js, server.js, db/database.js, middleware/auth.js, routes/auth.js, routes/tasks.js, validators/
PO → Orchestrator → Backend → QA. Security omitido por escopo do teste.
Agentes paralelos sem worktree isolado. Em /swarm real cada feature vai em branch separada.
Skill 03-backend-api read the existing repo (Node.js + Express + SQLite) and produced compatible code. No new libraries. No wrong stack assumptions.
Stack respected: better-sqlite3 directly, Express Router, jest+supertest. SQL with pivot in a single query.
| Cenário testado | Status |
|---|---|
| Happy path — contagens corretas (2 pending, 1 done, 1 archived) | PASS |
| Happy path — total == pending + done + archived | PASS |
| Empty DB — todos os valores são 0 (não null — COALESCE) | PASS |
| Empty DB — valores são typeof number | PASS |
| DB error — retorna 500 com payload estruturado | PASS |
| Shape — chaves top-level success e data presentes | PASS |
| Shape — chaves pending, done, archived, total presentes | PASS |
| Content-Type: application/json | PASS |
Rubric: 5 criteria × 1-5, normalized 1-5. Pass = delta ≥ 1.5. Scenario: real prompt. Pass A = cold model. Pass B = skill loaded.
| Skill | Baseline | Treatment | Delta | Verdict | Main lift |
|---|---|---|---|---|---|
| 08 Context Manager | 2.5 | 4.3 | PASS | Working set, foco rastreado, handoffs estruturados | |
| 09 Orchestrator | 2.5 | 4.5 | PASS | Vertical slicing, model routing, skills puladas com justificativa | |
| 10 Documenter | 2.5 | 4.5 | PASS | Estrutura de doc por nível de decisão, ADR template | |
| 11 Reviewer | 2.3 | 4.5 | PASS | Checklist completo, severity labels, atribuição por skill | |
| 18 Repo Auditor | 2.5 | 4.5 | PASS | Auditoria reutilizável em current.md, harnessability score | |
| 19 Asset Librarian | 2.5 | 4.5 | PASS | Inventário de assets com paths canônicos | |
| 20 Observability SRE | 2.8 | 4.5 | PASS | Logs estruturados, alertas, rollback plan | |
| 21 Data Analytics | 2.5 | 4.2 | PASS | Naming de eventos, funnels, KPIs | |
| 22 Accessibility | 2.5 | 4.5 | PASS | WCAG 2.2, checklist auditável, keyboard nav | |
| 30 Cost Tracker | 2.5 | 4.2 | PASS | Relatório por skill, por modelo, USD estimado |
Largest average delta across categories. PO, UI/UX, Marketing, SEO and image skills show the strongest structural need — the cold model is most generic here.
| Skill | Baseline | Treatment | Delta | Verdict | Main lift |
|---|---|---|---|---|---|
| 01 PO Feature Spec | 2.3 | 4.8 | PASS | Vertical slices, ambiguity score, critérios DADO/QUANDO/ENTÃO | |
| 02 UI/UX Design | 2.25 | 4.75 | PASS | Design tokens, heurísticas de Nielsen, responsividade | |
| 12 Motion Design | 2.5 | 4.5 | PASS | Spring physics, prefers-reduced-motion, easing curves | |
| 13 Marketing Copy | 2.5 | 4.5 | PASS | CTA hierarchy, proposta de valor, anti-AI-writing aplicado | |
| 14 SEO Specialist | 3.0 | 4.75 | PASS | schema.org, Core Web Vitals, sitemap, canonical | |
| 17 Image Generator | 2.0 | 4.5 | PASS | Prompt técnico estruturado, model routing, batch | |
| 29 Design Intelligence | 2.3 | 4.5 | PASS | Análise competitiva, moodboard, dossiê estratégico | |
| 36 Web Asset Generator | 2.5 | 4.5 | PASS | Favicons multi-size, PWA icons maskable, OG cards, manifest |
2 below threshold — both for fixable reasons, not weak skills.
| Skill | Baseline | Treatment | Delta | Verdict | Note |
|---|---|---|---|---|---|
| 03 Backend API | 3.0 | 4.75 | PASS | Contracts, auth pattern, error handling padronizado | |
| 04 Frontend | 3.0 | 4.5 | PASS ⚡ | No threshold — state management, error boundaries | |
| 05 QA Testing | 2.75 | 4.5 | PASS | Prove-It principle: ISO 8601 matrix, regressão nomeada, Stryker | |
| 06 Security Review | 2.8 | 4.5 | PASS | OWASP labels, PoC obrigatório para criticals | |
| 07 Deploy Docker | 3.0 | 4.3 | FAIL | Rollback prev-tag e ssl-init.sh ausentes — corrigível em 30min | |
| 15 Mobile/Tauri | 2.8 | 4.3 | PASS ⚡ | No threshold — build targets, native APIs | |
| 23 Migration/Refactor | 2.8 | 4.5 | PASS | Feature flags, strangler pattern, rollback seguro | |
| 25 AI Integration Arch | 3.5 | 4.5 | FAIL | 2 templates ausentes no repo — criar = sobe pra PASS | |
| 27 Video Integration | 2.75 | 4.5 | PASS | text-to-video, latência, output formats | |
| 37 TDD Engineer | 3.3 | 5.0 | PASS | Score perfeito 5.0 — red-green-refactor enforced, approved fixtures |
39-program-router timed out (600s agent watchdog). Skill 24 is a near-miss — passes in real context with repo-audit active.
| Skill | Baseline | Treatment | Delta | Verdict | Note |
|---|---|---|---|---|---|
| 24 Release Manager | 3.2 | 4.5 | NEAR-MISS | Baseline 3.2 (forte). Com repo-audit ativo specificity vai a 5.0 | |
| 26 Prompt Engineer | 2.5 | 4.5 | PASS | Camadas A→B→C, few-shot, cost table, prompt-spec artifact | |
| 28 CLAUDE.md Generator | 3.0 | 4.8 | PASS | Gotchas obrigatório, opções inferidas, escopo respeitado | |
| 31 Session Summary | 2.5 | 4.0 | PASS ⚡ | No threshold — handoff estruturado, wikilinks | |
| 32 Smart Suggestions | 2.5 | 4.25 | PASS | Próxima ação baseada em estado real do projeto | |
| 33 Detective Spec | 3.0 | 4.8 | PASS | Pipeline 5 fases, state.json checkpoint, write-guardrails | |
| 34 Static Analysis | 2.5 | 4.5 | PASS ⚡ | No threshold — rulesets por linguagem, SARIF merge, CI gate | |
| 35 Skill Author | 2.3 | 4.5 | PASS | 8-place registration, golden.json, overlap check | |
| 38 Architecture Deepener | 2.5 | 4.5 | PASS | Deletion test, deepen vs extract decision, fitness YAML | |
| 39 Program Router | 1.8 | 4.2 | PASS | Decline → handoff skill 09 com pipeline composto detective-spec + spec-driven-development | |
| 40 Parallel Dispatcher | 2.5 | 4.8 | PASS | Caminho A/B/C, 5 anti-padrões nomeados, telemetria |
Largest average delta across categories. Subagents gain the most because the cold model has no protocol structure — the subagent provides it all.
| Subagent | Baseline | Treatment | Delta | Verdict | Key differentiator |
|---|---|---|---|---|---|
| code-reviewer | 4.0 | 5.0 | FAIL | Baseline já era forte (4.0). Cenário fácil demais. Delta comprimido. | |
| security-auditor | 2.75 | 4.5 | PASS | bcrypt cost ≥12, NoSQL injection detectado, PoC curl commands | |
| test-engineer | 3.1 | 4.6 | PASS ⚡ | ISO 8601 variant matrix, regressão nomeada REG-001..006 | |
| orchestrator | 2.3 | 4.5 | PASS | Vertical slicing, 5 gates com critérios, cross-tenant authz flag | |
| debugger | 2.5 | 4.5 | PASS | Evidence Ledger, hipóteses rankeadas, anti-rationalization | |
| detective-contracts | 2.25 | 5.0 | PASS 🏅 | Score perfeito. file:line evidence, 5 dimensões, checkpoint/resume | |
| detective-business-rules | 2.5 | 4.75 | PASS | Output em _detective_sdd/, confidence scoring, write-guard | |
| detective-flows | 2.3 | 5.0 | PASS 🏅 | Score perfeito. Write-guardrail, evidence anchors, phase handoff | |
| detective-adrs | 2.3 | 4.3 | PASS | Grep commands por tech, PENDING anchors, confidence tiers | |
| semgrep-scanner | 3.3 | 4.8 | PASS ⚡ | Rulesets por linguagem, Pro vs OSS, HARD GATE, dedup key | |
| semgrep-triager 🏆 | 1.75 | 5.0 | PASS | MELHOR RESULTADO. Baseline era inútil (1.75). Suppression gate, TP/FP, anti-bias. | |
| codeql-runner | 2.75 | 5.0 | PASS 🏅 | Score perfeito. Commit-hash cache, isSanitizer/isAdditionalTaintStep | |
| sarif-parsing | 2.0 | 4.75 | PASS | npm audit → SARIF conversão, fingerprint dedup, streaming 100MB+ | |
| variant-analysis | 3.25 | 4.75 | PASS ⚡ | Abstraction ladder L0→L3, null-equality bypass, fix + rule conectados | |
| anti-ai-writing | 2.5 | 4.5 | PASS | 29 padrões varridos em ordem, N/A explícito, self-audit pass |
Commands that run as a Node process (not as a Skill). Tested by running the real scripts (auto-loop.mjs, swarm/index.mjs, run-program.mjs) during this session.
All process-based scripts exist, have valid --help output, and respond correctly. Two of them were actually executed with a real prompt.
| Teste | Comando | Resultado |
|---|---|---|
| Execução real | node auto-loop.mjs "echo hello" --max-iterations 1 --polish=none --no-commit |
PASS — disparou Claude, capturou output, rodou validation. Banner v2 + iteration counter + exit code limpo. |
| CLI flags | --help |
PASS — 12 flags documentadas (agent, model, max-iterations, max-tokens, stop-when, polish, worktree, parallel, validate, no-commit, push, verbose) + 9 exit codes (0-7, 99, 130) |
| Teste | Resultado |
|---|---|
| Working tree sujo | CORRETO BLOQUEIO — emite {"error": "Working tree has uncommitted changes. Commit or stash before running /swarm"}. Isso é proteção válida — /swarm não roda em árvore suja por design. |
| Pré-requisitos documentados | PASS — commands/swarm.md lista git + gh autenticado + working tree limpo + Node 18+. Setup explícito. |
| Program | Steps | Types usados | Validate | Dry-run |
|---|---|---|---|---|
pipeline-discovery | 9 | command, gate | OK | OK |
spec-driven-development | 14 | command, gate, conditional, parallel | OK | OK |
loop-polishing | 6 | bash, command, gate, parallel | OK | OK |
detective-spec | 7 | gate, parallel, command | OK | OK |
adversarial-dev | 6 | bash, gate, loop, prompt | OK | OK |
comprehensive-review | 8 | gate, conditional, command, bash, parallel, prompt | OK | OK |
refactor-safely | 11 | bash, gate, prompt, loop | OK | OK |
Todos os 7 programs aceitam --dry-run e retornam JSON estruturado com resolved_steps + missing_inputs. Schema declarativo funciona — 6 step types diferentes em uso (command, gate, conditional, parallel, bash, loop, prompt).
~$0.27 em valor estimado direto. Window: all-time. Heurísticas em policies/savings-metrics.md.
~$14.00 em custo downstream evitado. Bugs pegos antes do merge, secrets bloqueados, scope creep evitado.
Tempo de trabalho humano salvo via pipelines automáticos e gates.
4/4 sensors fired — todos os sensores corretivos dispararam quando deveriam.
Comando: node scripts/savings-report.mjs — capturado durante esta sessão. Reporte real, não estimativa.
| Sensor | Resultado |
|---|---|
| large-files | 7 itens — top 30 mostrados |
| dead-code | scan completo |
| stale-todos | scan completo |
| dep-staleness | scan completo |
| doc-code-drift | scan completo |
| test-coverage | scan completo |
Totais: 3 high · 34 medium · 41 low. Comando: node scripts/drift-scan.mjs. Output em markdown reproduzível.
Descoberta importante: 8 de 9 slash commands são skill-based (invocam skills numeradas internamente). Apenas /devkit-install-fv é shell puro. Como as skills numeradas já foram testadas no bench, esses commands são camadas de invocação validadas indiretamente.
| Command | Tipo | Delega para | Validação |
|---|---|---|---|
/grill-me | skill-based | skill 01 (PO) — Deep Interview mode | via skill 01 (+2.5) |
/to-prd | skill-based | skill 01 (PO) — PRD mode | via skill 01 (+2.5) |
/to-issues | skill-based | skill 09 (Orchestrator) + vertical-slices | via skill 09 (+2.0) |
/checklist | skill-based | skill 01 (PO) — validation mode | via skill 01 (+2.5) |
/constitution | skill-based | skill 01 (PO) — governance mode | via skill 01 (+2.5) |
/analyze | skill-based | skill 11 (Reviewer) — audit mode | via skill 11 (+2.2) |
/humanize | skill-based | skill 10 (Documenter) — editor mode | via skill 10 (+2.0) |
/consolidate-memory | skill-based | skill 08 (Context Manager) — janitor | via skill 08 (+1.8) |
/devkit-install-fv | shell | bash setup/install.sh | smoke-install.sh CI green |
Architectural finding: The full discovery pipeline (/grill-me → /to-prd → /to-issues) forms a sequential chain with handoffs between the three — adapted from mattpocock/skills. Already validated in Test 2 (manual pipeline).
| Script | O que verifica | Resultado |
|---|---|---|
check-consistency.mjs | Sincronização entre 39 skills, 37 tools, 15 agents, plugin.json | PASS — todos coerentes |
check-harness-coherence.mjs | 40 policies + 32 commands + 19 hooks sem contradições | PASS — All coherent |
validate-program.mjs | Schema YAML dos 7 programs | PASS — 7/7 OK |
bench/check-regression.mjs | Compressor não regrediu vs baseline (max-drop=5) | PASS — 13% / 98% estável |
Established principle: every FAIL in the bench becomes a concrete fix in the next version. We don't rationalize findings — we fix them and measure again.
3 of 4 fixes confirmed by re-eval. Skill 24 remains a near-miss — not a skill issue, just a scenario with a strong baseline.
| Skill/Agent | Delta before | Verdict before | Delta after | Verdict after | What the fix changed |
|---|---|---|---|---|---|
| Skill 25 AI Integration | +1.0 | FAIL | +2.0 | PASS ✅ | 2 templates (text-generation.md 422 linhas + ai-integration-plan.md 225 linhas) reescritos. Era stub de 3-9 linhas. |
| Skill 07 Deploy Docker | +1.3 | MARGINAL | +1.8 | PASS ✅ | 2 seções novas (+196 linhas): .last-tag rollback persistente + ssl-init.sh idempotente. Resolveu exatamente os 2 gaps. |
| Code-reviewer agent | +1.0 | FAIL | +2.29 | PASS ✅ | Cenário v2: PR de 23 arquivos, 8 findings em concerns diferentes. Baseline pegou 3/8, treatment 8/8 + 2 bonus. |
| Skill 24 Release Manager | +1.3 | NEAR-MISS | +1.2 | NEAR-MISS | Repo-audit ativo subiu specificity de 2 → 5, mas baseline também subiu. Não é problema da skill — é cenário com teto baixo. |
Treatment entregou adapter pattern + fallback chain + observability hooks + security checklist (8 itens) + cost estimate ($0.000172/req) + handoffs para skills 03/04/20/06. Templates novos foram o fator decisivo.
Rollback sem argumento manual (lê de .last-tag). Primeiro deploy SSL sem race condition (script idempotente detecta cert). Correctness 4→5, Actionability 4→5.
Baseline pegou: race condition, Docker WORKDIR, secrets parcial. Missed: timing attack, circular import, N+1 em map async. Treatment achou tudo + 2 bonus (IDOR e negative amount).
Specificity foi de 2 → 5 (validou hipótese do bench). Mas baseline também melhorou (cold já cobre release flow básico). Delta total 3.6 → 4.8 = +1.2. Não é fail técnico.
Cada FAIL ou MARGINAL no bench vira fix concreto na versão seguinte. Não justificamos achado — corrigimos.
Esta versão materializou esse princípio: 4 FAILs/MARGINAL identificados → 6 fixes shipped → 3 confirmados por re-eval → pass rate sobe 3.7 pontos absolutos. O kit agora se auditia.
Two axes: mechanical savings (output-compressor + cross-call dedup) and strategic savings (model routing + progressive loading + minimum-sufficient Orchestrator).
Strip ANSI, dedup adjacente, colapsa listings, head/tail. Benchmark: 5 fixtures, 9.3KB.
MinHash cross-call dedup. Loops autônomos re-executam npm test, eslint — 98% de redução no second-run.
Progressive loading: skills carregam só quando trigger bate. Não pré-carrega as 39.
Orchestrator cortou UI/UX, Frontend, SEO, Deploy e 4 outras. ~24k tokens não gastos.
| Mecanismo | Como funciona | Economia |
|---|---|---|
| output-compressor | 4-stage pipeline: strip ANSI → dedup adjacente → colapsa dirs → hint filter → head/tail | 13% single-call |
| Cross-call MinHash dedup (v2.9.0) | Janela 16 calls: FNV-1a exact + MinHash Jaccard ≥0.85 fuzzy → marker curto | 98% second-run |
| Model routing | Haiku → boilerplate, Sonnet → implementação, Opus → arquitetura. Automático. | Até 10x no custo por token |
| Progressive loading | Skill carrega só quando keyword-detector ou intent-classifier bate | ~31k tokens/sessão |
| Orchestrator mínimo suficiente | Corta skills irrelevantes com justificativa antes de invocá-las | ~24k tokens no pipeline CSV |
Honest report. We separate skill failures from orchestration failures.
3 agentes compartilharam o mesmo repo sem worktree isolado — o Teste 1, 2 e 3 sobrescreveram o mesmo index.js. Em produção real, /swarm usa branch separada por feature. Falha de setup dos testes, não do kit.
Bugs eram óbvios, o modelo frio os identificou. O kit adicionou OWASP labels e gate formalism (real melhoria), mas o delta ficou comprimido pelo teto alto. Solução: trocar para cenário com PR de 23 arquivos e bugs sutis.
A skill os referencia mas eles não estão no repo. Fix de 30 minutos — criar os 2 arquivos → sobe pass rate de 88.7% para 90.6%.
In an isolated session, skill 39 (program-router) correctly classified the scenario ("refactor src/auth without breaking behavior") and performed decline → handoff to skill 09 with a composite pipeline. Score 1.8 → 4.2 (delta +2.4).
O playbook da skill 03 tem templates em Prisma/TypeScript. Quando o repo usa plain JS + better-sqlite3, o agente adapta corretamente mas com mais fricção. Solução: adicionar seção de "Stack plain JS" ao SKILL.md.
92.6% pass rate. +1.84 avg delta. 53/53 E2E tests green. The kit doesn't add value by "knowing more" — it adds value by enforcing structure the cold model never produces: persistent paths, handoff chains, anti-pattern tables, filled templates, evidence anchors.