Ctrl K
ComunidadGuías…

docs/interface-por-vinculo.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Interface por membro e convite

Em Equipe, quem administra pode escolher **Completa**, **Simplificada** ou personalizar as áreas visíveis de cada membro. A mesma configuração aparece no convite e na criação de organização, para o responsável. A preferência pertence ao vínculo: uma pessoa pode trabalhar com interfaces diferentes em empresas diferentes.

Completa é o padrão de vínculos e convites antigos e acompanha destinos novos. Simplificada oferece Inbox, Agenda, Funis, Contatos, Tarefas e Conexões quando o papel permite. A seleção granular substitui o preset. Trocar o preset restaura sua seleção padrão. Ao menos uma área permitida precisa permanecer selecionada.

Isso muda apresentação, sem alterar autorização. Barra lateral desktop/mobile, hubs, busca, sino e página inicial usam a mesma projeção do catálogo. URL direta e links contextuais de conversas/avisos continuam regidos pelo RBAC. Perfil e segurança pessoal permanecem disponíveis; quem administra mantém Equipe para recuperar a seleção. Sair, trocar empresa e encerrar acompanhamento mantêm seus controles. A porta da administração da instalação e a atualização do produto são controles essenciais externos ao catálogo, com os gates existentes.

`lib/navigation/catalogo.ts` é a única lista de destinos, com IDs iguais a hrefs canônicos. `interface.ts` valida escrita, resolve leitura defensiva e calcula home; `registry.ts` liga ícones. Não se aceitam URLs arbitrárias. IDs removidos são ignorados na leitura; seleção totalmente obsoleta retorna ao padrão e o editor avisa que precisa de ajuste.

`user_organizations.interface_settings` persiste a apresentação. O convite HMAC assina esse campo antes do aceite; o RPC grava na inserção ou reativação transacional. Repetir um convite de vínculo ativo preserva papel e preferência posteriores. A assinatura antiga do RPC delega ao padrão completo, com execução restrita ao servidor. Criação do próprio responsável grava a seleção no mesmo vínculo transacional; para responsável diferente ela acompanha o convite. O recibo confiável e o fingerprint do request completo preservam idempotência e provenance.

Outro administrador pode editar enquanto o membro trabalha. Realtime invalida o contexto próprio via `/api/v1/auth/interface`; a resposta autenticada é a autoridade, nunca o payload do socket. Revalidação a cada 30 segundos, foco e reconexão cobre eventos perdidos. O refresh atualiza o menu sem trocar a URL ou desmontar formulários/cache por preferência. Home calculada só vale ao entrar por `/app`. Suporte usa o papel efetivo e a interface completa do acompanhamento, sem conceder bypass de plataforma durante readonly.

Entre o catálogo e o vínculo existe um degrau a mais: a **empresa** também escolhe as portas que mostra, em **Configurações → Empresa → Menu lateral**. A escolha da organização é o universo da instalação e o vínculo escolhe menos dentro dele; a leitura resolve empresa ∩ vínculo ∩ papel, item a item, e as portas essenciais ficam de pé em qualquer nível. Nenhum dos dois lados abre o que o outro fechou — antes desta mudança o vínculo vencia sozinho, e mostrar o mesmo recorte a todo mundo exigia editar vínculo por vínculo.

`organizations.interface_settings` guarda essa escolha, com a mesma forma de `{preset, destinos?}` do vínculo e o mesmo shape check (migration 0367). Coluna nasce no preset completo: quem não mexer em nada continua vendo o que via. A projeção é a mesma peça de sempre — `lib/navigation/interface.ts` combina os dois níveis e `registry.ts` continua ligando ícones —, então barra lateral, hubs, busca e página inicial não precisam saber que existem dois degraus. A combinação nunca devolve seleção vazia: sem interseção sobram as essenciais, porque lista vazia é recusada pela validação e valor recusado cai na interface completa (falha ABERTA, o oposto do que se quer de um menu).

A empresa também altera só apresentação: papel continua decidindo página, API e ação, e o papel só tira — marcar uma porta administrativa na escolha da empresa não promove ninguém. Alterações emitem `org.interface_changed` ao lado de `team.interface_changed`.

Alterações emitem `team.interface_changed` para `api_audit_log`, disponível na Auditoria. Não há evento sem consumidor nem worker novo. O ciclo de correção é o administrador rever e salvar pela Equipe; erros de escrita ficam visíveis e não produzem sucesso otimista. Esta peça não decide atendimento ou follow-up: continuidade IA↔humano permanece nos links contextuais e permissões operacionais existentes.

Provas: `tests/unit/interface-por-vinculo.test.ts`, `tests/invariants/interface-por-vinculo.test.ts` e `tests/e2e/interface-por-vinculo.spec.ts`. A spec dirige dois membros com mesmo papel, edição por outro administrador, recebimento real pelo socket, formulário preservado, hub-only, busca/mobile e convite/replay. Evidências locais em `.superpowers/evidence/comunidade-360/`. O degrau da empresa é medido por `tests/unit/interface-por-empresa.test.ts`, que conta os itens do menu pelo módulo que importa o catálogo (`tests/e2e/navegacao.spec.ts:222` segue medindo a dobra na tela).