Contributing

How issues, patches, and bigger design changes land in Phosphor.

Before you open anything

Code style

Full conventions live in CONTRIBUTING.md. The shape of them:

Build and test

git clone https://github.com/fuddlesworth/PlasmaZones
cd PlasmaZones
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake --build . -j$(nproc)
ctest --output-on-failure

For an install instead of a dev build: -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr then sudo cmake --install .. For a portable build without KDE framework deps (daemon plus editor, no KCM), add -DUSE_KDE_FRAMEWORKS=OFF.

Tests use Qt Test (QTEST_MAIN, QCOMPARE, QVERIFY). Test behavior rather than implementation; mock D-Bus for daemon tests. Edge cases around zones (empty layouts, overlapping zones, invalid coordinates) tend to be where regressions hide.

Translations

UI strings are extracted with a CMake target, not edited by hand:

cmake --build build --target update-ts

This walks C++ and QML sources for calls wrapped in the translation helpers and updates the .ts files under translations/. Two important rules about which helper to use:

Commits

No mandated prefix list. The rule in CONTRIBUTING.md is "one logical change per commit" with a short summary on the first line and, optionally, a body explaining why. Every new file needs SPDX headers:

// SPDX-FileCopyrightText: 2026 YourName
// SPDX-License-Identifier: GPL-3.0-or-later

AI-assisted commits carry a Co-Authored-By: trailer naming the tool. The AI disclosure page covers the review loop and how the trailer is worded.

Pull request flow

  1. Branch from main.
  2. Before pushing, run the AI review loop. It catches most of what a reviewer would; see the AI-disclosure page for setup.
  3. Open the PR. CI runs the full test suite on Linux. Fix anything red.
  4. A human reviewer signs off. The human who merges owns the regression if one ships.

Where to file what

Licensing

Opening a pull request agrees that your contribution ships under the same license as the target repo: GPL-3.0-or-later for PlasmaZones; LGPL-2.1-or-later for the phosphor-* libraries marked for linking from non-GPL code; CC-BY-SA 4.0 for brand assets. The About page has the full breakdown and rationale for the split.