Imported from brayan/todozy (
AGENTS.md). Install upstream withnpx skills add brayan/todozy. Copyright stays with the author.
Repository Guidelines
Project Structure & Module Organization
- Kotlin DSL multi-module Gradle. Entry point in
app/with DI wiring. Core business rules indomain/; shared helpers live inutility/kotlin-utiland Android extensions inutility/android-util. - UI kit split into
ui-component/public(contracts) andui-component/impl(views/resources). Features live underfeature/<name>/{public,impl}(task-list, task-form, task-history, task-details, alarm, settings, about, splash, navigation) with data/domain/presentation layers. - Platform integrations (DB, logging, Crashlytics) sit in
platform/impl. Resources stay per module; non-transitive R is on, so import the correct moduleR. - Dependency aliases and SDK versions live in
gradle/libs.versions.toml. Prefer those over hardcoded values; shared Gradle wiring sits inbuild-logicconvention plugins (todozy.*). - Whenever Codex is asked to make changes, it must present a plan first and wait for my explicit confirmation before coding.
Build, Test, and Development Commands
./gradlew assembleDebug— builds with AGP 8.10.1, Kotlin 1.9.22, Java 17, compileSdk 36/targetSdk 35/minSdk 24../gradlew test— JVM unit tests across modules../gradlew ktlintCheck(orktlintFormat) — Kotlin style enforcement../gradlew checkCrossModuleRImports— fails on cross-moduleRimports; run before PRs../gradlew clean— clear build outputs if caches misbehave.
Coding Style & Naming Conventions
- ktlint defaults (4-space indent, ordered imports, trailing commas off). Keep Android types out of
domain. - Naming:
PascalCasefor classes,camelCasefor members,UPPER_SNAKE_CASEfor constants, lowercase packages. Suffix patterns:*UseCaseImpl,*RepositoryImpl,*ViewModel,*Mapper. - Favor view binding for XML, Koin for DI modules under
di/, andjava.time(desugared) over legacy date APIs.
Testing Guidelines
- Stack: JUnit4, MockK, coroutine-test, AndroidX test libs. Write fast JVM tests; mock navigation/DB/analytics boundaries.
- Mirror package paths in
src/test/java(e.g.,TaskListViewModelTest,CompleteTaskUseCaseImplTest). Cover mappers, repositories, and business rules before UI polish. - CI runs
assembleDebug,test, andcheckCrossModuleRImports; keep it green.
Commit & Pull Request Guidelines
- Commits are small, imperative, and single-purpose (e.g., “Migrate time picker theme to Material3 overlay”).
- PRs include: summary, linked issue, screenshots for UI changes, and results for
assembleDebug,test,ktlintCheck,checkCrossModuleRImports. Call out SDK/AGP bumps, resource moves, or permission changes and update docs when they apply.
Security & Configuration Tips
- Keep secrets out of VCS; only the checked-in
google-services.jsonremains. Store local keys outside the repo and configure paths inlocal.properties. - Avoid verbose logging in release builds; confirm Crashlytics toggles when adjusting build types. Keep FAB tint/icon contrast consistent with the Material theme and brand colors.