Skip to content

feat(community): retrospectiva persistida com snapshot ao publicar (Fase 2)#444

Open
Clintonrocha98 wants to merge 2 commits into
feature/retrospective-multi-sourcefrom
feature/retro-persistence
Open

feat(community): retrospectiva persistida com snapshot ao publicar (Fase 2)#444
Clintonrocha98 wants to merge 2 commits into
feature/retrospective-multi-sourcefrom
feature/retro-persistence

Conversation

@Clintonrocha98

Copy link
Copy Markdown
Member

Fase 2 — Persistir e publicar

Segunda fatia da retrospectiva multi-fonte. A Fase 1 tornou a retrospectiva plugável por fonte, mas ao vivo. Esta fase a transforma numa peça editorial persistida: o operador cura e publica; ao publicar, o dado é congelado num snapshot; a página pública lê o congelado, sem tocar as fontes.

Aponta para a branch de integração feature/retrospective-multi-source.

O que entra

community (domínio) — a entidade e o ciclo

  • Entidade Retrospective (community_retrospectives, sem tenant_id) + enum RetrospectiveStatus (draft|publishing|published, contratos Filament).
  • VOs DeckConfig (curadoria: ordem, on/off, exclusions) e RetrospectiveSnapshot (SourceResult[] congelados) via casts tipados (AsDeckConfig, AsRetrospectiveSnapshot) — nunca array solto.
  • FrozenSlide: reidrata o snapshot honrando o contrato Slide sem o domínio importar as classes de slide de integration-github (Domain → Integration é proibido).
  • Actions CompileSnapshot (coleta + congela) e ComposeDeck (aplica a curadoria sobre o snapshot), PublishRetrospective + job CompileRetrospectiveSnapshot (congela na fila).

portal — leitura do congelado

  • RetrospectiveDeck removido; a orquestração migrou para o domínio.
  • A página pública lê a edição publicada mais recente (sem filtros do visitante). Rota de preview /comunidade/retrospectiva/{retrospective}/preview para o operador (rascunho coletado ao vivo), com guard 403 no mount.

panel-admin — o CRUD editorial

  • RetrospectiveResource: completo em capacidade (ordem/on-off de fonte por repeater, exclusions, textos de capa/fecho, publicar). Feio de propósito — o Deck Builder visual é a Fase 3.
  • Preview do admin e página pública compartilham o mesmo render path (ComposeDeck), então "ver preview" bate com o publicado.

Refinamentos registrados nos docs (spec + ADR-0002)

  • label() novo no contrato RetrospectiveSource (identidade estática das fontes, para o CRUD listar sem coletar).
  • FrozenSlide no lugar de um registro kind → classe (forçado pela regra Domain → Integration).
  • Exclusions recompilam o snapshot (mexem no dado); ordem/on-off re-derivam dele.

Fora de escopo (Fase 3)

  • Deck Builder 3 colunas (drag-drop, preview ao vivo, inspector) — puro upgrade de UX.

Notas

  • Migration nova: community_retrospectives (colunas timestamptz, jsonb para deck_config/snapshot).
  • Testes: 63 novos/reescritos (VOs round-trip, casts, CompileSnapshot/ComposeDeck, publish+job, página pública lê snapshot, preview autenticado, CRUD Filament). Bateria completa: 920/923 verdes — as 3 falhas são o BackfillRepositoryTest (timezone +00:00 vs -03:00), pré-existentes/ambientais, sem relação com esta mudança.

…ase 2)

Torna a retrospectiva uma peça editorial persistida: o operador cura e
publica, o visitante só assiste ao resultado congelado.

Domínio (community):
- Entidade Retrospective (tabela community_retrospectives, sem tenant_id) +
  enum RetrospectiveStatus (draft|publishing|published, contratos Filament).
- VOs DeckConfig e RetrospectiveSnapshot com casts tipados (AsDeckConfig,
  AsRetrospectiveSnapshot), nunca array solto.
- FrozenSlide: reidrata o snapshot honrando o contrato Slide sem o domínio
  importar as classes de slide de integration (Domain -> Integration proibido).
- Actions CompileSnapshot (coleta+congela) e ComposeDeck (aplica curadoria sobre
  o snapshot), PublishRetrospective + job CompileRetrospectiveSnapshot (congela
  na fila).
- label() novo no contrato RetrospectiveSource (identidade estática das fontes).

Portal:
- RetrospectiveDeck removido; a orquestracao migrou para o dominio.
- Pagina publica le a edicao publicada mais recente (sem filtros do visitante);
  rota de preview /comunidade/retrospectiva/{retrospective}/preview (guard 403
  no mount, o portal nao tem rota de login web).

panel-admin:
- RetrospectiveResource: CRUD completo em capacidade (ordem/on-off de fonte via
  repeater, exclusions, textos, publicar). Preview e pagina publica compartilham
  o mesmo render path (ComposeDeck).

Docs: spec e ADR-0002 atualizados com os refinamentos (FrozenSlide, label(),
exclusions recompilam o snapshot).
@Clintonrocha98 Clintonrocha98 added type:feat New feature mod:community Community features mod:portal Public portal / homepage mod:panel-admin Admin Filament panel labels Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mod:community Community features mod:panel-admin Admin Filament panel mod:portal Public portal / homepage type:feat New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant