> ## Documentation Index
> Fetch the complete documentation index at: https://docs.weve.cx/llms.txt
> Use this file to discover all available pages before exploring further.

# Liberação de conteúdo

> A agenda que segura uma aula até a data — ou até o aluno chegar lá.

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:

| nó    | resultado                           |
| ----- | ----------------------------------- |
| `all` | a **maior** das datas das condições |
| `any` | a **menor** das datas das condições |

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.

| kind               | abre                                      |
| ------------------ | ----------------------------------------- |
| `immediate`        | sem condição                              |
| `days_after_start` | `days` dias depois de o acesso começar    |
| `on_date`          | na data `at`                              |
| `after_previous`   | ao concluir a aula anterior do curso      |
| `after_lesson`     | ao concluir `lesson_id`                   |
| `after_module`     | ao concluir todas as aulas de `module_id` |
| `after_count`      | ao concluir `count` aulas do curso        |

`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."

```json theme={null}
{
  "kind": "any",
  "children": [
    { "kind": "days_after_start", "days": 30 },
    { "kind": "after_module", "module_id": "…", "days": 2 }
  ]
}
```

## 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.


## Related topics

- [Criar aula](/api-reference/content/lessons-create.md)
- [Alterar curso](/api-reference/content/courses-update.md)
- [Criar curso](/api-reference/content/courses-create.md)
- [Criar módulo](/api-reference/content/modules-create.md)
- [Assistir aula](/api-reference/classroom/lessons-get.md)
