--- import Base from '../layouts/Base.astro'; import PageHeader from '../components/PageHeader.astro'; import platform from '../data/platform.json'; import { brand } from '../lib/brand.mjs'; /** * `/community/` — PLAN.md §10 and §14 N3, built in phase 4. * * --------------------------------------------------------------------------------------- * WHY IT IS IN THIS PHASE AT ALL * --------------------------------------------------------------------------------------- * §13's phase table never assigned it one. §10 specifies the page and §14 N3 specifies its * contents, and the header nav and footer have both linked it since phase 1 — so it was a * page the site pointed at and no phase built. The org lead folded it into phase 4 on * 2026-08-20 rather than leaving it to be discovered by the link checker (D23). It is a * marketing page with no new machinery, so this is where it fits. * * --------------------------------------------------------------------------------------- * THE HONEST SPLIT, WHICH IS THE WHOLE POINT OF THE PAGE * --------------------------------------------------------------------------------------- * §14 N3 is explicit: this page describes a split rather than a single channel, because the * obvious sentence — "found a bug? open an issue" — is currently false. Gitea registration * is disabled on this instance, so the code is publicly readable and nobody outside the org * can file anything against it. Discord is therefore the front door in fact, not just in * preference (D10), and saying so is cheaper for a reader than letting them find the * sign-up page and its refusal. * * N3 also records that this page is written the same way whether or not registration is * later reopened — only one sentence changes. That sentence is marked below, so whoever * changes the Gitea configuration can find it without rereading the page. * * The security address comes from `brand.json` and appears nowhere in this file. D13 * publishes a personal address on the understanding that moving to a role address later is * an edit to a mounted file, and `checkFacts.mjs` fails the build if an address is typed * into any source file — including this one, which is the file most likely to want to. */ const title = 'Community'; const description = 'Where to ask, where the code is, and how to report a security problem.'; const gitea = `${platform.gitea.base}/${platform.gitea.org}`; ---

This is a small project run by people with day jobs. There is no support desk and no ticket queue, which is worth knowing before you choose where to put a question — one of these channels answers in minutes and one of them may not answer at all.

Contributing

What is useful, in order

  1. Run it and say what broke

    The install path is the priority of this whole project, and the most valuable thing anyone outside it can do is walk it on a machine we have never seen and report where it stopped making sense.

  2. Build a module for another game

    There is one module and it is Ultima Online, so the claim that this platform is game-agnostic is currently an argument rather than a demonstration. The Integration Kit exists to be followed by somebody outside this project — and it stays marked draft until it has been.

  3. Fix the documentation

    Documentation is versioned alongside the code it describes and a change is not finished until the docs match it. If something you read was wrong, that is a bug of the same kind as any other.

All of it is free software under the GPL-3.0-or-later, and contributions carry one house rule worth knowing before you start: work done with AI assistance has to say so — a box on the pull request and a trailer on the commit. Undisclosed AI-generated contributions get closed. Every repository's CONTRIBUTING.md has the details.