- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.8 KiB
ADR: Team vs Guild Terminology
Estado: ✅ Aceptado Fecha: 2025-11-07 Contexto: Discrepancia P0-4 identificada durante validación Fase 1
Contexto
Durante la validación exhaustiva del código contra la documentación, se identificó una inconsistencia semántica:
- Documentación (
/docs): Usa consistentemente los términos "Guild" y "GuildMember" - Implementación (
/src/modules/social): Usa los términos "Team" y "TeamMember"
Esta discrepancia afecta:
- Entidades de base de datos (
teams,team_members) - DTOs y tipos de TypeScript
- Comentarios y documentación inline
- Nomenclatura de APIs
Decisión
Se adopta el término "Team" como estándar oficial en lugar de "Guild".
Justificación
1. Claridad y Simplicidad
-
"Team" es un término más universal y claro:
- Familiar para usuarios no-gamers
- Usado comúnmente en contextos educativos
- Menos ambiguo que "Guild" (que tiene connotaciones de juegos MMORPG)
-
"Guild" tiene connotaciones específicas:
- Asociado principalmente con videojuegos (WoW, RPGs)
- Puede confundir a educadores y administradores
- Menos apropiado en contexto educativo formal
2. Alineación con Contexto Educativo
Gamilit es una plataforma educativa con gamificación, no un juego puro:
- Los educadores hablan de "equipos de estudio"
- Los administradores gestionan "grupos de trabajo"
- "Team" se integra mejor con terminología académica
3. Código Ya Implementado
La implementación actual usa "Team" en:
- 3 entidades TypeORM (
Team,TeamMember,TeamInvite) - Múltiples servicios y controllers
- Endpoints de API (
/api/teams/*) - Tablas de base de datos (
social_features.teams)
Cambiar a "Guild" requeriría:
- Refactoring masivo de código
- Migración de base de datos
- Actualización de APIs (breaking changes)
- Re-testing completo
Costo estimado: 20+ horas de desarrollo Riesgo: Alto (posibles bugs en migración)
4. Compatibilidad Frontend
El frontend ya puede estar usando "teams" en:
- Componentes React
- Store/State management
- Llamadas a API
- Mensajes de UI
Cambiar el backend a "Guild" crearía mayor inconsistencia.
5. Internacionalización (i18n)
"Team" se traduce fácilmente a múltiples idiomas:
- Español: "Equipo"
- Inglés: "Team"
- Francés: "Équipe"
"Guild" es más difícil de traducir apropiadamente en contexto educativo.
Consecuencias
Positivas ✅
- Terminología consistente en código implementado
- Menor deuda técnica (no requiere refactoring)
- Mejor UX para audiencia educativa
- Facilita i18n con términos estándar
- Reduce confusión entre developers
Negativas ❌
- Requiere actualizar documentación (
/docs) para usar "Team" - Posible confusión temporal si docs no se actualizan
- Divergencia inicial con especificaciones originales
Plan de Acción
Inmediato (P0)
- Crear este ADR documentando la decisión
- Actualizar comentarios en entities para clarificar
- Crear issue para actualizar docs (
/docs)
Corto Plazo (P1)
- Actualizar
/docs/02-especificaciones-tecnicas/TYPES-SOCIAL.md- Reemplazar "Guild" → "Team"
- Reemplazar "GuildMember" → "TeamMember"
- Actualizar
/docs/02-especificaciones-tecnicas/SOCIAL-SCHEMAS.md- Actualizar esquemas de base de datos
- Actualizar ejemplos de API
- Actualizar
/docs/01-requerimientos/casos-uso/- Reemplazar referencias a "Guild" en user stories
Mediano Plazo (P2)
- Crear glosario de términos oficiales
- Agregar a style guide del proyecto
- Training para developers sobre terminología estándar
Mapping de Términos
| Documentación (Old) | Código (Current) | Uso |
|---|---|---|
| Guild | Team | Entidad principal de equipo |
| GuildMember | TeamMember | Miembro de un equipo |
| GuildInvite | TeamInvite | Invitación a equipo |
| guild_id | team_id | ID de equipo |
| guildName | teamName | Nombre del equipo |
| guildRole | teamRole | Rol dentro del equipo |
Ejemplos de Código
Entidad (Correcto)
/**
* Team Entity
*
* Representa un equipo de colaboración/competencia entre estudiantes.
* Los equipos pueden estar asociados a un classroom o ser independientes.
*
* @table social_features.teams
* @note Anteriormente referenciado como "Guild" en documentación legacy
*/
@Entity({ schema: 'social_features', name: 'teams' })
export class Team {
@Column('text')
name: string;
@Column('integer', { name: 'max_members', default: 5 })
maxMembers: number;
}
API Endpoint (Correcto)
@Controller('api/teams')
export class TeamsController {
@Post()
async createTeam(@Body() dto: CreateTeamDto) {
// ...
}
@Get(':teamId/members')
async getTeamMembers(@Param('teamId') teamId: string) {
// ...
}
}
Referencias
- Issue: Discrepancia P0-4 - Reporte Final Fase 1
- Archivos Afectados:
/src/modules/social/entities/team.entity.ts/src/modules/social/entities/team-member.entity.ts/src/modules/social/services/teams.service.ts/src/modules/social/controllers/teams.controller.ts
- Docs a Actualizar:
/docs/02-especificaciones-tecnicas/TYPES-SOCIAL.md/docs/02-especificaciones-tecnicas/SOCIAL-SCHEMAS.md/docs/01-requerimientos/casos-uso/student/
Revisiones
| Fecha | Cambio | Autor |
|---|---|---|
| 2025-11-07 | Decisión inicial - Team sobre Guild | Claude Code (Sonnet 4.5) |
Notas
- Este ADR debe ser revisado con el equipo de producto
- Si hay fuerte preferencia por "Guild" en UX research, se puede reconsiderar
- La decisión es reversible pero costosa (requiere migración completa)
Aprobado por: Backend Lead (pendiente) Revisión siguiente: Q1 2026 (post-launch user feedback)