Repository navigation
[SCRUM-1070] US-03.1.1-M6: reglas de categoría en el Rules Service Java - #2
Merged
santiagohb2830 merged 5 commits intoOct 17, 2026
Merged
Conversation
- Pruebas de humo con JUnit 5: arranque del contexto de Spring y endpoint de salud (/health y /api/v1/rules/health). - JaCoCo 0.8.12 genera target/site/jacoco/jacoco.xml, la ruta que lee SonarQube por defecto. - Workflow CI: mvn verify en cada PR y push a main; publica el reporte de cobertura como artefacto. - README documenta como ejecutar pruebas y cobertura. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…6 (SCRUM-1123) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…res uniformes y rutas del Gateway
- CorrelationIdFilter: X-Correlation-ID al MDC (patron de logs ya lo leia) y
a la respuesta; "none" si falta, igual que Core.
- GlobalExceptionHandler + ApiError: forma {error, code, correlationId}
comun con Core para 400/404/405/415/500.
- HealthController separado; RulesController responde con y sin el prefijo
/api/v1/rules porque el Gateway lo recorta antes de reenviar (antes
/api/v1/rules/evaluate-rate llegaba como /evaluate-rate y daba 404).
- Quita @crossorigin("*"): CORS es responsabilidad unica del Gateway.
- CI tambien en push a develop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…les Service
POST /api/v1/rules/categories/evaluate (tambien sin prefijo, por el Gateway)
con el contrato declarado por Core en US-03.1.1-M2.2: { allowed,
ruleSetVersion, violations[] } + normalized.
- CategoryRuleEvaluator: funcion pura con las reglas de
crear_categoria_servicio() (migracion 003): nombre normalizado 3-60 con
letra (MANI-CAT-422N), flujo operativo permitido (MANI-CAT-422F); UPDATE
parcial; OPERATE exige categoria activa (MANI-CAT-422C).
- Tenant solo desde X-Tenant-Id (claim del Gateway/Core); tenantId del
cuerpo distinto => 403 TENANT_MISMATCH. CREATE/UPDATE exigen rol ADMIN.
- CategoryRulesProperties: parametros en mani.rules.category.* con override
por tenant y version trazable; configuracion incoherente falla el arranque.
- El 409 por nombre duplicado sigue en el indice unico (requiere estado).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ra/Quality Gate - CategoryRuleEvaluatorTest: limites 2/3/60/61, conteo por caracteres como char_length (emoji), letras Unicode, normalizacion, flujos, acumulacion de violaciones, UPDATE parcial, OPERATE, reglas configurables, determinismo. - CategoryRulesPropertiesTest: binding real con override por tenant (UUID), version trazable y configuracion incoherente que impide el arranque. - CategoryRulesControllerTest: contrato HTTP completo, prefijo del Gateway, roles ADMIN/admin_tenant vs ALLY, TENANT_REQUIRED/TENANT_MISMATCH, 400/401/403/415; UnexpectedErrorTest: 500 uniforme sin filtrar detalle. - jacoco:check en verify (lineas >= 85 %, ramas >= 80 %); hoy 93.6 % / 87.8 %. - CI: SonarCloud con sonar.qualitygate.wait=true cuando existe SONAR_TOKEN; publica reportes de Surefire. 85 pruebas, mvn verify en verde. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Alviz09
requested review from
Nicolas11Leon,
SarAlbN1,
dsavilam and
santiagohb2830
as code owners
October 16, 2026 17:45
santiagohb2830
approved these changes
Oct 17, 2026
santiagohb2830
left a comment
Contributor
There was a problem hiding this comment.
QA: aprobado (SCRUM-1070 · subtareas SCRUM-1225, SCRUM-1226, SCRUM-1227)
Revisado sobre eab1457.
- Evaluador puro y determinista; tenant solo desde
X-Tenant-Id(el Gateway enmainlo sobrescribe con el claim verificado) y403 TENANT_MISMATCHsi el cuerpo trae otro tenant. - CREATE/UPDATE exigen rol administrador; errores con forma
{error, code, correlationId}, igual que Core. - CI "Pruebas (Java 17)" en verde; JaCoCo con umbral en
verify.
Observaciones (no bloquean):
- Este PR contiene el commit de Java#1 (QA-06), que ya se fusionó en
main;developymainquedan alineados con este merge. - SAD §7.1 dice que Rules lee las reglas de persistencia; hoy viven en
application.propertiespor tenant. Válido como paso intermedio mientras se cierra SAD §7.4 P2. - Pendiente de DevOps: proyecto en SonarCloud y
SONAR_TOKEN.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Descripción
Lleva las reglas evaluables de la categoría de servicio (antes en
crear_categoria_servicio(), migración 003, SCRUM-857, y en Core Node) al Rules Service, para poder cambiarlas sin desplegar Core.M6.1 · SCRUM-1225 (esqueleto)
ci.yml.CorrelationIdFilter(MDC + header),GlobalExceptionHandlercon forma{error, code, correlationId}común con Core./api/v1/rulesantes de reenviar, así que/api/v1/rules/evaluate-ratellegaba como/evaluate-ratey respondía 404. Todo endpoint responde ahora con y sin el prefijo.@CrossOrigin("*"): CORS es del Gateway.M6.2 · SCRUM-1226 (evaluación)
POST /api/v1/rules/categories/evaluatecon el contrato que Core declaró en US-03.1.1-M2.2:{allowed, ruleSetVersion, violations[]}+normalized.CategoryRuleEvaluator(función pura): nombre normalizado de 3 a 60 caracteres con letra (MANI-CAT-422N), flujo permitido (MANI-CAT-422F), UPDATE parcial, OPERATE exige categoría activa (MANI-CAT-422C).X-Tenant-Id(claim puesto por el Gateway o Core); untenantIdajeno en el cuerpo da403 TENANT_MISMATCH. CREATE/UPDATE exigen rol de administrador.mani.rules.category.*con override por tenant y versión trazable; una configuración incoherente impide el arranque.M6.3 · SCRUM-1227 (pruebas y gate)
jacoco:checkenverify(≥ 85 % líneas, ≥ 80 % ramas).sonar.qualitygate.wait=truecuando exista el secretSONAR_TOKEN.Evidencia
mvn verifyen verde, y el gate falla si se fuerza un umbral de 99 %.422N; flujo inválido 400422F.tenants[tenant-e2e].name-min-length=2, "AB" pasó a 201 en ese tenant y siguió en 400 en otro, sin tocar Core.Dependencias y orden de merge
contract-gate-rulesdel Gateway construye MANI-Java desdedevelop.rules.yaml+ suite Newman (apilado sobre CFG-16).Pendiente de DevOps: proyecto
Trama-AS_MANI-Javaen SonarCloud + secretSONAR_TOKEN;QA_RULES_SERVICE_URLpara el CD de Core; despliegue derules-serviceen QA.Ticket relacionado
Checklist
🤖 Generated with Claude Code