From 66b754136d15252da49c95397fc5cd736a87b67e Mon Sep 17 00:00:00 2001 From: John Dempsey <1750243+mcfnord@users.noreply.github.com> Date: Thu, 13 Aug 2026 14:01:46 +0200 Subject: [PATCH 1/2] CONTRIBUTING.md: point agent-assisted contributors at AGENTS.md Co-authored-by: ann0see <20726856+ann0see@users.noreply.github.com> Co-authored-by: Nils Brederlow <62596379+dingodoppelt@users.noreply.github.com> --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9b666045f6..6645bf58e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,6 +7,8 @@ We’d really appreciate your support! Please ensure that you understand the fol - Otherwise, please [post on the GitHub Discussions](https://github.com/jamulussoftware/jamulus/discussions) and say that you are planning to do some coding and explain why. Then we can discuss the specification. - Please begin coding only after we have agreed on a specification to avoid putting a lot of effort into something that may not be accepted later. +If you work with an AI coding agent, [AGENTS.md](AGENTS.md) is its entry point into this repository. Everything in this document applies to agent-assisted contributions without exception: you remain the author, and you are expected to understand and stand behind every line you submit. + ## Jamulus project/source code general principles From 25e9b584600100687592e9888d2f716eb857345a Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Thu, 13 Aug 2026 14:01:49 +0200 Subject: [PATCH 2/2] Add agent instructions for Jamulus Co-authored-by: John Dempsey <1750243+mcfnord@users.noreply.github.com> Co-authored-by: Peter L Jones --- AGENTS.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..9233689a51 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,70 @@ +# Jamulus — Agent Instructions + +Real-time networked music jamming app. Qt/C++ qmake project. Client and server share one codebase; entry point: `src/main.cpp`. Configure `CONFIG` flags in `Jamulus.pro`. + +**Make the smallest possible change. One logical change per PR. Never mix refactoring with fixes/features.** + +Priority order: Stability > Low latency / real-time safety > Backwards compatibility > Maintainability > New features. This order resolves conflicts only — new features are welcome. + +--- + +## Build + +Linux: `qmake && make` (use `qmake-qt5` on Fedora). Headless server: `qmake "CONFIG+=headless serveronly" && make`. First run: `git submodule update --init` (oboe for Android). Run `make distclean` before re-running `qmake` with different `CONFIG` flags. Full per-platform table: `COMPILING.md`. + +macOS: `qmake QMAKE_APPLE_DEVICE_ARCHS=arm64 QT_ARCH=arm64 -spec macx-xcode Jamulus.pro` (Use `x86_64` on Intel Macs; `macx-clang` if using `make`). Then `xcodebuild build`, and `macdeployqt ./{Debug,Release}/Jamulus.app`. + +**Testing:** run headless server (args `-s -n`), connect a client to `localhost`, exercise the change; use the JSON-RPC API (`docs/JSON-RPC.md`) where possible. State what you tested in the PR with evidence. GitHub Actions builds multiple platforms — on failure read the failing step's log. + +## Never Do + +**`Never Do` rules are absolute** + +- Block/slow real-time paths: audio callbacks (`src/sound/`), sockets (`src/socket.cpp`), server mixing timer (`src/server.cpp`). No allocation, file I/O, or excessive logging there; preallocate buffers, keep lock-free — stalls = audible dropouts. +- Trust values from remote clients — validate size/bounds on all network input (malformed input crashes). +- Edit generated files (`moc_*.cpp`, `ui_*.h`, `qrc_*.cpp`, `*.qm`) — regenerate; don't edit/reformat third-party code in `libs/`. +- Edit `ChangeLog` directly — use a `CHANGELOG:` line in the PR. + +## Always + +- Attach test evidence (logs/output) to the PR — never just assert something works. +- Say so if you did not run or verify something. + +## Ask first + +- Architecture changes (networking/protocol, threading, build system) — open an issue to discuss (see `CONTRIBUTING.md`). + +## Qt / portability + +- Minimum Qt: **5.12.2**. Qt 6 recommended (iOS: Qt 5.15+ required, Qt 6 iOS buggy). Guard newer APIs with `#if QT_VERSION >= QT_VERSION_CHECK(...)`. +- C++11 (C++17 on Android for Oboe). +- Preserve platform support. +- Desktop: Windows 10+, macOS 10.10+, Ubuntu 20.04+/Debian 11+. + +## Style (C / C++ / Obj-C++) + +- **CI uses clang-format** (version in `.github/workflows/coding-style-check.yml`). +- Run `make clang_format` before committing (works only after qmake). +- CI runs **shellcheck + shfmt** on `.sh` files; **pylint** (config: `.pylintrc`) on `.py` files in `tools/`. +- New contributions: AGPL 3.0+ license header. Pre-3.12.1dev code: GPL 3.0+ (see `CONTRIBUTING.md`). +- Use `tr ( "Hello %1" ).arg ( name )` for user-facing strings — never string concatenation. + +## JSON-RPC + +- Changing RPC methods (e.g. `src/clientrpc.cpp` / `src/serverrpc.cpp`) requires regenerating `docs/JSON-RPC.md` with `tools/generate_json_rpc_docs.py` (CI fails otherwise). +- Requires `--jsonrpcport` + `--jsonrpcsecretfile` at runtime. Binds to localhost by default. Secret requires ≥16 characters. + +## PR expectations + +- One logical change per PR — no unrelated cleanup or reformatting of untouched code. Discuss features in an issue before implementing. See `CONTRIBUTING.md`. +- Branch names starting with `autobuild` trigger CI builds on your fork. +- Follow `.github/pull_request_template.md`. Include `CHANGELOG:` line. Add `AUTOBUILD: Please build all targets` for skipped targets (iOS, Windows JACK, Linux armhf/arm64) if touched; see `.github/workflows/autobuild.yml`. +- Builds? Tested? Smallest change possible? Self reviewed against "Priority order" above? +- Disclose AI-generated text at the end of Comments/PRs. (e.g: `> 🤖 Used AI: , `) — never in code comments. + +## Read when relevant + +- `CONTRIBUTING.md` — process, style, licensing +- `COMPILING.md` — full build per platform, CONFIG flags table +- `docs/JAMULUS_PROTOCOL.md` — network protocol, packet IDs, ack rules +- `SECURITY.md` — security reporting