mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 09:34:46 +08:00
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 --numstatb3996c43origin/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 --cacheddf5b5680--name-only | grep -E '^(supabase/migrations/|tests/invariants/)' (vazio — exit 1) $ git diff --cachedb3996c43--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>
33 lines
1.1 KiB
TypeScript
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} />
|
|
</>
|
|
);
|
|
}
|