Backend environment for match hosting for lance.blue

feat(match-launch): let the manifest carry the scenario itself master

A match could only play a scenario baked into the image, named by path. It can now carry the .mms whole in scenario.content instead, which is what a generated fight - a daily challenge - needs to be launchable at all. Exactly one of scenario.name and scenario.content: a manifest that gives both disagrees with itself about which fight this is, and guessing costs somebody their match. Boards are unchanged - a carried scenario still names boards that have to be in this image, and staging a .board the same way is left in TODO. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Change-Id: I27cea963ab10d71a2df704da46279c0aba125dec


Author permadeath.com Co-author Claude Opus 5 (1M context) Committer Tangled Date Commit 7b671c82 Parent 72ed49d9 Change ID I27cea96