Roomote is early in its public project shape. Right now, the most valuable contribution is a well-written issue, not a pull request. Maintainers triage issues actively, and a clear bug report or focused feature request helps far more than an unrequested diff.
- Roomote does not generally accept unsolicited community pull requests. Please do not open a PR unless a maintainer has explicitly invited it in an issue or discussion.
- The best way to help: open a well-scoped issue with reproduction steps, expected vs actual behavior, and your deployment context. The issue forms walk you through what maintainers need.
- Pull requests without a maintainer invitation or a clear linked issue will likely be closed without review so triage stays high-signal.
- When a PR has been invited: keep it small and scoped, link the issue, and include tests or a clear manual validation note when changing behavior.
mise install
pnpm install
pnpm lint
pnpm check-types
pnpm testUse the narrower package-level test commands from AGENTS.md when a full suite
is not necessary.
Roomote ships a single product version for the monorepo (not per-package npm
releases). Changesets files are the
authoring format for bump level + release notes; workspace package.json
versions are frozen and never bumped. The canonical version is
the root package.json field and is published as GitHub Release / tag vX.Y.Z.
Optional contributor entrypoint when your change should show up in the changelog:
pnpm changesetAny @roomote/* package selection is equivalent — only the bump level is read.
See .changeset/README.md.
- Merge work to
develop(squash), adding changesets for user-visible changes when practical. - A maintainer uses the
changeset-release-prskill to audit missing notes, runpnpm run version, and open one Release Roomote X.Y.Z PR containing the final version bump andCHANGELOG.mdentry. - Squash-merge that release PR. Automation cuts a frozen
release/vX.Y.Zbranch at the version-bump commit and opens or refreshes a PromotevX.Y.Zto production PR (release/vX.Y.Z→main). By default, work merged todevelopafterward waits for the next release. Before promotion, a maintainer may amend the current version's notes withpnpm run version -- --amend, merge those amendments todevelop, and explicitly dispatch the Release workflow for that version. The workflow only fast-forwards an open, unshipped candidate with no pending changesets. - Merge that promote PR with a merge commit (branch rules on
mainallow merge only;developstays squash-only). Tagging (vX.Y.Z), GHCR image publish (latest), and the GitHub Release follow frommain/ tag workflows. Product tagging requires theRELEASE_BOT_TOKENrepository secret.
To replace an unshipped candidate rather than refresh it, run
pnpm run version -- --supersede <patch|minor|major> after auditing from the
last published tag. This carries the unshipped notes into the replacement
version; close the older Promote PR before promoting the replacement.
Before promotion, monitor both CI and reviews on the current Promote PR head. Passing release-preparation checks does not validate the candidate; unresolved review findings and missing required approvals remain blockers even with green CI. Repeat validation after any candidate refresh or reconciliation.
When production hotfix history conflicts with a frozen candidate, use the explicitly authorized Reconcile Release Candidate workflow, not a manual release-branch push. It applies an independently reviewed merge tree with exact candidate/main pins and no newer develop content. The ordinary resolution PR is review-only and must not be merged. See the release skill's reconciliation procedure for preparation, approval, dispatch, and post-push monitoring. This procedure does not merge the Promote PR, tag, publish, or deploy a release.
All contributors are required to sign the Roomote Contributor License Agreement before their pull requests can be merged.
Signing is handled automatically on your first pull request: the CLA Assistant bot posts a comment with instructions, and you sign by replying with:
I have read the CLA Document and I hereby sign the CLA
You only need to sign once; your signature applies to all your future contributions to this repository.
By contributing, you agree that your contribution is licensed under the same
license as the repository. See LICENSE.