Skip to main content
A liberação diz quando uma aula abre para quem já tem direito a ela. Ela nunca amplia direito: quem decide o que o aluno pode ver é a matrícula (enrollments), e a agenda só segura o que já é dele.

A ideia

Cada condição responde com a data a partir da qual ela é verdadeira, e não com sim ou não. Por isso elas compõem sem ambiguidade: Uma condição que depende de algo que o aluno ainda não fez — concluir uma aula, por exemplo — não tem data. Dentro de um all ela segura tudo; dentro de um any é só um caminho que ainda não abriu, e os outros continuam valendo. É isso que mantém a promessa que a tela precisa cumprir: sempre que existir uma data, a resposta traz available_at; quando não existir, traz release, a mesma árvore com o veredito de cada condição e a frase pronta.

As condições

Todas são monótonas: uma vez verdadeiras, verdadeiras para sempre. days atrasa o que o nó decidiu — “7 dias depois de concluir o módulo 1” — e vale em qualquer nó, menos em immediate. Não há condição de turma, de etiqueta ou de perfil, de propósito: elas podem deixar de valer, e acesso que oscila é acesso que ninguém sabe explicar. Quem tem direito é pergunta de matrícula.

Curso, módulo e aula

Os três níveis têm agenda, e elas se somam por conjunção: a aula abre quando as três abrirem. É o que evita repetir a mesma condição em vinte aulas — e o que faz a aula criada depois nascer segurada, em vez de vazar. “O curso abre 30 dias depois da compra” é uma linha na agenda do curso. published_at não serve para isso: ele é a data em que o curso vai ao ar para todo mundo, e a agenda é contada da matrícula de cada aluno.

Exemplo

“Libera em 30 dias — ou 2 dias depois de concluir o módulo 1, o que vier primeiro.”

Recusas

  • invalid_release (422): forma incoerente, atraso fora de 0–3650 dias, aninhamento acima de 5 níveis, mais de 50 condições, ou referência a uma aula ou módulo de outro curso.
  • release_deadlock (422): a escrita fecharia um círculo — aulas esperando umas pelas outras, que não abririam nunca. A conferência é sobre o curso inteiro, porque o impasse é do conjunto, e nada é gravado.
Uma aula referenciada que sai do curso (arquivada ou despublicada) deixa de segurar: esperar por uma conclusão que não pode mais acontecer trancaria o curso para sempre.