Files
Rafael MelgaçoandClaude Opus 5 4f11af55a4 Merge origin/main (df5b5680) — a migração para o Tailwind 4 sobrevive ao espanhol
Os 20 conflitos são todos da mesma forma: a `main` trocou o texto por
`t(...)`/`traduzir(...)` (i18n espanhol, 447 arquivos, entrou hoje) e o PR
trocou o TOKEN DE CLASSE na mesma linha. Escolher um lado perderia o outro em
silêncio — e a tradução não tem erro de build que a denuncie.

A resolução partiu SEMPRE do lado da `main` e reaplicou por cima só o token do
PR: 26 blocos de conflito, `rounded`→`rounded-md`, `outline-none`→
`outline-hidden`, `block ` no `<label>` cru. Prova mecânica, não leitura: o
`git diff` de cada um dos 18 arquivos contra `origin/main` mostra APENAS linhas
de className. Nenhum `t(...)` foi perdido, nenhuma linha de texto mudou.

Também converti os 8 sítios que o merge deixaria órfãos — código que a `main`
escreveu DEPOIS de o PR nascer, que não conflita e por isso entraria calado
reprovando a guarda do próprio PR:

  rounded → rounded-md    BasesDoAgente.tsx:97, settings/notifications:84
  outline-none → hidden   agenda/_client:591, settings/tenant/agenda:166,175,195,204,225

`pnpm-lock.yaml` não foi resolvido à mão: regenerado com `pnpm install
--lockfile-only` a partir do `package.json` mesclado (que é a união das duas
listas). `pnpm install --frozen-lockfile` → exit 0, que é o que os 6 jobs do CI
exigem. O lock tem `tailwindcss@4.3.3` + `@tailwindcss/postcss@4.3.3`, zero
`autoprefixer`, e as dependências que a `main` adicionou hoje (`web-push@3.6.7`,
`@types/web-push@3.6.4`).

`docs/testing/user-journey-map.md` ficou com OS DOIS blocos — J19 da `main`
primeiro, depois o bloco do Tailwind 4. Não houve renumeração porque não há o
que renumerar: o bloco do PR não usa número de jornada nenhum. O gate
`numero-de-jornada-e-unico` passa, com 21 jornadas.

`tailwind.config.ts`: a `main` NÃO o tocou desde o merge-base
(`git diff --numstat b3996c43 origin/main -- tailwind.config.ts` = vazio),
então a deleção do PR não engole mudança de ninguém.

Medido: typecheck exit 0 (saída vazia); `tailwind-tokens`,
`numero-de-jornada-e-unico` e `sem-marcador-de-conflito` = 16/16 verdes;
zero marcadores de conflito em arquivo rastreado.

DESKCOMM_GOV_MIGRATION_EDIT=1 — por quê, e por que é legítimo aqui:

O `check-migration-triple.sh` lê `git diff --cached --name-status`. Num COMMIT
DE MERGE, toda migration que a `main` adicionou desde o merge-base aparece como
`A` (nova), porque o HEAD é o PR e não a tinha. O hook então cobra baseline +
MANIFEST + NNNN livre de migrations que eu não escrevi. É falso positivo
estrutural do hook sobre merge, não edição minha.

Prova de que não toquei nenhuma:

  $ git diff --cached df5b5680 --name-only | grep -E '^(supabase/migrations/|tests/invariants/)'
  (vazio — exit 1)
  $ git diff --cached b3996c43 --name-only | grep -cE '^(supabase/migrations/|tests/invariants/)'
  50        ← a MESMA sonda acha 50 contra o merge-base, então o vazio acima é real

E as 5 migrations acusadas são byte-idênticas ao que a `main` já tem:

  0197_push_subscriptions            859be9cd32c3c1afe498120396c52445 (origin/main == disco)
  0198_nono_digito_canonico          74f36730faba68cb479629da3a5ecddb (origin/main == disco)
  0199_push_subscriptions_rbac       da702e3e509231a1825016c11b63c5a5 (origin/main == disco)
  0200_o_que_ainda_nao_foi_ao_google d3bb5b16aefe7c0bc1ec55ce7a194ade (origin/main == disco)
  0201_credencial_do_google_pela_tela c01fb766c36a7d8183fe75a23d4d8024 (origin/main == disco)

DESKCOMM_GOV_INVARIANTS_EDIT=1 — mesma classe, mesma prova:

O `freeze-invariants.sh` acusou 8 arquivos de `tests/invariants/**` como
MODIFICADOS. Nenhum foi editado por mim: são a versão da `main` que o merge
traz inteira. Cada um é BYTE-IDÊNTICO ao de `df5b5680` (o pai do merge):

  arquivo                              md5(disco) == md5(df5b5680)
  event-log-drain                      498d0eab3e00b83efa4e27114e76a916
  followup-engine                      279c825d8f9a5f4b7128f19748d103c0
  followup-reactivity                  3de4d3c589aead59723044fb0586ee47
  rbac-config-ia-canais                2da7df563a3ccf882cf6141f186a8a70
  rls-isolation                        fa3e617daa7bbf92ff986c555e1fbae8
  vocabulario-banco-x-typescript       6a812a3ad1a7854f52ec683a21076349
  webhooks-bulk-events                 636f7aca15c8b5246db52192a980ef07
  webhooks-inbound                     28c4bdbe52c8ec0cf905d8c3d74661ee

A sonda distingue de verdade — o mesmo `rls-isolation.test.ts` dá
1293ba880e9d35857029b9d3b64fa16e no merge-base `b3996c43`. Se eu tivesse
mexido, o md5 do disco não bateria com o de `df5b5680`.

Não há flip de `test.fails` neste commit: há zero linha de invariante escrita
por esta sessão.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 18:18:45 -03:00

33 lines
1.1 KiB
TypeScript

"use client";
import { useState } from "react";
import { useHotkeys } from "react-hotkeys-hook";
import { MagnifyingGlass } from "@/lib/ui/icons";
import { Button } from "@/components/ui/button";
import { useT } from "@/hooks/i18n/useT";
import { CommandPalette } from "@/components/shell/CommandPalette";
export function SearchTrigger() {
const t = useT();
const [open, setOpen] = useState(false);
// `enableOnFormTags`: o atalho precisa funcionar com o cursor dentro do
// composer do inbox, que é onde o operador passa o dia.
useHotkeys("mod+k", () => setOpen(true), { preventDefault: true, enableOnFormTags: true });
return (
<>
<Button
variant="outline"
size="sm"
className="gap-2 text-muted-foreground"
onClick={() => setOpen(true)}
>
<MagnifyingGlass size={14} aria-hidden />
<span className="hidden md:inline">{t("Buscar...")}</span>
<kbd className="ml-2 hidden md:inline rounded-md border bg-muted px-1.5 py-0.5 text-[10px]">⌘K</kbd>
</Button>
<CommandPalette open={open} onOpenChange={setOpen} />
</>
);
}