Skip to content

docs: [TESIS-50] add technical documentation, ADRs and CLAUDE.md#15

Open
TomasMartin2004 wants to merge 2 commits into
masterfrom
TESIS-50-documentacion-inicial-backend
Open

docs: [TESIS-50] add technical documentation, ADRs and CLAUDE.md#15
TomasMartin2004 wants to merge 2 commits into
masterfrom
TESIS-50-documentacion-inicial-backend

Conversation

@TomasMartin2004
Copy link
Copy Markdown
Contributor

@TomasMartin2004 TomasMartin2004 commented May 3, 2026

Ticket de Jira

https://proyectofinalfrlp.atlassian.net/browse/TESIS-50


Descripción

Agrega la documentación técnica base del repositorio backend. El objetivo es que Claude Code pueda leer una card de Jira y generar código bajo los estándares del proyecto sin necesidad de contexto adicional.
Incluye el CLAUDE.md (cargado automáticamente por Claude al inicio de cada sesión), 7 ADRs con las decisiones arquitectónicas tomadas y 5 guidelines con patrones de implementación concretos.


Cambios realizados

  • Agrega CLAUDE.md con stack, arquitectura, patrones de implementación, multi-tenancy, comandos y sección "Antes de empezar cualquier tarea" con lectura obligatoria de documentos
  • Agrega docs/adr/ADR-001 a ADR-007 documentando las decisiones: stack Rails, Devise+JWT, row-level multi-tenancy, arquitectura Controller-PORO-Serializer-Policy, Blueprinter, Solid Queue y Pundit
  • Agrega docs/guidelines/architecture.md con estructura de carpetas, flujo de request, dominios de negocio y patrones de implementación
  • Agrega docs/guidelines/code-conventions.md con RuboCop, Ruby conventions, naming y patrones de testing
  • Agrega docs/guidelines/feature-structure.md con los 6 dominios del OMS y reglas de dependencia
  • Agrega docs/guidelines/git-workflow.md con ramas, commits, Lefthook y CI
  • Agrega docs/guidelines/pr-guidelines.md con guía de redacción de PRs y ejemplos

Evidencia visual

N/A


Cómo probar

  1. Abrir una sesión de Claude Code en este repositorio
  2. Verificar que Claude lee CLAUDE.md automáticamente al inicio
  3. Pedirle que implemente una card de Jira → debe seguir los patrones documentados sin instrucciones adicionales

Impacto y consideraciones

¿Introduce breaking changes?
No

¿Requiere nuevas variables de entorno?
No

¿Afecta la arquitectura o genera un nuevo patrón?
No — documenta decisiones ya tomadas e implementadas en el setup inicial del proyecto

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Comment on lines +42 to +49
### Sidekiq

- ✅ El estándar de facto para background jobs en Rails — comunidad enorme
- ✅ Dashboard web (Sidekiq Web UI)
- ✅ Alto throughput con workers concurrentes (threads)
- ❌ **Requiere Redis** — dependencia adicional en desarrollo y producción
- ❌ Complejidad de operaciones adicional (Redis replication, persistence)
- ❌ En Rails 8 con Solid Queue, Redis no es necesario
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Muy bueno!
Yo hubiera ido a Sidekiq directamente por costumbre o comunidad, pero te tomo el punto de que no depender de Redis es un plus bastante bueno. Vamos a ver como sale (confio)

Comment on lines +161 to +169
### 5.3 Reglas para tablas

Toda tabla de dominio debe incluir:

```ruby
t.references :company, null: false, foreign_key: true
```

Las tablas de configuración del sistema (sin datos de tenant) como `services` (plantillas de APIs) no llevan `company_id`.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Solución robusta, lógica, peero....
Si una clase depende de User por ejemplo, o algo que ya dependa del tenant, dejamos explicito el tenant también?

Opción 1: Tenant explicito en cada tabla

👍 Mas trazable, menos riesgo de filtrar datos cross-tenant, mas velocidad de queries, ya que no requiere un Join para inferir el tenant
⚠️ Transitividad, requiere setearlo manualmente en cada tabla, y puede generar inconsistencias

Opción 2: Inferir el Tenant cuando sea posible

Datos mas atómicos, responsabilidad unica, pero puede entorpecer queries.

Seguimos con este enfoque? no lo veo mal, solo lo planteo para tenerlo en cuenta, de todas formas, ningun tenant_id deberia cambiar con el tiempo

@@ -0,0 +1,143 @@
# Estructura de Features (Dominios de Negocio)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acá ojo de nuevo, porque me da la impresión de que esto se está tomando así para seguir la misma convención que definimos en el front, pero al tratarse de Rails, que tiene una filosofía "Convention over Configuration", Puede terminar en codigo mas verborragico, que es justamente lo que rails evita por defecto.

Chequeemos si no conviene una arquitectura hexagonal, por poner un ejemplo.

Copy link
Copy Markdown
Member

@LauAubert LauAubert left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lo veo muy sólido Tomi!
Dejo un par de items para que revisemos, y quzás te sumo agregar documentación para tests, aunque podemos dejarlo para después.

…ntegrations, testing guide

- Add section 6 to feature-structure.md: when to use PORO vs direct model call
- Update ADR-004: hexagonal architecture adopted for integrations domain only
- Add docs/guidelines/testing.md: full testing guide with spec templates
- Update guidelines README with testing.md entry

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown
Member

@LauAubert LauAubert left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants