Contributing

Thank you for helping build The Horizontal Front as a digital commons.

Read the project charter, governance process and relevant design documents before proposing a change. Contributions must preserve the game's satire of capitalism and the charter's protected commitments.

Where to read next

The documentation index routes different kinds of work to their authoritative references:

Before starting

How changes reach main

Work happens on a branch and arrives through a pull request. Nothing is pushed to main directly.

Branch names take a prefix describing the kind of work:

Prefix For
feature/ A new capability, mechanic or piece of tooling.
bugfix/ Repairing behaviour that was already meant to work.
docs/ Changes whose product is documentation, including process and decision records.
release/ Preparing a release, named for its version, as in release/0.2.1.

Follow the prefix with a short hyphenated description rather than an issue number, so the branch says what it does: feature/repeatable-browser-verification rather than feature/20.

The Protect main ruleset enforces the rest, and the protected pull-request path records it in full: a pull request is required, squash is the only merge method, history on main stays linear, review threads must be resolved, and the required status checks must pass before a merge is offered.

Three checks currently gate a merge: Verify, Browser smoke tests and Offline play. A fourth, Cloudflare Pages, reports on every pull request and does not gate one — it is the hosting preview building, not a verification of the change. No approving review is required either, so in practice those three checks are the gate.

What a good pull request contains

Fill in the pull-request template rather than replacing it. Beyond the template, a useful pull request here:

That last one exists because prose about code goes stale silently. Some of it is now checked — the grammar reference generates the passages that restate a schema, and a documented identifier must exist in the source — but no check knows whether a described behaviour is still true. Saying which document states the rule you changed is how that gets noticed by a reader, which is the only thing that can notice it.

Charter check

Before submitting work, answer these questions:

If any answer is uncertain, open an issue before proceeding.

Verification

Run the smallest checks relevant to the change. For application integration, run:

npm run build

The build includes the automated project-policy and documentation-integrity checks. Run focused unit tests for engine rules and validate episode content when those areas change.

Report verification using the three authoritative levels in verification evidence. For each level, state Claimed with the required evidence or Not claimed with the reason; never promote source checks into browser evidence or browser automation into human acceptance. Acceptance criteria should require only the levels proportionate to the change. A schema or content correction may need only automated/source verification; a navigation or input change usually needs browser-flow verification as well; and rhythm tuning, visual clarity, humour or game feel commonly need all three. Choosing required levels is the authoritative version of that judgement.

When browser-flow evidence is required, follow the browser-verification guide. Run its repeatable smoke suite with npm run test:browser and use the isolated browser configuration for AI review.

Licensing contributions

Software contributions are submitted under AGPL-3.0-or-later. Original writing, documentation, artwork, music, sound and other cultural contributions are submitted under CC-BY-SA-4.0, unless an explicit asset record establishes a compatible exception.

By intentionally submitting work for inclusion, you agree that it may be distributed under the applicable project licence and represent that you have the necessary rights to contribute it. You retain copyright in your contribution. Read the licensing guide and keep authorship and asset provenance clear.