Stewarrd

Contributing to Stewarrd

Issues and pull requests are welcome on GitHub. For anything else, email james@ltl.so. The documentation is at stewarrd.app.

Discuss changes to client behavior, destructive actions, dependencies, or data formats before implementing them. Keep fixes focused. Prefer removing duplication to adding another abstraction, and extend existing tests when practical. Be respectful, specific, and considerate when reviewing others' work.

Development

Use Node 24.20 or newer within Node 24, npm, and TypeScript ESM.

npm ci --ignore-scripts
git config core.hooksPath .githooks
npm run check
npm run build
npm start

The server listens on port 8787 and creates local state in data/. For UI changes, also run npm run dev; Vite proxies API calls to the server. Never use production credentials for automated tests.

Before a pull request, run the relevant tests, types, lint, and formatting. Tests should prove behavior at a boundary, especially wrong external writes or data loss. Confirm a regression assertion fails when its safeguard is removed. Do not add coverage solely to increase the test count.

Never send commands to real download clients as part of a test without explicit permission for that environment. Dry-run policies do not make manual controls read-only. Do not commit credentials, private logs, tokens, or personal paths.

Pull requests and reports

Describe the problem, the resulting behavior, and the checks you ran. Include sanitized reproduction steps and the Stewarrd/client versions for bug reports. Report vulnerabilities privately using SECURITY.md. Contributions are licensed under the project's MIT license.

Maintainer releases

The application version is in package.json and package-lock.json. A stable vX.Y.Z tag must match both files. The release workflow reruns CI, then publishes Linux AMD64 images tagged X.Y.Z and latest to Docker Hub. Configure Actions variable DOCKERHUB_USERNAME and secret DOCKERHUB_TOKEN with repository write access. Tags are permanent; publish versions in increasing order.

Only after release approval, use npm version patch (or minor/major), then git push origin main --follow-tags. Pushing an ordinary commit or publishing the documentation does not publish an application image.

Documentation

The Pages workflow publishes only .site/ from main. It renders the public README, automation guide, contributing guide, security policy, and license into the shared layout in site/. Preview it locally with python3 -m http.server --directory .site. The custom domain is configured in GitHub Pages settings.