@maestro-ai/cli 1.2.0 → 1.3.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/content/guides/fases-mapeamento.md +31 -32
- package/content/guides/guide-brainstorm.md +38 -0
- package/content/guides/guide-orquestracao.md +45 -0
- package/content/guides/guide-testes.md +51 -0
- package/content/guides/guide-troubleshooting.md +43 -0
- package/content/guides/guide-validacao.md +50 -0
- package/content/guides/internal/automated-events.md +27 -0
- package/content/guides/internal/automated-map.md +56 -0
- package/content/guides/internal/automated-stitch.md +51 -0
- package/content/guides/internal/automated-system.md +46 -0
- package/content/guides/mapa-sistema.md +86 -0
- package/content/guides/workflows-avancados.md +62 -0
- package/content/rules/GEMINI.md +70 -762
- package/content/rules/RULES.md +71 -761
- package/content/rules/complexity-rules.md +43 -0
- package/content/rules/quality-gates.md +55 -43
- package/content/rules/security-rules.md +40 -0
- package/content/rules/structure-rules.md +63 -0
- package/content/rules/validation-rules.md +56 -97
- package/content/workflows/{maestro.md → 00-maestro.md} +7 -6
- package/content/workflows/01-iniciar-projeto.md +59 -0
- package/content/workflows/02-avancar-fase.md +72 -0
- package/content/workflows/04-implementar-historia.md +64 -0
- package/content/workflows/05-nova-feature.md +39 -0
- package/content/workflows/06-corrigir-bug.md +34 -0
- package/content/workflows/07-refatorar-codigo.md +34 -0
- package/dist/commands/init.js +17 -16
- package/package.json +1 -1
- package/content/workflows/avancar-fase.md +0 -84
- package/content/workflows/brainstorm.md +0 -127
- package/content/workflows/corrigir-bug.md +0 -530
- package/content/workflows/create-app.md +0 -59
- package/content/workflows/iniciar-projeto.md +0 -59
- package/content/workflows/melhorar-feature.md +0 -63
- package/content/workflows/nova-feature.md +0 -438
- package/content/workflows/orchestrate.md +0 -237
- package/content/workflows/plan.md +0 -89
- package/content/workflows/refatorar-codigo.md +0 -623
- package/content/workflows/status-projeto.md +0 -54
- package/content/workflows/testar.md +0 -144
- package/content/workflows/ux-avancado.md +0 -296
- package/content/workflows/validar-gate.md +0 -413
- /package/content/workflows/{continuar-fase.md → 03-continuar-fase.md} +0 -0
- /package/content/workflows/{deploy.md → 08-deploy-projeto.md} +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Adicionar nova feature com fluxo estruturado (Análise → Implementação → Deploy)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 🆕 /nova-feature - Workflow de Nova Feature
|
|
6
|
+
|
|
7
|
+
## 1. Preparação (Análise de Impacto)
|
|
8
|
+
|
|
9
|
+
* **Estratégia:** Verifique a complexidade. Se envolver múltiplos domínios ou alto risco, consulte `guides/guide-orquestracao.md` para ativar o **Modo Squad**.
|
|
10
|
+
* **Ação:** Pergunte ao usuário a descrição da feature e o impacto estimado (baixo/médio/alto).
|
|
11
|
+
* **Ação:** Crie o diretório `docs/features/{FEATURE-ID}/`.
|
|
12
|
+
* **Ação:** Crie o arquivo `docs/features/{FEATURE-ID}/01-analise.md` com a análise inicial:
|
|
13
|
+
* Tabelas afetadas
|
|
14
|
+
* Novos Endpoints
|
|
15
|
+
* Componentes de UI necessários
|
|
16
|
+
|
|
17
|
+
## 2. Refinamento e Design
|
|
18
|
+
|
|
19
|
+
* **Instrução:** Use o workflow padrão `/02-avancar-fase` para mover a feature para Design.
|
|
20
|
+
* **Entregável Esperado:** Contrato de Interface (OpenAPI) e Mockups/Wireframes se necessário.
|
|
21
|
+
|
|
22
|
+
## 3. Implementação (O "Core")
|
|
23
|
+
|
|
24
|
+
> Aqui usamos o workflow especializado de granularidade fina.
|
|
25
|
+
|
|
26
|
+
* **Ação:** Quebre a feature em Histórias de Usuário (ex: `US-01: Criar API`, `US-02: Tela de Listagem`).
|
|
27
|
+
* **Para cada História:**
|
|
28
|
+
* Execute o workflow: **`/04-implementar-historia`**
|
|
29
|
+
* Siga ordenadamente: Types -> Mocks -> Frontend -> Backend -> Integração.
|
|
30
|
+
|
|
31
|
+
## 4. Testes e Validação
|
|
32
|
+
|
|
33
|
+
* **Verificação de Segurança:** Antes de finalizar, leia `rules/security-rules.md` e revise o código.
|
|
34
|
+
* **Testes:** Garanta que os testes criados na fase de implementação estão passando.
|
|
35
|
+
|
|
36
|
+
## 5. Deploy e Encerramento
|
|
37
|
+
|
|
38
|
+
* **Ação:** Atualize o `estado.json` (ou use `/02-avancar-fase`) para marcar a feature como CONCLUÍDA.
|
|
39
|
+
* **Resumo:** Atualize `.maestro/resumo.json` adicionando a feature ao histórico.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Workflow para correção de bugs com análise de causa raiz e segurança
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 🐛 /corrigir-bug - Workflow de Correção
|
|
6
|
+
|
|
7
|
+
## 1. Reprodução e Análise
|
|
8
|
+
|
|
9
|
+
* **Estratégia:** Se o bug for crítico, arquitetural ou envolver múltiplos serviços, consulte `guides/guide-orquestracao.md` para ativar o **Modo Squad**.
|
|
10
|
+
* **Ação:** Crie um caso de teste que reproduza o erro (se possível).
|
|
11
|
+
* **Ação:** Analise a causa raiz.
|
|
12
|
+
|
|
13
|
+
## 2. Classificação de Segurança
|
|
14
|
+
|
|
15
|
+
* **Ação:** O bug é uma vulnerabilidade de segurança?
|
|
16
|
+
* **Sim:** Leia imediatamente `rules/security-rules.md` para entender a categoria (ex: SQL Injection, XSS).
|
|
17
|
+
* **Não:** Prossiga normalmente.
|
|
18
|
+
|
|
19
|
+
## 3. Implementação da Correção
|
|
20
|
+
|
|
21
|
+
* **Ação:** Implemente o fix.
|
|
22
|
+
* **Regra:** Não altere comportamento não relacionado (escopo fechado).
|
|
23
|
+
|
|
24
|
+
## 4. Verificação
|
|
25
|
+
|
|
26
|
+
* **Ação:** Rode o teste de reprodução (deve passar).
|
|
27
|
+
* **Ação:** Rode testes de regressão (não deve quebrar nada existente).
|
|
28
|
+
* **Revisão (Self-Code-Review):**
|
|
29
|
+
* Verifique se não deixou `console.log` (Regra `SEC-LOG`).
|
|
30
|
+
* Verifique se não hardcodou credenciais (Regra `A02-SECRET`).
|
|
31
|
+
|
|
32
|
+
## 5. Finalização
|
|
33
|
+
|
|
34
|
+
* **Ação:** Atualize o histórico em `.maestro/resumo.json` registrando o bug fix.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Workflow para refatoração segura de código existente
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 🧹 /refatorar-codigo - Workflow de Refatoração
|
|
6
|
+
|
|
7
|
+
## 1. Análise Prévia
|
|
8
|
+
|
|
9
|
+
* **Estratégia:** Se a refatoração for estrutural ou de alto risco, consulte `guides/guide-orquestracao.md` para ativar o **Modo Squad**.
|
|
10
|
+
* **Ação:** Identifique a área a ser refatorada (arquivo, função, módulo).
|
|
11
|
+
* **Ação:** Entenda o "Motivo" (Legibilidade, Performance, Segurança, Estrutura).
|
|
12
|
+
* **Ação:** **Importante**: Garanta que existem testes cobrindo essa área. Se não houver, crie um "Teste de Caracterização" (Snapshot/Unitário) antes de tocar no código.
|
|
13
|
+
|
|
14
|
+
## 2. Consulta de Regras
|
|
15
|
+
|
|
16
|
+
* **Ação:** Se for refatoração de Segurança, leia `rules/security-rules.md`.
|
|
17
|
+
* **Ação:** Se for refatoração de Estrutura, consulte `.maestro/mapa.md` para entender dependências.
|
|
18
|
+
|
|
19
|
+
## 3. Execução (Ciclo Red-Green-Refactor)
|
|
20
|
+
|
|
21
|
+
* **Passo 1:** Rode os testes (Devem passar: 🟢).
|
|
22
|
+
* **Passo 2:** Aplique uma pequena mudança de refatoração.
|
|
23
|
+
* **Passo 3:** Rode os testes (Devem passar: 🟢).
|
|
24
|
+
* **Passo 4:** Repita.
|
|
25
|
+
|
|
26
|
+
## 4. Atualização de Mapa
|
|
27
|
+
|
|
28
|
+
* **Ação:** Se você alterou nomes de classes, arquivos ou assinaturas de API:
|
|
29
|
+
* Execute `guides/internal/automated-map.md`.
|
|
30
|
+
* **Ação:** Registre o evento de refatoração via `guides/internal/automated-events.md`.
|
|
31
|
+
|
|
32
|
+
## 5. Registro
|
|
33
|
+
|
|
34
|
+
* **Ação:** Registre a refatoração no `.maestro/resumo.json`.
|
package/dist/commands/init.js
CHANGED
|
@@ -43,7 +43,7 @@ export async function init(options) {
|
|
|
43
43
|
await fse.ensureDir(join(cwd, '.maestro'));
|
|
44
44
|
await fse.ensureDir(join(cwd, '.maestro', 'history'));
|
|
45
45
|
await fse.writeJSON(join(cwd, '.maestro', 'config.json'), {
|
|
46
|
-
version: '1.
|
|
46
|
+
version: '1.3.0',
|
|
47
47
|
initialized: new Date().toISOString(),
|
|
48
48
|
ide: options.ide || 'windsurf',
|
|
49
49
|
mcpFree: true
|
|
@@ -131,37 +131,38 @@ function generateDefaultRules() {
|
|
|
131
131
|
|
|
132
132
|
## Como Usar
|
|
133
133
|
|
|
134
|
-
1. **
|
|
135
|
-
2. **
|
|
136
|
-
3. **
|
|
137
|
-
4. **Continuar**: Use \`/continuar\` para retomar trabalho
|
|
134
|
+
1. **Ver status**: Use \`/00-maestro\` para ver progresso
|
|
135
|
+
2. **Iniciar projeto**: Use \`/01-iniciar-projeto\` para começar
|
|
136
|
+
3. **Avançar fases**: Use \`/02-avancar-fase\` para avançar
|
|
137
|
+
4. **Continuar**: Use \`/03-continuar-fase\` para retomar trabalho
|
|
138
138
|
|
|
139
139
|
## Estrutura Local
|
|
140
140
|
|
|
141
141
|
| Pasta | Conteúdo |
|
|
142
142
|
|-------|----------|
|
|
143
143
|
| \`.maestro/estado.json\` | Estado do projeto (fonte da verdade) |
|
|
144
|
-
| \`.maestro/content/\` | Especialistas, templates,
|
|
144
|
+
| \`.maestro/content/\` | Especialistas, templates, guides |
|
|
145
145
|
| \`.windsurf/workflows/\` | Workflows para Windsurf |
|
|
146
146
|
| \`.windsurf/skills/\` | Skills especializadas |
|
|
147
147
|
| \`.cursor/commands/\` | Commands para Cursor |
|
|
148
148
|
| \`.cursor/skills/\` | Skills especializadas |
|
|
149
|
-
| \`.agent/workflows/\` | Workflows
|
|
149
|
+
| \`.agent/workflows/\` | Workflows Principais (00-08) |
|
|
150
150
|
| \`.agent/skills/\` | Skills especializadas |
|
|
151
151
|
|
|
152
152
|
## Comandos Disponíveis
|
|
153
153
|
|
|
154
|
-
###
|
|
155
|
-
- \`/maestro\` -
|
|
156
|
-
- \`/iniciar-projeto\` -
|
|
157
|
-
- \`/avancar-fase\` -
|
|
158
|
-
- \`/
|
|
159
|
-
- \`/
|
|
154
|
+
### Gestão de Projeto
|
|
155
|
+
- \`/00-maestro\` - Router Inteligente (Status)
|
|
156
|
+
- \`/01-iniciar-projeto\` - Setup Inicial
|
|
157
|
+
- \`/02-avancar-fase\` - Transição de Fase (com automações)
|
|
158
|
+
- \`/03-continuar-fase\` - Retomada de Trabalho
|
|
159
|
+
- \`/08-deploy-projeto\` - Deploy e Encerramento
|
|
160
160
|
|
|
161
161
|
### Desenvolvimento
|
|
162
|
-
- \`/
|
|
163
|
-
- \`/
|
|
164
|
-
- \`/
|
|
162
|
+
- \`/04-implementar-historia\` - Frontend-First Dev
|
|
163
|
+
- \`/05-nova-feature\` - Grandes Funcionalidades
|
|
164
|
+
- \`/06-corrigir-bug\` - Fix com análise de causa
|
|
165
|
+
- \`/07-refatorar-codigo\` - Melhoria técnica segura
|
|
165
166
|
|
|
166
167
|
## Especialistas IA
|
|
167
168
|
|
package/package.json
CHANGED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Valida fase atual com quality gates e prepara a próxima fase
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# 🔄 Workflow de Avanço - /avancar-fase
|
|
6
|
-
|
|
7
|
-
## 1. Ler estado e fase atual
|
|
8
|
-
|
|
9
|
-
```javascript
|
|
10
|
-
const estado = lerJson('.maestro/estado.json');
|
|
11
|
-
const faseAtual = estado.fases[estado.faseAtual];
|
|
12
|
-
if (!faseAtual) throw new Error('Fase atual não existe');
|
|
13
|
-
|
|
14
|
-
function salvarEstado(state) {
|
|
15
|
-
escreverJson('.maestro/estado.json', state, { spaces: 2 });
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## 2. Checklist obrigatório
|
|
20
|
-
|
|
21
|
-
- `faseAtual.status` deve ser `concluida`.
|
|
22
|
-
- `faseAtual.score >= faseAtual.scoreMinimo`.
|
|
23
|
-
- Todos os itens de `faseAtual.validacoes` precisam estar `true`.
|
|
24
|
-
- Verificar bloqueios pendentes.
|
|
25
|
-
|
|
26
|
-
Se algum critério falhar, listar o motivo e encerrar sem avançar.
|
|
27
|
-
|
|
28
|
-
## 3. Validação cruzada
|
|
29
|
-
|
|
30
|
-
Use regras específicas da transição (ver `content/rules/quality-gates.md`). Exemplo:
|
|
31
|
-
|
|
32
|
-
```javascript
|
|
33
|
-
if (estado.faseAtual === 1) {
|
|
34
|
-
const prd = lerArquivo('docs/01-produto/PRD.md');
|
|
35
|
-
const requisitos = lerArquivo('docs/02-requisitos/requisitos.md');
|
|
36
|
-
const cobertura = validarCoberturaMVP(prd, requisitos);
|
|
37
|
-
if (cobertura.percentual < 100) throw new Error('MVP não está 100% coberto nos requisitos');
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## 4. Determinar próxima fase
|
|
42
|
-
|
|
43
|
-
```javascript
|
|
44
|
-
const PROGRESSAO = {
|
|
45
|
-
1: { numero: 2, nome: 'Requisitos', especialista: 'Engenharia de Requisitos', entregavel: 'docs/02-requisitos/requisitos.md' },
|
|
46
|
-
2: { numero: 3, nome: 'UX Design', especialista: 'UX Designer', entregavel: 'docs/03-ux/design-doc.md' },
|
|
47
|
-
// ... completar até o tier máximo
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const proxima = PROGRESSAO[estado.faseAtual];
|
|
51
|
-
if (!proxima) return 'Projeto já está na última fase';
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Depois de obter `proxima`, consulte `content/guides/fases-mapeamento.md` para descobrir:
|
|
55
|
-
|
|
56
|
-
- **Especialista** em `content/specialists/` que atuará na próxima fase
|
|
57
|
-
- **Prompt principal** em `content/prompts/`
|
|
58
|
-
- **Templates** que devem ser carregados/atualizados
|
|
59
|
-
- **Skills** sugeridas em `content/skills/`
|
|
60
|
-
|
|
61
|
-
Inclua essas referências na resposta final para orientar o usuário sobre o contexto que será carregado quando `/continuar-fase` for executado.
|
|
62
|
-
|
|
63
|
-
## 5. Atualizar estado
|
|
64
|
-
|
|
65
|
-
- Marcar `faseAtual.dataConclusao`.
|
|
66
|
-
- Incrementar `estado.faseAtual` para `proxima.numero`.
|
|
67
|
-
- Preparar entrada vazia para a próxima fase (`status: 'in_progress'`).
|
|
68
|
-
- Registrar evento no histórico (`fase_avancada`).
|
|
69
|
-
- Atualizar `estado.metrica.fasesConcluidas` e `estado.metrica.ultimoComando = '/avancar-fase'`.
|
|
70
|
-
- Chamar `salvarEstado(estado)` após todas as alterações.
|
|
71
|
-
|
|
72
|
-
## 6. Mensagem de saída
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
✅ **Fase {faseAtual.numero} - {faseAtual.nome} concluída!**
|
|
76
|
-
📊 Score: {faseAtual.score}/{faseAtual.scoreMinimo}
|
|
77
|
-
🔍 Validações: {lista de validações confirmadas}
|
|
78
|
-
|
|
79
|
-
🎯 **Próxima fase:** {proxima.nome}
|
|
80
|
-
👤 Especialista: {proxima.especialista}
|
|
81
|
-
📁 Arquivo inicial: {proxima.entregavel}
|
|
82
|
-
|
|
83
|
-
Execute `/continuar-fase` para começar imediatamente.
|
|
84
|
-
```
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Exploração estruturada de ideias, integrada ao estado do Maestro.
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /brainstorm - Exploração Estruturada de Ideias
|
|
6
|
-
|
|
7
|
-
$ARGUMENTS
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Pré-requisitos e conexão com o Maestro
|
|
12
|
-
|
|
13
|
-
1. Execute `/maestro` para validar o estado atual e detectar fase/artefatos focos.
|
|
14
|
-
2. Carregue `.maestro/estado.json` para contextualizar o brainstorming com o problema/fase em andamento:
|
|
15
|
-
```javascript
|
|
16
|
-
const estado = lerJson('.maestro/estado.json');
|
|
17
|
-
const faseAtual = estado.fases?.[estado.faseAtual];
|
|
18
|
-
```
|
|
19
|
-
3. Registre no histórico (`estado.historico`) o evento `brainstorm_executado`, indicando o tópico e os caminhos escolhidos. Chame `salvarEstado(estado)` após concluir.
|
|
20
|
-
4. Use `content/guides/fases-mapeamento.md` para puxar especialistas/prompts relacionados (ex.: fase 1 → Gestão de Produto, fase 3 → UX).
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Purpose
|
|
25
|
-
|
|
26
|
-
This command activates BRAINSTORM mode for structured idea exploration. Use when you need to explore options before committing to an implementation and quer salvar as conclusões no estado do Maestro.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Behavior
|
|
31
|
-
|
|
32
|
-
When `/brainstorm` is triggered:
|
|
33
|
-
|
|
34
|
-
1. **Understand the goal**
|
|
35
|
-
- What problem are we solving?
|
|
36
|
-
- Who is the user?
|
|
37
|
-
- What constraints exist?
|
|
38
|
-
- Relacione com `faseAtual.nome` e `faseAtual.especialista` para manter alinhamento.
|
|
39
|
-
|
|
40
|
-
2. **Generate options**
|
|
41
|
-
- Provide at least 3 different approaches
|
|
42
|
-
- Each with pros and cons
|
|
43
|
-
- Consider unconventional solutions
|
|
44
|
-
|
|
45
|
-
3. **Compare and recommend**
|
|
46
|
-
- Summarize tradeoffs
|
|
47
|
-
- Give a recommendation with reasoning
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Output Format (registrar em `docs/brainstorm/<slug>.md` e anexar ao estado)
|
|
52
|
-
|
|
53
|
-
```markdown
|
|
54
|
-
## 🧠 Brainstorm: [Topic]
|
|
55
|
-
|
|
56
|
-
### Context
|
|
57
|
-
[Brief problem statement]
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
### Option A: [Name]
|
|
62
|
-
[Description]
|
|
63
|
-
|
|
64
|
-
✅ **Pros:**
|
|
65
|
-
- [benefit 1]
|
|
66
|
-
- [benefit 2]
|
|
67
|
-
|
|
68
|
-
❌ **Cons:**
|
|
69
|
-
- [drawback 1]
|
|
70
|
-
|
|
71
|
-
📊 **Effort:** Low | Medium | High
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
### Option B: [Name]
|
|
76
|
-
[Description]
|
|
77
|
-
|
|
78
|
-
✅ **Pros:**
|
|
79
|
-
- [benefit 1]
|
|
80
|
-
|
|
81
|
-
❌ **Cons:**
|
|
82
|
-
- [drawback 1]
|
|
83
|
-
- [drawback 2]
|
|
84
|
-
|
|
85
|
-
📊 **Effort:** Low | Medium | High
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
### Option C: [Name]
|
|
90
|
-
[Description]
|
|
91
|
-
|
|
92
|
-
✅ **Pros:**
|
|
93
|
-
- [benefit 1]
|
|
94
|
-
|
|
95
|
-
❌ **Cons:**
|
|
96
|
-
- [drawback 1]
|
|
97
|
-
|
|
98
|
-
📊 **Effort:** Low | Medium | High
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## 💡 Recommendation
|
|
103
|
-
|
|
104
|
-
**Option [X]** because [reasoning].
|
|
105
|
-
|
|
106
|
-
What direction would you like to explore?
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Examples
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
/brainstorm authentication system (fase 2 – requisitos)
|
|
115
|
-
/brainstorm redesign para dashboard (fase 3 – UX)
|
|
116
|
-
/brainstorm integrações com ERP (fase 6 – Integração)
|
|
117
|
-
/brainstorm caching strategy para escala
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Key Principles
|
|
123
|
-
|
|
124
|
-
- **No code** - this is about ideas, not implementation
|
|
125
|
-
- **Visual when helpful** - use diagrams for architecture
|
|
126
|
-
- **Honest tradeoffs** - don't hide complexity
|
|
127
|
-
- **Defer to user** - present options, let them decide
|