Public record
Software health reportschema 0.27.0 · metrics 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 stars⑂ 0 forkssince Jul 2025View on GitHub ↗

tigrisdata/ocache holds a health index of 61 out of 100, placing it in the Moderate band. It scores highest on Vitality (85/100) and lowest on Community & Adoption (40/100). It was last updated today. A single contributor accounts for most of its recent work.

61
overall / 100
Moderate

Software health index

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

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

Score profile

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

Ownership

Tigris Data IncOrganization
111 followers51 public repossince Dec 2021

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Gogithub.com/tigrisdata/ocache/protov1.9.0-182 days ago
Gogithub.com/tigrisdata/ocache/clientv1.9.0-182 days ago
Gogithub.com/tigrisdata/ocache/commonv1.9.0-182 days ago
Gogithub.com/tigrisdata/ocache/serverv1.9.0-182 days ago
Gogithub.com/tigrisdata/ocache/storagev1.9.0-182 days ago
Gogithub.com/tigrisdata/ocache/embeddedv1.9.0-142 days ago
Gogithub.com/tigrisdata/ocache/coordinatorv1.9.0-182 days ago

Metrics by category

Vitality

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

85Excellent · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
17.3/36Commit cadence — 25/52 weeks with commits
18/18Commit volume — 162 commits in the last year
10/10OpenSSF Scorecard: Maintained — 26 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year162
human_commit_share1
days_since_last_push0
active_weeks_last_year25
How it's scored
27/27Ships releases — 21 releases published
36/36Release recency — latest release 2 days ago
27/27Release cadence — a release every ~13.1 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count21
latest_release_tagv1.9.0
releases_from_tagsno
days_since_latest_release2
mean_days_between_releases13.1

Community & Adoption

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

40At risk · 18% of overall
How it's scored
0/60Stars — 0 stars
0/25Forks — 0 forks
0/15Watchers — 0 watchers
Inputs used
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

85Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateno

Sustainability & Governance

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

59Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.1/22.5Commit distribution — top contributor authored 100% of commits
2.7/13.5Contributor breadth — 2 contributors
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Inputs used
bus_factor1
contributors_sampled2
top_contributor_share0.995
How it's scored
32/46.8Issue resolution — 68% of issues closed
37/38.3PR acceptance — 175/181 decided PRs merged
1.5/15OpenSSF Scorecard: Code-Review — Found 3/30 approved changesets -- score normalized to 1
Inputs used
merged_prs175
open_issues6
closed_issues13
issue_closed_ratio0.684
closed_unmerged_prs6
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
14.7/25Owner reach — 111 followers of tigrisdata
21.8/25Track record — 51 public repos, account ~4 yr old
Inputs used
followers111
owner_typeOrganization
is_verified
owner_logintigrisdata
public_repos51
account_age_days1,691
How it's scored
25/25Published & resolvable — 7 package(s) on go
35/35Publish recency — latest publish 2 days ago
20/20Version history — 18 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
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_deprecatedno
min_days_since_publish2

Engineering Quality

Are baseline engineering and documentation practices in place?

71Good · 20% of overall
How it's scored
24/24CI workflows — 11 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

43At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
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.5License — 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
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.3
Excluded from scoring (no data or not applicable): branch_protection. Remaining weights renormalized.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

75Good · 0% of overall
How it's scored
45/45Agent instructions — CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 100 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes8,859
How it's scored
18/18One-command bootstrap — Makefile
22/22Automated tests
0/11Lint / format config
11/11Static type checking — Go (statically typed)
10/10Reproducible environment — Dockerfile, lockfile
10/10Demonstrated agent practice — 25 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilesgo.sum
has_dockerfileyes
typed_languageyes
bootstrap_filesMakefile
has_devcontainerno
has_linter_configno
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
How it's scored
45/45Type-checkable code — Go (statically typed)
55/55Manageable file sizes — 0/158 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes53,095
source_files_sampled158
oversized_source_files0
How it's scored
40/40API schema (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 server
0/40Runnable examples
Inputs used
example_dirs
has_mcp_signalno
api_schema_filescoordinator/proto/cluster.proto, proto/cache.proto, proto/google/api/annotations.proto, proto/google/api/http.proto, storage/proto/storage.proto

Key facts

0GitHub stars
2contributors
162commits, last 12 months
0days since last push
21releases
1bus factor
6open issues
Gopackage ecosystems

Data collection warnings

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

More detail

OpenSSF Scorecard 4.3 / 10
4.3aggregate

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

10Binary-Artifactsno binaries found in the repo
n/aBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
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
Direct dependencies 52
RegistryPackageVersion constraintManifest
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
All dependencies not collected

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

Raw JSON report machine-readable
{
  "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"
}

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

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

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