# MEDICAO DA INTEGRACAO `epic/CS-32` ⟶ `main` DA MAQUINA — 02/10
# Feita pelo integrador. A casa ja' tinha medido que ⛔ NAO FUNDE e ⛔ NAO GUARDOU A LISTA.
# ⟹ Esta e' a lista. ⛔ Nao se volta a pagar esta medicao.

main ANTES ....... 9a495fd3938fae288d3192c92c6ce73ec03d05a0
main DEPOIS ...... 9a495fd3938fae288d3192c92c6ce73ec03d05a0   (⛔ NADA entrou — devolvido)
merge-base ....... b045518174f76ff06b1ca0ef55a97fe8f8a4a307
main desde a base ... 83 commits   ·   epic desde a base ... 28 commits

## OS 15 FICHEIROS EM CONFLITO (40 hunks)
backend/prisma/schema.prisma                                  1 hunk
backend/src/modules/aula/aula.controlador.ts                  1
backend/src/modules/aula/aula.servico.ts                      2
backend/src/modules/participacao/index.ts                     3
backend/src/modules/participacao/participacao.servico.ts      4
backend/src/modules/participacao/participacao.tipos.ts        2
backend/test/aula.e2e-spec.ts                                 1
frontend/e2e/aulas.spec.ts                                   10
frontend/src/app/especialista/questoes/[aulaId]/page.tsx       1
frontend/src/app/gravacao/[aulaId]/page.tsx                    2
frontend/src/app/secretaria/aulas/[id]/page.tsx                6
frontend/src/app/secretaria/aulas/dados.ts                     3
frontend/src/app/secretaria/aulas/nova/page.tsx                1
frontend/src/componentes/leitor/index.ts                       1
frontend/src/componentes/leitor/leitor.module.css              2

## 11 DOS 15 ERAM JUNTAVEIS, E FORAM JUNTADOS (prova de que ⛔ nao se devolveu por preguica)
Resolvi e validei, antes de parar:
 · schema.prisma — `Nucleo` (main/CS-46) + `CaminhoDeValidacao`+`SegmentoValidado`
   (epic/CS-35) sao adicoes DISJUNTAS no mesmo sitio. Ficaram AS DUAS.
   `npx prisma validate` ⟹ «The schema is valid 🚀» com os 18 models/enums.
 · aula.controlador.ts — duas ROTAS NOVAS no mesmo ponto. Ficaram as duas, e
   `@Get('permanentes')` ficou ANTES de `@Get(':id')`, que e' a trava escrita do CS-89.
 · participacao/index.ts, participacao.tipos.ts — barril e tipos, adicoes de ambos: TODOS ficaram.
 · 🩸 `CAMINHO`/`Caminho`: os dois lados deixaram ordens que PARECIAM contrarias
   («⛔ nao se renomeia este par» do CS-90 vs «⛔ nao se declara um segundo enum de
   caminho» do CS-36). Cumpriam-se AS DUAS: nomes do main INTACTOS, definidos A PARTIR
   do enum do Prisma. ⛔ Zero renomeacoes, um so' mecanismo, valores identicos.

## 🩸 E UM ACHADO QUE O MERGE AUTOMATICO ESCONDIA — ⛔ NAO ERA CONFLITO, ERA PERDA MUDA
`aula.servico.ts`: o git ALINHOU MAL o `permanentes()` do main contra o `calendario()`
do epic. Resultado: `calendario()` fundiu-se para o lado do MAIN **sozinho**, e o CS-34
do epic (o filtro `podeVer`, o `estadoDePublicacao` e o `publicadaEm`) DESAPARECIA
SEM MARCA DE CONFLITO. ⟹ Quem resolvesse este ficheiro «aceitando o que o git fez»
perdia trabalho aprovado sem nunca o ver. Reposto a mao, com o `nucleo` do main por cima.
⚠️ QUEM PEGAR NISTO OUTRA VEZ: ⛔ NAO confie nos 15 ficheiros marcados. Este defeito
estava FORA da marca.

## ⛔ OS 4 BLOQUEIOS QUE ⛔ NAO SAO MEUS PARA RESOLVER — E PORQUE
### 1 · 🩸 O INVARIANTE DO BANCO ESTA' EM CONTRADICAO (este e' o bloqueio de raiz)
  epic/CS-32 schema:  `inicio DateTime`   ⟹ NOT NULL
  main        schema:  `inicio DateTime?`  ⟹ NULAVEL (CS-89: a aula PERMANENTE ⛔ nao tem hora)
A correccao inteira do epic assenta em «toda a aula TEM hora». `AulaMedida.inicio` e'
`Date` ⛔ nao anulavel, e o servico de participacao do epic desreferencia `aula.inicio`
SEM GUARDA em 6 sitios (linhas 173, 176, 280, 303, 545, 558), incluindo
`aula.inicio.getTime()`. Numa aula permanente `inicio` E' NULO.
⟹ ⛔ NAO e' um conflito de linha. E' DOIS DESENHOS DE DADOS incompativeis.

### 2 · 🩸 A VERDADE SOBRE O `caminho` TEM DOIS DONOS, E O PRECO MUDA COM ISSO
  epic (CS-35): `caminho` e' COLUNA GRAVADA por segmento. E a regra do epic (linha 162-163) e'
    «durante a aula ⟹ AO_VIVO; depois do fim, com a gravacao ABERTA ⟹ GRAVACAO» —
    logo uma aula NAO permanente vista depois na gravacao grava GRAVACAO.
  main (CS-90): `caminho` DERIVA-SE de `Aula.permanente` e ⛔ NAO se grava — logo a MESMA
    aula da' AO_VIVO.
🩸 O autor do CS-90 PREVIU ISTO POR ESCRITO: «Gravar o caminho numa segunda coluna punha
duas verdades sobre os mesmos minutos — e quando o CS-35 chegar, as duas somas colidiam
CALADA.» ⟹ E o caminho DECIDE O PRECO: o epic aplica `multiplicador_gravada` aos
segmentos com `caminho === GRAVACAO`. Os MESMOS minutos valem pontos DIFERENTES conforme
o lado que ganhe — e o ranking «conta para avaliacao» (regra 114).

### 3 · A ROTA VIVA `/participacao/meus-minutos` FICA A ZERO, EM SILENCIO
`minutosPorCaminho()` (main, CS-90) SOMA a coluna `participacao_aula.minutosValidados`.
O epic declara, no seu proprio barril: essa coluna «⛔ nao e' mais escrita por ninguem».
⟹ Depois do merge a rota responde 0 a todos, sem erro nenhum. Ha' ensaio dos dois lados
(`backend/test/permanente-minutos.e2e-spec.ts` do main e `participacao.e2e-spec.ts` do epic).

### 4 · DUAS MIGRACOES COM O MESMO CARIMBO DE TEMPO
  main: `20260930120000_aula_permanente`   (e' a que torna `inicio` NULAVEL)
  epic: `20260930120000_portao_de_publicacao_da_aula`
⟹ Prefixo IDENTICO `20260930120000`. A ordem do historico do Prisma fica ambigua, e uma
delas ja' esta' aplicada no main.

## PORQUE E' QUE ⛔ NAO FORCEI
Existe uma sintese PLAUSIVEL (permanente ⟹ `caminho = GRAVACAO` sem perguntar as horas;
`minutosPorCaminho` passa a somar segmentos). Mas ela obriga a DECIDIR o que uma
`marcaMinuto` SIGNIFICA numa aula SEM hora de inicio — no leitor a marca ancora na
POSICAO DO VIDEO (CS-40), ⛔ nao no relogio de parede — e isso muda MINUTOS e PONTOS.
⛔ NENHUM ensaio dos dois lados cobre «permanente + segmento validado + marcaMinuto».
⟹ ⛔ Nao posso PROVAR que o produto continua certo, e o meu papel exige a prova, ⛔ nao a
afirmacao. Escolher «o nosso lado» aqui deitava fora CS-33/35/36/37/39/40 EM SILENCIO,
que e' exactamente o que o MSS-211 desta casa proibe.

## A ORDEM QUE A MEDICAO RECOMENDA PARA OS OUTROS 8 (medida contra main 9a495fd3)
  CS-76 .... 1 conflito  (gravacao/[aulaId]/page.tsx)                         ⟸ PRIMEIRO
  CS-108 ... 3  (navegacao.ts + 2 e2e)
  CS-65 .... 3  (navegacao.ts + 2 e2e)
  CS-70 .... 3  (navegacao.ts + 2 e2e)
  CS-82 .... 3  (navegacao.ts + 2 e2e)
  CS-101 ... 4  (secretaria/aulas: [id], css, nova, pecas)
  CS-147 ... 5  (navegacao.ts, dados.ts, gravacao, 2 e2e)   ⚠️ 80 commits — e' o do DESIGN
  CS-58 .... 6  (navegacao.ts, dados.ts, pecas, [id], css, e2e)
  CS-32 ... 15  ⟸ O MAIOR DE TODOS, e o unico com contradicao de INVARIANTE. ULTIMO.
⚠️ QUATRO deles colidem no MESMO ficheiro `frontend/src/lib/navegacao.ts` (CS-108, CS-65,
CS-70, CS-82) ⟹ o primeiro a entrar provavelmente LIMPA ou encurta os outros tres.
RE-MEDIR depois de cada um: cada merge muda o main.
