-
Notifications
You must be signed in to change notification settings - Fork 1
Contributing
How changes land in GRIMP, and what the CI gate expects from you. If you're building UI, read the UI Style Guide alongside this.
Work goes through pull requests:
- Branch off
main. - Make your change, with tests where the change is testable.
- Open a PR. The template asks what you changed, what you ran, and walks the checklist.
- CI runs the Checks job: format check, typecheck, tests, and a production build. It has to go green.
- A maintainer reviews and merges.
main is protected: the Checks job is required and force-pushes are blocked. Merged branches are kept on the remote as a historic record, so don't delete them after merge.
Run these locally; they're exactly what CI runs:
npm run format # Prettier writes formatting (config is in the repo)
npm run typecheck # tsc --noEmit
npm run test # Vitest suite
npm run build # production buildIf your change is user-facing, add a line to CHANGELOG.md under Unreleased. Internal refactors and CI plumbing don't need one.
Tests live next to the code in __tests__/ directories and run on Vitest. New behavior ships with tests; bug fixes ship with a test that would have caught the bug.
Byte-exact round-trip against the game's own serializer is a core product promise. If you touch the importer (src/import/) or exporter (src/export/), run the sweep against a real fork's map corpus before opening the PR:
SS14_MAPS_DIR=<your-fork>/Resources/Maps npx vitest run src/__tests__/parity-sweep.test.tsIt round-trips every map in the corpus and fails on any new byte drift, import failure, or non-idempotent output. Known-justified drift is documented in the test; anything new is a regression.
- Formatting is Prettier's call, not a review topic. Run
npm run formatand move on. - UI work follows the UI Style Guide: theme tokens over hardcoded hexes, one accent color, dense flat chrome, pixel art rendered pixelated.
- Comments must match the code they describe. If you change behavior, update the comment in the same commit.
No Space Station 14 game content, ever. The editor ships with zero game assets and discovers a fork's content from disk at runtime. That means no test maps, no RSI sprite sheets, no prototype YAML, not even as test fixtures. Tests that need game-shaped data construct it inline.
The backlog lives in GitHub Issues. Most open issues carry a scoping comment with grounded pointers into the code (what exists, what's missing, known gotchas), so read the comments before starting work. If you're planning something new, open an issue first so the approach can be sanity-checked before you build it.
Releases are tag-driven: pushing a v* tag builds the Windows portable .exe and Linux AppImage and assembles a draft GitHub release, with the release body pulled from that version's CHANGELOG.md section. A maintainer reviews and publishes the draft. At release time the Unreleased changelog section rolls over into the new version's entry.