Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 2025,
"has_wiki": true,
"homepage": "https://flex-point.pages.dev/",
"languages": {
"Java": 458599
},
"pushed_at": "2026-07-17T04:58:51Z",
"created_at": "2025-06-26T09:52:01Z",
"owner_type": "User",
"updated_at": "2026-07-17T04:58:55Z",
"description": "Flex Point 是一款面向应用的轻量级扩展点(Ext Point)框架,为多业务场景下的「能力解耦、动态路由、灵活扩展」而生。它把「同一能力的不同业务实现」抽象为扩展点,由选择器在运行期按上下文选中目标实现,让业务代码只依赖接口、路由决策收敛在框架内。",
"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": "https://github.com/xiangganLuo",
"name": null,
"type": "User",
"login": "xiangganLuo",
"company": "dp",
"location": "China Changsha",
"followers": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/104347635?v=4",
"created_at": "2022-04-25T07:36:20Z",
"is_verified": null,
"public_repos": 26,
"account_age_days": 1551
},
"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": "2.0.0",
"kind": "major",
"published_at": "2026-07-17T02:38:51Z"
},
{
"tag": "1.0.0",
"kind": "major",
"published_at": "2025-11-21T06:31:29Z"
}
],
"recent_commits": [
{
"oid": "66deba3a600aff6418a1c0bd1236af7438256bdf",
"body": "- getExtMetrics 无 MetricsProvider 时返回空指标(EmptyExtMetrics)而非 null,与 getAllExtMetrics 对齐\n- 插件 enable 从 FAILED/DESTROYED 重启前先防御式清理,避免重复注册导致永久卡死\n- 事件热路径改用 subscribe/unsubscribe 时预排序快照,去掉每次 publish 的排序\n- 扩展点代理按 (extType, ability) 身份缓存;拦截链改由 Supplier 每次 invoke 读取当前快照\n (保留运行期拦截器动态增删);DefaultInterceptorRegistry 预排序快照 O(1) 返回\n- getLoadReport 改为 synchronized 返回不可变快照\n- findAbilitysByCode/ByCodeAndTags 改用 Objects.equals + null 键校验,消除 NPE\n- 新增针对性单测:空指标/插件恢复/事件优先级/代理缓存动态拦截器/报告快照/NPE 安全",
"is_bot": false,
"headline": "fix(core): 修复代码审查发现的 6 项问题(正确性+性能)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-17T04:58:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bcb8b370d0bfc1c824aacb911fc1523daf918c6",
"body": null,
"is_bot": false,
"headline": "build: 版本回滚为下一개发版 2.0.1-SNAPSHOT(2.0.0 已发布 Maven Central)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-17T02:51:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f25b9c61e721f15879e34e16fb398ae98af15cb",
"body": "… warnings 字段解析崩溃)",
"is_bot": false,
"headline": "build(release): 升级 central-publishing-maven-plugin 0.7.0 -> 0.11.0(修复…",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-17T02:38:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62b4bf0e8ce2b9753ed882b104cfebaa1d4cae85",
"body": "- 删除标准上下文 FlexPointContext 的所有文档表述;改为「选择器运行期数据由业务方\n 实现命名 Resolver 提供、数据来源由业务自维护」。\n- 属性装配范围:13 → 9(weight/audit/slowcall/metrics/retry/resilience/observability/\n code/code-version);tag/gray/ab/tenant/cache 改显式 @Bean(传入 Resolver / delegate)。\n- ext.md 上下文节改为「选择器的运行期数据」;plugins-official 表/各选择器章节改写为\n Resolver + 显式 @Bean;quickstart/springboot 示例改用业务 holder;glossary 删词条加\n Resolver;selector.md/README/ARCHITECTURE 同步。\n- npm run docs:build 通过,全库 md 无 FlexPointContext/byLabel/相关属性残留。",
"is_bot": false,
"headline": "docs: 同步「移除上下文概念 + 选择器改命名 Resolver」到文档",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-17T02:20:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a102073e223b6f6432a5ac3776e04472726ca4d4",
"body": "设计取向调整:不内置请求上下文,插件所需运行期数据一律由业务方实现接口提供\n(与 CodeSelector.CodeResolver 一致)。上下文模块留待后续规划。\n\n- 删除 flexpoint-common 的 FlexPointContext(及 common 的 lombok 依赖)。\n- tag/gray/ab/tenant/cache 选择器改为命名 Resolver 接口注入:\n TagSelector.LabelResolver / GraySelector.GrayKeyResolver /\n AbTestSelector.AbKeyResolver / TenantS\n[…]\n Resolver,改显式 @Bean);\n weight 不依赖上下文,仍支持属性装配。清理 Properties/optional 依赖。\n- 重写 5 个选择器单测;删除 FlexPointContextTest;PluginsAutoConfigurationTest 用 weight 替换 tag。\n- mvn clean test 全反应堆全绿(flexpoint-test 61)。",
"is_bot": false,
"headline": "refactor(selector): 移除 FlexPointContext 上下文概念,选择器改用命名 Resolver 接口",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-17T02:01:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d92ff40f8eef9f3c21f8d213f71805b3f05e8364",
"body": "请求级标准上下文属跨层横切基础设施(接入层填充、选择器读取),不隶属内核,\n移出 flexpoint-core.context → flexpoint-common.context(com.flexpoint.common.context)。\n- 新增:flexpoint-common 补 lombok 依赖 + FlexPointContext。\n- 删除:flexpoint-core 下旧文件。\n- 全量更新 13 个 java 引用 + README/quickstart/selector 文档 import + 架构文档。\n- Java 包名(业务代码)不受影响;mvn clean test 全绿。",
"is_bot": false,
"headline": "refactor(context): FlexPointContext 从 core 迁至 flexpoint-common",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-17T01:33:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83bdaf4503af7456b75abf7469db454a6b0bfa5c",
"body": null,
"is_bot": false,
"headline": "build(release): 修复 BOM flatten 版本属性 + oss/bom 模式产出 Central 合规 pom",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T12:58:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d775b69f64ddea775bbedb10abdc9a4aa78879a7",
"body": null,
"is_bot": false,
"headline": "docs: groupId 同步为 io.github.xiangganluo(Maven 坐标,不含 Java 包名)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T12:54:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c11b5ddb6e0fe82d09161fa0d9d1469ef822c79f",
"body": "…entral 合规)",
"is_bot": false,
"headline": "build(release): groupId 改 io.github.xiangganluo + flatten 切 oss/bom(C…",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T12:43:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ebf6d02ca8930cd5cebc2ffeb6953f1dc5e9409",
"body": "maven-deploy-plugin 的 default-deploy 执行改为 phase=none 彻底解绑(<skip> 会被\n环境 profile 的属性覆盖、-Dmaven.deploy.skip 又会连 central-publishing 一起跳过)。\n如此 maven-deploy 完全不跑(不会被 rdc profile 的 altReleaseDeploymentRepository\n重定向到内网仓库),central-publishing 正常上传 Maven Central。",
"is_bot": false,
"headline": "build(release): 解绑标准 deploy 目标,发布仅走 central-publishing",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T12:22:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db106456a213fcf0efb8e5f0e9f05929036c457b",
"body": "- examples/test:显式 central-publishing skipPublishing=true(该插件不认\n maven.deploy.skip,上次误把 examples 算进 Central 包导致校验失败)。\n- 根 pom maven-deploy-plugin skip=true:发布统一走 central-publishing,\n 禁用标准 deploy,避免被环境的部署重定向推到其它仓库。",
"is_bot": false,
"headline": "build(release): 修正 Central 发布——排除 examples/test + 禁用标准 deploy",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T12:08:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f47b230a7276a5fb8189042b6b8ca72a8b3ae154",
"body": "…ated\n\n受控发布:deploy 仅上传到 Central Portal 并等待校验通过,最终 Publish 由人工在\n网页确认,避免自动不可逆发布。",
"is_bot": false,
"headline": "build(pom): central-publishing 显式 autoPublish=false + waitUntil=valid…",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T11:50:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6175ed92fdb2b3f795cb79e3e3715cba3269eb9",
"body": "- 根 pom / flexpoint-dependencies-bom 的 revision: 2.0.0-SNAPSHOT -> 2.0.0。\n- 同步架构文档版本声明。\n- 已通过签名冒烟:mvn clean verify -Dgpg.skip=false 全反应堆 BUILD SUCCESS,\n 各发布模块产出 pom/jar/sources/javadoc 的 .asc 签名,满足 Maven Central 要求。",
"is_bot": false,
"headline": "release: 版本切为正式版 2.0.0(去除 SNAPSHOT)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T11:44:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf74165eb132eab879bd6e3cdd5740bdd84bebfe",
"body": "connection/developerConnection 改为标准 scm:git:...git 形式,符合 Maven 约定与\nCentral 校验预期。已通过签名冒烟验证:mvn clean verify -Dgpg.skip=false 全反应堆\nBUILD SUCCESS,各发布模块均产出 pom/jar/sources/javadoc 的 .asc 签名。",
"is_bot": false,
"headline": "build(pom): 规范 scm 连接为 scm:git 形式(中央仓库配置补齐)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T11:36:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "949c97dbe7ccce3bb907bca31a42b5a62ab1b0d9",
"body": "- plugins-official.md:明确 13 个插件支持 flexpoint.plugins.<name>.enabled=true\n 属性装配;code/code-version 另需 CodeResolver/CodeVersionResolver Bean\n (@ConditionalOnBean),code-version 属性前缀 kebab;observability 经 ObjectProvider\n 可选注入 AlertStrategy/MetricsCollector。\n- 缓存选择器 cache 改为「显式 @Bean」:说明装饰器同名注册与 FlexPointSpringSelectorRegister\n 的冲突原因,示例用 3 参构造指定独立 name 规避。\n- springboot.md:装配途径改为「属性开关(13) + 声明 @Bean(cache/覆盖)」;删除旧的\n 「仅 10 个 / 4 个需 @Bean」过时表述。\n- npm run docs:build 通过。",
"is_bot": false,
"headline": "docs(site): 同步插件装配口径为 13 属性装配 + cache 显式 @Bean",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T11:08:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69772cf7c0aca867751963c2a181d8719fbef3bf",
"body": "throwsCallTimeoutWhenProceedExceedsTimeout 原用 sleep(500) vs timeout(100) 的\n墙钟竞速:主线程在 submit 与 future.get 之间若发生 GC/调度停顿,任务可能已完成,\nget(100ms) 立即返回值,偶发断言失败(未抛异常)。\n\n改为让任务阻塞在测试控制的 CountDownLatch 上:无论机器快慢或主线程停顿,\nfuture.get(timeout) 必定超时,结果确定;断言后 countDown 释放任务避免线程悬挂。\n用例耗时同时从 >0.5s 降至 ~0.14s。3 次连续运行全绿。",
"is_bot": false,
"headline": "test(resilience): 加固超时用例,消除计时抖动(flaky)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T11:07:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f87c0e06f3cc12684b4c61d5c501bde95ccfe3fb",
"body": "- YAML 示例补 3 个新纳入「配置即装配」的插件;标注 code/code-version 需 Resolver Bean。\n- 明确 13 个插件支持属性装配,cache 走显式 @Bean(装饰器同名冲突原因)。",
"is_bot": false,
"headline": "docs(readme): 官方插件配置示例补齐 observability/code/code-version",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T10:56:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "84bda9cfb009d6a0d07bf29b3b46dc91c31e9cbc",
"body": "将剩余可安全属性装配的官方插件接入 FlexPointPluginsAutoConfiguration:\n- observability:flexpoint.plugins.observability.enabled=true;经 ObjectProvider\n 收集容器内 AlertStrategy / MetricsCollector(可无)。\n- code:需业务方 CodeSelector.CodeResolver Bean(@ConditionalOnBean)。\n- code-version:需 CodeVersionSelector.CodeVersionResolver Be\n[…]\n,纯属性装配必然导致选择器名重复冲突;内置选择器也非 Selector Bean 无法\n作 delegate。故 cache 请以显式 @Bean(自定 delegate 与名称)方式使用,已在 auto-config\nJavadoc 说明。至此 13 个官方插件支持属性装配,cache 走显式 @Bean。\n\nmvn clean test 全反应堆全绿(flexpoint-test 65 项)。",
"is_bot": false,
"headline": "feat(springboot): observability/code/code-version 纳入「配置即装配」",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T10:55:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1d50ebd6021ac9be0668283de14df0a521602740",
"body": "- guide/contributing.md:贡献步骤(fork/clone/分支/PR/review)+ PR 原则 + 本地构建/提交规范。\n- guide/contact.md:微信二维码(public/weixin.png)+ 邮箱 + GitHub/Issues。\n- sidebar 与 nav 新增「社区」组(贡献指南 / 联系作者)。\n- npm run docs:build 通过。",
"is_bot": false,
"headline": "docs(site): 新增贡献指南与联系作者页",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T10:24:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b626cbd4a24c0bb77c82a9f68793da2e87456229",
"body": "- 首页动态效果:Hero 渐变标题流动/背景光晕、特性卡 scroll-reveal + hover,\n 明暗色兼容、prefers-reduced-motion 降级、无 FOUC(Layout.vue + theme/custom.css)。\n- core 详解并改名/重构:guide/ext.md(“调用管线与拦截器”→“扩展点”,ext 核心页:定义/注册/查找/\n 调用管线/拦截器 SPI/内置事件埋点/标准上下文)、selector.md(“选择器与决策解释”→“选择器”)、\n observability.md(“监控与可观测”→“可观测”,含事件体系+监控体系+配置表);\n[…]\nofficial.md 扩为 14 插件完整参考(artifactId/pluginId/构造参数/配置/依赖+YAML/@Bean 示例)。\n- 事实修正:属性「配置即装配」适用 10 个插件;code/code-version/cache/observability 需 @Bean;\n 框架注解仅 @FpSelector/@FpExt。npm run docs:build 通过(11 页)。",
"is_bot": false,
"headline": "docs(site): 首页动效 + core 详解 + 术语表 + 插件完整参考 + 名词调整",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T10:07:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "efd1d932a687cad7090fc787f8b2cecb7cc0c7dc",
"body": "重写 ARCHITECTURE_V1.md 对齐当前实现:内核 SPI/机制与插件边界、core 各子模块(ext/selector/plugin/event/monitor/context/拦截器)、\n调用管线(拦截链→内置事件拦截器→反射)、官方插件全景(每插件一模块)、配置即装配、新 SPI 示例(SelectionResult/AbstractSelector/FlexPointContext)与测试体系。",
"is_bot": false,
"headline": "docs(arch): 重新同步架构文档至 2.0",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:38:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee484b1900d4fec96b5b2bf11703738e39a87bfa",
"body": null,
"is_bot": false,
"headline": "docs(static): 移除 无用 文档",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:33:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5812fa34e1420676b12d70b980b2e9c22b412013",
"body": "- 模块结构补全 flexpoint-plugin-all 下 14 个插件模块(按选择器/观测/行为分类)。\n- 新增「官方插件(配置即装配)」章节:flexpoint.plugins.* 配置示例 + 插件全景表。\n- 自定义选择器示例更新为新 SPI(AbstractSelector.filter + FlexPointContext)。\n- 修正监控示例 API(getExtMetrics(ability)/getAverageResponseTime)并说明依赖 observability 插件。\n- 文档区增加官网(VitePress,docs/)入口。",
"is_bot": false,
"headline": "docs(readme): 同步 2.0 内容",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:29:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88648f18be7758457acf58549480b22aa536548c",
"body": "- 技术栈:VitePress 1.6.4(Vue)+ vitepress-plugin-mermaid + 本地全文搜索,中文 UI,品牌蓝。\n- index.md 落地页(hero + 6 features + Maven 坐标);guide/:简介/快速开始/核心概念/选择器与决策解释/\n 调用管线与拦截器/监控与可观测/插件体系/官方插件模块/Spring Boot 接入。\n- 内容与最新事实一致(getId、SelectionResult、内置 EventPublishingInterceptor、每插件独立模块)。\n- node_modules/、.vitepress/dist/、.vitepress/cache/ 已 gitignore(不入库)。\n- 本地 npm run docs:build 通过(10 页)。",
"is_bot": false,
"headline": "docs(site): 新增官网首页与文档(VitePress)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:25:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b17e54450d0a664ddebfe4945d7a8a0f68cecf29",
"body": "root pom 与 dependencies-bom 的 revision 改为 2.0.0-SNAPSHOT;正式发布时再去除 -SNAPSHOT。",
"is_bot": false,
"headline": "build: 版本回退为 2.0.0-SNAPSHOT(当前处于测试阶段)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:21:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e3c5668435fbd1bafe9110bd4c1ca63c2f8b935",
"body": "- context/FlexPointContextTest:ThreadLocal 生命周期、标准字段/labels/attributes、clear/set。\n- interceptor/InterceptorPipelineTest:注册表按 order 排序、可重入链(重试)、经 FlexPoint 的\n around 集成(拦截器环绕事件终端,重试产生 3 次调用 + 2 FAIL/1 SUCCESS 事件)。\n- selector/SelectorRegistryTest:getSelectorNames/size 可观测、资源级唯一。\n- event/DecisionExplanationEventTest:EXT_SELECTED/EXT_SELECTION_FAILED 携带决策解释属性。\n- springboot/PluginsAutoConfigurationTest:flexpoint.plugins.* 配置装配集成(含默认关闭)。\n- flexpoint-test 增加 selector-tag/retry 测试依赖。",
"is_bot": false,
"headline": "test(core): 补充上下文/拦截器/选择器/事件/配置装配单测",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:21:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5f5d7af5f045f0f9e7da311be54b74927958c8e",
"body": "- FlexPointPluginsProperties:flexpoint.plugins.* 属性(各插件 enabled + 参数)。\n- FlexPointPluginsAutoConfiguration:每插件独立嵌套 @Configuration + 类级 @ConditionalOnClass\n + @ConditionalOnProperty,缺失插件类时整体跳过;装配出的 Plugin Bean 由核心自动配置收集进 FlexPoint。\n- FlexPointAutoConfiguration 导入插件自动配置;springboot 以 optional 依赖引入各插件(消费方按需引入模块)。\n- 缓存选择器需 delegate,走编程式,不做属性装配。",
"is_bot": false,
"headline": "feat(springboot): 官方插件「配置即装配」自动配置",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:20:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aee7465f88e056b986e9ea45f3e2a18adae10ce3",
"body": "选择器(读标准上下文 FlexPointContext,配置即路由):\n- selector-tag 标签、selector-gray 灰度(百分比)、selector-ab A/B 分流、\n selector-weight 权重、selector-tenant 租户(带回退)、selector-cache 缓存(装饰器)。\n观测/治理(事件订阅/监控链):\n- audit 审计日志、slowcall 慢调用告警、metrics 指标汇总。\n行为增强(调用拦截器 SPI):\n- retry 重试、resilience 超时+熔断(CircuitBreaker 100/Retry 300/Timeout 400)。\n\n- 每个插件为 flexpoint-plugin-all 下独立子模块(getId + 生命周期),含各自单测(全部通过)。\n- 父 pom modules 与 dependencies-bom 已登记全部插件。",
"is_bot": false,
"headline": "feat(plugins): 新增 11 个官方插件,每插件独立模块",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:18:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab7c3e701c16035b06804dff1f3ca74f7e455827",
"body": "- maven-gpg-plugin 与 central-publishing-maven-plugin 放入主 <build>(gpg 绑定 verify,\n 本地非发布构建可 -Dgpg.skip=true);central publishingServerId=central + tokenAuth。\n- 固定 maven-surefire-plugin 版本(发布卫生)。",
"is_bot": false,
"headline": "build: Maven 中央仓库发布插件对齐主构建 + 固定 surefire 版本",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T09:17:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "febc56ecf4afaca53e32b53890ccb2004c7e08ef",
"body": "- 版本:root pom 与 dependencies-bom 的 revision 升级为 2.0.0(发布版,非 SNAPSHOT)。\n- 新增 release profile(mvn clean deploy -Prelease):\n - maven-gpg-plugin 对构件 GPG 签名(Central 强制要求);\n - central-publishing-maven-plugin 发布到 Central Portal(publishingServerId=central, autoPublish)。\n- sources/javadoc jar 已在默认 build 生成\n[…]\n- test/examples 模块设 maven.deploy.skip=true,不发布到中央仓库。\n- 元数据(name/description/url/licenses/developers/scm)已在根 pom 提供并被各模块继承。\n\n发布前置(接入方自备):settings.xml 配置 server id=central 的 Portal token;本地配置并上传 GPG 公钥。",
"is_bot": false,
"headline": "build: 升级版本至 2.0.0 并补齐 Maven 中央仓库发布配置",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T08:20:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "91b5750fd94ad93ddcfe5535882534c702ee4d7f",
"body": "- EXT_CORE_REQUIREMENTS.md:扩展点核心模块(定义/注册/调用管线+拦截器 SPI)需求与设计。\n- SELECTOR_CORE_OPTIMIZATION.md:选择器内核可优化点梳理(P1/P5/P6/P7 已实施,P2/P3/P4/P8 记录)。",
"is_bot": false,
"headline": "docs: 沉淀 ext 核心需求与 selector 内核优化文档",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T08:16:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7dd49d93377332131a865fcbff05e096da92f672",
"body": "调用拦截器 SPI(around):\n- 新增 ext.interceptor:ExtInvocation / ExtInvocationInterceptor / ExtInvocationTerminal /\n InterceptorRegistry / DefaultInterceptorRegistry / 可重入链 DefaultExtInvocation。\n- FlexPoint/Builder/PluginContext/DefaultPluginContext/DefaultPluginManager 接线,\n 拦截器注册表由 Builder 统一创建并被插件与 FlexP\n[…]\n不在此抛异常,由 FlexPoint 决定);\n- SelectorRegistry 增加 getSelectorNames/size 可观测;\n- EventDispatcher 选择成功/失败事件携带决策解释(decisionExplanation 属性)。\n\n配套更新全部测试选择器与 java-example 自定义选择器至新 SPI;ExtUtil 归入 ext 包。全量测试通过(48)。",
"is_bot": false,
"headline": "feat(core): 调用拦截器 SPI + 事件埋点拦截器化 + 选择器 SelectionResult 重构",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T08:16:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2c6d168a11b93773ccc8a5c0ec84b6257e7b596d",
"body": "新增 com.flexpoint.core.context.FlexPointContext(线程级持有 tenantId/appCode/version/uid/labels/attributes),\n供路由选择器无需业务 Resolver 即可读取上下文,配合接入层入口填充实现「配置即装配」。",
"is_bot": false,
"headline": "feat(core): 新增标准请求上下文 FlexPointContext",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T08:15:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f7d43344464b6faeb5f9fdcd6977027daceb1d9",
"body": "在不改变行为的前提下,为各模块关键路径补充 debug 级日志,便于问题定位:\n\n- core:\n - FlexPoint 查找入口/命中计数/回退/代理创建/关闭流程;\n - FlexPointBuilder 构建与插件装配摘要;DefaultPluginManager 注册/装配/停止;\n - 注册中心读取快照与实现数;选择器查找命中;AbstractSelector 过滤命中/歧义;\n - EventDispatcher 同步/异步发布、DefaultEventBus 路由与订阅、FilterEventRouter 匹配数;\n - 监控链 record/handler 变更、A\n[…]\n plugin-all:选择器 resolve/过滤、插件 init/start/stop、Observability 装配、指标累计/告警分发/事件转发。\n- spring/springboot:@FpExt 代理注入与调用、扩展点/选择器 Bean 扫描注册、核心自动配置收集到的插件明细。\n\n耗时/循环内日志均以参数化或 isDebugEnabled 守护,避免非 debug 级别的额外开销。",
"is_bot": false,
"headline": "chore(log): 全模块补充详细 debug 日志",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T07:00:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f9ab520f65900938be825ddb36e04d6ad7bc4dfb",
"body": "- README:模块结构增加 flexpoint-plugin-all;CodeVersionSelector import 路径与依赖说明更新。\n- ONE_PAGER / PLUGIN_TEMPLATE:按极简模型重写(getId、装配=注册序、统一降级、模块布局)。\n- 新增 PLUGIN_REFACTOR_2026-07-16.md 变更说明与迁移指引。",
"is_bot": false,
"headline": "docs: 更新插件体系简化与模块化文档",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T06:35:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4026fccb24377f952b26a1ebac165d7284a171e9",
"body": "- 短路 Object 方法(toString/hashCode/equals):直接转发,不再产生埋点噪声事件。\n- 收敛计时与异常处理为清晰结构,保留 INVOKE_BEFORE/SUCCESS/FAIL/EXCEPTION 语义\n (FAIL=业务异常解包 ITE,EXCEPTION=框架/反射错误)。\n- 保留 setAccessible(true):扩展点实现类可能为非 public 类,反射调用 public 接口方法需放开可访问性。",
"is_bot": false,
"headline": "refactor(core): 重构扩展点调用代理 EventPublisherInvocationHandler",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T06:35:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05e66dbdee6a890a9f7f82d9ff25013f8db931e3",
"body": "BREAKING CHANGE: 插件模型移除 dependencies/order/version/apiVersion/critical/capabilities,\nPlugin 接口由 getDescriptor() 改为 getId();官方插件从 flexpoint-core 迁出为独立模块。\n\n核心精简(flexpoint-core):\n- Plugin 改用 String getId();删除 PluginDescriptor/Validator/Capability/Dependency/\n DependencyResolver 及 PluginDependencyExcep\n[…]\n登记新模块。\n\n消费方重连:\n- flexpoint-test 依赖 3 个插件模块;更新/重写测试,删除依赖/顺序/critical/descriptor 相关用例,\n 新增 PluginManagerBasicsTest(id 唯一/资源级唯一/统一降级/注册序)。\n- examples(java/spring-boot) 引入选择器插件依赖并改 import;自定义插件改 getId()。",
"is_bot": false,
"headline": "refactor(plugin)!: 精简插件模型并将官方插件独立成模块",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T06:34:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a3e50dceab6416dd91f0fb1fb770676b9cd750f3",
"body": null,
"is_bot": false,
"headline": "cc",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T06:09:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a622c4de011868de685a95797a6aaf9b85609a1",
"body": null,
"is_bot": false,
"headline": "del CORE_REVIEW_2026-07-16.md",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T06:08:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed787b551e7175d4ddcdc4684ddc731757009c79",
"body": "- Phase B:勾选回退语义、F1 文档、F2 示例及验收;README 增补本轮进展。\n- CORE_REVIEW:将\"findAbility 事件重复/矛盾\"标注为已修复(2026-07-16)。",
"is_bot": false,
"headline": "docs: 同步 Phase B 进度(事件语义/回退/F1-F2)与 Review 修复标注",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:47:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1ceb774c3dbed23f58e92a53e63801845fa3fa4",
"body": "flexpoint-examples/java-example 增加 PluginExampleMain 及配套插件:\n- BasePlugin 被 GreetingSelectorPlugin 依赖,演示依赖解析与装配顺序;\n- FaultyOptionalPlugin 非关键启动失败,演示降级不阻断构建;\n- 打印加载报告(顺序/状态/失败原因);\n- 演示按上下文路由与运行期 disable/enable 选择器插件。\n\n已本地运行验证输出符合预期。",
"is_bot": false,
"headline": "docs(examples): 新增 Java 自定义插件示例(依赖/顺序/降级/运行期启停)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:46:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c75ebf620dd727ba8d4525ab9a35974f310e3a80",
"body": "事件语义收敛:\n- DefaultExtAbilityRegistry.getAllExtAbility 改为无副作用纯读取,不再发布\n EXT_FOUND/EXT_NOT_FOUND(消除同一次查找的重复/矛盾事件,并使 getAllExt 纯读取无事件)。\n- FlexPoint.findAbility 将 SELECTOR_FOUND 移到确认选择器存在之后发布;\n 查找语义(EXT_FOUND/EXT_NOT_FOUND)由 FlexPoint 在正确节点单一发布。\n- findAbilitysByCode/findAbilitysByCodeAndTags 命中候选时统一发布一次 EXT_FOUND。\n\n路由回退:\n- 新增 FlexPoint.findAbilityByCodeAndTagsOrFallback:优先 code+tags 精确匹配,\n 未命中回退到 code-only(specific → general)。\n\n补充 EventSemanticsTest(命中/未命中/纯读取/选择器缺失)与 CodeTagsFallbackTest。",
"is_bot": false,
"headline": "feat(core): 收敛查找事件语义并新增 code+tags→code 回退",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:40:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b41b16304e468a0c081558f35291fe11c9b0c964",
"body": "勾选官方插件装配生效、并发启停幂等与并发事件稳定性;README 增补运行期治理与\n测试总数(50,全绿)说明。",
"is_bot": false,
"headline": "docs: 同步 Phase B 进度(运行期启停 / E2 装配 / E3 并发)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:31:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afd38c61f1a9f1426fd14d8fd6726b42219fb3c6",
"body": "- OfficialPluginAssemblyTest:CodeSelectorPlugin 注册选择器并生效;\n ObservabilityPlugin 调用后指标累计;停用观测插件不影响核心选择(降级)。\n- ConcurrentPluginEventTest:ObservabilityPlugin 激活下 8 线程并发调用,\n 验证无异常且指标原子累计正确。",
"is_bot": false,
"headline": "test(plugin): 补充官方插件装配生效(E2)与并发事件稳定性(E3)测试",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:29:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76fc656a3b2afe34cb78d0f34967d01ec347be00",
"body": "此前 enable/disable 为 no-op。现落地最小可用的运行期治理:\n- disable:仅对 STARTED 生效,调用 stop() 反注册能力后置 STOPPED(不 destroy,便于重启);\n- enable:幂等;从 CREATED/FAILED/DESTROYED 进入先 init 再 start,从 STOPPED 进入仅 start;\n 失败降级为 FAILED 并记入加载报告,不抛出。\n- DefaultPluginManager 将 PluginContext 提升为字段,安装与运行期启停复用同一上下文。\n- FlexPoint 暴露 enablePlugin/disablePlugin 委托入口(未装配插件时空操作)。\n\n补充 PluginRuntimeToggleTest 覆盖启停切换、幂等与未知插件空操作。",
"is_bot": false,
"headline": "feat(plugin): 实现 PluginManager 运行期 enable/disable(最小可用)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:29:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df0632c0bee6bb7e7c6f1ee7b1ed492adcbd88a9",
"body": "- Phase B:勾选依赖解析/冲突/资源级唯一、状态机、描述符校验、上下文边界单测;\n 决策解释 v1、一页纸/模板、文档对齐;README 增补 2026-07-16 进展摘要。\n- Phase A:勾选 B 组并发一致性冒烟与 E 组事件配置校验。",
"is_bot": false,
"headline": "docs: 同步 Phase A/B 进度勾选(测试补齐/生命周期/决策解释/DX 文档)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:20:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57742b9ad6477aaadd0a58e770932a82d7a23683",
"body": "- FlexPointConfigValidator 新增 EventConfig 校验:线程池 core/max/queue/keepAlive 合法性\n 与 max>=core 约束,避免非法值延后到 ThreadPoolExecutor 构造期才暴露(Phase A E 组配置治理)。\n- AbstractChainExtMonitor.getAllExtMetrics 无 MetricsProvider 时返回空集合而非 null,消除调用方 NPE 风险。\n- PluginLoadReport JavaDoc 订正:移除不存在的 addConflict 示例,改用真实的 addMissingDep。\n\n补充 config/EventConfigValidationTest 覆盖默认通过与非法值拒绝。",
"is_bot": false,
"headline": "refactor(core): Review 安全项修复(事件配置校验 / 空安全 / 文档)",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:18:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65349f49006998f150923f179cf9a38ec04a7003",
"body": "新增 DecisionExplanation 值对象(候选快照/过滤链路/命中原因/结论 HIT|MISS|AMBIGUOUS)。\nSelector 接口新增 explain(candidates) 方法:\n- AbstractSelector 基于 filter 链路提供通用实现(Code/CodeVersion 等自动获得);\n- 直接实现 Selector 者可用 DecisionExplanation.fromSelection(...) 一行推导。\nFlexPoint.findAbility 在 Debug 级别输出决策解释,便于排查路由命中/未命中。\n\n接口变更为破坏性:所有直接 implements Selector 的实现需补充 explain(本次已更新全部测试选择器;\n经 AbstractSelector 继承的官方/示例选择器不受影响)。\n\n补充 selector/DecisionExplanationTest 覆盖命中/未命中/歧义与便捷推导。",
"is_bot": false,
"headline": "feat(selector): 决策解释 v1(调试级)并调整 Selector 接口",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:15:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa86addc47853db04d1720442ca9d9c801f92134",
"body": "此前 build() 装配插件后未持有 PluginManager,导致 shutdown() 从不调用\nstopAll()(插件 stop/destroy 永不执行、订阅与处理链无法清理),且加载报告被丢弃、无法观测。\n\n变更:\n- FlexPoint 新增 PluginManager 字段(纯内核构建时为 null),并新增构造重载保持兼容。\n- shutdown() 按\"插件逆序停止 -> 监控器关闭 -> 事件总线关闭\"的顺序释放资源。\n- 暴露 getPluginLoadReport()/getPluginStates() 供接入层观测。\n- ExtMonitor 新增 default shutdown() 空实现,AsyncExtMonitor 的线程池现可随 shutdown 释放。\n\n补充 FlexPointPluginLifecycleTest 覆盖:装配可观测、shutdown 触发 stop/destroy、纯内核空状态。",
"is_bot": false,
"headline": "feat(core): FlexPoint 持有 PluginManager 并接管插件生命周期与关闭",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:11:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "85fae38ad47bdfd796721ef818951e736f36e944",
"body": "- Phase B:ONE_PAGER.md(SPI 最小必读)与 PLUGIN_TEMPLATE.md(最小插件模板+自测脚手架)。\n- CORE_REVIEW_2026-07-16.md:核心代码 Review 结论与问题清单(含已修复项与待决策项)。",
"is_bot": false,
"headline": "docs: 补充插件 SPI 一页纸/模板与核心代码 Review 报告",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:08:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "14548eadd0a6f9bb01b046a8bc3af2d3f478294f",
"body": "覆盖 Phase A 工作包 B:8 写线程并发注册 + 4 读线程并发遍历,\n验证快照读取不抛并发修改异常,且最终注册总数与写入次数一致。",
"is_bot": false,
"headline": "test(registry): 补充注册中心并发一致性冒烟测试",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:08:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e786a9b7d1ddbc0b1eeee9494e2a2c35a57e3ebe",
"body": "- PluginLifecycleTest:CREATED->INITIALIZED->STARTED->STOPPED->DESTROYED 状态流转,\n 安装正序、停止逆序编排约束。\n- PluginDescriptorValidationTest:pluginId/semver 构造期校验(空/非法字符/非法版本)。\n- PluginContextBoundaryTest:上下文暴露的 registry/selector/event/monitor/config\n 与内核装配实例一致(能力边界)。",
"is_bot": false,
"headline": "test(plugin): 补充插件生命周期/描述符校验/上下文边界单测",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:08:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ba58b64a1b01325358f9084af4e9c1f54526654",
"body": "拓扑排序(Kahn)完成后又对整体按 order 排序,当\"被依赖者 order 大于依赖者\"时\n会将依赖方排到被依赖方之前,导致装配顺序错误。\n\n改为在 Kahn 主循环内使用优先队列(order 升序、pluginId 字典序兜底)选择就绪节点,\n既保证拓扑正确性,又保留 order 语义与确定性。\n\n补充 DependencyAndConflictTest 覆盖:依赖顺序回归、缺失/循环/重复依赖、\n资源级唯一(选择器同名禁止覆盖)、关键/非关键插件失败差异化。",
"is_bot": false,
"headline": "fix(plugin): 修复 DependencyResolver 中 order 全局重排破坏拓扑顺序的缺陷",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2026-07-16T05:07:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83acd2346f8d9b9539abd909dfba68596f863e47",
"body": "- 移除旧的告警和采集处理器实现\n- 重新组织告警策略和枚举类到官方插件包路径\n- 删除旧的选择器实现并将引用更新到新的插件化实现\n- 合并事件和监控自动配置为统一的观察性配置\n- 重构构建器以支持插件管理和事件总线配置\n- 添加事件拒绝策略和线程池配置选项\n- 更新示例代码以使用新的插件化选择器\n- 引入官方内置插件模型和SPI化改造\n- 更新测试用例以适配新的包路径和配置结构",
"is_bot": false,
"headline": "refactor(core): 重构核心架构以支持插件化和观察性功能",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2026-03-26T05:41:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "691c3e2feedb5d6f5350b02ea2b55cd4a0fc7a00",
"body": "- 移除 ConflictDetector 类及其能力冲突检测逻辑\n- 删除 capability 维度的唯一性约束,允许多插件声明相同能力\n- 保留 pluginId 唯一性校验和资源级唯一约束(选择器名等)\n- 更新 FLEXPOINT_PLAN.md 体现能力并存与资源级唯一策略\n- 修改 PluginLoadReport 移除冲突记录相关字段\n- 调整 Builder 和 PluginManager 相关导入和类型声明\n- 更新技术设计文档说明注册与冲突策略变更",
"is_bot": false,
"headline": "refactor(plugin): 移除插件能力冲突检测并调整注册策略",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2026-03-25T16:37:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a3a19a379a4889126448f90266154491cb96f91",
"body": "- 新增Plugin接口及生命周期管理抽象\n- 实现DefaultPluginManager插件管理器\n- 添加DependencyResolver依赖解析与拓扑排序\n- 实现ConflictDetector冲突检测机制\n- 提供PluginContext受控上下文访问内核能力\n- 在FlexPointBuilder中集成插件装配入口\n- 添加AbstractPlugin便捷基类实现\n- 完善插件元数据模型与校验机制\n- 更新文档索引与任务拆解进度追踪\n- 修复method.invoke调用时的访问权限问题",
"is_bot": false,
"headline": "feat(core): 实现插件SPI化核心功能",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2026-03-25T09:09:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0628c3151719724bd7aa6f55d58898257d71bb55",
"body": null,
"is_bot": false,
"headline": "feat(core): converge invoke fail/exception event semantics (#7)",
"author_name": "xiangganLuo",
"author_login": "xiangganLuo",
"committed_at": "2026-03-25T06:27:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6bc7e1cf1cda6a6e1523bce0a7ed21dbf5128ed1",
"body": null,
"is_bot": false,
"headline": "refactor(core): 第0阶段实现",
"author_name": "xiangganLuo",
"author_login": "xiangganLuo",
"committed_at": "2026-03-25T05:42:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "82da641a8b397d88af321766e599d6a7bcaf9c29",
"body": "- 删除了关于代码立即运行和必要导入的重复要求\n- 移除了最佳实践和设计模式的相关条目\n- 清理了性能和用户体验的重复说明\n- 去除了代码可读性和可维护性的冗余描述",
"is_bot": false,
"headline": "chore(docs): 移除general.mdc中的冗余编码规范",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2026-03-24T10:47:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d08efebbf238643635b3b680cd779ce08a56c588",
"body": null,
"is_bot": false,
"headline": "docs: add phase-0 kernel optimization plan and docs",
"author_name": "xiangganLuo",
"author_login": "xiangganLuo",
"committed_at": "2026-03-24T06:29:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51f879d14bfc8521db33697ecd5223e2a0acbbbc",
"body": null,
"is_bot": false,
"headline": "Fix typos, harden EventContext, and strengthen integration tests",
"author_name": "xiangganLuo",
"author_login": "xiangganLuo",
"committed_at": "2026-03-24T03:45:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cda9054a3f415c69694bbcd15eb232622138cf2d",
"body": "- 删除ExtMetrics接口中的getP95ResponseTime和getP99ResponseTime方法定义- 移除ExtMetricsImpl类中对P95和P99响应时间的简化实现\n- 避免提供可能误导的性能指标数据",
"is_bot": false,
"headline": "refactor(monitor): 移除不准确的P95和P99响应时间计算",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-11-21T06:31:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8a567b4b970022e215689538d36f152f119c77b",
"body": null,
"is_bot": false,
"headline": "docs(README): 更新项目简介和特性描述",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2025-08-20T04:01:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "883bda14e0e38542df1dbd95a413ac57ee940583",
"body": null,
"is_bot": false,
"headline": "refactor(core): 优化扩展点查找逻辑和事件发布机制",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-08-04T15:46:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3cb62ac3e50e192d3c050877d4a9751eeb7de97a",
"body": null,
"is_bot": false,
"headline": "refactor(core): 重构扩展点 ID 生成逻辑",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-31T14:28:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7228e553f942eb028cb486f65aab0c1007286faa",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/master'",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-28T14:53:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50327d53d45213a4499ca89b4e643d593ad18900",
"body": "- 新增 AbstractChainExtMonitor 抽象类,实现链式监控逻辑\n- 重构 AsyncExtMonitor 和 DefaultExtMonitor,继承自 AbstractChainExtMonitor\n- 新增多个自动配置类,分别负责核心、事件、监控、处理器、注册等功能模块\n- 重构 MonitorFactory,支持创建自定义处理器链的监控器\n- 更新 FlexPointBuilder,使用新的监控器创建逻辑\n-移除 FlexPointAutoConfiguration 中的冗余配置",
"is_bot": false,
"headline": "refactor(flexpoint): 重构监控模块并优化自动配置",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-28T14:53:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e6cd32291a3b752f9492fa751fb0dca31164d2e4",
"body": null,
"is_bot": false,
"headline": "style(monitor): 格式问题",
"author_name": "xiangganluo",
"author_login": "xiangganLuo",
"committed_at": "2025-07-28T05:26:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74e05ffef4e9b62070a622497b021b178bc86a00",
"body": "- 将扩展点实例的属性名从 extMap 改为 extAbilityMap,提高代码可读性- 新增 EventPublisherInvocationHandler 类,用于扩展点调用事件埋点\n- 修改 ExtAbilityInvocationHandler,移除事件发布逻辑\n- 更新 FlexPoint 类,使用代理方式包装扩展点实例,实现调用埋点\n- 调整 findAbilityByCode 和 findAbilitiesByCodeAndTags 方法,返回匹配的扩展点列表",
"is_bot": false,
"headline": "refactor(core): 重构扩展点调用事件埋点逻辑",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-27T15:03:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43b49ae86ba96a322fb7ac5152c4c3a191cc89f9",
"body": "- 重构了扩展点监控实现,采用责任链模式处理监控逻辑\n- 新增事件驱动机制,支持扩展点和选择器的注册、注销事件\n- 优化了扩展点注册中心,支持扩展点注销和事件发布\n- 重新设计了监控指标接口和实现,提高了可扩展性\n- 移除了不必要的监控状态接口和实现",
"is_bot": false,
"headline": "feat(core): 重构监控系统并添加事件驱动功能",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-27T13:40:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e7b32ed0972e58824d43772fb8b509a4261f0d2",
"body": null,
"is_bot": false,
"headline": "feature(rules): 添加项目通用规范和开发指南",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-26T07:08:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ff8296db40c61598c57154fa96fb0dcca4b2954",
"body": null,
"is_bot": false,
"headline": "feat(core): 增加根据 code 和标签查找扩展点的方法",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-22T14:59:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe47dae7e8ae8dd3c2521f282362e09267d33ae7",
"body": null,
"is_bot": false,
"headline": "refactor(core): 重构核心模块,去除上下文概念",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-20T09:35:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88f0826d2249fbdb2112c4550c9a6e22283aac39",
"body": null,
"is_bot": false,
"headline": "docs(README): 更新核心特性和使用场景",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-19T11:18:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7c1d76f0a48315827a99e152dfec3a0da6a6fa6",
"body": null,
"is_bot": false,
"headline": "refactor: 更新代码文件作者信息",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-19T11:01:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8e3abc65efbf8120356d699b61fa7f24103bb81a",
"body": "- 移动 ExtensionTags 从 common 包到 core 包\n- 用 ExtensionUtil.getExtensionId替换 generateExtensionId 方法\n- 移除 DefaultExtensionMonitor 中的冗余代码\n- 更新相关类以使用新的 ExtensionTags 包",
"is_bot": false,
"headline": "refactor(core): 重构扩展点监控功能并移动 ExtensionTags",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-19T10:43:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65cb0feea331d97c14d2d662735480293d822983",
"body": "- 在 FlexPointConfig 中添加异步监控线程池配置- 重构 AsyncExtensionMonitor 类,支持动态配置线程池参数- 优化 DefaultExtensionMonitor 中的指标记录逻辑\n- 调整 FlexPoint 和 MonitorPipeline 接口,使用 ExtensionAbility 作为参数\n- 移除不必要的 getExtensionType 方法,简化扩展点注册流程",
"is_bot": false,
"headline": "feat(core): 增强异步监控功能并优化扩展点注册",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2025-07-19T09:10:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "17b323f2d266b212d37165d8a5e6c8bb6c28a90b",
"body": "- 从 RegistryConfig 类中删除了 allowDuplicateRegistration 字段\n- 从配置验证和日志输出中移除了与重复注册相关的逻辑\n-简化了注册配置的结构,仅保留启用状态",
"is_bot": false,
"headline": "refactor(core): 移除重复注册相关配置",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2025-07-19T08:15:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d1d79ca37b496230fd6326906dc4ef3ca5ffac8",
"body": null,
"is_bot": false,
"headline": "feat(core): 重构扩展点定义逻辑以及解析逻辑",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2025-07-19T08:13:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0df10b93944162f61611ef6be6bb06769c4732de",
"body": null,
"is_bot": false,
"headline": "feat(core): 重构选择器机制",
"author_name": "luoxianggan",
"author_login": null,
"committed_at": "2025-07-19T05:40:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3a35365fef6ba88fa715a7478fb7e18b164812e",
"body": "- 将选择器链核心接口与实现、选择器优先级与顺序管理机制、选择器动态注册/注销API与配置标记为已完成\n-保持典型业务场景内置选择器任务状态不变",
"is_bot": false,
"headline": "docs(FLEXPOINT_PLAN): 更新选择器链任务状态",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-10T12:53:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2556b4b661cacf813f03241ca185cc1c041efb36",
"body": "-移除 AbstractSelector 和 ExtensionSelector接口\n- 新增 Selector接口和 SelectorChain 类\n- 重构 FlexPoint 和 DefaultSelectorRegistry 以支持选择器链\n- 更新注解和代理逻辑以适应新的选择器体系\n- 删除不必要的测试类和重构现有测试",
"is_bot": false,
"headline": "feat(core): 重构选择器体系并引入选择器链",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-10T12:49:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe061f0a298cd1b5558e332c8d39ae3222320478",
"body": "-将 @ExtensionAbilityReference 注解重命名为 @Extension\n- 更新相关类名和方法名,如 ExtensionAbilityReferenceProcessor 改为 ExtensionAbilityProcessor\n- 修改 FlexPointBuilder 类的描述,将其称为 FlexPoint 实例的建造者\n- 更新示例代码中的注解使用",
"is_bot": false,
"headline": "refactor(flexpoint): 重构扩展点引用相关代码",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-05T16:08:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "728ff801908e8f36038c84736394427bbf570990",
"body": "…ilder 类中删除了 withSelector 方法\n\n- 在 FlexPointManager 中添加了 registerSelector 方法来注册自定义选择器- 这个改动简化了 FlexPointBuilder 的接口,并将选择器注册逻辑移至更合适的位置",
"is_bot": false,
"headline": "refactor(core): 移除 FlexPointBuilder 中的 withSelector 方法- 从 FlexPointBu…",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-05T15:55:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0a56fee41e8d15a6beaa0a56b109ae2431bf930",
"body": "- 将 ExtensionResolutionStrategy重命名为 ExtensionSelector\n- 将 DefaultExtensionResolutionStrategyRegistry 重命名为 DefaultSelectorRegistry\n- 更新了相关的类名、接口名和方法名,以更好地反映其功能\n- 调整了部分代码结构,以适应新的命名体系",
"is_bot": false,
"headline": "refactor(core): 重构扩展点解析逻辑,改为扩展点选择逻辑",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-05T15:51:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d397ab1de8ba260bd4e509f404c0aac33389acb",
"body": "- 新增自定义解析器的定义和注册示例\n- 添加使用 @ExtensionResolverSelector 注解指定解析器的说明\n- 优化文档结构,删除多余的分隔符",
"is_bot": false,
"headline": "feat(README): 补充解析器自定义与注册说明",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T12:26:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed3c1566fe33d033e9d2ef34b659863cf75b3813",
"body": null,
"is_bot": false,
"headline": "refactor(flexpoint-core):调整配置项并移除未使用属性",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T08:45:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ffd3db0e5b33df8b33fe053b52edd471307266a",
"body": null,
"is_bot": false,
"headline": "docs(README): 更新贡献指南",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T08:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2be98768108c9f07eb94843da87e6eda49e121bb",
"body": "-为 version() 方法添加文档注释,解释其用途和默认值- 优化接口文档,提高可读性和易理解性",
"is_bot": false,
"headline": "docs(README): 更新 OrderProcessAbility 接口文档",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T08:19:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aeed11fdc0700d3dde157f066fb02a1e6ab4c075",
"body": null,
"is_bot": false,
"headline": "refactor(project): 重构项目结构和代码,最低支持jdk1.8",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T08:16:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d668241589e3fefa16685f3e2f66d34db9f6d827",
"body": "- 将项目标题简化为 \"Flex Point\"\n- 更新项目描述为 \"多场景适配、轻量级、极致灵活的扩展点框架\"",
"is_bot": false,
"headline": "docs: 更新 README.md 中的项目标题和描述",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T06:53:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf4134aa0b185979502e08bb09ea8fb36599768e",
"body": null,
"is_bot": false,
"headline": "refactor(flexpoint-core):优化监控模块代码结构",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T06:40:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c5f95e2ef479013052c7b4d74bb30e8e405d827",
"body": "- 优化项目简介,突出企业级应用和高可扩展性\n- 调整核心特性描述,增加预留扩展点说明\n- 新增使用场景部分,详细说明多租户、平台型系统等应用场景\n- 更新多环境支持描述,简化为 Spring Boot 和 Java原生环境",
"is_bot": false,
"headline": "docs: 更新 README.md 文件",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T06:37:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45238acbd68aeeb568929f4cdc4d958d95c18af6",
"body": null,
"is_bot": false,
"headline": "build: 添加 Maven Wrapper 配置和脚本",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T06:26:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5f1480c865db1f76ed86c20d52b7a6e93a09143",
"body": "- 新增 AsyncExtensionMonitor 类实现异步监控\n- 在 ExtensionMonitor 接口中添加新的监控相关方法\n- 新增 MonitorFactory 类提供监控器创建方法\n- 实现 MonitorPipeline 类统一处理监控事件和数据采集\n- 添加新的监控枚举类型和扩展接口",
"is_bot": false,
"headline": "feat(core): 增加异步监控器和监控数据采集功能",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T05:52:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "176f61cbf656dff18af85c9f6d11cc7174ddcbc8",
"body": "- 移除 flexpoint-common 中的 jakarta.validation、jakarta.servlet 和 jakarta.annotation 依赖\n- 在 flexpoint-examples/spring-boot-example 中添加上述依赖\n- 更新 flexpoint-springboot 中 Spring Boot 相关依赖为 provided 范围\n- 新增 META-INF/spring.factories 文件实现 Spring Boot 自动配置- 重构 SpringExtensionAbilityRegister 类,实现 InitializingBean 接口",
"is_bot": false,
"headline": "build(flexpoint): 调整项目依赖结构并支持 Spring Boot 自动配置",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-04T03:38:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b3db7cb7f5213ef9616cf175d0bd2000ad72a1b",
"body": null,
"is_bot": false,
"headline": "docs(architecture): 更新架构图",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-07-01T03:48:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad085fc095f404da2413285cab5349a397687670",
"body": "Signed-off-by: xiangganluo <2648835884@qq.com>",
"is_bot": false,
"headline": "add LICENSE.",
"author_name": "xiangganluo",
"author_login": "sky6939",
"committed_at": "2025-06-30T13:00:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7764be6624f1f208178882a5e097971b53b2ad1",
"body": null,
"is_bot": false,
"headline": "feat(core): 添加扩展能力选择器注解并更新相关测试",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-06-30T12:49:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "923c2758b0254fb0ce47fa07c5559e5b7af2fc08",
"body": "- 重构了扩展点注册、解析和监控的核心逻辑\n- 新增 ResolutionContext 类以统一扩展点上下文信息\n- 改进了扩展点版本管理和匹配逻辑\n-精简了配置和元数据相关代码\n- 优化了自定义解析策略的实现方式",
"is_bot": false,
"headline": "refactor(core): 重构核心模块以简化架构并增强功能",
"author_name": "luoxianggan",
"author_login": "xiangganLuo",
"committed_at": "2025-06-29T15:25:38Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 2,
"commits_last_year": 71,
"latest_release_at": "2026-07-17T02:38:51Z",
"latest_release_tag": "2.0.0",
"releases_from_tags": true,
"days_since_last_push": 7,
"active_weeks_last_year": 7,
"days_since_latest_release": 7,
"mean_days_between_releases": 237.8
},
"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.xiangganluo:flexpoint-core",
"exists": true,
"license": "Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": true,
"registry_url": "https://central.sonatype.com/artifact/io.github.xiangganluo/flexpoint-core",
"is_deprecated": false,
"latest_version": "2.0.0",
"repository_url": "https://github.com/xiangganLuo/flex-point/flexpoint-core",
"versions_count": 1,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-17T02:43:27Z",
"latest_version_yanked": null,
"days_since_latest_publish": 7
},
{
"name": "io.github.xiangganluo:flexpoint-common",
"exists": true,
"license": "Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": true,
"registry_url": "https://central.sonatype.com/artifact/io.github.xiangganluo/flexpoint-common",
"is_deprecated": false,
"latest_version": "2.0.0",
"repository_url": "https://github.com/xiangganLuo/flex-point/flexpoint-common",
"versions_count": 1,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-17T02:43:26Z",
"latest_version_yanked": null,
"days_since_latest_publish": 7
},
{
"name": "io.github.xiangganluo:flexpoint-spring",
"exists": true,
"license": "Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": true,
"registry_url": "https://central.sonatype.com/artifact/io.github.xiangganluo/flexpoint-spring",
"is_deprecated": false,
"latest_version": "2.0.0",
"repository_url": "https://github.com/xiangganLuo/flex-point/flexpoint-spring",
"versions_count": 1,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-17T02:43:51Z",
"latest_version_yanked": null,
"days_since_latest_publish": 7
},
{
"name": "io.github.xiangganluo:flexpoint-springboot",
"exists": true,
"license": "Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": true,
"registry_url": "https://central.sonatype.com/artifact/io.github.xiangganluo/flexpoint-springboot",
"is_deprecated": false,
"latest_version": "2.0.0",
"repository_url": "https://github.com/xiangganLuo/flex-point/flexpoint-springboot",
"versions_count": 1,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-17T02:43:53Z",
"latest_version_yanked": null,
"days_since_latest_publish": 7
}
]
},
"popularity": {
"forks": 2,
"stars": 9,
"watchers": 0,
"fork_history": {
"days": [
{
"date": "2025-06-26",
"count": 1
},
{
"date": "2025-06-27",
"count": 1
}
],
"complete": true,
"collected": 2,
"total_forks": 2
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"example"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"flexpoint-common/pom.xml",
"flexpoint-core/pom.xml",
"flexpoint-dependencies-bom/pom.xml",
"flexpoint-examples/java-example/pom.xml",
"flexpoint-examples/pom.xml",
"flexpoint-examples/spring-boot-example/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-audit/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-metrics/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-observability/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-resilience/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-retry/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-ab/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-cache/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-code-version/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-code/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-gray/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-tag/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-tenant/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-weight/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-slowcall/pom.xml",
"flexpoint-plugin-all/pom.xml",
"flexpoint-spring/pom.xml",
"flexpoint-springboot/pom.xml",
"flexpoint-test/pom.xml",
"pom.xml"
],
"largest_source_bytes": 21202,
"source_files_sampled": 181,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"docs/package.json",
"flexpoint-common/pom.xml",
"flexpoint-core/pom.xml",
"flexpoint-dependencies-bom/pom.xml",
"flexpoint-examples/pom.xml",
"flexpoint-plugin-all/pom.xml",
"flexpoint-spring/pom.xml",
"flexpoint-springboot/pom.xml",
"flexpoint-test/pom.xml",
"pom.xml"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 5,
"malicious_count": 0,
"assessed_package": "maven:io.github.xiangganluo:flexpoint-core@2.0.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"maven",
"npm"
],
"dependencies": [
{
"name": "org.slf4j:slf4j-api",
"manifest": "flexpoint-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "cn.hutool:hutool-all",
"manifest": "flexpoint-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.alibaba:transmittable-thread-local",
"manifest": "flexpoint-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-common",
"manifest": "flexpoint-core/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.projectlombok:lombok",
"manifest": "flexpoint-core/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-common",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-core",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-spring",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-springboot",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-test",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-code",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-code-version",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-observability",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-tag",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-gray",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-ab",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-weight",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-tenant",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-cache",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-audit",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-slowcall",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-metrics",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-retry",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-resilience",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
},
{
"name": "org.projectlombok:lombok",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${lombok.version}"
},
{
"name": "org.slf4j:slf4j-api",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${slf4j.version}"
},
{
"name": "cglib:cglib",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${cglib.version}"
},
{
"name": "org.springframework.boot:spring-boot-dependencies",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${spring-boot-dependencies.version}"
},
{
"name": "io.netty:netty-bom",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${netty.version}"
},
{
"name": "org.mockito:mockito-inline",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${mockito-inline.version}"
},
{
"name": "com.github.fppt:jedis-mock",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${jedis-mock.version}"
},
{
"name": "uk.co.jemos.podam:podam",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${podam.version}"
},
{
"name": "org.mapstruct:mapstruct",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${mapstruct.version}"
},
{
"name": "org.mapstruct:mapstruct-jdk8",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${mapstruct.version}"
},
{
"name": "org.mapstruct:mapstruct-processor",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${mapstruct.version}"
},
{
"name": "cn.hutool:hutool-all",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${hutool-5.version}"
},
{
"name": "org.dromara.hutool:hutool-extra",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${hutool-6.version}"
},
{
"name": "commons-io:commons-io",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${commons-io.version}"
},
{
"name": "org.apache.commons:commons-compress",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${commons-compress.version}"
},
{
"name": "org.apache.tika:tika-core",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${tika-core.version}"
},
{
"name": "com.alibaba:fastjson",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${fastjson.version}"
},
{
"name": "com.google.guava:guava",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${guava.version}"
},
{
"name": "com.alibaba:transmittable-thread-local",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${transmittable-thread-local.version}"
},
{
"name": "commons-net:commons-net",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${commons-net.version}"
},
{
"name": "com.jcraft:jsch",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${jsch.version}"
},
{
"name": "org.lionsoul:ip2region",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${ip2region.version}"
},
{
"name": "org.jsoup:jsoup",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${jsoup.version}"
},
{
"name": "org.reflections:reflections",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${reflections.version}"
},
{
"name": "com.dtflys.forest:forest-spring-boot3-starter",
"manifest": "flexpoint-dependencies-bom/pom.xml",
"ecosystem": "maven",
"version_constraint": "${forest.version}"
},
{
"name": "io.github.xiangganluo:flexpoint-core",
"manifest": "flexpoint-spring/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework:spring-context",
"manifest": "flexpoint-spring/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework:spring-core",
"manifest": "flexpoint-spring/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.projectlombok:lombok",
"manifest": "flexpoint-spring/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.slf4j:slf4j-api",
"manifest": "flexpoint-spring/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-spring",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-core",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-weight",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-audit",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-slowcall",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-metrics",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-retry",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-resilience",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-observability",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-code",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-code-version",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.projectlombok:lombok",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.slf4j:slf4j-api",
"manifest": "flexpoint-springboot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-core",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-spring",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-springboot",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-code",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-selector-code-version",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-plugin-observability",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.projectlombok:lombok",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.slf4j:slf4j-api",
"manifest": "flexpoint-test/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.github.xiangganluo:flexpoint-dependencies-bom",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${project.version}"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 4,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 3
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "xiangganLuo",
"commits": 55,
"avatar_url": "https://avatars.githubusercontent.com/u/104347635?v=4"
},
{
"type": "User",
"login": "sky6939",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/46442135?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.982
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": true,
"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": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"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": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"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": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "66deba3a600aff6418a1c0bd1236af7438256bdf",
"ran_at": "2026-07-24T20:07:21Z",
"aggregate_score": 4.3,
"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": "2026-07-17T04:59:46Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-03-25T06:27:28Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/xiangganLuo/flex-point",
"host": "github.com",
"name": "flex-point",
"owner": "xiangganLuo"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"security": 54,
"vitality": 70,
"community": 31,
"governance": 42,
"engineering": 54
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 70,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"commits_last_year": 71,
"human_commit_share": 1,
"days_since_last_push": 7,
"active_weeks_last_year": 7
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "7/52 weeks with commits",
"points": 4.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 7
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "71 commits in the last year",
"points": 16.7,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 71
}
}
],
"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": "good",
"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": 72,
"inputs": {
"releases_count": 2,
"latest_release_tag": "2.0.0",
"releases_from_tags": true,
"days_since_latest_release": 7,
"mean_days_between_releases": 237.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "2 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 2
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~237.8 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 237.8
}
}
],
"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": 7,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 7 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 7
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 31,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"forks": 2,
"stars": 9,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "9 stars",
"points": 14.6,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 9
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "2 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 2
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"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": 42,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.982
},
"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 98% of commits",
"points": 0.4,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 98
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "at_risk",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 41,
"inputs": {
"merged_prs": 4,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 3
},
"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": "4/7 decided PRs merged",
"points": 21.9,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 4,
"decided": 7
}
}
],
"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": 42,
"inputs": {
"followers": 4,
"owner_type": "User",
"is_verified": null,
"owner_login": "xiangganLuo",
"public_repos": 26,
"account_age_days": 1551
},
"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 xiangganLuo",
"points": 5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 4,
"login": "xiangganLuo"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "26 public repos, account ~4 yr old",
"points": 18.9,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 26
}
},
{
"code": "account_age_years",
"params": {
"years": 4
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "good",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"packages": [
"io.github.xiangganluo:flexpoint-core",
"io.github.xiangganluo:flexpoint-common",
"io.github.xiangganluo:flexpoint-spring",
"io.github.xiangganluo:flexpoint-springboot"
],
"ecosystems": "maven",
"any_deprecated": false,
"min_days_since_publish": 7
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "4 package(s) on maven",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 4,
"ecosystems": "maven"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 7 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 7
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "1 published versions",
"points": 4,
"status": "partial",
"details": [
{
"code": "published_versions",
"params": {
"count": 1
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 54,
"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": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": "https://flex-point.pages.dev/",
"has_readme": true,
"has_docs_dir": true,
"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": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://flex-point.pages.dev/",
"points": 15,
"status": "met",
"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": "moderate",
"name": "Security",
"value": 54,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 43,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 11,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 7,
"scorecard_aggregate": 4.3
},
"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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"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": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the maven:io.github.xiangganluo:flexpoint-core@2.0.0 runtime dependency closure — what installing the published package pulls in — 5 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "maven:io.github.xiangganluo:flexpoint-core@2.0.0",
"assessed": 5
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 5,
"unassessed_packages": 0,
"affected_by_severity": "none",
"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": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"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": 5,
"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
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"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": 53,
"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": 0.92,
"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": "92 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 92,
"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": [
"flexpoint-common/pom.xml",
"flexpoint-core/pom.xml",
"flexpoint-dependencies-bom/pom.xml",
"flexpoint-examples/java-example/pom.xml",
"flexpoint-examples/pom.xml",
"flexpoint-examples/spring-boot-example/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-audit/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-metrics/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-observability/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-resilience/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-retry/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-ab/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-cache/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-code-version/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-code/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-gray/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-tag/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-tenant/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-selector-weight/pom.xml",
"flexpoint-plugin-all/flexpoint-plugin-slowcall/pom.xml",
"flexpoint-plugin-all/pom.xml",
"flexpoint-spring/pom.xml",
"flexpoint-springboot/pom.xml",
"flexpoint-test/pom.xml",
"pom.xml"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "flexpoint-common/pom.xml, flexpoint-core/pom.xml, flexpoint-dependencies-bom/pom.xml (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "flexpoint-common/pom.xml, flexpoint-core/pom.xml, flexpoint-dependencies-bom/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": 21202,
"source_files_sampled": 181,
"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/181 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 181,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example"
}
}
],
"max_points": 40
}
]
}
],
"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",
"Could not fetch maven package 'io.github.xiangganluo:flexpoint-test' from its registry",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-24T20:07:25.659984Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/x/xiangganLuo/flex-point.svg",
"full_name": "xiangganLuo/flex-point",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}