Contributing¶
This is a solo, personal project — but if an agent (or future-you) is touching it, follow
the same rules the tooling enforces. These rules live in AGENTS.md and are summarized
here.
Branch policy (mandatory)¶
- Never commit directly to
main. -
Every change gets its own branch:
feature/<slug>— new capabilityfix/<slug>— bug fixchore/<slug>— tooling, docs, CI
-
Commit on the branch, push it, and open a pull request.
- Merge to
mainonly when the branch's CI is fully green.
The verification sweep¶
Before pushing any branch, run the full sweep locally and confirm every step passes:
export JAVA_HOME="$HOME/.jdks/temurin-17"
./gradlew ktlintCheck detekt lint testDebugUnitTest assembleDebug
CI runs the same sweep on every PR/push. Never leave a red build behind — fix locally, push again.
Changelog discipline¶
Every PR that lands user-visible or structural changes must update CHANGELOG.md
under the ## [Unreleased] heading, describing exactly what was added/fixed/changed. The
[Unreleased] section is a project invariant: keep it, keep it honest, and trim it only
when a release is cut.
Style & sanity¶
- Run
./gradlew ktlintFormatand let the formatter decide — don't hand-format. - Dependency/plugin versions live only in
gradle/libs.versions.toml. - Keep pure logic in
inject/,settings/, and other non-framework code, and cover it with JVM unit tests. - Don't hand-edit generated files (
build/,lint-baseline.xml,detekt-baseline.xml,local.properties, signing files). - Don't commit secrets, signing keys or
local.properties. - Load the relevant skill before touching those areas:
skills/ad-engine/,skills/theming/,skills/webview-security/,skills/optimization/.