Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-24 20:07 UTC

xiangganLuo / flex-point

Flex Point 是一款面向应用的轻量级扩展点(Ext Point)框架,为多业务场景下的「能力解耦、动态路由、灵活扩展」而生。它把「同一能力的不同业务实现」抽象为扩展点,由选择器在运行期按上下文选中目标实现,让业务代码只依赖接口、路由决策收敛在框架内。

JavaApache-2.0★ 9 stars⑂ 2 forkssince Jun 2025View on GitHub ↗

xiangganLuo/flex-point holds a health index of 50 out of 100, placing it in the Moderate band. It scores highest on Vitality (70/100) and lowest on Community & Adoption (31/100). It was last updated 7 days ago. A single contributor accounts for most of its recent work.

50
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

50
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

xiangganLuoPersonal account
4 followers26 public repossince Apr 2022dp

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Mavenio.github.xiangganluo:flexpoint-core2.0.0-17 days ago
Mavenio.github.xiangganluo:flexpoint-common2.0.0-17 days ago
Mavenio.github.xiangganluo:flexpoint-spring2.0.0-17 days ago
Mavenio.github.xiangganluo:flexpoint-springboot2.0.0-17 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

70Good · 22% of overall
How it's scored
36/36Push recency — last push 7 days ago
4.8/36Commit cadence — 7/52 weeks with commits
16.7/18Commit volume — 71 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year71
human_commit_share1
days_since_last_push7
active_weeks_last_year7
How it's scored
16.2/27Ships releases — 2 version tags (no GitHub releases)
36/36Release recency — latest release 7 days ago
12.6/27Release cadence — a release every ~237.8 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count2
latest_release_tag2.0.0
releases_from_tagsyes
days_since_latest_release7
mean_days_between_releases237.8
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

31At risk · 18% of overall
How it's scored
14.6/60Stars — 9 stars
0/25Forks — 2 forks
0/15Watchers — 0 watchers
Inputs used
forks2
stars9
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

42At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.4/22.5Commit distribution — top contributor authored 98% of commits
2.7/13.5Contributor breadth — 2 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled2
top_contributor_share0.982
How it's scored
0/46.8Issue resolution — no issues or no data
21.9/38.3PR acceptance — 4/7 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs4
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs3
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
5/25Owner reach — 4 followers of xiangganLuo
18.9/25Track record — 26 public repos, account ~4 yr old
Inputs used
followers4
owner_typeUser
is_verified
owner_loginxiangganLuo
public_repos26
account_age_days1,551
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 4 package(s) on maven
35/35Publish recency — latest publish 7 days ago
4/20Version history — 1 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesio.github.xiangganluo:flexpoint-core, io.github.xiangganluo:flexpoint-common, io.github.xiangganluo:flexpoint-spring, io.github.xiangganluo:flexpoint-springboot
ecosystemsmaven
any_deprecatedno
min_days_since_publish7

Engineering Quality

Are baseline engineering and documentation practices in place?

54Moderate · 20% of overall
How it's scored
0/24CI workflows
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_cino
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

90Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://flex-point.pages.dev/
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepagehttps://flex-point.pages.dev/
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

54Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — no data
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
0/5Pinned-Dependencies — no data
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — no data
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated11
scorecard_versionv5.5.0
checks_inconclusive7
scorecard_aggregate4.3
Excluded from scoring (no data or not applicable): branch_protection, ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
25/25Indirect dependencies free of known advisories — no indirect dependency carries a known advisory
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages5
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
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.

AI Readiness

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.

53Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 92 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.92
agent_instruction_files
agent_instruction_max_bytes
How it's scored
12.6/18One-command bootstrap — flexpoint-common/pom.xml, flexpoint-core/pom.xml, flexpoint-dependencies-bom/pom.xml (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — Java (statically typed)
0/10Reproducible environment
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — no data
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifestsflexpoint-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_share0
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.
How it's scored
45/45Type-checkable code — Java (statically typed)
55/55Manageable file sizes — 0/181 source files over 60KB
Inputs used
primary_languageJava
largest_source_bytes21,202
source_files_sampled181
oversized_source_files0
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — example
Inputs used
example_dirsexample
has_mcp_signalno
api_schema_files

Key facts

9GitHub stars
2contributors
71commits, last 12 months
7days since last push
2releases
1bus factor
0open issues
Maven, npmpackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 2 ⇿
0Stars
2Forks

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

111222212025-062025-062025-06
OpenSSF Scorecard 4.3 / 10
4.3aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-24 20:07 UTC

10Binary-Artifactsno binaries found in the repo
n/aBranch-Protectioninternal 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
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
n/aDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
n/aPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
n/aToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 76
RegistryPackageVersion constraintManifest
Mavenorg.slf4j:slf4j-apiflexpoint-common/pom.xml
Mavencn.hutool:hutool-allflexpoint-common/pom.xml
Mavencom.alibaba:transmittable-thread-localflexpoint-common/pom.xml
Mavenio.github.xiangganluo:flexpoint-commonflexpoint-core/pom.xml
Mavenorg.projectlombok:lombokflexpoint-core/pom.xml
Mavenio.github.xiangganluo:flexpoint-common${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-core${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-spring${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-springboot${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-test${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-code${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-code-version${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-observability${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-tag${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-gray${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-ab${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-weight${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-tenant${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-cache${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-audit${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-slowcall${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-metrics${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-retry${project.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-resilience${project.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.projectlombok:lombok${lombok.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.slf4j:slf4j-api${slf4j.version}flexpoint-dependencies-bom/pom.xml
Mavencglib:cglib${cglib.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot-dependencies.version}flexpoint-dependencies-bom/pom.xml
Mavenio.netty:netty-bom${netty.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.mockito:mockito-inline${mockito-inline.version}flexpoint-dependencies-bom/pom.xml
Mavencom.github.fppt:jedis-mock${jedis-mock.version}flexpoint-dependencies-bom/pom.xml
Mavenuk.co.jemos.podam:podam${podam.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.mapstruct:mapstruct${mapstruct.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.mapstruct:mapstruct-jdk8${mapstruct.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.mapstruct:mapstruct-processor${mapstruct.version}flexpoint-dependencies-bom/pom.xml
Mavencn.hutool:hutool-all${hutool-5.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.dromara.hutool:hutool-extra${hutool-6.version}flexpoint-dependencies-bom/pom.xml
Mavencommons-io:commons-io${commons-io.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.apache.commons:commons-compress${commons-compress.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.apache.tika:tika-core${tika-core.version}flexpoint-dependencies-bom/pom.xml
Mavencom.alibaba:fastjson${fastjson.version}flexpoint-dependencies-bom/pom.xml
Mavencom.google.guava:guava${guava.version}flexpoint-dependencies-bom/pom.xml
Mavencom.alibaba:transmittable-thread-local${transmittable-thread-local.version}flexpoint-dependencies-bom/pom.xml
Mavencommons-net:commons-net${commons-net.version}flexpoint-dependencies-bom/pom.xml
Mavencom.jcraft:jsch${jsch.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.lionsoul:ip2region${ip2region.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.jsoup:jsoup${jsoup.version}flexpoint-dependencies-bom/pom.xml
Mavenorg.reflections:reflections${reflections.version}flexpoint-dependencies-bom/pom.xml
Mavencom.dtflys.forest:forest-spring-boot3-starter${forest.version}flexpoint-dependencies-bom/pom.xml
Mavenio.github.xiangganluo:flexpoint-coreflexpoint-spring/pom.xml
Mavenorg.springframework:spring-contextflexpoint-spring/pom.xml
Mavenorg.springframework:spring-coreflexpoint-spring/pom.xml
Mavenorg.projectlombok:lombokflexpoint-spring/pom.xml
Mavenorg.slf4j:slf4j-apiflexpoint-spring/pom.xml
Mavenio.github.xiangganluo:flexpoint-springflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-coreflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-weightflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-auditflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-slowcallflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-metricsflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-retryflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-resilienceflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-observabilityflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-codeflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-code-versionflexpoint-springboot/pom.xml
Mavenorg.projectlombok:lombokflexpoint-springboot/pom.xml
Mavenorg.slf4j:slf4j-apiflexpoint-springboot/pom.xml
Mavenio.github.xiangganluo:flexpoint-coreflexpoint-test/pom.xml
Mavenio.github.xiangganluo:flexpoint-springflexpoint-test/pom.xml
Mavenio.github.xiangganluo:flexpoint-springbootflexpoint-test/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-codeflexpoint-test/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-selector-code-versionflexpoint-test/pom.xml
Mavenio.github.xiangganluo:flexpoint-plugin-observabilityflexpoint-test/pom.xml
Mavenorg.projectlombok:lombokflexpoint-test/pom.xml
Mavenorg.slf4j:slf4j-apiflexpoint-test/pom.xml
Mavenio.github.xiangganluo:flexpoint-dependencies-bom${project.version}pom.xml
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Dependency advisories 0

Installing maven:io.github.xiangganluo:flexpoint-core@2.0.0 pulls in 5 packages, direct and transitive: 0 carry known advisories, of which 0 are direct dependencies.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsMaven.