@@ -16,27 +16,26 @@ This project delivers **Stream Chat Android**, a modular SDK spanning low-level
1616
1717## Project structure
1818- ` stream-chat-android-client/ ` – core API client, REST/WebSocket, plugin hooks
19- - ` stream-chat-android-offline/ ` – persistence, sync, caching, retry workers
20- - ` stream-chat-android-state/ ` – state container shared by UI layers
2119- ` stream-chat-android-ui-common/ ` – theming, assets, shared UI helpers
2220- ` stream-chat-android-compose/ ` & ` stream-chat-android-ui-components/ ` – Compose and XML UI kits
2321- ` *-sample/ ` , ` stream-chat-android-ui-uitests/ ` , ` stream-chat-android-test/ ` – samples, integration, and shared test harnesses
2422- ` buildSrc/ ` , ` config/ ` , ` scripts/ ` , ` fastlane/ ` , ` metrics/ ` – build logic, lint configs, automation, release metrics, CI helpers
2523
26- > Modules are published; avoid leaking internal types across boundaries without coordinating version policy and changelog updates .
24+ > Modules are published; avoid leaking internal types across boundaries without coordinating version policy.
2725
2826## Build, test, and validation
29- - Format/licence: ` ./gradlew spotlessApply `
27+ - Format/licence: ` ./gradlew spotlessApply ` (auto-fix locally; CI runs ` spotlessCheck ` )
3028- Static analysis: ` ./gradlew detekt ` or module-scoped ` :module:detekt `
29+ - API dump: ` ./gradlew apiDump ` — regenerate public API dumps for any touched modules. Never manually edit ` *.api ` files.
3130- Unit tests: ` ./gradlew testDebugUnitTest ` (or ` :module:test ` for non-Android modules)
3231- UI snapshots: ` ./gradlew verifyPaparazziDebug ` (Compose) / ` ./gradlew shotVerify ` (Views)
3332- Instrumented suites: ` ./gradlew connectedAndroidTest ` or targeted ` :stream-chat-android-ui-uitests:connectedCheck `
3433- Full gate: ` ./gradlew check `
3534
36- Prefer module-scoped tasks while iterating; PRs should pass ` spotlessCheck ` , ` detekt ` , and relevant unit/UI suites before review.
35+ Prefer module-scoped tasks while iterating; PRs should pass ` spotlessCheck ` , ` detekt ` , ` apiCheck ` , and relevant unit/UI suites before review.
3736
3837## Coding principles
39- - ** API stability** : Public APIs are validated; favour additive changes and mark deprecations with clear migration paths ( ` DEPRECATIONS.md ` ) .
38+ - ** API stability** : Public APIs are validated; favour additive changes and mark deprecations with clear migration paths.
4039- ** Offline-first** : Respect sync contracts in offline/state modules—guard race conditions, idempotency, and background workers.
4140- ** UI parity** : Keep Compose and XML kits behaviourally aligned; update shared fixtures/tests when touching one side.
4241- ** Performance** : Maintain lazy flows, paging, and baseline profiles; avoid extra recompositions or heavy main-thread work.
@@ -45,7 +44,7 @@ Prefer module-scoped tasks while iterating; PRs should pass `spotlessCheck`, `de
4544
4645## Style & conventions
4746- Spotless-enforced Kotlin style (4 spaces, no wildcard imports, licence headers). Run ` ./gradlew spotlessCheck ` in CI parity.
48- - Compose components follow noun-based naming (` MessageList ` , ` ChannelListHeader ` ); previews use ` @StreamPreview ` helpers .
47+ - Compose components follow noun-based naming (` MessageList ` , ` ChannelListHeader ` ).
4948- Use ` @OptIn ` annotations explicitly; avoid suppressions unless documented.
5049- Backtick test names (for example: `` fun `message list filters muted channels`() `` ) for readability; keep helper extensions private/internal.
5150- Document public APIs with KDoc, including thread expectations and state notes.
@@ -59,7 +58,7 @@ Prefer module-scoped tasks while iterating; PRs should pass `spotlessCheck`, `de
5958
6059## Documentation & comments
6160- Update module README, ` docs/ ` , or API docs when altering setup, themes, or sample flows.
62- - Log deprecations or behavioural shifts in ` CHANGELOG.md ` and ` DEPRECATIONS.md ` .
61+ - Log deprecations or behavioural shifts in release notes via appropriate PR labels .
6362- Keep inline comments focused on intent (why), not mechanics; prefer KDoc for public APIs.
6463
6564## Security & configuration
@@ -68,7 +67,7 @@ Prefer module-scoped tasks while iterating; PRs should pass `spotlessCheck`, `de
6867- Sanitise logs and analytics payloads; follow ` SECURITY.md ` for vulnerability handling.
6968
7069## PR & release hygiene
71- - Target ` develop ` ; main mirrors released artifacts. Sync with release owners before touching versioning, publishing, or changelog scripts.
70+ - Target ` develop ` ; main mirrors released artifacts. Sync with release owners before touching versioning or publishing scripts.
7271- Keep commits imperative (` compose: Prevent duplicate typing indicators ` ) and scoped.
7372- Include test evidence in PR descriptions: Gradle task output, screenshots/screencasts for UI changes.
7473- Run ` assemble ` , relevant tests, and lint tasks locally before pushing. Update documentation alongside feature toggles.
@@ -78,7 +77,7 @@ Prefer module-scoped tasks while iterating; PRs should pass `spotlessCheck`, `de
7877- [ ] Maintain binary/API compatibility; document any intentional breakage.
7978- [ ] Honour offline/state invariants—cover edge cases like retries, reconnections, and message dedupe.
8079- [ ] Keep Compose/XML parity when modifying shared UI behaviour.
81- - [ ] Run Spotless and Detekt before finishing.
80+ - [ ] Run Spotless, Detekt, and ` apiDump ` before finishing.
8281- [ ] Add/refresh unit, UI, or snapshot tests for new behaviour.
83- - [ ] Update changelog/deprecation docs for user-visible changes.
82+ - [ ] Label PRs with appropriate release categories (e.g. ` pr:breaking-change ` ) for user-visible changes.
8483- [ ] Scrub logs/configs for secrets before committing.
0 commit comments