@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.
Files changed (78) hide show
  1. package/README.md +42 -0
  2. package/bin/vetor.js +6 -0
  3. package/lib/banner.js +35 -0
  4. package/lib/commands/install.js +71 -0
  5. package/lib/commands/status.js +59 -0
  6. package/lib/commands/uninstall.js +119 -0
  7. package/lib/commands/update.js +63 -0
  8. package/lib/installer/command-exists.js +30 -0
  9. package/lib/installer/cursor-hooks.js +181 -0
  10. package/lib/installer/detector.js +79 -0
  11. package/lib/installer/manifest.js +76 -0
  12. package/lib/installer/prompts.js +97 -0
  13. package/lib/installer/writer.js +382 -0
  14. package/lib/router.js +50 -0
  15. package/package.json +39 -0
  16. package/templates/.gitkeep +0 -0
  17. package/templates/agents/code-review/agent.json +27 -0
  18. package/templates/agents/code-review/codex.toml +37 -0
  19. package/templates/agents/code-review.md +99 -0
  20. package/templates/agents/issue-worker/agent.json +33 -0
  21. package/templates/agents/issue-worker/codex.toml +57 -0
  22. package/templates/agents/issue-worker.md +112 -0
  23. package/templates/hooks/hooks-codex.json +48 -0
  24. package/templates/hooks/hooks.json +62 -0
  25. package/templates/opencode/agent/code-review.md +73 -0
  26. package/templates/opencode/agent/issue-coordinator.md +521 -0
  27. package/templates/opencode/agent/issue-worker.md +64 -0
  28. package/templates/opencode/mcp.jsonc +39 -0
  29. package/templates/opencode/plugin/vetor.ts +207 -0
  30. package/templates/opencode/scripts/agent-registration_test.ts +92 -0
  31. package/templates/opencode/scripts/check-edit.ts +147 -0
  32. package/templates/opencode/scripts/ensure-external-directory-permission.ts +110 -0
  33. package/templates/opencode/scripts/ensure-external-directory-permission_test.ts +142 -0
  34. package/templates/opencode/scripts/lib/guard.ts +45 -0
  35. package/templates/opencode/scripts/lib/model-health.ts +133 -0
  36. package/templates/opencode/scripts/lib/model-health_test.ts +181 -0
  37. package/templates/opencode/scripts/lib/project.ts +240 -0
  38. package/templates/opencode/scripts/lib/project_test.ts +45 -0
  39. package/templates/opencode/scripts/lib/status.ts +69 -0
  40. package/templates/opencode/scripts/lib/worktree.ts +41 -0
  41. package/templates/opencode/scripts/model-health.ts +50 -0
  42. package/templates/opencode/scripts/model-health_test.ts +80 -0
  43. package/templates/opencode/scripts/resolve-model.ts +112 -0
  44. package/templates/opencode/scripts/resolve-model_test.ts +185 -0
  45. package/templates/opencode/scripts/safety-check.ts +203 -0
  46. package/templates/opencode/scripts/vetor-checks.sh +217 -0
  47. package/templates/opencode/scripts/vetor-status.sh +99 -0
  48. package/templates/skills/architecture-review/SKILL.md +187 -0
  49. package/templates/skills/backlog-ideator/SKILL.md +277 -0
  50. package/templates/skills/design/SKILL.md +468 -0
  51. package/templates/skills/design/examples/design-contract-example.md +46 -0
  52. package/templates/skills/design/examples/prototype-handoff-example.md +142 -0
  53. package/templates/skills/fix-loop-agent/SKILL.md +255 -0
  54. package/templates/skills/guardian/SKILL.md +343 -0
  55. package/templates/skills/issue-coordinator/SKILL.md +596 -0
  56. package/templates/skills/retro/SKILL.md +156 -0
  57. package/templates/skills/shared/references/agent-status.template.md +68 -0
  58. package/templates/skills/shared/references/codebase-design-vocabulary.md +54 -0
  59. package/templates/skills/shared/references/conflict-resolution.md +94 -0
  60. package/templates/skills/shared/references/delegate-to-runtime.md +239 -0
  61. package/templates/skills/shared/references/design-vocabulary.md +508 -0
  62. package/templates/skills/shared/references/evidence-state.md +365 -0
  63. package/templates/skills/shared/references/frontend-design-enforcement.md +33 -0
  64. package/templates/skills/shared/references/grilling-conventions.md +64 -0
  65. package/templates/skills/shared/references/knowledge-provider-contract.md +150 -0
  66. package/templates/skills/shared/references/mcp-availability.md +104 -0
  67. package/templates/skills/shared/references/module-test-map.template.md +72 -0
  68. package/templates/skills/shared/references/planning-conventions.md +97 -0
  69. package/templates/skills/shared/references/project-conventions.md +63 -0
  70. package/templates/skills/shared/references/tdd-conventions.md +81 -0
  71. package/templates/skills/shared/references/touched-files-cache.md +30 -0
  72. package/templates/skills/spec/SKILL.md +524 -0
  73. package/templates/skills/spec-validate/SKILL.md +195 -0
  74. package/templates/skills/spec-validate/references/traceability.md +169 -0
  75. package/templates/skills/stack-practices/SKILL.md +151 -0
  76. package/templates/skills/vetor/SKILL.md +174 -0
  77. package/templates/skills/worktree-create/SKILL.md +142 -0
  78. 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.