Imported from yjot-dev/Rep-EMP (
AGENTS.md). Install upstream withnpx skills add yjot-dev/Rep-EMP. Copyright stays with the author.
AGENTS.md - PRINCIPIOS DE EJECUCIÓN
- Rol del Asistente: Se espera que el asistente actúe como un ingeniero de software senior al interpretar y ejecutar todas las reglas de este documento.
- Prioridad del Manifiesto: Este documento (
AGENTS.md) es la fuente de verdad definitiva. Sus reglas tienen prioridad sobre cualquier comportamiento genérico o predeterminado del asistente.
1. CONTEXTO DEL PROYECTO
- Nombre: EMPRENDIMIENTO PRIMARIA (EMP)
- Descripción: EMP es una aplicación móvil educativa y gamificada, diseñada para enseñar conceptos fundamentales de emprendimiento a través de una experiencia interactiva y progresiva, motivando al usuario a aprender mediante lecciones estructuradas y ejercicios prácticos mientras gestiona su perfil y progreso.
2. STACK TECNOLÓGICO
El proyecto utiliza las siguientes tecnologías y patrones:
- Lenguaje: Kotlin
- UI: Jetpack Compose con Material 3
- Arquitectura: MVVM + Clean Architecture
- Navegación: Navigation Component
- Gestión de Estado: ViewModel + StateFlow
- Inyección de Dependencias: Hilt
- Persistencia/Red: Base de datos remota MySQL y API RESTful (Node.JS)
- Compatibilidad: Android 7.0 (API 24) en adelante
3. ESTRUCTURA DEL PROYECTO (Clean Architecture)
Se debe seguir estrictamente la siguiente organización de directorios:
-
presentation(Capa de Presentación)mvvm:ui: Pantallas en Compose (NombreDePantallaUi.kt).viewmodel: Lógica de UI (UiViewModel.kt).state: Modelos de datos de UI (UiState.kt).
navigation: Grafos (Navigation.kt), eventos (UiEvent.kt) y rutas (Routes.kt).components: Composables reutilizables.theme: Configuración del tema.utils: Helpers de UI (Helper.kt).
-
domain(Lógica de Negocio Pura)core: Resultados y excepciones base (Result.kt).model: Objetos de datos de negocio (NombreModel.kt).repository: Interfaces de acceso a datos (NombreRepository.kt).usecase: Casos de uso (una clase por acción).utils: Helpers de Domain.
-
data(Implementación de Datos)di: Módulos de Hilt (DiModules.kt).repository: Implementaciones concretas de los repositorios (NombreRepositoryImpl.kt).remote: Comunicación de red (api, network, dto, mapper, core).
4. CONVENCIONES Y ESTILO
4.1 Código y Nomenclatura
- Funciones, Parámetros y Variables: camelCase.
- Clases: PascalCase.
- Constantes: UPPER_SNAKE_CASE.
- Documentación: Cada función pública debe incluir comentario KDoc describiendo su propósito.
4.2 Estilo del ViewModel
- Estado privado mutable:
private val _uiState = MutableStateFlow(NombreUiState()). - Estado público inmutable:
val uiState: StateFlow<NombreUiState> = _uiState.asStateFlow(). - Implementar siempre
onCleared()para limpiar o resetear el estado.
5. RESTRICCIONES CRÍTICAS (PROHIBICIONES)
- Dependencias: No añadir ni actualizar dependencias en
build.gradleolibs.versions.tomlsin avisar previamente. - Seguridad: NUNCA incluir ni subir al repositorio remoto los siguientes archivos:
local.propertiescustom.properties
6. FLUJO DE TRABAJO Y COMUNICACIÓN
- Planificación: Antes de iniciar cualquier tarea no trivial, propón un plan detallado y espera mi "OK".
- Atomicidad: Ejecuta una sola tarea a la vez. Al finalizar, describe exactamente qué cambios realizaste para revisión.
- Certeza: Si no estás seguro de un paso o implementación al menos en un 80%, detente y pregunta.
- Veracidad: No inventes funcionalidades, rutas o comportamientos que no estén especificados.