Source profileQuality 75/100Review permissions

affaan-m/ECC/docs/es/skills/springboot-verification/SKILL.md

springboot-verification

Bucle de verificación para proyectos Spring Boot: build, análisis estático, pruebas con cobertura, escaneos de seguridad y revisión de diff antes del lanzamiento o PR.

Source repository stars
234,327
Declared platforms
0
Static risk flags
1
Last source update
2026-07-27
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Ejecutar antes de PRs, después de cambios importantes y antes del despliegue.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/springboot-verification"
    Safe inspection promptEditorial

    Inspect the Agent Skill "springboot-verification" from https://github.com/affaan-m/ECC/blob/4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38/docs/es/skills/springboot-verification/SKILL.md at commit 4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Cuándo Activar

      Antes de abrir un pull request para un servicio Spring Boot

      Antes de abrir un pull request para un servicio Spring BootDespués de refactorizaciones importantes o actualizaciones de dependenciasVerificación previa al despliegue para staging o producción
    2. 02

      Fase 1: Build

      bash mvn -T 4 clean verify -DskipTests

      bash mvn -T 4 clean verify -DskipTests
    3. 03

      o

      ./gradlew clean assemble -x test bash mvn -T 4 spotbugs:check pmd:check checkstyle:check bash ./gradlew checkstyleMain pmdMain spotbugsMain bash mvn -T 4 test mvn jacoco:report verificar cobertura 80%+

      ./gradlew clean assemble -x test bash mvn -T 4 spotbugs:check pmd:check checkstyle:check bash ./gradlew checkstyleMain pmdMain spotbugsMain bash mvn -T 4 test mvn jacoco:report verificar cobertura 80%+
    4. 04

      Fase 2: Análisis Estático

      Maven (plugins comunes):

      Maven (plugins comunes):Gradle (si está configurado):
    5. 05

      Fase 3: Pruebas + Cobertura

      bash mvn -T 4 test mvn jacoco:report verificar cobertura 80%+

      bash mvn -T 4 test mvn jacoco:report verificar cobertura 80%+

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 166

    The documentation asks the agent to run terminal commands or scripts.

    git secrets --scan # si está configurado

    Runs scripts

    medium · line 192

    The documentation asks the agent to run terminal commands or scripts.

    git diff --stat

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score75/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars234,327SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    affaan-m/ECC
    Skill path
    docs/es/skills/springboot-verification/SKILL.md
    Commit
    4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    Bucle de Verificación Spring Boot

    Ejecutar antes de PRs, después de cambios importantes y antes del despliegue.

    Cuándo Activar

    • Antes de abrir un pull request para un servicio Spring Boot
    • Después de refactorizaciones importantes o actualizaciones de dependencias
    • Verificación previa al despliegue para staging o producción
    • Ejecutar el pipeline completo de build → lint → test → escaneo de seguridad
    • Validar que la cobertura de pruebas cumpla los umbrales

    Fase 1: Build

    mvn -T 4 clean verify -DskipTests
    # o
    ./gradlew clean assemble -x test
    

    Si el build falla, detener y corregir.

    Fase 2: Análisis Estático

    Maven (plugins comunes):

    mvn -T 4 spotbugs:check pmd:check checkstyle:check
    

    Gradle (si está configurado):

    ./gradlew checkstyleMain pmdMain spotbugsMain
    

    Fase 3: Pruebas + Cobertura

    mvn -T 4 test
    mvn jacoco:report   # verificar cobertura 80%+
    # o
    ./gradlew test jacocoTestReport
    

    Reporte:

    • Total de pruebas, pasadas/fallidas
    • % de cobertura (líneas/ramas)

    Pruebas Unitarias

    Probar la lógica del servicio en aislamiento con dependencias mockeadas:

    @ExtendWith(MockitoExtension.class)
    class UserServiceTest {
    
      @Mock private UserRepository userRepository;
      @InjectMocks private UserService userService;
    
      @Test
      void createUser_validInput_returnsUser() {
        var dto = new CreateUserDto("Alice", "alice@example.com");
        var expected = new User(1L, "Alice", "alice@example.com");
        when(userRepository.save(any(User.class))).thenReturn(expected);
    
        var result = userService.create(dto);
    
        assertThat(result.name()).isEqualTo("Alice");
        verify(userRepository).save(any(User.class));
      }
    
      @Test
      void createUser_duplicateEmail_throwsException() {
        var dto = new CreateUserDto("Alice", "existing@example.com");
        when(userRepository.existsByEmail(dto.email())).thenReturn(true);
    
        assertThatThrownBy(() -> userService.create(dto))
            .isInstanceOf(DuplicateEmailException.class);
      }
    }
    

    Pruebas de Integración con Testcontainers

    Probar contra una base de datos real en lugar de H2:

    @SpringBootTest
    @Testcontainers
    class UserRepositoryIntegrationTest {
    
      @Container
      static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
          .withDatabaseName("testdb");
    
      @DynamicPropertySource
      static void configureProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgres::getJdbcUrl);
        registry.add("spring.datasource.username", postgres::getUsername);
        registry.add("spring.datasource.password", postgres::getPassword);
      }
    
      @Autowired private UserRepository userRepository;
    
      @Test
      void findByEmail_existingUser_returnsUser() {
        userRepository.save(new User("Alice", "alice@example.com"));
    
        var found = userRepository.findByEmail("alice@example.com");
    
        assertThat(found).isPresent();
        assertThat(found.get().getName()).isEqualTo("Alice");
      }
    }
    

    Pruebas de API con MockMvc

    Probar la capa controller con el contexto completo de Spring:

    @WebMvcTest(UserController.class)
    class UserControllerTest {
    
      @Autowired private MockMvc mockMvc;
      @MockBean private UserService userService;
    
      @Test
      void createUser_validInput_returns201() throws Exception {
        var user = new UserDto(1L, "Alice", "alice@example.com");
        when(userService.create(any())).thenReturn(user);
    
        mockMvc.perform(post("/api/users")
                .contentType(MediaType.APPLICATION_JSON)
                .content("""
                    {"name": "Alice", "email": "alice@example.com"}
                    """))
            .andExpect(status().isCreated())
            .andExpect(jsonPath("$.name").value("Alice"));
      }
    
      @Test
      void createUser_invalidEmail_returns400() throws Exception {
        mockMvc.perform(post("/api/users")
                .contentType(MediaType.APPLICATION_JSON)
                .content("""
                    {"name": "Alice", "email": "not-an-email"}
                    """))
            .andExpect(status().isBadRequest());
      }
    }
    

    Fase 4: Escaneo de Seguridad

    # CVEs de dependencias
    mvn org.owasp:dependency-check-maven:check
    # o
    ./gradlew dependencyCheckAnalyze
    
    # Secretos en código fuente
    grep -rn "password\s*=\s*\"" src/ --include="*.java" --include="*.yml" --include="*.properties"
    grep -rn "sk-\|api_key\|secret" src/ --include="*.java" --include="*.yml"
    
    # Secretos (historial de git)
    git secrets --scan  # si está configurado
    

    Hallazgos Comunes de Seguridad

    # Verificar System.out.println (usar logger en su lugar)
    grep -rn "System\.out\.print" src/main/ --include="*.java"
    
    # Verificar mensajes de excepción en bruto en respuestas
    grep -rn "e\.getMessage()" src/main/ --include="*.java"
    
    # Verificar CORS comodín
    grep -rn "allowedOrigins.*\*" src/main/ --include="*.java"
    

    Fase 5: Lint/Formato (compuerta opcional)

    mvn spotless:apply   # si se usa el plugin Spotless
    ./gradlew spotlessApply
    

    Fase 6: Revisión de Diff

    git diff --stat
    git diff
    

    Lista de verificación:

    • Sin logs de depuración residuales (System.out, log.debug sin guardias)
    • Errores y códigos HTTP con significado
    • Transacciones y validación presentes donde se necesitan
    • Cambios de configuración documentados

    Plantilla de Salida

    REPORTE DE VERIFICACIÓN
    =======================
    Build:      [PASS/FAIL]
    Estático:   [PASS/FAIL] (spotbugs/pmd/checkstyle)
    Pruebas:    [PASS/FAIL] (X/Y pasadas, Z% cobertura)
    Seguridad:  [PASS/FAIL] (hallazgos CVE: N)
    Diff:       [X archivos modificados]
    
    General:    [LISTO / NO LISTO]
    
    Problemas a Corregir:
    1. ...
    2. ...
    

    Modo Continuo

    • Volver a ejecutar las fases ante cambios significativos o cada 30–60 minutos en sesiones largas
    • Mantener un bucle corto: mvn -T 4 test + spotbugs para retroalimentación rápida

    Recuerda: La retroalimentación rápida supera las sorpresas tardías. Mantener la compuerta estricta — tratar las advertencias como defectos en sistemas de producción.

    Alternatives

    Compare before choosing