Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-24 16:07 UTC

luminion / spring-boot-starter

A Spring Boot Starter for common scenarios.

JavaApache-2.0★ 5 estrellas⑂ 1 forkdesde dic 2024Ver en GitHub ↗

luminion/spring-boot-starter tiene un índice de salud de 46 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (82/100) y la más baja, Community & Adoption (29/100). Se actualizó por última vez hace 8 días. Una sola persona concentra la mayor parte del trabajo reciente.

46
global / 100
En riesgo

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

46
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

luminionCuenta personal
4 seguidores20 repositorios públicosdesde ago 2018

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Mavenio.github.luminion:velo-autoconfigure-javax1.3.0-4hace 8 días
Mavenio.github.luminion:velo-autoconfigure-common1.3.0-4hace 8 días
Mavenio.github.luminion:velo-spring-boot2-starter1.3.0-4hace 8 días
Mavenio.github.luminion:velo-spring-boot3-starter1.3.0-4hace 8 días
Mavenio.github.luminion:velo-spring-boot4-starter1.3.0-4hace 8 días
Mavenio.github.luminion:velo-autoconfigure-jakarta1.3.0-4hace 8 días
Mavenio.github.luminion:velo-autoconfigure-jackson21.3.0-4hace 8 días
Mavenio.github.luminion:velo-autoconfigure-jackson31.3.0-4hace 8 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

82Bueno · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 8 días
20.8/36Cadencia de commits — 30/52 semanas con commits
18/18Volumen de commits — 216 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year216
human_commit_share1
days_since_last_push8
active_weeks_last_year30
Cómo se puntúa
16.2/27Publica versiones — 4 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 8 días
27/27Cadencia de publicación — una versión cada ~24,7 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count4
latest_release_tag1.3.0
releases_from_tags
days_since_latest_release8
mean_days_between_releases24,7
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

29Crítico · 18% del índice global
Cómo se puntúa
9.8/60Estrellas — 5 estrellas
0/25Forks — 1 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks1
stars5
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

33En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
5/25Alcance del propietario — 4 seguidores de luminion
21.6/25Trayectoria — 20 repos públicos, cuenta de ~7 años
Datos de entrada utilizados
followers4
owner_typeUser
is_verified
owner_loginluminion
public_repos20
account_age_days2893
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 8 paquete(s) en maven
35/35Recencia de publicación — última publicación hace 8 días
12/20Historial de versiones — 4 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesio.github.luminion:velo-autoconfigure-javax, io.github.luminion:velo-autoconfigure-common, io.github.luminion:velo-spring-boot2-starter, io.github.luminion:velo-spring-boot3-starter, io.github.luminion:velo-spring-boot4-starter, io.github.luminion:velo-autoconfigure-jakarta, io.github.luminion:velo-autoconfigure-jackson2, io.github.luminion:velo-autoconfigure-jackson3
ecosystemsmaven
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

38En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

50Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dirno
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

42En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate3,6
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
7/25Dependencias indirectas libres de avisos conocidos — 4 afectados: org.springframework.boot:spring-boot 2.7.18 (high 7.3), org.springframework:spring-core 5.3.31 (high 7.5), org.springframework:spring-context 5.3.31 (moderate 5.3), +1 más
24.8/40Sin avisos pendientes — 4 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 703 días
Datos de entrada utilizados
sourceosv
advisories6
affected_packages4
assessed_packages11
unassessed_packages0
affected_by_severityhigh 2, moderate 2
direct_affected_packages0
Se cotejó el cierre de dependencias en tiempo de ejecución de maven:io.github.luminion:velo-autoconfigure-javax@1.3.0 —lo que arrastra la instalación del paquete publicado—: 11 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

56Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — pom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/pom.xml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Java (tipado estático)
0/10Entorno reproducible
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifestspom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/pom.xml, velo-autoconfigure-jackson3/pom.xml, velo-autoconfigure-jakarta/pom.xml, velo-autoconfigure-javax/pom.xml, velo-spring-boot2-autoconfigure/pom.xml, velo-spring-boot2-dependencies/pom.xml, velo-spring-boot2-starter/pom.xml, velo-spring-boot3-autoconfigure/pom.xml, velo-spring-boot3-dependencies/pom.xml, velo-spring-boot3-starter/pom.xml, velo-spring-boot4-autoconfigure/pom.xml, velo-spring-boot4-dependencies/pom.xml, velo-spring-boot4-starter/pom.xml
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — Java (tipado estático)
55/55Tamaños de archivo manejables — 0/201 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJava
largest_source_bytes25.506
source_files_sampled201
oversized_source_files0

Datos clave

5estrellas de GitHub
1contribuidores
216commits en los últimos 12 meses
8días desde el último push
4versiones publicadas
1factor bus
0issues abiertas
Mavenecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Más detalle

OpenSSF Scorecard 3.6 / 10
3.6agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-24 16:07 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
9Vulnerabilities1 existing vulnerabilities detected
Dependencias directas 87
RegistroPaqueteRestricción de versiónManifiesto
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-autoconfigure-common/pom.xml
Mavenorg.springframework.boot:spring-boot-configuration-processorvelo-autoconfigure-common/pom.xml
Mavencom.baomidou:mybatis-plus-core${mybatis-plus.version}velo-autoconfigure-common/pom.xml
Mavencom.baomidou:mybatis-plus-extension${mybatis-plus.version}velo-autoconfigure-common/pom.xml
Mavenio.github.openfeign:feign-core${feign-core.version}velo-autoconfigure-common/pom.xml
Mavenorg.redisson:redisson-spring-boot-startervelo-autoconfigure-common/pom.xml
Mavencom.github.ben-manes.caffeine:caffeinevelo-autoconfigure-common/pom.xml
Mavenorg.jsoup:jsoupvelo-autoconfigure-common/pom.xml
Mavencom.alibaba:easyexcel4.0.3velo-autoconfigure-common/pom.xml
Mavencn.idev.excel:fastexcel1.3.0velo-autoconfigure-common/pom.xml
Mavenorg.apache.fesod:fesod-sheet2.0.1-incubatingvelo-autoconfigure-common/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-autoconfigure-jackson2/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-jackson2/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-jackson2/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisvelo-autoconfigure-jackson2/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webvelo-autoconfigure-jackson2/pom.xml
Mavencom.fasterxml.jackson.core:jackson-databindvelo-autoconfigure-jackson2/pom.xml
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310velo-autoconfigure-jackson2/pom.xml
Mavenio.github.luminion:velo-spring-boot4-dependencies${project.version}velo-autoconfigure-jackson3/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-jackson3/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-jackson3/pom.xml
Mavenorg.springframework.boot:spring-boot-jacksonvelo-autoconfigure-jackson3/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisvelo-autoconfigure-jackson3/pom.xml
Maventools.jackson.core:jackson-databindvelo-autoconfigure-jackson3/pom.xml
Mavenio.github.luminion:velo-spring-boot3-dependencies${project.version}velo-autoconfigure-jakarta/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-configuration-processorvelo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webvelo-autoconfigure-jakarta/pom.xml
Mavenjakarta.validation:jakarta.validation-apivelo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-mailvelo-autoconfigure-jakarta/pom.xml
Mavencom.baomidou:mybatis-plus-spring-boot3-startervelo-autoconfigure-jakarta/pom.xml
Mavenorg.jsoup:jsoupvelo-autoconfigure-jakarta/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-autoconfigure-javax/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-configuration-processorvelo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webvelo-autoconfigure-javax/pom.xml
Mavenjavax.validation:validation-apivelo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-mailvelo-autoconfigure-javax/pom.xml
Mavencom.baomidou:mybatis-plus-boot-startervelo-autoconfigure-javax/pom.xml
Mavenorg.jsoup:jsoupvelo-autoconfigure-javax/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-javax${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jackson2${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.redisson:redisson-spring-boot-starter${redisson.version}velo-spring-boot2-dependencies/pom.xml
Mavencom.baomidou:mybatis-plus-boot-starter${mybatis-plus.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.jsoup:jsoup${jsoup.version}velo-spring-boot2-dependencies/pom.xml
Mavencom.alibaba:easyexcel${easyexcel.version}velo-spring-boot2-dependencies/pom.xml
Mavencn.idev.excel:fastexcel${fastexcel.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.apache.fesod:fesod-sheet${fesod-sheet.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.projectlombok:lombok${lombok.version}velo-spring-boot2-dependencies/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-spring-boot2-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot2-autoconfigure${project.version}velo-spring-boot2-starter/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-aopvelo-spring-boot2-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot3-dependencies${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jakarta${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jackson2${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.redisson:redisson-spring-boot-starter${redisson.version}velo-spring-boot3-dependencies/pom.xml
Mavencom.baomidou:mybatis-plus-spring-boot3-starter${mybatis-plus.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.jsoup:jsoup${jsoup.version}velo-spring-boot3-dependencies/pom.xml
Mavencom.alibaba:easyexcel${easyexcel.version}velo-spring-boot3-dependencies/pom.xml
Mavencn.idev.excel:fastexcel${fastexcel.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.apache.fesod:fesod-sheet${fesod-sheet.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.projectlombok:lombok${lombok.version}velo-spring-boot3-dependencies/pom.xml
Mavenio.github.luminion:velo-spring-boot3-dependencies${project.version}velo-spring-boot3-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot3-autoconfigure${project.version}velo-spring-boot3-starter/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-aopvelo-spring-boot3-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot4-dependencies${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jakarta${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jackson3${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.redisson:redisson-spring-boot-starter${redisson.version}velo-spring-boot4-dependencies/pom.xml
Mavencom.baomidou:mybatis-plus-spring-boot4-starter${mybatis-plus.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.jsoup:jsoup${jsoup.version}velo-spring-boot4-dependencies/pom.xml
Mavencom.alibaba:easyexcel${easyexcel.version}velo-spring-boot4-dependencies/pom.xml
Mavencn.idev.excel:fastexcel${fastexcel.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.apache.fesod:fesod-sheet${fesod-sheet.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.projectlombok:lombok${lombok.version}velo-spring-boot4-dependencies/pom.xml
Mavenio.github.luminion:velo-spring-boot4-dependencies${project.version}velo-spring-boot4-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot4-autoconfigure${project.version}velo-spring-boot4-starter/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-aspectjvelo-spring-boot4-starter/pom.xml
Todas las dependencias 62

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 45 paquetes directos y 17 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Mavencn.idev.excel:fastexcel1.3.0directa
Mavencom.alibaba:easyexcel4.0.3directa
Mavencom.baomidou:mybatis-plus-boot-starterdirecta
Mavencom.baomidou:mybatis-plus-boot-starter3.5.14directa
Mavencom.baomidou:mybatis-plus-core3.5.14directa
Mavencom.baomidou:mybatis-plus-extension3.5.14directa
Mavencom.baomidou:mybatis-plus-spring-boot3-starterdirecta
Mavencom.baomidou:mybatis-plus-spring-boot3-starter3.5.14directa
Mavencom.baomidou:mybatis-plus-spring-boot4-starter3.5.14directa
Mavencom.fasterxml.jackson.core:jackson-databinddirecta
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310directa
Mavencom.github.ben-manes.caffeine:caffeinedirecta
Mavenio.github.luminion:velo-autoconfigure-commondirecta
Mavenio.github.luminion:velo-autoconfigure-jackson2directa
Mavenio.github.luminion:velo-autoconfigure-jackson3directa
Mavenio.github.luminion:velo-autoconfigure-jakartadirecta
Mavenio.github.luminion:velo-autoconfigure-javaxdirecta
Mavenio.github.luminion:velo-spring-boot2-autoconfiguredirecta
Mavenio.github.luminion:velo-spring-boot2-dependenciesdirecta
Mavenio.github.luminion:velo-spring-boot3-autoconfiguredirecta
Mavenio.github.luminion:velo-spring-boot3-dependenciesdirecta
Mavenio.github.luminion:velo-spring-boot4-autoconfiguredirecta
Mavenio.github.luminion:velo-spring-boot4-dependenciesdirecta
Mavenio.github.openfeign:feign-core11.10directa
Mavenjakarta.validation:jakarta.validation-apidirecta
Mavenjavax.validation:validation-apidirecta
Mavenorg.apache.fesod:fesod-sheet2.0.1-incubatingdirecta
Mavenorg.jsoup:jsoupdirecta
Mavenorg.jsoup:jsoup1.21.1directa
Mavenorg.projectlombok:lombokdirecta
Mavenorg.projectlombok:lombok1.18.42directa
Mavenorg.redisson:redisson-spring-boot-starterdirecta
Mavenorg.redisson:redisson-spring-boot-starter3.40.0directa
Mavenorg.springframework.boot:spring-boot-autoconfiguredirecta
Mavenorg.springframework.boot:spring-boot-configuration-processordirecta
Mavenorg.springframework.boot:spring-boot-dependencies2.7.18directa
Mavenorg.springframework.boot:spring-boot-dependencies3.5.9directa
Mavenorg.springframework.boot:spring-boot-dependencies4.0.5directa
Mavenorg.springframework.boot:spring-boot-jacksondirecta
Mavenorg.springframework.boot:spring-boot-starter-aopdirecta
Mavenorg.springframework.boot:spring-boot-starter-aspectjdirecta
Mavenorg.springframework.boot:spring-boot-starter-data-redisdirecta
Mavenorg.springframework.boot:spring-boot-starter-maildirecta
Mavenorg.springframework.boot:spring-boot-starter-webdirecta
Maventools.jackson.core:jackson-databinddirecta
Mavenorg.apache.maven.plugins:maven-compiler-pluginindirecta
Mavenorg.apache.maven.plugins:maven-compiler-plugin3.13.0indirecta
Mavenorg.apache.maven.plugins:maven-gpg-plugin3.2.7indirecta
Mavenorg.apache.maven.plugins:maven-jar-plugin3.4.2indirecta
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.10.0indirecta
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.1indirecta
Mavenorg.aspectj:aspectjweaverindirecta
Mavenorg.codehaus.mojo:flatten-maven-plugin1.7.2indirecta
Mavenorg.junit.jupiter:junit-jupiterindirecta
Mavenorg.slf4j:slf4j-apiindirecta
Mavenorg.sonatype.central:central-publishing-maven-plugin0.9.0indirecta
Mavenorg.springframework.boot:spring-boot-starter-testindirecta
Mavenorg.springframework.data:spring-data-redisindirecta
Mavenorg.springframework:spring-aopindirecta
Mavenorg.springframework:spring-contextindirecta
Mavenorg.springframework:spring-expressionindirecta
Mavenorg.springframework:spring-webindirecta
Avisos de dependencias 4

Instalar maven:io.github.luminion:velo-autoconfigure-javax@1.3.0 arrastra 11 paquetes, directos y transitivos: 4 tienen avisos conocidos, de los cuales 0 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
org.springframework.boot:spring-boot2.7.18indirectaalta24.0.6
org.springframework:spring-core5.3.31indirectaalta16.2.11
org.springframework:spring-context5.3.31indirectamoderada26.2.7
org.springframework:spring-expression5.3.31indirectamoderada15.3.39

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1189,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Java": 648551
      },
      "pushed_at": "2026-07-15T16:44:23Z",
      "created_at": "2024-12-18T01:25:26Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T03:39:02Z",
      "description": "A Spring Boot Starter for common scenarios.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Java",
      "significant_languages": [
        "Java"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "luminion",
      "company": null,
      "location": null,
      "followers": 4,
      "avatar_url": "https://avatars.githubusercontent.com/u/42614491?v=4",
      "created_at": "2018-08-22T15:01:26Z",
      "is_verified": null,
      "public_repos": 20,
      "account_age_days": 2893
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "1.3.0",
          "kind": "minor",
          "published_at": "2026-07-15T16:43:32Z"
        },
        {
          "tag": "1.2.0",
          "kind": "minor",
          "published_at": "2026-06-11T07:53:01Z"
        },
        {
          "tag": "1.1.0",
          "kind": "minor",
          "published_at": "2026-05-31T07:26:53Z"
        },
        {
          "tag": "1.0.0",
          "kind": "major",
          "published_at": "2026-05-02T15:48:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0ae8908a2a54e8850cfc371e45d774c647a35626",
          "body": "- 统一移除幂等、锁、限流相关注解和接口中原有的时间单位参数,统一使用毫秒作为单位\n- 调整幂等处理器实现,更新时间单位转换逻辑为毫秒\n- 锁相关实现移除单位参数,所有等待和持有时间均按毫秒解析处理\n- 限流相关实现移除单位参数,窗口时间统一为毫秒单位\n- 调整异常类中时间相关字段及构造器,去除时间单位字段,相关说明文档注明单位为毫秒\n- 修改日志支持,统一慢日志阈值字段及检查逻辑,调整日志输出格式,增强可读性\n- 优化调试和测试用例,校正默认值为毫秒单位,保证一致性\n- 调整幂等和锁相关常量顺序和注释,提升代码可读性和逻辑清晰度",
          "is_bot": false,
          "headline": "refactor(core): 优化并统一幂等锁限流窗口单位及日志格式",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-15T16:43:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75377afcfb2c9da5c01e1383b0465a2ab7cae5ef",
          "body": "- 调整 Feign 调用日志切面,调用时分别写入进入 (ENTRY) 和退出 (EXIT) 两条日志记录\n- Controller 和统一方法调用日志切面同步改为入口和出口日志分开打印,含入参和耗时/结果或异常\n- 新增 InvocationPhase 枚举区分日志阶段,兼容旧的单行慢日志格式\n- Slf4JInvocationLogWriter 支持基于 InvocationPhase 格式化进入和退出日志行\n- 慢调用日志独立切面处理,日志级别可通过配置项 velo.log.slow.level 设置,默认 WARN\n- 调整测试覆盖入口和出口日志的正确生成与格式输出\n- VeloProperties 增加慢调用日志等级配置支持\n- 优化调用日志切面异常处理逻辑,异常日志始终使用 ERROR 级别\n- 移除调用日志切面中对慢日志注解的处理,防止与慢日志切面冲突\n- 所有调用日志切面均改为先写 ENTRY 再执行方法,最终写 EXIT 日志,保证日志完整性",
          "is_bot": false,
          "headline": "feat(logging): 统一调用日志改为进入与退出两条记录",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-15T14:18:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc4abb0db83de249fa9fb8eab9ddb2266c4d50c4",
          "body": "- 将默认方法指纹由“全限定类名#方法名”变更为“全限定类名#方法名(参数类型...)”,避免重载方法共享幂等窗口、限流桶或锁\n- 所有并发控制相关注解(@Idempotent、@Lock、@RateLimit)均采用新的方法指纹格式进行 key 生成\n- 修改并完善相关测试,验证不同重载方法可产生不同并发控制 key,避免冲突\n- 优化本地幂等处理,改用单调纳秒时间记录 TTL,支持更精细的时间单位且防止时间回拨影响\n- Redis 锁处理增强,支持同线程可重入,非整毫秒租约向上取整,避免短于配置值的 TTL,锁续租和释放逻辑更安全\n- 调整调用日志和慢日志以使用纳秒精度,提升时间计算准确性\n[…]\n允许代理头为仅含空白或带空白的“unknown”,回退至直连地址\n- 移除@Lock空 key强制非空校验,改为安静降级至方法级锁,行为与@Idempotent空key保持一致\n- 改进RedisLockHandler锁失败时的ThreadLocal状态处理,防止异常时残留无效线程本地变量\n- WebUtilsSupport中增强了IP首个有效地址提取的空白和未知字符串处理逻辑,保证稳定性和准确性",
          "is_bot": false,
          "headline": "refactor(core): 统一方法指纹为全限定类名和参数列表格式",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-15T01:47:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2552800a717e9aff18e1843e93db021c33e56e37",
          "body": "- 使用safeBuildArgsText和safeBuildResultText捕获序列化异常,避免日志序列化失败影响业务\n- 使用safeWrite捕获调用日志写入异常,防止日志写入错误导致调用失败\n- 对Feign调用异常日志捕获后安全写入日志,保证异常不被吞噬\n- 增加相关单元测试覆盖序列化与写入失败场景,确保可靠性提升",
          "is_bot": false,
          "headline": "fix(feign): 保护Feign调用日志序列化与写入安全",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-10T07:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d40b5dbdba8fb312debdfdd8527763ab37c4f707",
          "body": "…ocal locks\n\n- 移除 CaffeineLockHandler 类,简化本地锁实现\n- Caffeine 档位复用 JdkLockHandler,避免重复代码\n- 保持 CAFFEINE 档位兼容性,确保配置不破坏使用体验\n- RedisLockHandler 支持同线程重入,避免死锁并优化性能\n- 优化锁释放逻辑及本地持有计数管理,确保锁的正确释放\n- IdempotentAspect 拼接 key 时增加方法指纹前缀防止冲突\n- WebUtilsSupport 修复 IPv6 环回地址识别兼容性问题\n- VeloTraceEnvironmentPostProcessor 删除对日志日期格式的修改,仅增强日志级别输出\n- 移除 UnsafeBigIntegerToStringSerializer 序列化器\n- 更新相关测试用例,确认锁处理及幂等功能改动稳定性",
          "is_bot": false,
          "headline": "refactor(lock): replace CaffeineLockHandler with JdkLockHandler for l…",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-05T15:33:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "327010b7b9ae41133af9afff2370fe06589fa4d8",
          "body": "- 将 EasyExcel、FastExcel 和 FesodExcelHelper 的支持类型由 NUMBER 改为 STRING,确保浮点单元格能正确读取\n- ReadCellData 类新增 originalNumberValue,支持解析和校正浮点数精度问题\n- 优化 IP 解析逻辑,支持多代理头中 unknown 的回退处理及 IPv6 环回地址转换\n- 幂等切面异常处理中增加清理异常捕获,避免覆盖原始异常\n- 本地锁实现改用引用计数管理,避免缓存淘汰时锁被误释放,保障高并发下的互斥性\n- 添加分布式锁和幂等操作被 Redis 事务或 pipeline 包裹时的 WARN 提示,提醒用户避免误用\n- 限流令牌桶计算修复,防止高速率叠加长时间空闲时整数溢出导致永久卡死\n- 异常处理返回文案兜底,避免 null 出现和潜在空指针异常\n- Feign 调用日志中未配置 traceId 时跳过处理,避免链路追踪丢失",
          "is_bot": false,
          "headline": "feat(excel): 修复浮点单元格类型读取为null的问题",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-04T11:00:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c70f398abaeba4cff7d68a4f3a99bdcf1d57d444",
          "body": "- 启动横幅默认关闭,需通过 velo.banner.enabled=true 显式开启\n- 横幅中并发能力(幂等、限流、锁)显示实际生效的处理器类型\n- 支持展示用户自定义处理器类名,便于确认 AUTO 模式下后端实现\n- 缓存过期时间和日志、Web 模块的相关状态详情改为友好格式展示\n- 相关自动配置类新增对处理器的 ObjectProvider 注入支持\n- 删除幂等、限流、锁模块中启动时的日志打印,减小启动日志噪声",
          "is_bot": false,
          "headline": "feat(core): 优化启动横幅展示实际后端与功能状态",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-30T09:00:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02ba07b908855e5ad2a33a4bf9df5996d3061001",
          "body": "- 启动横幅默认关闭,需通过 velo.banner.enabled=true 显式开启\n- 横幅中并发能力(幂等、限流、锁)显示实际生效的处理器类型\n- 支持展示用户自定义处理器类名,便于确认 AUTO 模式下后端实现\n- 缓存过期时间和日志、Web 模块的相关状态详情改为友好格式展示\n- 相关自动配置类新增对处理器的 ObjectProvider 注入支持\n- 删除幂等、限流、锁模块中启动时的日志打印,减小启动日志噪声",
          "is_bot": false,
          "headline": "feat(core): 优化启动横幅展示实际后端与功能状态",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-27T09:37:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77836da63d598995d5a72eaa6d53004deab51aea",
          "body": "- 从 RedisCacheTimeMapProvider 中删除 TTL 抖动计算\n- VeloCacheAutoConfiguration 配置中不再预计算并应用TTL抖动\n- 通过 JitterRedisCacheWriter 统一在写入时按 key 应用 TTL 抖动\n\nfeat(core): 新增 VeloMessageResolver 和 VeloBannerPrinter Bean\n\n- VeloCoreAutoConfiguration 自动注册 VeloMessageResolver\n- 自动注册 VeloBannerPrinter,支持启动横幅配置\n\nfeat(core):\n[…]\n\nrefactor(idempotent): 改进幂等切面,支持唯一 token 识别和消息解析\n\n- IdempotentAspect 中为每次请求生成唯一 token,防止误删幂等记录\n- 使用带 token 的 tryRecord 和 removeIfMatch 接口,保证清理安全\n- 幂等失败抛出 IdempotentException,携带 key、ttl、单位等信息\n- Idempot",
          "is_bot": false,
          "headline": "refactor(cache): 移除缓存TTL抖动逻辑,交由写入时统一处理",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-25T02:42:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78d97f118810b793f7ab461f73e72f8925f79825",
          "body": "- 为 RedisCacheTimeMapProvider 添加 TTL 抖动支持,防止缓存雪崩问题\n- VeloCacheAutoConfiguration 支持缓存空值配置和 TTL 抖动百分比\n- FeignLogAspect 实现 Ordered 接口,支持切面执行顺序自定义\n- IdempotentAspect、LockAspect、RateLimitAspect 实现 Ordered 接口,支持切面顺序配置\n- RedisLockHandler 支持同线程同 Key 嵌套加锁,避免锁误删\n- CaffeineLockHandler 限制缓存大小和过期时间,防止内存泄漏\n- JdkI\n[…]\n志性能优化\n- VeloProperties 增加切面执行顺序配置,优化配置管理\n- XssStringConverter 修复空字符串处理,避免空指针异常\n- 增加 RedisCacheTimeMapProvider 和 VeloCacheAutoConfiguration 单元测试,覆盖新功能和配置\n- Lock 注解 lease 默认调整为 30 秒,提示长任务需手动设置更大 lease 值",
          "is_bot": false,
          "headline": "feat(core): 优化缓存与切面等模块,提升灵活性和稳定性",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-20T13:29:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb1e68aea92e1c5ff20092e3f8084e40a9a670d4",
          "body": "- 在 VeloCacheAutoConfiguration、VeloFeignAutoConfiguration、VeloRedisAutoConfiguration、\n  VeloWebAutoConfiguration 等自动配置类中引入 SLF4J Logger\n- 使用 Lambda 表达式实现 RedisSerializer、InvocationLogWriter、RuntimeJsonSerializer\n  等 Bean 的惰性加载,并增加相应的调试日志输出\n- 修正 EasyExcelHelper、FastExcelHelper 及 FesodExcelHelper 中 Bo\n[…]\n统一改为 STRING\n- 在 VeloRedisAutoConfiguration 中抽象出默认 RedisSerializer 方法,统一日志输出\n- 在 VeloWebAutoConfiguration 中针对 RequestMappingHandlerAdapter 为空情况增加日志\n- 添加单元测试验证 BooleanConverter 是否正确声明支持的 CELL 类型为 STRING",
          "is_bot": false,
          "headline": "refactor(logging): 优化自动配置中日志的惰性初始化和类型修正",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-11T07:53:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13dfb31421297f1b7e98632d4bda0b8ba16356c3",
          "body": "- 将 max-payload-length 默认值调整为 -1,表示不限制长度\n- 用正则表达式 sensitive-pattern 替代敏感字段列表,提升匹配灵活性\n- 详细说明 max-payload-length 参数含义及各取值影响\n- 更新 Controller 和 Feign 调用日志相关说明,统一日志格式描述\n- 删除过时的截断默认值说明,明确目前默认不限长配置",
          "is_bot": false,
          "headline": "docs(logging): 优化调用日志配置及说明文档",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-10T03:22:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e42dc8fea9fee6e6d5a66f7a9dcf6a6237cd41a8",
          "body": "- 修改Feign和Controller日志切面配置,支持InvocationLogWriter的可选注入,缺失时使用Slf4JInvocationLogWriter作为默认实现\n- 优化Redis模板配置,支持通过ObjectProvider注入RedisSerializer,缺省时使用GenericJackson2JsonRedisSerializer作为默认序列化器\n- 调整VeloProperties中日志最大负载长度默认值为-1,实现无限输出\n- 补充相关自动配置单元测试,验证日志切面及Redis模板在缺失依赖情况下的回退行为和外部自定义序列化器的支持",
          "is_bot": false,
          "headline": "refactor(config): 优化日志组件配置及默认序列化器支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-10T03:20:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef3a7c08569dd459179c71fd47c376f35d08db70",
          "body": "- 收敛Controller、Feign、@InvokeLog、@SlowLog日志为统一调用日志模型\n- InvocationLogRecord新增loggerName字段,Slf4JInvocationLogWriter支持按照日志名缓存Logger\n- 日志默认输出调用完成态日志,包含调用耗时、状态、参数、结果和错误摘要\n- 新增traceId自动生成、MDC注入和响应头透传,默认开启并支持配置关闭\n- Feign日志target格式调整,剔除clientAddress前缀,提高日志简洁度\n- 统一日志相关配置归整至velo.log.invocation和velo.log.trace\n- VeloTraceEnvironmentPostProcessor增加日志日期格式配置支持\n- 调整InvokeLogAspect、SlowLogAspect、ControllerLogAspect,支持loggerName赋值,完善调用链日志采集\n- 测试覆盖日志新特性,增加loggerName相关断言,兼容性调整\n- 删除旧的日志拆分注解和Writer SPI,简化日志体系结构",
          "is_bot": false,
          "headline": "refactor(log): 统一调用日志模型及traceId功能增强",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-10T02:06:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e70c71ddbbf805c075c013a6a5aabc7b2ddd3762",
          "body": "- 替换原日志记录为InvocationLogWriter写入,移除对Logger及LogLevel依赖\n- 增加自动生成和清理TraceId支持,结合TraceContext管理MDC\n- FeignLogSupport简化为只构建调用目标字符串,不再处理日志等级或打印\n- 调整配置项路径,新增了统一调用日志相关配置属性\n- FeignLogAspect新增构造参数InvocationLogWriter,实现调用日志结构化输出\n- FeignTraceRequestInterceptor新增,用于Feign请求中传递TraceId\n- VeloFeignAutoConfiguration根据新配置及依赖创建FeignLogAspect和FeignTraceRequestInterceptor\n- 单元测试覆盖Feign调用日志改造后的行为及配置开关\n- 移除旧的基于Slf4j的日志判定和打印相关代码,实现调用日志的统一管理",
          "is_bot": false,
          "headline": "refactor(feign): 重构Feign调用日志为统一调用日志体系",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-08T10:09:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d75f47d8c0611da2b4adfac1d2a033bea27673a",
          "body": "- 将@see com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration注释,避免文档误导\n- 保持类注释清晰,便于维护和阅读\n- 无其他逻辑改动,仅注释层面调整",
          "is_bot": false,
          "headline": "refactor(mybatisplus): 注释掉无效的@see标签",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T09:20:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9ba6e811a9a3227c73103c30603f3b75760a5b8",
          "body": "- 将FeignClientMetadataResolver中客户端名称解析方法重命名为resolveClientAddress\n- 优化Feign客户端地址解析逻辑,支持value和contextId组合显示\n- FeignLogAspect中使用resolveClientAddress替代resolveClientName\n- FeignLogSupport调整buildArgsText方法使用MethodSignature及目标对象参数\n- 改进buildInvocationPrefix,去除“Feign”前缀并优化前缀格式\n- 优化方法参数名解析逻辑,支持通过InvocationUtils获取参数名\n- 更新测试用例,匹配新的日志前缀格式,去除“Feign”字样",
          "is_bot": false,
          "headline": "refactor(feign): 优化Feign客户端地址解析与日志构建",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T07:26:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f37d66ed139aa1852d7aea631b61a55d6d69ec8",
          "body": "- 删除 FeignLogBeanPostProcessor,改用 FeignLogAspect 进行日志切面处理\n- FeignLogAspect 中实现请求与响应的详细日志记录,保持原有功能\n- 在 VeloFeignAutoConfiguration 中替换原 BeanPostProcessor 为 FeignLogAspect\n- 支持 request-logging-max-payload-length 设置为 -1 时无限制输出日志内容\n- ControllerLogAspect 及 FeignLogSupport 中添加负载长度限制逻辑,支持负数表示无限制\n- 增加单元测试覆盖无限制负载长度日志功能\n- 更新 README 文档,说明日志负载长度配置及特殊取值的含义\n- 在自动配置测试中引入 AopAutoConfiguration 保证切面生效\n- 修复日志中响应字段错别字,提升日志准确性和一致性",
          "is_bot": false,
          "headline": "refactor(feign): 重构Feign日志记录为切面实现,支持无限制负载长度",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T07:04:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0bfa4efed243a9824dfa9d4f89ee2588c352c087",
          "body": "- 添加 `velo.feign.enabled`、`request-logging-enabled` 与 `request-logging-max-payload-length` 三项配置\n- 实现 FeignClientMetadataResolver 用于解析 Feign 客户端元数据以支持请求日志\n- 在 Spring Boot 各版本自动配置中引入 Feign 自动配置类\n- Feign 日志可按 Controller 请求日志格式输出,支持截断过长请求响应数据\n- jackson 配置新增 `longAsString` 替代 `unsafeIntegerAsString` 并新增 \n[…]\nbigDecimalStripTrailingZeros` 支持\n- 删除 UnsafeLongToStringSerializer,改用 LongToStringSerializer 简化序列化逻辑\n- 增加 Jackson 2/3 系列测试,验证 long 及 BigDecimal 序列化行为与配置兼容\n- 更新 README 和 CHANGELOG,详细说明新 Feign 日志功能及配置用法",
          "is_bot": false,
          "headline": "feat(feign): 新增 Feign 调试日志支持及相关配置项",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T06:05:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb2b671f471cd9222ba64ac1d88ded9aa25b36eb",
          "body": "- 新增 Controller 请求日志最大截取长度配置项\n- 允许在未引入 jsoup 时启用 ESCAPE XSS 策略\n- 添加 1.0.0 版本首个发版基线说明",
          "is_bot": false,
          "headline": "chore(release): 更新发布日志及配置说明",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-25T04:45:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be55dd5c29e26e0c080d889bd40663a5bd9341d1",
          "body": "- 新增配置项 requestLoggingMaxPayloadLength,默认值为 2000\n- 控制请求和响应体日志内容的最大长度,超出部分自动截断并加省略号\n- 日志中优先使用 Controller 映射路径模板替代原始请求路径\n- 修改 ControllerLogAspect 以支持按最大长度截断日志内容\n- 测试中增加对该配置项的默认值和截断效果的验证\n- 文档中添加默认开启及该配置的说明说明",
          "is_bot": false,
          "headline": "feat(web): 添加请求日志最大载荷长度配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-25T04:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75b4d1528d977e246911503918de44e59ee68607",
          "body": "- 将pom.xml中的revision属性从1.0.0修改为1.0.1\n- 保持Java编译版本为8\n- 未修改其他构建配置参数",
          "is_bot": false,
          "headline": "chore(build): 更新项目版本号至1.0.1",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-07T08:29:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0afec90a6e9866ff1bb7063397b9b5dda4e092a3",
          "body": "- 实现了基于JSoup的XSS清理器,支持多种清理策略\n- 新增基于Spring HtmlUtils的XSS转义清理器,适用于ESCAPE策略且无JSoup环境\n- 提供XssStringConverter用于整合XssCleaner组件,支持字符串转换清洗\n- 添加自动配置类,支持根据环境条件动态加载对应的XSS清理实现\n- 编写单元测试验证自动配置及清理器的正确创建和功能\n- 完成velo-autoconfigure-javax与jakarta两个模块的同步支持\n- 新增velo-autoconfigure-javax的Maven配置文件,完善依赖管理\n- 在common模块中实现SpringHtmlEscapeXssCleaner类\n- 更新README文档,添加XSS安全策略配置说明及使用示例",
          "is_bot": false,
          "headline": "feat(xss): 新增基于JSoup和Spring的XSS自动配置模块",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-07T08:29:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a03260da31e024a012fa9598a8359790ae41813",
          "body": "- 修改注解说明,空 key 时使用类名和方法名生成固定 Key\n- 删去强制要求 key 表达式的校验,直接使用注解中的 key\n- 修正 RedissonIdempotentHandler 中超时转换,兼容 Java 8 Duration API\n- 调整 RedisRateLimitHandler 中的速率计算,改为 per 毫秒代替每秒\n- 修复 Lua 脚本拼接格式,避免缩进错误影响脚本执行\n- 新增幂等处理和限流处理相关单元测试,确保关键逻辑正确执行",
          "is_bot": false,
          "headline": "fix(idempotent): 优化幂等键的默认生成与时长转换逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-02T15:48:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9ffc8fbf4aac9f7af8ca12f90c21ede25d3617e",
          "body": "- 将内置 Excel 转换器自动注册功能默认启用设为 true\n- 更新相关单元测试确保新的默认启用配置通过验证",
          "is_bot": false,
          "headline": "feat(config): 启用内置 Excel 转换器自动注册",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T07:43:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "451fd8ea4161e126610983bc4e20316d6f874509",
          "body": "- 移除了 README 文件中关于构建验证的章节\n- 删除了 Maven 编译和测试的示例命令\n- 精简文档内容,提高可读性",
          "is_bot": false,
          "headline": "docs(readme): 删除构建验证部分",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T07:39:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c84a4eb6320d1db323a49f30f4025a514db296c",
          "body": "- 新增项目介绍与主要特性说明\n- 添加 Maven 依赖配置示例,支持 Spring Boot 2/3/4\n- 详细说明缓存、Excel、幂等、限流、锁、日志、XSS、Jackson、MyBatis-Plus、Redis 等自动配置\n- 提供各功能注解及使用示例代码\n- 说明开箱即用能力及常用配置开启与关闭方法\n- 补充编译参数建议及构建验证命令\n- 集中管理配置键及默认值说明,方便快速上手和二次开发",
          "is_bot": false,
          "headline": "docs(readme): 添加 Velo Spring Boot Starter 详细使用文档",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T07:37:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d21e9f124dd1f705feb8af43a2d999fd0963a46e",
          "body": "- 新增InvocationUtils辅助调用方法参数名称解析和格式化输出\n- 实现Slf4JLogWriter,支持多日志级别的调用参数、结果、慢日志和错误日志写入\n- 增加ControllerLogAspect,利用Spring AOP拦截RestController方法调用并记录请求参数及响应\n- ControllerLogAspect支持请求日志截断、敏感数据省略和请求上下文信息记录\n- 为VELo Web模块添加单元测试,覆盖ControllerLogAspect的日志记录功能\n- 新增项目父POM配置,统一多模块管理与 Maven 插件配置",
          "is_bot": false,
          "headline": "feat(logging): 添加基础调用链路日志支持与Controller日志切面",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T05:10:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "383c7a28f21226d5a5e9b6bbc2a547c8302357c8",
          "body": "- 新增VeloDateTimeFormatAutoConfiguration,实现字符串到日期时间类型转换的自动配置\n- 提供基于VeloProperties的日期时间格式和时区配置支持\n- 新增VeloWebAutoConfiguration,实现Web MVC相关配置及Controller请求日志切面自动注册\n- 支持基于请求处理适配器的RuntimeJsonSerializer实现JSON序列化\n- 通过条件注解支持开关控制相关自动配置启用与禁用\n- 添加自动配置单元测试,覆盖日期时间转换及Web自动配置功能验证\n- 补充README文档,详细介绍Starter功能、依赖及配置使用方法",
          "is_bot": false,
          "headline": "feat(autoconfigure): 新增日期时间转换和Web MVC自动配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T02:49:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "769c5f8106b2896f6d034838e69de3f524313829",
          "body": "- 删除 date-time-enabled 配置项的缺省匹配,使其必须显式开启\n- 修改测试用例,确保默认情况下不注册日期时间转换器 bean\n\nstyle(web): 设置 VeloWebMvcConfigurer 的执行顺序为最低优先级\n\n- 为 jakarta 和 javax 版本的 VeloWebMvcConfigurer 类添加 @Order 注解\n- 确保配置类在 Spring MVC 配置中的调用顺序正确",
          "is_bot": false,
          "headline": "fix(converter): 修正日期时间转换器自动配置逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T07:55:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a76db0cf6185afe533db4faf6d63f1b50492e2a",
          "body": "- 新增 VeloWebExceptionHandler 作为基础Web异常处理器,支持多种常见异常响应\n- 实现对参数校验(MethodArgumentNotValidException, BindException等)的详细处理和日志记录\n- 支持业务异常限流、幂等性和分布式锁异常的专门处理\n- 新增 VeloValidationWebExceptionHandler 支持 Bean Validation @RequestParam/@PathVariable 参数校验异常处理\n- 新增 Jakarta 和 javax 两套自动配置模块的 Maven 配置文件,统一依赖管理及版本控制\n- 完善日志输出便于调试和定位请求异常问题",
          "is_bot": false,
          "headline": "feat(exception): 添加统一Web异常处理及Bean Validation支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T07:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc93146073700b136db883ac29f4bc26523688d3",
          "body": "- 新增 VeloProperties 类,包含丰富的配置属性结构\n- 实现 VeloDateTimeFormatAutoConfiguration,自动注册日期时间类型转换器\n- 添加 VeloWebMvcConfigurer,支持日期时间格式化和XSS字符串转换器注册\n- 增加单元测试,覆盖日期时间转换自动配置和WebMvcConfigurer配置\n- 完善配置元数据测试,确保配置属性元信息正确生成\n- 设置默认配置属性安全合理,满足生产环境默认需求",
          "is_bot": false,
          "headline": "feat(config): 添加Velo配置属性及日期时间转换自动配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T06:26:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cba146b63c0be3f2001f8465b629cad04daeffe4",
          "body": "- 实现基于Jackson 3的VeloJacksonAutoConfiguration自动配置\n- 支持不安全整数、BigDecimal、浮点数字符串序列化配置\n- 集成日期时间格式化及时区配置\n- 增加字符串编码解码和XSS清理功能支持\n- 提供Redis序列化器配置及验证\n- 实现对JsonEnum注解及枚举描述序列化处理\n- 编写大量单元测试覆盖各配置选项与序列化行为\n- 新增Jackson 3字符串反序列化器,支持注解和XSS清洗",
          "is_bot": false,
          "headline": "feat(jackson): 添加Jackson 3自动配置及全面单元测试覆盖",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T05:45:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebe403b3f6fd3f064c102fd11c7d727c5382cf16",
          "body": "- 新增 VeloCoreAutoConfiguration,提供核心Bean自动装配,包括Fingerprinter、NamingSuffixStrategy和JsonProcessorProvider\n- 新增 VeloProperties,集中管理starter的配置属性,涵盖日期时间格式、幂等、限流、锁、Redis、缓存、Excel、Jackson、日志、MyBatis-Plus及Web配置\n- 新增 JsonEnum注解支持,用于枚举字段的JSON序列化扩展\n- 实现 JacksonStringDeserializer,支持统一字符串反序列化并集成XSS过滤与自定义JSON解码\n- \n[…]\nr,增强枚举序列化支持枚举名称字段输出\n- 添加 VeloJacksonAutoConfiguration,定制Jackson时间格式、数值转字符串序列化及XSS清理相关序列化器和反序列化器\n- 增加 Redis的Jackson序列化配置,保证Redis读写的对象映射兼容性及类型信息完整\n- 编写测试,验证核心配置默认值和Jackson自动配置的反序列化及序列化功能,确保安全默认及配置覆盖正确生效",
          "is_bot": false,
          "headline": "feat(config): 添加核心自动配置和Jackson自动配置支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T05:31:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac019153f6b07aee5d852d018893a3301903ee08",
          "body": "- 添加EasyExcelHelper,支持多种数据类型转换及自定义格式化\n- 添加FastExcelHelper,集成类似转换功能,支持多种时间格式和数据类型\n- 添加FesodExcelHelper,实现多种类型转换器及注册方法\n- 提供默认转换器注册及支持自定义时区和格式\n- 实现类型转换时的空值处理及安全数范围判断\n- 新增VeloCacheAutoConfiguration,支持基于Redis的缓存自动配置\n- 支持缓存键前缀定制及缓存时间TTL配置\n- 兼容多种Spring Cache组件和自动配置顺序",
          "is_bot": false,
          "headline": "feat(excel): 新增多种Excel转换器及注册工具类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T01:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf5da04d4c5ebfdfdf578a956777cd879aa4db5a",
          "body": "- 添加 RedisCacheTimeMapProvider 支持按缓存名称定制缓存过期时间\n- 实现 VeloCacheAutoConfiguration 自动配置 RedisCacheManager 及相关组件\n- 支持通过配置属性设置缓存键前缀、分隔符及默认TTL\n- 移除 VeloDateTimeFormatAutoConfiguration 中日期时间转换器的属性条件\n- 新增 VeloCoreAutoConfiguration 提供核心Bean注册\n- 新增 VeloIdempotentAutoConfiguration、VeloLockAutoConfiguration、VeloRateLimitAutoConfiguration自动配置类\n- 调整 VeloRedisAutoConfiguration,移除条件属性限制,简化模板Bean创建\n- 扩展 VeloProperties 支持缓存、核心、幂等、限流、锁等配置\n- 添加对应单元测试验证自动配置及功能正确性",
          "is_bot": false,
          "headline": "feat(cache): 新增基于Redis的缓存时间映射与自动配置支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T10:06:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "809c544e05c645a9df53b267072239b1c12e3292",
          "body": "- 统一更新各模块对 VeloProperties 的导入路径\n- 新增 Excel 扩展转换器注册器支持多种实现自动注册\n- 实现幂等模块的多后端自动配置(JDK、Caffeine、Redis、Redisson)\n- 实现锁模块的多后端自动配置(JDK、Caffeine、Redis、Redisson)\n- 实现限流模块的多后端自动配置(JDK、Caffeine、Redis、Redisson)\n- 添加幂等、锁、限流切面实现,支持自动注入相关Handler和Fingerprinter\n- 新增工具类 ConcurrencyAnnotationUtils 的单元测试覆盖\n- 添加条件注解 @ConditionalOnListProperty 及其测试用例,增强配置灵活性\n- 提供默认安全的注解配置参数测试,保证默认值合理性",
          "is_bot": false,
          "headline": "feat(core): 重构并完善并发控制自动配置及相关切面实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T05:54:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dc13f83d56911c512a4948a35349144a344e4b2",
          "body": "- 在EasyExcelHelper中添加最大安全整数常量,避免超出JS安全整数范围时错误转换\n- 修改支持的Excel单元格类型为NUMBER而非STRING\n- 调整Long类型写入逻辑,超出安全范围时写入字符串,否则写入BigDecimal\n- 调整BigInteger类型写入逻辑,超出安全范围时写入字符串,否则写入BigDecimal\n- 在FastExcelHelper和FesodExcelHelper中同步上述相同的修改和逻辑调整",
          "is_bot": false,
          "headline": "fix(excel): 修正数字类型单元格的数据写入逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T03:34:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c217175fb17d18a1acc53a7fd93b250a5964ec4e",
          "body": "- 从VeloDateTimeFormatAutoConfiguration删除了StringToSqlDate、StringToSqlTime和StringToSqlTimestamp转换器及相关配置\n- 从VeloProperties中移除了sqlTimestampConverterEnabled、sqlDateConverterEnabled和sqlTimeConverterEnabled配置字段\n- 新增EasyExcelHelper,用于注册EasyExcel相关的多种数据类型转换器,支持多格式日期时间及布尔、数字等类型转换\n- 新增FastExcelHelper,提供类似EasyExcel的转换器注册功能,适配FastExcel库\n- 新增FesodExcelHelper,实现Fesod库的Excel转换器注册,支持日期时间和基本类型可靠转换\n- 各Excel转换器均实现严格的字符串修剪和空值处理,保证转换的稳定性和一致性",
          "is_bot": false,
          "headline": "feat(excel): 移除SQL时间转换器并新增Excel转换器注册工具类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T03:24:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a0c7b6200aaf4231d8b5dd2388da4bc995ef193",
          "body": "- 新增velo-autoconfigure-common模块的pom.xml定义,管理依赖版本和插件\n- 引入spring-context、mybatis-plus、redis等核心依赖,提供可选扩展\n- 配置maven编译插件,支持spring-boot配置处理器和lombok注解处理\n- 实现VeloMybatisPlusAutoConfiguration自动配置类,条件化加载MybatisPlus拦截器\n- 支持分页、乐观锁和防攻击内置拦截器的动态注册\n- 采用条件注解确保兼容性和按需加载,提高启动灵活性与性能",
          "is_bot": false,
          "headline": "feat(veloconfigure): 添加Mybatis Plus自动配置与依赖管理",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T03:16:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d9f3c8ccde11abd83405dd6a75811f1ca349a46",
          "body": "- 新增@RateLimit注解,支持请求数限制及时间窗口配置\n- 支持SpEL表达式动态生成限流key,实现按方法+表达式结果分桶限流\n- 限流提示信息可自定义,默认提示访问人数较多\n- 实现RateLimitAspect切面,方法和类上的限流注解均可生效\n- 采用Fingerprinter生成限流Key,支持方法指纹和SpEL表达式指纹组合\n- 当限流失败时,抛出RateLimitException异常\n- 添加单元测试覆盖限流切面和注解解析逻辑,包括接口代理和多方法不同SpEL key场景\n- 更新README,详细说明@RateLimit功能及key策略",
          "is_bot": false,
          "headline": "feat(ratelimit): 添加限流注解及切面支持方法和类级别限流",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:35:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e4b87c0c5af873a8f7d56c20fdc7510469cc072",
          "body": null,
          "is_bot": false,
          "headline": "feat(core): 默认启用控制器请求日志",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e71a895cec0a5fa2195bd34cf41298f1215a38f",
          "body": "- 新增 VeloProperties 配置属性类,实现丰富的配置项支持\n- 包含核心、幂等、限流、锁、Redis、缓存、Excel、Jackson、日志、MyBatis-Plus 和 Web 等子配置\n- 加入默认配置值,保证安全的生产环境默认行为\n- 添加 VeloConfigurationMetadataTest 和 VeloPropertiesDefaultsTest,验证配置元数据生成及默认值正确性\n\nrefactor(web): 优化 ControllerLogAspect 实现和日志逻辑\n\n- 重构 ControllerLogAspect,固定请求日志最大负载长度为 2000 字\n[…]\n逻辑\n\ntest(web): 增加 VeloWebAutoConfiguration 相关测试用例\n\n- 验证默认情况下 VeloWebMvcConfigurer 自动装配生效\n- 测试开启请求日志时 ControllerLogAspect 和序列化器正确注入\n- 验证使用自定义 Jackson ObjectMapper 的 JSON 序列化效果\n- 确认日志截断、请求参数序列化和日志格式符合预期",
          "is_bot": false,
          "headline": "feat(core): 添加核心配置属性类及测试覆盖",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:22:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3c2a87dd7c1e6d469ae6c7159abfaceda2bf75e",
          "body": "- 调整日志输出,增加请求查询参数信息,提升请求日志可读性\n- 移除 InvocationUtils 依赖,简化代码结构\n- 新增 ControllerLogAspect 中对请求查询参数的独立构建方法\n- 细化日志输出内容,支持请求参数和响应体的有效截断\n- 添加 HttpMessageConverterRuntimeJsonSerializer 实现,支持通过消息转换器序列化 JSON\n- 补充丰富单元测试覆盖,验证请求日志及序列化逻辑准确性\n- 实现对不安全参数和循环引用的 JSON 序列化安全处理\n- 新增对非 Web 环境下请求日志的防护和空处理逻辑",
          "is_bot": false,
          "headline": "feat(web): 优化 Controller 访问日志输出格式并添加单元测试",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:07:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c20701fc130b98494af46b0acea75476f8613a4",
          "body": "- 新增InvocationUtils工具类,支持方法签名和参数格式化\n- 添加VeloProperties配置类,集中管理Starter配置属性\n- 实现ControllerLogAspect切面,记录Controller请求调用日志\n- 提供VeloWebAutoConfiguration自动配置,集成MVC配置和日志切面\n- 编写单元测试验证默认配置和日志切面行为\n- 支持请求参数和响应体的JSON序列化与长度限制\n- 增强日志信息包含请求方法、URI等上下文内容",
          "is_bot": false,
          "headline": "feat(web): 添加Controller调用日志切面和Web自动配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-25T16:31:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c26a125e18fa31f31266c3e6d2807dce0e41398",
          "body": "- 新增 OnConcurrencyBackendCondition 条件判断类,实现基于配置和环境自动匹配后端类型\n- 移除 VeloProperties 中多余的后端开关类,简化配置结构\n- 补充核心配置属性元数据测试,确保配置项正确生成\n- 添加 VeloProperties 默认值单元测试,验证默认安全配置\n- 完善幂等、锁、限流模块的自动配置单元测试,验证不同后端选择逻辑\n- 引入对 Redisson、Redis、Caffeine 和 JDK 后端的优先级和显式配置支持\n- 增强自动配置的容错性,缺失依赖时报错机制验证\n- 新增各核心自动配置下的切面存在性测试,保证 AOP 织入正确",
          "is_bot": false,
          "headline": "feat(core): 添加条件注解以支持并发后端选择",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-25T14:56:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e384ed366895d7ff81371bb526909c1c21deef1a",
          "body": "- 在velo-autoconfigure-common模块中添加VeloProperties配置类,明确各功能模块配置项\n- 新增基于Caffeine、JDK、Redis以及Redisson的幂等处理器自动配置类,支持根据配置及环境自动选用\n- 新增基于Caffeine、JDK、Redis以及Redisson的锁处理器自动配置类,实现灵活的锁策略自动装配\n- 新增基于Caffeine、JDK、Redis以及Redisson的限流处理器自动配置类,提升流量控制能力及兼容多应用场景\n- 提供条件注解@ConditionalOnConcurrencyBackend用于根据后端类型和环境自动生效配置\n- 补充幂等功能单元测试,覆盖多种后端的Bean注入及优先级行为\n- 所有自动配置均支持属性控制启用/禁用,便于用户按需定制应用行为",
          "is_bot": false,
          "headline": "feat(autoconfigure): 新增幂等、锁和限流多种后端自动配置支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-25T14:32:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "535b47cd85c2421a8b67c06b3545f384aa631591",
          "body": "- 添加 VeloProperties 及其内部多层次配置属性类\n- 实现 Jackson 自动配置支持 Jackson 2 和 Jackson 3 的不同版本\n- 配置 Jackson 序列化和反序列化细节,包括日期时间格式和数字转字符串策略\n- 提供 Redis 序列化配置,确保稳定的对象映射支持多态处理\n- 编写 VeloConfigurationMetadataTest 检测配置元数据生成完整性\n- 编写 VeloPropertiesDefaultsTest 验证默认配置值的合理性\n- 添加 VeloJacksonAutoConfigurationTests 以测试 Jackson 配置的功能和行为",
          "is_bot": false,
          "headline": "feat(core): 新增 VeloProperties 核心配置类及相关自动配置和测试",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-24T16:10:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd01076e962e8e473b33bc02a595d57c422fbb71",
          "body": "- 将 autoconfigure 中 spring-boot-starter-aop 替换为 spring-aop 和 aspectjweaver,且设置为 provided 范围\n- 精简 velo-spring-boot2/3/4-starter,仅保留基础 aop 依赖,移除 Web、Validation、Redis、Cache 等传递依赖\n- pom.xml 中版本号由 1.0.0-SNAPSHOT 更新为 1.0.0\n- README 详细说明基础 starter 的定位为低侵入、按需引入,建议业务项目显式声明所需技术栈依赖\n- README 补充示例说明如何按需引入 Redis、Cache、Redisson、Web、MyBatis-Plus 等依赖\n- README 结构调整,明确 starter 模块仅聚合依赖,自动配置放在 autoconfigure 模块",
          "is_bot": false,
          "headline": "chore(deps): 优化 starter 模块及依赖管理",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-10T16:09:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "800dd9a734c19bb425a7cfcf5f0739055cc103d9",
          "body": "- 新增 CaffeineLockHandler 实现,支持单 JVM 内的锁互斥\n- 新增 VeloLockCaffeineAutoConfiguration 自动配置,替代默认 JDK 实现\n- 修改 VeloLockAutoConfiguration 引入 Caffeine 配置\n- 优化 JdkLockHandler,支持锁状态引用计数以便自动清理\n- LockHandler 接口增加对持有时间的说明\n- 锁注解属性添加 key 属性非空校验,支持 SpEL 表达式并严格检查\n- LockAspect 中增强对参数的校验,防止无效的等待和持有时间\n- SpelFingerprinter\n[…]\nmpotent 和 Lock 注解关键配置参数增加非空和有效性检查\n- VeloProperties 新增对 Caffeine 锁后端的配置支持,默认开启\n- 添加 SpelFingerprinterTests、JdkLockHandlerTests、LockAspectTests 和 RateLimitAspectTests 单元测试\n- 优化日志提示,明确指出本地锁和本地限流器的适用场景和限制",
          "is_bot": false,
          "headline": "refactor(lock): 添加基于 Caffeine 的本地锁支持并优化锁处理逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-04T16:56:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c04d10ba3e3273d69262a0be140db00accef32fa",
          "body": "- 新增 RateLimitWindow 组件,统一处理速率、容量和时间间隔的计算\n- 修改 Caffeine、JDK、本地 Redis 和 Redisson 限流器,使用统一窗口参数\n- 令牌桶令牌补充算法根据规范化容量和间隔时间计算,提升一致性\n- Redisson 限流器新增配置匹配检测,动态更新不匹配的限流配置\n- Redis 限流器调整令牌计算,提前归一化每毫秒恢复速率\n- 修正 Jakarta 和 Javax 模块中日志自动配置解析多 Bean 行为,支持单个自定义写入器\n- 更新 WebMvcConfigurer,修正日期格式化器使用日期而非日期时间模式\n- 添加 RateLimitWindow 及 RedissonRateLimitHandler 单元测试覆盖新逻辑\n- 增加 Jakarta 模块日志自动配置单元测试验证自定义写入器注入功能\n- 增加 WebMvcConfigurer 测试,验证 Java Util Date 格式化应用自定义日期格式及时区",
          "is_bot": false,
          "headline": "refactor(ratelimit): 统一限流窗口计算逻辑以支持分数速率",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-04T15:58:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b911ef020151785dbfde32d2109fffe9a11861ba",
          "body": "- 移除缓存自动配置相关类,精简缓存实现\n- 删除日期时间转换器相关代码,清理过时转换器\n- 删除条件注解与条件判断实现,移除自定义条件支持\n- 删除基于SpEL的指纹签名器实现及接口\n- 移除各种脱敏处理器实现,减少不必要的功能代码\n- 删除JSON处理器提供者及默认实现\n- 清理后缀提供器和枚举字段转化约定接口\n- 删除AOP相关的工具类及方法参数格式化工具\n- 移除Web请求相关的工具方法和请求响应处理\n- 大幅度精简核心模块,优化项目结构和依赖关系",
          "is_bot": false,
          "headline": "refactor(core): 删除所有核心工具类和SPI相关代码",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-02T00:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e2c493e236229313b4840e0a586add0fe3c4e1",
          "body": "- 移除缓存自动配置相关类,精简缓存实现\n- 删除日期时间转换器相关代码,清理过时转换器\n- 删除条件注解与条件判断实现,移除自定义条件支持\n- 删除基于SpEL的指纹签名器实现及接口\n- 移除各种脱敏处理器实现,减少不必要的功能代码\n- 删除JSON处理器提供者及默认实现\n- 清理后缀提供器和枚举字段转化约定接口\n- 删除AOP相关的工具类及方法参数格式化工具\n- 移除Web请求相关的工具方法和请求响应处理\n- 大幅度精简核心模块,优化项目结构和依赖关系",
          "is_bot": false,
          "headline": "refactor(core): 删除所有核心工具类和SPI相关代码",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-02T00:36:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8c6d6412d580e3443ff8f1f2cfedb95b7631068",
          "body": "- 添加 .claude 目录到忽略列表\n- 添加 AGENTS.md 文件到忽略列表\n- 添加 CLAUDE.md 文件到忽略列表\n- 添加 /plans/ 目录下所有文件到忽略列表",
          "is_bot": false,
          "headline": "chore(git): 更新 .gitignore 文件忽略规则",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-27T14:09:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04f2b0cda8da733e23acd129723377c932e20c8b",
          "body": "- 将modulesAppend替换为modules方法进行模块注册\n- 确保枚举模块正确集成到Jackson配置中\n- 修复可能的模块注册覆盖问题",
          "is_bot": false,
          "headline": "fix(jackson): 修正枚举模块注册方法",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-15T03:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b13740b6c15a8d424c4e5d402a4d223924fced3",
          "body": "- 为 RateLimit 注解添加 timeout 和 unit 参数支持可配置时间窗口\n- 修改 RateLimitHandler 接口方法签名以支持时间窗口参数\n- 更新所有限流处理器实现(Caffeine、JDK、Redis、Redisson)以支持令牌桶算法\n- 将固定窗口算法改为令牌桶算法提供更精确的限流控制\n- 为 JDK 实现的幂等和锁处理器添加分布式环境警告日志\n- 优化 Redis 限流器的 Lua 脚本使用毫秒级时间戳提高精度",
          "is_bot": false,
          "headline": "feat(ratelimit): 扩展限流功能支持可配置时间窗口",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-06T14:49:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e5e43e5d46e8a158c8aa0a32fa35d14083f498f",
          "body": "- 在幂等处理接口及各个实现类中新增 unlock 方法,完善锁释放功能\n- 修改切面逻辑,确保执行业务方法后释放幂等锁,防止死锁\n- 调整 Redis 幂等自动配置,替换 RedissonClient 依赖为 RedisTemplate\n- 修正 Jackson 配置中枚举模块的加载方式,改为追加模块\n- 更新日志自动配置,改为依赖 Slf4JLogWriter 防止日志切面加载异常\n- Prop 配置类日期时间和 Web 配置属性添加默认初始化实例\n- 删除速率限制配置中@ConditionalOnClass注解,防止条件判断失效",
          "is_bot": false,
          "headline": "fix(idempotent): 添加幂等锁释放机制及优化配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-06T06:30:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cff1f0bdf3732dbf02f82e881abc6b104274e71",
          "body": "- 调整JsonEnumSerializerModifier中的方法参数缩进\n- 统一LuminionJacksonConfig中配置类和方法的注释格式\n- 优化Jackson2ObjectMapperBuilderCustomizerConfiguration配置的代码缩进和换行\n- 规范JacksonRedisConfiguration中redisSerializer方法的注释和代码排版\n- 保持代码风格一致,提升可读性和维护性",
          "is_bot": false,
          "headline": "refactor(jackson): 优化Jackson配置代码格式和注释风格",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-03T05:25:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bf0a093ef81ab88ab796f63c1bd93901312fa41",
          "body": "- 调整注解中默认超时时间由5秒改为3秒,移除autoRelease字段及相关逻辑\n- IdempotentAspect中移除自动释放锁的代码,简化执行流程\n- CaffeineIdempotentHandler改用自定义过期策略Expiry动态控制缓存条目存活时间\n- JdkIdempotentHandler引入异步清理机制,避免阻塞并发性能下降,简化释放逻辑\n- Redis和Redisson幂等处理器中移除释放锁的相关方法实现\n- 接口IdempotentHandler移除释放锁方法定义,统一接口职责",
          "is_bot": false,
          "headline": "refactor(idempotent): 优化幂等处理逻辑和缓存过期策略",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-03T02:05:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b93f3165b4543cae6438bb35eff5e5c1aff31c1",
          "body": "- 将所有类和配置中的 @since 注释从 1.0.1 修改为 1.0.0\n- 涉及幂等处理器、分布式锁、限流相关实现及配置类\n- 保持版本注释统一,便于版本管理和文档维护",
          "is_bot": false,
          "headline": "chore(version): 统一修正所有模块的 @since 注释版本号",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:57:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a34793c35aadfdede38e74e82268eaa62f24a3e",
          "body": "- 删除幂等模块中基于Guava实现的自动配置和处理器类\n- 删除限流模块中基于Guava实现的自动配置和处理器类\n- 取消自动配置中Guava相关的class条件依赖\n- 修改Jdk自动配置类的依赖优先级,均改为依赖Caffeine相关配置\n- 更新spring.factories文件,注释禁用Guava相关自动配置\n- pom.xml中升级jsoup版本到1.21.1",
          "is_bot": false,
          "headline": "refactor(config): 移除Guava相关自动配置和实现,调整依赖关系",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:53:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2659bbbdaf3f676212dc469b4301eeed4ab8d98",
          "body": "- 调整了多个依赖在pom.xml中的顺序,使其更加规范\n- 移除了重复的依赖声明,避免冗余\n- 删除了明确版本号以便于版本统一管理\n- 确保可选依赖标记一致,方便模块化配置",
          "is_bot": false,
          "headline": "chore(deps): 优化依赖顺序调整及版本配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:49:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d052218758ac9f29effd7bcfa1335b14ef49ccf5",
          "body": "- 将令牌桶时间戳改为秒的小数形式,支持更高频率请求的精确控制\n- 保证容量至少为1,避免burst值为0导致异常\n- Lua脚本中失败时不更新last_time,防止高频请求导致令牌永久耗尽\n- 注释禁用Guava自动配置,避免不必要的类加载",
          "is_bot": false,
          "headline": "fix(rateLimit): 优化令牌桶算法时间单位及避免高频请求问题",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:45:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4354b166d97f2be2a34ec6728ab38934ae7ed4ee",
          "body": "- 移除 LuminionLockConfig 与 LuminionRateLimitConfig 中对不同实现的内嵌配置\n- 新增 Redisson、Redis 和 JDK 三种锁实现的独立自动配置类\n- 新增 Redisson、Redis、Caffeine、Guava 和 JDK 五种限流实现的独立自动配置类\n- 更新 AutoConfiguration.imports 文件,注册所有新拆分的自动配置类\n- 精简原配置类,仅保留基础公共配置,提升模块可维护性与扩展性",
          "is_bot": false,
          "headline": "refactor(config): 重构锁和限流自动配置拆分为多个独立模块",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:22:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a03269482370b4dcea4c4d8657f0b1debd1a96a8",
          "body": "- 在 AutoConfiguration.imports 文件中新增 LuminionIdempotentConfig\n- 支持幂等相关配置的自动装配功能\n- 保持与现有幂等和锁配置的一致性\n- 促进幂等功能模块的自动加载和管理",
          "is_bot": false,
          "headline": "feat(config): 添加幂等配置类到自动装配列表",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T08:04:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74f17820c7ebd67e44034cf08501d802fcc2960c",
          "body": "- 删除原有的多功能复合幂等配置类\n- 新增独立的 Redisson 配置类,优先使用 Redisson 实现\n- 新增独立的 Redis 配置类,作为 Redis 实现选项\n- 新增独立的 Caffeine 配置类,提供本地缓存实现\n- 新增独立的 Guava 配置类,为 Guava 缓存实现提供支持\n- 新增独立的 JDK 配置类,作为兜底实现\n- 更新 AutoConfiguration.imports 文件,按需加载全新的多种幂等自动配置\n- 保持优先级顺序:Redisson > Redis > Caffeine > Guava > JDK\n- 保留幂等切面 IdempotentAspect 的自动装配依赖关系",
          "is_bot": false,
          "headline": "refactor(idempotent): 重构幂等自动配置拆分为多模块配置类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T08:04:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0498f7699507eddec3cd141d218454286a904f4",
          "body": "- 删除原有的LuminionIdempotentConfig文件\n- 将幂等自动配置拆分为多个文件,分别对应Redisson、Redis、Caffeine、Guava、JDK实现\n- 每个配置类移至idempotent.config包下,明确配置职责和依赖关系\n- 更新AutoConfiguration.imports文件中幂等配置的导入路径\n- 保持原有幂等实现优先级和逻辑一致,提升代码结构清晰度和可维护性",
          "is_bot": false,
          "headline": "refactor(idempotent): 重构幂等自动配置拆分至独立模块",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:39:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9959b9250e10bf4e1ebe11d319bc74ef654bd92",
          "body": "- 去除对RedisSerializer Bean的强制依赖,改用ObjectProvider延迟获取\n- 提供默认的GenericJackson2JsonRedisSerializer作为序列化器备选\n- 兼容spring.cache.type配置,默认启用Redis缓存管理器\n- 优化RedisCacheConfiguration,修正缓存序列化设置和过期时间\n- 调整自动配置类的注解顺序和加载条件,保障配置生效顺序正确",
          "is_bot": false,
          "headline": "fix(cache): 修复Redis缓存配置的序列化器兼容性问题",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:26:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ceda0aab79d73e1281557bea7cb7193615aa3e0",
          "body": "- 删除了 StringDecryptor 的导入\n- 去除了 Spring BeanFactory 的导入\n- 保持了反序列化相关导入不变\n- 优化了类的依赖,减少多余引用",
          "is_bot": false,
          "headline": "refactor(jackson): 移除未使用的导入优化代码结构",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:22:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2075da233e987403d583fe830adf97899f29b37f",
          "body": "- 优化注解功能描述,增加分布式支持及自定义实现说明\n- 合并并简化注解JSON字段功能说明,添加枚举转义支持\n- 精简日志注解描述,突出入参、返回值、错误信息及执行时长\n- 补充自动配置相关内容,明确spring-cache-redis和MyBatis-Plus插件配置\n- 增加Web参数转换器及Spring converter支持说明\n- 新增web容器上下文工具、全局异常处理和XSS处理相关描述",
          "is_bot": false,
          "headline": "docs(readme): 更新功能特性描述内容",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:19:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c686f12ad204f7b0b6ae41bb6de7b5b3c609a8f",
          "body": "- 优化项目简介,简化功能描述\n- 新增当前迭代声明,明确版本信息\n- 添加旧版本地址链接,方便用户查阅历史版本\n- 格式调整,提升文档可读性",
          "is_bot": false,
          "headline": "docs(readme): 更新项目说明文档,添加旧版本地址链接",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:09:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cc546e5e5a090fad2cae791cb2a6c0970ad310b",
          "body": "- 新增JsonProcessorProvider接口定义JSON处理器实例获取方法\n- 实现DefaultJsonProcessorProvider,根据Spring容器或反射实例化处理器\n- README完善功能特性,详细描述注解防重提交、限流、加密、日志等功能支持\n- spring自动配置文件中默认禁用缓存模块,需用户手动导入使用",
          "is_bot": false,
          "headline": "feat(core): 增加JSON处理器自动获取机制",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec086cb3950f3cee89f891e85d4d7ac9962aff91",
          "body": "- 将多个脱敏器类从 StringMasker 接口改为实现 java.util.function.Function<String, String>\n- 移动脱敏器类包路径由 spi.masker 重命名为 spi.func\n- 删除旧的 StringMasker、StringEncryptor、StringDecryptor 接口及相关注解 JsonMask\n- 重命名 JsonDecrypt 和 JsonEncrypt 注解为 JsonDecode 和 JsonEncode,调整其属性类型为 Function<String,String>\n- 重构 Jackson 序列化和反序列化器,支持\n[…]\n 更新 Jackson 配置类,改用 BeanFactory 延迟获取 JsonProcessorProvider 和 XssCleaner,统一字符串处理逻辑\n- 删除 LuminionMaskerAutoConfiguration,相关 Bean 由其他配置类管理\n- 新增 JsonProcessorProvider Bean,提供转换函数实例支持\n- 优化包结构与组件依赖,提升扩展性和规范性",
          "is_bot": false,
          "headline": "refactor(core): 重构脱敏器为函数接口,简化处理逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:05:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "032d834420ac386cde961744d7e1d25caa1bcf5b",
          "body": "- 新增通用文件下载响应头设置方法,解决中文乱码和空格问题\n- 兼容现代浏览器和旧版IE的Content-Disposition写法\n- 设置跨域时前端可访问Content-Disposition响应头\n- 新增获取Excel、CSV、Word、PDF、ZIP和通用二进制文件的输出流方法\n- 统一使用UTF-8编码确保文件名正确显示",
          "is_bot": false,
          "headline": "feat(web): 添加文件下载响应头及多种格式输出流支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T05:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6fdd38c51aa6d44475c64f90a9cfdf181106df6",
          "body": "- 从 LuminionConverterConfig 中移除 feature.converter.datetime 包导入\n- 从 LuminionIdempotentConfig 中移除 feature.idempotent.support 包导入\n- 从 LuminionRateLimitConfig 中移除 feature.ratelimit.support 包导入\n- 统一使用新的支持包路径替代旧的特性模块导入",
          "is_bot": false,
          "headline": "refactor(config): 移除过时的包导入路径",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-26T02:46:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a56d93554c798186ce669b923ce87f227b8618d",
          "body": "- 将 feature.cache 包重命名为 cache\n- 将 feature.converter 包重命名为 converter\n- 将 feature.idempotent 包重命名为 idempotent\n- 将 feature.jackson 包重命名为 jackson\n- 将 feature.lock 包重命名为 lock\n- 将 feature.log 包重命名为 log\n- 移除 core 模块中的 masker 相关组件\n- 更新 Prop 类中 XssStrategy 的导入路径\n- 调整 Jackson 配置类中序列化器和反序列化器的导入路径\n- 修改日志切面中注解引用的包路径",
          "is_bot": false,
          "headline": "refactor(starter): 重构包结构并移除核心功能组件",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-26T02:42:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe75f9b43e77f3100333a9225fd5006814376f0c",
          "body": "- 将 CorePreConfig 重命名为 LuminionCoreAutoConfiguration 并移至 core 包\n- 将 Prop 类从 starter 包移至 core 包并启用配置属性\n- 将 CacheConfig 重命名为 LuminionCacheAutoConfiguration 并配置 Redisson 自动配置依赖\n- 将 ConverterConfig 重命名为 LuminionConverterConfig 并更新 Prop 导入路径\n- 将 IdempotentConfig 重命名为 LuminionIdempotentConfig 并更新 Prop 导入路\n[…]\nrop 导入路径\n- 将 RedisConfig 重命名为 LuminionRedisConfig\n- 将 WebMvcConfig 重命名为 LuminionWebAutoConfiguration 并更新 Prop 导入路径\n- 移除原有的 LuminionAutoConfiguration 配置类\n- 更新 AutoConfiguration.imports 文件中的自动配置类列表和加载顺序",
          "is_bot": false,
          "headline": "refactor(config): 重构自动配置类结构并更新导入配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-26T02:01:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aba5f8b82bc30e3aedce5644d5e708ac520c7b60",
          "body": "- 将 RateLimit 注解的默认限流速率从 10 QPS 调整为 50 QPS\n- 更新了限流配置的默认参数设置",
          "is_bot": false,
          "headline": "chore(ratelimit): 修改限流注解默认值",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T10:09:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3224d4d920cf6d2e93342cb3b0e10bcc390ab3bf",
          "body": "- 删除了 JavaUtilDateFormatter、LocalDateFormatter、LocalDateTimeFormatter 和 LocalTimeFormatter 类\n- 移除了 MaskAnnotationFormatterFactory 和 UnmaskAnnotationFormatterFactory 格式化工厂\n- 删除了 XssFormatter XSS清理格式化器\n- 将 BaseExceptionHandler 重命名为 WebExceptionHandler\n- 更新了 WebExceptionHandler 的类名引用和构造函数名称",
          "is_bot": false,
          "headline": "refactor(formatter): 移除日期格式化器并重命名异常处理器",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T09:59:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c6be5eecdc420b8cadc7ff0caa7eea897ef2c57",
          "body": "- 将switch语句替换为if-else条件判断结构\n- 保持原有的XssStrategy枚举类型处理逻辑不变\n- 提高代码可读性和维护性",
          "is_bot": false,
          "headline": "refactor(xss): 重构Jsoup XSS清理器策略选择逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T09:31:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fdeb1fa82124b2d63a51c2a7ea77acc9e197801",
          "body": "- 将 WebContextHolder 重命名为 WebUtils 并移至 core.util 包\n- 将 AspectUtils 类改为抽象类并添加 NoArgsConstructor 注解\n- 在 ConverterConfig 上添加 Deprecated 注解和相关文档说明\n- 修复 JacksonStringSerializer 中的泛型类型声明\n- 更新 RequestLogWriter 中的导入路径和方法调用\n- 移除 WebMvcConfig 中的 WebMvcConfigurer 实现接口\n- 将 BaseWebMvcConfigurer 重命名为 WebMvcEnhanceConfigurer\n- 简化 WebMvcEnhanceConfigurer 的构造函数逻辑",
          "is_bot": false,
          "headline": "refactor(core): 重构工具类结构并优化配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T09:27:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e09aa752540461c2329487c06284a585b806aedd",
          "body": "- 将 StringToDateConverter 重命名为 StringToJavaUtilDateConverter\n- 移除 XssStringConverter、MaskAnnotationFormatterFactory 和相关依赖\n- 移除 ApplicationContext 依赖以简化配置\n- 注释掉 SQL 日期转换器相关 Bean 配置\n- 将 UnmaskAnnotationFormatterFactory 类注释为临时禁用\n- 从 BaseWebMvcConfigurer 中移除注解驱动格式化器注册\n- 添加 WebProperties 配置类支持 CORS 控制\n- 在 CORS 配置中添加条件判断控制跨域启用",
          "is_bot": false,
          "headline": "refactor(converter): 重构日期转换器并移除废弃功能",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T08:45:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "728c9d61492d58843449d2bb571f522be8da023f",
          "body": "- 从 ConverterConfig 中移除 MaskAnnotationFormatterFactory 和 UnmaskAnnotationFormatterFactory 的 Bean 定义\n- 从 LuminionAutoConfiguration 中移除 MaskConfig 配置类的引用\n- 简化了转换器配置,移除了不必要的注解格式化功能\n- 减少了自动配置的复杂性,提高了启动性能",
          "is_bot": false,
          "headline": "refactor(feature): 移除掩码注解格式化工厂配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T08:30:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d034a4ab81366c5675a8f2044c02c1688b864d16",
          "body": "- 将 StringToDateConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToLocalDateConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToLocalDateTimeConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToLocalTi\n[…]\nmeConverter\n- 将 StringToSqlTimeConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToSqlTimestampConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter",
          "is_bot": false,
          "headline": "refactor(datetime): 更新日期时间转换器接口实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T07:56:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db6708c4544c419687d6903482ede102e797bda2",
          "body": "- 移除 CoreConfig、IdempotentConfig 和 RateLimitConfig 自动配置类\n- 将脱敏策略类移动到 core.spi.masker 包下并实现 StringMasker 接口\n- 将 MethodFingerprinter 重命名为 Fingerprinter 并移动到 core.spi 包\n- 创建新的 CorePreConfig 替代原有的 MaskConfig 进行核心预配置\n- 将缓存相关组件移动到 feature.cache 子包\n- 将日期时间转换器移动到 feature.converter.datetime 子包\n- 更新幂等性相关组件到 feature.idempotent 子包并使用新的 Fingerprinter 接口\n- 移除 XSS 清理转换器的自动配置\n- 重构 AspectUtils 工具类并添加新的参数字符串生成功能",
          "is_bot": false,
          "headline": "refactor(core): 重构核心组件结构并移除自动配置类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T07:55:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "201687e5934c775f92c7f751e06c11f77831415e",
          "body": "- 将RateLimiter接口重命名为RateLimitHandler\n- 修改相关实现类名称,统一后缀为RateLimitHandler\n- 更新RateLimitConfig配置类中相关Bean定义及依赖注入\n- 调整RateLimitAspect中使用的限流处理器变量名和类型\n- 保持原有逻辑不变,仅限于接口及类名重构和相关引用更新",
          "is_bot": false,
          "headline": "refactor(ratelimit): 重命名限流相关接口及实现类以提升一致性",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T06:22:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "113625ab995172c47dc24e2b90fad10251da7d59",
          "body": "- 删除 LimitType 枚举及相关代码\n- 取消根据 IP、用户及全局维度生成限流 Key 的实现\n- 修改限流 Key 生成策略为仅使用方法指纹(类名+方法名+参数内容)\n- 删除获取客户端 IP 和用户 ID 的相关方法\n- 精简限流切面逻辑,优化异常抛出流程",
          "is_bot": false,
          "headline": "refactor(ratelimit): 移除限流类型支持并简化Key生成逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T06:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d6e9b9d698c8bdb56095a960553f9b75a365b14",
          "body": "- RateLimit 注解支持类和方法级别配置,合并并简化限流速率及 Key 配置\n- RateLimitAspect 限流切面增强,支持方法覆盖类注解配置,简化令牌桶参数\n- RateLimiter 接口修改,移除突发量参数,统一只传递速率值\n- 新增本地限流实现:基于 Caffeine、Guava 和 JDK 固定窗口的限流器,提供多种降级选择\n- 移除旧的 LocalRateLimiter,改用更灵活的 CaffeineRateLimiter\n- RateLimitConfig 调整,根据条件装配优先 Redis 分布式限流,依次降级至 Caffeine、Guava 和 JDK 实现\n- 修改 RedisRateLimiter,兼容新版接口及参数\n- Idempotent 注解调整默认 autoRelease 为 false,提示信息更新为“您的请求已提交,请勿重复操作”",
          "is_bot": false,
          "headline": "feat(ratelimit): 优化限流器及注解实现,新增多种本地限流支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T06:06:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9d1f710aeed34556559ea3712509b1958e38004",
          "body": "- 基于 Caffeine Cache 实现本地幂等处理器,存储过期时间戳并保证原子性\n- 基于 Guava Cache 实现本地幂等处理器,提供兜底过期策略防止内存泄漏\n- 基于 JDK ConcurrentHashMap 实现幂等处理器,作为基础兜底方案,支持过期键清理\n- 各实现均通过 compute 方法保证操作的原子性,确保并发安全\n- 提供键的尝试加锁和释放接口,为幂等控制提供底层支持",
          "is_bot": false,
          "headline": "feat(idempotent): 添加本地幂等处理器实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:51:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0f2672a186ae76b7297cb54496ba2f1cbd0e6dc",
          "body": "- 删除基于 Caffeine 的本地幂等处理器 LocalIdempotentHandler\n- 新增支持多种幂等处理方案:Caffeine、Guava、JDK ConcurrentHashMap\n- 优先使用 Redis 实现,按顺序降级至其他实现\n- 调整 IdempotentAspect 构造函数实现,去除 lombok 依赖@RequiredArgsConstructor\n- 细化幂等处理器 Bean 装配顺序及条件注解\n- 增强配置类的可读性及扩展性",
          "is_bot": false,
          "headline": "refactor(idempotent): 优化幂等处理器配置和实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:51:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "793a7232d4ee32d6884d7bb3d4e97734a4c19b64",
          "body": "- 新增isWebContext方法判断当前请求是否为Web请求上下文\n- 使用RequestContextHolder的getRequestAttributes方法实现判断\n- 通过判断请求属性是否为ServletRequestAttributes实例来确定上下文类型\n- 方便调用者快速判断当前环境是否为Web请求上下文环境",
          "is_bot": false,
          "headline": "feat(web): 添加判断当前是否在Web请求上下文的方法",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "337665c1d90b1bdc1c8913ef3f5583a8af4cacb7",
          "body": "- 在日志配置类中新增 ErrorLogWriter 和 ErrorLogAspect 相关 Bean 定义\n- 在 @InvokeLog 注解中增加 @ErrorLog 支持,统一处理出错日志\n- 在 Slf4JLogWriter 实现 ErrorLogWriter 接口,支持错误日志输出\n- 新增 EmailLogWriter 实现,通过邮件发送异常错误通知\n- 优化邮件错误通知的内容格式,包含应用名、端口、请求信息、方法及堆栈信息\n- 修正邮件中 HTML 样式及格式细节,改善邮件可读性",
          "is_bot": false,
          "headline": "feat(log): 增加错误日志支持及邮件通知功能",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:20:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62b3dc266bd20c2ac82101b860f9ae9e587c902a",
          "body": "- 取消注释并启用 @AutoConfiguration 注解\n- 添加 @ConditionalOnBean(Prop.class) 限制自动配置生效条件\n- 移除类的 @Deprecated 标记\n- 确保配置类只有在 Prop bean 存在时加载",
          "is_bot": false,
          "headline": "feat(config): 启用自动配置并添加条件注解",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:06:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22b688a8d30e139f5b757bb312cf1457b786ac86",
          "body": "- 移除 InvokeLogAspect 和相关抽象日志写入器接口及实现,简化日志体系\n- 新增 ArgsLog、ResultLog、InvokeLog(复合注解)分别支持入参与返回值日志\n- 引入 SlowLog 注解与 SlowLogAspect 实现慢日志切面功能,优化性能监控\n- 新增 Slf4JLogWriter 实现日志写入,并提供默认 Bean 配置支持入参、结果及慢日志\n- 调整 LogConfig 自动配置,新增多个日志切面 Bean 的条件加载\n- 新增 AspectUtils 工具类,统一方法签名日志处理逻辑\n- 修改 EmailLogWriter 采用 AspectUtils 提供的格式化方法完善邮件通知信息\n- BaseWebMvcConfigurer 增加 allowCrossOrigin 方法支持跨域配置,方便子类调用\n- 标记 ConverterConfig 为弃用,移除 lombok @Slf4j 注解\n- 代码中统一移除多处 lombok @Slf4j 注解,简化日志依赖与管理",
          "is_bot": false,
          "headline": "refactor(log): 重构日志相关组件与注解,移除过时代码",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T03:47:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba204041377b7984459b1771bcac02b0c8a9dfc2",
          "body": "- 将 MethodLog 重命名为 InvokeLog 并新增记录入参和返回值的开关配置\n- 将 TimeLog 重命名为 SlowLog,新增阈值时间单位和默认阈值,调整日志等级默认值\n- MethodLogAspect 改为 InvokeLogAspect,支持按需记录入参和返回值,计算并传递调用耗时\n- 删除 TimeLogAspect,新增 SlowLogAspect 作为慢日志切面实现\n- 抽象日志写入接口及实现类均重命名为 InvokeLogWriter 相关命名,统一日志写入接口\n- RequestLogWriter 继承更新后的 Slf4JInvokeLogWriter,添加请求信息前缀\n- 修改 EmailLogWriter,修复邮件发送异常捕获,调整方法参数及格式化细节\n- LogConfig 配置类更新为 InvokeLog 相关 Bean 的加载及条件判断逻辑",
          "is_bot": false,
          "headline": "refactor(log): 重构并重命名日志相关注解和类,优化日志功能实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T02:39:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c9ae2d050b742779da9642550a4b6c5d2534c85",
          "body": "- 将 MethodLogWriter 接口的 before 方法重命名为 printMethodArgs\n- 将 MethodLogWriter 接口的 after 方法重命名为 printReturnValue\n- 修改 MethodLogAspect 中对应调用以匹配新的方法名\n- 更新 Slf4JMethodLogWriter 实现类中相应方法名和日志内容描述",
          "is_bot": false,
          "headline": "refactor(log): 重命名日志打印方法以提高表达准确性",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-14T01:11:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78d5182fa2bbb8426e03358a3f43a6243e858fb9",
          "body": "- 移除对Spring StopWatch的依赖,改用System.nanoTime实现计时\n- 修改时间转换为毫秒,确保计时更精确\n- 优化日志输出格式与日志等级判断逻辑\n- 保留原阈值判断避免无效日志打印\n- 代码结构更简洁,提升性能和可维护性",
          "is_bot": false,
          "headline": "refactor(log): 优化方法执行时间记录逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T14:38:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a2a68e78dc34cae0578017bb7747ba67e527df8",
          "body": "- 将日志注解Log重命名为MethodLog,计时注解Timer重命名为TimeLog并迁移包路径\n- 将日志切面LogAspect重命名为MethodLogAspect,计时切面TimerAspect重命名为TimeLogAspect并改进日志级别支持\n- 重命名相关日志支持类如AbstractLogWriter、Slf4jLogWriter、LogWriter接口以支持MethodLog命名\n- LogConfig配置类中日志相关Bean从LogWriter切换为MethodLogWriter并相应修改依赖\n- 改进TimeLog注解,添加阈值和日志等级配置,TimeLogAspect根据阈值和等级进行日志输出\n- Prop配置类新增日志级别属性logLevel,支持日志等级配置管理\n- 移除多余的注释和包导入,调整代码格式提高可读性和一致性",
          "is_bot": false,
          "headline": "refactor(log): 重构日志和计时相关代码,统一命名和改进实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T14:11:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3ad36c6e008d82cad2f7426d8cccda9b486da19",
          "body": "- 将所有自动配置类从 autoconfig 包重命名并移动到 config 包下\n- 修改类名为更简洁的 XxxConfig 格式,统一命名规范\n- 更新 LuminionAutoConfiguration 中的导入路径以匹配新包和类名\n- 注释部分自动配置类导入以配合当前代码结构调整\n- 移除部分无用或重复的 import 声明,优化代码整洁性",
          "is_bot": false,
          "headline": "refactor(config): 将自动配置类移动至 config 包并重命名",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T13:39:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9ebe8892a72d3ebe655d0e90ee28cdb6a02c50c",
          "body": "- 引入 Prop 配置类,实现幂等和限流关键字前缀管理\n- 修改 IdempotentAspect 和 RateLimitAspect,在构造时传入前缀参数\n- 在生成幂等和限流 Key 时使用前缀拼接,支持灵活配置\n- 删除 LogAspect 中对异常的捕获,简化日志处理逻辑\n- 移除 Slf4jLogWriter 中 error 方法及 LogWriter 接口对应定义\n- 精简 Prop 配置类,移除无用的 servlet 过滤器属性及注释内容",
          "is_bot": false,
          "headline": "refactor(config): 在幂等和限流配置中添加前缀支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T13:17:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 216,
      "latest_release_at": "2026-07-15T16:43:32Z",
      "latest_release_tag": "1.3.0",
      "releases_from_tags": true,
      "days_since_last_push": 8,
      "active_weeks_last_year": 30,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 24.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "io.github.luminion:velo-autoconfigure-javax",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-javax",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:49Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-common",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:41Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-starter",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-spring-boot2-starter",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:57:00Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-starter",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-spring-boot3-starter",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:57Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-starter",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-spring-boot4-starter",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:57:02Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jakarta",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-jakarta",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:50Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson2",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-jackson2",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:49Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson3",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-jackson3",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:51Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 5,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2025-10-24",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "pom.xml",
        "velo-autoconfigure-common/pom.xml",
        "velo-autoconfigure-jackson2/pom.xml",
        "velo-autoconfigure-jackson3/pom.xml",
        "velo-autoconfigure-jakarta/pom.xml",
        "velo-autoconfigure-javax/pom.xml",
        "velo-spring-boot2-autoconfigure/pom.xml",
        "velo-spring-boot2-dependencies/pom.xml",
        "velo-spring-boot2-starter/pom.xml",
        "velo-spring-boot3-autoconfigure/pom.xml",
        "velo-spring-boot3-dependencies/pom.xml",
        "velo-spring-boot3-starter/pom.xml",
        "velo-spring-boot4-autoconfigure/pom.xml",
        "velo-spring-boot4-dependencies/pom.xml",
        "velo-spring-boot4-starter/pom.xml"
      ],
      "largest_source_bytes": 25506,
      "source_files_sampled": 201,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "pom.xml",
        "velo-autoconfigure-common/pom.xml",
        "velo-autoconfigure-jackson2/pom.xml",
        "velo-autoconfigure-jackson3/pom.xml",
        "velo-autoconfigure-jakarta/pom.xml",
        "velo-autoconfigure-javax/pom.xml",
        "velo-spring-boot2-autoconfigure/pom.xml",
        "velo-spring-boot2-dependencies/pom.xml",
        "velo-spring-boot2-starter/pom.xml",
        "velo-spring-boot3-autoconfigure/pom.xml",
        "velo-spring-boot3-dependencies/pom.xml",
        "velo-spring-boot3-starter/pom.xml",
        "velo-spring-boot4-autoconfigure/pom.xml",
        "velo-spring-boot4-dependencies/pom.xml",
        "velo-spring-boot4-starter/pom.xml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "org.springframework.boot:spring-boot",
            "direct": false,
            "version": "2.7.18",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.3,
            "advisory_ids": [
              "GHSA-rc42-6c7j-7h5r",
              "GHSA-wwpq-f5c3-7hvx"
            ],
            "fixed_version": "4.0.6",
            "advisory_count": 2,
            "oldest_advisory_days": 452
          },
          {
            "name": "org.springframework:spring-core",
            "direct": false,
            "version": "5.3.31",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-jmp9-x22r-554x"
            ],
            "fixed_version": "6.2.11",
            "advisory_count": 1,
            "oldest_advisory_days": 311
          },
          {
            "name": "org.springframework:spring-context",
            "direct": false,
            "version": "5.3.31",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-4gc7-5j7h-4qph",
              "GHSA-4wp7-92pw-q264"
            ],
            "fixed_version": "6.2.7",
            "advisory_count": 2,
            "oldest_advisory_days": 644
          },
          {
            "name": "org.springframework:spring-expression",
            "direct": false,
            "version": "5.3.31",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 4.3,
            "advisory_ids": [
              "GHSA-9cmq-m9j5-mvww"
            ],
            "fixed_version": "5.3.39",
            "advisory_count": 1,
            "oldest_advisory_days": 703
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 2,
          "moderate": 2
        },
        "advisory_count": 6,
        "affected_count": 4,
        "assessed_count": 11,
        "malicious_count": 0,
        "assessed_package": "maven:io.github.luminion:velo-autoconfigure-javax@1.3.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "maven"
      ],
      "dependencies": [
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-configuration-processor",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.baomidou:mybatis-plus-core",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-extension",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "io.github.openfeign:feign-core",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${feign-core.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.ben-manes.caffeine:caffeine",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.0.3"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.3.0"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.0.1-incubating"
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-databind",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-dependencies",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-jackson",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "tools.jackson.core:jackson-databind",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-dependencies",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-configuration-processor",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "jakarta.validation:jakarta.validation-api",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-mail",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-configuration-processor",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "javax.validation:validation-api",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-mail",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.baomidou:mybatis-plus-boot-starter",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-javax",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson2",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-boot.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${redisson.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-boot-starter",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jsoup.version}"
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easyexcel.version}"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fastexcel.version}"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fesod-sheet.version}"
        },
        {
          "name": "org.projectlombok:lombok",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${lombok.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-spring-boot2-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-autoconfigure",
          "manifest": "velo-spring-boot2-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-aop",
          "manifest": "velo-spring-boot2-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-dependencies",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jakarta",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson2",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-boot.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${redisson.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jsoup.version}"
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easyexcel.version}"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fastexcel.version}"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fesod-sheet.version}"
        },
        {
          "name": "org.projectlombok:lombok",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${lombok.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-dependencies",
          "manifest": "velo-spring-boot3-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-autoconfigure",
          "manifest": "velo-spring-boot3-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-aop",
          "manifest": "velo-spring-boot3-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-dependencies",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jakarta",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson3",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-boot.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${redisson.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-spring-boot4-starter",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jsoup.version}"
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easyexcel.version}"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fastexcel.version}"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fesod-sheet.version}"
        },
        {
          "name": "org.projectlombok:lombok",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${lombok.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-dependencies",
          "manifest": "velo-spring-boot4-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-autoconfigure",
          "manifest": "velo-spring-boot4-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-aspectj",
          "manifest": "velo-spring-boot4-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "cn.idev.excel:fastexcel",
            "direct": true,
            "version": "1.3.0",
            "ecosystem": "maven"
          },
          {
            "name": "com.alibaba:easyexcel",
            "direct": true,
            "version": "4.0.3",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-boot-starter",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-core",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-extension",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot4-starter",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.github.ben-manes.caffeine:caffeine",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-jackson2",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-jackson3",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-jakarta",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-javax",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot2-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot2-dependencies",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot3-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot3-dependencies",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot4-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot4-dependencies",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.openfeign:feign-core",
            "direct": true,
            "version": "11.10",
            "ecosystem": "maven"
          },
          {
            "name": "jakarta.validation:jakarta.validation-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "javax.validation:validation-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.fesod:fesod-sheet",
            "direct": true,
            "version": "2.0.1-incubating",
            "ecosystem": "maven"
          },
          {
            "name": "org.jsoup:jsoup",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jsoup:jsoup",
            "direct": true,
            "version": "1.21.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.projectlombok:lombok",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.projectlombok:lombok",
            "direct": true,
            "version": "1.18.42",
            "ecosystem": "maven"
          },
          {
            "name": "org.redisson:redisson-spring-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.redisson:redisson-spring-boot-starter",
            "direct": true,
            "version": "3.40.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-configuration-processor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "2.7.18",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "3.5.9",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "4.0.5",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-jackson",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-aop",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-aspectj",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-data-redis",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-mail",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-web",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "tools.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-compiler-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-compiler-plugin",
            "direct": false,
            "version": "3.13.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-gpg-plugin",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-jar-plugin",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-javadoc-plugin",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-source-plugin",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.aspectj:aspectjweaver",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.codehaus.mojo:flatten-maven-plugin",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.junit.jupiter:junit-jupiter",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.sonatype.central:central-publishing-maven-plugin",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-test",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.data:spring-data-redis",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-aop",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-context",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-expression",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-web",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 62,
        "direct_count": 45,
        "indirect_count": 17
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "luminion",
          "commits": 286,
          "avatar_url": "https://avatars.githubusercontent.com/u/42614491?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "0ae8908a2a54e8850cfc371e45d774c647a35626",
        "ran_at": "2026-07-24T16:07:18Z",
        "aggregate_score": 3.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/luminion/spring-boot-starter",
    "host": "github.com",
    "name": "spring-boot-starter",
    "owner": "luminion"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 42,
        "vitality": 82,
        "community": 29,
        "governance": 33,
        "engineering": 38
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 82,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 216,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 30
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "30/52 weeks with commits",
                "points": 20.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 30
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "216 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 216
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "1.3.0",
              "releases_from_tags": true,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 24.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~24.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 24.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 29,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "forks": 1,
              "stars": 5,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "5 stars",
                "points": 9.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 33,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 46,
            "inputs": {
              "followers": 4,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "luminion",
              "public_repos": 20,
              "account_age_days": 2893
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "4 followers of luminion",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 4,
                      "login": "luminion"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "20 public repos, account ~7 yr old",
                "points": 21.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 20
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "io.github.luminion:velo-autoconfigure-javax",
                "io.github.luminion:velo-autoconfigure-common",
                "io.github.luminion:velo-spring-boot2-starter",
                "io.github.luminion:velo-spring-boot3-starter",
                "io.github.luminion:velo-spring-boot4-starter",
                "io.github.luminion:velo-autoconfigure-jakarta",
                "io.github.luminion:velo-autoconfigure-jackson2",
                "io.github.luminion:velo-autoconfigure-jackson3"
              ],
              "ecosystems": "maven",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on maven",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "maven"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 38,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 36,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 3.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "moderate",
            "name": "Dependency advisories",
            "note": "Matched the maven:io.github.luminion:velo-autoconfigure-javax@1.3.0 runtime dependency closure — what installing the published package pulls in — 11 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "maven:io.github.luminion:velo-autoconfigure-javax@1.3.0",
                  "assessed": 11
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 67,
            "inputs": {
              "source": "osv",
              "advisories": 6,
              "affected_packages": 4,
              "assessed_packages": 11,
              "unassessed_packages": 0,
              "affected_by_severity": "high 2, moderate 2",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "4 affected: org.springframework.boot:spring-boot 2.7.18 (high 7.3), org.springframework:spring-core 5.3.31 (high 7.5), org.springframework:spring-context 5.3.31 (moderate 5.3), +1 more",
                "points": 7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 4,
                      "packages": "org.springframework.boot:spring-boot 2.7.18 (high 7.3), org.springframework:spring-core 5.3.31 (high 7.5), org.springframework:spring-context 5.3.31 (moderate 5.3)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "4 advisory-carrying package(s) unaddressed past 90 days; oldest published 703 days ago",
                "points": 24.8,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 4,
                      "oldest": 703
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 11,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 56,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "pom.xml",
                "velo-autoconfigure-common/pom.xml",
                "velo-autoconfigure-jackson2/pom.xml",
                "velo-autoconfigure-jackson3/pom.xml",
                "velo-autoconfigure-jakarta/pom.xml",
                "velo-autoconfigure-javax/pom.xml",
                "velo-spring-boot2-autoconfigure/pom.xml",
                "velo-spring-boot2-dependencies/pom.xml",
                "velo-spring-boot2-starter/pom.xml",
                "velo-spring-boot3-autoconfigure/pom.xml",
                "velo-spring-boot3-dependencies/pom.xml",
                "velo-spring-boot3-starter/pom.xml",
                "velo-spring-boot4-autoconfigure/pom.xml",
                "velo-spring-boot4-dependencies/pom.xml",
                "velo-spring-boot4-starter/pom.xml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "pom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/pom.xml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "pom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/pom.xml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Java (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Java",
              "largest_source_bytes": 25506,
              "source_files_sampled": 201,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Java (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/201 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 201,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T16:07:22.898509Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/l/luminion/spring-boot-starter.svg",
  "full_name": "luminion/spring-boot-starter",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasMaven.