@tavaressan/vetor 0.1.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/README.md +42 -0
- package/bin/vetor.js +6 -0
- package/lib/banner.js +35 -0
- package/lib/commands/install.js +71 -0
- package/lib/commands/status.js +59 -0
- package/lib/commands/uninstall.js +119 -0
- package/lib/commands/update.js +63 -0
- package/lib/installer/command-exists.js +30 -0
- package/lib/installer/cursor-hooks.js +181 -0
- package/lib/installer/detector.js +79 -0
- package/lib/installer/manifest.js +76 -0
- package/lib/installer/prompts.js +97 -0
- package/lib/installer/writer.js +382 -0
- package/lib/router.js +50 -0
- package/package.json +39 -0
- package/templates/.gitkeep +0 -0
- package/templates/agents/code-review/agent.json +27 -0
- package/templates/agents/code-review/codex.toml +37 -0
- package/templates/agents/code-review.md +99 -0
- package/templates/agents/issue-worker/agent.json +33 -0
- package/templates/agents/issue-worker/codex.toml +57 -0
- package/templates/agents/issue-worker.md +112 -0
- package/templates/hooks/hooks-codex.json +48 -0
- package/templates/hooks/hooks.json +62 -0
- package/templates/opencode/agent/code-review.md +73 -0
- package/templates/opencode/agent/issue-coordinator.md +521 -0
- package/templates/opencode/agent/issue-worker.md +64 -0
- package/templates/opencode/mcp.jsonc +39 -0
- package/templates/opencode/plugin/vetor.ts +207 -0
- package/templates/opencode/scripts/agent-registration_test.ts +92 -0
- package/templates/opencode/scripts/check-edit.ts +147 -0
- package/templates/opencode/scripts/ensure-external-directory-permission.ts +110 -0
- package/templates/opencode/scripts/ensure-external-directory-permission_test.ts +142 -0
- package/templates/opencode/scripts/lib/guard.ts +45 -0
- package/templates/opencode/scripts/lib/model-health.ts +133 -0
- package/templates/opencode/scripts/lib/model-health_test.ts +181 -0
- package/templates/opencode/scripts/lib/project.ts +240 -0
- package/templates/opencode/scripts/lib/project_test.ts +45 -0
- package/templates/opencode/scripts/lib/status.ts +69 -0
- package/templates/opencode/scripts/lib/worktree.ts +41 -0
- package/templates/opencode/scripts/model-health.ts +50 -0
- package/templates/opencode/scripts/model-health_test.ts +80 -0
- package/templates/opencode/scripts/resolve-model.ts +112 -0
- package/templates/opencode/scripts/resolve-model_test.ts +185 -0
- package/templates/opencode/scripts/safety-check.ts +203 -0
- package/templates/opencode/scripts/vetor-checks.sh +217 -0
- package/templates/opencode/scripts/vetor-status.sh +99 -0
- package/templates/skills/architecture-review/SKILL.md +187 -0
- package/templates/skills/backlog-ideator/SKILL.md +277 -0
- package/templates/skills/design/SKILL.md +468 -0
- package/templates/skills/design/examples/design-contract-example.md +46 -0
- package/templates/skills/design/examples/prototype-handoff-example.md +142 -0
- package/templates/skills/fix-loop-agent/SKILL.md +255 -0
- package/templates/skills/guardian/SKILL.md +343 -0
- package/templates/skills/issue-coordinator/SKILL.md +596 -0
- package/templates/skills/retro/SKILL.md +156 -0
- package/templates/skills/shared/references/agent-status.template.md +68 -0
- package/templates/skills/shared/references/codebase-design-vocabulary.md +54 -0
- package/templates/skills/shared/references/conflict-resolution.md +94 -0
- package/templates/skills/shared/references/delegate-to-runtime.md +239 -0
- package/templates/skills/shared/references/design-vocabulary.md +508 -0
- package/templates/skills/shared/references/evidence-state.md +365 -0
- package/templates/skills/shared/references/frontend-design-enforcement.md +33 -0
- package/templates/skills/shared/references/grilling-conventions.md +64 -0
- package/templates/skills/shared/references/knowledge-provider-contract.md +150 -0
- package/templates/skills/shared/references/mcp-availability.md +104 -0
- package/templates/skills/shared/references/module-test-map.template.md +72 -0
- package/templates/skills/shared/references/planning-conventions.md +97 -0
- package/templates/skills/shared/references/project-conventions.md +63 -0
- package/templates/skills/shared/references/tdd-conventions.md +81 -0
- package/templates/skills/shared/references/touched-files-cache.md +30 -0
- package/templates/skills/spec/SKILL.md +524 -0
- package/templates/skills/spec-validate/SKILL.md +195 -0
- package/templates/skills/spec-validate/references/traceability.md +169 -0
- package/templates/skills/stack-practices/SKILL.md +151 -0
- package/templates/skills/vetor/SKILL.md +174 -0
- package/templates/skills/worktree-create/SKILL.md +142 -0
- package/templates/skills/worktree-ship/SKILL.md +394 -0
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
# Vocabulário de Design (Vetor)
|
|
2
|
+
|
|
3
|
+
Define os termos que o workflow de design do Vetor usa para tratar design como **input de
|
|
4
|
+
engenharia, não decoração** (#213). Três conceitos — Design System, Design Direction e Design
|
|
5
|
+
Signature — alimentam um artefato intermediário, o **Design Contract**, que é o que de fato chega
|
|
6
|
+
à implementação.
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
Specification
|
|
10
|
+
+
|
|
11
|
+
Design System
|
|
12
|
+
+
|
|
13
|
+
Design Direction
|
|
14
|
+
+
|
|
15
|
+
Prototype
|
|
16
|
+
↓
|
|
17
|
+
Design Contract
|
|
18
|
+
↓
|
|
19
|
+
Frontend Implementation
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Consumido por `frontend-design-enforcement.md` e pela skill `frontend-design` (verificação de
|
|
23
|
+
UI/design de frontend) e pelo `fix-loop-agent` quando a descrição do fix envolve UI.
|
|
24
|
+
|
|
25
|
+
As Decisões do Design Contract (§4.4) usam o modelo de estados epistêmicos definido em
|
|
26
|
+
`$CLAUDE_PLUGIN_ROOT/skills/shared/references/evidence-state.md` (#214) — este documento **consome**
|
|
27
|
+
esse modelo, não o redefine.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 1. Design System
|
|
32
|
+
|
|
33
|
+
Elementos reutilizáveis e regras visuais **disponíveis** para o produto — o vocabulário visual
|
|
34
|
+
compartilhado por todas as telas.
|
|
35
|
+
|
|
36
|
+
Escopo típico:
|
|
37
|
+
|
|
38
|
+
* design tokens;
|
|
39
|
+
* cores;
|
|
40
|
+
* tipografia;
|
|
41
|
+
* espaçamento;
|
|
42
|
+
* radius;
|
|
43
|
+
* elevation;
|
|
44
|
+
* motion;
|
|
45
|
+
* componentes;
|
|
46
|
+
* padrões de interação.
|
|
47
|
+
|
|
48
|
+
O Design System define **como o produto pode ser construído visualmente**, mas não decide sozinho
|
|
49
|
+
a composição de nenhuma tela específica — isso é papel da Design Direction.
|
|
50
|
+
|
|
51
|
+
**Exemplo:**
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
## Design System — Acme Dashboard
|
|
55
|
+
|
|
56
|
+
### Tokens
|
|
57
|
+
- `--color-primary`: #22409A
|
|
58
|
+
- `--color-danger`: #B3261E
|
|
59
|
+
- `--radius-sm`: 4px / `--radius-md`: 8px
|
|
60
|
+
- `--space-1`..`--space-8`: escala de 4px
|
|
61
|
+
|
|
62
|
+
### Tipografia
|
|
63
|
+
- Family: Inter
|
|
64
|
+
- Scale: 12/14/16/20/24/32 (px), line-height 1.4
|
|
65
|
+
|
|
66
|
+
### Componentes disponíveis
|
|
67
|
+
Button (primary/secondary/ghost/danger), Card, Modal, Toast, DataTable, Badge
|
|
68
|
+
|
|
69
|
+
### Padrões de interação
|
|
70
|
+
- Ações destrutivas sempre pedem confirmação via Modal.
|
|
71
|
+
- Formulários validam on-blur, nunca on-keystroke.
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Quando o produto já tem um Design System (ex.: Storybook, `tailwind.config.*`, `tokens.*`), o Vetor
|
|
75
|
+
deve referenciá-lo em vez de duplicá-lo — a representação em `.vetor/design/system/` é
|
|
76
|
+
documentação/handoff, nunca uma segunda fonte concorrente de tokens.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 2. Design Direction
|
|
81
|
+
|
|
82
|
+
Identidade visual **específica de uma experiência** — o que evita que a interface convirja para o
|
|
83
|
+
"padrão genérico de app gerado por IA" só porque o Design System tecnicamente permite.
|
|
84
|
+
|
|
85
|
+
Escopo típico:
|
|
86
|
+
|
|
87
|
+
* personalidade visual;
|
|
88
|
+
* densidade;
|
|
89
|
+
* hierarquia;
|
|
90
|
+
* composição;
|
|
91
|
+
* alinhamento;
|
|
92
|
+
* tratamento tipográfico;
|
|
93
|
+
* uso de cor;
|
|
94
|
+
* linguagem visual;
|
|
95
|
+
* elementos característicos;
|
|
96
|
+
* elementos a evitar.
|
|
97
|
+
|
|
98
|
+
Regra geral: **DEFAULT ≠ FORBIDDEN**. Um padrão comum continua permitido quando há justificativa
|
|
99
|
+
funcional ou estética derivada do produto — a Design Direction não deve virar uma lista de
|
|
100
|
+
proibições universais.
|
|
101
|
+
|
|
102
|
+
**Exemplo:**
|
|
103
|
+
|
|
104
|
+
```markdown
|
|
105
|
+
## Design Direction — Acme Dashboard
|
|
106
|
+
|
|
107
|
+
### Personalidade visual
|
|
108
|
+
Técnica, direta, sem elementos decorativos. Prioriza densidade de informação sobre "respiro" visual.
|
|
109
|
+
|
|
110
|
+
### Densidade
|
|
111
|
+
Alta — tabelas e listas compactas, sem cards grandes para dados tabulares.
|
|
112
|
+
|
|
113
|
+
### Hierarquia
|
|
114
|
+
Ação primária de cada tela é sempre um botão sólido no topo direito; ações secundárias são links
|
|
115
|
+
ou botões ghost.
|
|
116
|
+
|
|
117
|
+
### Tratamento tipográfico
|
|
118
|
+
Títulos de seção em caixa alta, tracking +2%, peso 600.
|
|
119
|
+
|
|
120
|
+
### Evitar
|
|
121
|
+
- Gradientes decorativos sem função.
|
|
122
|
+
- Ilustrações genéricas de estoque.
|
|
123
|
+
- Cards com sombra pesada para conteúdo tabular.
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 3. Design Signature
|
|
129
|
+
|
|
130
|
+
Elemento ou princípio visual **distintivo, derivado do domínio do produto** — quando apropriado.
|
|
131
|
+
**Nunca obrigatório.**
|
|
132
|
+
|
|
133
|
+
O objetivo não é forçar uma decoração chamativa em cada tela. É evitar que a identidade da
|
|
134
|
+
interface fique reduzida a:
|
|
135
|
+
|
|
136
|
+
```text
|
|
137
|
+
layout genérico + nova paleta + novo logo
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Exemplo:**
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
Signature:
|
|
144
|
+
Visualização do fluxo de desenvolvimento (backlog → worktree → execução →
|
|
145
|
+
shipping) como elemento estrutural da interface, não como decoração isolada.
|
|
146
|
+
|
|
147
|
+
Reason:
|
|
148
|
+
O produto organiza trabalho através desse fluxo; torná-lo visível reforça o
|
|
149
|
+
modelo mental do usuário em vez de escondê-lo atrás de menus genéricos.
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Se o domínio não sugerir nada distintivo, **não invente uma signature artificial** — um Design
|
|
153
|
+
System bem aplicado com uma Design Direction consistente já é suficiente (YAGNI).
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 4. Design Contract
|
|
158
|
+
|
|
159
|
+
Artefato intermediário entre design e implementação. Consolida:
|
|
160
|
+
|
|
161
|
+
```text
|
|
162
|
+
Specification + Design System + Design Direction + Prototype + Evidence + Constraints
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
e entrega ao agente as decisões necessárias para implementar a interface — **não o protótipo em
|
|
166
|
+
si**.
|
|
167
|
+
|
|
168
|
+
### 4.1 Design Contract ≠ cópia do protótipo
|
|
169
|
+
|
|
170
|
+
O Design Contract nunca deve ser uma transcrição visual do protótipo (posição de pixel, screenshot
|
|
171
|
+
anotada, cópia de camadas de uma ferramenta de design). Ele registra **as decisões que precisam
|
|
172
|
+
sobreviver à transferência do design para código**: intenção, hierarquia, tokens usados, estados
|
|
173
|
+
previstos, restrições técnicas reais. Copiar pixels otimiza para semelhança visual superficial;
|
|
174
|
+
o Design Contract otimiza para preservar `prototype intent + real application data + real
|
|
175
|
+
application states + real technical constraints` (#213).
|
|
176
|
+
|
|
177
|
+
Um Design Contract correto deve permitir implementar a tela corretamente mesmo que o protótipo
|
|
178
|
+
original se torne indisponível.
|
|
179
|
+
|
|
180
|
+
### 4.2 Campos do formato
|
|
181
|
+
|
|
182
|
+
Todo campo é usado **conforme aplicável** — nem toda tela precisa preencher todos os campos, mas
|
|
183
|
+
o campo deve existir na estrutura para ser considerado.
|
|
184
|
+
|
|
185
|
+
| Campo | Descreve |
|
|
186
|
+
|-------|----------|
|
|
187
|
+
| Objetivo da experiência | Que problema esta tela/fluxo resolve para o usuário |
|
|
188
|
+
| Telas | Quais telas/estados de navegação fazem parte do escopo |
|
|
189
|
+
| Hierarquia | O que é primário, secundário, terciário em cada tela |
|
|
190
|
+
| Layout | Estrutura de composição (grid, colunas, regiões) |
|
|
191
|
+
| Componentes | Quais componentes do Design System são usados, e onde |
|
|
192
|
+
| Tokens | Quais tokens (cor, espaçamento, tipografia, radius, elevation, motion) se aplicam |
|
|
193
|
+
| Conteúdo | Textos, labels, mensagens — reais, não lorem ipsum |
|
|
194
|
+
| Interações | O que acontece a cada ação do usuário (clique, hover, submit, etc.) |
|
|
195
|
+
| Estados | loading / empty / populated / error / partial failure / permission denied / offline / disabled / success — ver §4.3 |
|
|
196
|
+
| Responsividade | Comportamento em diferentes viewports/breakpoints |
|
|
197
|
+
| Acessibilidade | Foco, contraste, navegação por teclado, semântica |
|
|
198
|
+
| Restrições | Limitações técnicas reais que o protótipo pode não refletir |
|
|
199
|
+
| Referências | Links/paths para Specification, protótipo, Design System, Design Direction |
|
|
200
|
+
| Decisões | Decisões de design já tomadas, com origem (ver Evidence State) |
|
|
201
|
+
| Questões abertas | O que ainda não foi decidido e precisa de escalação humana |
|
|
202
|
+
|
|
203
|
+
### 4.3 Estados de interface
|
|
204
|
+
|
|
205
|
+
Além do "happy path" mostrado no protótipo, o contrato deve especificar os estados relevantes:
|
|
206
|
+
|
|
207
|
+
```text
|
|
208
|
+
loading, empty, populated, error, partial failure, permission denied, offline, disabled, success
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Exemplo:**
|
|
212
|
+
|
|
213
|
+
```markdown
|
|
214
|
+
## State: Empty
|
|
215
|
+
|
|
216
|
+
Trigger:
|
|
217
|
+
Nenhum worktree ativo.
|
|
218
|
+
|
|
219
|
+
Expected behavior:
|
|
220
|
+
Explicar que não há worktree ativo no momento.
|
|
221
|
+
|
|
222
|
+
Primary action:
|
|
223
|
+
Criar worktree.
|
|
224
|
+
|
|
225
|
+
Visual treatment:
|
|
226
|
+
Ilustração mínima + texto + botão primário, centralizado na área de conteúdo.
|
|
227
|
+
|
|
228
|
+
Evidence:
|
|
229
|
+
Prototype + Specification
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### 4.4 Evidence State nas decisões
|
|
233
|
+
|
|
234
|
+
O campo "Decisões" usa os 4 estados de `evidence-state.md` (#214) — `CONFIRMED`, `INFERRED`,
|
|
235
|
+
`ASSUMED`, `OPEN_QUESTION`. Esta seção não redefine os estados nem o formato de Evidence Record
|
|
236
|
+
(§2 de `evidence-state.md`) — aplica o modelo já existente às decisões de design, preservando a
|
|
237
|
+
mesma assimetria de campos por estado: `CONFIRMED`/`INFERRED` citam `Source`; `ASSUMED` cita
|
|
238
|
+
`Reason` (sem `Source` — não há fonte a apontar para uma premissa); `OPEN_QUESTION` cita `Impact`
|
|
239
|
+
(sem `Source` nem confidence).
|
|
240
|
+
|
|
241
|
+
`evidence-state.md` §3 não lista "Prototype" nem "Design System" entre os tipos formais de
|
|
242
|
+
Evidence Source (`code`, `documentation`, `spec`, `adr`, `configuration`, `user`, `external`,
|
|
243
|
+
`tool`, `test`). No vocabulário de design, `Source: Prototype`/`Source: Design System` é o rótulo
|
|
244
|
+
legível usado nos exemplos abaixo; ao persistir como Evidence Record yaml, o `type` formal segue o
|
|
245
|
+
mapeamento: Prototype → `external`, Design System → `documentation`/`configuration`,
|
|
246
|
+
Specification → `spec`.
|
|
247
|
+
|
|
248
|
+
```text
|
|
249
|
+
CONFIRMED
|
|
250
|
+
Ação primária é "Criar worktree".
|
|
251
|
+
Source: Prototype
|
|
252
|
+
|
|
253
|
+
INFERRED
|
|
254
|
+
A sidebar representa navegação persistente do projeto.
|
|
255
|
+
Source: Prototype + Specification
|
|
256
|
+
|
|
257
|
+
ASSUMED
|
|
258
|
+
Navegação desktop permanece expandida acima de 1024px.
|
|
259
|
+
Reason: Nenhuma tela do protótipo cobre breakpoints intermediários; premissa necessária para
|
|
260
|
+
avançar a especificação.
|
|
261
|
+
|
|
262
|
+
OPEN_QUESTION
|
|
263
|
+
Filtros devem persistir entre sessões?
|
|
264
|
+
Impact: Afeta se o estado do filtro precisa ser persistido em storage do cliente ou servidor.
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
`OPEN_QUESTION` vai para o campo "Questões abertas" do contrato, não para "Decisões" (ver exemplo
|
|
268
|
+
completo em `skills/design/examples/design-contract-example.md`).
|
|
269
|
+
|
|
270
|
+
**Proibição de auto-promoção** (regra fundamental de `evidence-state.md` §5, aplicada aqui sem
|
|
271
|
+
redefinição): o Vetor nunca promove automaticamente
|
|
272
|
+
|
|
273
|
+
```text
|
|
274
|
+
INFERRED → CONFIRMED
|
|
275
|
+
ASSUMED → CONFIRMED
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
sem nova evidência qualificada (§3). Ex.: a sidebar permanecer `INFERRED` como navegação
|
|
279
|
+
persistente não vira `CONFIRMED` só porque a implementação seguiu essa leitura — apenas evidência
|
|
280
|
+
adicional (Specification explícita, decisão do usuário, ADR) promove o estado.
|
|
281
|
+
|
|
282
|
+
### 4.5 Esqueleto do documento
|
|
283
|
+
|
|
284
|
+
```markdown
|
|
285
|
+
# Design Contract — <tela ou fluxo>
|
|
286
|
+
|
|
287
|
+
## Objetivo da experiência
|
|
288
|
+
...
|
|
289
|
+
|
|
290
|
+
## Telas
|
|
291
|
+
...
|
|
292
|
+
|
|
293
|
+
## Hierarquia
|
|
294
|
+
...
|
|
295
|
+
|
|
296
|
+
## Layout
|
|
297
|
+
...
|
|
298
|
+
|
|
299
|
+
## Componentes
|
|
300
|
+
...
|
|
301
|
+
|
|
302
|
+
## Tokens
|
|
303
|
+
...
|
|
304
|
+
|
|
305
|
+
## Conteúdo
|
|
306
|
+
...
|
|
307
|
+
|
|
308
|
+
## Interações
|
|
309
|
+
...
|
|
310
|
+
|
|
311
|
+
## Estados
|
|
312
|
+
### State: <nome>
|
|
313
|
+
Trigger / Expected behavior / Primary action / Visual treatment / Evidence
|
|
314
|
+
|
|
315
|
+
## Responsividade
|
|
316
|
+
...
|
|
317
|
+
|
|
318
|
+
## Acessibilidade
|
|
319
|
+
...
|
|
320
|
+
|
|
321
|
+
## Restrições
|
|
322
|
+
...
|
|
323
|
+
|
|
324
|
+
## Referências
|
|
325
|
+
...
|
|
326
|
+
|
|
327
|
+
## Decisões
|
|
328
|
+
<Evidence State por decisão — ver §4.4>
|
|
329
|
+
|
|
330
|
+
## Questões abertas
|
|
331
|
+
...
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## 5. Relação entre os conceitos
|
|
337
|
+
|
|
338
|
+
```text
|
|
339
|
+
Design System → o que está disponível (tokens, componentes, regras)
|
|
340
|
+
Design Direction → como a identidade específica deste produto usa o que está disponível
|
|
341
|
+
Design Signature → (opcional) o que torna esta experiência distintiva no domínio
|
|
342
|
+
Design Contract → a síntese de tudo isso + Specification + Prototype + Constraints,
|
|
343
|
+
em decisões que sobrevivem à implementação
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## 6. Artefatos (#231)
|
|
349
|
+
|
|
350
|
+
Árvore de artefatos do workflow de design, gravada em `.vetor/design/`:
|
|
351
|
+
|
|
352
|
+
```text
|
|
353
|
+
.vetor/
|
|
354
|
+
└── design/
|
|
355
|
+
├── system/
|
|
356
|
+
│ ├── tokens.md
|
|
357
|
+
│ ├── components.md
|
|
358
|
+
│ ├── patterns.md
|
|
359
|
+
│ └── evidence.md
|
|
360
|
+
│
|
|
361
|
+
├── direction/
|
|
362
|
+
│ └── product.md
|
|
363
|
+
│
|
|
364
|
+
├── prototype/
|
|
365
|
+
│ └── <artefato visual observado pelo agente — ex.: export estático, imagens>
|
|
366
|
+
│
|
|
367
|
+
└── handoff/
|
|
368
|
+
└── <slug-do-título>.md
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
- `system/` e `direction/` — gravados pelo Setup (`writeDesignFiles`, `scripts/lib/design-mode.ts`),
|
|
372
|
+
§1-3 de `skills/design/SKILL.md`.
|
|
373
|
+
- `prototype/` — origem do protótipo observado pelo agente (§4.1); sua presença é o próprio sinal
|
|
374
|
+
de modo Prototype-first (`hasPrototype`, `scripts/lib/design-mode.ts`).
|
|
375
|
+
- `handoff/` — Design Contract gerado a partir do protótipo (`renderPrototypeHandoffFile`,
|
|
376
|
+
`scripts/lib/design-handoff.ts`), §4.5.
|
|
377
|
+
|
|
378
|
+
Nota de nomenclatura: #213 ("Artefatos") ilustrou o diretório de origem do protótipo como
|
|
379
|
+
`prototypes/` (plural); a implementação de #229 já havia fixado `prototype/` (singular) como
|
|
380
|
+
constante (`PROTOTYPE_DIR`) e é o nome em uso em todo o código e nos exemplos desta skill desde
|
|
381
|
+
então. Esta issue documenta a árvore com o nome já estabelecido em vez de renomear um diretório já
|
|
382
|
+
em uso — #213 registrava a estrutura como "inicial, ajustável conforme necessidade do workflow
|
|
383
|
+
existente", não uma nomenclatura definitiva.
|
|
384
|
+
|
|
385
|
+
Cada arquivo de `system/`/`direction/`/`handoff/` é criado **uma única vez** (nunca sobrescrito por
|
|
386
|
+
uma execução seguinte) — ver `writeDesignFiles`/Handoff passo 4 em `skills/design/SKILL.md`.
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## 7. Conflito Specification × Design Contract (#231)
|
|
391
|
+
|
|
392
|
+
A relação entre os dois artefatos nunca é de substituição:
|
|
393
|
+
|
|
394
|
+
```text
|
|
395
|
+
Specification → o que o produto deve fazer
|
|
396
|
+
Design Contract → como essa experiência deve se expressar
|
|
397
|
+
Implementation → o sistema real
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
Quando os dois divergem sobre a mesma decisão (`Specification ≠ Design Contract`), o agente **nunca
|
|
401
|
+
resolve essa divergência sozinho** — é uma decisão de produto, não um erro objetivo passível de
|
|
402
|
+
autocorreção (mesma classificação de `skills/design/SKILL.md`, Loop passo 8: "conflito
|
|
403
|
+
Specification × Prototype" já era escalado; este é o caso análogo entre Specification e o Design
|
|
404
|
+
Contract já consolidado).
|
|
405
|
+
|
|
406
|
+
`scripts/lib/spec-design-conflict.ts` formaliza a detecção: `detectFieldConflict(field,
|
|
407
|
+
designContractClaim, specificationClaim)` (e sua especialização `detectPrimaryActionConflict` para
|
|
408
|
+
o caso mais comum, ação primária) compara os dois valores já extraídos pelo agente — a extração em
|
|
409
|
+
si (ler o Design Contract e a Specification e identificar o valor relevante de cada um) é trabalho
|
|
410
|
+
do agente, este módulo só compara e relata.
|
|
411
|
+
|
|
412
|
+
Três resultados possíveis, dois deles com um discriminante estrutural `kind` (#259, #269 — nunca só
|
|
413
|
+
uma diferença de texto em `message`):
|
|
414
|
+
|
|
415
|
+
- **`null`**: os dois valores são equivalentes (ignorando espaço/pontuação final/caixa) e **nenhum**
|
|
416
|
+
dos dois está vazio — sem conflito, sem nada a relatar.
|
|
417
|
+
- **`{ kind: "missingValue", ... }`**: um ou ambos os valores estão vazios/só-espaço após
|
|
418
|
+
normalização. Nunca retorna `null` nesse caso (mesmo quando os dois lados estão igualmente
|
|
419
|
+
vazios) — um `null` aqui seria um falso all-clear, já que o valor pode estar vazio porque a
|
|
420
|
+
extração falhou, não porque as duas fontes concordam.
|
|
421
|
+
- **`{ kind: "conflict", ... }`**: os dois valores têm conteúdo concreto e divergem.
|
|
422
|
+
|
|
423
|
+
Em ambos os casos não-`null`, o relato traz os dois valores e suas origens (`source`) — **nunca** um
|
|
424
|
+
veredito de qual lado está correto (sem campo `resolved`/`winner`).
|
|
425
|
+
|
|
426
|
+
**Exemplo do critério de aceite de #231:** Design Contract especifica ação primária "Criar
|
|
427
|
+
worktree" (Hierarquia) e a Specification implica ação primária "Exportar relatório" (RF-03) → o
|
|
428
|
+
agente reporta o conflito (`kind: "conflict"`) com as duas origens, nunca escolhe um dos dois.
|
|
429
|
+
|
|
430
|
+
Ao detectar um conflito, escale via `BLOCKED_WAITING` (`agent-status.template.md`), qualificando o
|
|
431
|
+
motivo com o vocabulário já existente de Evidence State (`agent-status.template.md`, ver
|
|
432
|
+
`evidence-state.md`): `Blocked on: Evidence Conflict — <valor do Design Contract> vs. <valor da
|
|
433
|
+
Specification>`. Os blocos `Options`/`Recommendation` apresentam os dois valores e suas fontes —
|
|
434
|
+
a decisão de qual prevalece é do usuário.
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 8. Extensões futuras: Design Drift, Visual Debt, Guardian (#231)
|
|
439
|
+
|
|
440
|
+
As três seções abaixo são **pontos de extensão documentados, não implementados** nesta issue —
|
|
441
|
+
preparação conceitual para trabalho futuro, sem mecanismo de detecção/tracking automático.
|
|
442
|
+
|
|
443
|
+
### 8.1 Design Drift
|
|
444
|
+
|
|
445
|
+
Ocorre quando a implementação **deixa de representar** uma decisão de design já `CONFIRMED` no
|
|
446
|
+
Design Contract — diferente do conflito do §7 (que é entre Specification e Design Contract, antes
|
|
447
|
+
da implementação), Design Drift é entre o Design Contract e o estado atual do código.
|
|
448
|
+
|
|
449
|
+
```text
|
|
450
|
+
Design Contract
|
|
451
|
+
↓
|
|
452
|
+
Primary action = "Create Worktree"
|
|
453
|
+
↓
|
|
454
|
+
Implementation
|
|
455
|
+
↓
|
|
456
|
+
Primary action não é mais visualmente dominante
|
|
457
|
+
↓
|
|
458
|
+
DESIGN DRIFT
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Quando implementado, o sistema deve sinalizar o desvio e apresentar as evidências (decisão original
|
|
462
|
+
do Design Contract × estado observado na implementação) — nunca alterar o produto arbitrariamente
|
|
463
|
+
para "corrigir" o drift; a resolução é sempre uma decisão humana, mesmo espírito do §7.
|
|
464
|
+
|
|
465
|
+
### 8.2 Visual Debt
|
|
466
|
+
|
|
467
|
+
Registro de problemas visuais conhecidos que **não bloqueiam** a implementação (diferente de um
|
|
468
|
+
achado do Loop, que é corrigido ou escalado antes de `Done` — ver `skills/design/SKILL.md`, Loop
|
|
469
|
+
passo 8/10). Formato proposto:
|
|
470
|
+
|
|
471
|
+
```text
|
|
472
|
+
VD-001
|
|
473
|
+
|
|
474
|
+
Issue:
|
|
475
|
+
Generic card pattern used for unrelated entities.
|
|
476
|
+
|
|
477
|
+
Reason:
|
|
478
|
+
Temporary implementation shortcut.
|
|
479
|
+
|
|
480
|
+
Impact:
|
|
481
|
+
Medium.
|
|
482
|
+
|
|
483
|
+
Status:
|
|
484
|
+
Open.
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
- `Issue` — o problema visual observado, objetivamente descrito.
|
|
488
|
+
- `Reason` — por que ele existe (ex.: atalho temporário, restrição de prazo).
|
|
489
|
+
- `Impact` — `Low`/`Medium`/`High`, sem mecanismo automático de cálculo nesta issue.
|
|
490
|
+
- `Status` — `Open`/`Resolved`; sem tracking automático de transição nesta issue.
|
|
491
|
+
|
|
492
|
+
Objetivo: problemas de design conhecidos não desaparecem silenciosamente só porque a funcionalidade
|
|
493
|
+
foi concluída — ficam registrados até serem endereçados ou deliberadamente aceitos.
|
|
494
|
+
|
|
495
|
+
### 8.3 Integração futura com Guardian
|
|
496
|
+
|
|
497
|
+
O Guardian (auditoria de gaps que o pre-commit não cobre) é o consumidor futuro natural de §7, 8.1 e
|
|
498
|
+
8.2, apresentando, para cada divergência encontrada:
|
|
499
|
+
|
|
500
|
+
```text
|
|
501
|
+
Spec Drift | Design Drift | Evidence Conflict | Visual Debt
|
|
502
|
+
↓
|
|
503
|
+
decisão original · implementação atual · evidências · divergência · impacto
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
O Guardian **nunca decide automaticamente** qual fonte está correta quando as evidências forem
|
|
507
|
+
conflitantes — mesma regra do §7, extrapolada para o momento de auditoria em vez do momento de
|
|
508
|
+
implementação.
|