# Napkin Runbook — KVMote ## Curation Rules - Re-prioritize on every read. - Keep recurring, high-value notes only. - Max 10 items per category. - Each item includes date + "Do instead". ## Execution & Validation (Highest Priority) 1. **[2026-03-24] `ImplicitUsings=disable` — todo using deve ser explícito** Do instead: ao adicionar código, verificar se todos os namespaces usados têm `using` explícito no topo. Faltou um → erro CS0103 silencioso em runtime. 2. **[2026-03-24] Designer file: sempre usar `this.` nos membros de Form** Do instead: em `Principal.Designer.cs`, escrever `this.btnConnect.Text = ...` — nunca omitir `this.`. Sem isso → CS0103. 3. **[2026-03-24] AutoScaleMode deve ser `Dpi` com `AutoScaleDimensions = new SizeF(96F, 96F)`** Do instead: nunca usar `None` (quebra DPI alto) nem `Font` (escala diferente por máquina). 4. **[2026-03-24] Form1.cs / Form1.Designer.cs são stubs vazios — não remover** Do instead: manter como `namespace KVMote { }`. VS os inclui no .csproj; remover do disco pode causar erro de build. ## Build & Deploy 1. **[2026-03-24] Não usar "Publicar" do Visual Studio — gera ClickOnce (múltiplos arquivos)** Do instead: usar `dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true` no terminal. ## Domain Behavior Guardrails 1. **[2026-03-24] Canal serial é único (9600 baud) — mouse trava durante paste de clipboard** Do instead: isso é design proposital (limitação do BT HC-06). Não tentar paralelizar sem mudar o protocolo de transporte. 2. **[2026-03-24] Chars não-ASCII (é, ã, ç) não são enviáveis via clipboard** Do instead: filtrar/ignorar na `SendClipboardToClient`. Limite: `MaxClipChars = 300`. 3. **[2026-03-24] `ClipCursor` não é usado para prender o cursor em modo cliente** Do instead: usar técnica FPS warp — `SetCursorPos` de volta ao centro a cada WM_MOUSEMOVE, acumulando deltas reais em `_pendingDX/_pendingDY`. 4. **[2026-03-24] `SendMouse` usa `Monitor.TryEnter` (lossy) — descarta pacotes se canal ocupado** Do instead: isso é intencional. Não trocar por `lock` pois bloquearia o hook de mouse. 5. **[2026-03-24] Arduino Leonardo é obrigatório — Uno não suporta HID USB nativo** Do instead: nunca sugerir Arduino Uno ou Mega como substituto.