diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c586309..00a2493 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ name: Android Release Rho.Studio® on: workflow_dispatch: push: - branches: [ "Pre-release-v102" ] + branches: [ "pre-release-v103" ] pull_request: branches: [ "main" ] @@ -23,6 +23,12 @@ jobs: distribution: 'temurin' cache: gradle + # Add this step here + - name: Decode Google Services JSON + env: + GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }} + run: echo $GOOGLE_SERVICES_JSON | base64 --decode > app/google-services.json + - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..a1e5038 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,90 @@ +# Architecture & Contribution Guide: Rho Studio UI + +## 1. Project Vision & Architecture +Rho Studio UI is a modern Android application built with **Jetpack Compose** and **MVVM** following a **Single-Activity Architecture**. + +To achieve scalability, implement **Domain-Driven Design (DDD)** and **Clean Architecture** principles. This ensures a clear separation of concerns, framework independence, and high testability. + +--- + +## 2. Feature Implementation Workflow (Step-by-Step) + +When adding a new feature (e.g., "Settings", "Profile"), follow this **Inside-Out** sequence to ensure architectural integrity: + +### Step 1: Domain Layer (The Logic) +1. **Define Models**: Create pure Kotlin data classes in `core:domain` (e.g., `Settings.kt`). +2. **Define Repository Interface**: Add an interface in `core:domain` describing the data contract. +3. **Create Interactor (UseCase)**: Implement the business logic by inheriting from `BaseUseCase
`.
+ * **P (Parameters)**: Use a `data class` for multiple inputs or `Unit` for none.
+ * **R (Return)**: The raw data type (Dagger/BaseUseCase will wrap it in `Result `. This architectural anchor standardizes:
+ - **Thread Safety**: Automatic execution on `Dispatchers.IO`.
+ - **Result Wrapping**: Consistent use of the `Result `: Standardizes execution context (Coroutines) and error handling.
- `SessionManagerInterface`: Defines the contract for session operations without revealing implementation details.
- `LoginUseCase`: Encapsulates the authentication transaction.
- `LogoutUseCase`: Orchestrates atomic session teardown.
+```mermaid
+flowchart TB
+ subgraph UseCases["Use Cases (Interactors)"]
+ LU["LoginUseCase
MainActivity, NavHost"]
@@ -84,15 +103,169 @@ flowchart TD
UI_CORE --> DOMAIN
DOMAIN -.->|"implemented by"| DATA
+
+ linkStyle default stroke:#D32F2F,stroke-width:2px
+
+ classDef appNode fill:#D32F2F,stroke:#FFFFFF,color:#FFFFFF
+ classDef featureNode fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+ classDef coreNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ classDef domainNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ classDef dataNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+
+ class APP appNode
+ class AUTH,HOME featureNode
+ class UI_CORE coreNode
+ class DOMAIN domainNode
+ class DATA dataNode
+
+ style APP fill:#D32F2F,stroke:#FFFFFF,color:#FFFFFF
+ style AUTH fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+ style HOME fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+ style UI_CORE fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style DOMAIN fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style DATA fill:#D3D3D3,stroke:#D32F2F,color:#000000
+```
+> [!Tip]
+> `:features` depend only on `:core` modules (`:core:domain`, `:core:ui`), preventing circular dependencies. Feature-specific models remain within their respective feature modules.
+
+### 2.3 Multi-Tier Dependency Injection (Dagger 2 + KSP)
+We utilize a high-performance Directed Acyclic Graph (DAG) generated at compile-time using KSP to ensure zero runtime overhead. The graph is organized into three tiers to mirror the application lifecycle:
+
+#### DI Conceptual Framework
+
+| Concept | Implementation | Purpose |
+| :--- | :--- | :--- |
+| **The Request** | `@Inject` constructor | Objects request dependencies via constructor injection, ensuring loose coupling and testability |
+| **The Recipe** | `@Module` with `@Provides` / `@Binds` | Dagger Modules define how to provide complex objects, interfaces, or library classes |
+| **The Manager** | `@Component` | Bridge between providers (Modules) and consumers (Activities/ViewModels). Validates graph at compile-time |
+| **The Lifecycle** | `@Scope` (e.g., `@Singleton`, `@UserScope`) | Ensures objects live exactly as long as their context (App lifecycle vs. User session) |
+| **Annotation Retention** | `@Retention(AnnotationRetention.RUNTIME)` | Ensures annotation metadata is available to Dagger compiler and at runtime |
+| **Multibinding Keys** | `@MapKey` | Identifies which class type to use as a Key in Dagger's internal Maps |
+| **Lazy Provisioning** | `Provider
Map
- Loading states
- Error handling"]
+ PV["BaseViewModel.kt
- launchSafe
- isLoading state"]
HV["HeaderViewModel.kt
- Session state bridging"]
PH["PageHeader.kt"]
- PF["PageFooter.kt"]
end
subgraph Auth["Authentication Feature"]
LS["LoginScreen.kt"]
- LVM["LoginViewModel.kt
- Form state
- Debounced validation"]
+ LVM["LoginViewModel.kt"]
end
subgraph Home["Home Feature"]
HS["HomeScreen.kt"]
- HVM["HomeViewModel.kt
- Home state
- Session termination"]
+ HVM["HomeViewModel.kt"]
end
MA --> LS
@@ -139,34 +311,86 @@ flowchart TB
LVM --> PV
HVM --> PV
HV --> PV
-
- style Navigation fill:#e94560,stroke:#c62828,color:#ffffff
- style Shared fill:#16213e,stroke:#0f3460,color:#ffffff
- style Auth fill:#1a1a2e,stroke:#e94560,color:#ffffff
- style Home fill:#1a1a2e,stroke:#e94560,color:#ffffff
+
+ linkStyle default stroke:#D32F2F,stroke-width:2px
+
+ classDef navNode fill:#D32F2F,stroke:#FFFFFF,color:#FFFFFF
+ classDef sharedNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ classDef authNode fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+ classDef homeNode fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+
+ class MA navNode
+ class PV,HV,PH sharedNode
+ class LS,LVM authNode
+ class HS,HVM homeNode
+
+ style Navigation fill:#D3D3D3,stroke:#D32F2F,color:#000000
+ style Shared fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style Auth fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style Home fill:#333333,stroke:#D32F2F,color:#FFFFFF
```
### 3.2 Domain Layer (Business Logic)
**Goal**: House the platform-agnostic business rules and "truth" of the application.
- **Pure Kotlin**: This layer has zero dependencies on the Android Framework (no `Context`, no `Parcelable`).
-- **Use Cases (Interactors)**: Each business action is encapsulated in a dedicated Use Case (e.g., `LoginUseCase`). This promotes the Single Responsibility Principle and makes logic reusable across ViewModels.
- **Entities**: Data classes like `User` and `Credentials` represent the core business models.
+- **Use Cases (Interactors)**: Each business action is encapsulated in a dedicated Use Case (e.g., `LoginUseCase`). This promotes the Single Responsibility Principle and makes logic reusable across ViewModels.
+- **BaseUseCase Pattern**: All interactors inherit from `BaseUseCase
- Validate Credentials
- Authenticate via Firebase
- Commit to SSOT"]
+ LogU["LogoutUseCase
- Clear session
- Reset global state"]
+ VCU["ValidateCredentialsUseCase"]
+ RTU["RefreshTokenUseCase
(Planned)"]
+ end
+
+ subgraph Models["Domain Models"]
+ U["User.kt"]
+ C["Credentials.kt"]
+ AT["AuthToken.kt"]
+ end
+
+ subgraph Contracts["Repository Contracts"]
+ AR["AuthRepository"]
+ SR["SessionRepository"]
+ end
+
+ UseCases --> Models
+ UseCases --> Contracts
+
+ linkStyle default stroke:#D32F2F,stroke-width:2px
+
+ classDef useCaseNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ classDef modelNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ classDef contractNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+
+ class LU,LogU,VCU,RTU useCaseNode
+ class U,C,AT modelNode
+ class AR,SR contractNode
+
+ style UseCases fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style Models fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style Contracts fill:#D3D3D3,stroke:#D32F2F,color:#000000
+```
+
### 3.3 Data Layer (Infrastructure)
**Goal**: Manage data acquisition, persistence, and external service coordination.
- **Repository Pattern**: Acts as a mediator between different data sources (Network, Database) and the Domain Layer.
- **Session Management**: `SessionManager` serves as the Single Source of Truth (SSOT) for the user's authentication state, exposing `StateFlow
- Mock login()"]
- SRI["SessionRepositoryImpl
- SharedPreferences"]
+ ARI["AuthRepositoryImpl
- Firebase Auth"]
+ SRI["SessionRepositoryImpl
- Jetpack DataStore"]
end
- subgraph Sources["Data Sources (Planned)"]
- Remote["Remote API
- Firebase Auth"]
- Local["Local Storage
- Room Database"]
+ subgraph Sources["Production Infrastructure"]
+ Remote["Firebase Auth SDK"]
+ Local["Jetpack DataStore PII"]
end
SM --> SRI
ARI --> Remote
SRI --> Local
+
+ linkStyle default stroke:#D32F2F,stroke-width:2px
+
+ classDef ssotNode fill:#D32F2F,stroke:#FFFFFF,color:#FFFFFF
+ classDef repoNode fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+ classDef sourceNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+
+ class SM ssotNode
+ class ARI,SRI repoNode
+ class Remote,Local sourceNode
+
+ style SSOT fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style Repos fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style Sources fill:#D3D3D3,stroke:#D32F2F,color:#000000
+```
+#### Session State Machine
+
+```mermaid
+flowchart LR
+ INIT["Uninitialized"] -->|"initialize()"| CHECK["Checking"]
+ CHECK -->|"Valid token found"| AUTH["Authenticated"]
+ CHECK -->|"No token / expired"| GUEST["Guest"]
+ AUTH -->|"logout()"| GUEST
+ GUEST -->|"login()"| AUTH
+
+ linkStyle default stroke:#D32F2F,stroke-width:2px
+
+ classDef stateNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+
+ class INIT,CHECK,AUTH,GUEST stateNode
+```
+#### Authentication Flow Architecture
+```mermaid
+flowchart TB
+ subgraph UI["UI Layer"]
+ LS["LoginScreen"]
+ LVM["LoginViewModel"]
+ end
+
+ subgraph Domain["Domain Layer"]
+ LU["LoginUseCase"]
+ AR["AuthRepository
(Interface)"]
+ end
+
+ subgraph Data["Data Layer"]
+ ARI["AuthRepositoryImpl"]
+ FRD["FirebaseRemoteDataSource"]
+ ARD["AnalyticsRemoteDataSource"]
+ SM["SessionManager"]
+ end
+
+ subgraph Firebase["Firebase SDK"]
+ FA["FirebaseAuth"]
+ FAN["FirebaseAnalytics"]
+ end
- style SSOT fill:#e94560,stroke:#c62828,color:#ffffff
- style Repos fill:#1a1a2e,stroke:#e94560,color:#ffffff
- style Sources fill:#0f3460,stroke:#16213e,color:#ffffff
+ LS --> LVM
+ LVM --> LU
+ LU --> AR
+ AR -.->|"implements"| ARI
+ ARI --> FRD
+ ARI --> ARD
+ ARI --> SM
+ FRD --> FA
+ ARD --> FAN
+
+ linkStyle default stroke:#D32F2F,stroke-width:2px
+
+ classDef uiNode fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+ classDef domainNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ classDef dataNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ classDef firebaseNode fill:#4A4A4A,stroke:#D32F2F,color:#FFFFFF
+
+ class LS,LVM uiNode
+ class LU,AR domainNode
+ class ARI,FRD,ARD,SM dataNode
+ class FA,FAN firebaseNode
+
+ style UI fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style Domain fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style Data fill:#D3D3D3,stroke:#D32F2F,color:#000000
+ style Firebase fill:#333333,stroke:#D32F2F,color:#FFFFFF
```
+#### Telemetry and Analytics Integration
+
+```mermaid
+flowchart LR
+ USER["User Login"] --> AUTH["Authentication Success"]
+ AUTH --> ANALYTICS["AnalyticsRemoteDataSource"]
+ ANALYTICS --> FIREBASE["FirebaseAnalytics.logEvent()"]
+ FIREBASE --> DEBUG["Visible in Firebase DebugView"]
+
+ linkStyle default stroke:#D32F2F,stroke-width:2px
+
+ classDef telemetryNode fill:#333333,stroke:#D32F2F,color:#FFFFFF
+
+ class USER,AUTH,ANALYTICS,FIREBASE,DEBUG telemetryNode
+```
+
---
## 4. Technical Implementation Standards
-### 4.1 Reactive Orchestration
-The application uses **Kotlin Coroutines and Flow** for all asynchronous operations.
-- **State-Driven Navigation**: `MainActivity` observes `SessionManager.isAuthenticated`; state changes trigger navigation transitions via `LaunchedEffect`.
-- **Debounced Validation**: Login inputs are validated using a 300ms debounce to optimize performance.
-- **State Pushing**: ViewModels push immutable state objects to the UI, ensuring that recompositions are predictable and efficient.
+Rho Studio UI is engineered for sensitive information (fintech) environments
+
+### 4.1 Session Isolation
+
```mermaid
sequenceDiagram
participant UI as MainActivity
participant SM as SessionManager
- participant Nav as NavController
+ participant CM as ComponentManager
+ participant FC as FeatureComponent
UI->>SM: collectAsState()
- SM-->>UI: AuthState (Unauthenticated)
- UI->>Nav: navigate to Login
-
- Note over UI,Nav: User clicks Login
- UI->>LoginViewModel: onLoginClicked()
- LoginViewModel->>LoginUseCase: login(email, password)
- LoginUseCase->>AuthRepository: login(credentials)
- AuthRepository-->>LoginUseCase: User
- LoginUseCase->>SessionManager: updateSession(user)
-
- SM-->>UI: AuthState (Authenticated)
- UI->>Nav: navigate to Home
+ SM-->>UI: SessionState (Guest)
+ UI->>CM: getAppComponent()
+ CM-->>UI: AppComponent
+
+ Note over UI,FC: User logs in
+ UI->>SM: updateSession(User)
+ SM-->>UI: SessionState (Authenticated)
+ UI->>CM: getUserComponent()
+ CM-->>UI: UserComponent
+
+ Note over UI,FC: User logs out
+ UI->>SM: clearSession()
+ SM-->>UI: SessionState (Guest)
+ UI->>CM: releaseUserComponent()
+ Note over CM: @UserScope objects
binary-purged from memory
```
### 4.2 Modularization Strategy
@@ -237,14 +558,58 @@ Located in `:core:ui`, the design system defines the application's visual langua
---
-## 5. Roadmap & Evolution: Strategic Phases
+## 5. Verification & Quality Assurance
+
+### 5.1 Automated Tests
+
+| Test Suite | Scope | Status |
+| :--- | :--- | :---: |
+| **DI Graph Audit** (`DaggerGraphTest`) | Verifies all components and providers (Firebase, Analytics) are correctly satisfied | Passed |
+| **Transactional Integrity** (`SessionManagerTest`) | Validates atomic state flow and DataStore synchronization | Passed |
+| **Business Logic** (`LoginUseCaseTest`, `LogoutUseCaseTest`) | 90%+ coverage of core transactions using MockK | Passed |
+| **CI/CD Build** | Verified on GitHub Actions including `google-services.json` integration | Passed |
+
+### 5.2 Manual QA Test Plan
+
+**Scenario 1**: Fresh Install / First Launch
+1. Open the app.
+2. Expected: App shows LoadingScreen (CircularProgress), then transitions to Login Screen once session check is complete.
+
+**Scenario 2**: Successful Login & Data Loading
+1. Enter valid Firebase credentials.
+2. Click "**Login**".
+3. Expected:
+ - Circular progress overlay appears.
+ - On success, toast "Login successful!" appears.
+ - UI transitions to Home Screen.
+ - Header displays correct user email/name.
+ - Firebase Analytics event is visible in DebugView.
+
+**Scenario 3**: Secure Logout & Session Isolation
+1. On the Home Screen, click "Logout".
+2. Expected:
+ - UI transitions immediately back to Login Screen.
+ - User input fields in Login are cleared (form reset).
+ - Verification: Using Android Profiler, confirm that @UserScope objects (e.g., HomeViewModel) are cleared from heap.
+
+### 5.3 Regression Checklist for QA
+- Verify that no `UninitializedPropertyAccessException` occurs during rapid Login/Logout cycles.
+- Verify that the `PageHeader` reactively updates when a new user logs in.
+- Confirm that Firebase Analytics events are visible in DebugView.
+- Verify that `@UserScope` objects are destroyed on logout (Android Profiler).
+
+---
+## 6. Roadmap & Evolution: Strategic Phases
The application is transitioning from a modular prototype to a production-hardened system. The evolution is structured into three strategic phases:
-### Phase I: Dependency Orchestration & Decoupling
+### Phase I: Dependency Orchestration & Decoupling - [COMPLETED v1.0.3]
- **Dagger Migration**: Implementation of **Dagger 2** to replace manual Service Locators.
- Define `@Component` and `@Module` boundaries for `:core` and `:features`.
- Implement `@Inject` for UseCase and ViewModel construction to ensure compile-time dependency safety.
+- **ViewModel Multibinding**: Centralized ViewModel registry using `@IntoMap` and `DaggerViewModelFactory`.
+- **Component Dependencies**: Hierarchical component architecture with `CoreComponent`, `AppComponent`, and `UserComponent`.
+- **Session Isolation**: Physical destruction of `@UserScope` graph on logout to prevent data leakage.
- **Interface Segregation**: Strict enforcement of domain-defined interfaces to further isolate the Data Layer from Business Logic.
### Phase II: Transactional Integrity & persistence
@@ -252,9 +617,6 @@ The application is transitioning from a modular prototype to a production-harden
- Implementation of an atomic token refresh mechanism within the Data Layer.
- Securing critical transaction flows by validating session integrity before high-stakes domain executions.
- Complete token lifecycle: Acquisition → Persistence → Validation → Refresh → Recovery → Invalidation.
-- **Offline-First with Room**:
- - Integration of **Room Database** as the local cache for service modules.
- - Implementation of a "Source of Truth" strategy in Repositories to handle network-to-local synchronization.
```mermaid
flowchart TD
A[1. Acquisition
LoginUseCase --> AuthRepository.login]
@@ -270,76 +632,50 @@ flowchart TD
E --> C
F --> H[Reset AuthState]
- style A fill:#e94560,stroke:#c62828,color:#ffffff
- style B fill:#16213e,stroke:#0f3460,color:#ffffff
- style C fill:#1a1a2e,stroke:#e94560,color:#ffffff
- style D fill:#0f3460,stroke:#16213e,color:#ffffff
- style E fill:#16213e,stroke:#0f3460,color:#ffffff
- style F fill:#e94560,stroke:#c62828,color:#ffffff
- style G fill:#0f3460,stroke:#16213e,color:#ffffff
- style H fill:#1a1a2e,stroke:#e94560,color:#ffffff
+ style A fill:#D32F2F,stroke:#FFFFFF,color:#FFFFFF
+ style B fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style C fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style D fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style E fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style F fill:#D32F2F,stroke:#FFFFFF,color:#FFFFFF
+ style G fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style H fill:#4A4A4A,stroke:#333333,color:#FFFFFF
```
-### Phase III: Verification & Quality Engineering
-- **Domain Test Suite**: Achieving 90%+ coverage for `:core:domain` logic using JUnit 5 and MockK.
-- **UI & Regression Testing**:
- - Implementation of **Compose UI Tests** for critical user journeys (Login, Home navigation).
- - Integration of **Screenshot Testing** to ensure visual consistency across the Rho Studio design system.
-- **Performance Profiling**: Regular benchmarking of recomposition counts and memory allocation in high-density feature screens.
+- **Offline-First with Room**:
+ - Integration of **Room Database** as the local cache for service modules.
+ - Implementation of a "Source of Truth" strategy in Repositories to handle **network-to-local synchronization**.
+
```mermaid
-flowchart LR
- subgraph Current["Current Flow"]
- C1[UI] --> C2[ViewModel] --> C3[UseCase] --> C4[Repository] --> C5[SharedPreferences/Mock Auth]
+flowchart TD
+ subgraph Domain["Domain Layer"]
+ UC["TokenUseCases
- ValidateTokenUseCase
- RefreshTokenUseCase
- RevokeTokenUseCase"]
+ Entities["AuthToken.kt
- accessToken
- refreshToken
- expiresAt"]
+ end
+
+ subgraph Data["Data Layer"]
+ Repo["AuthRepositoryImpl
- refreshToken()
- revokeToken()"]
+ Store["TokenStore
- EncryptedSharedPreferences
- In-memory cache"]
+ SM["SessionManager
- SessionState machine"]
end
- subgraph Planned["Planned Flow"]
- P1[UI] --> P2[ViewModel] --> P3[UseCase] --> P4[Repository]
- P4 --> P5[Local: Room Database]
- P4 --> P6[Remote: Retrofit/Firebase]
+ subgraph Security["Security Layer"]
+ Keystore["Android Keystore
- MasterKey (AES-256-GCM)"]
+ Encrypted["EncryptedSharedPreferences"]
end
- Current -.->|"Evolution"| Planned
+ UC --> Repo
+ Repo --> Store
+ Store --> Encrypted
+ Encrypted --> Keystore
- style Current fill:#1a1a2e,stroke:#e94560,color:#ffffff
- style Planned fill:#0f3460,stroke:#16213e,color:#ffffff
+ style Domain fill:#333333,stroke:#D32F2F,color:#FFFFFF
+ style Data fill:#4A4A4A,stroke:#333333,color:#FFFFFF
+ style Security fill:#D32F2F,stroke:#FFFFFF,color:#FFFFFF
```
----
-## 6. Verification & Quality Assurance
-- **CI/CD**: GitHub Actions pipeline verifies every commit against build and test suites.
-- **Static Analysis**: Automated linting and ASCII metadata headers enforce code style and legal standards.
-
-## 7. File Registry and responsibilities
-Here is the updated table based on the file structure provided:
-
-| File / Module | Layer | Responsibility | Status |
-|:----------------------------------|:-------------|:-------------------------------------|:-------|
-| `MainActivity.kt` | UI Layer | Navigation orchestration | ✅ |
-| `BaseViewModel.kt` | UI Layer | Loading/Error state management | ✅ |
-| `HeaderViewModel.kt` | UI Layer | Session state bridging | ✅ |
-| `PageHeader.kt` / `PageFooter.kt` | UI Layer | Shared UI components | ✅ |
-| `LoginScreen.kt` | UI Layer | Login UI entry point | ✅ |
-| `LoginViewModel.kt` | UI Layer | Form state & validation | ✅ |
-| `LoginEmailField.kt` | UI Layer | Email input with validation | ✅ |
-| `LoginPasswordField.kt` | UI Layer | Password input with security | ✅ |
-| `LoginButton.kt` | UI Layer | Login action button | ✅ |
-| `HomeScreen.kt` | UI Layer | Home UI entry point | ✅ |
-| `HomeViewModel.kt` | UI Layer | Home state & session termination | ✅ |
-| `ServiceList.kt` | UI Layer | Service list grid component | ✅ |
-| `ServiceItem.kt` | UI Layer | Individual service item component | ✅ |
-| `ServiceModule.kt` | UI Layer | Feature-specific model (Home) | ✅ |
-| `BaseUseCase.kt` | Domain Layer | Standardized UseCase abstraction | ✅ |
-| `LoginUseCase.kt` | Domain Layer | Atomic authentication transaction | ✅ |
-| `LogoutUseCase.kt` | Domain Layer | Session teardown orchestration | ✅ |
-| `SessionManagerInterface.kt` | Domain Layer | Session operations contract | ✅ |
-| `AuthRepository.kt` | Domain Layer | Authentication contract | ✅ |
-| `SessionRepository.kt` | Domain Layer | Session persistence contract | ✅ |
-| `User.kt` / `Credentials.kt` | Domain Layer | Pure Kotlin Entities | ✅ |
-| `SessionManager.kt` | Data Layer | SSOT for authentication | ✅ |
-| `AuthRepositoryImpl.kt` | Data Layer | Mock auth (Firebase **planned**) | ⚠️ |
-| `SessionRepositoryImpl.kt` | Data Layer | SharedPreferences (Room **planned**) | ⚠️ |
-| `RefreshTokenUseCase.kt` | Domain Layer | Token refresh (**planned**) | 📅 |
-| `Dagger Components` | App Root | DI setup (**planned**) | 📅 |
+
+
## 8. References & Standards
- **MAD (Modern Android Development)**: Adhering to official [Android Architecture Guidelines](https://developer.android.com/topic/architecture).
- **Jetpack Compose Best Practices**: Following UDF ([Unidirectional Data Flow](https://developer.android.com/develop/ui/compose/architecture#udf)) principles for state management.
diff --git a/app/src/test/java/com/rho/studio/ui/di/DaggerGraphTest.kt b/app/src/test/java/com/rho/studio/ui/di/DaggerGraphTest.kt
index 68a6776..01fbd37 100644
--- a/app/src/test/java/com/rho/studio/ui/di/DaggerGraphTest.kt
+++ b/app/src/test/java/com/rho/studio/ui/di/DaggerGraphTest.kt
@@ -1,3 +1,22 @@
+/**
+ * ██████╗ ██╗ ██╗ ██████╗ ███████╗████████╗██╗ ██╗██████╗ ██╗ ██████╗
+ * ██╔══██╗██║ ██║██╔═══██╗ ██╔════╝╚══██╔══╝██║ ██║██╔══██╗██║██╔═══██╗
+ * ██████╔╝███████║██║ ██║ ███████╗ ██║ ██║ ██║██║ ██║██║██║ ██║
+ * ██╔══██╗██╔══██║██║ ██║ ╚════██║ ██║ ██║ ██║██║ ██║██║██║ ██║
+ * ██║ ██║██║ ██║╚██████╔╝ ███████║ ██║ ╚██████╔╝██████╔╝██║╚██████╔╝
+ * ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝
+ *
+ * ==========================================================================
+ * File: DaggerGraphTest.kt
+ * Author: Alexis Tercero
+ * Email: alexis.tercero@rho.studio
+ * Date: 2026-08-25
+ * ==========================================================================
+ * Description: Test suite for Dagger graph integrity.
+ * Verifies that all components and modules are correctly wired
+ * and that the scoped lifecycle of components is maintained.
+ * ==========================================================================
+ */
package com.rho.studio.ui.di
import android.content.Context
diff --git a/core/data/src/test/java/com/rho/studio/ui/core/data/manager/SessionManagerTest.kt b/core/data/src/test/java/com/rho/studio/ui/core/data/manager/SessionManagerTest.kt
index b1beb90..141da9b 100644
--- a/core/data/src/test/java/com/rho/studio/ui/core/data/manager/SessionManagerTest.kt
+++ b/core/data/src/test/java/com/rho/studio/ui/core/data/manager/SessionManagerTest.kt
@@ -1,3 +1,22 @@
+/**
+ * ██████╗ ██╗ ██╗ ██████╗ ███████╗████████╗██╗ ██╗██████╗ ██╗ ██████╗
+ * ██╔══██╗██║ ██║██╔═══██╗ ██╔════╝╚══██╔══╝██║ ██║██╔══██╗██║██╔═══██╗
+ * ██████╔╝███████║██║ ██║ ███████╗ ██║ ██║ ██║██║ ██║██║██║ ██║
+ * ██╔══██╗██╔══██║██║ ██║ ╚════██║ ██║ ██║ ██║██║ ██║██║██║ ██║
+ * ██║ ██║██║ ██║╚██████╔╝ ███████║ ██║ ╚██████╔╝██████╔╝██║╚██████╔╝
+ * ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝
+ *
+ * ==========================================================================
+ * File: SessionManagerTest.kt
+ * Author: Alexis Tercero
+ * Email: alexis.tercero@rho.studio
+ * Date: 2026-08-25
+ * ==========================================================================
+ * Description: Test suite for SessionManager.
+ * Verifies the reactive session state machine, initialization logic,
+ * and synchronization with the persistent repository.
+ * ==========================================================================
+ */
package com.rho.studio.ui.core.data.manager
import com.rho.studio.ui.core.domain.model.SessionState