mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-15 18:53:06 +00:00
3 KiB
3 KiB
Escala/DRY pós-C216 — débitos do simplify da terceira fonte do acervo
Status: rascunho
Atualizado em: 2026-09-24
Issue: (a registrar — depends: [1292])
Priority: P3
Impeccable: A — só backend/shell (sem superfície visual nova)
Appetite: ~1 dia eng fill-in
Responsável: —
Depende de: #1292 (C216)
Contexto
O /simplify do C216 (terceira fonte "Falas na internet") aplicou os cleanup da
sessão (extração de withSeekQuery, inline do gate de sort, remoção de exports
sem consumidor, loadWebSpeechMediaForActor nas duas rotas novas, extração do
ramo Câmara em CamaraSource) e deixou três débitos maiores que o cleanup, mais
os defer+gatilho registrados no acervo-fonte-falas-web-impl.md (§Simplify —
triage). Este lote consolida os três numa trilha ordenada (lock primeiro).
Fases
- F1 — Gate fail-closed das rotas de mídia privada (expensive_lock).
O gate
getCampaignUser+ predicado do catálogo + validação de id +findByID(...).catch(() => null)+ 404 silencioso está replicado nas rotasacervo/gravacoes/[id]/arquivo,reels/*,conteudos/*e agoraacervo/internet/[id]/arquivo|capa(as duas novas já compartilham o loaderloadWebSpeechMediaForActor). Extrair um helper de rota no donoutilities/privateMedia/(ex.:loadPrivateMediaForActors) que recebe a collection, o predicado e o mapa de campos, devolvendonullpara toda negação — as rotas ficam com o HTTP (range/disposition/404) e o helper com o gate. Int/e2e existentes (campaignSpeechAcervo,campaignReel, Central de Conteúdos) são o pino; não mudar nenhuma resposta HTTP. - F2 — Scaffold de resultados dos três ramos da página do acervo.
CamaraSource/RecordingsSource/WebSpeechesSourcerepetem o heading do modo tema, oCampaignListEmptyStatecom ternários e oCampaignListFooter. Extrair um shell local (oushared/) parametrizado por copy/links — sem mudar bytes de nenhum dos ramos (o pin é o e2ecampaignSpeechAcervo). - F3 — Excerpt e chips dos cards de fala (cheap_polish).
SpeechResultCardeWebSpeechResultCardduplicam o excerpt truncado (… <mark> …) e o render de chips com caps 3/2 ++N. Extrair o excerpt para o dono do highlight (SpeechHighlightParts) ou um componente irmão; chips param por lista de grupos (a Câmara tem keywords, a web não). Gatilho antecipado: um terceiro card de fala.
Rabbit holes / Não escopo
- Não unificar
speechHasActiveFilters×recordingHasActiveFilters(shapes divergentes:phases×people; DRY <3) — defer com gatilho no impl do C216. - Não centralizar os bytes de fixture MP4/MP3 dos int specs (2 sites) — defer.
- Não mexer em
speechCoverage/Sollinha/C217.
Riscos
- F1 toca access fail-closed: o helper precisa manter o 404 silencioso e o
overrideAccess: false; qualquer resposta diferente é regressão pinada por int/e2e. - F2/F3 são cosméticos de shell; o risco é bytes de copy — os specs da vertical (C154/C199/C211/C216) são o pino.