sinapse-ai 1.12.2 → 1.13.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.
- package/.claude/CLAUDE.md +2 -2
- package/.claude/rules/agent-memory-imports.md +2 -0
- package/.sinapse-ai/cli/commands/pro/index.js +8 -48
- package/.sinapse-ai/constitution.md +6 -2
- package/.sinapse-ai/data/entity-registry.yaml +12 -36
- package/.sinapse-ai/development/agents/architect/MEMORY.md +35 -0
- package/.sinapse-ai/development/agents/data-engineer/MEMORY.md +38 -0
- package/.sinapse-ai/development/agents/developer/MEMORY.md +36 -0
- package/.sinapse-ai/development/agents/devops/MEMORY.md +39 -0
- package/.sinapse-ai/development/agents/product-lead/MEMORY.md +36 -0
- package/.sinapse-ai/development/agents/project-lead/MEMORY.md +36 -0
- package/.sinapse-ai/development/agents/quality-gate/MEMORY.md +35 -0
- package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +36 -0
- package/.sinapse-ai/development/templates/chrome-brain/knowledge-base/chrome-brain.md +2 -2
- package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +15 -0
- package/.sinapse-ai/infrastructure/scripts/validate-agents.js +159 -8
- package/.sinapse-ai/install-manifest.yaml +12 -148
- package/AGENTS.md +13 -2
- package/CHANGELOG.md +122 -2
- package/README.en.md +1 -1
- package/README.md +6 -26
- package/bin/cli.js +2 -7
- package/bin/commands/install.js +19 -257
- package/bin/commands/update.js +18 -78
- package/bin/lib/command-generator.js +261 -0
- package/bin/lib/prompts.js +2 -65
- package/bin/modules/chrome-brain-installer.js +2 -1
- package/bin/postinstall.js +6 -6
- package/docs/getting-started.md +0 -1
- package/docs/pt/getting-started.md +1 -1
- package/docs/security/dependabot-triage.md +17 -17
- package/package.json +6 -3
- package/packages/installer/src/wizard/i18n.js +3 -204
- package/packages/installer/src/wizard/index.js +1 -1
- package/packages/installer/src/wizard/questions.js +5 -368
- package/packages/installer/src/wizard/wizard.js +0 -9
- package/scripts/generate-install-manifest.js +6 -0
- package/scripts/validate-changelog-tags.js +97 -0
- package/scripts/validate-no-personal-leaks.js +184 -28
- package/scripts/validate-schemas.js +55 -10
- package/scripts/validate-story-meta.js +25 -12
- package/squads/claude-code-mastery/agents/claude-mastery-chief.md +1 -1
- package/squads/claude-code-mastery/agents/hooks-architect.md +12 -20
- package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
- package/squads/squad-product/agents/product-orqx.md +0 -1
- package/squads/squad-product/agents/ps-client-product-manager.md +0 -1
- package/squads/squad-product/agents/ps-delivery-manager.md +0 -1
- package/squads/squad-product/agents/ps-discovery-lead.md +0 -1
- package/squads/squad-product/agents/ps-product-analyst.md +0 -1
- package/squads/squad-product/agents/ps-product-ops-specialist.md +0 -1
- package/squads/squad-product/agents/ps-product-strategist.md +0 -1
- package/.sinapse-ai/core/grounding/README.md +0 -83
- package/.sinapse-ai/core/grounding/brand.cjs +0 -29
- package/.sinapse-ai/core/grounding/config-loader.cjs +0 -52
- package/.sinapse-ai/core/grounding/design-system.cjs +0 -29
- package/.sinapse-ai/core/grounding/vault.cjs +0 -36
- package/.sinapse-ai/development/scripts/approval-workflow.js +0 -643
- package/.sinapse-ai/development/scripts/backup-manager.js +0 -607
- package/.sinapse-ai/development/scripts/branch-manager.js +0 -390
- package/.sinapse-ai/development/scripts/code-quality-improver.js +0 -1329
- package/.sinapse-ai/development/scripts/commit-message-generator.js +0 -850
- package/.sinapse-ai/development/scripts/conflict-resolver.js +0 -675
- package/.sinapse-ai/development/scripts/dependency-analyzer.js +0 -638
- package/.sinapse-ai/development/scripts/diff-generator.js +0 -352
- package/.sinapse-ai/development/scripts/git-wrapper.js +0 -462
- package/.sinapse-ai/development/scripts/modification-validator.js +0 -555
- package/.sinapse-ai/development/scripts/performance-analyzer.js +0 -758
- package/.sinapse-ai/development/scripts/refactoring-suggester.js +0 -1148
- package/.sinapse-ai/development/scripts/rollback-handler.js +0 -531
- package/.sinapse-ai/development/scripts/security-checker.js +0 -359
- package/.sinapse-ai/development/scripts/template-engine.js +0 -240
- package/.sinapse-ai/development/scripts/template-validator.js +0 -279
- package/.sinapse-ai/development/scripts/test-generator.js +0 -844
- package/.sinapse-ai/development/scripts/transaction-manager.js +0 -590
- package/.sinapse-ai/development/scripts/yaml-validator.js +0 -397
- package/.sinapse-ai/hooks/sinapse-brand-grounding.cjs +0 -162
- package/.sinapse-ai/hooks/sinapse-ds-grounding.cjs +0 -211
- package/.sinapse-ai/hooks/sinapse-vault-grounding.cjs +0 -194
- package/bin/lib/register-grounding-hooks.js +0 -145
- package/docs/guides/agents/traces/execution-traces.zip +0 -0
- package/docs/guides/grounding-setup.md +0 -154
- package/docs/guides/workflows/SINAPSE-WORKFLOWS.zip +0 -0
- package/packages/installer/src/pro/pro-scaffolder.js +0 -449
- package/packages/installer/src/wizard/grounding-config.js +0 -131
- package/packages/installer/src/wizard/pro-setup.js +0 -1439
- package/packages/installer/templates/README.md +0 -16
- package/packages/installer/templates/brand-routing.example.json +0 -12
- package/packages/installer/templates/ds-routing.example.json +0 -12
- package/packages/installer/templates/vault-routing.example.json +0 -12
package/.claude/CLAUDE.md
CHANGED
|
@@ -8,11 +8,11 @@ Full doc: `.sinapse-ai/constitution.md`. Gates auto-block violations.
|
|
|
8
8
|
|------|-----------|----------|
|
|
9
9
|
| I | CLI First | NON-NEGOTIABLE |
|
|
10
10
|
| II | Agent Authority | NON-NEGOTIABLE |
|
|
11
|
-
| III | Documentation-First | NON-NEGOTIABLE |
|
|
11
|
+
| III | Documentation-First Development | NON-NEGOTIABLE |
|
|
12
12
|
| IV | No Invention | MUST |
|
|
13
13
|
| V | Quality First | MUST |
|
|
14
14
|
| VI | Absolute Imports | SHOULD |
|
|
15
|
-
| VII | Metrics Accuracy | NON-NEGOTIABLE |
|
|
15
|
+
| VII | Ecosystem Metrics Accuracy | NON-NEGOTIABLE |
|
|
16
16
|
| VIII | Mandatory Delegation | NON-NEGOTIABLE |
|
|
17
17
|
| IX | Safe Collaboration | NON-NEGOTIABLE |
|
|
18
18
|
| X | Security & Data Protection | NON-NEGOTIABLE |
|
|
@@ -15,3 +15,5 @@ These are the canonical locations — agents should read their memory on activat
|
|
|
15
15
|
@import .sinapse-ai/development/agents/devops/MEMORY.md
|
|
16
16
|
@import .sinapse-ai/development/agents/project-lead/MEMORY.md
|
|
17
17
|
@import .sinapse-ai/development/agents/product-lead/MEMORY.md
|
|
18
|
+
@import .sinapse-ai/development/agents/data-engineer/MEMORY.md
|
|
19
|
+
@import .sinapse-ai/development/agents/sprint-lead/MEMORY.md
|
|
@@ -214,55 +214,15 @@ async function activateAction(options) {
|
|
|
214
214
|
console.log(` Cache: ${result.cacheValidDays} days offline operation`);
|
|
215
215
|
console.log('');
|
|
216
216
|
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
|
|
220
|
-
const proSourceDir = path.
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
try {
|
|
225
|
-
({ scaffoldProContent } = require('../../../../packages/installer/src/pro/pro-scaffolder'));
|
|
226
|
-
} catch {
|
|
227
|
-
console.log('Note: Pro scaffolder not available. Skipping content scaffolding.');
|
|
228
|
-
console.log('');
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if (scaffoldProContent) {
|
|
232
|
-
console.log('Scaffolding pro content...');
|
|
233
|
-
const scaffoldResult = await scaffoldProContent(projectRoot, proSourceDir, {
|
|
234
|
-
onProgress: ({ item, status, message }) => {
|
|
235
|
-
if (status === 'done') {
|
|
236
|
-
console.log(` + ${message}`);
|
|
237
|
-
} else if (status === 'warning') {
|
|
238
|
-
console.log(` ! ${message}`);
|
|
239
|
-
}
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
if (scaffoldResult.success) {
|
|
244
|
-
console.log(`\nPro content installed (${scaffoldResult.copiedFiles.length} files)`);
|
|
245
|
-
if (scaffoldResult.skippedFiles.length > 0) {
|
|
246
|
-
console.log(` ${scaffoldResult.skippedFiles.length} files unchanged (already up to date)`);
|
|
247
|
-
}
|
|
248
|
-
if (scaffoldResult.warnings.length > 0) {
|
|
249
|
-
for (const warning of scaffoldResult.warnings) {
|
|
250
|
-
console.log(` Warning: ${warning}`);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
} else {
|
|
254
|
-
console.error('\nWarning: Pro content scaffolding failed.');
|
|
255
|
-
for (const err of scaffoldResult.errors) {
|
|
256
|
-
console.error(` ${err}`);
|
|
257
|
-
}
|
|
258
|
-
console.error('Pro features are activated but content was not copied.');
|
|
259
|
-
console.error('Try running "sinapse pro activate" again to retry scaffolding.');
|
|
260
|
-
}
|
|
261
|
-
console.log('');
|
|
262
|
-
}
|
|
263
|
-
} else {
|
|
217
|
+
// Pro features are activated via the license cache above. Project content
|
|
218
|
+
// (squads/config) ships with the @sinapse-fullstack/pro package itself; no
|
|
219
|
+
// separate scaffolding step runs here.
|
|
220
|
+
const proSourceDir = path.resolve(
|
|
221
|
+
__dirname, '..', '..', '..', '..', 'node_modules', '@sinapse-fullstack', 'pro',
|
|
222
|
+
);
|
|
223
|
+
if (!fs.existsSync(proSourceDir)) {
|
|
264
224
|
console.log('Note: @sinapse-fullstack/pro package not found in node_modules.');
|
|
265
|
-
console.log('
|
|
225
|
+
console.log('Install it to access Pro content: npm install @sinapse-fullstack/pro');
|
|
266
226
|
console.log('');
|
|
267
227
|
}
|
|
268
228
|
|
|
@@ -78,6 +78,8 @@ User briefing → @sprint-lead *draft → @product-lead *validate → @developer
|
|
|
78
78
|
|
|
79
79
|
**Gate:** `dev-develop-story.md` - BLOCK se não houver story válida com status >= Ready
|
|
80
80
|
|
|
81
|
+
> **Enforcement (honesto):** este gate é **client-side / processo (advisory)** — aplicado por hook local e pela disciplina dos agentes, não por checagem server-side no CI. É contornável (`--no-verify`, edição direta) e não bloqueia o merge no GitHub. Exceção formal: trabalho de governança do framework (@sinapse-orqx) opera acima da camada de story.
|
|
82
|
+
|
|
81
83
|
**Rule file:** `.claude/rules/documentation-first.md`
|
|
82
84
|
|
|
83
85
|
---
|
|
@@ -108,7 +110,7 @@ Qualidade não é negociável. Todo código passa por múltiplos gates antes de
|
|
|
108
110
|
- MUST: `npm run lint` passa sem erros
|
|
109
111
|
- MUST: `npm run typecheck` passa sem erros
|
|
110
112
|
- MUST: `npm test` passa sem falhas
|
|
111
|
-
- MUST: `npm run build` completa com sucesso
|
|
113
|
+
- MUST: `npm run build` completa com sucesso **quando o projeto define um passo de build** (o framework SINAPSE é um CLI Node sem etapa de build — não há script `build`; `typecheck` cobre a verificação estática)
|
|
112
114
|
- MUST: CodeRabbit não reporta issues CRITICAL
|
|
113
115
|
- MUST: Story status é "Done" ou "Ready for Review"
|
|
114
116
|
- SHOULD: Cobertura de testes não diminui
|
|
@@ -242,6 +244,8 @@ Usuários são product builders, não especialistas em git. Agentes DEVEM gerenc
|
|
|
242
244
|
|
|
243
245
|
**Gate:** Hook `enforce-git-push-authority.sh` + branch protection no GitHub
|
|
244
246
|
|
|
247
|
+
> **Enforcement (honesto):** o bloqueio *hard* é a **branch protection do GitHub** (server-side) — impede push direto em `main`, exigindo PR. O hook é **client-side (advisory)**: pode ser contornado (`--no-verify`, outro clone) e serve como guarda de conveniência. A exclusividade de *quem* abre PR/release (@devops) é convenção de processo, não bloqueio técnico.
|
|
248
|
+
|
|
245
249
|
**Rule file:** `.claude/rules/safe-collaboration.md`
|
|
246
250
|
|
|
247
251
|
---
|
|
@@ -283,7 +287,7 @@ Todo projeto que manipula dados de usuarios DEVE seguir praticas de seguranca ri
|
|
|
283
287
|
|
|
284
288
|
**Regras — Repositorio:**
|
|
285
289
|
- MUST: Repositorios com codigo de producao DEVEM ser privados por padrao
|
|
286
|
-
- MUST: Branch protection DEVE estar ativa em main (PR
|
|
290
|
+
- MUST: Branch protection DEVE estar ativa em main (PR obrigatório). **Approval obrigatório em projetos colaborativos; no modo solo-maintainer o approval é opcional** (`required_approving_review_count: 0`) — o PR continua obrigatório e os status checks continuam bloqueantes (ver `safe-collaboration.md`, "Solo projects")
|
|
287
291
|
- MUST: GitHub Secret Scanning DEVE estar habilitado
|
|
288
292
|
- MUST: Dependabot DEVE estar configurado para alertas de seguranca
|
|
289
293
|
- MUST: CODEOWNERS DEVE proteger arquivos criticos
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
metadata:
|
|
2
2
|
version: 1.0.0
|
|
3
|
-
lastUpdated: '2026-06-
|
|
4
|
-
entityCount:
|
|
3
|
+
lastUpdated: '2026-06-22T02:41:18.583Z'
|
|
4
|
+
entityCount: 810
|
|
5
5
|
checksumAlgorithm: sha256
|
|
6
6
|
resolutionRate: 100
|
|
7
7
|
entities:
|
|
@@ -40,8 +40,8 @@ entities:
|
|
|
40
40
|
score: 0.7
|
|
41
41
|
constraints: []
|
|
42
42
|
extensionPoints: []
|
|
43
|
-
checksum: sha256:
|
|
44
|
-
lastVerified: '2026-06-
|
|
43
|
+
checksum: sha256:68c4b6ad0d9eb7a32985daf5b654bd4e2921880b9889df91be2b7e2c813c77f7
|
|
44
|
+
lastVerified: '2026-06-22T02:41:18.145Z'
|
|
45
45
|
agents:
|
|
46
46
|
path: bin/commands/agents.js
|
|
47
47
|
layer: L1
|
|
@@ -154,7 +154,6 @@ entities:
|
|
|
154
154
|
- prompts
|
|
155
155
|
- uninstall
|
|
156
156
|
- status
|
|
157
|
-
- register-grounding-hooks
|
|
158
157
|
- chrome-brain-installer
|
|
159
158
|
externalDeps: []
|
|
160
159
|
plannedDeps:
|
|
@@ -164,8 +163,8 @@ entities:
|
|
|
164
163
|
score: 0.7
|
|
165
164
|
constraints: []
|
|
166
165
|
extensionPoints: []
|
|
167
|
-
checksum: sha256:
|
|
168
|
-
lastVerified: '2026-06-
|
|
166
|
+
checksum: sha256:a8708eb5d5f59170ff51fcf5488c85b62815add902865fa4be188a7a54fedcdd
|
|
167
|
+
lastVerified: '2026-06-22T02:41:18.150Z'
|
|
169
168
|
local:
|
|
170
169
|
path: bin/commands/local.js
|
|
171
170
|
layer: L1
|
|
@@ -257,7 +256,6 @@ entities:
|
|
|
257
256
|
- detection
|
|
258
257
|
- prompts
|
|
259
258
|
- install
|
|
260
|
-
- register-grounding-hooks
|
|
261
259
|
externalDeps: []
|
|
262
260
|
plannedDeps:
|
|
263
261
|
- logger
|
|
@@ -266,8 +264,8 @@ entities:
|
|
|
266
264
|
score: 0.7
|
|
267
265
|
constraints: []
|
|
268
266
|
extensionPoints: []
|
|
269
|
-
checksum: sha256:
|
|
270
|
-
lastVerified: '2026-06-
|
|
267
|
+
checksum: sha256:a6b1105e9f8d3c452955377afcfb0d2d70e0a3e358e343389490891e4ff4f10e
|
|
268
|
+
lastVerified: '2026-06-22T02:41:18.151Z'
|
|
271
269
|
constants:
|
|
272
270
|
path: bin/lib/constants.js
|
|
273
271
|
layer: L1
|
|
@@ -402,30 +400,8 @@ entities:
|
|
|
402
400
|
score: 0.7
|
|
403
401
|
constraints: []
|
|
404
402
|
extensionPoints: []
|
|
405
|
-
checksum: sha256:
|
|
406
|
-
lastVerified: '2026-06-
|
|
407
|
-
register-grounding-hooks:
|
|
408
|
-
path: bin/lib/register-grounding-hooks.js
|
|
409
|
-
layer: L1
|
|
410
|
-
type: script
|
|
411
|
-
purpose: Entity at bin\lib\register-grounding-hooks.js
|
|
412
|
-
keywords:
|
|
413
|
-
- register
|
|
414
|
-
- grounding
|
|
415
|
-
- hooks
|
|
416
|
-
usedBy:
|
|
417
|
-
- install
|
|
418
|
-
- update
|
|
419
|
-
dependencies: []
|
|
420
|
-
externalDeps: []
|
|
421
|
-
plannedDeps: []
|
|
422
|
-
lifecycle: production
|
|
423
|
-
adaptability:
|
|
424
|
-
score: 0.7
|
|
425
|
-
constraints: []
|
|
426
|
-
extensionPoints: []
|
|
427
|
-
checksum: sha256:0856daf29e660ededff840173ba939b38967f525d1271635a671710d28de4e35
|
|
428
|
-
lastVerified: '2026-06-15T01:36:42.609Z'
|
|
403
|
+
checksum: sha256:dc7cc1109f2bbdb7b3c5927df0de2418925842bdacdc0ba82815bfa2783d0b42
|
|
404
|
+
lastVerified: '2026-06-22T02:41:18.152Z'
|
|
429
405
|
setup-statusline:
|
|
430
406
|
path: bin/lib/setup-statusline.js
|
|
431
407
|
layer: L1
|
|
@@ -547,8 +523,8 @@ entities:
|
|
|
547
523
|
score: 0.7
|
|
548
524
|
constraints: []
|
|
549
525
|
extensionPoints: []
|
|
550
|
-
checksum: sha256:
|
|
551
|
-
lastVerified: '2026-06-
|
|
526
|
+
checksum: sha256:5b4f06a8c4eef9be52f5b13545f992403031aa58a8a62ce2454015f98cb1156f
|
|
527
|
+
lastVerified: '2026-06-22T02:41:18.155Z'
|
|
552
528
|
sinapse-delegate:
|
|
553
529
|
path: bin/sinapse-delegate.js
|
|
554
530
|
layer: L1
|
|
@@ -37,3 +37,38 @@
|
|
|
37
37
|
## Archived
|
|
38
38
|
<!-- Patterns no longer relevant — kept for history -->
|
|
39
39
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
40
|
+
|
|
41
|
+
## Municao: Engenharia de Software (kit Fase 4)
|
|
42
|
+
|
|
43
|
+
Fonte completa: `engenharia-software/fase-4-agents/` (KIT-architect, KIT-orquestrador, KIT-fundamentos-transversal) — repo github `caioimori/engenharia-de-software`. Esta secao e o destilado; consulte o kit pro detalhe.
|
|
44
|
+
|
|
45
|
+
### Principios nao-negociaveis
|
|
46
|
+
- **Tudo e trade-off (First Law).** Nunca "o melhor X"; sempre "X paga seu custo NESTE contexto porque..." (Richards & Ford, *Fundamentals of Software Architecture*).
|
|
47
|
+
- **ASRs dirigem a estrutura, nao moda.** Top 3-7 atributos de qualidade, cada um como cenario mensuravel com SLO numerico (Bass/Clements/Kazman, SEI).
|
|
48
|
+
- **Fronteira e linguistica (bounded context), nunca camada tecnica.** Mudanca de linguagem = boundary; duplicata de evento e pista, nao erro (Evans + Brandolini/EventStorming).
|
|
49
|
+
- **Dependency Rule: dominio puro no nucleo;** DB/UI/framework/MCP/LLM sao detalhes na borda (R.C. Martin, *Clean Architecture*).
|
|
50
|
+
- **Monolito modular primeiro;** distribua so o quantum com deploy/escala/time independentes + DevOps maduro — senao = distributed monolith (Newman, *Building Microservices*).
|
|
51
|
+
- **Eventual por padrao em distribuido; ACID dentro do bounded context.** Outbox nunca dual-write; saga + compensacao + idempotencia; nunca 2PC default (*The Hard Parts*).
|
|
52
|
+
- **Toda integracao externa:** timeout + circuit breaker + fallback; ACL valida output de LLM/API (Nygard, *Release It!*).
|
|
53
|
+
- **ADR imutavel com consequencias NEGATIVAS + opcoes rejeitadas;** supersede, nunca edita (Nygard / MADR 4.0.0).
|
|
54
|
+
- **Atributo critico vira fitness function no CI** (rules live in code) — Ford/Parsons/Kua, *Building Evolutionary Architectures*.
|
|
55
|
+
- **Conway como design ativo:** topologia ANTES do enxame; carga cognitiva e o limite de fronteira; estrela nao malha (n(n-1)/2 persiste em tokens) — Conway + Skelton & Pais, *Team Topologies*.
|
|
56
|
+
- **Agente = bounded context = interpretador eval/apply** sob leis de complexidade; delegue a algoritmo deterministico o que e exato e barato (Evans DDD Europe 2025 + SICP/CLRS).
|
|
57
|
+
|
|
58
|
+
### Gates verificaveis (antes de Done)
|
|
59
|
+
- [ ] Cynefin classificado (campo `complexity:` no artefato de decisao).
|
|
60
|
+
- [ ] Cada boundary mapeia a um bounded context nomeado; zero fronteira por camada tecnica.
|
|
61
|
+
- [ ] Monolito x distribuido justificado por ADR (quantum + DevOps maduro) ou default monolito.
|
|
62
|
+
- [ ] ADR completo: Context, Options (incl. rejeitadas), Decision, Consequences com >=1 "Ruim:".
|
|
63
|
+
- [ ] Cada ASR com `response measure`/SLO numerico (regex de unidade: ms, %, p\d+, req/s).
|
|
64
|
+
- [ ] Dependency Rule verde no arch-linter (ArchUnit/dependency-cruiser); sem ciclos (`madge --circular` = 0).
|
|
65
|
+
- [ ] 1 transacao = 1 agregado; refs entre agregados por ID.
|
|
66
|
+
- [ ] Domain Events em PascalCase de negocio; zero "EntityUpdated"/"XxxChanged".
|
|
67
|
+
- [ ] ACL presente em toda chamada externa (API/MCP/LLM); domain primitives validados por construcao.
|
|
68
|
+
- [ ] Toda chamada externa com timeout + circuit breaker + fallback; write+publish via outbox; handlers idempotentes.
|
|
69
|
+
- [ ] Fitness functions poucas, de alto sinal, verdes no CI; PR que muda boundary inclui ADR novo.
|
|
70
|
+
- [ ] Fio de rastreabilidade intacto: outcome -> requisito(+fit criterion) -> ASR -> bounded context -> estilo -> ADR -> fitness function -> SLO.
|
|
71
|
+
- [ ] (squad) Sem overlap de escopo entre agents; nao-stream-aligned < ~15%; handoff = contrato versionado valido; zero codinome/@agent/path interno no texto user-facing.
|
|
72
|
+
|
|
73
|
+
### Loop operacional
|
|
74
|
+
Loop mestre: Cynefin -> Entender(outcome+ASR) -> Modelar(bounded context) -> Escolher(estilo por trade-off) -> Avaliar(sensitivity/tradeoff points) -> Registrar(ADR) -> Proteger(fitness function) -> Validar(CI); cada gate bloqueia, loop evolutivo reentra quando o negocio muda. Detalhe + diagramas mermaid (L1-L7 e Loop mestre): `LOOPS-design-arquitetura-diagramas.md` e, pra squads, `LOOPS-onda-7-processo-pessoas-diagramas.md` (B1-B6).
|
|
@@ -31,3 +31,41 @@
|
|
|
31
31
|
<!-- Patterns no longer relevant — kept for history -->
|
|
32
32
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
33
33
|
|
|
34
|
+
## Municao: Engenharia de Software (kit Fase 4)
|
|
35
|
+
|
|
36
|
+
Fonte completa: `engenharia-software/fase-4-agents/KIT-data-engineer.md` (repo github caioimori/engenharia-de-software). Recorte: modelagem + indexacao + ACID/isolamento + RAG vetorial + RLS multi-tenant + memoria de agent como event store.
|
|
37
|
+
|
|
38
|
+
### Principios nao-negociaveis
|
|
39
|
+
- Independencia de dados: manipule relacoes declarativamente; o sistema decide storage/indice/caminho de acesso (Codd 1970).
|
|
40
|
+
- ACID e contrato e cada letra custa; "C" (invariantes) e da aplicacao via constraint, nao do banco (Gray & Reuter; Kleppmann DDIA cap.7).
|
|
41
|
+
- Isolamento e matriz anomalia x nivel, nao escada: SI e RR sao incomparaveis. Escolha o MENOR nivel que evita as anomalias relevantes (Berenson et al. 1995).
|
|
42
|
+
- Os nomes do nivel mentem ("REPEATABLE READ" do Postgres = snapshot isolation) — verifique, nao assuma (Jepsen PostgreSQL).
|
|
43
|
+
- Write skew (invariante de conjunto sob SI) exige protecao explicita: SSI, `FOR UPDATE` ou constraint (Ports & Grittner 2012 SSI).
|
|
44
|
+
- Durabilidade vem do log (WAL antes do dado); COMMIT = fsync do registro de commit (Mohan et al. 1992, ARIES).
|
|
45
|
+
- Modele pelas queries reais: BCNF por padrao, desnormaliza so com medicao; indexa colunas reais de WHERE/JOIN/ORDER BY (Ramakrishnan/Gehrke).
|
|
46
|
+
- Cardinalidade domina o plano; `EXPLAIN ANALYZE` (plano real) e o arbitro (Leis et al., Join Order Benchmark).
|
|
47
|
+
- Idempotencia via unique constraint + upsert em todo efeito colateral; exactly-once nao existe = at-least-once + idempotencia (Stripe/Brandur).
|
|
48
|
+
- Memoria de agent = event store append-only + projecoes (CQRS); historico nunca sobrescrito. Isolamento por tenant via RLS. FSM avanca em transacao + outbox, nunca dual-write (Playbook dados distribuidos). PostgreSQL e default racional — sair dele exige necessidade medida.
|
|
49
|
+
|
|
50
|
+
### Gates verificaveis (antes de Done)
|
|
51
|
+
- [ ] PK/FK declaradas em toda tabela/relacao (`information_schema.table_constraints`, zero faltando).
|
|
52
|
+
- [ ] Unique constraint em toda chave de idempotencia/dedup.
|
|
53
|
+
- [ ] Sem over-indexing: nenhum indice maduro com `idx_scan = 0` (`pg_stat_user_indexes`).
|
|
54
|
+
- [ ] Cada `BEGIN` com nivel de isolamento explicito e justificado (menor que evita as anomalias).
|
|
55
|
+
- [ ] Write skew coberto: teste de concorrencia (duas txns paralelas) prova que o invariante nunca quebra.
|
|
56
|
+
- [ ] Retry de `serialization_failure` (SQLSTATE 40001) com backoff nas txns serializable.
|
|
57
|
+
- [ ] Transacoes curtas: nenhuma chamada de rede (HTTP/LLM) dentro de `BEGIN/COMMIT`.
|
|
58
|
+
- [ ] `EXPLAIN ANALYZE` confirma `Index Scan` nas queries quentes (sem `Seq Scan` inesperado).
|
|
59
|
+
- [ ] Zero N+1; keyset pagination (seek), nao `OFFSET` grande; sem `SELECT *` / result set sem LIMIT em caminho quente.
|
|
60
|
+
- [ ] Migrations versionadas e reversiveis (`up`+`down`); backfill em lotes.
|
|
61
|
+
- [ ] Backup + PITR com restore TESTADO (durabilidade nao testada nao existe).
|
|
62
|
+
- [ ] RAG: filtro hibrido no banco com teste de vazamento cross-tenant = zero; recall@k real medido acima do limiar.
|
|
63
|
+
- [ ] Idempotencia de tool mutante: mesma key 3x = efeito externo 1x (teste de integracao).
|
|
64
|
+
- [ ] Event store append-only: replay reconstroi estado identico (teste de replay).
|
|
65
|
+
- [ ] RLS ativo: query sem `tenant_id` correto retorna zero linhas (teste tenant A x B).
|
|
66
|
+
- [ ] FSM + outbox sem dual-write: crash injetado entre escrita e publicacao nao perde evento.
|
|
67
|
+
- [ ] ADR registrado pra toda escolha estrutural (engine, isolamento padrao, indice vetorial).
|
|
68
|
+
|
|
69
|
+
### Loop operacional
|
|
70
|
+
Entender (queries reais + invariantes) -> Modelar (BCNF, PK/FK, unique) -> Isolar (menor nivel; write skew -> SSI/lock + retry 40001) -> Indexar -> Provar (`EXPLAIN ANALYZE`, matar N+1) -> Migrar (versionada/reversivel) -> Especializar (RAG/event store/RLS/outbox) -> Verificar (rodar TODOS os gates ate verde) -> Registrar ADR + handoff (push/PR exclusivo do @devops). Diagrama mermaid completo no kit em `engenharia-software/fase-4-agents/KIT-data-engineer.md`.
|
|
71
|
+
|
|
@@ -45,3 +45,39 @@
|
|
|
45
45
|
<!-- Patterns no longer relevant — kept for history -->
|
|
46
46
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
47
47
|
|
|
48
|
+
## Municao: Engenharia de Software (kit Fase 4)
|
|
49
|
+
|
|
50
|
+
> Fonte: kits completos em `engenharia-software/fase-4-agents/` (KIT-developer + KIT-fundamentos-transversal), repo github `caioimori/engenharia-de-software`. Aqui so o essencial — consulte o kit pro detalhe.
|
|
51
|
+
|
|
52
|
+
### Principios nao-negociaveis
|
|
53
|
+
- **Codigo e AST, nao string.** Inspecao/edicao via tree-sitter/LSP/AST engine, nunca regex ou troca por linha (edicao crua de LLM muda comportamento em ~7-8% dos casos). (Nystrom *Crafting Interpreters* / CODESTRUCT)
|
|
54
|
+
- **Nenhuma mudanca sem rede verde.** Suite verde antes E depois de cada passo; area sem cobertura -> gera characterization/Golden Master ANTES de tocar. (Feathers *WELC* / Beck)
|
|
55
|
+
- **Smell nomeado antes de refatorar.** So refatora se o sintoma casa uma linha do CATALOGO smell->refactoring->pattern (cite a linha). Sem smell, nao mexe. (Fowler/Martin)
|
|
56
|
+
- **Two Hats.** Cada commit e SO refatoracao OU SO feature, jamais ambos. (Fowler *Refactoring* 2ª ed.)
|
|
57
|
+
- **Passo atomico + reversao.** Um passo por vez; vermelho -> reverte e reduz (nunca empilha quebra). Mudanca grande -> Mikado. (Beck / Mikado Method)
|
|
58
|
+
- **Complexidade cognitiva e o juiz, nao linhas.** Decompoe por intencao/profundidade; modulo profundo > muitos metodos rasos; nunca limite de linha cego. (Ousterhout *APoSD* / SonarSource)
|
|
59
|
+
- **Pattern so com variacao concreta HOJE e abstracao deep (YAGNI).** Prefira idioma mais barato (funcao > classe). (Kerievsky / GoF / Norvig)
|
|
60
|
+
- **Mock so de dependencia out-of-process compartilhada.** Dor no teste = sinal de design, nao desculpa pra mockar. Qualidade = mutation score, nao cobertura de linha. (Khorikov / PIT / Stryker)
|
|
61
|
+
- **Nunca reescreve do zero em codigo com usuarios** -> Strangler Fig / Branch by Abstraction. (Fowler)
|
|
62
|
+
- **Agente = interpretador eval/apply.** Loop com caso base OBRIGATORIO (teto de iteracoes); delega a algoritmo deterministico o que e exato e barato (ordenar/dedup/topo-sort); declara Big-O e estrutura pela operacao dominante; estado minimo, sem mutavel compartilhado no fan-out. (SICP / CLRS / Out of the Tar Pit)
|
|
63
|
+
|
|
64
|
+
### Gates verificaveis (antes de Done)
|
|
65
|
+
- [ ] Suite verde (pre E pos cada passo) — `npm test` exit 0
|
|
66
|
+
- [ ] Characterization/Golden Master existe em area legada tocada
|
|
67
|
+
- [ ] Behavior diff vazio (Golden Master byte-a-byte) apos refatoracao
|
|
68
|
+
- [ ] Edicao AST-safe — arquivo parseia valido apos Rename/Move/Extract
|
|
69
|
+
- [ ] Complexidade cognitiva <= 15 por funcao (sonarjs / ruff C901 / clippy)
|
|
70
|
+
- [ ] Aninhamento <= 3 niveis (eslint max-depth)
|
|
71
|
+
- [ ] Smell nomeado — refatoracao cita linha do CATALOGO
|
|
72
|
+
- [ ] Two Hats no commit — sem misturar refactor + teste de comportamento novo
|
|
73
|
+
- [ ] Mutation score incremental >= threshold no diff (Stryker / PIT / cargo-mutants)
|
|
74
|
+
- [ ] Anti-overengineering — nenhuma interface de 1 impl especulativa, nenhum Singleton mutavel global
|
|
75
|
+
- [ ] Output sintaticamente valido (codegen/DSL) — grammar-constrained + typecheck exit 0
|
|
76
|
+
- [ ] 100% das tool-calls validadas por schema/gramatica antes de executar
|
|
77
|
+
- [ ] Caso base alcancavel no loop (teto de iteracoes assertado)
|
|
78
|
+
- [ ] Flakiness < 1% (suite rodada N vezes)
|
|
79
|
+
- [ ] ADR registrado pra decisao de design nao-trivial
|
|
80
|
+
|
|
81
|
+
### Loop operacional
|
|
82
|
+
Entender (legado -> characterizar) -> design barato (comentario de interface antes) -> teste que falha pela razao certa -> implementacao minima que passa -> refatorar com rede (smell->refactoring->pattern, passos atomicos AST) -> gate de qualidade -> Done. Nunca avance com a barra vermelha. Diagramas L1-L12 + loop mestre em `LOOPS-craftsmanship-diagramas.md` (e `LOOPS-onda-6-fundamentos-linguagens-diagramas` pro eval/apply).
|
|
83
|
+
|
|
@@ -38,3 +38,42 @@
|
|
|
38
38
|
<!-- Patterns no longer relevant — kept for history -->
|
|
39
39
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
40
40
|
|
|
41
|
+
## Municao: Engenharia de Software (kit Fase 4)
|
|
42
|
+
|
|
43
|
+
Kit completo em `engenharia-software/fase-4-agents/KIT-devops-sre.md` (repo github caioimori/engenharia-de-software). Padrao encarnado: DORA Elite + Google SRE — velocidade COM estabilidade. Loop unico: CODAR -> ENTREGAR -> MEDIR -> PROTEGER, realimentado por postmortem.
|
|
44
|
+
|
|
45
|
+
### Principios nao-negociaveis
|
|
46
|
+
- **Build once, promote everywhere** — um artefato versionado (hash identico) atravessa todos os ambientes; nunca rebuild por ambiente. (Humble & Farley, *Continuous Delivery*)
|
|
47
|
+
- **Batch pequeno + trunk-based** — branch < 1 dia, integracao >= diaria; lotes pequenos = falhas baratas de reverter (mais critico sob codigo de IA). (Accelerate / DORA)
|
|
48
|
+
- **Testes/scans sao gate, nao sugestao** — "pronto" = CI verde objetivo, nunca auto-avaliacao do LLM; suite vermelha bloqueia tudo. (*Continuous Delivery*)
|
|
49
|
+
- **Error budget governa o ritmo** — orcamento ok -> acelera; estourou -> feature freeze (so P0/security). (Google SRE Book)
|
|
50
|
+
- **SLO por Critical User Journey** — SLI = good_events/valid_events; latencia de sucesso separada da de erro. (SRE Workbook)
|
|
51
|
+
- **Todo integration point nasce resiliente** — timeout finito + bulkhead + backoff com jitter (so se idempotente) + cap/retry-budget + idempotency key + backpressure + graceful degradation. Projete contra o LOOP DE AMPLIFICACAO, nao so o gatilho (colapso metaestavel). (Nygard *Release It!* / Bronson-Huang)
|
|
52
|
+
- **A cauda manda** — em fan-out otimize p99/p999, nao a media; hedged request quando p95 estoura. (Dean & Barroso *Tail at Scale*)
|
|
53
|
+
- **Meca antes de otimizar** — USE + drill-down (top->iostat->/proc/meminfo->dmesg, flame graph), classifique memory-bound vs compute-bound; nunca chute "vamos paralelizar". (Brendan Gregg *Systems Performance*)
|
|
54
|
+
- **Durabilidade = fsync, nao write**; least privilege na execucao (seccomp+cgroups+drop caps, nunca root no host, io_uring bloqueado em sandbox hostil). (OSTEP / Saltzer-Schroeder)
|
|
55
|
+
- **Supply chain e gate de 1a classe** — SBOM + assinatura Sigstore + provenance SLSA>=L2, verificado na admissao. (SLSA v1.1 / NIST SSDF)
|
|
56
|
+
- **Postmortem blameless, causas multiplas** -> backlog + atualiza threat model; mitigar antes de diagnosticar. (Cook / SRE Book)
|
|
57
|
+
- **Human-in-the-loop para acao destrutiva** (push --force, delete, deploy prod). (espelha safe-collaboration.md)
|
|
58
|
+
|
|
59
|
+
### Gates verificaveis (antes de Done)
|
|
60
|
+
- [ ] Branch curto (< 24h, sem long-lived) — `git log`/`git branch -a`
|
|
61
|
+
- [ ] Codigo incompleto atras de feature flag com kill switch (grep confirma flag-guard)
|
|
62
|
+
- [ ] Build-once: hash SHA-256 do artefato identico entre estagios
|
|
63
|
+
- [ ] CI verde: exit 0 em build+unit+lint+type-check+secret scan+dep scan
|
|
64
|
+
- [ ] Suite de testes verde (runner retorna 0 falhas)
|
|
65
|
+
- [ ] Complexidade cognitiva <= 15 por funcao (linter)
|
|
66
|
+
- [ ] Mutation score >= threshold (mutmut/stryker/PIT)
|
|
67
|
+
- [ ] SCA: 0 CVE critico aberto (Trivy/Grype/Snyk)
|
|
68
|
+
- [ ] Secret scan limpo (gitleaks/trufflehog); `.env` real nunca staged
|
|
69
|
+
- [ ] Artefato assinado + SBOM + provenance: `cosign verify` ok, SLSA>=L2
|
|
70
|
+
- [ ] Migration breaking via expand->contract; rollback de schema testado
|
|
71
|
+
- [ ] Deploy progressivo (canary 1-5% + ACA) com rollback amarrado ao SLO; abort automatico fora do budget
|
|
72
|
+
- [ ] DORA 4 keys medidas (deploy freq, lead time, CFR, MTTR) com numero, nao estimativa
|
|
73
|
+
- [ ] Burn-rate multi-janela configurado (14,4x / 6x / 1x); golden signals instrumentados
|
|
74
|
+
- [ ] Triade de estabilidade + idempotency testada em todo integration point; RPO/RTO + restore real testado
|
|
75
|
+
- [ ] (Agents) Eval gate (LLM-as-judge) + canary 5% antes de 100%; cap de iteracoes/retry budget no orquestrador
|
|
76
|
+
|
|
77
|
+
### Loop operacional
|
|
78
|
+
CODAR (integrar pequeno, testavel, seguro, atras de flag) -> ENTREGAR (pipeline com gates + canary/rollback) -> MEDIR (DORA + SLO + wide events) -> PROTEGER (triade de estabilidade + blast radius); postmortem blameless realimenta o threat model e o error budget governa o ritmo. Detalhe + diagramas mermaid no kit (secao "Loop operacional") e em `PIPELINE-operacional...` / `PLAYBOOK-performance-execucao`.
|
|
79
|
+
|
|
@@ -43,3 +43,39 @@
|
|
|
43
43
|
## Archived
|
|
44
44
|
<!-- Patterns no longer relevant — kept for history -->
|
|
45
45
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
46
|
+
|
|
47
|
+
## Municao: Engenharia de Software (kit Fase 4)
|
|
48
|
+
|
|
49
|
+
Fonte completa: kit `KIT-product-sprint.md` em `engenharia-software/fase-4-agents/` (repo github caioimori/engenharia-de-software). Destila o essencial; consultar o kit pro detalhe.
|
|
50
|
+
|
|
51
|
+
### Principios nao-negociaveis
|
|
52
|
+
- **Outcome over output** — todo "so that" e resultado mensuravel, nunca tarefa/feature; roadmap = problemas/outcomes, nao lista de entregas (Perri *Escaping the Build Trap* / Cagan *Inspired*).
|
|
53
|
+
- **Lote pequeno e lei nuclear** — reduzir tamanho do lote corta custo, risco e lead time juntos (Reinertsen *Product Development Flow*).
|
|
54
|
+
- **Slice vertical por outcome** — walking skeleton end-to-end ANTES de qualquer feature horizontal; nunca fatiar por camada tecnica (Patton *User Story Mapping*).
|
|
55
|
+
- **Requisito = exemplo = teste** — key examples concretos com contra-exemplo e edge case (Adzic *Specification by Example* / Example Mapping).
|
|
56
|
+
- **Sem fit criterion, e opiniao** — todo requisito/NFR tem medida objetiva quantificada (Robertson/Volere).
|
|
57
|
+
- **Story passa INVEST + 3C** — 3C = Card/Conversation/Confirmation (estrutura); INVEST = qualidade (Jeffries / Wake).
|
|
58
|
+
- **Limitar WIP, nao maximizar ocupacao** — WIP = Throughput x Cycle Time (Lei de Little); lead time ∝ 1/(1−ρ) (Little/Vacanti / Reinertsen).
|
|
59
|
+
- **MVP = experimento** — hipotese + actionable metric + pivot-or-persevere; cada fatia e um giro de Build-Measure-Learn (Ries *Lean Startup*).
|
|
60
|
+
- **Forecast probabilistico** — "X% de chance ate Y" via throughput/Monte Carlo; nunca data-compromisso, nunca velocity como meta (Vacanti / Goodhart).
|
|
61
|
+
- **Cerimonia calibrada por risco (Cynefin + Boehm-Turner)** — bug fix = YOLO; epic multi-story = pipeline completo.
|
|
62
|
+
|
|
63
|
+
### Gates verificaveis (antes de Done)
|
|
64
|
+
- [ ] "so that" e outcome mensuravel, nao verbo de implementacao
|
|
65
|
+
- [ ] Fit criterion presente e quantificado (NFR sem numero = FAIL)
|
|
66
|
+
- [ ] >=1 key example Given/When/Then + >=1 contra-exemplo/edge case
|
|
67
|
+
- [ ] INVEST completo (I-N-V-E-S-T item a item)
|
|
68
|
+
- [ ] 3C presentes (Card + Conversation registrada + Confirmation = AC escritos)
|
|
69
|
+
- [ ] Rastreavel feature -> story -> exemplo -> teste
|
|
70
|
+
- [ ] Cabe num lote pequeno (Small); senao split via SPIDR
|
|
71
|
+
- [ ] Fatiada por outcome end-to-end, nao "so backend"/"so frontend"
|
|
72
|
+
- [ ] Walking skeleton existe e veio primeiro
|
|
73
|
+
- [ ] WIP limitado por coluna respeitado (max 1 InProgress por executor)
|
|
74
|
+
- [ ] PR/diff > 400 linhas dispara warning e split
|
|
75
|
+
- [ ] 5 premissas da Lei de Little checadas antes de confiar em cycle time/throughput
|
|
76
|
+
- [ ] Forecast em formato probabilistico (data pontual = FAIL)
|
|
77
|
+
- [ ] DoD por coluna verde antes de avancar status (jidoka/stop-the-line)
|
|
78
|
+
- [ ] WSJF (CoD ÷ Job Size) registrado pro sequenciamento; ordem por HiPPO = FAIL
|
|
79
|
+
|
|
80
|
+
### Loop operacional
|
|
81
|
+
Classificar (Cynefin/risco) -> Descobrir (OST, >=3 solucoes) -> Mapear (Story Map + walking skeleton) -> Fatiar vertical (SPIDR) -> Refinar (Example Mapping <30min) -> Gate A+B -> Ready -> Pull sob WIP -> Implementar lote pequeno -> DoD jidoka -> Measure -> pivot-or-persevere -> Forecast -> Retro/kaizen. Diagrama mermaid completo na secao "## Loop operacional" do kit.
|
|
@@ -37,3 +37,39 @@
|
|
|
37
37
|
<!-- Patterns no longer relevant — kept for history -->
|
|
38
38
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
39
39
|
|
|
40
|
+
## Municao: Engenharia de Software (kit Fase 4)
|
|
41
|
+
|
|
42
|
+
Fonte completa: kit `KIT-product-sprint.md` em `engenharia-software/fase-4-agents/` (repo github caioimori/engenharia-de-software). Carregar pra detalhe; aqui so o essencial.
|
|
43
|
+
|
|
44
|
+
### Principios nao-negociaveis
|
|
45
|
+
- **Outcome over output** — todo "so that" e resultado mensuravel, nunca tarefa/feature; roadmap = problemas/outcomes (Perri *Escaping the Build Trap* / Cagan *Inspired*).
|
|
46
|
+
- **Lote pequeno e lei nuclear** — reduzir o lote corta custo, risco, variabilidade e lead time de uma vez (Reinertsen *Product Development Flow*).
|
|
47
|
+
- **Slice vertical por outcome** — walking skeleton end-to-end ANTES de qualquer feature horizontal; quebrar com SPIDR (Patton *User Story Mapping* / Cohn).
|
|
48
|
+
- **Requisito = exemplo = teste** — criterio de aceite sao key examples concretos com contra-exemplo e edge case (Adzic *Specification by Example* / Example Mapping).
|
|
49
|
+
- **Sem fit criterion, e opiniao** — todo requisito (esp. NFR) tem medida objetiva quantificada (Robertson/Volere).
|
|
50
|
+
- **Story passa INVEST + 3C** — 3C = Card/Conversation/Confirmation (estrutura); INVEST = qualidade (Jeffries / Wake).
|
|
51
|
+
- **Limitar WIP, nao ocupacao** — WIP = Throughput x Cycle Time (Lei de Little); lead time ∝ 1/(1−ρ), 100% ocupacao explode (Reinertsen / Vacanti).
|
|
52
|
+
- **MVP = experimento** — hipotese + actionable metric + pivot-or-persevere; cada fatia = giro de Build-Measure-Learn (Ries *Lean Startup*).
|
|
53
|
+
- **Forecast probabilistico** — "X% de chance ate Y" via throughput/Monte Carlo; velocity NUNCA como meta, nem individual (Vacanti / Goodhart).
|
|
54
|
+
- **Cerimonia calibrada por risco** — Cynefin + Boehm-Turner (Size/Criticality/Dynamism/Personnel/Culture): bug fix = YOLO, epic = pipeline.
|
|
55
|
+
|
|
56
|
+
### Gates verificaveis (antes de Done)
|
|
57
|
+
- [ ] "so that" e outcome mensuravel, nao verbo de implementacao
|
|
58
|
+
- [ ] fit criterion presente e quantificado (NFR sem numero = FAIL)
|
|
59
|
+
- [ ] >=1 key example Given/When/Then + >=1 contra-exemplo/edge case
|
|
60
|
+
- [ ] INVEST completo (cada item marcado)
|
|
61
|
+
- [ ] 3C presentes (Card + Conversation registrada + Confirmation)
|
|
62
|
+
- [ ] rastreavel feature->story->exemplo->teste
|
|
63
|
+
- [ ] cabe num lote pequeno (Small); senao split por SPIDR
|
|
64
|
+
- [ ] fatiada vertical por outcome (rejeita "so backend"/"so frontend")
|
|
65
|
+
- [ ] walking skeleton existe e veio primeiro
|
|
66
|
+
- [ ] WIP por coluna respeitado (max 1 InProgress por executor)
|
|
67
|
+
- [ ] PR/diff > 400 linhas dispara split
|
|
68
|
+
- [ ] 5 premissas da Lei de Little checadas antes de confiar em cycle time/throughput
|
|
69
|
+
- [ ] forecast em formato probabilistico (data pontual-compromisso = FAIL)
|
|
70
|
+
- [ ] DoD por coluna verde (jidoka/stop-the-line) antes de avancar status
|
|
71
|
+
- [ ] WSJF (`CoD ÷ Job Size`) registrado pra sequenciamento; ordem por HiPPO = FAIL
|
|
72
|
+
|
|
73
|
+
### Loop operacional
|
|
74
|
+
Classificar (Cynefin) -> descobrir (OST, >=3 solucoes, testar assumption mais arriscada) -> mapear (Story Map) -> fatiar vertical (SPIDR) -> refinar (Example Mapping <30min) -> Gate A+B (Ready) -> puxar sob WIP -> implementar lote pequeno -> DoD jidoka -> medir actionable metric -> pivot-or-persevere -> forecast Monte Carlo -> retro (kaizen + OST + CFD). Diagrama mermaid completo na secao "## Loop operacional" do kit.
|
|
75
|
+
|
|
@@ -41,3 +41,38 @@
|
|
|
41
41
|
<!-- Patterns no longer relevant — kept for history -->
|
|
42
42
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
43
43
|
|
|
44
|
+
## Munição: Engenharia de Software (kit Fase 4)
|
|
45
|
+
|
|
46
|
+
Fonte: kit completo em `engenharia-software/fase-4-agents/KIT-quality-gate.md` (repo github caioimori/engenharia-de-software). Consolida testes/TDD + segurança/threat-model. Regra de ouro: todo princípio que pode virar gate, virou gate. Verdict sempre amarrado a evidência de ferramenta — nunca "parece bom".
|
|
47
|
+
|
|
48
|
+
### Princípios não-negociáveis
|
|
49
|
+
- Cobertura ≠ qualidade; o sinal honesto é mutation score incremental no diff (DeMillo/Lipton/Sayward; PIT/Stryker).
|
|
50
|
+
- Teste comportamento observável, nunca implementação — resistência à refatoração é binária (Khorikov, *Unit Testing* 2020).
|
|
51
|
+
- Só mocke dependência out-of-process compartilhada/mutável; nunca interna nem privada (Khorikov; Google/Thoughtworks).
|
|
52
|
+
- 4 pilares: fixe resistência+manutenibilidade, negocie proteção×velocidade (Khorikov 2020).
|
|
53
|
+
- Determinismo é lei: relógio/aleatório/I/O injetados; flakiness > 1% destrói a suíte (*SWE at Google*).
|
|
54
|
+
- Pirâmide por size de recurso (~80/15/5), não por nome de camada (Cohn; *SWE at Google*).
|
|
55
|
+
- Legacy = código sem teste → characterization test antes de tocar (Feathers, *WELC* 2004).
|
|
56
|
+
- Suíte verde é pré-condição de merge, não conquista (Beck, *TDD by Example*).
|
|
57
|
+
- Toda saída do LLM é input não confiável — valida contra schema/allow-list (OWASP LLM05/2025).
|
|
58
|
+
- Cada ameaça → mitigação → teste → gate; prompt injection se resolve por contenção, não filtro (Shostack/STRIDE; OWASP LLM01).
|
|
59
|
+
|
|
60
|
+
### Gates verificáveis (antes de Done)
|
|
61
|
+
- [ ] Suíte verde 100% (runner exit 0; zero skip sem justificativa)
|
|
62
|
+
- [ ] Mutation score incremental ≥ threshold do módulo (Stryker/PIT no diff)
|
|
63
|
+
- [ ] Flakiness < 1% (flaky → quarentena + owner + deadline)
|
|
64
|
+
- [ ] Zero lógica condicional no teste (sem if/for/while/try)
|
|
65
|
+
- [ ] Zero mock de dependência interna ou out-of-process privada
|
|
66
|
+
- [ ] Determinismo: sem Date.now()/Math.random()/I/O real não-injetado
|
|
67
|
+
- [ ] Nome do teste descreve comportamento; snapshot não é única asserção
|
|
68
|
+
- [ ] SCA bloqueia CVE crítico em dependência
|
|
69
|
+
- [ ] Secret scanning bloqueia merge com credencial em plaintext
|
|
70
|
+
- [ ] SAST com FP tunado; achado crítico bloqueia
|
|
71
|
+
- [ ] Threat model STRIDE rastreável a teste (feature que cruza trust boundary/toca dado sensível)
|
|
72
|
+
- [ ] Cripto: zero cripto caseira; AEAD + Argon2id + CSPRNG; secret em KMS
|
|
73
|
+
- [ ] Agent de IA: allow-list de tools, HITL em ação destrutiva, secret fora do prompt
|
|
74
|
+
- [ ] Agent de IA: isolamento multi-tenant + red-team de prompt injection como regressão
|
|
75
|
+
|
|
76
|
+
### Loop operacional
|
|
77
|
+
QA Gate/Loop determinístico: suíte verde → qualidade do teste → mutation incremental → flakiness → segurança → least agency → verdict (PASS/CONCERNS/FAIL/WAIVED); qualquer gate aplicável vermelho ⇒ não assina Done; máx 5 iterações então escala. Diagrama/passo-a-passo completo no kit (`KIT-quality-gate.md` §"Loop operacional").
|
|
78
|
+
|
|
@@ -38,3 +38,39 @@
|
|
|
38
38
|
<!-- Patterns no longer relevant — kept for history -->
|
|
39
39
|
<!-- Format: - ~~{pattern}~~ | Archived: {YYYY-MM-DD} | Reason: {reason} -->
|
|
40
40
|
|
|
41
|
+
## Municao: Engenharia de Software (kit Fase 4)
|
|
42
|
+
|
|
43
|
+
Fonte completa: `engenharia-software/fase-4-agents/KIT-product-sprint.md` (repo github caioimori/engenharia-de-software). Principio-mestre: o artefato (story/board) e meio; o fim e entendimento compartilhado + comportamento medido. Lote pequeno e lei nuclear.
|
|
44
|
+
|
|
45
|
+
### Principios nao-negociaveis
|
|
46
|
+
- **Outcome over output.** Todo "so that" e resultado mensuravel, nunca tarefa/feature; roadmap = problemas/outcomes (Perri *Escaping the Build Trap* / Cagan *Inspired*).
|
|
47
|
+
- **Slice vertical por outcome, walking skeleton primeiro.** End-to-end fino ANTES de feature horizontal; quebra com SPIDR (Spike/Path/Interface/Data/Rules) (Patton *User Story Mapping* / Cohn).
|
|
48
|
+
- **Requisito = exemplo = teste.** Key examples concretos com contra-exemplo e edge case; sem fit criterion quantificado e opiniao (Adzic *Specification by Example* / Robertson-Volere).
|
|
49
|
+
- **Story passa INVEST + 3C.** 3C = Card/Conversation/Confirmation (estrutura); INVEST = qualidade (Wake / Jeffries).
|
|
50
|
+
- **Limitar WIP, nao maximizar ocupacao.** WIP = Throughput × Cycle Time (Lei de Little); lead time ∝ 1/(1−ρ); pull, nao push (Reinertsen / Anderson *Kanban*).
|
|
51
|
+
- **MVP e experimento, nao versao pequena.** Cada fatia = giro Build-Measure-Learn com hipotese + actionable metric + pivot-or-persevere (Ries *Lean Startup*).
|
|
52
|
+
- **Forecast probabilistico, nao promessa.** "X% ate Y" via throughput/Monte Carlo; velocity NUNCA como meta (Vacanti / Goodhart).
|
|
53
|
+
- **Cerimonia calibrada por risco (Cynefin + Boehm-Turner).** Bug fix = YOLO; epic multi-story = pipeline completo (Snowden / Boehm-Turner).
|
|
54
|
+
- **DoD como jidoka (stop-the-line).** Defeito para a linha; status nao avanca sem gate verde (Poppendieck / DevOps Handbook).
|
|
55
|
+
- **Discovery e habito, nao fase.** OST vivo: >=3 solucoes por oportunidade, testa a assumption mais arriscada primeiro (Torres *Continuous Discovery Habits*).
|
|
56
|
+
|
|
57
|
+
### Gates verificaveis (antes de Done)
|
|
58
|
+
- [ ] "so that" e outcome mensuravel, nao verbo de implementacao
|
|
59
|
+
- [ ] Fit criterion presente e quantificado (NFR sem numero = FAIL)
|
|
60
|
+
- [ ] >=1 key example Given/When/Then + >=1 contra-exemplo/edge case
|
|
61
|
+
- [ ] INVEST completo (item a item)
|
|
62
|
+
- [ ] 3C presentes (Card + Conversation + Confirmation)
|
|
63
|
+
- [ ] Rastreavel feature -> story -> exemplo -> teste
|
|
64
|
+
- [ ] Cabe num lote pequeno (Small); senao dispara split via SPIDR
|
|
65
|
+
- [ ] Fatiada por outcome end-to-end (rejeita slice so backend/so frontend)
|
|
66
|
+
- [ ] Walking skeleton existe e veio antes de feature horizontal
|
|
67
|
+
- [ ] MVP declarado como experimento (hipotese + metric + pivot)
|
|
68
|
+
- [ ] WIP respeitado: max 1 InProgress por executor; PR/diff > 400 linhas = quebrar
|
|
69
|
+
- [ ] Forecast em formato probabilistico ("X% ate Y"); data pontual = FAIL
|
|
70
|
+
- [ ] Velocity NAO usada como meta (nem individual)
|
|
71
|
+
- [ ] Complexidade classificada (Cynefin) e cerimonia calibrada (Boehm-Turner)
|
|
72
|
+
- [ ] WSJF registrado para sequenciamento (CoD ÷ Job Size); ordem por HiPPO = FAIL
|
|
73
|
+
|
|
74
|
+
### Loop operacional
|
|
75
|
+
Classificar (Cynefin) -> descobrir (OST) -> mapear (Story Map) -> fatiar vertical (SPIDR) -> refinar (Example Mapping <30min) -> Gate A+B -> puxar sob WIP -> implementar lote pequeno (DoD jidoka) -> medir -> aprender (pivot/persevere) -> forecast Monte Carlo -> retro (1-3 kaizen + atualiza OST/CFD). Diagrama completo na secao "Loop operacional" do kit.
|
|
76
|
+
|
|
@@ -76,8 +76,8 @@ Nao precisa rodar `chrome-debug` manualmente.
|
|
|
76
76
|
3. Testar em nova aba → comparar com original → iterar
|
|
77
77
|
|
|
78
78
|
**Casos validados:**
|
|
79
|
-
-
|
|
80
|
-
-
|
|
79
|
+
- hero com orb WebGL (parallax, blend-mode) — ~15min
|
|
80
|
+
- landing com rosto 3D (Three.js + bloom) — ~20min
|
|
81
81
|
|
|
82
82
|
### Animacoes 3D via AI
|
|
83
83
|
|
|
@@ -324,6 +324,21 @@ async function commandSync(options) {
|
|
|
324
324
|
|
|
325
325
|
// Filter IDEs if --ide flag specified
|
|
326
326
|
let targetIdes = Object.entries(config.targets);
|
|
327
|
+
|
|
328
|
+
// Hard-skip: ide-sync must NEVER write .codex. The Codex mirror is owned by the
|
|
329
|
+
// canonical Codex sync (sync-codex-local-first.js writes thin runtime pointers
|
|
330
|
+
// resolved by resolve-codex-agent.js). Letting ide-sync write it clobbers those
|
|
331
|
+
// pointers with full agent bodies. This is enforced in CODE — not just via the
|
|
332
|
+
// config `targets.codex.enabled: false` — so a stray config flip can't re-arm the
|
|
333
|
+
// foot-gun. To refresh .codex, run `npm run sync:codex`.
|
|
334
|
+
if (options.ide === 'codex') {
|
|
335
|
+
console.error(
|
|
336
|
+
`${colors.yellow}'codex' is managed by the Codex sync (npm run sync:codex), not ide-sync — nothing to do.${colors.reset}`
|
|
337
|
+
);
|
|
338
|
+
process.exit(0);
|
|
339
|
+
}
|
|
340
|
+
targetIdes = targetIdes.filter(([name]) => name !== 'codex');
|
|
341
|
+
|
|
327
342
|
if (options.ide) {
|
|
328
343
|
targetIdes = targetIdes.filter(([name]) => name === options.ide);
|
|
329
344
|
if (targetIdes.length === 0) {
|