JSON-Rohbericht maschinenlesbar
{
"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"
}