v0.6.1
A template's strictest validation rule was enforcing nothing at all.
Variable rules are written Laravel-style, and the parser split them on | before it looked for regex:. So a rule an egg author wrote as:
required|string|regex:/^(paper|purpur)$/
was torn in two at the alternation. The first fragment would not compile, and the code that noticed that returned "accept it" — so the variable took any value at all. The second fragment became a rule nobody recognised and was thrown away.
Nothing was logged, and the panel showed the rule exactly as written. Pterodactyl eggs use alternations constantly, so any template imported with one has been running that variable unvalidated.
What changed
The rule string is scanned rather than split: a regex: is read through to its closing delimiter and its flags, so slashes and pipes inside a character class or behind a backslash stay part of the expression. Rules written after a regex are applied again, which they were not.
And an expression that will not compile now refuses the value rather than accepting it — blaming the template, not the person typing, and writing an error to the log that names the variable and the rule. That happens even when the value is empty, because a variable that is normally left blank would otherwise keep its broken rule secret until the day somebody filled it in.
What you may notice
A rule that was silently doing nothing now does something. If you imported an egg whose variable carries an alternation, that variable has been unvalidated; a value saved earlier may be refused the next time you save it. That is the fix working, but it is the one visible change.
The bundled templates are unaffected — every expression they ship is written without a pipe, deliberately, to work around this bug.
Upgrading
From the panel: Settings → Update now.