公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-27 09:13 UTC

tigrisdata / ocache

A cache service that supports both in-memory and disk-based storage

GoApache-2.0★ 0 星标⑂ 0 复刻始于 2025年7月在 GitHub 上查看 ↗

tigrisdata/ocache 的健康指数为 100 分中的 61 分,处于「中等」区间。 其得分最高的类别是Vitality(85/100),最低的是Community & Adoption(40/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

61
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

61
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

111 关注者51 个公开仓库始于 2021年12月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Gogithub.com/tigrisdata/ocache/protov1.9.0-182 天前
Gogithub.com/tigrisdata/ocache/clientv1.9.0-182 天前
Gogithub.com/tigrisdata/ocache/commonv1.9.0-182 天前
Gogithub.com/tigrisdata/ocache/serverv1.9.0-182 天前
Gogithub.com/tigrisdata/ocache/storagev1.9.0-182 天前
Gogithub.com/tigrisdata/ocache/embeddedv1.9.0-142 天前
Gogithub.com/tigrisdata/ocache/coordinatorv1.9.0-182 天前

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

85优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
17.3/36提交节奏 — 52 周中有 25 周有提交
18/18提交量 — 最近一年 162 次提交
10/10OpenSSF Scorecard:Maintained — 26 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year162
human_commit_share1
days_since_last_push0
active_weeks_last_year25

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 21 个发布版本
36/36发布时效 — 最近一次发布版本于 2 天前
27/27发布节奏 — 约每 13.1 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count21
latest_release_tagv1.9.0
releases_from_tags
days_since_latest_release2
mean_days_between_releases13.1

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

40存在风险 · 占总体的 18%
评分方式
0/60星标 — 0 个星标
0/25复刻 — 0 个复刻
0/15关注者 — 0 位关注者
所用输入
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

85优秀
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(Apache-2.0)
18/18CONTRIBUTING 指南
13.5/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

59中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0.1/22.5提交分布 — 头号贡献者编写了 100% 的提交
2.7/13.5贡献者广度 — 2 位贡献者
6/10OpenSSF Scorecard:Contributors — project has 2 contributing companies or organizations -- score normalized to 6
所用输入
bus_factor1
contributors_sampled2
top_contributor_share0.995
评分方式
32/46.8议题解决 — 68% 的议题已关闭
37/38.3PR 接受 — 已裁定的 PR 中 175/181 已合并
1.5/15OpenSSF Scorecard:Code-Review — Found 3/30 approved changesets -- score normalized to 1
所用输入
merged_prs175
open_issues6
closed_issues13
issue_closed_ratio0.684
closed_unmerged_prs6
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
14.7/25所有者影响力 — tigrisdata 有 111 位关注者
21.8/25既往记录 — 51 个公开仓库,账户约 4 年
所用输入
followers111
owner_typeOrganization
is_verified
owner_logintigrisdata
public_repos51
account_age_days1,691
评分方式
25/25已发布且可解析 — go 上有 7 个软件包
35/35发布时效 — 最近一次发布于 2 天前
20/20版本历史 — 18 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgithub.com/tigrisdata/ocache/proto, github.com/tigrisdata/ocache/client, github.com/tigrisdata/ocache/common, github.com/tigrisdata/ocache/server, github.com/tigrisdata/ocache/storage, github.com/tigrisdata/ocache/embedded, github.com/tigrisdata/ocache/coordinator
ecosystemsgo
any_deprecated
min_days_since_publish2

工程质量

基础的工程与文档实践是否到位?

71良好 · 占总体的 20%

工程实践

68中等
评分方式
24/24CI 工作流 — 11 个工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
20/20OpenSSF Scorecard:CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

75良好
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
0/10主题标签
10/10Wiki
所用输入
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

43存在风险 · 占总体的 16%

安全态势

43存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 无数据
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 3/30 approved changesets -- score normalized to 1
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 26 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 14 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.3
已排除计分(无数据或不适用):branch_protection。 其余权重已重新归一化。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

75良好 · 占总体的 0%
评分方式
45/45代理指令 — CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 100 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes8,859
评分方式
18/18一条命令的引导启动 — Makefile
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — Go(静态类型)
10/10可复现环境 — Dockerfile, lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 25 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.25
toolchain_manifestsclient/go.mod, common/go.mod, coordinator/go.mod, coordinator/proto/go.mod, embedded/go.mod, proto/go.mod, server/go.mod, storage/go.mod, tests/integration/go.mod
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — Go(静态类型)
55/55可控的文件大小 — 采样的 158 个源文件中有 0 个超过 60KB
所用输入
primary_languageGo
largest_source_bytes53,095
source_files_sampled158
oversized_source_files0

机器可读接口

40存在风险
评分方式
40/40API 模式(OpenAPI/GraphQL/proto) — coordinator/proto/cluster.proto, proto/cache.proto, proto/google/api/annotations.proto, proto/google/api/http.proto, storage/proto/storage.proto
0/20MCP 服务器
0/40可运行示例
所用输入
example_dirs
has_mcp_signal
api_schema_filescoordinator/proto/cluster.proto, proto/cache.proto, proto/google/api/annotations.proto, proto/google/api/http.proto, storage/proto/storage.proto

关键数据

0GitHub 星标
2贡献者
162最近 12 个月提交数
0距最近推送天数
21发布版本数
1巴士系数(bus factor)
6开放议题
Go软件包生态系统数

数据采集警告

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

更多细节

OpenSSF Scorecard 4.3 / 10
4.3综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-27 09:13 UTC

10Binary-Artifactsno binaries found in the repo
不适用Branch-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
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 3/30 approved changesets -- score normalized to 1
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained26 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities14 existing vulnerabilities detected
直接依赖 52
注册表软件包版本约束清单文件
Gogithub.com/pterm/ptermv0.12.81client/go.mod
Gogithub.com/spf13/cobrav1.9.1client/go.mod
Gogithub.com/stretchr/testifyv1.11.1client/go.mod
Gogithub.com/tigrisdata/ocache/commonv1.1.0client/go.mod
Gogithub.com/tigrisdata/ocache/coordinatorv1.1.0client/go.mod
Gogithub.com/tigrisdata/ocache/coordinator/protov1.1.0client/go.mod
Gogithub.com/tigrisdata/ocache/protov1.1.0client/go.mod
Gogoogle.golang.org/grpcv1.72.2client/go.mod
Gogoogle.golang.org/protobufv1.36.8client/go.mod
Gogithub.com/cespare/xxhashv1.1.0common/go.mod
Gogithub.com/prometheus/client_golangv1.23.2common/go.mod
Gogithub.com/rs/zerologv1.34.0common/go.mod
Gogithub.com/go-kit/logv0.2.1coordinator/go.mod
Gogithub.com/grafana/dskitv0.0.0-20240104111617-ea101a3b86ebcoordinator/go.mod
Gogithub.com/prometheus/client_golangv1.23.2coordinator/go.mod
Gogithub.com/rs/zerologv1.34.0coordinator/go.mod
Gogithub.com/stretchr/testifyv1.11.1coordinator/go.mod
Gogithub.com/tigrisdata/ocache/commonv1.1.0coordinator/go.mod
Gogithub.com/tigrisdata/ocache/coordinator/protov1.1.0coordinator/go.mod
Gogithub.com/tigrisdata/ocache/protov1.1.0coordinator/go.mod
Gogoogle.golang.org/grpcv1.72.2coordinator/go.mod
Gogithub.com/prometheus/client_golangv1.23.2embedded/go.mod
Gogithub.com/rs/zerologv1.34.0embedded/go.mod
Gogithub.com/tigrisdata/ocache/clientv1.1.0embedded/go.mod
Gogithub.com/tigrisdata/ocache/commonv1.1.0embedded/go.mod
Gogithub.com/tigrisdata/ocache/coordinatorv1.1.0embedded/go.mod
Gogithub.com/tigrisdata/ocache/protov1.1.0embedded/go.mod
Gogithub.com/tigrisdata/ocache/serverv1.1.0embedded/go.mod
Gogithub.com/tigrisdata/ocache/storagev1.1.0embedded/go.mod
Gogoogle.golang.org/grpcv1.72.2embedded/go.mod
Gogithub.com/grpc-ecosystem/grpc-gateway/v2v2.26.3proto/go.mod
Gogithub.com/tigrisdata/ocache/coordinator/protov1.1.0proto/go.mod
Gogoogle.golang.org/genproto/googleapis/apiv0.0.0-20250303144028-a0af3efb3debproto/go.mod
Gogoogle.golang.org/grpcv1.72.2proto/go.mod
Gogoogle.golang.org/protobufv1.36.8proto/go.mod
Gogithub.com/grpc-ecosystem/grpc-gateway/v2v2.26.3server/go.mod
Gogithub.com/prometheus/client_golangv1.23.2server/go.mod
Gogithub.com/rs/zerologv1.34.0server/go.mod
Gogithub.com/stretchr/testifyv1.11.1server/go.mod
Gogithub.com/tigrisdata/ocache/commonv1.1.0server/go.mod
Gogithub.com/tigrisdata/ocache/coordinatorv1.1.0server/go.mod
Gogithub.com/tigrisdata/ocache/storagev1.1.0server/go.mod
Gogoogle.golang.org/grpcv1.72.2server/go.mod
Gogithub.com/google/uuidv1.6.0storage/go.mod
Gogithub.com/hashicorp/golang-lru/v2v2.0.7storage/go.mod
Gogithub.com/linxGnu/grocksdbv1.10.1storage/go.mod
Gogithub.com/prometheus/client_golangv1.23.2storage/go.mod
Gogithub.com/rs/zerologv1.34.0storage/go.mod
Gogithub.com/stretchr/testifyv1.11.1storage/go.mod
Gogithub.com/tigrisdata/ocache/commonv1.1.0storage/go.mod
Gogolang.org/x/sysv0.35.0storage/go.mod
Gogoogle.golang.org/protobufv1.36.8storage/go.mod
全部依赖 未采集

本报告未能采集到解析后的依赖集合:GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1559,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1421983,
        "Shell": 127219,
        "Makefile": 22058,
        "Dockerfile": 735
      },
      "pushed_at": "2026-07-27T05:52:54Z",
      "created_at": "2025-07-16T22:15:42Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-27T05:26:37Z",
      "description": "A cache service that supports both in-memory and disk-based storage",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Tigris Data Inc",
      "type": "Organization",
      "login": "tigrisdata",
      "company": null,
      "location": "United States of America",
      "followers": 111,
      "avatar_url": "https://avatars.githubusercontent.com/u/95787860?v=4",
      "created_at": "2021-12-08T21:16:12Z",
      "is_verified": null,
      "public_repos": 51,
      "account_age_days": 1691
    },
    "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": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-07-24T16:41:48Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-07-19T17:20:45Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-07-12T02:50:14Z"
        },
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2026-07-05T17:37:47Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-06-30T08:38:53Z"
        },
        {
          "tag": "v1.5.2",
          "kind": "patch",
          "published_at": "2026-06-26T00:26:22Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-04-17T03:40:41Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-04-14T06:43:55Z"
        },
        {
          "tag": "v1.4.1",
          "kind": "patch",
          "published_at": "2026-04-12T05:52:56Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-03-29T00:26:58Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2026-02-18T18:22:10Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2026-02-18T06:19:16Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-02-14T22:40:03Z"
        },
        {
          "tag": "v1.2.3",
          "kind": "patch",
          "published_at": "2026-01-27T03:02:39Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2026-01-20T07:42:27Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-01-19T23:57:03Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-01-19T06:59:12Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-01-19T01:29:49Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-01-17T06:09:40Z"
        },
        {
          "tag": "rocksdb-v10.4.2",
          "kind": "other",
          "published_at": "2026-01-17T05:35:03Z"
        },
        {
          "tag": "rocksdb-v10.4.2-prerelease",
          "kind": "other",
          "published_at": "2025-08-07T02:41:51Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "eead23406770db4e76f54405424c8a38f96382c6",
          "body": "* build: publish a jemalloc variant of the rocksdb-static artifact\n\nAdds a VARIANT build axis to the RocksDB static-library build so a\njemalloc-enabled variant is published alongside the existing plain one,\nboth under the same `rocksdb-v<ver>` release (issue #176).\n\nscripts/build-rocksdb-static.sh:\n\n[…]\nlloc into a binary (ocache's\nown release build and TAG's, plus the static-link symbol interposition and\nbefore/after RSS verification) is the follow-up.\n\nSigned-off-by: Ovais Tariq <ot@tigrisdata.com>",
          "is_bot": false,
          "headline": "build: publish a jemalloc variant of the rocksdb-static artifact (#198)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-27T05:26:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25a300bf4550cfe9d85f34080bd724d8d2702a78",
          "body": "…plification (#196)\n\nbyteRangeReader jumps to a range's start offset by asserting its reader for\nio.Seeker, else it reads and discards every byte before the range. Segment.\nReadEntry and FileManager.Read hand back a seekable *io.SectionReader but wrap\nit in readCloserWithOnClose{io.Reader} / fileRea\n[…]\nstReadCloserWithOnClose_ExposesSeek\nand TestFileReadCloser_ExposesSeek are compile-time + behavioral guards that the\nwrappers stay seekable.\n\nFixes #195\n\nSigned-off-by: Ovais Tariq <ot@tigrisdata.com>",
          "is_bot": false,
          "headline": "fix: preserve Seek on segment/raw-file readers to avoid range read am…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-24T15:54:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "edf1c6b0a1d82e56e418ffa9cc1bc5f08ecf23f9",
          "body": "… (#194)\n\nAdd IsLocal(key) to the embedded cache client, delegating to the\ncoordinator's ownership check (returns true in single-node mode). This\nlets a consumer (TAG) observe, per read, whether a key is served from\nlocal storage or pulled from a peer over gRPC — the cross-node\ndata-plane cost that \n[…]\nhod so the memory/remote clients are not forced to invent\na local/remote answer they cannot meaningfully give; consumers use an\noptional type-assertion.\n\nSigned-off-by: Ovais Tariq <ot@tigrisdata.com>",
          "is_bot": false,
          "headline": "feat: expose IsLocal on embedded client for serve-locality visibility…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-24T06:42:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ec720eeb60ac6e1bceae69d16852dc9eede5f0c1",
          "body": "* test: make eviction e2e LRU protection reliable on CI\n\nThe LRU \"protection semantics\" e2e case flaked on CI (read-oldest keys\nsurvived 2/5, threshold ≥3), while FIFO passed. Root cause: LRU protects\na key only when the read succeeds and its async access-bump lands —\naccess buckets are hourly, so e\n[…]\nore forcing eviction. Locally this\ntakes the LRU read-oldest survival from a flaky 2/5 to a stable 5/5;\nFIFO stays 0/5.\n\nsession_01YCoN4Him5ZY4hZovVp37ra\nSigned-off-by: Ovais Tariq <ot@tigrisdata.com>",
          "is_bot": false,
          "headline": "test: make eviction e2e LRU protection reliable on CI (#192)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-19T18:05:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8725a3e2df4a316d7c6fc45ab600a31b82fc8f90",
          "body": "Switching -eviction-policy to fifo on a directory that already holds keys\nis supported and keeps reads/writes correct; it simply leaves the\npre-existing keys outside the FIFO index, so the disk cap does not\nreclaim them until they are rewritten or deleted. The previous wording\ncalled switching \"not \n[…]\nkes effect for data written afterward; size the cap so the\nuntracked pre-FIFO set fits, or start fifo fresh if the cap must cover\neverything. Link the residual (stale cross-policy index rows) to #189.",
          "is_bot": false,
          "headline": "docs: clarify FIFO behavior on a non-fresh data directory (#190)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-19T16:49:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ccedac2a35c3b2e812d31eba1e89f154fd1854a1",
          "body": "Adds -eviction-policy=lru|fifo (default lru), effective when\n-max-disk-usage is set. LRU is unchanged: a read refreshes an entry's\nrecency. FIFO evicts the oldest-written key first and reads never refresh\nrecency, suiting write-once workloads (parquet, tag#109) where a rare\nread of old data should n\n[…]\nloses #185.\n\nSigned-off-by: Ovais Tariq <ot@tigrisdata.com>\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YCoN4Him5ZY4hZovVp37ra",
          "is_bot": false,
          "headline": "feat: add time-based (FIFO) eviction policy (#186)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-19T16:29:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5f63ea4753d4d6bee12436e4cccf4c3151a189a0",
          "body": "Several storage functions created grocksdb ReadOptions/WriteOptions/\nWriteBatch handles but never Destroy()'d them. grocksdb (v1.10.1) sets no\nruntime finalizer, so each of these leaked native (C++) memory on every\ncall — including on the read and write hot paths — growing RSS unbounded\nover long up\n[…]\ned in\nevictLRUKeys, cleanupOldBuckets, and accessUpdater.flushBatch.\n\nDeleteKey and cleanupExpiredKeys have the same leak; those are fixed in #186 (they are edited there for the eviction-policy work).",
          "is_bot": false,
          "headline": "fix: destroy grocksdb options/batches to stop native memory leaks (#187)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-18T06:28:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "206840f13b0ac6cafdc51b8fd990d433a4ded9cc",
          "body": "* fix: refresh live cache-size gauges on the cleaner tick\n\nocache_disk_usage_bytes{type=\"total\"} and the segment gauges\n(ocache_segments_total, ocache_segment_size_bytes) were set only once at\nstartup — in Cleaner.calculateTotalSize() and Manager.loadSegments(),\nrespectively — so on a fresh node the\n[…]\nso embedders can publish their\nown gauge without an O(N) keyspace scan — reachable from the embedded\nclient via Client.Storage().TotalSize().\n\nAddresses part 1 of #183 (downstream tigrisdata/tag#108).",
          "is_bot": false,
          "headline": "fix: refresh live cache-size gauges on the cleaner tick (#184)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-18T02:13:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cfa0016d515cfdb3c0cecf6cd447f4cbda0b7f3c",
          "body": "…s (#181)\n\n* docs: add Code of Conduct, Security policy, and public README sections\n\nOpen-sourcing prep for public consumption:\n- CODE_OF_CONDUCT.md: adopts the Tigris Data org-wide Code of Conduct (pointer,\n  not a duplicate).\n- SECURITY.md: private vulnerability-reporting policy (GitHub private re\n[…]\ns (Go/protoc/RocksDB via cgo), and Contributing,\n  Security, and License sections.\n\n\nSigned-off-by: Ovais Tariq <ot@tigrisdata.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Code of Conduct, Security policy, and public README section…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-11T02:56:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "581199e48114ce826c3ffccd69733ca147468f7e",
          "body": "Replaces the proprietary Tigris EULA with the canonical Apache License 2.0\nand adds SPDX license headers to all non-generated Go source files:\n\n  // Copyright 2026 Tigris Data, Inc.\n  // SPDX-License-Identifier: Apache-2.0\n\nGenerated files (proto *.pb.go / *.pb.gw.go / *_grpc.pb.go) are left without\nheaders. Companion files (NOTICE, dependency-license CI guardrail) are in a\nseparate PR. The dependency-license audit found no GPL/AGPL/LGPL in the\ncompiled tree, so Apache-2.0 is unencumbered.",
          "is_bot": false,
          "headline": "chore: relicense OCache under Apache-2.0 (LICENSE + SPDX headers) (#179)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-11T02:38:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f3c27b684a7d10f1384994e30ee2a818650d633",
          "body": "… (#180)\n\nUse the Developer Certificate of Origin (sign-off per commit) rather than a\nCLA for inbound contributions. Adds the DCO 1.1 text, a CONTRIBUTING.md with\nsign-off instructions, and a self-contained CI check that verifies every\nnon-merge commit in a PR has a Signed-off-by matching its author.\n\n\nSigned-off-by: Ovais Tariq <ot@tigrisdata.com>",
          "is_bot": false,
          "headline": "chore: adopt DCO for contributions (DCO text, CONTRIBUTING, CI check)…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-11T02:35:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "489741593b43ce5f694161d4703c035168fd82e5",
          "body": null,
          "is_bot": false,
          "headline": "chore: add NOTICE and a dependency-license CI guardrail (#178)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-11T02:21:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f64c1940524205318469b3e2e3f5f16d97a3909c",
          "body": "…(#163) (#177)",
          "is_bot": false,
          "headline": "feat: expose -metadata-background-jobs to cap RocksDB background CPU …",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-06T21:14:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcd645eea229d31bf1bb4c02337aebf3c2978e81",
          "body": "…gmentSize (#165) (#175)",
          "is_bot": false,
          "headline": "feat: cap List-with-values value size and guard CompactThreshold < Se…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-06T20:04:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e8a1414bc883e0eafd71072b71e1f4619f33cbe",
          "body": "…on (#174)",
          "is_bot": false,
          "headline": "docs: correct cluster/embedded lifecycle for readiness-gated activati…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-06T06:54:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c2883c1448a05e330f5d266a0395c84c28349e0",
          "body": null,
          "is_bot": false,
          "headline": "ci: pin intra-module require directives to the release version (#173)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-06T06:30:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4830c85eebe213d386b3a498d0705e63017a22bc",
          "body": "…2) (#169)",
          "is_bot": false,
          "headline": "fix: stream cross-node Get instead of buffering the whole object (#16…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-05T07:26:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d488e087a513a14a08c19dddcb6804c16e143f82",
          "body": "…4) (#168)",
          "is_bot": false,
          "headline": "fix: gate ring activation on readiness to stop rejoin flood/flap (#16…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-04T05:13:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0e1ef8a65d3ee7733704be06df3ee3277bea756",
          "body": "…64) (#167)",
          "is_bot": false,
          "headline": "fix: throttle degraded-ring failure logs and jitter retry backoff (#1…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-04T02:31:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec5621552d567852e40c241e90faba033a3e7a48",
          "body": null,
          "is_bot": false,
          "headline": "fix: bound cluster-wide List peer fan-out (#162 Part B) (#166)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-07-04T00:36:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22d6dc1f8467e812a6658097128fcf68b39d6b16",
          "body": null,
          "is_bot": false,
          "headline": "feat: make DeleteBatchSize configurable via StorageConfig (#160)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-06-30T07:58:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f124cca5028af733932b78b59d189c35c7dd9787",
          "body": null,
          "is_bot": false,
          "headline": "feat: make startup recovery worker count configurable (#159)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-06-30T07:26:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b22763e149676be7720d94af4a9eb37100467d0",
          "body": "…(#157)",
          "is_bot": false,
          "headline": "fix: stop deletion-queue prune from orphaning files that still exist …",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-06-30T06:56:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "982bc66acbb830c040c69769ae7948bd89ea93d3",
          "body": "… them (#155)",
          "is_bot": false,
          "headline": "fix: queue raw-file deletions during LRU eviction instead of dropping…",
          "author_name": "Håkon Åmdal",
          "author_login": "hawkaa",
          "committed_at": "2026-06-30T02:07:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89ffe768baee33bebb8bee9b1894c4932aa324c2",
          "body": "…index row (#152) (#153)",
          "is_bot": false,
          "headline": "fix: reconcile dangling metadata when compactor drops a missing-file …",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-06-25T21:03:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "516a4f944a827acb7ffb36818696de634088b446",
          "body": "…0) (#151)",
          "is_bot": false,
          "headline": "fix: stop dangling raw-file references from crash-looping a node (#15…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-06-25T18:26:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0e73fcda46948c9c9a90c0baad4cd6187a0a810",
          "body": null,
          "is_bot": false,
          "headline": "fix: close races between FdCache Acquire, Release, and Remove (#148)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-04-17T02:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05372b8d1ea5ede476d4bdf4891c0cc2afd662fb",
          "body": "… merge (#146)",
          "is_bot": false,
          "headline": "fix: don't return Status::Corruption when Delete races with compactor…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-04-14T06:02:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd7a67b849ef60fb1fa3f278a3a4615abb5027cc",
          "body": null,
          "is_bot": false,
          "headline": "fix: close Put↔compactor race via conditional-merge CAS (#144)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-04-14T04:11:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd56988d4a87c5aec95d37e23fe3cac5af5a6410",
          "body": "…#143)",
          "is_bot": false,
          "headline": "feat: expose advanced storage and cluster config in embedded client (…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-04-13T21:49:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05f1723f272eec22cc4695639e720c893a81f56d",
          "body": null,
          "is_bot": false,
          "headline": "fix: apply default compaction config in NewStorageWithConfig (#140)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-04-12T04:39:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "603ff24111a76143c81c78b12187b6b3ad32ce6a",
          "body": null,
          "is_bot": false,
          "headline": "feat: add paginated key-value listing (ListPageWithValues) (#138)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-03-28T23:30:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ce9b3f6e50511cf1d6edda83f9b7f80de4e3481",
          "body": null,
          "is_bot": false,
          "headline": "fix: make zerologAdapter robust for all dskit level types (#136)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-02-18T17:41:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a75d0758af948fa3079faec710d7112ca9f239b2",
          "body": "…e level (#134)",
          "is_bot": false,
          "headline": "fix: reduce memberlist debug log noise by mapping dskit debug to trac…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-02-18T05:37:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90c2dd44e89f0e943cb15f2c37c36266cbda4ced",
          "body": null,
          "is_bot": false,
          "headline": "feat: add support for custom gRPC options (#132)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-02-14T22:14:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea860102e0a9276061cc84577a9d22bb21298c26",
          "body": null,
          "is_bot": false,
          "headline": "refactor: extract operations layer for embedded use (#130)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-27T01:00:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43dc5e29414224a86388f1e0211a261cf4f48107",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add embedded client to README documentation list",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T23:56:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6bc08fb7ed6a5685eb4caddafdde4925d46eb6f4",
          "body": "- Remove Kubernetes StatefulSet example section\n- Update MaxDiskUsage from 10GB to 100GB in all examples\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove Kubernetes example and update MaxDiskUsage to 100GB",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T23:55:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "654a88382dbd25f85a876530ac04d4fb5371de3e",
          "body": "Add comprehensive documentation for the embedded client covering:\n- Configuration options (single-node and cluster mode)\n- Usage examples for both modes\n- Kubernetes StatefulSet deployment example\n- Basic and streaming operations\n- Cluster routing and list operations\n- Advanced usage (accessing unde\n[…]\ntices for storage, cluster, and resources\n- Monitoring with Prometheus metrics\n- Comparison with gRPC client\n- Migration guide from gRPC client\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add embedded client documentation",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T22:10:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b28d01a051a869bf0312fd3248efdcdd086e1df9",
          "body": "Move embedded module to end of MODULES array since it depends on\nboth client and server. Previously, embedded was tagged before its\ndependencies, which would cause Go module resolution failures.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): correct module tagging order for embedded dependency",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T22:01:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fede9ed5f2627e20de63a5e0bea6266422ef7873",
          "body": "Fix putRemote to always send the first message with key and TTL,\neven when the data is empty. Previously, for empty data:\n- bytes.Reader([]byte{}).Read() returned n=0, err=io.EOF\n- The send block was skipped since n > 0 was false\n- No message was sent, causing the remote server to receive EOF\n  without key/TTL and return an error\n\nNow the first message is always sent with key and TTL, with any\navailable data from the first read included.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: handle empty data when forwarding Put to remote nodes",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T21:50:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2b019dcfbd97b8fd27b4c4fabcffa0aa09ab13ac",
          "body": "Merge PutLocal and PutLocalDirect into a single PutLocal method that\nauto-detects if the reader implements io.Seeker:\n\n- For seekable readers (e.g., bytes.Reader): enables retries with\n  automatic reader reset between attempts\n- For non-seekable readers (e.g., io.PipeReader): no retries attempted\n  \n[…]\nnnot be rewound\n\nThis removes API confusion by having a single method that handles\nboth cases automatically based on the reader's capabilities.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: simplify PutLocal to auto-detect seekability",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T21:31:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "141b7605c36eeae1b6a16b51e24acbf86931a32d",
          "body": "- Add hop count increment to getRemote for forwarding loop detection\n- Add hop count increment to putRemote for forwarding loop detection\n- Add PutLocalDirect method for streaming puts without retry\n- Fix streaming Put to use PutLocalDirect since io.PipeReader cannot be\n  rewound for retries (PutLocal with retry would corrupt data)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: address additional PR review comments",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T21:24:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4d8236bdfe04fe24fee4039e95a8e8302c70054f",
          "body": "- Fix remote not-found returning error while local returns nil:\n  getRemote now returns (reader, found, error) and handles gRPC\n  NotFound status to return (nil, false, nil) for consistency\n\n- Fix reader not closed on ReadAll failure causing leak:\n  GetBytes and GetRange now use defer to ensure read\n[…]\nefully handles plain start keys\n  (non-base64 tokens) for backwards compatibility, initializing\n  all node cursors to the start key when needed\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: address PR review comments for operations layer",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T07:54:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb7099791e657fe2abc0c5f4e395e9dfb1f81555",
          "body": "Add the embedded module to the MODULES array so it gets tagged during\nreleases, allowing external consumers to import it with versioned\ndependencies (e.g., github.com/tigrisdata/ocache/embedded v1.x.x).\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add embedded module to release workflow for per-module tagging",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T07:29:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "11404cc84b927ae95e959454260e64385f73ad4f",
          "body": "Update handleLocalPut to use s.ops.PutLocal instead of s.storage.Put\ndirectly. This aligns streaming Put with other service methods (Get,\nDelete, PutObject) that were already refactored to use the operations\nlayer, ensuring consistent routing, metrics, and retry behavior.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: use ops.PutLocal in streaming Put for consistency",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T07:17:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c86b1256012acc49d0986c7df2225165318ace8e",
          "body": "- Add hop count detection to deleteRemote to prevent infinite forwarding\n  loops during ring rebalancing (like Put and Get already have)\n- Remove redundant listener close in embedded client since GracefulStop\n  already closes the listener internally\n- Call coordinator.Start() in embedded client cluster mode to properly\n  initialize memberlist gossip and ring lifecycler\n\nCo-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: address PR review comments for embedded client",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T07:15:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ae9a264d7ade31163157cdf1773443ad995d5d12",
          "body": "Extract routing and operation logic from server/service into a new\nserver/operations package that handles local vs remote key routing with\nmetrics and logging. Create embedded/ package as a public API for services\nlike TAG to import and use ocache with full cluster-awareness. Add\ncomprehensive integ\n[…]\ndelegate to operations layer\n- New embedded/ package implementing CacheClient interface\n- Integration tests for all embedded client operations\n\nCo-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: extract operations layer for embedded use",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-26T06:35:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a70e75a6802e8bef66d58c395fc0fc5acc630b4c",
          "body": null,
          "is_bot": false,
          "headline": "ci: add T3 storage upload workflow for RocksDB artifacts (#129)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-25T23:56:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8ce93312749eec0d09699140d84dd6b77ab4bd0",
          "body": null,
          "is_bot": false,
          "headline": "docs: add Tigris Data EULA license file (#128)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-25T04:16:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ee91718c02553f02a3be6ac266f4b84baad7cd4",
          "body": null,
          "is_bot": false,
          "headline": "ci: add T3 storage upload workflow for releases (#127)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-23T20:16:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0854834c53b7310928d3134c4c31019528326544",
          "body": null,
          "is_bot": false,
          "headline": "fix: add wget to Docker image for health checks (#126)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-20T07:10:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc60dc9cba378034e4a1f7345eb9b312b5956192",
          "body": null,
          "is_bot": false,
          "headline": "fix: add advertise-addr flag for cluster routing in Docker (#124)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-20T06:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b13c65551052f533896230d282ce6538d05d187f",
          "body": null,
          "is_bot": false,
          "headline": "fix: ensure ocachecli binary works in Alpine Docker containers (#122)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-19T22:13:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39de3f0dc7a0aab594886aef58e155061646515c",
          "body": "…w (#121)",
          "is_bot": false,
          "headline": "fix: use semantic versioning to select release tags in docker workflo…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-19T07:36:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b486e5b60a0c1aa28e81d6c426eb43dfa14b044f",
          "body": null,
          "is_bot": false,
          "headline": "fix: apply go module related fixes to release workflow (#119)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-19T06:32:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c4c23b80b620969dd510568e868da0ac05932f9",
          "body": null,
          "is_bot": false,
          "headline": "feat: commit protobuf files and remove replace directives (#117)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-19T04:40:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a34ce04ebc1fbda83b2ce2db880dc84d645bc198",
          "body": null,
          "is_bot": false,
          "headline": "ci: skip commitlint validation on release PRs (#115)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-18T21:56:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bf381ffaca892e1f63ab13e1f40641efe6eeeaa",
          "body": null,
          "is_bot": false,
          "headline": "feat: add per-module Go tags for external client usage (#113)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-18T21:42:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d3e35307a480338ee8ea0d969b62059f23ac5e9",
          "body": null,
          "is_bot": false,
          "headline": "ci: fix semantic-release workflow and add PR title validation (#112)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-18T20:53:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9e18b8bf3746d08ee9c69e81d065b33ba0d1778",
          "body": "* feat: add Docker support with automated builds and compose files\n\n- Add Dockerfile that reuses pre-built binaries from release workflow\n- Create GitHub Actions workflow to build and push multi-platform images to DockerHub\n- Add docker-compose.yml for single-node deployments\n- Add docker-compose-cluster.yml for 3-node cluster deployments\n- Configure environment variables for ttl, max-disk-usage, and request-logging",
          "is_bot": false,
          "headline": "Add Docker support with automated builds (#110)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-18T02:00:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c76db073b2164917f5077c89f44a472131b5db3d",
          "body": "* Migrate CI workflows to Namespace runners\n\nReplace GitHub-hosted runners and QEMU emulation with native Namespace CI runners:\n- Linux x86_64: ubuntu-latest → namespace-profile-ubuntu-2404\n- Linux ARM64: QEMU emulation → namespace-profile-ubuntu-2404-arm (native)\n- macOS ARM64: macos-latest → namespace-profile-macos-1561-arm\n- Remove macOS x86_64 builds\n\nDelete QEMU-based build-arm64 workflow and scripts since native ARM64 runners are now available.",
          "is_bot": false,
          "headline": "fix: migrate CI workflows to Namespace runners (#108)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-17T05:24:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b87426e6071e56ed6ad7c38a6dbbf08807d3ce7f",
          "body": "* fix: use QEMU for Linux ARM64 builds in release workflow\n\nThe workflow was using ubuntu-24.04-arm64 runner which doesn't exist\nin GitHub-hosted runners, causing jobs to hang indefinitely. Changed\nto use ubuntu-latest with QEMU emulation via docker/setup-qemu-action\nfor ARM64 builds.",
          "is_bot": false,
          "headline": "Fix Linux ARM64 builds using QEMU emulation (#107)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-17T02:34:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f49ab58a3665ab18bb69d4a78f17e3fb954030f4",
          "body": "- Add version.go with Version, Commit, BuildTime variables to server\n- Add -version flag to ocache server binary\n- Add version subcommand to ocachecli CLI\n- Update Makefile to inject version info via ldflags at build time\n\nVersion information is injected at build time using:\n- VERSION: from git tags (or \"dev\" if no tags)\n- COMMIT: short git commit hash\n- BUILD_TIME: UTC timestamp",
          "is_bot": false,
          "headline": "feat: add version information for v1.0.0 release (#105)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-16T21:23:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c49e132e22ef380c53715d0a9b5385edf517fb8",
          "body": "* feat: update range read semantics to HTTP/1.1 inclusive end\n\nChange range read operations from exclusive end semantics to inclusive end to match HTTP/1.1 Range header semantics used by AWS S3 and standard web servers. Start positions remain inclusive and 0-based, end positions are now inclusive instead of exclusive. Special case: end=0 continues to mean \"read to EOF\".",
          "is_bot": false,
          "headline": "Update range read semantics to HTTP/1.1 inclusive end (#104)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-16T19:53:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0432c8a8b7c6d80551babfff4f186d17274b38ba",
          "body": "* feat: add semantic-release automation with multi-platform builds\n\n- Add release.yaml workflow that builds binaries for linux/amd64, linux/arm64, and darwin/arm64\n- Add .releaserc.yaml configuration for semantic-release\n- Update Go version to 1.24.2 across all workflows\n- Make test.yml reusable via\n[…]\ntup from release workflow\n- Add RocksDB artifact caching for faster builds\n- Add fallback to build RocksDB from source if artifact download fails\n- Ensure immutable releases by removing --clobber flag",
          "is_bot": false,
          "headline": "feat: add semantic-release automation with multi-platform builds (#103)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-16T17:53:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b7a3fc7a7e76422619d62e5a8ee08165aa328701",
          "body": "Add MemoryCache struct that implements CacheClient interface for use in\ntests. Provides thread-safe in-memory storage with TTL support, streaming\noperations, and range reads. Allows consumers of ocache to test their\ncache-dependent code without running a real server.\n\nCo-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add in-memory CacheClient implementation for testing (#102)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-16T03:07:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6b05b3028565ddc680e6375e2b7c619b55f66d90",
          "body": "…(#101)\n\nAdd comprehensive documentation in RFC-007 (Section 4.8) covering:\n- How tokens are redistributed when nodes become unavailable\n- Failure detection timing and state transitions\n- Client-side routing behavior during failures\n- Stale read scenarios when nodes recover\n- Recovery behavior and d\n[…]\nection 6.1) to document\ntemporary unavailability and recovery cases, and correct Section 4.7.1\nto reflect that Phase 1 does allow stale reads.\n\nCo-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add token reassignment and failure handling details to RFC-007 …",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-14T03:13:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29315cc600fe660164867af82ea08673c0f38ec0",
          "body": null,
          "is_bot": false,
          "headline": "Update the cluster RFC to reflect the design changes (#100)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-14T02:22:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee12d67eb351129e7b0343f7344fb30a0d2ec554",
          "body": "* feat: implement sharding and clustering using dskit and memberlist",
          "is_bot": false,
          "headline": "feat: implement sharding and clustering using dskit and memberlist (#99)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2026-01-13T22:51:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc6b51c8f2dcc4e05f7d6330cd724945ebd28ffb",
          "body": "* Implement graceful node departure for cluster mode\n\nWhen a node shuts down cleanly (SIGINT/SIGTERM), it now announces its\ndeparture to other nodes in the cluster before stopping. This eliminates\nthe 10-15 second detection gap that previously existed.\n\nChanges:\n- Modified coordinator.Stop() to call\n[…]\nful departure logs confirm broadcast success\n- Existing Leave RPC handler already tested\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement graceful node departure with Leave broadcasts (#98)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-29T02:03:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b62ff36535c99f9b235fee817d42a22de009b1e6",
          "body": "* The coordinator package now has complete observability coverage for all critical cluster operations including membership management, failure detection, routing, and discovery!",
          "is_bot": false,
          "headline": "Coordinator package now has complete observability coverage (#97)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-21T01:24:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a281be6947ea650c6bc76e8e7c8a20dbc27cb278",
          "body": null,
          "is_bot": false,
          "headline": "Add write benchmark (#96)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-18T21:27:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42ece262bd644a735b803731db04a44e1fbde13e",
          "body": "* feat: add cluster-wide ordered List API with pagination\n\nImplements a distributed List operation that returns globally sorted keys across all cluster nodes, with support for pagination via continuation tokens.\n\n## Key Changes\n\n**Protocol & API:**\n- Modified `List` and added `ListLocal` RPCs as una\n[…]\nde list operations (`cluster_test.go`)\n- Updated test harnesses to support new List APIs\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add cluster-wide ordered List API with pagination (#95)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-18T02:16:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f96ee1d0d1e03b45eed55a26d73c6d13a003346d",
          "body": "* Add end-to-end test for cluster mode concurrent operations\n\nAdd a comprehensive E2E test for cluster mode that validates\nconcurrent operations across a 3-node cluster.\n\nChanges:\n- Add cluster helper functions to tests/e2e/common.sh:\n  - start_cluster(): Start N-node cluster with proper configurati\n[…]\nt.sh but adapts it\nfor cluster mode with proper distributed key counting and validation.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add end-to-end test for cluster mode concurrent operations (#94)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-04T06:24:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "952af752e5abe0cecaea4ae5c17ba7b52f14853f",
          "body": "* perf: optimize cluster client to reduce lock contention and improve throughput\n\nThis commit addresses the 25% throughput gap between single-node and\n3-node cluster deployments by reducing lock contention and improving\nconnection management in the cluster client.\n\nKey optimizations:\n\n1. **Added kee\n[…]\n:port should use static discovery\n- Only multi-label DNS names need periodic resolution\n\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Cluster perf optimization (#93)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-04T04:37:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "faaaaceef57a1a303569528ca1553e6c5e6ea444",
          "body": "Make compaction continuous with worker loops, remove sync tracking/monitor, migrate recovery to compaction index, raise compact threshold to 64MB, fsync large raw files, and update configs/tests accordingly.\n\nCompaction:\nConvert to continuous worker loops (no timer/max-bytes limit); CompactFiles ret\n[…]\nmpaction-threads and add recompaction interval semantics.\nTests:\nUpdate unit/integration/e2e tests to new APIs, thresholds, and intervals; adjust expectations (e.g., large object sizes, manager ctor).",
          "is_bot": false,
          "headline": "feat: always be compacting (#92)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-02T06:55:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa5a90c4dfd0c8d976b3218749c1f112b9ddae67",
          "body": null,
          "is_bot": false,
          "headline": "fix: improve seeds node handling (#91)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-01T21:27:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc6642cc17a8cabd7662cbe1d97c85b1dcac0d43",
          "body": "* feat: add cluster benchmark job",
          "is_bot": false,
          "headline": "feat: add cluster benchmark job (#90)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-01T03:34:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c25598fad1f18a4a7fa38e173548aada996326bd",
          "body": null,
          "is_bot": false,
          "headline": "fix: refactor coordinator in cache service for testability (#89)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-10-01T00:17:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "254637d36874e7a97ebd5d00f174a10488673936",
          "body": "* fix: refactor server and storage to remove singletons",
          "is_bot": false,
          "headline": "fix: refactor server and storage to remove singletons (#88)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-30T23:08:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "232d8de37a4b12489ed202b10a741aebff3f1811",
          "body": "* feat: Enable ObjectsSuite tests to run in multi-node cluster mode\n\nThis change introduces an adapter pattern that allows the existing\nObjectsSuite tests to be executed against both single-node and\nmulti-node cluster configurations, ensuring the same test coverage\nacross deployment modes.\n\n## Chang\n[…]\ne test-integration` (existing)\n- Cluster mode: Via `TestIntegrationClusterObjects` (new)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Enable ObjectsSuite tests to run in multi-node cluster mode (#87)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-30T18:54:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ed7ddf20b7ad81a93e411e9cb17bcf9e36493e29",
          "body": "* fix: Fix integration tests\n\n* fix logging for tests",
          "is_bot": false,
          "headline": "fix: Fix integration tests (#86)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-29T23:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd575d25e3ce475c28314d8f0c533fe4181db9cb",
          "body": "* Fix coordinator synchronization bug and add integration tests\n\nThis commit fixes a critical synchronization issue where nodes failed to\nconverge on a consistent cluster topology. The bug caused nodes to have\ndifferent views of cluster membership, preventing proper cluster formation.\n\nKey changes:\n\n[…]\nify topology convergence and membership consistency\n- All coordinator integration tests now pass\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix coordinator synchronization bug and add integration tests (#85)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-29T18:47:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "38a7ea69415b0f9597b6c02e6710a6fd3625214c",
          "body": "…e (#84)\n\n* Separate cluster and listen addresses in the OCache coordinator module\n\n🤖 Generated with Claude Code\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Separate cluster and listen addresses in the OCache coordinator modul…",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-27T00:16:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "280dcb329141d6a5a8d62aafcc3c237e233c6374",
          "body": "* Improve cluster client topology management\n\n* Add cluster topology fetching method to cache service",
          "is_bot": false,
          "headline": "Improve cluster client topology management (#83)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-26T06:18:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98f9010b4ec6f82cd67c82c090aa6ad9f6e874af",
          "body": null,
          "is_bot": false,
          "headline": "Update documentation (#82)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-24T21:55:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c98528a28ec064fbdabdf10658d92e434cb7022b",
          "body": "* Updated the Cluster Client to use Connection Pool instead of individual Client connections.\n\n* Implemented a unified client architecture with configurable connection modes, eliminating the need for separate client types.\n\n* refactor buffer pool to common package\n\n* add connection pool config in CLI",
          "is_bot": false,
          "headline": "Updated the ClusterClient to use ConnectionPool (#81)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-23T00:39:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e713b6b082c0de3a7a4cda085ba44000f2d287ab",
          "body": "* Update RFC-007",
          "is_bot": false,
          "headline": "Update RFC-007 (#80)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-16T06:35:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d6b0f0e9e6474cb1b5f8bfbaeae02f85d90af98",
          "body": "* First cut of sharded ocache\n* add cluster-aware client",
          "is_bot": false,
          "headline": "First cut of shareded ocache (#78)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-16T05:59:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9674bd3bee4ca28797744d256dedc138e97737d4",
          "body": "- Document all 50+ metrics with descriptions\n- Organize metrics by categories\n- Add histogram bucket configurations",
          "is_bot": false,
          "headline": "docs: Add comprehensive Prometheus metrics documentation (#79)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-14T00:40:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "877060a51127c8844e23556049d0098831ef2dcc",
          "body": "* feat: Return corruption errors instead of deleting data\n\n- When corruption is detected, always return a TypeCorruption error\n- Never automatically delete corrupted data\n- Preserves corrupted data for debugging and recovery\n\n* fix: Correctly classify file I/O errors as retryable\n\nFile read errors a\n[…]\nle\n\nThis prevents applications from being unable to retry operations that should\nbe recoverable.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Return corruption errors instead of deleting data (#77)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-13T00:23:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9f326573baf5083ef93760d987a4d1aef5114ea0",
          "body": null,
          "is_bot": false,
          "headline": "RFC improvements (#76)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-12T23:24:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15a65b1d82a8e6e4bbf5b4a4448878fa3cda0eda",
          "body": null,
          "is_bot": false,
          "headline": "Add RocksDB Integration design document (#75)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-12T20:19:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c5d62445043e4fd1b3105f4174839691f8ce44e",
          "body": "* Add TTL and Eviction design document",
          "is_bot": false,
          "headline": "Add TTL and Eviction design document (#74)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-12T16:14:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19f606cc1818d2592956f9d7750b91bb177a5365",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add Raw File Management and Recovery RFC (#73)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-12T00:03:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d229688f1a60d97216e5b0f3ed1d1e78aa2748a",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add Segment Storage and Compaction System RFC (#72)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-11T06:20:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5dc1b28cad7a11f0595aedaf0978d955825c452",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add Storage Architecture RFC (#71)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-05T07:00:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4a7c9848744f3f9fe4c47be2d8ced185364d722",
          "body": "Moved 4 storage-specific proto types from the shared proto module to a dedicated\nstorage/proto directory to improve module separation and encapsulation:\n\n- ValueType enum (indicates storage location: INLINE, RAW_FILE, SEGMENT)\n- ValueMessage (proto-encoded storage metadata)\n- SyncEntry (tracks files\n[…]\ne proto module now focused\nonly on public API types while storage internals remain encapsulated.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: move storage-only proto types to storage module (#70)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-09-04T00:02:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ecd59434c66ed0989893c104cc3a5bac7d86f286",
          "body": "* Optimize RocksDB configuration\n\nMemory & Caching:\n- 1GB block cache (configurable via flag)\n- Smart cache pinning for L0 and top-level index/filters\n- High-priority caching for index and filter blocks\n\nWrite Buffers:\n- 64MB write buffers\n- 6 concurrent buffers to prevent stalls\n- 2MB arena blocks \n[…]\nction\n- 8 background jobs for parallel compaction\n- Dynamic level bytes for better level balancing\n\nBlock Structure:\n- 16KB blocks\n- Partition filters for better cache efficiency\n- 4KB metadata blocks",
          "is_bot": false,
          "headline": "Optimize RocksDB configuration (#69)",
          "author_name": "Ovais Tariq",
          "author_login": "ovaistariq",
          "committed_at": "2025-08-30T05:03:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 21,
      "commits_last_year": 162,
      "latest_release_at": "2026-07-24T16:41:48Z",
      "latest_release_tag": "v1.9.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 25,
      "days_since_latest_release": 2,
      "mean_days_between_releases": 13.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/tigrisdata/ocache/proto",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tigrisdata/ocache/proto",
          "is_deprecated": false,
          "latest_version": "v1.9.0",
          "repository_url": "https://github.com/tigrisdata/ocache",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T16:42:21Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        },
        {
          "name": "github.com/tigrisdata/ocache/client",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tigrisdata/ocache/client",
          "is_deprecated": false,
          "latest_version": "v1.9.0",
          "repository_url": "https://github.com/tigrisdata/ocache",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T16:42:21Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        },
        {
          "name": "github.com/tigrisdata/ocache/common",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tigrisdata/ocache/common",
          "is_deprecated": false,
          "latest_version": "v1.9.0",
          "repository_url": "https://github.com/tigrisdata/ocache",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T16:42:21Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        },
        {
          "name": "github.com/tigrisdata/ocache/server",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tigrisdata/ocache/server",
          "is_deprecated": false,
          "latest_version": "v1.9.0",
          "repository_url": "https://github.com/tigrisdata/ocache",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T16:42:21Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        },
        {
          "name": "github.com/tigrisdata/ocache/storage",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tigrisdata/ocache/storage",
          "is_deprecated": false,
          "latest_version": "v1.9.0",
          "repository_url": "https://github.com/tigrisdata/ocache",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T16:42:21Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        },
        {
          "name": "github.com/tigrisdata/ocache/embedded",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tigrisdata/ocache/embedded",
          "is_deprecated": false,
          "latest_version": "v1.9.0",
          "repository_url": "https://github.com/tigrisdata/ocache",
          "versions_count": 14,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T16:42:21Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        },
        {
          "name": "github.com/tigrisdata/ocache/coordinator",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tigrisdata/ocache/coordinator",
          "is_deprecated": false,
          "latest_version": "v1.9.0",
          "repository_url": "https://github.com/tigrisdata/ocache",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-24T16:42:21Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 6
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [
        "coordinator/proto/cluster.proto",
        "proto/cache.proto",
        "proto/google/api/annotations.proto",
        "proto/google/api/http.proto",
        "storage/proto/storage.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "client/go.mod",
        "common/go.mod",
        "coordinator/go.mod",
        "coordinator/proto/go.mod",
        "embedded/go.mod",
        "proto/go.mod",
        "server/go.mod",
        "storage/go.mod",
        "tests/integration/go.mod"
      ],
      "largest_source_bytes": 53095,
      "source_files_sampled": 158,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 8859
    },
    "dependencies": {
      "manifests": [
        "client/go.mod",
        "common/go.mod",
        "coordinator/go.mod",
        "embedded/go.mod",
        "proto/go.mod",
        "server/go.mod",
        "storage/go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/pterm/pterm",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.12.81"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.1"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/tigrisdata/ocache/common",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/coordinator",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/coordinator/proto",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/proto",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.72.2"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "client/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.36.8"
        },
        {
          "name": "github.com/cespare/xxhash",
          "manifest": "common/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "common/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/rs/zerolog",
          "manifest": "common/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.34.0"
        },
        {
          "name": "github.com/go-kit/log",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.1"
        },
        {
          "name": "github.com/grafana/dskit",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20240104111617-ea101a3b86eb"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/rs/zerolog",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.34.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/tigrisdata/ocache/common",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/coordinator/proto",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/proto",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "coordinator/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.72.2"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/rs/zerolog",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.34.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/client",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/common",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/coordinator",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/proto",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/server",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/storage",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "embedded/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.72.2"
        },
        {
          "name": "github.com/grpc-ecosystem/grpc-gateway/v2",
          "manifest": "proto/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.26.3"
        },
        {
          "name": "github.com/tigrisdata/ocache/coordinator/proto",
          "manifest": "proto/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "google.golang.org/genproto/googleapis/api",
          "manifest": "proto/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20250303144028-a0af3efb3deb"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "proto/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.72.2"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "proto/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.36.8"
        },
        {
          "name": "github.com/grpc-ecosystem/grpc-gateway/v2",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.26.3"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/rs/zerolog",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.34.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/tigrisdata/ocache/common",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/coordinator",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/tigrisdata/ocache/storage",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "server/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.72.2"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/hashicorp/golang-lru/v2",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.7"
        },
        {
          "name": "github.com/linxGnu/grocksdb",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.1"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/rs/zerolog",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.34.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/tigrisdata/ocache/common",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.35.0"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "storage/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.36.8"
        }
      ],
      "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": 175,
        "open_issues": 6,
        "closed_ratio": 0.684,
        "closed_issues": 13,
        "closed_unmerged_prs": 6
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "ovaistariq",
          "commits": 194,
          "avatar_url": "https://avatars.githubusercontent.com/u/1632658?v=4"
        },
        {
          "type": "User",
          "login": "hawkaa",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/3704520?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.995
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "benchmark-cluster-1n.yml",
        "benchmark-cluster-3n.yml",
        "benchmark-single.yml",
        "build-rocksdb-artifacts.yml",
        "commitlint.yaml",
        "dco.yml",
        "docker.yaml",
        "release.yaml",
        "t3-upload-release.yaml",
        "t3-upload-rocksdb.yaml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "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": 1,
            "reason": "Found 3/30 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "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": "26 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "14 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "eead23406770db4e76f54405424c8a38f96382c6",
        "ran_at": "2026-07-27T09:13:03Z",
        "aggregate_score": 4.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T05:50:13Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-27T05:26:10Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 147,
          "created_at": "2026-04-15T05:29:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 156,
          "created_at": "2026-06-30T02:12:50Z",
          "last_comment_at": "2026-07-01T05:25:14Z",
          "last_comment_author": "ovaistariq"
        },
        {
          "number": 176,
          "created_at": "2026-07-06T20:07:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 189,
          "created_at": "2026-07-19T03:48:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 193,
          "created_at": "2026-07-19T19:11:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 199,
          "created_at": "2026-07-27T05:23:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/tigrisdata/ocache",
    "host": "github.com",
    "name": "ocache",
    "owner": "tigrisdata"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 61,
      "inputs": {
        "security": 43,
        "vitality": 85,
        "community": 40,
        "governance": 59,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 85,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "commits_last_year": 162,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 25
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "25/52 weeks with commits",
                "points": 17.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 25
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "162 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 162
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "26 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 21,
              "latest_release_tag": "v1.9.0",
              "releases_from_tags": false,
              "days_since_latest_release": 2,
              "mean_days_between_releases": 13.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "21 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~13.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 13.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "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": 40,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "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": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "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": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.995
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "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 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "merged_prs": 175,
              "open_issues": 6,
              "closed_issues": 13,
              "issue_closed_ratio": 0.684,
              "closed_unmerged_prs": 6
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "68% of issues closed",
                "points": 32,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 68
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "175/181 decided PRs merged",
                "points": 37,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 175,
                      "decided": 181
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 3/30 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "followers": 111,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "tigrisdata",
              "public_repos": 51,
              "account_age_days": 1691
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "111 followers of tigrisdata",
                "points": 14.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 111,
                      "login": "tigrisdata"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "51 public repos, account ~4 yr old",
                "points": 21.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 51
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 4
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/tigrisdata/ocache/proto",
                "github.com/tigrisdata/ocache/client",
                "github.com/tigrisdata/ocache/common",
                "github.com/tigrisdata/ocache/server",
                "github.com/tigrisdata/ocache/storage",
                "github.com/tigrisdata/ocache/embedded",
                "github.com/tigrisdata/ocache/coordinator"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 2
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "7 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 7,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 2 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "18 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "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": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "11 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "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": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 43,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 43,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "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": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "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 3/30 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "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": "26 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "14 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": 4
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 8859
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.25,
              "toolchain_manifests": [
                "client/go.mod",
                "common/go.mod",
                "coordinator/go.mod",
                "coordinator/proto/go.mod",
                "embedded/go.mod",
                "proto/go.mod",
                "server/go.mod",
                "storage/go.mod",
                "tests/integration/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "25 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 25,
                      "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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 53095,
              "source_files_sampled": 158,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/158 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 158,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": false,
              "api_schema_files": [
                "coordinator/proto/cluster.proto",
                "proto/cache.proto",
                "proto/google/api/annotations.proto",
                "proto/google/api/http.proto",
                "storage/proto/storage.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "coordinator/proto/cluster.proto, proto/cache.proto, proto/google/api/annotations.proto, proto/google/api/http.proto, storage/proto/storage.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "coordinator/proto/cluster.proto, proto/cache.proto, proto/google/api/annotations.proto, proto/google/api/http.proto, storage/proto/storage.proto"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T09:13:22.474765Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/tigrisdata/ocache.svg",
  "full_name": "tigrisdata/ocache",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计Go.