Skip to content

Contributing

Work from this project directory. Keep changes limited to Elsewindow and its explicit published dependency contract.

Before submitting a change:

make format
make check

Packaging changes also require make package reproducibility smoke. Documentation changes require make docs-audit. Workflow changes require make validate-actions. Lifecycle or image changes require make live-preflight and make live-test; installer changes require make xpra-installer-test.

Changes to package installation or image preparation also require the relevant container acceptance target from Development. Changes to Xpra arguments require a fresh comparison with both canonical fork YAML files and tests of the complete assembled argv.

Direct Python pins belong in the matching requirements*.in file. Each tool input extends requirements.in; the two packaged Xpra inputs are independent. Run make lock and review all eight generated .txt locks after changing a direct dependency. Do not hand-edit a lock.

Changelog and release intent

Add release-worthy changes to the existing ## Unreleased section in CHANGELOG.md. Keep .version unchanged in an ordinary pull request: multiple changes and multiple merged pull requests may accumulate under Unreleased before a maintainer deliberately prepares a release.

Changing CHANGELOG.md triggers the dedicated PR metadata workflow. It copies the newest populated level-two section—normally ## Unreleased, even when .version did not change—into a marker-delimited block in the pull-request body. Manual text outside that block is preserved. Do not edit or duplicate the marker lines; update the changelog or write outside the managed block.

Only a deliberate release change advances .version and moves the accumulated notes into one matching dated ## [X.Y.Z] - YYYY-MM-DD section. Follow the release contract for that operation.

Review for these properties:

  • no secondary authentication or reconnect path;
  • no forwarding or Xpra TCP listener;
  • cleanup targets only recorded owned resources;
  • errors remain bounded and path-free;
  • profile values have one YAML authority;
  • package and image operations fail closed before mutation or publication;
  • internal links are relative and repository-owned text is English;
  • no source, test, documentation, or tool from another application project is present.

Do not commit generated caches, environments, image descriptors, package archives, credentials, SSH material, or host paths.