Слева логика lesson-body, отдельно resources. Исходники читаются только в браузере и не отправляются на WordPress. Состав форм каждого курса задаёт встроенный реестр Form System.
Это отдельный компилятор. Формы никогда не вкладываются в Lesson ZIP. Можно выбрать сразу все формы или любое их подмножество; .html/.txt не определяет тип — читается содержимое и resource passport/root. Strict gate: resource_slug, capabilities, presentation set и body-only canon берутся из закрытого реестра Form System, а допустимость формы для курса — из политики курса. Общая оболочка ресурса запрещена: Host добавит back/title/A-A+/status/sibling rail сам. Неизвестный тип, форма, выключенная политикой курса, неверный course/lesson/key, старый runtime/API или неправильный state-contract блокируют ZIP. Причины раскрываются прямо под проблемной формой.