stealthos-cli 0.1.0-alpha.2 → 0.1.0-alpha.4
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/ai/CONTRACT.md +110 -0
- package/ai/INDEX.md +203 -0
- package/ai/README.md +434 -0
- package/ai/ROUTER.md +288 -0
- package/ai/agents/README.md +103 -0
- package/ai/agents/architect.md +59 -0
- package/ai/agents/backend-engineer.md +62 -0
- package/ai/agents/founder.md +45 -0
- package/ai/agents/frontend-engineer.md +61 -0
- package/ai/agents/product-manager.md +56 -0
- package/ai/agents/qa-engineer.md +53 -0
- package/ai/agents/researcher.md +74 -0
- package/ai/agents/reviewer.md +73 -0
- package/ai/agents/security-engineer.md +59 -0
- package/ai/agents/sre-engineer.md +70 -0
- package/ai/agents/tech-lead.md +70 -0
- package/ai/architecture/README.md +35 -0
- package/ai/architecture/components.md +24 -0
- package/ai/architecture/containers.md +30 -0
- package/ai/architecture/event-flows.md +36 -0
- package/ai/architecture/sequence-diagrams.md +38 -0
- package/ai/architecture/system-context.md +46 -0
- package/ai/architecture/threat-modeling.md +40 -0
- package/ai/blueprints/README.md +67 -0
- package/ai/blueprints/_schema.json +40 -0
- package/ai/blueprints/ai-platform.json +28 -0
- package/ai/blueprints/crm.json +22 -0
- package/ai/blueprints/game.json +25 -0
- package/ai/blueprints/mobile.json +24 -0
- package/ai/blueprints/realtime.json +22 -0
- package/ai/blueprints/saas.json +25 -0
- package/ai/blueprints/telemetry.json +30 -0
- package/ai/blueprints/web.json +23 -0
- package/ai/bootstrap/discovery-questions.md +117 -0
- package/ai/bootstrap/dispatcher.md +85 -0
- package/ai/bootstrap/existing-project.md +191 -0
- package/ai/bootstrap/new-project.md +127 -0
- package/ai/bootstrap/tech-mapping.md +164 -0
- package/ai/clients/README.md +114 -0
- package/ai/clients/antigravity.md +125 -0
- package/ai/clients/claude-code.md +65 -0
- package/ai/clients/cline.md +69 -0
- package/ai/clients/codex-aider-cli.md +82 -0
- package/ai/clients/continue.md +67 -0
- package/ai/clients/copilot.md +49 -0
- package/ai/clients/cursor.md +81 -0
- package/ai/clients/snippets/mcp-absolute-paths.json +9 -0
- package/ai/clients/snippets/mcp-http.json +7 -0
- package/ai/clients/snippets/mcp-stdio.json +9 -0
- package/ai/clients/trae.md +69 -0
- package/ai/clients/windsurf.md +71 -0
- package/ai/core/pipeline/execution-engine.md +157 -0
- package/ai/engineering/README.md +32 -0
- package/ai/engineering/observability/incident-response.md +82 -0
- package/ai/evals/protocol-tests.md +150 -0
- package/ai/evolution/agent-evolution.md +161 -0
- package/ai/evolution/improvements.md +91 -0
- package/ai/evolution/learnings.md +49 -0
- package/ai/evolution/patterns-discovered.md +48 -0
- package/ai/execution/README.md +33 -0
- package/ai/execution/backlog.md +27 -0
- package/ai/execution/milestones.md +26 -0
- package/ai/execution/roadmap.md +30 -0
- package/ai/execution/sprint.md +42 -0
- package/ai/governance/README.md +34 -0
- package/ai/governance/architecture-principles.md +99 -0
- package/ai/governance/definition-of-done.md +88 -0
- package/ai/governance/definition-of-ready.md +69 -0
- package/ai/governance/engineering-principles.md +70 -0
- package/ai/governance/quality-gates.md +85 -0
- package/ai/governance/security-policies.md +84 -0
- package/ai/hooks/enforce-audit.ps1 +41 -0
- package/ai/hooks/enforce-audit.sh +39 -0
- package/ai/hooks/guard-edit.ps1 +182 -0
- package/ai/hooks/guard-edit.sh +161 -0
- package/ai/hooks/inject-os-reminder.ps1 +40 -0
- package/ai/hooks/inject-os-reminder.sh +16 -0
- package/ai/manifest.json +238 -0
- package/ai/memory/_detected-stack.json +33 -0
- package/ai/memory/_summary.md +49 -0
- package/ai/memory/archive/.gitkeep +3 -0
- package/ai/memory/completed-tasks.md +156 -0
- package/ai/memory/decisions.md +257 -0
- package/ai/memory/errors-and-solutions.md +41 -0
- package/ai/memory/known-issues.md +40 -0
- package/ai/memory/pending-tasks.md +37 -0
- package/ai/memory/project-context.md +67 -0
- package/ai/operating-system/architecture.md +54 -0
- package/ai/operating-system/coding-standards.md +84 -0
- package/ai/operating-system/folder-structure.md +126 -0
- package/ai/operating-system/performance-rules.md +86 -0
- package/ai/operating-system/quality-control.md +81 -0
- package/ai/operating-system/security-rules.md +91 -0
- package/ai/operating-system/workflow.md +86 -0
- package/ai/product/README.md +24 -0
- package/ai/product/business-rules.md +26 -0
- package/ai/product/personas.md +29 -0
- package/ai/product/user-journeys.md +30 -0
- package/ai/product/vision.md +35 -0
- package/ai/rules/behavior.md +45 -0
- package/ai/rules/do.md +47 -0
- package/ai/rules/dont.md +46 -0
- package/ai/rules/execution-flow.md +125 -0
- package/ai/rules/structural-constraints.md +59 -0
- package/ai/rules/structure-canon.md +116 -0
- package/ai/runtime.md +179 -0
- package/ai/scripts/detect-stack.ps1 +166 -0
- package/ai/scripts/detect-stack.sh +172 -0
- package/ai/scripts/init-ai-os.ps1 +170 -0
- package/ai/scripts/init-ai-os.sh +99 -0
- package/ai/scripts/lint-os.ps1 +99 -0
- package/ai/scripts/lint-os.sh +85 -0
- package/ai/scripts/start-os.ps1 +151 -0
- package/ai/scripts/start-os.sh +141 -0
- package/ai/server/README.md +105 -0
- package/ai/server/aios-server.mjs +2134 -0
- package/ai/server/package-lock.json +802 -0
- package/ai/server/package.json +31 -0
- package/ai/server/src/analyzer/graph-builder.ts +92 -0
- package/ai/server/src/analyzer/index.ts +191 -0
- package/ai/server/src/analyzer/module-mapper.ts +171 -0
- package/ai/server/src/analyzer/smell-detector.ts +54 -0
- package/ai/server/src/analyzer/stack-detector.ts +70 -0
- package/ai/server/src/index.ts +16 -0
- package/ai/server/src/packager/context-builder.ts +217 -0
- package/ai/server/src/packager/index.ts +3 -0
- package/ai/server/src/packager/memory-injector.ts +128 -0
- package/ai/server/src/packager/module-summarizer.ts +60 -0
- package/ai/server/src/packager/token-estimator.ts +26 -0
- package/ai/server/src/snapshot/index.ts +3 -0
- package/ai/server/src/snapshot/snapshot-creator.ts +206 -0
- package/ai/server/src/snapshot/snapshot-diff.ts +86 -0
- package/ai/server/src/snapshot/snapshot-restore.ts +14 -0
- package/ai/server/src/types.ts +94 -0
- package/ai/server/tsconfig.json +26 -0
- package/ai/skills/architecture-design.md +82 -0
- package/ai/skills/backend-engineering.md +57 -0
- package/ai/skills/database-design.md +76 -0
- package/ai/skills/frontend-engineering.md +63 -0
- package/ai/skills/performance.md +73 -0
- package/ai/skills/scalability.md +84 -0
- package/ai/skills/security.md +71 -0
- package/ai/skills/testing.md +77 -0
- package/ai/specs/ADR/ADR-0002-typescript-runtime.md +103 -0
- package/ai/specs/ADR/ADR-0004-runtime-orchestrator.md +94 -0
- package/ai/specs/ADR/ADR-0005-workflow-engine.md +105 -0
- package/ai/specs/ADR/ADR-0006-runtime-state.md +104 -0
- package/ai/specs/ADR/ADR-0007-state-compiler-drift-context-layers-artifact-index.md +82 -0
- package/ai/specs/ADR/ADR-0008-intent-runtime-discovery-branching.md +93 -0
- package/ai/specs/ADR/ADR-0009-confidence-system-maturity-tracking.md +113 -0
- package/ai/specs/ADR/ADR-0010-structural-architecture-standards.md +121 -0
- package/ai/specs/ADR/ADR-0011-mcp-prompts.md +86 -0
- package/ai/specs/ADR/ADR-0012-stealthos-hybrid-architecture.md +174 -0
- package/ai/specs/ADR/_TEMPLATE.md +60 -0
- package/ai/specs/BRD/_TEMPLATE.md +50 -0
- package/ai/specs/PRD/_TEMPLATE.md +72 -0
- package/ai/specs/README.md +43 -0
- package/ai/specs/RFC/RFC-0001-runtime-orchestrator.md +149 -0
- package/ai/specs/RFC/RFC-0002-runtime-orchestrator-extended.md +134 -0
- package/ai/specs/RFC/_TEMPLATE.md +61 -0
- package/ai/specs/RUNBOOKS/_TEMPLATE.md +68 -0
- package/ai/specs/SDD/_TEMPLATE.md +104 -0
- package/ai/specs/TASKS/_TEMPLATE.md +52 -0
- package/ai/tools/debugging.md +64 -0
- package/ai/tools/dependency-analysis.md +46 -0
- package/ai/tools/internet-research.md +42 -0
- package/ai/tools/mcp-discovery.md +44 -0
- package/ai/workflows/_schema.json +81 -0
- package/ai/workflows/init.json +148 -0
- package/ai/workflows/sync.json +71 -0
- package/ai/workflows/work.json +91 -0
- package/bin.cjs +7 -0
- package/package.json +9 -3
- package/scripts/bundle-ai.mjs +58 -0
- package/src/cli.mjs +1 -1
- package/src/commands/install.mjs +35 -11
- package/src/lib/resolve-source.mjs +27 -10
- package/stealthos +0 -2
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
updated: 2026-05-14
|
|
4
|
+
tier: conditional
|
|
5
|
+
tokens: ~varies
|
|
6
|
+
load: architecture, design_decision
|
|
7
|
+
mutable: append_only
|
|
8
|
+
triggers: arquitetura, decisão, adr, escolher entre, trade-off
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Architecture Decision Records (ADRs)
|
|
12
|
+
|
|
13
|
+
> Registro persistente de decisões arquiteturais. Cada ADR captura contexto, decisão, consequências e alternativas.
|
|
14
|
+
|
|
15
|
+
## Formato
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
## ADR-NNNN — Título
|
|
19
|
+
- Data: AAAA-MM-DD
|
|
20
|
+
- Status: Proposto | Aceito | Substituído por ADR-NNNN | Deprecated
|
|
21
|
+
- Decisor: usuário, agente, time
|
|
22
|
+
|
|
23
|
+
### Contexto
|
|
24
|
+
O que motivou a decisão. Restrições, requisitos, problema.
|
|
25
|
+
|
|
26
|
+
### Decisão
|
|
27
|
+
O que foi decidido, de forma clara e acionável.
|
|
28
|
+
|
|
29
|
+
### Consequências
|
|
30
|
+
- Positivas: ...
|
|
31
|
+
- Negativas / trade-offs aceitos: ...
|
|
32
|
+
- Neutras: ...
|
|
33
|
+
|
|
34
|
+
### Alternativas consideradas
|
|
35
|
+
1. Alternativa X — descartada porque Y
|
|
36
|
+
2. Alternativa Z — descartada porque W
|
|
37
|
+
|
|
38
|
+
### Referências
|
|
39
|
+
Links, PRs, issues, fontes externas.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Regras
|
|
43
|
+
|
|
44
|
+
1. **Numeração sequencial.** ADR-0001, ADR-0002, ... — nunca reutilizar número.
|
|
45
|
+
2. **Imutabilidade.** ADR aceito não se edita; cria-se novo ADR com status "Substituído por".
|
|
46
|
+
3. **Linkagem.** Sempre referenciar ADRs relacionados.
|
|
47
|
+
4. **Granularidade.** Uma decisão = um ADR. Não agrupar.
|
|
48
|
+
|
|
49
|
+
## Quando criar ADR
|
|
50
|
+
|
|
51
|
+
- Escolha de framework, biblioteca, banco, infraestrutura.
|
|
52
|
+
- Padrão arquitetural (camadas, microserviços, eventos).
|
|
53
|
+
- Política de segurança, performance, compliance.
|
|
54
|
+
- Decisão controversa que provavelmente será questionada depois.
|
|
55
|
+
|
|
56
|
+
## Quando NÃO criar ADR
|
|
57
|
+
|
|
58
|
+
- Mudança trivial de implementação.
|
|
59
|
+
- Convenção de código (vai para `operating-system/coding-standards.md`).
|
|
60
|
+
- Bug fix (vai para `errors-and-solutions.md`).
|
|
61
|
+
|
|
62
|
+
## Entradas
|
|
63
|
+
|
|
64
|
+
<!-- adicionar abaixo a partir de ADR-0004 -->
|
|
65
|
+
|
|
66
|
+
## ADR-0012 — StealthOS Hybrid Architecture (daemon global + projeto leve)
|
|
67
|
+
- Data: 2026-05-16
|
|
68
|
+
- Status: Aceito
|
|
69
|
+
- Decisor: usuário (visão de produto "StealthOS não interfere no projeto") + agente
|
|
70
|
+
- Contexto: `.ai/` despeja ~50 arquivos no projeto-alvo; viaja no git; difícil atualizar OS. Visão StealthOS exige isolamento.
|
|
71
|
+
- Decisão: Modelo C híbrido — daemon em `~/.stealthos/` (server + manual + templates + projects/<hash>/), projeto recebe só `.stealthos.yml` + stubs IDE selecionados. Project hash = `sha256(absolute_path).slice(0,12)`. Server v1.2 introduz `STEALTHOS_MODE=embedded|hybrid`.
|
|
72
|
+
- Consequência: projeto-alvo de 14 → 3-9 itens; update do OS atinge todos projetos; state não viaja no git. Implementação faseada — scaffolder primeiro (modo embedded), server multi-tenant depois (modo hybrid), v2.0 default hybrid.
|
|
73
|
+
- Referências: `.ai/specs/ADR/ADR-0012-stealthos-hybrid-architecture.md`, ADR-0011 (MCP Prompts é ortogonal — funciona em ambos modos).
|
|
74
|
+
|
|
75
|
+
## ADR-0011 — MCP Prompts como discovery mechanism cross-IDE
|
|
76
|
+
- Data: 2026-05-16
|
|
77
|
+
- Status: Aceito
|
|
78
|
+
- Decisor: usuário + agente
|
|
79
|
+
- Contexto: `/init`/`/sync`/`/work` só funcionavam no Claude Code (mecanismo proprietário). Outras IDEs (Antigravity, Cursor, etc.) tratavam slash como texto literal.
|
|
80
|
+
- Decisão: expor os 3 workflows como MCP Prompts (primitivo do protocolo 2024-11-05). Híbrido: prompt retorna instrução pra LLM chamar `aios_run_workflow` + contexto enriquecido (state.identity, ROUTER hint).
|
|
81
|
+
- Consequência: IDEs MCP-aware (Claude Code, Cursor recente) expõem `/init`/`/sync`/`/work` nativamente só conectando o MCP. 36 tools intactas (zero regressão). Server bump 1.0.0 → 1.1.0.
|
|
82
|
+
- Referências: `.ai/specs/ADR/ADR-0011-mcp-prompts.md`.
|
|
83
|
+
|
|
84
|
+
## ADR-0003 — v4.0.0: AI-DOS completo (Context Engine + Multi-agent + Spec-Driven + Pipeline com gates)
|
|
85
|
+
- Data: 2026-05-15
|
|
86
|
+
- Status: Aceito
|
|
87
|
+
- Decisor: usuário (pedido explícito por "AI Development Operating System" maduro, equivalente ao processo de empresas grandes) + agente
|
|
88
|
+
|
|
89
|
+
### Contexto
|
|
90
|
+
O framework v3.4.0 cobria regras, skills, memória histórica e bootstrap com mapa técnico — suficiente para um projeto solo "vibe coding++". Mas o usuário identificou (corretamente) o teto desse modelo:
|
|
91
|
+
- Sem **agentes especializados**, o agente principal vira "faz-tudo" e perde fronteiras.
|
|
92
|
+
- Sem **specs canônicos** (PRD, SDD, RFC, BRD, Runbook), código nasce sem alinhamento.
|
|
93
|
+
- Sem **context engine separado da memória**, contradições antigas contaminam decisões novas.
|
|
94
|
+
- Sem **pipeline com gates explícitos**, qualquer task pula direto para implementação ("vibe coding").
|
|
95
|
+
- Sem **governance** (princípios, DoR/DoD, security/architecture policies), decisões dependem do humor da sessão.
|
|
96
|
+
|
|
97
|
+
O alvo é uma **empresa-de-uma-pessoa** onde o Founder direciona e agentes especializados executam, com qualidade equivalente ao processo de empresas maduras.
|
|
98
|
+
|
|
99
|
+
### Decisão
|
|
100
|
+
Promover o framework para **v4.0.0 — AI Development Operating System (AI-DOS)** com 6 camadas novas, mantendo backward-compatibility:
|
|
101
|
+
|
|
102
|
+
1. **`governance/`** — Princípios inegociáveis (engineering-principles, architecture-principles, security-policies, DoR, DoD, quality-gates).
|
|
103
|
+
2. **`agents/`** — 10 agentes especializados (founder, product-manager, architect, tech-lead, backend-engineer, frontend-engineer, qa-engineer, security-engineer, sre-engineer, reviewer, researcher) com contratos de I/O claros.
|
|
104
|
+
3. **`specs/`** — Templates canônicos (PRD, SDD, RFC, BRD, ADR, RUNBOOKS, TASKS) numerados, com ciclo de vida draft → review → approved → deprecated/superseded.
|
|
105
|
+
4. **`context/`** — Context Engine vivo separado da memória histórica: project-state, business-context, technical-context, architecture-state, active-goals, constraints, assumptions, glossary, roadmap, technical-debt.
|
|
106
|
+
5. **`core/pipeline/execution-engine.md`** — Pipeline canônico IDEIA → DISCOVERY → PRD (G2) → ARCH (G3) → SDD/ADR → TASKS (G4) → IMPL (G5) → TEST (G6) → REVIEW (G7) → DEPLOY (G8) → OBSERVABILIDADE (G9) → APRENDIZADO (G10).
|
|
107
|
+
6. **`product/`, `architecture/`, `engineering/`, `execution/`** — Pastas-irmãs com README + templates específicos por área.
|
|
108
|
+
|
|
109
|
+
### Consequências
|
|
110
|
+
- **Positivas**:
|
|
111
|
+
- Pipeline explícito acaba com "vibe coding" — não há atalho de IDEIA→IMPL.
|
|
112
|
+
- Cada agente é guardião de uma fronteira (Architect não implementa, Backend não muda arquitetura, etc.).
|
|
113
|
+
- Specs templates impedem que feature comece sem PRD/SDD.
|
|
114
|
+
- Context Engine separa "agora" de "histórico" — reduz contradição e custo de tokens.
|
|
115
|
+
- Governance materializa princípios que antes eram orais.
|
|
116
|
+
- Founder pode delegar com confiança porque os contratos de I/O são explícitos.
|
|
117
|
+
- **Negativas / trade-offs aceitos**:
|
|
118
|
+
- Carga inicial maior: o `.ai/` cresceu de 69 para 137+ required files. Mitigação: CORE continua ~3k tokens; resto é CONDITIONAL/ON-DEMAND via ROUTER.
|
|
119
|
+
- Curva de adoção: agente principal precisa aprender a invocar agentes especializados e referenciar specs em vez de improvisar.
|
|
120
|
+
- Risco de **burocracia excessiva** em projetos pequenos. Mitigação: pipeline tem "modos" (Full, Express, Refactor, Spike, Config) — bug fix P0 skipa gates G1-G4.
|
|
121
|
+
- **Neutras**:
|
|
122
|
+
- Compatibilidade preservada: regras antigas (`rules/`, `operating-system/`, `skills/`, `memory/`, `evolution/`, `tools/`, `runtime.md`) seguem ativas.
|
|
123
|
+
|
|
124
|
+
### Alternativas consideradas
|
|
125
|
+
1. **Manter v3.4.0 e só adicionar `specs/` e `agents/`** — descartado: sem `governance/` e `context/`, agentes não têm fronteira nem contexto vivo. Solução parcial.
|
|
126
|
+
2. **Reescrever do zero como `.aios/` paralelo** — descartado: perde histórico, ADRs, learnings acumulados.
|
|
127
|
+
3. **Adotar framework externo (LangGraph, CrewAI, AutoGen)** — descartado: cada um carrega filosofia própria e cria dependência de runtime. O AI-DOS é **markdown puro + hooks leves**, plug-and-play em qualquer cliente.
|
|
128
|
+
|
|
129
|
+
### Plano de migração
|
|
130
|
+
- v4.0.0 entra ao lado da estrutura existente — nenhuma pasta antiga removida.
|
|
131
|
+
- ROUTER ganha novas rotas (pipeline, governance, agents, specs, context, product, incident) sem remover as antigas.
|
|
132
|
+
- INDEX referencia as novas pastas.
|
|
133
|
+
- Manifest passa de 69 para 67+novas required_files (alguns templates `_TEMPLATE.md` viram required).
|
|
134
|
+
- Strak recebe a estrutura via sync (preservando seu próprio `memory/`, `decisions/`, `pending-tasks/`).
|
|
135
|
+
|
|
136
|
+
### Referências
|
|
137
|
+
- Pedido do usuário (sessão de 2026-05-14/15) que descreveu a evolução para Spec-Driven Development, Context Engineering e multi-agent.
|
|
138
|
+
- Modelos de referência: C4 Model (Brown), 12-factor app, SRE Book (Google), Architecture Decision Records (Nygard), Software Engineering at Google (Winters et al.).
|
|
139
|
+
|
|
140
|
+
## ADR-0002 — Tech-mapping obrigatório no bootstrap (organização por especificação técnica)
|
|
141
|
+
- Data: 2026-05-14
|
|
142
|
+
- Status: Aceito
|
|
143
|
+
- Decisor: usuário (pedido direto: "no bootstrap deve haver processo de analisar e organizar tudo por especificações técnicas") + agente
|
|
144
|
+
|
|
145
|
+
### Contexto
|
|
146
|
+
O bootstrap original (`new-project.md` e `existing-project.md`) gerava `memory/project-context.md` e ADR-0001, mas deixava `operating-system/architecture.md` opcional/livre. Resultado observado em campo: ao instalar o `.ai/` num projeto real (Strak), o agente teve que inventar uma organização técnica sob pressão e ficou raso. Sem mapa explícito por especificação técnica (Frontend, Backend, BD, Infra, Integrações, Tools, APIs, MCPs, Dados), o agente perde tempo redescobrindo o shape do projeto a cada sessão e induz novos colaboradores ao mesmo retrabalho.
|
|
147
|
+
|
|
148
|
+
### Decisão
|
|
149
|
+
1. **Criar protocolo dedicado** em [`.ai/bootstrap/tech-mapping.md`](../bootstrap/tech-mapping.md) com:
|
|
150
|
+
- Catálogo de 11 especificações de alto nível (Frontend, Backend, BD, Infra/Deploy, Integrações Externas, Tools/Scripts, APIs, MCPs, Dados/Samples, Mobile/Desktop/Game, ML/Pipelines).
|
|
151
|
+
- Regra de descoberta de subespecificações (via `Glob`/`Read`, não invenção).
|
|
152
|
+
- Template canônico de `operating-system/architecture.md` numerado por especificação (com seção "10. Pendências de Mapeamento" cap 10 itens).
|
|
153
|
+
- Checklist do agente ao gerar.
|
|
154
|
+
2. **Tornar obrigatório** chamar este protocolo em ambos os fluxos:
|
|
155
|
+
- `bootstrap/existing-project.md` — passo 5 do TL;DR e passo 5 do "Popular Memória" exigem aplicar `tech-mapping.md`.
|
|
156
|
+
- `bootstrap/new-project.md` — passo 3 do "Após Confirmação" exige aplicar `tech-mapping.md`; checklist final de "bootstrap completo" inclui linha "architecture.md populado via tech-mapping".
|
|
157
|
+
3. **Promover folder-structure.md** para diferenciar duas camadas:
|
|
158
|
+
- **Macro** = organização por especificação técnica (Frontend/Backend/Infra...) — referência ao `tech-mapping.md`.
|
|
159
|
+
- **Micro** = organização interna por feature/domínio (regras pré-existentes).
|
|
160
|
+
4. **Registrar a nova rota** no `ROUTER.md`: trigger "mapa técnico / tech-mapping / organizar projeto / especifica" → carrega `tech-mapping.md` + `architecture.md` + `folder-structure.md`.
|
|
161
|
+
5. **Manifesto** (`manifest.json`): `tech-mapping.md` adicionado a `required_files`.
|
|
162
|
+
6. **INDEX**: listar `tech-mapping.md` na seção Bootstrap.
|
|
163
|
+
|
|
164
|
+
### Consequências
|
|
165
|
+
- **Positivas**:
|
|
166
|
+
- Sempre que um projeto adota o `.ai/`, sai com **mapa técnico explícito por especificação**. Onboarding (humano ou agente) cai radicalmente.
|
|
167
|
+
- Reduz alucinação: o agente consulta `architecture.md` antes de propor mudança de módulo/integração.
|
|
168
|
+
- Padronização cross-project: todo `architecture.md` tem o mesmo esqueleto numerado.
|
|
169
|
+
- Pendências viram trabalho concreto (seção 10), não buraco invisível.
|
|
170
|
+
- **Negativas / trade-offs aceitos**:
|
|
171
|
+
- Primeiro bootstrap em projeto existente fica mais longo (~10-30 min a mais para inventariar). Aceito porque amortiza nas próximas N sessões.
|
|
172
|
+
- Risco de o template virar fóssil se ninguém atualizar — mitigação: regra `tech-mapping.md` "toda PR que mexer em arquitetura atualiza este doc"; auditoria trimestral.
|
|
173
|
+
- **Neutras**:
|
|
174
|
+
- Projetos novos começam com seções quase vazias mas com esqueleto; mais valor à medida que crescem.
|
|
175
|
+
|
|
176
|
+
### Alternativas consideradas
|
|
177
|
+
1. **Deixar `architecture.md` livre, só dar exemplos** — descartado: já era o estado anterior e mostrou que vira raso.
|
|
178
|
+
2. **Categorizar por feature em vez de especificação técnica** — descartado: feature é a **camada micro**; sem a macro, perde-se a visão "onde mora o backend?" / "quais integrações temos?". Os dois níveis coexistem.
|
|
179
|
+
3. **Forçar uma estrutura de pastas física por especificação** (raiz com `frontend/`, `backend/` etc.) — descartado: muitos monorepos pequenos têm `src/` + `server/` por razões históricas; impor reorganização física quebra projetos legados. O `architecture.md` documenta o mapeamento.
|
|
180
|
+
|
|
181
|
+
### Referências
|
|
182
|
+
- Caso real que motivou: instalação do `.ai/` no subprojeto **Strak** (`sistema-de-diesel/`) — ver `memory/completed-tasks.md` entrada de 2026-05-14.
|
|
183
|
+
- Arquivos tocados: `.ai/bootstrap/tech-mapping.md` (novo), `.ai/bootstrap/existing-project.md`, `.ai/bootstrap/new-project.md`, `.ai/operating-system/folder-structure.md`, `.ai/INDEX.md`, `.ai/manifest.json`, `.ai/ROUTER.md`.
|
|
184
|
+
|
|
185
|
+
## ADR-0001 — Guard-edit cobre Bash + bypass via `.claude/.unlock`
|
|
186
|
+
- Data: 2026-05-14
|
|
187
|
+
- Status: Aceito
|
|
188
|
+
- Decisor: usuário (autorização explícita "pode realizar essa pendencia") + agente
|
|
189
|
+
|
|
190
|
+
### Contexto
|
|
191
|
+
IMP-001 (proposto em 2026-05-14) identificou que o hook `guard-edit.{ps1,sh}` registrado com matcher `Edit|Write|NotebookEdit` deixava passar edições via `Bash` (`Set-Content`, redirects, `fs.writeFileSync`, etc.) em arquivos protegidos (`CONTRACT.md`, `settings.json`, hooks, etc.). Além disso, os dois scripts de guard estavam **corrompidos** desde alguma edição anterior — arrays de regex sem fechamento e lógica duplicada 3x.
|
|
192
|
+
|
|
193
|
+
### Decisão
|
|
194
|
+
1. **Reescrever** `guard-edit.ps1` e `guard-edit.sh` limpos (substring match em lower-case, sem regex frágil).
|
|
195
|
+
2. **Adicionar branch Bash** ao guard: detecta verbos de escrita (`Set-Content`, `Out-File`, `Add-Content`, `Clear-Content`, `Tee-Object`, `New-Item`, `Remove-Item`, `Move-Item`, `Copy-Item`, `fs.writeFile*`, `fs.appendFile*`, `fs.unlink*`, `fs.rm*`, `rm `, `mv `, `cp `, `tee `, `sed -i`, `> path`, `>> path`) cruzados com lista de paths protegidos. Bloqueia se houver match.
|
|
196
|
+
3. **Override autorizado via sentinela**: se `.claude/.unlock` existe (qualquer conteúdo, basta a existência), o guard sai com `exit 0` imediatamente. Usuário cria com `New-Item .claude/.unlock` ou `touch .claude/.unlock`; remove com `Remove-Item .claude/.unlock` para restaurar proteção.
|
|
197
|
+
4. **Atualizar matcher** em `.claude/settings.json` e `.claude/settings.unix.json` de `Edit|Write|NotebookEdit` para `Edit|Write|NotebookEdit|Bash`.
|
|
198
|
+
|
|
199
|
+
### Consequências
|
|
200
|
+
- **Positivas**:
|
|
201
|
+
- Fecha o bypass descrito em IMP-001.
|
|
202
|
+
- Corrige a corrupção pré-existente nos guards.
|
|
203
|
+
- Mantém UX: usuário pode autorizar mudança pontual sem editar manualmente o hook (`.unlock`).
|
|
204
|
+
- Auditável: criação/remoção de `.unlock` é visível no filesystem.
|
|
205
|
+
- **Negativas / trade-offs aceitos**:
|
|
206
|
+
- Falsos positivos possíveis em Bash quando o comando contém um verbo de escrita + nome de path protegido sem intenção destrutiva (ex: `grep "Set-Content" .claude/settings.json` bloqueia). Mitigação: `.unlock` resolve em 1 comando.
|
|
207
|
+
- `.unlock` é um interruptor global (não por-path). Decisão consciente em favor da simplicidade — escopo por-path foi descartado por complicar parsing/expiração.
|
|
208
|
+
- **Neutras**:
|
|
209
|
+
- O guard agora roda em **todo** Bash, não só os com Edit/Write. Custo: ~10-30ms por chamada de Bash. Aceitável.
|
|
210
|
+
|
|
211
|
+
### Alternativas consideradas
|
|
212
|
+
1. **Apenas branch Bash, sem `.unlock`** — descartado porque deixaria o usuário sem escape hatch quando o agente legitimamente precisa modificar um protegido.
|
|
213
|
+
2. **`.unlock` com TTL/timestamp e lista de paths** — descartado por complexidade desproporcional ao ganho; existência simples atende.
|
|
214
|
+
3. **Lista de comandos seguros (allowlist) em vez de detecção de verbos de escrita** — descartado: lista cresce indefinidamente; detecção de verbos cobre 95% dos casos com menor manutenção.
|
|
215
|
+
|
|
216
|
+
### Referências
|
|
217
|
+
- IMP-001 em `evolution/improvements.md` (status: aplicado por ADR-0001).
|
|
218
|
+
- Arquivos tocados: `.ai/hooks/guard-edit.ps1`, `.ai/hooks/guard-edit.sh`, `.claude/settings.json`, `.claude/settings.unix.json`.
|
|
219
|
+
|
|
220
|
+
## ADR-0002 — TypeScript + ts-morph + commander para Runtime v0.1
|
|
221
|
+
- Data: 2026-05-15
|
|
222
|
+
- Status: Aceito
|
|
223
|
+
- Decisor: usuário (autorização explícita via AskUserQuestion: "TypeScript + deps controladas — Recomendado") + agente
|
|
224
|
+
|
|
225
|
+
### Contexto
|
|
226
|
+
O AI Operating System (v4.0.0) entregou estrutura passiva sólida: 91+ arquivos markdown + MCP daemon Node.js (`aios-server.mjs`) com 12 tools de lookup/leitura. Toda a "inteligência" estava em **documentos**, não em **código executável**. Pesquisa do Founder (refs do mercado AI-DOS / Devin / OpenHands) identificou três componentes de alto ROI ausentes: Context Packager (semantic compression), Project State Engine (AST + grafo + smells), Snapshot System. Implementar AST decente em TS/JS sem parser real é inviável (regex falha em re-exports, barrel files, type-only imports).
|
|
227
|
+
|
|
228
|
+
### Decisão
|
|
229
|
+
Adotar TypeScript + dependências controladas para o Runtime v0.1, mantendo `aios-server.mjs` como entry `.mjs` puro que importa `dist/index.mjs` (bundle único gerado por esbuild). Stack:
|
|
230
|
+
- `ts-morph@^22` (runtime) — AST tipado sobre tsc.
|
|
231
|
+
- `commander@^12` (runtime) — CLI tipada para futuros entrypoints.
|
|
232
|
+
- `typescript@^5.4`, `esbuild@^0.21`, `@types/node@^20` (devDeps).
|
|
233
|
+
|
|
234
|
+
Estrutura: `.ai/server/src/{types,index}.ts` + `analyzer/` + `packager/` + `snapshot/`. Build via `npm install && npm run build` → `.ai/server/dist/index.mjs`. Daemon faz `import()` opcional do bundle: se ausente, as 12 tools base continuam funcionando (graceful degradation), as 5 v0.1 retornam erro descritivo.
|
|
235
|
+
|
|
236
|
+
### Consequências
|
|
237
|
+
- **Positivas**:
|
|
238
|
+
- AST parsing confiável (ts-morph cobre o que tsc cobre).
|
|
239
|
+
- TypeScript em dev → menos bugs por type-error em código complexo (analyzer/packager).
|
|
240
|
+
- Bundle único `dist/index.mjs` — runtime continua sem `node_modules` em produção quando build é feito.
|
|
241
|
+
- `aios-server.mjs` permanece `.mjs` puro, sem build próprio.
|
|
242
|
+
- **Negativas / trade-offs aceitos**:
|
|
243
|
+
- Quebra a regra "NUNCA instalar dependência nova sem justificar e pedir confirmação" do CLAUDE.md global. Mitigação: este ADR + aprovação explícita via AskUserQuestion.
|
|
244
|
+
- Requer `npm install` + `npm run build` na primeira vez. Mitigação: `start-os.{ps1,sh}` detecta ausência de `dist/` e orienta. Daemon continua útil mesmo sem build (12 tools base).
|
|
245
|
+
- **Neutras**:
|
|
246
|
+
- `dist/` gerado (gitignored). `package-lock.json` versionado para reprodutibilidade.
|
|
247
|
+
|
|
248
|
+
### Alternativas consideradas
|
|
249
|
+
1. **Manter zero-deps (`.mjs` puro)** — descartado porque AST decente em Node nativo é inviável; resultado seria menos confiável que o status quo.
|
|
250
|
+
2. **TypeScript + ts-morph sem bundler** — descartado: `node_modules/` em produção (>500 arquivos), divergência dev/prod, mais difícil de auditar.
|
|
251
|
+
3. **SQLite (better-sqlite3) para storage** — descartado para v0.1; JSON sidecar + Markdown atende. SQLite só se justifica quando queries complexas (ranking, joins, FTS) virarem necessárias.
|
|
252
|
+
|
|
253
|
+
### Referências
|
|
254
|
+
- ADR completo: `.ai/specs/ADR/ADR-0002-typescript-runtime.md`.
|
|
255
|
+
- IMP-003 em `evolution/improvements.md` (status: aplicado por ADR-0002).
|
|
256
|
+
- Arquivos tocados: `.ai/server/package.json`, `.ai/server/tsconfig.json`, `.ai/server/.gitignore`, `.ai/server/src/**`, `.ai/server/README.md`, `.ai/server/aios-server.mjs` (wiring), `.ai/manifest.json` (bump 4.0.0 → 4.1.0 + capabilities), `.ai/INDEX.md`, `.ai/ROUTER.md` (3 novas rotas), `.claude/commands/{analyze,context,snapshot}.md`.
|
|
257
|
+
- Plano completo: arquivado no histórico local do Claude Code (não versionado).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
updated: 2026-05-14
|
|
4
|
+
tier: conditional
|
|
5
|
+
tokens: ~varies
|
|
6
|
+
load: bugs
|
|
7
|
+
mutable: append_only
|
|
8
|
+
triggers: bug, erro, error, falha
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Errors and Solutions
|
|
12
|
+
|
|
13
|
+
> Catálogo de erros observados + correções validadas. Antes de debugar, conferir aqui.
|
|
14
|
+
|
|
15
|
+
## Formato
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
## ERR-NNN — Título curto do sintoma
|
|
19
|
+
- Data: AAAA-MM-DD
|
|
20
|
+
- Contexto: onde aconteceu (módulo, arquivo, ambiente)
|
|
21
|
+
- Sintoma: mensagem de erro, comportamento observado
|
|
22
|
+
- Causa raiz: explicação técnica do POR QUÊ
|
|
23
|
+
- Correção: o que foi feito (com referência a commit/PR se houver)
|
|
24
|
+
- Reprodução: passos mínimos para reproduzir (se aplicável)
|
|
25
|
+
- Prevenção: teste/lint/check que impede regressão
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Regras
|
|
29
|
+
|
|
30
|
+
1. Só registrar erro com **causa raiz identificada**. Sintoma sem causa vai para `known-issues.md`.
|
|
31
|
+
2. Se o mesmo erro reaparecer, atualizar a entrada (incrementar contador de ocorrências).
|
|
32
|
+
3. Se a causa raiz se repete em 3+ entradas distintas → considerar `evolution/patterns-discovered.md`.
|
|
33
|
+
4. Linkar para `decisions.md` se a correção envolveu decisão arquitetural.
|
|
34
|
+
|
|
35
|
+
## Anti-padrão
|
|
36
|
+
|
|
37
|
+
- "Resolvi reiniciando" não é solução — é workaround. Registrar como `known-issues.md` até causa raiz.
|
|
38
|
+
|
|
39
|
+
## Entradas
|
|
40
|
+
|
|
41
|
+
<!-- adicionar abaixo -->
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
updated: 2026-05-14
|
|
4
|
+
tier: conditional
|
|
5
|
+
tokens: ~varies
|
|
6
|
+
load: bugs
|
|
7
|
+
mutable: true
|
|
8
|
+
triggers: bug, erro, problema conhecido
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Known Issues
|
|
12
|
+
|
|
13
|
+
> Problemas conhecidos SEM solução definitiva. Workarounds, limitações, débitos.
|
|
14
|
+
|
|
15
|
+
## Formato
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
## ISSUE-NNN — Título
|
|
19
|
+
- Data: AAAA-MM-DD (primeira observação)
|
|
20
|
+
- Severidade: baixa | média | alta | crítica
|
|
21
|
+
- Frequência: rara | ocasional | frequente | constante
|
|
22
|
+
- Sintoma: o que se observa
|
|
23
|
+
- Impacto: a quem afeta, com que magnitude
|
|
24
|
+
- Hipóteses de causa: lista (marcar "confirmado" ou "especulação")
|
|
25
|
+
- Workaround atual: como contornar enquanto não há fix
|
|
26
|
+
- Tentativas anteriores: o que já foi testado e NÃO resolveu
|
|
27
|
+
- Próximos passos: investigação pendente
|
|
28
|
+
- Issue tracker: link externo (Jira, GitHub) se houver
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Regras
|
|
32
|
+
|
|
33
|
+
1. Quando causa raiz é identificada → MOVER para `errors-and-solutions.md` (com referência ao ISSUE-NNN original).
|
|
34
|
+
2. Se o issue persiste >3 meses sem progresso → reclassificar severidade e impacto.
|
|
35
|
+
3. Registrar tentativas falhadas para evitar repeti-las.
|
|
36
|
+
4. Não confundir com `pending-tasks.md`: aqui é problema sem fix; lá é trabalho planejado.
|
|
37
|
+
|
|
38
|
+
## Entradas
|
|
39
|
+
|
|
40
|
+
<!-- adicionar abaixo -->
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
updated: 2026-05-14
|
|
4
|
+
tier: on_demand
|
|
5
|
+
tokens: ~varies
|
|
6
|
+
load: backlog_review
|
|
7
|
+
mutable: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Pending Tasks
|
|
11
|
+
|
|
12
|
+
> Backlog ativo. Itens em andamento ou esperando para começar.
|
|
13
|
+
|
|
14
|
+
## Formato
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
## [PRIORIDADE] Título
|
|
18
|
+
- Criado: AAAA-MM-DD
|
|
19
|
+
- Origem: bug, feature request, refactor, débito técnico, ...
|
|
20
|
+
- Critério de aceite: como sabemos que está pronto
|
|
21
|
+
- Dependências: outras tasks ou condições
|
|
22
|
+
- Owner sugerido: usuário, agente, ...
|
|
23
|
+
- Status: backlog | in-progress | blocked
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Prioridades: **P0** (crítico), **P1** (alto), **P2** (médio), **P3** (baixo).
|
|
27
|
+
|
|
28
|
+
## Regras
|
|
29
|
+
|
|
30
|
+
1. Mover para `completed-tasks.md` ao finalizar.
|
|
31
|
+
2. Se bloqueado >7 dias → registrar motivo + mover para `known-issues.md` se for problema real.
|
|
32
|
+
3. Não duplicar entre arquivos.
|
|
33
|
+
4. Revisar prioridades periodicamente — task de 6 meses na P0 não é P0.
|
|
34
|
+
|
|
35
|
+
## Entradas
|
|
36
|
+
|
|
37
|
+
<!-- adicionar abaixo -->
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
updated: 2026-05-14
|
|
4
|
+
tier: core
|
|
5
|
+
tokens: ~varies
|
|
6
|
+
load: always
|
|
7
|
+
mutable: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Project Context
|
|
11
|
+
|
|
12
|
+
> Contexto validado do projeto. NÃO escrever hipóteses aqui — apenas fatos confirmados.
|
|
13
|
+
|
|
14
|
+
## Identificação
|
|
15
|
+
|
|
16
|
+
- **Nome do projeto**: _(preencher)_
|
|
17
|
+
- **Stakeholder principal**: _(preencher)_
|
|
18
|
+
- **Objetivo de negócio**: _(preencher)_
|
|
19
|
+
- **Data de início**: _(preencher)_
|
|
20
|
+
|
|
21
|
+
## Stack Técnica (confirmada)
|
|
22
|
+
|
|
23
|
+
- **Linguagens**: _(preencher quando conhecido)_
|
|
24
|
+
- **Frameworks**: _(preencher)_
|
|
25
|
+
- **Banco de dados**: _(preencher)_
|
|
26
|
+
- **Infraestrutura**: _(preencher)_
|
|
27
|
+
- **CI/CD**: _(preencher)_
|
|
28
|
+
|
|
29
|
+
## Ambientes
|
|
30
|
+
|
|
31
|
+
| Ambiente | URL | Branch | Notas |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| dev | | | |
|
|
34
|
+
| staging | | | |
|
|
35
|
+
| prod | | | |
|
|
36
|
+
|
|
37
|
+
## Ferramentas disponíveis ao agente
|
|
38
|
+
|
|
39
|
+
- MCPs ativos: _(listar conforme descoberto via `tools/mcp-discovery.md`)_
|
|
40
|
+
- Acesso a: _(GitHub? GCP? AWS? Slack? ...)_
|
|
41
|
+
|
|
42
|
+
## Convenções específicas deste projeto
|
|
43
|
+
|
|
44
|
+
- _(adicionar conforme validado)_
|
|
45
|
+
|
|
46
|
+
## Restrições
|
|
47
|
+
|
|
48
|
+
- Janela de deploy: _(preencher)_
|
|
49
|
+
- Janelas de blackout: _(preencher)_
|
|
50
|
+
- Compliance / regulação: _(preencher — LGPD, PCI, HIPAA, etc.)_
|
|
51
|
+
|
|
52
|
+
## Pessoas
|
|
53
|
+
|
|
54
|
+
| Papel | Nome | Contato |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| Product Owner | | |
|
|
57
|
+
| Tech Lead | | |
|
|
58
|
+
| DevOps | | |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Regras de manutenção deste arquivo
|
|
63
|
+
|
|
64
|
+
1. Só registrar o que foi **confirmado** (lido em código, dito explicitamente pelo usuário, ou observado em execução).
|
|
65
|
+
2. Marcar com `?` qualquer item não 100% certo.
|
|
66
|
+
3. Remover seções inteiras se não se aplicam — não deixar placeholders eternos.
|
|
67
|
+
4. Em conflito com a realidade observada → atualizar este arquivo antes de prosseguir.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
updated: 2026-05-14
|
|
4
|
+
tier: conditional
|
|
5
|
+
tokens: ~400
|
|
6
|
+
load: architecture
|
|
7
|
+
triggers: arquitetura, architecture, design
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Operating System: Architecture
|
|
11
|
+
|
|
12
|
+
> Visão arquitetural do projeto. Deve ser lida no carregamento inicial pelo agente.
|
|
13
|
+
|
|
14
|
+
## Diagrama de Alto Nível
|
|
15
|
+
|
|
16
|
+
_(preencher conforme o projeto se materializa — manter atualizado)_
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
[ Client ] → [ API Gateway ] → [ Services ] → [ DB / Cache / Queue ]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Camadas
|
|
23
|
+
|
|
24
|
+
| Camada | Responsabilidade | Pode depender de |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Presentation | UI / HTTP handlers | Application |
|
|
27
|
+
| Application | Casos de uso, orquestração | Domain, Infrastructure (via interfaces) |
|
|
28
|
+
| Domain | Regras de negócio puras | (nada externo) |
|
|
29
|
+
| Infrastructure | DB, HTTP clients, filas, FS | (implementa interfaces de Application) |
|
|
30
|
+
|
|
31
|
+
**Regra de dependência**: setas só apontam para dentro (Clean / Hexagonal).
|
|
32
|
+
|
|
33
|
+
## Boundaries
|
|
34
|
+
|
|
35
|
+
- Cada bounded context tem seu próprio módulo / pacote.
|
|
36
|
+
- Comunicação entre contextos: eventos > chamada direta.
|
|
37
|
+
- Modelos de domínio NÃO são DTOs de API — usar mappers.
|
|
38
|
+
|
|
39
|
+
## Cross-cutting
|
|
40
|
+
|
|
41
|
+
- Logging, tracing, autenticação, autorização → middleware/decorators, não duplicado.
|
|
42
|
+
- Configuração: variáveis de ambiente carregadas em um único módulo de config tipado.
|
|
43
|
+
- Erros: hierarquia de classes (DomainError, ValidationError, NotFoundError, ...) mapeadas para HTTP no Presentation.
|
|
44
|
+
|
|
45
|
+
## Trade-offs Aceitos
|
|
46
|
+
|
|
47
|
+
_(listar conforme decisões registradas em `memory/decisions.md`)_
|
|
48
|
+
|
|
49
|
+
## Reversibilidade
|
|
50
|
+
|
|
51
|
+
- Decisões reversíveis: estilo, estrutura de pastas internas, libs utilitárias.
|
|
52
|
+
- Difíceis de reverter: banco escolhido, modelo de auth, formato de IDs, tenancy model.
|
|
53
|
+
|
|
54
|
+
→ Decisões difíceis exigem ADR e análise de alternativas registrada.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
updated: 2026-05-14
|
|
4
|
+
tier: conditional
|
|
5
|
+
tokens: ~600
|
|
6
|
+
load: coding, refactor
|
|
7
|
+
triggers: refactor, naming, convenção, style, lint, prettier, eslint
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Coding Standards
|
|
11
|
+
|
|
12
|
+
## Princípios Gerais
|
|
13
|
+
|
|
14
|
+
- **Legível > clever.** Código é lido 10x mais do que escrito.
|
|
15
|
+
- **Nomes explícitos.** `usersAwaitingApproval`, não `temp` ou `data2`.
|
|
16
|
+
- **Funções pequenas.** Se passa de ~50 linhas ou >3 níveis de indentação, quebrar.
|
|
17
|
+
- **Sem comentários óbvios.** Comentar o **por quê**, não o **o quê**.
|
|
18
|
+
|
|
19
|
+
## Naming
|
|
20
|
+
|
|
21
|
+
- Constantes: `SCREAMING_SNAKE_CASE`
|
|
22
|
+
- Funções/variáveis: `camelCase` (JS/TS) | `snake_case` (Python)
|
|
23
|
+
- Classes/Tipos: `PascalCase`
|
|
24
|
+
- Booleans: prefixo `is_`, `has_`, `should_`, `can_`
|
|
25
|
+
- Arquivos: convenção do ecossistema (kebab-case em web; snake_case em python; PascalCase em componentes React)
|
|
26
|
+
|
|
27
|
+
## Estrutura de arquivo
|
|
28
|
+
|
|
29
|
+
- Imports no topo, agrupados: stdlib → terceiros → projeto.
|
|
30
|
+
- Exports no fim ou inline.
|
|
31
|
+
- Uma responsabilidade clara por arquivo.
|
|
32
|
+
|
|
33
|
+
## Funções
|
|
34
|
+
|
|
35
|
+
- Argumentos: ≤ 4. Mais que isso → objeto/struct.
|
|
36
|
+
- Sem efeitos colaterais ocultos. Side effect intencional → nome do método indica.
|
|
37
|
+
- Retorno consistente — mesmo tipo em todos os caminhos.
|
|
38
|
+
|
|
39
|
+
## Tipos
|
|
40
|
+
|
|
41
|
+
- TS estrito (`strict: true`). `any` proibido sem comentário justificando.
|
|
42
|
+
- Python com type hints em todo código novo.
|
|
43
|
+
- Tipos em boundaries (entrada/saída de função pública) sempre.
|
|
44
|
+
|
|
45
|
+
## Erros
|
|
46
|
+
|
|
47
|
+
- Lançar erros tipados, com contexto suficiente.
|
|
48
|
+
- Não engolir erros (`catch (e) {}` proibido sem comentário).
|
|
49
|
+
- Erros esperados → retorno `Result<T, E>` ou equivalente; inesperados → throw.
|
|
50
|
+
|
|
51
|
+
## Imports
|
|
52
|
+
|
|
53
|
+
- Sem imports circulares.
|
|
54
|
+
- Sem wildcards (`import *`).
|
|
55
|
+
- Caminhos absolutos para módulos do projeto (`@/foo`) > relativos longos (`../../../foo`).
|
|
56
|
+
|
|
57
|
+
## Comentários
|
|
58
|
+
|
|
59
|
+
- Permitidos: motivo de hack, link para issue, invariante não-óbvio, edge case.
|
|
60
|
+
- Proibidos: explicar código óbvio, TODOs sem owner+data, comentário de versão antiga.
|
|
61
|
+
|
|
62
|
+
## Formatação
|
|
63
|
+
|
|
64
|
+
- Prettier / Black / Ruff / equivalente — configurado, rodando em pre-commit.
|
|
65
|
+
- Sem debate de espaços vs tabs no PR — config é fonte da verdade.
|
|
66
|
+
|
|
67
|
+
## Git
|
|
68
|
+
|
|
69
|
+
- Commits atômicos. Mensagem no imperativo: "Add X", não "Added X".
|
|
70
|
+
- Sem `WIP` em main. Sem `git commit -am "fix"` sem descrição.
|
|
71
|
+
- PR descrito: o que muda, por quê, como testar.
|
|
72
|
+
|
|
73
|
+
## Linguagem-específico
|
|
74
|
+
|
|
75
|
+
_(adicionar seções abaixo conforme stack do projeto)_
|
|
76
|
+
|
|
77
|
+
### TypeScript
|
|
78
|
+
- `strict: true`, `noUncheckedIndexedAccess: true`.
|
|
79
|
+
- Prefira `interface` para shape de objeto; `type` para union/intersection.
|
|
80
|
+
|
|
81
|
+
### Python
|
|
82
|
+
- PEP 8 via ruff/black.
|
|
83
|
+
- `from __future__ import annotations` em arquivos com typing.
|
|
84
|
+
- Evitar mutable default arguments.
|