Files

6.2 KiB

AGENTS.md

Guidance for agentic coding tools working in moasdawiki-app.

Project Snapshot

  • Android app module: :app
  • Language: Java 17 (no Kotlin sources currently)
  • Build system: Gradle wrapper (./gradlew) + Android Gradle Plugin
  • Main package: net.moasdawiki.app
  • App depends on MoasdaWiki server module artifact: net.moasdawiki:moasdawiki-server

Environment And Baseline

  • Use the wrapper, not a globally installed Gradle: ./gradlew ...
  • Run commands from repository root.
  • Keep changes scoped; do not refactor unrelated files.
  • Preserve license headers in Java files.
  • Prefer additive, minimal-risk edits.

Build / Lint / Test Commands

Common Lifecycle Commands

  • Clean: ./gradlew clean
  • Build everything (assemble + checks): ./gradlew :app:build
  • Assemble debug APK: ./gradlew :app:assembleDebug
  • Assemble release APK: ./gradlew :app:assembleRelease
  • Install debug on connected device: ./gradlew :app:installDebug

Lint Commands

  • Run lint (default variant): ./gradlew :app:lint
  • Run debug lint only: ./gradlew :app:lintDebug
  • Run release lint only: ./gradlew :app:lintRelease
  • Apply safe lint fixes: ./gradlew :app:lintFix

Unit Test Commands

  • Run all unit tests: ./gradlew :app:test
  • Run debug unit tests: ./gradlew :app:testDebugUnitTest
  • Run release unit tests: ./gradlew :app:testReleaseUnitTest

Run A Single Unit Test (Important)

  • Single test class: ./gradlew :app:testDebugUnitTest --tests "net.moasdawiki.app.YourTestClass"
  • Single test method: ./gradlew :app:testDebugUnitTest --tests "net.moasdawiki.app.YourTestClass.yourTestMethod"
  • Wildcard match: ./gradlew :app:testDebugUnitTest --tests "*YourTestClass*"

Notes:

  • Use fully-qualified class names for reliable filtering.
  • If the filter reports no tests found, verify package + method names.
  • Keep Debug test task unless you specifically need release behavior.

Instrumentation Test Commands

  • Run all connected instrumentation tests: ./gradlew :app:connectedDebugAndroidTest
  • Run one instrumentation class: ./gradlew :app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=net.moasdawiki.app.YourAndroidTestClass
  • Run one instrumentation method: ./gradlew :app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=net.moasdawiki.app.YourAndroidTestClass#yourTestMethod

High-Value Working Agreement

  • Before editing, inspect nearby code and follow existing patterns.
  • After editing, run the narrowest meaningful verification first.
  • For behavior changes, prefer adding/updating tests when test infra exists.
  • Do not introduce new build tools or formatting frameworks unless asked.

Source Layout (Current)

  • App code: app/src/main/java/net/moasdawiki/app/
  • Resources: app/src/main/res/
  • Manifest: app/src/main/AndroidManifest.xml
  • Gradle module config: app/build.gradle
  • Root build config: build.gradle, settings.gradle, gradle.properties

There are currently no app/src/test or app/src/androidTest files in this repository snapshot.

Java Style Conventions To Follow

Formatting

  • 4-space indentation, no tabs.
  • Opening brace on same line for classes/methods/control blocks.
  • Keep methods reasonably focused; avoid large unrelated rewrites.
  • Prefer one statement per line for readability.
  • Preserve existing block comments and Javadoc style.

Imports

  • Use explicit imports; avoid wildcard imports.
  • Group imports with blank lines by domain:
    1. android.*
    2. androidx.*
    3. net.moasdawiki.*
    4. java.*
  • Keep import order stable and consistent within each group.

Types And Nullability

  • Use concrete types unless abstraction improves clarity.
  • Follow existing nullability annotations (@NonNull, @Nullable).
  • Annotate parameters/returns where null-safety is non-obvious.
  • Prefer immutable locals/fields (final) where practical.
  • Use boxed types only when null is a real state.

Naming

  • Classes: PascalCase (MainActivity, SynchronizeWikiClient).
  • Methods/fields/local variables: camelCase.
  • Constants: UPPER_SNAKE_CASE.
  • Android log tags: short static constant named TAG.
  • Preference keys/constants belong in Constants-style central locations.

Control Flow And Readability

  • Prefer early returns for invalid preconditions.
  • Keep nesting shallow when possible.
  • Extract helper methods for repeated logic.
  • Use descriptive method names that reflect side effects.

Error Handling And Logging

  • Catch specific exceptions whenever practical.
  • Log with Android Log at appropriate level (d, i, w, e).
  • Include exception object when logging failures.
  • Convert low-level failures into domain-friendly outcomes for callers.
  • For user-visible failures, pair logs with UI feedback (Toast/status text).
  • Avoid swallowing exceptions silently.

Threading / Android Behavior

  • Keep network and disk work off the UI thread.
  • UI updates must run on UI thread (runOnUiThread(...) pattern).
  • Continue using executor-based async style already present.
  • Preserve lifecycle-safe behavior in Activity/Fragment methods.

Testing Expectations For Agents

  • If you change pure logic, add or update a unit test.
  • If you change Android component behavior, prefer instrumentation tests when feasible.
  • For low-risk refactors, run at least targeted lint + targeted tests.
  • For broader edits, run :app:lint and :app:testDebugUnitTest.

Dependency And Build File Edits

  • Keep dependency changes minimal and justified.
  • Match existing dependency declaration style in touched file.
  • Do not upgrade AGP/Gradle/SDK versions unless explicitly requested.
  • Call out deprecation warnings you encounter during Gradle runs.

Commit And PR Hygiene (For Agents)

  • Make small, reviewable commits with clear intent.
  • In commit messages, explain why the change is needed.
  • Include verification commands run and their outcome in PR notes.
  • Do not include unrelated formatting churn.

Cursor/Copilot Rule Ingestion

Checked in this repository:

  • .cursorrules: not present
  • .cursor/rules/: not present
  • .github/copilot-instructions.md: not present

If these files are added later, agents should treat them as higher-priority repository instructions and merge them into this guidance.