10 KiB
Acervo: biblioteca de cortes (origem, download, compartilhar, editar título/descrição)
Status: rascunho Atualizado em: 2026-09-15 Issue: #1015 Priority: P2 Impeccable: C — fluxo novo na vertical Comunicação (lista + detalhe de cortes) Rascunho UI: docs/plans/c168-biblioteca-cortes-ui-draft.html Appetite: ~1–1,5 dia eng; um outcome verificável — a assessoria reencontra um corte antigo, edita o texto e republica sem refazer o corte Responsável: —
Intenção
O corte feito hoje morre no instante em que é enviado: existe para quem recebeu o link e some do radar da assessoria. Reaproveitar um corte antigo — outro formato, outra legenda, o mesmo vídeo — significa refazer o corte do zero (reabrir a fala, achar o trecho, gerar de novo) ou garimpar conversas atrás do link. Este item dá à vertical Comunicação uma biblioteca do que já foi cortado: cada corte guarda o discurso de origem e pode ser reencontrado, ter o texto ajustado, ser baixado, compartilhado e publicado/despublicado sem refazer o vídeo.
Persona e fluxo
- Persona / contexto: assessoria de comunicação (
communicator) e coordenação/candidatura, na mesa ou no celular, sob prazo de peça; quem não é da vertical (advisor,leader) segue negado. - Job principal: "reencontrar um corte que eu já fiz, ajustar o texto e republicar — sem refazer o corte".
- Fluxo desejado: abre Comunicação → Acervo → Cortes → vê os cortes mais recentes (ou busca por título/descrição) → abre um corte → assiste e confere o discurso de origem → edita título/descrição e salva → baixa, copia o link ou compartilha no WhatsApp → publica/despublica → a página pública reflete o texto e o estado.
- Anti-goals de produto: não virar editor de vídeo (nada de trocar início/fim ou re-render); não ser um segundo acervo de falas; sem comentários, versionamento, coleções/kits, favoritos ou métricas; sem deletar pela UI.
Esboço de fluxo (C)
[lista de cortes: recentes primeiro + busca por título/descrição]
→ abre o detalhe do corte → assiste e confere o discurso de origem (link)
→ edita título/descrição → salva (a página pública reflete)
→ baixa MP4 / copia link / WhatsApp / publica-despublica (kill switch)
→ [outcome: reencontrou, reaproveitou e republicou sem refazer o corte]
Rascunho UI (C)
- Rascunho UI (gate):
docs/plans/c168-biblioteca-cortes-ui-draft.html— cenas: lista de cortes desktop e vazia; detalhe com player, origem, edição e ações; confirmação de despublicar; mobile.
Objetivo e aceite
- Existe
/campanha/comunicacao/acervo/cortes: cortes mais recentes primeiro, cada item com título, discurso de origem (tipo + data, com link para a fala), duração, status (publicado/despublicado) e data de criação; busca por título/descrição e paginação padrão da casa. - O detalhe do corte mostra o player, o discurso de origem com link e o título/descrição editáveis; salvar reflete na página pública e no preview, sem passo extra.
- No detalhe também se baixa o corte (MP4), copia-se o link e compartilha-se no WhatsApp; o link compartilhado é o mesmo da página pública.
- Publicar/despublicar pela página interna com aviso explícito: despublicado, o link público para de funcionar; o estado aparece na lista.
- Guardrails de produto: leem/editam
communicator,coordinatorecandidate;advisoreleaderficam de fora (fail-closed). Deletar corte não existe na UI (admin pode). Editar o texto do corte nunca altera a fala original nem o vídeo.
Dados (intenção)
- Vou apresentar dados? Não — recorte operacional de itens existentes (lista paginada); status publicado/despublicado é estado do item, não KPI.
- Decisões desbloqueadas: a assessoria escolhe qual corte reaproveitar, o que ajustar no texto e o que manter no ar; nenhuma leitura agregada nova.
- Forma: adiada ao plano de implementação — aqui só a restrição de produto: sem métricas de vaidade (views/downloads) nem contadores de acervo.
Dados da decisão (literais)
- Rotas internas:
/campanha/comunicacao/acervo/cortes(lista) e/campanha/comunicacao/acervo/cortes/[id](detalhe). - Acesso:
communicator,coordinatorecandidateleem e editam título/descrição/publicação;advisoreleadernegados (fail-closed). - Lista: mais recentes primeiro; cada item mostra título, discurso de origem (tipo + data, com link para a fala), duração, status (publicado/despublicado) e data de criação; busca por título/descrição; paginação padrão da casa.
- Aviso de despublicar (texto de produto): título "Despublicar este corte?" e corpo "O link público deixa de funcionar para quem já recebeu. Você pode publicar de novo quando quiser." — botões "Cancelar" e "Despublicar".
- Vazio da lista: "Nenhum corte ainda" + caminho para o acervo de falas.
- Publicar/despublicar é kill switch: despublicado, o link público para de funcionar; republicar restaura o mesmo link (o corte continua na biblioteca).
- Sem deletar corte pela UI (admin pode); sem comentários, versionamento, coleções/kits ou métricas de vaidade.
Direção no codebase (hipótese)
- Áreas prováveis: rotas em
src/app/(campaign)/campanha/(app)/comunicacao/acervo/cortes/(lista +[id]), paths emsrc/lib/campaignPaths.ts, chrome emsrc/lib/campaignPageChrome.ts, componentes na vertical (src/components/campaign/speech/ou domínio irmão) e utilitários de leitura/estado ao lado do acervo. - Precedente a olhar: acervo de falas —
acervo/page.tsx(lista paginada + vazio + footer),SpeechAcervoFilters.tsx/speechListUrl.ts(busca e estado na URL),SpeechResultCard.tsx,SpeechDetailPlayer.tsx(player, baixar/abrir fonte) e o detalheacervo/[id]/page.tsx; chromecampaignPageChrome.ts; nav do communicator emsrc/components/campaign/shell/nav.ts. - Risco de acoplamento: o
communicatorlê mas não atualiza a fala (canUpdateSpeeché de papéis unrestricted) — o texto editável é o do corte, não o da fala; não misturar com o where/ordenação da lista de falas; leader/advisor lockdown e gatespeechCatalogintocados; a página pública/corte/<id>é do C167 (aqui só se reflete).
Dependências
- Dura: C167 — sem o corte salvo no servidor e a página pública
/corte/<id>, não há o que listar, baixar, compartilhar nem publicar/despublicar. - Indireta: C166 — seleção de trecho [início,fim] e compartilhamento por link do YouTube: é o passo anterior do fluxo; o compartilhar da biblioteca é o link público do corte, não o link do YouTube.
- Suaves: C154/C153 (acervo de falas, gate e chrome) e a vertical Comunicação.
Fora de escopo
- Editar o corte (trocar início/fim, re-render, editor de vídeo).
- Deletar/arquivar corte pela UI (admin pode), lixeira e desfazer.
- Comentários, versionamento/histórico, coleções/kits/playlists, favoritos e métricas (views/downloads).
- Qualquer mudança na página pública além de refletir título/descrição/publicação (a superfície é do C167).
- Ações em lote (baixar/publicar/editar vários) e exportação.
Rabbit holes de produto
- "Já que tem a lista, deixa ajustar o corte (início/fim)." Se alguém "só completar": editor/re-render e fila de processamento. Corte neste item: só título/descrição/publicação; o vídeo é imutável.
- "Coleções/kits por tema para organizar." Se alguém "só completar": segunda taxonomia e curadoria. Corte neste item: lista única com busca.
- "Mostrar views/downloads de cada corte." Se alguém "só completar": dashboard de vaidade sem decisão nomeável. Corte neste item: sem métricas.
- "Soft delete/desfazer despublicar." Se alguém "só completar": versionamento e lixeira. Corte neste item: kill switch; republicar resolve.
- "Compartilhar em todas as redes." Se alguém "só completar": integrações e SDKs. Corte neste item: copiar link + WhatsApp (o que o produto pediu).
Questões em aberto (produto)
- Aba/segmento na lista do acervo (Falas | Cortes) ou rota separada? Opções: A) rota separada
/acervo/cortescom link no acervo | B) abas na mesma tela. Recomendação: A — recortes, filtros e ordenação diferentes; misturar paginação e estado de URL confunde. (assumido — validar no gate) - Busca na biblioteca? Opções: A) busca simples por título/descrição | B) sem busca nesta fatia. Recomendação: A — é o job do item (reencontrar); barra padrão da casa. (assumido — validar)
- Ordenação? Opções: A) mais recentes primeiro | B) agrupar por discurso de origem. Recomendação: A — o corte é a unidade; a origem é contexto do item, com link para a fala.
- Quem pode editar título/descrição? Opções: A) qualquer um com acesso ao acervo (communicator+) | B) só quem criou + coordenação. Recomendação: A — equipe pequena; o kill switch cobre abuso. (assumido — validar)
- Despublicar apaga ou só desativa o link? Opções: A) desativa; republicar restaura o mesmo link | B) apaga o corte público. Recomendação: A — reverter é barato e o corte continua na biblioteca.
Referências
- GitHub Issue: — (após
pnpm agent:register) - Rascunho UI (gate):
docs/plans/c168-biblioteca-cortes-ui-draft.html src/app/(campaign)/campanha/(app)/comunicacao/acervo/page.tsx·acervo/[id]/page.tsx·src/components/campaign/speech/(filtros, card, player) ·src/utilities/speech/speechListUrl.ts/speechPageData.tssrc/lib/campaignPageChrome.ts·src/lib/campaignPaths.ts·src/utilities/campaignPageActor.ts(gatespeechCatalog) ·src/utilities/access/speeches.ts·src/components/campaign/shell/nav.tstests/int/speechCatalog.int.spec.ts· e2ecampaignSpeechAcervoAGENTS.md— vertical Comunicação, leader lockdown, naming/i18n
Self-score (shaping)
5/5 — (1) fatia com um outcome verificável: reencontrar/editar/republicar um corte sem refazer o corte; (2) appetite ~1–1,5 dia declarado e o escopo cabe (reuso do acervo, sem editor nem taxonomia nova); (3) persona, job e aceite em linguagem de usuário; (4) direção no codebase é hipótese com precedente nomeado, sem contrato; (5) zero decisão dura de engenharia (sem schema/collection/migration/signature).