cursor resolves to lastTimestamp+1 at\n command-receipt time, so a cached reply can be served after the cursor\n should have advanced with no key modification to invalida\n[…]\nn track and invalidate them, making replies cacheable.\n- Filter-based MRANGE/MREVRANGE keep dont_cache (keys not known to client).\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com>", "is_bot": false, "headline": "MOD-16160 Fix client-side cache tips for TS.BGET and TS.NRANGE/TS.NRE…", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-06-11T19:04:27Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "8d337d484ae33c2b8d536492b47eef3784eb50ee", "body": "* add min max count fields to the command with default valus\n\n* fix + for timestamp\n\n* add $ support\n\n* formatting\n\n* address review remarks: arity check, header comments, max_count flush test\n\n- reject odd optional-arg counts (5/7 argc) in parse_bget_args\n- update stale TS.BGET header + BGET_ARGV_T\n[…]\n — the MAX_COUNT cap can never bite on that path.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com>", "is_bot": false, "headline": "MOD-16160 -update blocking get syntax (#2054)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-06-11T17:45:47Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "0bb7e19350e03d17f219f8d42901783bbf4f7b4c", "body": "* working\n\n* add tests\n\n* add tests\n\n* add comment for min heap\n\n* fix remarks\n\n* add comprehensive tests that compare rangex and revrangex with range and revrange\n\n* add the commands to command json\n\n* add ts.info\n\n* fix remaeks\n\n* apply the changes\n\n* fix ci\n\n* update the syntax\n\n* fix the test to\n[…]\nting for single-key TS.RANGE; TS.NRANGE widened it\nwith many user-named keys. Fixed by passing argv + start_index to the\noption sub-parsers so keys before from/to are no longer scanned.\n\n* fix comment", "is_bot": false, "headline": "MOD-15893 - Nrange new command (#2052)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-06-11T13:48:01Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "7ebbccb70d198a7fac8e8404dc2083792e989ebf", "body": "* Fix filter-blind neighbor lookups in EMPTY aggregation\n\nThe empty-bucket fill looked up neighbor samples without applying\nFILTER_BY_VALUE/FILTER_BY_TS, causing several bugs:\n\n- OOM crash: a filtered-out sample made an edge gap look interior, so\n the fill ran to endTimestamp (+) and the bucket cou\n[…]\npply\nthem in the neighbor lookups; use the bucket start for the suffix fill.\nAdded stress tests for all non-twa aggregators.\n\n* remove the applyfilter from function declaration\n\n* add oom test for twa", "is_bot": false, "headline": "MOD-16224 Fix filter-blind neighbor lookups in EMPTY aggregation (#2056)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-06-11T10:17:30Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "1cb4f677e22da55d923104df7b9d1f8d5221088d", "body": "* cherry pick the fix non twa aggregation\n\n* add multi agg tests\n\n* code review\n\n* formatting\n\n* fix remarks\n\n* formatting", "is_bot": false, "headline": "MOD-8187 - fix non twa aggregation (#2053)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-06-10T19:48:27Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "906b41d7778e84e48d3ba18e577ed6bbcdf2f72b", "body": "* Merge pull request #79 from redislabsdev/tal.ba/sec/rdb_load_unbouded\n\nMOD-15899 - RDB load: non-aborting allocation for chunk/rule loaders\n\n* RDB load: non-aborting allocation for labels loader\n\nThe labels buffer in series_rdb_load was allocated with calloc, which is\nmonkey-patched to the aborting RedisModule_Calloc in the module build\nSwitch to rts_try_calloc (non-aborting, returns NULL on OOM).", "is_bot": false, "headline": "MOD-15899 - oom try calloc (#2051)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-06-04T09:37:00Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "93c2d6fae2a84c37938df5a742de4cf1ab911671", "body": "* CI: add on-demand OSS cluster (multi-shard) benchmark trigger\n\nThe recurrent benchmark runner only exercised oss-standalone setups, so the\nmulti-shard TS.MRANGE speedups (e.g. 8.6 vs 8.8) were never measured in CI even\nthough the benchmark definitions already declare the oss-cluster-* topologies.\n\n[…]\nan the workflow ref, so cross-version comparison\ndata is labeled correctly.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com>", "is_bot": false, "headline": "CI: trigger OSS cluster (multi-shard) benchmarks on demand (#2050)", "author_name": "Filipe Oliveira (Redis)", "author_login": "fcostaoliveira", "committed_at": "2026-06-03T09:59:58Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "edcef6b7dae751d58bdea02ddc1a3dbb33968176", "body": "…or CI (#2045)\n\n* Centralize Redis ref into a single source-of-truth file for CI & dockers\n\n* use ramp.yml file\n\n* Fix script-injection in prepare-values (SonarCloud high-severity)\n\nPass the workflow_dispatch redis-ref input through an env var instead of\ninterpolating ${{ inputs.redis-ref }} directl\n[…]\ne.)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com>\n\n* use compatible_redis_version for redis-ref\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com>", "is_bot": false, "headline": "MOD-15999 - Centralize Redis ref into a single source-of-truth file f…", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-06-02T10:23:54Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "3b88a0e8770fb91f8562eb48edcca8d2d240b67d", "body": "* CI: switch flow-linux arm64 runner to org-level-ubuntu24-arm64-2-8\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com>\n\n* CI: use standard ubuntu-24.04-arm runner for flow-linux arm64\n\nThe org-level runner pool still queued jobs without picking them up.\nSwitch to GitHub's standar\n[…]\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com>\nCo-authored-by: Tom Gabsow \u003cgabsow.tom@gmail.com>", "is_bot": false, "headline": "CI: switch flow-linux arm64 runner to standard ubuntu-24.04-arm (#2048)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-06-02T07:20:01Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "e6ca975471993a5de8903b34ce6a6f0d8b85852b", "body": "…2044)\n\nThe Makefile CC_DEFS list contained DREDISMODULE_MAIN (typo introduced\nby MOD-8014 / 4145c70b in 2024-08-22). The harness auto-prefixes -D\nto each entry, so this was defining a dead macro called\nDREDISMODULE_MAIN instead of the intended REDISMODULE_MAIN.\n\nResult: RTS .c files compiled with R\n[…]\nrFromUserName, FreeString,\nACLCheckKeyPrefixPermissions) now have C (common) storage in\nmodule.o without any common.h declaration.\n\nCo-authored-by: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com>", "is_bot": false, "headline": "Fix REDISMODULE_MAIN typo + drop common.h forward-decl workarounds (#…", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-06-01T10:52:48Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "b0ecf8a8cbb903cd227ce61db46735f01486a3b9", "body": "… add tests (#2034)\n\n* Link to new version of LibMR with optional AUTH\n\n* Add an option to create an oss-cluster env without sending the initial REFRESHCLUSTER\n\n* Added a test for the new short form of CLUSTERSET\n\n* MOD-15749 Bump deps/LibMR to master (short-form CLUSTERSET landed)\n\nPicks up the mer\n[…]\nd locally: test passes in 6 seconds against redis unstable\n(post-#14953) on macos-arm64.\n\n---------\n\nCo-authored-by: Tom Gabsow \u003cgabsow.tom@gmail.com>\nCo-authored-by: Tom Gabsow \u003ctom.gabsow@redis.com>", "is_bot": false, "headline": "MOD-15749 Link to new version of LibMR with short-form CLUSTERSET and…", "author_name": "Gal Cohen", "author_login": "galcohen-redislabs", "committed_at": "2026-05-27T12:24:09Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "d51b119dbfbc56565d1ff79d68dd7e7c264c6375", "body": "* fix the iterator\n\n* formatting\n\n* fix remarks", "is_bot": false, "headline": "MOD-8187 - fix the aggregation bugs (fix reverse iterator) (#2036)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-05-26T11:18:37Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "42155dbf297f96ea68bdd480c57feb0b92f677b7", "body": "* save\n\n* save\n\n* add tests\n\n* fix leak\n\n* response when blocking client fails\n\n* add - + support\n\n* cleaning the blocking key after finish execution\n\n* fix remarks\n\n* add tests\n\n* remode b get docs duplication\n\n* fix the remarks\n\n* fix command.json\n\n* formatting\n\n* fix the overflaw\n\n* formatting", "is_bot": false, "headline": "MOD-15728 - Tal.ba/feat/blocking get (#2028)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-05-26T06:44:20Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "8bdd22387383b7901ab20bbdc3beae9b99d52d43", "body": "* squash\n\n* remove dependenceis yaml and put everything in scripts\n\n* update module.conf\n\n* fix the action.yml to avoid new pip install\n\n* cleanup\n\n* remarks fix\n\n* fix cursor remarks\n\n* fix\n\n* sets.sh->package.sh\n\n* fix\n\n* update gitignore\n\n* rename sets.sh to packages.sh\n\n* install awscli for docker\n\n* update", "is_bot": false, "headline": "MOD-15731 - modules modernization alignment (#2027)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-05-25T06:30:52Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "63cf81ae4e733cac4f9c6371dc6e723b55f12d47", "body": "…d commands (#2031)\n\n* MOD-15741 MOD-14091 - add dont-cache command tip to non-cacheable read commands\n\nPer the CSC capabilities alignment PRD, mark read commands that are not\npractical to client-side cache with the dont-cache tip:\n\n- TS.INFO: returns memory usage and chunk stats (non-deterministic)\n[…]\n (nondeterministic_output, request_policy, etc.).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com>", "is_bot": false, "headline": "MOD-15741 MOD-14091 - add dont-cache command tip to non-cacheable rea…", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-05-24T16:36:40Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "d3642aa9e699c15cd79465de04b88aaaa4331b0d", "body": "* make one generic getUser function\n\n* fix build\n\n* save\n\n* update\n\n* make the user get\n\n* formmating\n\n* fix remarks", "is_bot": false, "headline": "MOD-15105 make one generic getUser function (#1981)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-05-19T12:36:31Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "9b1827c220edbc0813b1c5bbdccb8aa041079f66", "body": "* MOD-14420 fix count reducers return wrong NaN\n\n* fix empty issue\n\n* format", "is_bot": false, "headline": "MOD-14420 fix count reducers return wrong NaN (#2013)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-05-05T11:43:32Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d2a79c3a3d54a1ac71abbdae0e5390932ecd94d6", "body": "…zer (#1979)\n\nAlso fixed an (unrelated) assert syntax", "is_bot": false, "headline": "MOD-14239 Ignore known init-rdbchannel migration timeout under saniti…", "author_name": "Gal Cohen", "author_login": "galcohen-redislabs", "committed_at": "2026-05-05T08:25:13Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "3d4a01e79611c9c3049c21005d9e85988d58a20c", "body": "Co-authored-by: Cursor \u003ccursoragent@cursor.com>", "is_bot": false, "headline": "RED-180951 RED-180027 fixing bugs and improving the code (#2004)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-05-05T05:23:14Z", "body_truncated": false, "is_coding_agent": true }, { "oid": "d73282db7bb2322429440ef4c4750e4101792e0a", "body": "* remove bionic os support\n\n* remive bionic for 8.8 & master only", "is_bot": false, "headline": "MOD-15020 - remove bionic os support (#1983)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-05-04T14:56:16Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "2c371e15c58615390cc6d0e4e380dcea230894a7", "body": "Add paths-ignore for src/version.h on pull_request so version-only\nPRs do not trigger the full matrix.\n\nCo-authored-by: Cursor \u003ccursoragent@cursor.com>", "is_bot": false, "headline": "ci: skip Event CI when pull request only changes src/version.h (#1984)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-05-04T08:17:45Z", "body_truncated": false, "is_coding_agent": true }, { "oid": "de204c28361be5317454f8c8bd1c57dd94bf9fc0", "body": "… changes (#1975)\n\n* udate getUserUserName api\n\n* formatting\n\n* remove free\n\n* align redismodules sdk master\n\n* revert free remove", "is_bot": false, "headline": "MOD-15262 - Align TimeSeries with the RedisModule_GetUserUserName API…", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-05-04T04:54:57Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "fc3871c5c01a5ce6ee8e0688d3ed565ded41c636", "body": "Bullseye (and other Debian/Ubuntu) Docker builds intermittently fail in\nthe dev nightly with `Connection reset by peer` from deb.debian.org /\narchive.ubuntu.com (Fastly CDN). Configure apt with Acquire::Retries=3\nand 30s http/https timeouts via /etc/apt/apt.conf.d/80-retries so all\nsubsequent apt / apt-get / add-apt-repository calls tolerate transient\nCDN drops.\n\nApplied to: bullseye, bookworm, trixie, focal, jammy, noble, bionic.\n\nMade-with: Cursor", "is_bot": false, "headline": "MOD-14715 add apt retries/timeouts to Debian/Ubuntu Dockerfiles (#1965)", "author_name": "LiranAbir", "author_login": "LiranAbir", "committed_at": "2026-04-26T07:25:16Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "e8a07258dcf14f85f0e5a32c0232ce8a1ae511a3", "body": null, "is_bot": false, "headline": "MOD-14850 Bump libmr (#1962)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-04-21T07:23:13Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "baaf423f4b0aead1ddf1a5fc4ae7ec1c32577cae", "body": "… not aligned with new redis-core changes (#1940)\n\n* check if the api is exist beofre using it\n\n* format fix\n\n* fix remarks\n\n* use define for the api validation\n\n* fix formmating", "is_bot": false, "headline": "MOD-14902 - existence check to prevent Timeseries crash when Redis is…", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-04-20T12:16:21Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "690ab923da6ac478d1c468f40671d9826026d6bd", "body": null, "is_bot": false, "headline": "nightly build, upload snapshot artifact (#1954)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-04-15T11:30:49Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "f9b14f12f1422bc674c23a85c51a9817c6cab3d5", "body": "* align to bloom repo\n\n* fix all docker files", "is_bot": false, "headline": "MOD-14674 - oss refresh list (#1935)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-04-15T11:18:39Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "306e9d3243cca1cf2b1603442c50d6a286aaabab", "body": "…d and return an appropriate error (#1930)\n\nCo-authored-by: Tom Gabsow \u003ctom.gabsow@redis.com>", "is_bot": false, "headline": "MOD-14439 Detect cluster topology changes during a multi-shard comman…", "author_name": "Gal Cohen", "author_login": "galcohen-redislabs", "committed_at": "2026-04-14T17:59:26Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "21387028fac24de437e7cc385d89cba0c55914c1", "body": "…#1937)\n\n* MOD-12726 unique snapshot name + new output params for nighly event\n\n* remove tests(for testing hte change quick)\n\n* add Summary\n\n* bring back tests", "is_bot": false, "headline": "MOD-12726 unique snapshot name + new output params for nighly event (…", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-04-14T08:15:36Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "bf8d202f049f41399fb93ab93e57db9af1e3152b", "body": "* Increase LibMR execution timeout for Valgrind builds\n\n* modulesdk alignment", "is_bot": false, "headline": "MOD-14289 - Increase LibMR execution timeout for Valgrind builds (#1933)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-04-06T07:10:43Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d93e85eca098cbb815ce7814284e63a6a0e7b516", "body": "* rerun without the log fix to verify empty logs\n\n* Upload test_output.log on failure and remove hardcoded test filter\n\n- Add test_output.log to artifact upload so full test console output\n (including tracebacks) is available when tests fail\n- Remove leftover TEST=test_ts_add:test_TEMPORARY_force_f\n[…]\nMade-with: Cursor\n\n* add fresh env to this test to see if the logs are now being uploaded\n\n* add new env to groupby as well\n\n* add module args\n\n* add nolog=false\n\n* revert all changes but noLog=False", "is_bot": false, "headline": "MOD-14250 - missing artifacts logs fix (#1932)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-04-05T17:13:12Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "17bb9e2aa7259252434eb3d398f13445127ee0ff", "body": "* MOD-14124 m commands acl\n\nEnsures multi-shard TS.MRANGE/TS.MREVRANGE/TS.MGET/TS.QUERYINDEX enforce per-key ACLs on every shard, rather than relying on a single-shard ~* precheck.\n\nThe initiating node now serializes the client username through LibMR (QueryPredicates_Arg.userName), and each shard/in\n[…]\nsages from “multi-shard” to “multi-keys”.\n\nAdds extensive cluster ACL flow tests covering partial shard permissions and same-/cross-shard execution scenarios.\n\n* free user context before overriding it", "is_bot": false, "headline": "MOD-14124 m commands acl (#1913)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-04-05T13:48:35Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "29fc839f40f8aea54b7baeea9427cf6208a7691f", "body": "… (#1928)\n\n* config: accept ts-num-threads as load-time arg\n\nAlso allow PYTHON override for flow tests, and add a regression test for ts-num-threads module args.\n\n* config: log load-time parse failures as error\n\n* tests: refine ts-num-threads module-arg coverage\n\nSkip RLEC explicitly without redunda\n[…]\nhreads, while pool hasn't started yet\n\n* guard call for LibMR_ResizeExecutionThreadPoolIfUnstarted\n\n* fix linux thread names regex\n\n* test\n\n---------\n\nCo-authored-by: Tom Gabsow \u003cgabsow.tom@gmail.com>", "is_bot": false, "headline": "MOD-13142 Allow changing number of threads, while pool hasn't started…", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-04-05T07:38:55Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "28ff1ae92f1c726f3ea4a2df9fb6c46a0206b39c", "body": null, "is_bot": false, "headline": "MOD-9320 rename AGGREGATION token in m commands (#1926)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-03-30T08:37:03Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "806d1e80a484d38a8d8d3fa9056e81317bd85404", "body": "* MOD-9320 Multiple aggregators in single command\n\n* CR + Format\n\n* CR\n\n* CR\n\n* twa minor opt\n\n* CR\n\n* CR\n\n* CR\n\n* CR 1\n\n* split AggregationIterator_GetNextChunk\n\n* format\n\n* CR\n\n* alignmet -> alignment\n\n* sonar", "is_bot": false, "headline": "MOD-9320 Multiple aggregators single command (#1916)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-03-26T09:09:15Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "7506a5181eac6f5499949201748e3d2e58274d0e", "body": null, "is_bot": false, "headline": "RED-187342 remove nightly check from bump and tag", "author_name": "chen azulay", "author_login": "chenazulay", "committed_at": "2026-03-12T11:55:18Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "f281017dc04d507e04686d6557c4b1a9668451db", "body": null, "is_bot": false, "headline": "RED-187342 remove nightly check from bump and tag", "author_name": "chenazulay", "author_login": "chenazulay", "committed_at": "2026-03-12T11:53:23Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "5c3e1cfbeac3ac8e5ba7d1ddd2d7997be0daaacd", "body": "Remove the 30-minute timeout-minutes parameter and job-level timeout\nso the random-traffic job uses the GitHub Actions default (360 min),\naligned with all other nightly jobs. Keep max_cmd_cnt at 250K.\n\nMade-with: Cursor", "is_bot": false, "headline": "Remove job timeout from random-traffic workflow (MOD-14422) (#1911)", "author_name": "LiranAbir", "author_login": "LiranAbir", "committed_at": "2026-03-10T08:41:40Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "58f0f688306f5bdb21d3518cfbf2fdf7188fe4cc", "body": null, "is_bot": false, "headline": "MOD-8167 Fix incryby creating key before validating args (#1910)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-03-09T11:59:37Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "04664f7e590fe4201ff1d581f27131a06ccc7361", "body": null, "is_bot": false, "headline": "squash changes (#1908)", "author_name": "Tal Bar Yakar", "author_login": "TalBarYakar", "committed_at": "2026-03-09T06:06:29Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "e7d535637a174d694d6d55812995e44333638772", "body": "* MOD-13438 Use LibMR's internal commands for multi-shards commands\n\nLink to the LibMR version with the internal commands support\n\n* Add a new config for libmr-protocol (default INTERNAL) to be able to fall back to GEARS protocol if there are issues\n\n* Retain the 'deprecated' name of config args for\n[…]\naks (Gal-approved only)\n\nCo-authored-by: Cursor \u003ccursoragent@cursor.com>\n\n* update to libMR master\n\n---------\n\nCo-authored-by: Gal Cohen \u003cgal@redis.com>\nCo-authored-by: Cursor \u003ccursoragent@cursor.com>", "is_bot": false, "headline": "MOD-13438 fix memory leak (#1896)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-03-02T21:02:45Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "577c266ada940a2df67205167fd3abe33f334c1d", "body": null, "is_bot": false, "headline": "MOD-12276-add-random-traffic-test-to-event-nightly-results (#1907)", "author_name": "LiranAbir", "author_login": "LiranAbir", "committed_at": "2026-03-01T07:49:18Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "041d7be8d5317524d4c765019d763d25b392fdd5", "body": "* Suppress fork'd child Valgrind false positive leak reports\n\nProblem\ntest_asm_with_data_and_queries_during_migrations fails under Valgrind, reporting \"definitely lost\" memory in MultiSeriesSampleIterator_New. These are not real leaks.\nRoot Cause\nDuring the test, Redis forks for background persisten\n[…]\nns.\nRLTest polls and returns as soon as the process exits, so a high retry\ncount costs nothing when shutdown is fast.\n\nMade-with: Cursor\n\n---------\n\nCo-authored-by: TalBarYakar \u003ctalbaryakar@gmail.com>", "is_bot": false, "headline": "Tom/fix/vg slave exit code false alarm (#1905)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-02-26T20:03:33Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "2b92e9d1aaba1b0d8d87df74d58e608f4352d1c3", "body": "* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_wo\n[…]\n_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow", "is_bot": false, "headline": "MOD-12276-adding_random_traffic_workflow (#1900)", "author_name": "LiranAbir", "author_login": "LiranAbir", "committed_at": "2026-02-26T12:03:02Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "27aeea2e72b7f9154e2e512786247904dabed49d", "body": null, "is_bot": false, "headline": "RED-182069: Fix version regex in bump version workflow (#1899)", "author_name": "Momchil Marinov", "author_login": "m-marinov", "committed_at": "2026-02-24T12:33:36Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "11f4d84a557e5c0edd261ce8c64a2e0b2f2109b4", "body": "…tion\n\nRED-182068 fix Slack notification's condition\nUpdate notify-results job condition to skip push events\nOnly send notifications for schedule events on master/main\nOnly send notifications for workflow_dispatch when send-slack-message is true", "is_bot": false, "headline": "Merge pull request #1898 from RedisTimeSeries/RED-182068-slacck-condi…", "author_name": "valeria-raif", "author_login": "valeria-raif", "committed_at": "2026-02-23T21:28:59Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "cf16a3d802a491bf7d99f0acca539b3a181a1e38", "body": "- Update notify-results job condition to skip push events\n- Only send notifications for schedule events on master/main\n- Only send notifications for workflow_dispatch when send-slack-message is true", "is_bot": false, "headline": "fix: restrict Slack notifications to scheduled and manual triggers", "author_name": "Valeria Raif", "author_login": "valeria-raif", "committed_at": "2026-02-23T16:01:20Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d3ce044552661d97f0cdb498c62941923dedb3ed", "body": null, "is_bot": false, "headline": "RED-182069: Automate version bump (#1891)", "author_name": "Momchil Marinov", "author_login": "m-marinov", "committed_at": "2026-02-19T10:56:48Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "a747df83c30cd7ae2ff79c24f9753e5deaa8760c", "body": "* Fix valgrind CI job always passing despite detected memory leaks\n\nRemove `|| true` from the test step so that non-zero exit codes from\nmemcheck-summary are properly propagated. Downstream steps already\nuse `if: always()` and continue to run regardless.\n\nCo-authored-by: Cursor \u003ccursoragent@cursor.c\n[…]\nml: || true swallowed test failures,\nmaking the job always pass regardless of test results.\n\nCo-authored-by: Cursor \u003ccursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor \u003ccursoragent@cursor.com>", "is_bot": false, "headline": "Fix valgrind CI job always passing despite detected memory leaks (#1897)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-02-18T19:22:43Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "69dd86f562f9c8fcc8b58f528bc39acab9f887dc", "body": "…884)\n\nA new config for `ts-libmr-protocol` (default `INTERNAL`) to be able to fall back to `GEARS` protocol if there are issues", "is_bot": false, "headline": "MOD-13438 Use LibMR's internal commands for multi-shards commands (#1…", "author_name": "Gal Cohen", "author_login": "galcohen-redislabs", "committed_at": "2026-02-18T14:55:58Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "def7ac6b7c3d46063048b67bfc599f142ef05334", "body": "* feat: Add Slack notification for nightly workflow results\n\nAdd test-summary composite action that aggregates job results and sends\nformatted Slack notifications using Block Kit. Integrate action into\nevent-nightly.yml workflow.\n\nChanges:\n- Create .github/actions/test-summary/action.yml composite a\n[…]\nuld not run on PRs)\n- Switch to production Slack webhook (DATATYPES_SLACK_WEBHOOK_URL)\n\n---------\n\nCo-authored-by: Valeria Raif \u003cvaleria.raif@redis.com>\nCo-authored-by: Cursor \u003ccursoragent@cursor.com>", "is_bot": false, "headline": "Red 182068 slack notification rebased (#1887)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-02-17T11:02:54Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "1ff904bf438010b2e44519e849e9e3e5920d8f5c", "body": "* fi ci to uplaed to s3\n\n* update to \"setuptools\u003c81\"", "is_bot": false, "headline": "fix ci to uplaed to s3 (#1888)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-02-11T11:56:30Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "6b7c4db5a421f03d8c17a21885a1f61a6919e67b", "body": "…-26 (#1866)\n\n* Dockerize CI\n\n* Add support for Amazon Linux 2023\n\n* Add support for Macos 26", "is_bot": false, "headline": "MOD-13778 | MOD-13573 | MOD-13812 Dockerize CI, add AL2023 and macos…", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-02-05T13:44:10Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "2a7d3bea1246f082e0222b98c8c7371a6eed46ae", "body": "* Modernize benchmark runner on timeseries. remove the usage of env var for pem on benchmark flows\n\n* Remove pem secret and continue on error\n\n* Included mixed MRANGE/MGET and SET benchmarks\n\n* mrange_1k mixed using the proper dataset\n\n* Fixed missing env timeseries->search\n\n* oss-standalone-redisearch-m5 -> oss-standalone-modules-m5", "is_bot": false, "headline": "Modernize and future proof benchmark runner on timeseries (#1867)", "author_name": "Filipe Oliveira (Redis)", "author_login": "fcostaoliveira", "committed_at": "2026-01-30T09:26:16Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "13ebfdfe9846468702f7d986dbbeb5e0f77d2836", "body": "* MOD-12919 minimize ksn notification", "is_bot": false, "headline": "MOD-12919 minimize ksn (#1865)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-01-28T12:32:26Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "8664b66e601b6adbf808a1e839e9fc1a8a117e84", "body": "* Bump LibMR: minimal cluster argv/GIL fix\n\nUse LibMR commit a640526 (cluster.c argv deep-copy + GIL lock) to fix ASan heap-use-after-free with minimal surface area (no mr.c changes).\n\n* Bump LibMR: argv-copy-only innercomm\n\nUpdate LibMR submodule to test ASan fix relying solely on deep-copied argv (no ThreadSafeContextLock in innercomm handler).\n\n* update to master of libMR", "is_bot": false, "headline": "Bump LibMR: minimal cluster argv/GIL fix (#1859)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-01-19T14:47:32Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "de438f73b9262a535fcfdcd85673b65c589ad2ef", "body": null, "is_bot": false, "headline": "Skip slot-range validation when cluster-enabled=no (#1857)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-01-18T14:50:04Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "bc28a07fc082850a9bc029bd2c77fe198cbb31b4", "body": "* remove macOs-13\n\n* CI: run full test suite like nightly", "is_bot": false, "headline": "Mod 13397 ci on all (#1856)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-01-15T13:19:17Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "38029a2313c5d7dea8b4db08dc258eb8574e0f0d", "body": "* Fix ASM multi-key correctness: attach slot ranges + epoch to shard replies\n\n* Fix build: forward-declare MR_RecordCreate and avoid C label decl\n\n* Fix crash on LibMR error path: initialize slot-range accumulator\n\n* Tests: allow retryable topology-change error during ASM MRANGE loop\n\n* chore: clang\n[…]\nusterKeySlotC\n\n* Revert \"tests: add gated ASM A/B stats test\"\n\nThis reverts commit 21df1803fe7c46b7955604e2447bb3bb233f767f.\n\n* Refine slots metadata validation and errors\n\n* update to master of libMR", "is_bot": false, "headline": "Fix/asm multikey slotranges (#1852)", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2026-01-15T12:47:23Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "ec82081af0510f5a214f3de25d3781ae126162e3", "body": "* MOD-12932 MOD-12933 Support NaN values - Parser & Command Layer (TS.ADD/TS.MADD)\n\n* MOD-12934 Support NaN values - Aggregation Pipeline\n\n* MOD-12935 New Aggregator: countNaN\n\n* MOD-13450 New Aggregator: countAll\n\n* fix last bucket\n\n* test both compressed and uncompressed\n\n* MOD-12936 Canonicalize\n[…]\nix compaction rules for NaN only buckets\n\n* fix twa with NaN edge case + minor fixes\n\n* fix NaN response\n\n* fix twa last bucket range\n\n* CR\n\n* fix twa in NaN only buckets\n\n* fix nan with vector appand", "is_bot": false, "headline": "Add support for NaN values (#1853)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-01-14T14:55:37Z", "body_truncated": true, "is_coding_agent": false }, { "oid": "6b910f6aa77c4164ecf1ed5dff87172b1cfb3684", "body": null, "is_bot": false, "headline": "MOD-12980 ts.info bring back removed changes (#1849)", "author_name": "Aviv David", "author_login": "AvivDavid23", "committed_at": "2026-01-12T10:33:14Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "bff11f294f4a1fce64e81baddc4faf78225d8883", "body": null, "is_bot": false, "headline": "MOD-12980 Remove user data from logs (#1837)", "author_name": "efeldblum", "author_login": "ephraimfeldblum", "committed_at": "2026-01-06T06:50:11Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "540a6b747c8b59188d200c5a85e9611f38144374", "body": null, "is_bot": false, "headline": "MOD-13072 Add asm capability (#1839)", "author_name": "Gal Cohen", "author_login": "galcohen-redislabs", "committed_at": "2025-12-28T09:02:36Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "176f0af7d1e47afa9da5ba11eab2740b5d8afa0a", "body": null, "is_bot": false, "headline": "MOD-11623 Update LibMR submodule to latest varsion (#1832)", "author_name": "Gal Cohen", "author_login": "galcohen-redislabs", "committed_at": "2025-12-09T11:48:02Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "1b30bc84fd7d2267a38a3a698fdf950c1687d5e9", "body": null, "is_bot": false, "headline": "timeseries supports only 64-bit (#1831)", "author_name": "efeldblum", "author_login": "ephraimfeldblum", "committed_at": "2025-12-09T11:19:07Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "8524b4e2002d2ef011cc7780f1f51ea2be23bf37", "body": "Added note about 32 bit system support.", "is_bot": false, "headline": "Update README to include 32 bit system support note (#1829)", "author_name": "Lior Kogan", "author_login": "LiorKogan", "committed_at": "2025-12-04T14:43:15Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "ac468182593405ab429d637d4de7961e06a19570", "body": "…ions (#1828)\n\nApply the same adjustments for sanitizer builds as already exist for\nValgrind builds:\n- Reduce number_of_keys from 1000 to 100 for slower builds\n- Increase migration timeout from 5 to 60 seconds\n\nThis fixes timing issues in sanitizer builds where migrations and\nqueries can take longer to complete.", "is_bot": false, "headline": "Add SANITIZER support to test_asm_with_data_and_queries_during_migrat…", "author_name": "Tom Gabsow", "author_login": "gabsow", "committed_at": "2025-12-01T11:10:31Z", "body_truncated": false, "is_coding_agent": false } ], "releases_count": 72, "commits_last_year": 129, "latest_release_at": "2026-05-05T11:51:49Z", "latest_release_tag": "v1.12.14", "releases_from_tags": false, "days_since_last_push": 0, "active_weeks_last_year": 40, "days_since_latest_release": 84, "mean_days_between_releases": 53.7 }, "community": { "has_readme": true, "has_license": true, "has_description": true, "has_contributing": true, "health_percentage": 62, "has_issue_template": false, "has_code_of_conduct": false, "has_pull_request_template": false }, "ecosystem": { "packages": [] }, "popularity": { "forks": 147, "stars": 1070, "watchers": 24, "fork_history": { "days": [ { "date": "2018-07-12", "count": 1 }, { "date": "2018-10-07", "count": 1 }, { "date": "2018-10-22", "count": 1 }, { "date": "2018-11-08", "count": 1 }, { "date": "2019-01-05", "count": 1 }, { "date": "2019-01-15", "count": 1 }, { "date": "2019-03-07", "count": 1 }, { "date": "2019-03-14", "count": 1 }, { "date": "2019-03-28", "count": 2 }, { "date": "2019-04-25", "count": 1 }, { "date": "2019-04-30", "count": 1 }, { "date": "2019-05-24", "count": 1 }, { "date": "2019-06-16", "count": 1 }, { "date": "2019-06-21", "count": 1 }, { "date": "2019-07-06", "count": 1 }, { "date": "2019-07-11", "count": 1 }, { "date": "2019-07-19", "count": 1 }, { "date": "2019-07-22", "count": 1 }, { "date": "2019-07-29", "count": 1 }, { "date": "2019-07-31", "count": 1 }, { "date": "2019-08-01", "count": 1 }, { "date": "2019-08-08", "count": 1 }, { "date": "2019-08-27", "count": 1 }, { "date": "2019-09-11", "count": 1 }, { "date": "2019-10-17", "count": 1 }, { "date": "2019-10-21", "count": 1 }, { "date": "2019-10-24", "count": 1 }, { "date": "2019-11-10", "count": 1 }, { "date": "2019-11-12", "count": 1 }, { "date": "2019-11-15", "count": 1 }, { "date": "2019-11-20", "count": 1 }, { "date": "2019-12-19", "count": 1 }, { "date": "2019-12-25", "count": 1 }, { "date": "2020-01-03", "count": 1 }, { "date": "2020-01-09", "count": 1 }, { "date": "2020-01-13", "count": 1 }, { "date": "2020-02-07", "count": 1 }, { "date": "2020-02-12", "count": 1 }, { "date": "2020-04-03", "count": 1 }, { "date": "2020-04-05", "count": 1 }, { "date": "2020-05-09", "count": 1 }, { "date": "2020-05-21", "count": 1 }, { "date": "2020-05-27", "count": 1 }, { "date": "2020-05-30", "count": 1 }, { "date": "2020-06-17", "count": 1 }, { "date": "2020-06-22", "count": 1 }, { "date": "2020-06-30", "count": 1 }, { "date": "2020-07-02", "count": 1 }, { "date": "2020-07-08", "count": 1 }, { "date": "2020-07-11", "count": 1 }, { "date": "2020-07-22", "count": 1 }, { "date": "2020-07-27", "count": 1 }, { "date": "2020-08-08", "count": 1 }, { "date": "2020-08-11", "count": 1 }, { "date": "2020-08-13", "count": 1 }, { "date": "2020-08-31", "count": 1 }, { "date": "2020-11-13", "count": 1 }, { "date": "2020-12-16", "count": 1 }, { "date": "2021-01-04", "count": 1 }, { "date": "2021-01-21", "count": 1 }, { "date": "2021-01-23", "count": 1 }, { "date": "2021-03-01", "count": 2 }, { "date": "2021-03-03", "count": 1 }, { "date": "2021-03-22", "count": 1 }, { "date": "2021-03-30", "count": 2 }, { "date": "2021-04-05", "count": 1 }, { "date": "2021-04-15", "count": 1 }, { "date": "2021-04-24", "count": 1 }, { "date": "2021-06-05", "count": 1 }, { "date": "2021-08-16", "count": 1 }, { "date": "2021-08-31", "count": 1 }, { "date": "2021-10-07", "count": 1 }, { "date": "2021-11-03", "count": 1 }, { "date": "2021-11-12", "count": 1 }, { "date": "2021-12-10", "count": 1 }, { "date": "2022-01-06", "count": 1 }, { "date": "2022-01-18", "count": 1 }, { "date": "2022-01-20", "count": 2 }, { "date": "2022-02-05", "count": 1 }, { "date": "2022-02-09", "count": 1 }, { "date": "2022-02-10", "count": 1 }, { "date": "2022-02-21", "count": 1 }, { "date": "2022-03-11", "count": 1 }, { "date": "2022-03-22", "count": 1 }, { "date": "2022-03-28", "count": 1 }, { "date": "2022-03-31", "count": 1 }, { "date": "2022-04-01", "count": 1 }, { "date": "2022-04-05", "count": 1 }, { "date": "2022-04-07", "count": 1 }, { "date": "2022-04-19", "count": 1 }, { "date": "2022-04-25", "count": 1 }, { "date": "2022-05-19", "count": 1 }, { "date": "2022-06-06", "count": 1 }, { "date": "2022-07-04", "count": 1 }, { "date": "2022-09-05", "count": 1 }, { "date": "2022-09-12", "count": 1 }, { "date": "2022-10-25", "count": 1 }, { "date": "2022-10-28", "count": 1 }, { "date": "2022-11-07", "count": 1 }, { "date": "2022-11-08", "count": 1 }, { "date": "2022-11-10", "count": 1 }, { "date": "2022-11-13", "count": 1 }, { "date": "2022-11-25", "count": 1 }, { "date": "2022-12-29", "count": 1 }, { "date": "2023-01-07", "count": 1 }, { "date": "2023-01-09", "count": 1 }, { "date": "2023-01-25", "count": 1 }, { "date": "2023-02-01", "count": 1 }, { "date": "2023-03-07", "count": 1 }, { "date": "2023-03-09", "count": 2 }, { "date": "2023-03-24", "count": 1 }, { "date": "2023-05-14", "count": 1 }, { "date": "2023-05-15", "count": 1 }, { "date": "2023-05-16", "count": 1 }, { "date": "2023-06-22", "count": 1 }, { "date": "2023-09-07", "count": 1 }, { "date": "2023-09-09", "count": 1 }, { "date": "2023-09-24", "count": 2 }, { "date": "2023-11-08", "count": 1 }, { "date": "2023-11-23", "count": 1 }, { "date": "2023-11-24", "count": 1 }, { "date": "2023-11-27", "count": 1 }, { "date": "2023-12-08", "count": 1 }, { "date": "2024-01-22", "count": 1 }, { "date": "2024-02-27", "count": 1 }, { "date": "2024-03-01", "count": 1 }, { "date": "2024-03-22", "count": 1 }, { "date": "2024-06-27", "count": 1 }, { "date": "2024-07-01", "count": 1 }, { "date": "2024-07-15", "count": 1 }, { "date": "2024-10-26", "count": 1 }, { "date": "2024-10-29", "count": 1 }, { "date": "2024-11-02", "count": 1 }, { "date": "2024-12-25", "count": 1 }, { "date": "2025-03-08", "count": 1 }, { "date": "2025-03-10", "count": 1 }, { "date": "2025-10-08", "count": 1 }, { "date": "2026-03-11", "count": 1 }, { "date": "2026-04-02", "count": 1 }, { "date": "2026-06-18", "count": 1 }, { "date": "2026-06-27", "count": 1 } ], "complete": true, "collected": 147, "total_forks": 147 }, "star_history": null, "open_issues_and_prs": 193 }, "ai_readiness": { "has_nix": false, "example_dirs": [], "has_llms_txt": false, "has_dockerfile": true, "has_mcp_signal": false, "bootstrap_files": [ "Makefile", "build/LibMR/Makefile", "build/cpu_features/Makefile", "build/docker/Makefile", "build/dragonbox/Makefile", "build/fast_double_parser_c/Makefile", "build/hiredis/Makefile", "build/libevent/Makefile", "build/rmutil/Makefile", "tests/unit/Makefile" ], "api_schema_files": [], "has_devcontainer": false, "typecheck_configs": [], "toolchain_manifests": [], "largest_source_bytes": 188205, "source_files_sampled": 158, "oversized_source_files": 8, "agent_instruction_files": [], "agent_instruction_max_bytes": null }, "dependencies": { "manifests": [ "requirements_docker.txt", "tools/requirements.txt" ], "advisories": { "error": null, "scope": "repository_graph", "source": "osv", "findings": [ { "name": "click", "direct": false, "version": "7.0", "severity": "high", "ecosystem": "pypi", "cvss_score": 7.2, "advisory_ids": [ "PYSEC-2026-2132" ], "fixed_version": "8.3.3", "advisory_count": 1, "oldest_advisory_days": 89 }, { "name": "flask-cors", "direct": false, "version": "4.0.2", "severity": "moderate", "ecosystem": "pypi", "cvss_score": 5.3, "advisory_ids": [ "GHSA-43qf-4rqw-9q2g", "GHSA-7rxf-gvfg-47g4", "GHSA-8vgw-p6qm-5gr7", "PYSEC-2026-1383", "PYSEC-2026-1384", "PYSEC-2026-1385" ], "fixed_version": "6.0.0", "advisory_count": 6, "oldest_advisory_days": 495 } ], "collected": true, "malicious": [], "truncated": false, "by_severity": { "high": 1, "moderate": 1 }, "advisory_count": 7, "affected_count": 2, "assessed_count": 7, "malicious_count": 0, "assessed_package": null, "unassessed_count": 10, "direct_affected_count": 0 }, "ecosystems": [ "pypi" ], "dependencies": [], "all_dependencies": { "error": null, "source": "github-sbom", "packages": [ { "name": "addict", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "click", "direct": false, "version": "7.0", "ecosystem": "pypi" }, { "name": "flask", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "flask-cors", "direct": false, "version": "4.0.2", "ecosystem": "pypi" }, { "name": "gevent", "direct": false, "version": "23.9.1", "ecosystem": "pypi" }, { "name": "jinja2", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "jwt", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "pip", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "python-dateutil", "direct": false, "version": "2.6.0", "ecosystem": "pypi" }, { "name": "ramp-packer", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "ramp-packer", "direct": false, "version": "2.5.13", "ecosystem": "pypi" }, { "name": "redis", "direct": false, "version": "2.10.5", "ecosystem": "pypi" }, { "name": "redis", "direct": false, "version": "3.0.1", "ecosystem": "pypi" }, { "name": "redisbench-admin", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "setuptools", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "statistics", "direct": false, "version": null, "ecosystem": "pypi" }, { "name": "toml", "direct": false, "version": null, "ecosystem": "pypi" } ], "collected": true, "truncated": false, "total_count": 17, "direct_count": 0, "indirect_count": 17 } }, "maintainership": { "issues": { "open_prs": 83, "merged_prs": 1301, "open_issues": 110, "closed_ratio": 0.745, "closed_issues": 322, "closed_unmerged_prs": 318 }, "bus_factor": 4, "bot_contributors": 1, "top_contributors": [ { "type": "User", "login": "LiorKogan", "commits": 343, "avatar_url": "https://avatars.githubusercontent.com/u/7252991?v=4" }, { "type": "User", "login": "gkorland", "commits": 160, "avatar_url": "https://avatars.githubusercontent.com/u/753206?v=4" }, { "type": "User", "login": "rafie", "commits": 114, "avatar_url": "https://avatars.githubusercontent.com/u/7499323?v=4" }, { "type": "User", "login": "filipecosta90", "commits": 78, "avatar_url": "https://avatars.githubusercontent.com/u/5832149?v=4" }, { "type": "User", "login": "alonre24", "commits": 60, "avatar_url": "https://avatars.githubusercontent.com/u/28729016?v=4" }, { "type": "User", "login": "K-Jo", "commits": 60, "avatar_url": "https://avatars.githubusercontent.com/u/4069725?v=4" }, { "type": "User", "login": "danni-m", "commits": 51, "avatar_url": "https://avatars.githubusercontent.com/u/7194784?v=4" }, { "type": "User", "login": "nermiller", "commits": 46, "avatar_url": "https://avatars.githubusercontent.com/u/102551568?v=4" }, { "type": "User", "login": "OfirMos", "commits": 41, "avatar_url": "https://avatars.githubusercontent.com/u/82366525?v=4" }, { "type": "User", "login": "gabsow", "commits": 36, "avatar_url": "https://avatars.githubusercontent.com/u/4652717?v=4" } ], "contributors_sampled": 68, "top_contributor_share": 0.265 }, "quality_signals": { "has_ci": true, "has_tests": true, "ci_workflows": [ "benchmark-flow.yml", "benchmark-runner.yml", "benchmark-trigger.yml", "bump-version.yml", "event-backport_pr.yml", "event-ci.yml", "event-nightly.yml", "event-push-to-integ.yml", "event-tag.yml", "flow-coverage.yml", "flow-linter.yml", "flow-linux.yml", "flow-macos.yml", "flow-random-traffic.yml", "flow-spellcheck.yml", "mariner2.yml", "push-docker-images.yml", "release-drafter.yml" ], "has_docs_dir": true, "linter_configs": [], "has_editorconfig": false, "has_linter_config": false, "has_precommit_config": false }, "security_signals": { "lockfiles": [], "scorecard": { "checks": [ { "name": "Binary-Artifacts", "score": 10, "reason": "no binaries found in the repo", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts" }, { "name": "Branch-Protection", "score": null, "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection" }, { "name": "CI-Tests", "score": 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": 9, "reason": "Found 29/30 approved changesets -- score normalized to 9", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review" }, { "name": "Contributors", "score": 10, "reason": "project has 12 contributing companies or organizations", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors" }, { "name": "Dangerous-Workflow", "score": 0, "reason": "dangerous workflow patterns detected", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow" }, { "name": "Dependency-Update-Tool", "score": 10, "reason": "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": 9, "reason": "license file detected", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license" }, { "name": "Maintained", "score": 10, "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained" }, { "name": "Packaging", "score": 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": 9, "reason": "SAST tool is not run on all commits -- score normalized to 9", "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": null, "reason": "no releases found", "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": 5, "reason": "5 existing vulnerabilities detected", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities" } ], "commit": "008f5a9b692d466c0e78fc58c6be52deb2e500a0", "ran_at": "2026-07-29T02:15:31Z", "aggregate_score": 6.1, "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-29T01:16:35Z", "oldest_open_prs": [ { "number": 186, "created_at": "2019-08-18T11:25:31Z", "last_comment_at": "2022-09-22T14:13:06Z", "last_comment_author": "CLAassistant" }, { "number": 695, "created_at": "2021-04-19T15:08:42Z", "last_comment_at": "2024-02-22T03:47:16Z", "last_comment_author": "kamikyo" }, { "number": 835, "created_at": "2021-08-22T08:54:05Z", "last_comment_at": "2021-09-02T11:10:58Z", "last_comment_author": "codecov" }, { "number": 914, "created_at": "2021-11-30T14:21:51Z", "last_comment_at": "2022-09-22T14:13:00Z", "last_comment_author": "CLAassistant" }, { "number": 947, "created_at": "2021-12-19T17:08:59Z", "last_comment_at": "2022-09-22T14:13:03Z", "last_comment_author": "CLAassistant" }, { "number": 1023, "created_at": "2022-01-26T06:37:01Z", "last_comment_at": "2022-03-24T17:50:47Z", "last_comment_author": "rostyboost" }, { "number": 1082, "created_at": "2022-03-07T22:32:57Z", "last_comment_at": "2022-09-22T14:12:47Z", "last_comment_author": "CLAassistant" }, { "number": 1092, "created_at": "2022-03-18T23:15:20Z", "last_comment_at": "2022-03-18T23:51:45Z", "last_comment_author": "codecov" }, { "number": 1116, "created_at": "2022-04-04T07:26:24Z", "last_comment_at": "2022-09-22T14:12:25Z", "last_comment_author": "CLAassistant" }, { "number": 1178, "created_at": "2022-05-25T06:37:33Z", "last_comment_at": "2022-09-22T14:12:32Z", "last_comment_author": "CLAassistant" }, { "number": 1232, "created_at": "2022-07-05T19:17:03Z", "last_comment_at": "2022-09-22T14:12:29Z", "last_comment_author": "CLAassistant" }, { "number": 1261, "created_at": "2022-08-15T11:50:39Z", "last_comment_at": "2022-09-22T14:12:11Z", "last_comment_author": "CLAassistant" }, { "number": 1263, "created_at": "2022-08-16T11:19:20Z", "last_comment_at": "2022-09-22T14:12:06Z", "last_comment_author": "CLAassistant" }, { "number": 1334, "created_at": "2022-11-07T14:39:48Z", "last_comment_at": "2024-09-03T11:39:21Z", "last_comment_author": "CLAassistant" }, { "number": 1340, "created_at": "2022-11-14T09:08:23Z", "last_comment_at": "2024-09-03T11:39:18Z", "last_comment_author": "CLAassistant" }, { "number": 1353, "created_at": "2022-11-25T18:53:17Z", "last_comment_at": "2024-09-03T11:39:54Z", "last_comment_author": "codecov" }, { "number": 1401, "created_at": "2023-02-16T05:57:36Z", "last_comment_at": "2023-02-16T06:30:16Z", "last_comment_author": "codecov" }, { "number": 1407, "created_at": "2023-02-19T13:59:48Z", "last_comment_at": "2024-09-03T11:39:10Z", "last_comment_author": "CLAassistant" }, { "number": 1431, "created_at": "2023-03-09T09:05:50Z", "last_comment_at": null, "last_comment_author": null }, { "number": 1434, "created_at": "2023-03-13T11:28:14Z", "last_comment_at": "2023-03-13T12:05:11Z", "last_comment_author": "codecov" } ], "last_merged_pr_at": "2026-07-28T05:57:15Z", "ci_last_conclusion": "SUCCESS", "oldest_open_issues": [ { "number": 41, "created_at": "2019-02-12T14:52:36Z", "last_comment_at": "2020-02-04T22:43:58Z", "last_comment_author": "filipecosta90" }, { "number": 60, "created_at": "2019-02-28T07:01:55Z", "last_comment_at": "2019-09-12T00:06:35Z", "last_comment_author": "github-actions" }, { "number": 75, "created_at": "2019-04-08T13:37:46Z", "last_comment_at": "2019-11-25T12:12:46Z", "last_comment_author": "filipecosta90" }, { "number": 76, "created_at": "2019-04-10T20:17:09Z", "last_comment_at": "2019-09-12T00:06:33Z", "last_comment_author": "github-actions" }, { "number": 82, "created_at": "2019-04-10T21:01:14Z", "last_comment_at": null, "last_comment_author": null }, { "number": 83, "created_at": "2019-04-10T21:17:12Z", "last_comment_at": "2019-09-12T00:06:31Z", "last_comment_author": "github-actions" }, { "number": 98, "created_at": "2019-05-08T00:29:57Z", "last_comment_at": "2019-09-12T00:06:30Z", "last_comment_author": "github-actions" }, { "number": 99, "created_at": "2019-05-08T10:09:47Z", "last_comment_at": "2019-09-12T00:06:29Z", "last_comment_author": "github-actions" }, { "number": 148, "created_at": "2019-06-21T23:19:22Z", "last_comment_at": "2020-01-13T08:37:06Z", "last_comment_author": "ashtul" }, { "number": 152, "created_at": "2019-06-24T08:58:41Z", "last_comment_at": "2022-06-13T20:53:31Z", "last_comment_author": "ashtonian" }, { "number": 153, "created_at": "2019-06-24T10:13:49Z", "last_comment_at": "2019-08-26T14:56:12Z", "last_comment_author": "ashtul" }, { "number": 166, "created_at": "2019-07-10T14:17:04Z", "last_comment_at": "2019-12-05T12:35:17Z", "last_comment_author": "ashtul" }, { "number": 174, "created_at": "2019-08-04T17:05:04Z", "last_comment_at": "2022-11-25T12:48:03Z", "last_comment_author": "LiorKogan" }, { "number": 187, "created_at": "2019-08-19T09:22:46Z", "last_comment_at": "2021-10-19T20:28:10Z", "last_comment_author": "danielbodart" }, { "number": 196, "created_at": "2019-08-27T12:02:12Z", "last_comment_at": null, "last_comment_author": null }, { "number": 202, "created_at": "2019-09-02T13:54:22Z", "last_comment_at": null, "last_comment_author": null }, { "number": 208, "created_at": "2019-09-06T05:00:24Z", "last_comment_at": "2019-09-10T09:15:02Z", "last_comment_author": "cheekybastard" }, { "number": 217, "created_at": "2019-09-23T06:07:13Z", "last_comment_at": "2019-09-23T12:11:25Z", "last_comment_author": "gkorland" }, { "number": 238, "created_at": "2019-11-10T20:44:51Z", "last_comment_at": null, "last_comment_author": null }, { "number": 251, "created_at": "2019-11-27T19:17:49Z", "last_comment_at": null, "last_comment_author": null } ] } }, "config": { "disabled_metrics": [], "disabled_categories": [], "disabled_components": {} }, "source": { "url": "https://github.com/RedisTimeSeries/RedisTimeSeries", "host": "github.com", "name": "RedisTimeSeries", "owner": "RedisTimeSeries" }, "metrics": { "overall": { "key": "overall", "band": "good", "name": "Overall health", "note": null, "notes": [], "value": 78, "inputs": { "security": 69, "vitality": 92, "community": 70, "governance": 76, "engineering": 81 }, "components": [] }, "categories": [ { "key": "vitality", "band": "excellent", "name": "Vitality", "value": 92, "weight": 0.22, "metrics": [ { "key": "development_activity", "band": "excellent", "name": "Development activity", "note": null, "notes": [], "value": 92, "inputs": { "commits_last_year": 129, "human_commit_share": 1, "days_since_last_push": 0, "active_weeks_last_year": 40 }, "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": "40/52 weeks with commits", "points": 27.7, "status": "partial", "details": [ { "code": "commit_cadence_weeks", "params": { "weeks": 40 } } ], "max_points": 36 }, { "key": "commit_volume", "name": "Commit volume", "detail": "129 commits in the last year", "points": 18, "status": "met", "details": [ { "code": "commits_last_year", "params": { "count": 129 } } ], "max_points": 18 }, { "key": "openssf_scorecard_maintained", "name": "OpenSSF Scorecard: Maintained", "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10", "points": 10, "status": "met", "details": [], "max_points": 10 } ] }, { "key": "release_discipline", "band": "excellent", "name": "Release discipline", "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "openssf_scorecard_signed_releases" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 92, "inputs": { "releases_count": 72, "latest_release_tag": "v1.12.14", "releases_from_tags": false, "days_since_latest_release": 84, "mean_days_between_releases": 53.7 }, "components": [ { "key": "ships_releases", "name": "Ships releases", "detail": "72 releases published", "points": 27, "status": "met", "details": [ { "code": "releases_published", "params": { "count": 72 } } ], "max_points": 27 }, { "key": "release_recency", "name": "Release recency", "detail": "latest release 84 days ago", "points": 36, "status": "met", "details": [ { "code": "release_recency", "params": { "days": 84 } } ], "max_points": 36 }, { "key": "release_cadence", "name": "Release cadence", "detail": "a release every ~53.7 days", "points": 19.8, "status": "partial", "details": [ { "code": "release_cadence", "params": { "gap": 53.7 } } ], "max_points": 27 }, { "key": "openssf_scorecard_signed_releases", "name": "OpenSSF Scorecard: Signed-Releases", "detail": "no releases found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "max_points": 10 } ] }, { "key": "abandonment", "band": "excellent", "name": "Abandonment", "note": null, "notes": [], "value": 100, "inputs": { "cap": null, "state": "maintained", "guards": [], "signals": [], "red_flag": false, "multiplier_pct": 100, "declared_reason": null, "unverified_reason": null, "unanswered_open_prs": null, "unanswered_open_issues": null, "days_since_last_merged_pr": null, "days_since_last_human_commit": 1, "days_since_last_human_commit_is_floor": false }, "components": [ { "key": "project_is_still_maintained", "name": "Project is still maintained", "detail": "last human commit 1 days ago", "points": 100, "status": "met", "details": [ { "code": "abandonment_maintained", "params": { "days": 1 } } ], "max_points": 100 } ] } ], "description": "Is the project alive — is code being written and are releases shipping?" }, { "key": "community", "band": "good", "name": "Community & Adoption", "value": 70, "weight": 0.18, "metrics": [ { "key": "popularity", "band": "good", "name": "Popularity & adoption", "note": null, "notes": [], "value": 75, "inputs": { "forks": 147, "stars": 1070, "watchers": 24, "growth_state": "unverified", "growth_factor_pct": 100, "growth_unverified_reason": "no_history" }, "components": [ { "key": "stars", "name": "Stars", "detail": "1,070 stars", "points": 49.1, "status": "partial", "details": [ { "code": "stars", "params": { "count": 1070 } } ], "max_points": 60 }, { "key": "forks", "name": "Forks", "detail": "147 forks", "points": 18, "status": "partial", "details": [ { "code": "forks", "params": { "count": 147 } } ], "max_points": 25 }, { "key": "watchers", "name": "Watchers", "detail": "24 watchers", "points": 7.6, "status": "partial", "details": [ { "code": "watchers", "params": { "count": 24 } } ], "max_points": 15 } ] }, { "key": "community_health", "band": "moderate", "name": "Community health", "note": null, "notes": [], "value": 64, "inputs": { "has_readme": true, "has_license": true, "has_contributing": true, "has_issue_template": false, "has_code_of_conduct": false, "has_pull_request_template": false }, "components": [ { "key": "readme", "name": "README", "detail": null, "points": 22.5, "status": "met", "details": [], "max_points": 22.5 }, { "key": "license", "name": "License", "detail": "license file present, not a recognized license", "points": 16.9, "status": "partial", "details": [ { "code": "license_custom", "params": {} } ], "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": 0, "status": "missed", "details": [], "max_points": 13.5 }, { "key": "issue_template", "name": "Issue template", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 7.2 }, { "key": "pr_template", "name": "PR template", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 6.3 } ] } ], "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?" }, { "key": "governance", "band": "good", "name": "Sustainability & Governance", "value": 76, "weight": 0.24, "metrics": [ { "key": "maintainer_resilience", "band": "good", "name": "Maintainer resilience (bus factor)", "note": null, "notes": [], "value": 83, "inputs": { "bus_factor": 4, "contributors_sampled": 68, "top_contributor_share": 0.265 }, "components": [ { "key": "bus_factor", "name": "Bus factor", "detail": "4 contributor(s) cover half of all commits", "points": 43.2, "status": "partial", "details": [ { "code": "bus_factor", "params": { "count": 4 } } ], "max_points": 54 }, { "key": "commit_distribution", "name": "Commit distribution", "detail": "top contributor authored 26% of commits", "points": 16.5, "status": "partial", "details": [ { "code": "top_contributor_share", "params": { "share": 26 } } ], "max_points": 22.5 }, { "key": "contributor_breadth", "name": "Contributor breadth", "detail": "68 contributors", "points": 13.5, "status": "met", "details": [ { "code": "contributors_sampled", "params": { "count": 68 } } ], "max_points": 13.5 }, { "key": "openssf_scorecard_contributors", "name": "OpenSSF Scorecard: Contributors", "detail": "project has 12 contributing companies or organizations", "points": 10, "status": "met", "details": [], "max_points": 10 } ] }, { "key": "responsiveness", "band": "good", "name": "Issue & PR responsiveness", "note": null, "notes": [], "value": 79, "inputs": { "merged_prs": 1301, "open_issues": 110, "closed_issues": 322, "issue_closed_ratio": 0.745, "closed_unmerged_prs": 318 }, "components": [ { "key": "issue_resolution", "name": "Issue resolution", "detail": "74% of issues closed", "points": 34.8, "status": "partial", "details": [ { "code": "issues_closed_share", "params": { "share": 74 } } ], "max_points": 46.75 }, { "key": "pr_acceptance", "name": "PR acceptance", "detail": "1301/1619 decided PRs merged", "points": 30.7, "status": "partial", "details": [ { "code": "decided_prs_merged", "params": { "merged": 1301, "decided": 1619 } } ], "max_points": 38.25 }, { "key": "openssf_scorecard_code_review", "name": "OpenSSF Scorecard: Code-Review", "detail": "Found 29/30 approved changesets -- score normalized to 9", "points": 13.5, "status": "partial", "details": [], "max_points": 15 } ] }, { "key": "stewardship", "band": "moderate", "name": "Ownership & stewardship", "note": null, "notes": [], "value": 63, "inputs": { "followers": 50, "owner_type": "Organization", "is_verified": null, "owner_login": "RedisTimeSeries", "public_repos": 13, "account_age_days": 2745 }, "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": "50 followers of RedisTimeSeries", "points": 12.3, "status": "partial", "details": [ { "code": "owner_followers", "params": { "count": 50, "login": "RedisTimeSeries" } } ], "max_points": 25 }, { "key": "track_record", "name": "Track record", "detail": "13 public repos, account ~7 yr old", "points": 20.3, "status": "partial", "details": [ { "code": "public_repos", "params": { "count": 13 } }, { "code": "account_age_years", "params": { "years": 7 } } ], "max_points": 25 } ] } ], "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?" }, { "key": "engineering", "band": "good", "name": "Engineering Quality", "value": 81, "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": "18 workflow(s)", "points": 24, "status": "met", "details": [ { "code": "ci_workflows", "params": { "count": 18 } } ], "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": "excellent", "name": "Documentation", "note": null, "notes": [], "value": 100, "inputs": { "topics": [ "redis", "redis-module", "timeseries", "redistimeseries", "timeseries-database" ], "has_wiki": true, "homepage": "https://redis.io/docs/stack/timeseries/", "has_readme": true, "has_docs_dir": true, "has_description": true }, "components": [ { "key": "readme", "name": "README", "detail": null, "points": 30, "status": "met", "details": [], "max_points": 30 }, { "key": "documentation_directory", "name": "Documentation directory", "detail": null, "points": 25, "status": "met", "details": [], "max_points": 25 }, { "key": "documentation_homepage_site", "name": "Documentation / homepage site", "detail": "https://redis.io/docs/stack/timeseries/", "points": 15, "status": "met", "details": [], "max_points": 15 }, { "key": "repository_description", "name": "Repository description", "detail": null, "points": 10, "status": "met", "details": [], "max_points": 10 }, { "key": "topics", "name": "Topics", "detail": "5 topics", "points": 10, "status": "met", "details": [ { "code": "topics_count", "params": { "count": 5 } } ], "max_points": 10 }, { "key": "wiki", "name": "Wiki", "detail": null, "points": 10, "status": "met", "details": [], "max_points": 10 } ] } ], "description": "Are baseline engineering and documentation practices in place?" }, { "key": "security", "band": "moderate", "name": "Security", "value": 69, "weight": 0.16, "metrics": [ { "key": "security_posture", "band": "moderate", "name": "Security posture", "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "branch_protection", "signed_releases" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 61, "inputs": { "source": "openssf_scorecard", "checks_evaluated": 16, "scorecard_version": "v5.5.0", "checks_inconclusive": 2, "scorecard_aggregate": 6.1 }, "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 29/30 approved changesets -- score normalized to 9", "points": 6.8, "status": "partial", "details": [], "max_points": 7.5 }, { "key": "contributors", "name": "Contributors", "detail": "project has 12 contributing companies or organizations", "points": 2.5, "status": "met", "details": [], "max_points": 2.5 }, { "key": "dangerous_workflow", "name": "Dangerous-Workflow", "detail": "dangerous workflow patterns detected", "points": 0, "status": "missed", "details": [], "max_points": 10 }, { "key": "dependency_update_tool", "name": "Dependency-Update-Tool", "detail": "update tool detected", "points": 7.5, "status": "met", "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.2, "status": "partial", "details": [], "max_points": 2.5 }, { "key": "maintained", "name": "Maintained", "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10", "points": 7.5, "status": "met", "details": [], "max_points": 7.5 }, { "key": "packaging", "name": "Packaging", "detail": "packaging workflow 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 9", "points": 4.5, "status": "partial", "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": "no releases found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "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": "5 existing vulnerabilities detected", "points": 3.8, "status": "partial", "details": [], "max_points": 7.5 } ] }, { "key": "dependency_advisories", "band": "excellent", "name": "Dependency advisories", "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 7 resolved dependencies against OSV; 10 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "indirect_dependencies_free_of_known_advisories", "no_advisories_left_outstanding" ] } }, { "code": "weights_renormalized", "params": {} }, { "code": "advisories_scope_repository", "params": { "assessed": 7 } }, { "code": "advisories_unassessed", "params": { "count": 10 } }, { "code": "advisories_repo_graph_caveat", "params": {} }, { "code": "advisories_reachability", "params": {} } ], "value": 100, "inputs": { "source": "osv", "advisories": 7, "affected_packages": 2, "assessed_packages": 7, "unassessed_packages": 10, "affected_by_severity": "high 1, moderate 1", "direct_affected_packages": 0 }, "components": [ { "key": "direct_dependencies_free_of_known_advisories", "name": "Direct dependencies free of known advisories", "detail": "no direct dependency carries a known advisory", "points": 35, "status": "met", "details": [ { "code": "no_direct_advisories", "params": {} } ], "max_points": 35 }, { "key": "indirect_dependencies_free_of_known_advisories", "name": "Indirect dependencies free of known advisories", "detail": "transitive set not separable from development and test dependencies in this scope", "points": 0, "status": "excluded", "details": [ { "code": "advisories_scope_not_separable", "params": {} } ], "max_points": 25 }, { "key": "no_advisories_left_outstanding", "name": "No advisories left outstanding", "detail": "no advisory carries a publication date", "points": 0, "status": "excluded", "details": [ { "code": "advisories_no_publication_date", "params": {} } ], "max_points": 40 } ] }, { "key": "malicious_dependencies", "band": "excellent", "name": "Malicious dependencies", "note": null, "notes": [], "value": 100, "inputs": { "source": "osv", "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored", "packages": [], "red_flag": false, "assessed_packages": 7, "malicious_packages": 0, "direct_malicious_packages": 0, "withdrawn_malicious_packages": 0, "installable_malicious_packages": 0 }, "components": [ { "key": "no_dependency_reported_as_a_malicious_package", "name": "No dependency reported as a malicious package", "detail": "no dependency is reported as a malicious package", "points": 100, "status": "met", "details": [ { "code": "no_malicious_dependencies", "params": {} } ], "max_points": 100 } ] }, { "key": "high_risk_jurisdiction_exposure", "band": "excellent", "name": "High-Risk Jurisdiction Exposure", "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.", "notes": [ { "code": "jurisdiction_evidence_limits", "params": {} } ], "value": 100, "inputs": { "meaning": "self-published location evidence; not nationality or citizenship", "red_flag": false, "exposures": [], "policy_countries": [ "Russia", "Iran", "North Korea" ], "review_only_matches": 0, "assessed_self_published_locations": 5 }, "components": [ { "key": "policy_exposure_multiplier", "name": "Policy exposure multiplier", "detail": "no confirmed policy-scope location match", "points": 100, "status": "met", "details": [ { "code": "jurisdiction_no_match", "params": {} } ], "max_points": 100 } ] } ], "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?" }, { "key": "ai_readiness", "band": "moderate", "name": "AI Readiness", "value": 52, "weight": 0, "metrics": [ { "key": "ai_agent_context", "band": "at_risk", "name": "Agent context & guidance", "note": null, "notes": [], "value": 40, "inputs": { "has_llms_txt": false, "legible_history_share": 0.96, "agent_instruction_files": [], "agent_instruction_max_bytes": null }, "components": [ { "key": "agent_instructions", "name": "Agent instructions", "detail": "no CLAUDE.md / AGENTS.md / editor rules", "points": 0, "status": "missed", "details": [ { "code": "no_agent_instructions", "params": {} } ], "max_points": 45 }, { "key": "machine_readable_docs_llms_txt", "name": "Machine-readable docs (llms.txt)", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 15 }, { "key": "legible_commit_history", "name": "Legible commit history", "detail": "96 of 100 human commits state their intent (structured subject or explanatory body)", "points": 40, "status": "met", "details": [ { "code": "legible_history", "params": { "legible": 96, "sampled": 100 } } ], "max_points": 40 } ] }, { "key": "ai_verify_loop", "band": "moderate", "name": "Verify loop (build / test / typecheck)", "note": null, "notes": [], "value": 60, "inputs": { "has_nix": false, "has_tests": true, "lockfiles": [], "has_dockerfile": true, "typed_language": false, "bootstrap_files": [ "Makefile", "build/LibMR/Makefile", "build/cpu_features/Makefile", "build/docker/Makefile", "build/dragonbox/Makefile", "build/fast_double_parser_c/Makefile", "build/hiredis/Makefile", "build/libevent/Makefile", "build/rmutil/Makefile", "tests/unit/Makefile" ], "has_devcontainer": false, "has_linter_config": false, "typecheck_configs": [], "agent_commit_share": 0.23, "toolchain_manifests": [], "dependency_bot_commit_share": 0 }, "components": [ { "key": "one_command_bootstrap", "name": "One-command bootstrap", "detail": "Makefile, build/LibMR/Makefile, build/cpu_features/Makefile, build/docker/Makefile, build/dragonbox/Makefile, build/fast_double_parser_c/Makefile, build/hiredis/Makefile, build/libevent/Makefile, build/rmutil/Makefile, tests/unit/Makefile", "points": 18, "status": "met", "details": [ { "code": "file_list", "params": { "files": "Makefile, build/LibMR/Makefile, build/cpu_features/Makefile, build/docker/Makefile, build/dragonbox/Makefile, build/fast_double_parser_c/Makefile, build/hiredis/Makefile, build/libevent/Makefile, build/rmutil/Makefile, tests/unit/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": null, "points": 0, "status": "missed", "details": [], "max_points": 11 }, { "key": "reproducible_environment", "name": "Reproducible environment", "detail": "Dockerfile", "points": 10, "status": "met", "details": [ { "code": "file_list", "params": { "files": "Dockerfile" } } ], "max_points": 10 }, { "key": "demonstrated_agent_practice", "name": "Demonstrated agent practice", "detail": "23 of the last 100 commits agent-authored or agent-credited", "points": 10, "status": "met", "details": [ { "code": "agent_authored_commits", "params": { "count": 23, "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": "moderate", "name": "Code legibility for models", "note": null, "notes": [], "value": 52, "inputs": { "primary_language": "Python", "largest_source_bytes": 188205, "source_files_sampled": 158, "oversized_source_files": 8 }, "components": [ { "key": "type_checkable_code", "name": "Type-checkable code", "detail": "Python without a type-check config", "points": 0, "status": "missed", "details": [ { "code": "no_typecheck_config_language", "params": { "language": "Python" } } ], "max_points": 45 }, { "key": "manageable_file_sizes", "name": "Manageable file sizes", "detail": "8/158 source files over 60KB", "points": 52.2, "status": "partial", "details": [ { "code": "oversized_source_files", "params": { "kb": 60, "sampled": 158, "oversized": 8 } } ], "max_points": 55 } ] } ], "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score." } ], "metrics_version": "1.13.0" }, "warnings": [ "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token" ], "report_type": "repository", "generated_at": "2026-07-29T02:16:04.702687Z", "schema_version": "0.27.0", "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/RedisTimeSeries/RedisTimeSeries.svg", "full_name": "RedisTimeSeries/RedisTimeSeries", "license_state": "custom", "license_spdx": null }, "repoMeta": null, "notFound": false, "related": [ { "id": 16084, "full_name": "valkey-io/valkey-glide", "url": "https://github.com/valkey-io/valkey-glide", "description": "An open source Valkey client library that supports Valkey, and Redis open source 6.2, 7.0 and 7.2. Valkey GLIDE is designed for reliability, optimized performance, and high-availability, for Valkey and Redis OSS based applications. GLIDE is a multi language client library, written in Rust with programming language bindings, such as Java and Python", "ecosystem": "npm", "ecosystems": [ "npm", "go", "crates", "maven", "pypi" ], "primary_language": "Java", "languages": [ "Java", "Python", "Rust", "Go", "TypeScript" ], "topics": [ "cache", "fault-tolerance", "golang", "java", "javascript", "kotlin", "nodejs", "open-source", "performance", "python", "reliability", "rust", "typescript", "valkey", "valkey-client", "database", "key-value", "csharp", "pubsub", "scala", "redis", "client", "driver", "napi", "cross-platform", "cluster", "standalone", "high-availability", "fault-tolerant", "distributed", "scalable", "resilient", "valkey-glide" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 767, "forks": 168, "watchers": 12, "monthly_downloads": 1695966, "latest_score": 88, "latest_band": "excellent", "latest_scanned_at": "2026-07-24T13:54:33.733944Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "maintained", "red_flags": [], "badge_url": "" }, { "id": 8646, "full_name": "taskforcesh/bullmq", "url": "https://github.com/taskforcesh/bullmq", "description": "BullMQ - Message Queue and Batch processing for NodeJS, Python, Elixir and PHP based on Redis", "ecosystem": "npm", "ecosystems": [ "npm", "hex", "crates", "pypi", "packagist" ], "primary_language": "TypeScript", "languages": [ "TypeScript", "Rust", "Elixir" ], "topics": [ "background-jobs", "nodejs", "queue", "redis", "typescript", "python", "elixir", "php", "bull", "bullmq", "queues", "jobs", "worker", "job", "background", "asynchronous", "database" ], "license_spdx": "MIT", "license_state": "standard", "stars": 9127, "forks": 654, "watchers": 36, "monthly_downloads": 26974786, "latest_score": 87, "latest_band": "excellent", "latest_scanned_at": "2026-07-16T00:14:54.282663Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "badge_url": "" }, { "id": 2287, "full_name": "apache/opendal", "url": "https://github.com/apache/opendal", "description": "Apache OpenDAL: One Layer, All Storage.", "ecosystem": "crates", "ecosystems": [ "crates", "npm" ], "primary_language": "Rust", "languages": [], "topics": [ "azblob", "gcs", "hacktoberfest", "redis", "rust", "s3", "storage" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 5235, "forks": 786, "watchers": 34, "monthly_downloads": 977865, "latest_score": 85, "latest_band": "excellent", "latest_scanned_at": "2026-07-14T03:04:34.658364Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "badge_url": "" }, { "id": 44017, "full_name": "discordjs/discord.js", "url": "https://github.com/discordjs/discord.js", "description": "A powerful JavaScript library for interacting with the Discord API", "ecosystem": "npm", "ecosystems": [ "npm" ], "primary_language": "TypeScript", "languages": [ "TypeScript", "JavaScript", "MDX" ], "topics": [ "discord-api", "discord", "nodejs", "bot", "voice-support", "discord-bot", "discordjs", "discord-server", "hacktoberfest", "api", "rest", "discordapp", "proxy", "message", "brokers", "redis", "client", "node", "map", "collection", "utility" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 26766, "forks": 4075, "watchers": 421, "monthly_downloads": 18890405, "latest_score": 85, "latest_band": "excellent", "latest_scanned_at": "2026-07-27T19:03:07.502871Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "maintained", "red_flags": [], "badge_url": "" }, { "id": 139, "full_name": "apache/superset", "url": "https://github.com/apache/superset", "description": "Apache Superset is a Data Visualization and Data Exploration Platform", "ecosystem": "npm", "ecosystems": [ "npm", "pypi" ], "primary_language": "TypeScript", "languages": [ "TypeScript", "Python", "Jupyter Notebook" ], "topics": [ "superset", "apache", "apache-superset", "data-visualization", "data-viz", "analytics", "business-intelligence", "data-science", "data-engineering", "asf", "bi", "business-analytics", "data-analytics", "data-analysis", "python", "react", "sql-editor", "flask", "extensions", "visualization", "embed", "embedded", "sdk", "iframe", "dashboard", "chart", "cli", "development-tools" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 73846, "forks": 17889, "watchers": 1535, "monthly_downloads": 1098754, "latest_score": 97, "latest_band": "excellent", "latest_scanned_at": "2026-07-15T20:41:37.957488Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "badge_url": "" }, { "id": 11038, "full_name": "onnx/onnx", "url": "https://github.com/onnx/onnx", "description": "Open standard for machine learning interoperability", "ecosystem": "pypi", "ecosystems": [ "pypi" ], "primary_language": "Python", "languages": [ "Python", "C++" ], "topics": [ "deep-learning", "deep-neural-networks", "neural-network", "onnx", "pytorch", "tensorflow", "keras", "scikit-learn", "ml", "machine-learning", "dnn", "ai", "artificial-intelligence" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 21160, "forks": 3973, "watchers": 422, "monthly_downloads": null, "latest_score": 95, "latest_band": "excellent", "latest_scanned_at": "2026-07-17T00:44:18.902853Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "badge_url": "" } ] } }
Time Series data structure for Redis
RedisTimeSeries/RedisTimeSeries tiene un índice de salud de 78 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (92/100) y la más baja, AI Readiness (52/100). Se actualizó por última vez hoy. 4 personas concentran la mayor parte del trabajo reciente.
Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.
Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.
Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.
¿Está vivo el proyecto: se escribe código y se publican versiones?
| 36/36 | Recencia de push — último push hace 0 días |
| 27.7/36 | Cadencia de commits — 40/52 semanas con commits |
| 18/18 | Volumen de commits — 129 commits en el último año |
| 10/10 | OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10 |
| commits_last_year | 129 |
| human_commit_share | 1 |
| days_since_last_push | 0 |
| active_weeks_last_year | 40 |
| 27/27 | Publica versiones — 72 versiones publicadas |
| 36/36 | Recencia de las versiones — última versión hace 84 días |
| 19.8/27 | Cadencia de publicación — una versión cada ~53,7 días |
| 0/10 | OpenSSF Scorecard: Signed-Releases — sin datos |
| releases_count | 72 |
| latest_release_tag | v1.12.14 |
| releases_from_tags | no |
| days_since_latest_release | 84 |
| mean_days_between_releases | 53,7 |
¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?
| 49.1/60 | Estrellas — 1070 estrellas |
| 18/25 | Forks — 147 forks |
| 7.6/15 | Observadores — 24 observadores |
| forks | 147 |
| stars | 1070 |
| watchers | 24 |
| growth_state | unverified |
| growth_factor_pct | 100 |
| growth_unverified_reason | no_history |
| 22.5/22.5 | README |
| 16.9/22.5 | Licencia — archivo de licencia presente, no es una licencia reconocida |
| 18/18 | Guía CONTRIBUTING |
| 0/13.5 | Código de conducta |
| 0/7.2 | Plantilla de issues |
| 0/6.3 | Plantilla de PR |
| has_readme | sí |
| has_license | sí |
| has_contributing | sí |
| has_issue_template | no |
| has_code_of_conduct | no |
| has_pull_request_template | no |
¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?
| 43.2/54 | Factor bus — la mitad de los commits recae en 4 contribuyente(s) |
| 16.5/22.5 | Distribución de commits — el principal contribuyente firma el 26% de los commits |
| 13.5/13.5 | Amplitud de contribuyentes — 68 contribuyentes |
| 10/10 | OpenSSF Scorecard: Contributors — project has 12 contributing companies or organizations |
| bus_factor | 4 |
| contributors_sampled | 68 |
| top_contributor_share | 0,265 |
| 34.8/46.8 | Resolución de issues — 74% de issues cerradas |
| 30.7/38.3 | Aceptación de PR — 1301/1619 PR decididos fusionados |
| 13.5/15 | OpenSSF Scorecard: Code-Review — Found 29/30 approved changesets -- score normalized to 9 |
| merged_prs | 1301 |
| open_issues | 110 |
| closed_issues | 322 |
| issue_closed_ratio | 0,745 |
| closed_unmerged_prs | 318 |
| 30/30 | Respaldo de la propiedad — propiedad de una organización |
| 0/20 | Dominio verificado |
| 12.3/25 | Alcance del propietario — 50 seguidores de RedisTimeSeries |
| 20.3/25 | Trayectoria — 13 repos públicos, cuenta de ~7 años |
| followers | 50 |
| owner_type | Organization |
| is_verified | — |
| owner_login | RedisTimeSeries |
| public_repos | 13 |
| account_age_days | 2745 |
¿Existen unas prácticas mínimas de ingeniería y documentación?
| 24/24 | Flujos de trabajo de CI — 18 flujo(s) de trabajo |
| 24/24 | Pruebas presentes |
| 0/16 | Configuración de linter |
| 0/9.6 | Hooks de pre-commit |
| 0/6.4 | .editorconfig |
| 20/20 | OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10 |
| has_ci | sí |
| has_tests | sí |
| has_editorconfig | no |
| has_linter_config | no |
| has_precommit_config | no |
| 30/30 | README |
| 25/25 | Directorio de documentación |
| 15/15 | Sitio de documentación / página del proyecto — https://redis.io/docs/stack/timeseries/ |
| 10/10 | Descripción del repositorio |
| 10/10 | Topics — 5 topics |
| 10/10 | Wiki |
| topics | redis, redis-module, timeseries, redistimeseries, timeseries-database |
| has_wiki | sí |
| homepage | https://redis.io/docs/stack/timeseries/ |
| has_readme | sí |
| has_docs_dir | sí |
| has_description | sí |
¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?
| 7.5/7.5 | Binary-Artifacts — no binaries found in the repo |
| 0/7.5 | Branch-Protection — sin datos |
| 2.5/2.5 | CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10 |
| 0/2.5 | CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected |
| 6.8/7.5 | Code-Review — Found 29/30 approved changesets -- score normalized to 9 |
| 2.5/2.5 | Contributors — project has 12 contributing companies or organizations |
| 0/10 | Dangerous-Workflow — dangerous workflow patterns detected |
| 7.5/7.5 | Dependency-Update-Tool — update tool detected |
| 0/5 | Fuzzing — project is not fuzzed |
| 2.2/2.5 | Licencia — license file detected |
| 7.5/7.5 | Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10 |
| 5/5 | Packaging — packaging workflow detected |
| 0/5 | Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0 |
| 4.5/5 | SAST — SAST tool is not run on all commits -- score normalized to 9 |
| 5/5 | Security-Policy — security policy file detected |
| 0/7.5 | Signed-Releases — sin datos |
| 0/7.5 | Token-Permissions — detected GitHub workflow tokens with excessive permissions |
| 3.8/7.5 | Vulnerabilities — 5 existing vulnerabilities detected |
| source | openssf_scorecard |
| checks_evaluated | 16 |
| scorecard_version | v5.5.0 |
| checks_inconclusive | 2 |
| scorecard_aggregate | 6,1 |
| 35/35 | Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido |
| 0/25 | Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance |
| 0/40 | Sin avisos pendientes — ningún aviso tiene fecha de publicación |
| source | osv |
| advisories | 7 |
| affected_packages | 2 |
| assessed_packages | 7 |
| unassessed_packages | 10 |
| affected_by_severity | high 1, moderate 1 |
| direct_affected_packages | 0 |
¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.
| 0/45 | Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor |
| 0/15 | Documentación legible por máquinas (llms.txt) |
| 40/40 | Historial de commits legible — 96 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo) |
| has_llms_txt | no |
| legible_history_share | 0,96 |
| agent_instruction_files | — |
| agent_instruction_max_bytes | — |
| 18/18 | Arranque con un solo comando — Makefile, build/LibMR/Makefile, build/cpu_features/Makefile, build/docker/Makefile, build/dragonbox/Makefile, build/fast_double_parser_c/Makefile, build/hiredis/Makefile, build/libevent/Makefile, build/rmutil/Makefile, tests/unit/Makefile |
| 22/22 | Pruebas automatizadas |
| 0/11 | Configuración de lint / formato |
| 0/11 | Verificación estática de tipos |
| 10/10 | Entorno reproducible — Dockerfile |
| 10/10 | Práctica demostrada con agentes — 23 de los últimos 100 commits con autoría o crédito de agente |
| 0/8 | Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias |
| 0/10 | OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0 |
| has_nix | no |
| has_tests | sí |
| lockfiles | — |
| has_dockerfile | sí |
| typed_language | no |
| bootstrap_files | Makefile, build/LibMR/Makefile, build/cpu_features/Makefile, build/docker/Makefile, build/dragonbox/Makefile, build/fast_double_parser_c/Makefile, build/hiredis/Makefile, build/libevent/Makefile, build/rmutil/Makefile, tests/unit/Makefile |
| has_devcontainer | no |
| has_linter_config | no |
| typecheck_configs | — |
| agent_commit_share | 0,23 |
| toolchain_manifests | — |
| dependency_bot_commit_share | 0 |
| 0/45 | Código verificable por tipos — Python sin configuración de verificación de tipos |
| 52.2/55 | Tamaños de archivo manejables — 8/158 archivos fuente de más de 60 KB |
| primary_language | Python |
| largest_source_bytes | 188.205 |
| source_files_sampled | 158 |
| oversized_source_files | 8 |
Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.
Cada punto abarca 8 días.
Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).
| 10 | Binary-Artifacts | no binaries found in the repo |
| n/d | Branch-Protection | 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 |
| 10 | CI-Tests | 30 out of 30 merged PRs checked by a CI test -- score normalized to 10 |
| 0 | CII-Best-Practices | no effort to earn an OpenSSF best practices badge detected |
| 9 | Code-Review | Found 29/30 approved changesets -- score normalized to 9 |
| 10 | Contributors | project has 12 contributing companies or organizations |
| 0 | Dangerous-Workflow | dangerous workflow patterns detected |
| 10 | Dependency-Update-Tool | update tool detected |
| 0 | Fuzzing | project is not fuzzed |
| 9 | License | license file detected |
| 10 | Maintained | 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10 |
| 10 | Packaging | packaging workflow detected |
| 0 | Pinned-Dependencies | dependency not pinned by hash detected -- score normalized to 0 |
| 9 | SAST | SAST tool is not run on all commits -- score normalized to 9 |
| 10 | Security-Policy | security policy file detected |
| n/d | Signed-Releases | no releases found |
| 0 | Token-Permissions | detected GitHub workflow tokens with excessive permissions |
| 5 | Vulnerabilities | 5 existing vulnerabilities detected |
Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 0 paquetes directos y 17 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.
| Registro | Paquete | Versión | Relación |
|---|---|---|---|
| PyPI | addict | — | indirecta |
| PyPI | click | 7.0 | indirecta |
| PyPI | flask | — | indirecta |
| PyPI | flask-cors | 4.0.2 | indirecta |
| PyPI | gevent | 23.9.1 | indirecta |
| PyPI | jinja2 | — | indirecta |
| PyPI | jwt | — | indirecta |
| PyPI | pip | — | indirecta |
| PyPI | python-dateutil | 2.6.0 | indirecta |
| PyPI | ramp-packer | — | indirecta |
| PyPI | ramp-packer | 2.5.13 | indirecta |
| PyPI | redis | 2.10.5 | indirecta |
| PyPI | redis | 3.0.1 | indirecta |
| PyPI | redisbench-admin | — | indirecta |
| PyPI | setuptools | — | indirecta |
| PyPI | statistics | — | indirecta |
| PyPI | toml | — | indirecta |
Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 7 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 2 tienen avisos conocidos, de los cuales 0 son directas. 10 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido, o fuera de la lista de paquetes informada.
| Paquete | Versión | Relación | Gravedad | Avisos | Corregido en |
|---|---|---|---|---|---|
| click | 7.0 | indirecta | alta | 1 | 8.3.3 |
| flask-cors | 4.0.2 | indirecta | moderada | 6 | 6.0.0 |
Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.
{
"data": {
"repo": {
"topics": [
"redis",
"redis-module",
"timeseries",
"redistimeseries",
"timeseries-database"
],
"is_fork": false,
"size_kb": 15556,
"has_wiki": true,
"homepage": "https://redis.io/docs/stack/timeseries/",
"languages": {
"C": 909690,
"C++": 187,
"CMake": 8316,
"Shell": 127098,
"Python": 941834,
"Makefile": 29349,
"Dockerfile": 679,
"Go Template": 1534
},
"pushed_at": "2026-07-28T12:22:27Z",
"created_at": "2018-01-08T09:55:32Z",
"owner_type": "Organization",
"updated_at": "2026-07-28T12:59:56Z",
"description": "Time Series data structure for Redis",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "master",
"license_spdx_raw": "NOASSERTION",
"primary_language": "Python",
"significant_languages": [
"Python",
"C"
]
},
"owner": {
"blog": "https://redistimeseries.io",
"name": null,
"type": "Organization",
"login": "RedisTimeSeries",
"company": null,
"location": null,
"followers": 50,
"avatar_url": "https://avatars.githubusercontent.com/u/46897974?v=4",
"created_at": "2019-01-21T15:16:15Z",
"is_verified": null,
"public_repos": 13,
"account_age_days": 2745
},
"license": {
"state": "custom",
"spdx_id": null,
"raw_spdx": "NOASSERTION",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.12.14",
"kind": "patch",
"published_at": "2026-05-05T11:51:49Z"
},
{
"tag": "v1.8.23",
"kind": "patch",
"published_at": "2026-05-05T11:49:03Z"
},
{
"tag": "v1.10.24",
"kind": "patch",
"published_at": "2026-05-05T11:49:27Z"
},
{
"tag": "v1.8.19",
"kind": "patch",
"published_at": "2025-11-03T08:34:42Z"
},
{
"tag": "v1.10.20",
"kind": "patch",
"published_at": "2025-11-03T08:35:16Z"
},
{
"tag": "v1.12.9",
"kind": "patch",
"published_at": "2025-11-03T08:36:10Z"
},
{
"tag": "v1.8.17",
"kind": "patch",
"published_at": "2025-04-28T09:36:08Z"
},
{
"tag": "v1.10.17",
"kind": "patch",
"published_at": "2025-04-28T09:36:13Z"
},
{
"tag": "v1.12.6",
"kind": "patch",
"published_at": "2025-04-28T09:36:17Z"
},
{
"tag": "v1.8.16",
"kind": "patch",
"published_at": "2025-01-07T13:54:24Z"
},
{
"tag": "v1.10.16",
"kind": "patch",
"published_at": "2025-01-07T13:55:53Z"
},
{
"tag": "v1.12.5",
"kind": "patch",
"published_at": "2025-01-07T13:57:41Z"
},
{
"tag": "v1.8.14",
"kind": "patch",
"published_at": "2024-08-05T12:47:18Z"
},
{
"tag": "v1.10.13",
"kind": "patch",
"published_at": "2024-08-05T18:17:47Z"
},
{
"tag": "v1.12.2",
"kind": "patch",
"published_at": "2024-07-23T10:01:57Z"
},
{
"tag": "v1.12.1",
"kind": "patch",
"published_at": "2024-06-06T12:22:13Z"
},
{
"tag": "v1.10.12",
"kind": "patch",
"published_at": "2024-03-31T14:40:28Z"
},
{
"tag": "v1.8.13",
"kind": "patch",
"published_at": "2024-03-31T14:40:23Z"
},
{
"tag": "v1.10.11",
"kind": "patch",
"published_at": "2024-01-04T09:07:50Z"
},
{
"tag": "v1.8.12",
"kind": "patch",
"published_at": "2023-12-27T07:22:18Z"
},
{
"tag": "v1.10.9",
"kind": "patch",
"published_at": "2023-10-22T11:32:52Z"
},
{
"tag": "v1.10.6",
"kind": "patch",
"published_at": "2023-09-10T11:05:54Z"
},
{
"tag": "v1.10.4",
"kind": "patch",
"published_at": "2023-07-23T09:56:07Z"
},
{
"tag": "v1.8.11",
"kind": "patch",
"published_at": "2023-07-10T15:39:13Z"
},
{
"tag": "v1.10.2",
"kind": "patch",
"published_at": "2023-07-10T15:43:51Z"
},
{
"tag": "v1.10.1",
"kind": "patch",
"published_at": "2023-06-15T11:37:30Z"
},
{
"tag": "v1.10.0",
"kind": "minor",
"published_at": "2023-05-14T09:35:05Z"
},
{
"tag": "v1.8.10",
"kind": "patch",
"published_at": "2023-04-23T17:53:24Z"
},
{
"tag": "v1.8.9",
"kind": "patch",
"published_at": "2023-03-10T06:42:09Z"
},
{
"tag": "v1.8.8",
"kind": "patch",
"published_at": "2023-03-01T14:36:36Z"
},
{
"tag": "v1.6.19",
"kind": "patch",
"published_at": "2023-02-21T07:24:22Z"
},
{
"tag": "v1.8.5",
"kind": "patch",
"published_at": "2023-01-12T11:48:31Z"
},
{
"tag": "v1.8.4",
"kind": "patch",
"published_at": "2022-12-28T17:28:37Z"
},
{
"tag": "v1.8.3",
"kind": "patch",
"published_at": "2022-11-30T08:49:08Z"
},
{
"tag": "v1.8.2",
"kind": "patch",
"published_at": "2022-10-30T11:16:58Z"
},
{
"tag": "v1.8.1",
"kind": "patch",
"published_at": "2022-10-11T14:53:51Z"
},
{
"tag": "v1.6.17",
"kind": "patch",
"published_at": "2022-07-25T08:14:16Z"
},
{
"tag": "v1.8.0",
"kind": "minor",
"published_at": "2022-07-11T19:32:30Z"
},
{
"tag": "v1.6.16",
"kind": "patch",
"published_at": "2022-06-30T08:21:42Z"
},
{
"tag": "v1.6.13",
"kind": "patch",
"published_at": "2022-06-02T07:50:56Z"
},
{
"tag": "v1.6.11",
"kind": "patch",
"published_at": "2022-05-29T08:09:12Z"
},
{
"tag": "v1.6.10",
"kind": "patch",
"published_at": "2022-05-16T13:47:59Z"
},
{
"tag": "v1.6.9",
"kind": "patch",
"published_at": "2022-02-27T12:00:58Z"
},
{
"tag": "v1.4.14",
"kind": "patch",
"published_at": "2022-02-06T12:15:07Z"
},
{
"tag": "v1.6.8",
"kind": "patch",
"published_at": "2022-01-27T07:54:14Z"
},
{
"tag": "v1.6.3",
"kind": "patch",
"published_at": "2021-12-29T07:17:02Z"
},
{
"tag": "v1.4.13",
"kind": "patch",
"published_at": "2021-11-08T15:34:11Z"
},
{
"tag": "v1.4.11",
"kind": "patch",
"published_at": "2021-11-03T14:54:16Z"
},
{
"tag": "v1.6.0",
"kind": "minor",
"published_at": "2021-08-26T09:29:36Z"
},
{
"tag": "v1.4.10",
"kind": "patch",
"published_at": "2021-07-15T06:34:44Z"
},
{
"tag": "v1.4.9",
"kind": "patch",
"published_at": "2021-05-15T09:29:42Z"
},
{
"tag": "v1.4.8",
"kind": "patch",
"published_at": "2021-03-17T10:28:47Z"
},
{
"tag": "v1.4.7",
"kind": "patch",
"published_at": "2020-12-05T09:49:00Z"
},
{
"tag": "v1.4.6",
"kind": "patch",
"published_at": "2020-11-17T08:23:35Z"
},
{
"tag": "v1.4.5",
"kind": "patch",
"published_at": "2020-09-16T15:12:28Z"
},
{
"tag": "v1.4.3",
"kind": "patch",
"published_at": "2020-08-24T13:19:57Z"
},
{
"tag": "v1.4.2",
"kind": "patch",
"published_at": "2020-07-19T16:37:38Z"
},
{
"tag": "v1.4.1",
"kind": "patch",
"published_at": "2020-06-27T03:44:50Z"
},
{
"tag": "v1.2.7",
"kind": "patch",
"published_at": "2020-06-15T12:11:46Z"
},
{
"tag": "v1.2.6",
"kind": "patch",
"published_at": "2020-05-28T15:54:31Z"
},
{
"tag": "v1.2.5",
"kind": "patch",
"published_at": "2020-03-15T16:23:29Z"
},
{
"tag": "v1.2.3",
"kind": "patch",
"published_at": "2020-02-06T19:42:11Z"
},
{
"tag": "v1.2.2",
"kind": "patch",
"published_at": "2020-01-29T09:51:22Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2020-01-02T13:02:29Z"
},
{
"tag": "v1.0.3",
"kind": "patch",
"published_at": "2019-09-19T21:00:15Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2019-07-23T08:23:55Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2019-06-27T13:36:19Z"
},
{
"tag": "v0.99.1",
"kind": "patch",
"published_at": "2019-06-23T09:41:33Z"
},
{
"tag": "v0.99.0",
"kind": "minor",
"published_at": "2019-06-14T17:10:54Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2019-03-27T10:44:03Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2019-03-03T22:09:41Z"
},
{
"tag": "v0.1.0-alpha1",
"kind": "prerelease",
"published_at": "2019-01-20T11:24:01Z"
}
],
"recent_commits": [
{
"oid": "008f5a9b692d466c0e78fc58c6be52deb2e500a0",
"body": "…es (#2088)\n\n* MOD-16399 Test long-form CLUSTERSET no-op\n\nPin LibMR PR #104 and cover the DMC long-form topology path. Verify an identical CLUSTERSET preserves the current LibMR run ID while an endpoint change rebuilds the cluster.\n\n* MOD-16399 Re-pin LibMR argument guard\n\nUpdate the dependency to t\n[…]\novers embedded NUL bytes.\n\n* MOD-16399 Explain run ID no-op assertion\n\n* MOD-16399 Pin merged LibMR master\n\nReplace the temporary PR-head pin with c6a5ed62, the merged #104 commit now on LibMR master.",
"is_bot": false,
"headline": "MOD-16399 Bump LibMR: skip rebuilds for unchanged CLUSTERSET topologi…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-27T17:45:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5944c9283caa37935777eb26d8788a37610cb4d7",
"body": null,
"is_bot": false,
"headline": "squash (#2128)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-27T09:58:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a50d901af7d1fd7553f38ad82a46573120423a75",
"body": "Add a flow regression that verifies an obsolete short-form CLUSTERSET cannot discard topology installed by a topology event. Pin LibMR to master containing the fix from RedisGears/LibMR#119.",
"is_bot": false,
"headline": "MOD-16382 Test CLUSTERSET after topology events (#2131)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-27T08:58:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fae002e8a1fae4e16234a8454569624353e3c595",
"body": "Also:\n* Refactor tests: move (and add) helpers to utils.py; also added helper dump functions for debugging\n* Add topology-events flow tests and supporting helpers\n* Add ts-topology-events config (immutable) and pass it to LibMR\n* Fixed a UAF bug when a client is unblocked while worker still uses some of its query params\n* New added_slaves_to_cluster replicas with the masters' config since LibMR doesn't do slaves correctly on clusters",
"is_bot": false,
"headline": "MOD-16382 Add flow tests for topology events (#2121)",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2026-07-27T08:20:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3fbfae152ef889fd27045ac088220c6933df366d",
"body": "* MOD-17095 Add tls cluster tests leg\n\n* .\n\n* Retrigger CI with docker-image-changes label\n\nEmpty commit to force a fresh synchronize event so CI re-evaluates\nPR labels and builds the Docker image locally (BUILD_TLS=yes) instead\nof pulling the stale prebuilt image.\n\n* update libMR\n\n* update libmr",
"is_bot": false,
"headline": "MOD-17095 Add tls cluster tests leg (#2126)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-07-26T07:51:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "40748fdb5a430c639f223f86b7ded308c382074c",
"body": "…#2130)",
"is_bot": false,
"headline": "MOD-17016 Disable topology events handling in ts under RE (for now) (…",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2026-07-25T08:23:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ddf2ae8f99426df30057e823faf7d83a5873665",
"body": "…pr-2116-tests-0wmm4d\n\nRevert topology-change flow tests from #2116",
"is_bot": false,
"headline": "Merge pull request #2125 from RedisTimeSeries/claude/redistimeseries-…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-21T08:29:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d74df6411e530609f64c6d94ac4d5f0fc2ea486c",
"body": "…d save already in progress to give enough time to existing rdb save to finish (#2124)\n\n* disabling the auto rdb save so no \"Background save already in progress\" happens\n\n* keep server saiving auto approach\nand create a while loop in the test that waits untill there are no active rdb save\n\n* add assert line after 2 sec",
"is_bot": false,
"headline": "MOD-16265 - retry the dumpAndReload() for max 2 sec so no \"Backgroun…",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-20T07:09:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "01d59afb14680532439eac2885f80730ae14ca13",
"body": "* MOD-16382 Additive topology-change tests\n\nNow that the MOD-16382 module code + ts-topology-events config landed on master\n(#2104), this PR carries only the net-new tests:\n\n- tests/flow/test_topology_changes.py: 7 non-cluster CLUSTERSET reconcile tests\n (slot-range move, node add/remove, ip/port c\n[…]\n#113).\n\nThe oss_cluster sanitizer leg is therefore EXPECTED red on this PR.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-16382 Add topology-change flow tests (consolidated) (#2116)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-19T11:06:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ce8be8aae4524ab535904b6b3629d24f49c1faef",
"body": "* MOD-16382 Handle topology-change notifications\n\nCleanup - remove a stale function that was used for the (no longer supported) ts-global-password config\n\n* Use l&g version of modules sdk\n\n* Added a log-only cluster-topology callback\n\n* Use version of libmr from a side branch\n\n* Added the actual cal\n[…]\n tests that are designed for the older (command-based) changes\n\n* update to libMR master\n\n---------\n\nCo-authored-by: Tom Gabsow <gabsow.tom@gmail.com>\nCo-authored-by: Tom Gabsow <tom.gabsow@redis.com>",
"is_bot": false,
"headline": "MOD-16382 Handle topology-change notifications (#2104)",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2026-07-16T19:01:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b8ff52e542e3fdc11c06a50b4538ab7774e6a365",
"body": "* change to 4 parralel jobs\n\n* test\n\n* unite build and push\n\n* revert patchs",
"is_bot": false,
"headline": "fix ubuntu hangs (#2115)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-16T10:13:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93ccac0ef9e070bf035a74177d0091ddaaf1d109",
"body": "* squash\n\n* try to fix the apt hangup",
"is_bot": false,
"headline": "MOD-16364 - update requirements deps (#2108)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-16T08:26:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c2f591b502b34c583cac3fd0019a17f309c9d33",
"body": "* upload imagw to registry patch\n\n* add new flow to push image to registry\n\n* dix runner\n\n* push the image to time series\n\n* rename dir\n\n* change the flow-linux.yml\nso jammy job will pull image instead of building it\n\n* fix auth\n\n* remove pull request path\n\n* full linux matrix\n\n* fix\n\n* patch: trigg\n[…]\ne push images checkk\n\n* (test): new PR will not release existing image\n\n* make it runs if change in the version\n\n* fix remarks\n\n* fix remarks\n\n* fix the flow to meet the new requirments\n\n* fix remarks",
"is_bot": false,
"headline": "MOD-16306 - use registry for pulling / pushing docker images (#2098)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-15T13:28:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ca3375a9f00e84733f244640c278688d1005b0ed",
"body": "…… (#2109)\n\n* MOD-16873 `TS.INCRBY` replicate master timestamp when timestamp is local server clock\n\n* .",
"is_bot": false,
"headline": "MOD-16873 `TS.INCRBY` replicate master timestamp when timestamp is lo…",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-07-15T13:13:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "77b634ddd785a9d21b4099520acf4db1df6075e9",
"body": "…… (#2090)\n\n* MOD-16370 Intreduce `TS.QUERYLABELS`: Get a list of labels and label-values\n\n* CR + Format\n\n* fix test\n\n* CR\n\n* CR\n\n* format\n\n* CR\n\n* format\n\n* use try calloc\n\n* add GEARS protocol support",
"is_bot": false,
"headline": "MOD-16370 Introduce `TS.QUERYLABELS`: Get a list of labels and label-…",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-07-13T12:16:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0576b6ede8e94a70f424aca869cf513665f32758",
"body": "…g standalone) (#2089)\n\nsetup-python.sh's uv venv otherwise downloads uv's standalone musl CPython,\nwhich is clang-built and bakes --rtlib=compiler-rt into its sysconfig; sdist-\nonly test deps lacking musl wheels (psutil via rltest) then fail to compile\nwith Alpine's gcc. Pin SETUP_PYTHON_VERSION to Alpine's own python3 (installed\nwith python3-dev) and forbid uv downloads. Mirrors the EL8 python pin.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(alpine): use distro python3 for the test venv (avoid uv musl clan…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-12T11:23:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "dbb7ce4fd202c4163959a9fa40cd8e2d1d627690",
"body": "* ci: add code-coverage job to the nightly (lcov -> Codecov)\n\nThe repo already has the coverage plumbing (`make coverage`, COV=1 -> gcov,\ncodecov.yml, lcov in the build image) but it was never wired into CI. Add a\nnightly coverage job:\n\n- New reusable flow-coverage.yml: builds the jammy image, runs\n\n[…]\nn resolve the\nPR base for accurate diff coverage.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: add code coverage to CI — PR + nightly (lcov -> Codecov) (#2070)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-09T10:12:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0d46cacd8ee5257ceda2517790e6d7788a89e0f0",
"body": "* add EXCLUDEEMPTY flag to TS.MRANGE / TS.MREVRANGE\n\nFiltering is applied per inner shard (not the coordinator), consistent\nwith how aggregation and FILTERBY are handled. The standalone path\nfilters in replyUngroupedMultiRange. EXCLUDEEMPTY and GROUPBY are\nmutually exclusive.\n\n* fix remarks\n\n* aplly changes to make the check fo empty series more effiecient\n\n* dix code remarks\n\n* add to command info",
"is_bot": false,
"headline": "MOD-16172 - support exclude empty in mrange commands (#2072)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-08T11:37:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b54cdcef3ace43be379295bc26889038a0213eb7",
"body": null,
"is_bot": false,
"headline": "MOD-16653 Prevent more heap overflow + other rdb load asserions (#2086)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-07-05T12:04:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "049d00dcc9e8611b677d5a5589e5bd7bfdc894c7",
"body": "* install aws if and only if it is not installed yet\n\n* add another build fixes\n\n* fix build for amazonlinux2\n\n* fix(al2): add cc symlink to devtoolset-11 to fix LTO version mismatch\n\n* alma8 +rhel8+rhel9+bionic +focal passes\n\n* fix for bionic\n\n* fix\n\n* fix the bionix botstrap\n\n* bionic fix\n\n* fix for bullesye\n\n* fix for focal\n\n* fix focal\n\n* fix for focak\n\n* fix for bionic & focal\n\n* fix for focal\n\n* fix remarks\n\n* fix remarks\n\n* try another methood",
"is_bot": false,
"headline": "MOD-16514 - fix bootstrap & build for all os (#2082)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-05T09:15:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d16dbd663cde28d77742cd6be0d166f389b72b4",
"body": "* nrange support multi agg\n\n* add some tests\n\n* formatting\n\n* flatten response for multi arggs\n\n* save\n\n* nrange cp inly inner agg\n\n* fix the bad indexing\n\n* formatting\n\n* code review\n\n* fix remarks\n\n* fix remarks\n\n* test the cross slot error\n\n* fix remarks",
"is_bot": false,
"headline": "MOD-16299 - NRANGE support multiple aggregations (#2079)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-07-02T10:35:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c94501f21b12e76498513018f3b09548dc05665c",
"body": "test_asm_with_data_and_queries_during_migrations occasionally fails on the\nmacos-15-intel nightly runner: it gets LibMR's 5s max-idle (\"did not reply\nwithin the given timeframe\") instead of the expected \"Query requires\nunavailable slots\", tripping the assert at test_asm.py:70.\n\nRoot cause is runner \n[…]\nport the matrix runner label as RUNNER_LABEL and skip only this one test on\nmacos-15-intel. Coverage is preserved everywhere else.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-14615: skip test_asm migration-query test on macos-15-intel (#2084)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-02T07:26:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a48abf374508fca85fe56f97378683cd986f529f",
"body": "…tion (#2083)\n\ntest_asm_with_data_and_queries_during_migrations flaked on the valgrind oss_cluster\nnightly with a multi-shard max-idle (\"did not reply within the given timeframe\").\n\nRoot cause: the hosted runner runs the flow suite at --parallelism nproc, and each\nredis-server is ~30x slower under v\n[…]\nerified: with PARALLEL=0 the valgrind oss_cluster shard went 435/435 green at the\ndefault 5s (run 28498734942), no timeout change.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-14615: run valgrind test suite serially to avoid CPU oversubscrip…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-07-01T17:21:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "22c471efe5ff702d2080d0e1ed4f20f3d2989e02",
"body": "* Rename TS.BGET to TS.READ with updated blocking syntax\n\n## Motivation\n\nTS.BGET used a required positional `timeout` argument, with timeout=0\nmeaning \"do not block\". This conflated two distinct concepts (blocking\nvs. timeout duration) in a single value, and made the non-blocking\ncase look like a de\n[…]\nad.py: all call sites updated\n to new syntax; bad_argv test rewritten for new validation paths;\n non-blocking test updated (no BLOCK = immediate return)\n\n* enhance tests\n\n* formatting\n\n* fix remarks",
"is_bot": false,
"headline": "MOD-16505 - change TS.BGET command to TS.READ (#2081)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-25T10:35:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "badcf8acc4f022e8ae8641f4eeb0a8e8eb943315",
"body": "* applly agg in the inner shards when no groupby requested - mrange\n\n* make all the agg be done in the inner shard\n\n* add tests\n\n* clean groupby from inner shard\n\n* add tests\n\n* add some more tests\n\n* tests rename\n\n* squash\n\n* fix multi agg as well\n\n* formatting\n\n* use redismodule api for responding\n[…]\n\n* chore: revert deps/LibMR to master's commit\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* reverted libmr change\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-15565 - mrange aggregation execution in inner shards (#2074)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-24T14:24:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a0f71da64e23ef3c3637895c97ffa479d6803ba5",
"body": "* fix(tests): bound blocking waits in flow tests to prevent CI hangs\n\nSeveral flow tests could block indefinitely when a dependency stalled\n(a never-replying shard, an unacked replica, a node that never joins),\nrunning into the 6h CI job timeout instead of failing. Add finite,\nValgrind-aware bounds \n[…]\ntead of escalating to SIGKILL after ~20s. Fixed all remaining\n17 files.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-16266 - fix ci hang (#2066)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-17T12:51:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "00c646b4412e1406eab1883995f1dc95e3e265b8",
"body": "…allback) (#2067)\n\n* TS.INFO memoryUsage (and MEMORY USAGE, via the mem_usage callback)\nunder-reported per-key memory, leading to wrong capacity estimates when\nprospects size one series and multiply by the planned key count.\n\nResolves the two remaining items of MOD-6409:\n\n- #7 key name: count series\n[…]\nMallocSizeDict, so\n the figure is an estimate.\n\n* add comment that indicate that the labels->series mapping effect the size mem usage of key and in may change upon other keys change\n\n* add some tests",
"is_bot": false,
"headline": "MOD-6409 - TS.INFO memoryUsage (and MEMORY USAGE, via the mem_usage c…",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-17T11:50:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cfcd4e73ef110261b89d6b20a3412d36fb538547",
"body": "* ci: shard valgrind tests across parallel runners\n\nThe full valgrind PR run executes all five test topologies (general,\nslaves, AOF, AOF+slaves, OSS cluster) sequentially in a single job,\ntaking ~4h on a standard runner — unworkable as a PR gate.\n\nNo larger x64 runner is provisioned for the org (tr\n[…]\ne full 6-variant macOS matrix still runs nightly.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: speed up Event CI (lean PR gate) and shard slow nightly jobs (#2068)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-06-17T08:56:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8f2a3a6bb4e01f48d1f04686ed70433eda8bdcd6",
"body": "… (#2065)\n\n* MOD-15749 Advertise short_form_clusterset capability in RAMP manifest\n\nAdd `short_form_clusterset` to the module's RAMP capabilities so Redis\nEnterprise / DMC can discover that this build accepts the zero-arg short\nform of CLUSTERSET (which relies on RedisModule_GetClusterNodeSlotRanges\n[…]\n) and #98 (detect oss cluster at MR_ClusterInit).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-15749 Short-form CLUSTERSET: RAMP capability + LibMR error-return…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-06-16T11:09:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "04cb2fcec96f3ac5772e54f2f4cd25e06dfd22e4",
"body": "* ci: bump GitHub Actions to Node24-compatible versions\n\nGitHub is removing Node20 from runners on 2026-06-16 (default switch to\nNode24), with full removal in fall 2026.\nSee https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/\n\nBumps to the lowest Node24-compati\n[…]\nt. Pass the secret via the `token` input instead.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: bump GitHub Actions to Node24-compatible versions (#2035)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-06-16T08:50:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b1c4085dbdec055ef58bb0b59e8b3c04d68d40d2",
"body": "* fix(bget): wake parked TS.BGET clients on key deletion\n\nNightly CI was hitting the 6h job timeout on a random x64 distro per\nrun. Root cause: TS.BGET clients parked on a key are never woken when\nthe key is removed (DEL/FLUSHALL/expire/eviction) — they wait out their\nuser-supplied timeout, and the \n[…]\nockClientOnKeysWithFlags so deleted key will be signaled as well\n\n* add tests to examine the key del behaviour\n\n* increas timeout\n\n* fix remarks\n\n* use RedisModule_KeyExists instead of opening the key",
"is_bot": false,
"headline": "MOD-16160 - wake parked TS.BGET clients on key deletion (#2062)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-15T06:12:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "062f3691d830e6dea22956eb71a7edbe56b87d07",
"body": "* Disable _FORTIFY_SOURCE when building Redis for Valgrind runs\n\nThe Valgrind nightly fails on replica nodes with \"Source and destination\noverlap in memcpy_chk\" originating in redis-core (readSyncBulkPayload,\nreplication.c). The underlying source uses memmove() correctly, but under\n-O2/-O3 the distr\n[…]\n sanitizer, non-Valgrind jammy) are\nunchanged and keep fortification. Redis stays optimized; no source change\nand no Valgrind suppressions needed.\n\n* unite make build and make install into single line",
"is_bot": false,
"headline": "pass VG=1 flag to the build as well (#2060)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-14T16:57:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ccdcd46e47dec2a9b57fcf72bce9460cf9c3c88f",
"body": "Read the Redis git ref used for builds/tests from a new explicit\nredis_ref field in pack/ramp.yml instead of inferring it from\ncompatible_redis_version (which encodes RAMP packaging semantics, not\nCI test targets). This removes the version-mapping logic that mapped the\n99.99 / 99.99.99 dev placehold\n[…]\n workflow_dispatch description already referenced\nthis field; the script now actually reads it.\n\nhttps://claude.ai/code/session_01W3PvE6uwbJJPoq86DzHrLK\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Use dedicated redis_ref field in ramp.yml for CI git ref (#2059)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-06-14T06:35:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "90b3e6a7081f56ab94b8797e9fa19694124ab225",
"body": "…VRANGE (#2057)\n\nAdd the dont_cache tip to TS.BGET and remove it from TS.NRANGE/TS.NREVRANGE.\n\n- TS.BGET gets dont_cache: the `$` cursor resolves to lastTimestamp+1 at\n command-receipt time, so a cached reply can be served after the cursor\n should have advanced with no key modification to invalida\n[…]\nn track and invalidate them, making replies cacheable.\n- Filter-based MRANGE/MREVRANGE keep dont_cache (keys not known to client).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-16160 Fix client-side cache tips for TS.BGET and TS.NRANGE/TS.NRE…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-06-11T19:04:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8d337d484ae33c2b8d536492b47eef3784eb50ee",
"body": "* add min max count fields to the command with default valus\n\n* fix + for timestamp\n\n* add $ support\n\n* formatting\n\n* address review remarks: arity check, header comments, max_count flush test\n\n- reject odd optional-arg counts (5/7 argc) in parse_bget_args\n- update stale TS.BGET header + BGET_ARGV_T\n[…]\n — the MAX_COUNT cap can never bite on that path.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-16160 -update blocking get syntax (#2054)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-11T17:45:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0bb7e19350e03d17f219f8d42901783bbf4f7b4c",
"body": "* working\n\n* add tests\n\n* add tests\n\n* add comment for min heap\n\n* fix remarks\n\n* add comprehensive tests that compare rangex and revrangex with range and revrange\n\n* add the commands to command json\n\n* add ts.info\n\n* fix remaeks\n\n* apply the changes\n\n* fix ci\n\n* update the syntax\n\n* fix the test to\n[…]\nting for single-key TS.RANGE; TS.NRANGE widened it\nwith many user-named keys. Fixed by passing argv + start_index to the\noption sub-parsers so keys before from/to are no longer scanned.\n\n* fix comment",
"is_bot": false,
"headline": "MOD-15893 - Nrange new command (#2052)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-11T13:48:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7ebbccb70d198a7fac8e8404dc2083792e989ebf",
"body": "* Fix filter-blind neighbor lookups in EMPTY aggregation\n\nThe empty-bucket fill looked up neighbor samples without applying\nFILTER_BY_VALUE/FILTER_BY_TS, causing several bugs:\n\n- OOM crash: a filtered-out sample made an edge gap look interior, so\n the fill ran to endTimestamp (+) and the bucket cou\n[…]\npply\nthem in the neighbor lookups; use the bucket start for the suffix fill.\nAdded stress tests for all non-twa aggregators.\n\n* remove the applyfilter from function declaration\n\n* add oom test for twa",
"is_bot": false,
"headline": "MOD-16224 Fix filter-blind neighbor lookups in EMPTY aggregation (#2056)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-11T10:17:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1cb4f677e22da55d923104df7b9d1f8d5221088d",
"body": "* cherry pick the fix non twa aggregation\n\n* add multi agg tests\n\n* code review\n\n* formatting\n\n* fix remarks\n\n* formatting",
"is_bot": false,
"headline": "MOD-8187 - fix non twa aggregation (#2053)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-10T19:48:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "906b41d7778e84e48d3ba18e577ed6bbcdf2f72b",
"body": "* Merge pull request #79 from redislabsdev/tal.ba/sec/rdb_load_unbouded\n\nMOD-15899 - RDB load: non-aborting allocation for chunk/rule loaders\n\n* RDB load: non-aborting allocation for labels loader\n\nThe labels buffer in series_rdb_load was allocated with calloc, which is\nmonkey-patched to the aborting RedisModule_Calloc in the module build\nSwitch to rts_try_calloc (non-aborting, returns NULL on OOM).",
"is_bot": false,
"headline": "MOD-15899 - oom try calloc (#2051)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-04T09:37:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93c2d6fae2a84c37938df5a742de4cf1ab911671",
"body": "* CI: add on-demand OSS cluster (multi-shard) benchmark trigger\n\nThe recurrent benchmark runner only exercised oss-standalone setups, so the\nmulti-shard TS.MRANGE speedups (e.g. 8.6 vs 8.8) were never measured in CI even\nthough the benchmark definitions already declare the oss-cluster-* topologies.\n\n[…]\nan the workflow ref, so cross-version comparison\ndata is labeled correctly.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "CI: trigger OSS cluster (multi-shard) benchmarks on demand (#2050)",
"author_name": "Filipe Oliveira (Redis)",
"author_login": "fcostaoliveira",
"committed_at": "2026-06-03T09:59:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "edcef6b7dae751d58bdea02ddc1a3dbb33968176",
"body": "…or CI (#2045)\n\n* Centralize Redis ref into a single source-of-truth file for CI & dockers\n\n* use ramp.yml file\n\n* Fix script-injection in prepare-values (SonarCloud high-severity)\n\nPass the workflow_dispatch redis-ref input through an env var instead of\ninterpolating ${{ inputs.redis-ref }} directl\n[…]\ne.)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* use compatible_redis_version for redis-ref\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-15999 - Centralize Redis ref into a single source-of-truth file f…",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-06-02T10:23:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3b88a0e8770fb91f8562eb48edcca8d2d240b67d",
"body": "* CI: switch flow-linux arm64 runner to org-level-ubuntu24-arm64-2-8\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* CI: use standard ubuntu-24.04-arm runner for flow-linux arm64\n\nThe org-level runner pool still queued jobs without picking them up.\nSwitch to GitHub's standar\n[…]\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nCo-authored-by: Tom Gabsow <gabsow.tom@gmail.com>",
"is_bot": false,
"headline": "CI: switch flow-linux arm64 runner to standard ubuntu-24.04-arm (#2048)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-06-02T07:20:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e6ca975471993a5de8903b34ce6a6f0d8b85852b",
"body": "…2044)\n\nThe Makefile CC_DEFS list contained DREDISMODULE_MAIN (typo introduced\nby MOD-8014 / 4145c70b in 2024-08-22). The harness auto-prefixes -D\nto each entry, so this was defining a dead macro called\nDREDISMODULE_MAIN instead of the intended REDISMODULE_MAIN.\n\nResult: RTS .c files compiled with R\n[…]\nrFromUserName, FreeString,\nACLCheckKeyPrefixPermissions) now have C (common) storage in\nmodule.o without any common.h declaration.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix REDISMODULE_MAIN typo + drop common.h forward-decl workarounds (#…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-06-01T10:52:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b0ecf8a8cbb903cd227ce61db46735f01486a3b9",
"body": "… add tests (#2034)\n\n* Link to new version of LibMR with optional AUTH\n\n* Add an option to create an oss-cluster env without sending the initial REFRESHCLUSTER\n\n* Added a test for the new short form of CLUSTERSET\n\n* MOD-15749 Bump deps/LibMR to master (short-form CLUSTERSET landed)\n\nPicks up the mer\n[…]\nd locally: test passes in 6 seconds against redis unstable\n(post-#14953) on macos-arm64.\n\n---------\n\nCo-authored-by: Tom Gabsow <gabsow.tom@gmail.com>\nCo-authored-by: Tom Gabsow <tom.gabsow@redis.com>",
"is_bot": false,
"headline": "MOD-15749 Link to new version of LibMR with short-form CLUSTERSET and…",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2026-05-27T12:24:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d51b119dbfbc56565d1ff79d68dd7e7c264c6375",
"body": "* fix the iterator\n\n* formatting\n\n* fix remarks",
"is_bot": false,
"headline": "MOD-8187 - fix the aggregation bugs (fix reverse iterator) (#2036)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-05-26T11:18:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42155dbf297f96ea68bdd480c57feb0b92f677b7",
"body": "* save\n\n* save\n\n* add tests\n\n* fix leak\n\n* response when blocking client fails\n\n* add - + support\n\n* cleaning the blocking key after finish execution\n\n* fix remarks\n\n* add tests\n\n* remode b get docs duplication\n\n* fix the remarks\n\n* fix command.json\n\n* formatting\n\n* fix the overflaw\n\n* formatting",
"is_bot": false,
"headline": "MOD-15728 - Tal.ba/feat/blocking get (#2028)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-05-26T06:44:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8bdd22387383b7901ab20bbdc3beae9b99d52d43",
"body": "* squash\n\n* remove dependenceis yaml and put everything in scripts\n\n* update module.conf\n\n* fix the action.yml to avoid new pip install\n\n* cleanup\n\n* remarks fix\n\n* fix cursor remarks\n\n* fix\n\n* sets.sh->package.sh\n\n* fix\n\n* update gitignore\n\n* rename sets.sh to packages.sh\n\n* install awscli for docker\n\n* update",
"is_bot": false,
"headline": "MOD-15731 - modules modernization alignment (#2027)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-05-25T06:30:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63cf81ae4e733cac4f9c6371dc6e723b55f12d47",
"body": "…d commands (#2031)\n\n* MOD-15741 MOD-14091 - add dont-cache command tip to non-cacheable read commands\n\nPer the CSC capabilities alignment PRD, mark read commands that are not\npractical to client-side cache with the dont-cache tip:\n\n- TS.INFO: returns memory usage and chunk stats (non-deterministic)\n[…]\n (nondeterministic_output, request_policy, etc.).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "MOD-15741 MOD-14091 - add dont-cache command tip to non-cacheable rea…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-05-24T16:36:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d3642aa9e699c15cd79465de04b88aaaa4331b0d",
"body": "* make one generic getUser function\n\n* fix build\n\n* save\n\n* update\n\n* make the user get\n\n* formmating\n\n* fix remarks",
"is_bot": false,
"headline": "MOD-15105 make one generic getUser function (#1981)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-05-19T12:36:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b1827c220edbc0813b1c5bbdccb8aa041079f66",
"body": "* MOD-14420 fix count reducers return wrong NaN\n\n* fix empty issue\n\n* format",
"is_bot": false,
"headline": "MOD-14420 fix count reducers return wrong NaN (#2013)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-05-05T11:43:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2a79c3a3d54a1ac71abbdae0e5390932ecd94d6",
"body": "…zer (#1979)\n\nAlso fixed an (unrelated) assert syntax",
"is_bot": false,
"headline": "MOD-14239 Ignore known init-rdbchannel migration timeout under saniti…",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2026-05-05T08:25:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d4a01e79611c9c3049c21005d9e85988d58a20c",
"body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "RED-180951 RED-180027 fixing bugs and improving the code (#2004)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-05-05T05:23:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d73282db7bb2322429440ef4c4750e4101792e0a",
"body": "* remove bionic os support\n\n* remive bionic for 8.8 & master only",
"is_bot": false,
"headline": "MOD-15020 - remove bionic os support (#1983)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-05-04T14:56:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c371e15c58615390cc6d0e4e380dcea230894a7",
"body": "Add paths-ignore for src/version.h on pull_request so version-only\nPRs do not trigger the full matrix.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "ci: skip Event CI when pull request only changes src/version.h (#1984)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-05-04T08:17:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "de204c28361be5317454f8c8bd1c57dd94bf9fc0",
"body": "… changes (#1975)\n\n* udate getUserUserName api\n\n* formatting\n\n* remove free\n\n* align redismodules sdk master\n\n* revert free remove",
"is_bot": false,
"headline": "MOD-15262 - Align TimeSeries with the RedisModule_GetUserUserName API…",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-05-04T04:54:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc3871c5c01a5ce6ee8e0688d3ed565ded41c636",
"body": "Bullseye (and other Debian/Ubuntu) Docker builds intermittently fail in\nthe dev nightly with `Connection reset by peer` from deb.debian.org /\narchive.ubuntu.com (Fastly CDN). Configure apt with Acquire::Retries=3\nand 30s http/https timeouts via /etc/apt/apt.conf.d/80-retries so all\nsubsequent apt / apt-get / add-apt-repository calls tolerate transient\nCDN drops.\n\nApplied to: bullseye, bookworm, trixie, focal, jammy, noble, bionic.\n\nMade-with: Cursor",
"is_bot": false,
"headline": "MOD-14715 add apt retries/timeouts to Debian/Ubuntu Dockerfiles (#1965)",
"author_name": "LiranAbir",
"author_login": "LiranAbir",
"committed_at": "2026-04-26T07:25:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e8a07258dcf14f85f0e5a32c0232ce8a1ae511a3",
"body": null,
"is_bot": false,
"headline": "MOD-14850 Bump libmr (#1962)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-04-21T07:23:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "baaf423f4b0aead1ddf1a5fc4ae7ec1c32577cae",
"body": "… not aligned with new redis-core changes (#1940)\n\n* check if the api is exist beofre using it\n\n* format fix\n\n* fix remarks\n\n* use define for the api validation\n\n* fix formmating",
"is_bot": false,
"headline": "MOD-14902 - existence check to prevent Timeseries crash when Redis is…",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-04-20T12:16:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "690ab923da6ac478d1c468f40671d9826026d6bd",
"body": null,
"is_bot": false,
"headline": "nightly build, upload snapshot artifact (#1954)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-04-15T11:30:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9b14f12f1422bc674c23a85c51a9817c6cab3d5",
"body": "* align to bloom repo\n\n* fix all docker files",
"is_bot": false,
"headline": "MOD-14674 - oss refresh list (#1935)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-04-15T11:18:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "306e9d3243cca1cf2b1603442c50d6a286aaabab",
"body": "…d and return an appropriate error (#1930)\n\nCo-authored-by: Tom Gabsow <tom.gabsow@redis.com>",
"is_bot": false,
"headline": "MOD-14439 Detect cluster topology changes during a multi-shard comman…",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2026-04-14T17:59:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21387028fac24de437e7cc385d89cba0c55914c1",
"body": "…#1937)\n\n* MOD-12726 unique snapshot name + new output params for nighly event\n\n* remove tests(for testing hte change quick)\n\n* add Summary\n\n* bring back tests",
"is_bot": false,
"headline": "MOD-12726 unique snapshot name + new output params for nighly event (…",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-04-14T08:15:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf8d202f049f41399fb93ab93e57db9af1e3152b",
"body": "* Increase LibMR execution timeout for Valgrind builds\n\n* modulesdk alignment",
"is_bot": false,
"headline": "MOD-14289 - Increase LibMR execution timeout for Valgrind builds (#1933)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-04-06T07:10:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d93e85eca098cbb815ce7814284e63a6a0e7b516",
"body": "* rerun without the log fix to verify empty logs\n\n* Upload test_output.log on failure and remove hardcoded test filter\n\n- Add test_output.log to artifact upload so full test console output\n (including tracebacks) is available when tests fail\n- Remove leftover TEST=test_ts_add:test_TEMPORARY_force_f\n[…]\nMade-with: Cursor\n\n* add fresh env to this test to see if the logs are now being uploaded\n\n* add new env to groupby as well\n\n* add module args\n\n* add nolog=false\n\n* revert all changes but noLog=False",
"is_bot": false,
"headline": "MOD-14250 - missing artifacts logs fix (#1932)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-04-05T17:13:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "17bb9e2aa7259252434eb3d398f13445127ee0ff",
"body": "* MOD-14124 m commands acl\n\nEnsures multi-shard TS.MRANGE/TS.MREVRANGE/TS.MGET/TS.QUERYINDEX enforce per-key ACLs on every shard, rather than relying on a single-shard ~* precheck.\n\nThe initiating node now serializes the client username through LibMR (QueryPredicates_Arg.userName), and each shard/in\n[…]\nsages from “multi-shard” to “multi-keys”.\n\nAdds extensive cluster ACL flow tests covering partial shard permissions and same-/cross-shard execution scenarios.\n\n* free user context before overriding it",
"is_bot": false,
"headline": "MOD-14124 m commands acl (#1913)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-04-05T13:48:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "29fc839f40f8aea54b7baeea9427cf6208a7691f",
"body": "… (#1928)\n\n* config: accept ts-num-threads as load-time arg\n\nAlso allow PYTHON override for flow tests, and add a regression test for ts-num-threads module args.\n\n* config: log load-time parse failures as error\n\n* tests: refine ts-num-threads module-arg coverage\n\nSkip RLEC explicitly without redunda\n[…]\nhreads, while pool hasn't started yet\n\n* guard call for LibMR_ResizeExecutionThreadPoolIfUnstarted\n\n* fix linux thread names regex\n\n* test\n\n---------\n\nCo-authored-by: Tom Gabsow <gabsow.tom@gmail.com>",
"is_bot": false,
"headline": "MOD-13142 Allow changing number of threads, while pool hasn't started…",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-04-05T07:38:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "28ff1ae92f1c726f3ea4a2df9fb6c46a0206b39c",
"body": null,
"is_bot": false,
"headline": "MOD-9320 rename AGGREGATION token in m commands (#1926)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-03-30T08:37:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "806d1e80a484d38a8d8d3fa9056e81317bd85404",
"body": "* MOD-9320 Multiple aggregators in single command\n\n* CR + Format\n\n* CR\n\n* CR\n\n* twa minor opt\n\n* CR\n\n* CR\n\n* CR\n\n* CR 1\n\n* split AggregationIterator_GetNextChunk\n\n* format\n\n* CR\n\n* alignmet -> alignment\n\n* sonar",
"is_bot": false,
"headline": "MOD-9320 Multiple aggregators single command (#1916)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-03-26T09:09:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7506a5181eac6f5499949201748e3d2e58274d0e",
"body": null,
"is_bot": false,
"headline": "RED-187342 remove nightly check from bump and tag",
"author_name": "chen azulay",
"author_login": "chenazulay",
"committed_at": "2026-03-12T11:55:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f281017dc04d507e04686d6557c4b1a9668451db",
"body": null,
"is_bot": false,
"headline": "RED-187342 remove nightly check from bump and tag",
"author_name": "chenazulay",
"author_login": "chenazulay",
"committed_at": "2026-03-12T11:53:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c3e1cfbeac3ac8e5ba7d1ddd2d7997be0daaacd",
"body": "Remove the 30-minute timeout-minutes parameter and job-level timeout\nso the random-traffic job uses the GitHub Actions default (360 min),\naligned with all other nightly jobs. Keep max_cmd_cnt at 250K.\n\nMade-with: Cursor",
"is_bot": false,
"headline": "Remove job timeout from random-traffic workflow (MOD-14422) (#1911)",
"author_name": "LiranAbir",
"author_login": "LiranAbir",
"committed_at": "2026-03-10T08:41:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58f0f688306f5bdb21d3518cfbf2fdf7188fe4cc",
"body": null,
"is_bot": false,
"headline": "MOD-8167 Fix incryby creating key before validating args (#1910)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-03-09T11:59:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04664f7e590fe4201ff1d581f27131a06ccc7361",
"body": null,
"is_bot": false,
"headline": "squash changes (#1908)",
"author_name": "Tal Bar Yakar",
"author_login": "TalBarYakar",
"committed_at": "2026-03-09T06:06:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7d535637a174d694d6d55812995e44333638772",
"body": "* MOD-13438 Use LibMR's internal commands for multi-shards commands\n\nLink to the LibMR version with the internal commands support\n\n* Add a new config for libmr-protocol (default INTERNAL) to be able to fall back to GEARS protocol if there are issues\n\n* Retain the 'deprecated' name of config args for\n[…]\naks (Gal-approved only)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* update to libMR master\n\n---------\n\nCo-authored-by: Gal Cohen <gal@redis.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "MOD-13438 fix memory leak (#1896)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-03-02T21:02:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "577c266ada940a2df67205167fd3abe33f334c1d",
"body": null,
"is_bot": false,
"headline": "MOD-12276-add-random-traffic-test-to-event-nightly-results (#1907)",
"author_name": "LiranAbir",
"author_login": "LiranAbir",
"committed_at": "2026-03-01T07:49:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "041d7be8d5317524d4c765019d763d25b392fdd5",
"body": "* Suppress fork'd child Valgrind false positive leak reports\n\nProblem\ntest_asm_with_data_and_queries_during_migrations fails under Valgrind, reporting \"definitely lost\" memory in MultiSeriesSampleIterator_New. These are not real leaks.\nRoot Cause\nDuring the test, Redis forks for background persisten\n[…]\nns.\nRLTest polls and returns as soon as the process exits, so a high retry\ncount costs nothing when shutdown is fast.\n\nMade-with: Cursor\n\n---------\n\nCo-authored-by: TalBarYakar <talbaryakar@gmail.com>",
"is_bot": false,
"headline": "Tom/fix/vg slave exit code false alarm (#1905)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-02-26T20:03:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2b92e9d1aaba1b0d8d87df74d58e608f4352d1c3",
"body": "* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_wo\n[…]\n_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow\n\n* MOD-12276-adding_random_traffic_workflow",
"is_bot": false,
"headline": "MOD-12276-adding_random_traffic_workflow (#1900)",
"author_name": "LiranAbir",
"author_login": "LiranAbir",
"committed_at": "2026-02-26T12:03:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "27aeea2e72b7f9154e2e512786247904dabed49d",
"body": null,
"is_bot": false,
"headline": "RED-182069: Fix version regex in bump version workflow (#1899)",
"author_name": "Momchil Marinov",
"author_login": "m-marinov",
"committed_at": "2026-02-24T12:33:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11f4d84a557e5c0edd261ce8c64a2e0b2f2109b4",
"body": "…tion\n\nRED-182068 fix Slack notification's condition\nUpdate notify-results job condition to skip push events\nOnly send notifications for schedule events on master/main\nOnly send notifications for workflow_dispatch when send-slack-message is true",
"is_bot": false,
"headline": "Merge pull request #1898 from RedisTimeSeries/RED-182068-slacck-condi…",
"author_name": "valeria-raif",
"author_login": "valeria-raif",
"committed_at": "2026-02-23T21:28:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf16a3d802a491bf7d99f0acca539b3a181a1e38",
"body": "- Update notify-results job condition to skip push events\n- Only send notifications for schedule events on master/main\n- Only send notifications for workflow_dispatch when send-slack-message is true",
"is_bot": false,
"headline": "fix: restrict Slack notifications to scheduled and manual triggers",
"author_name": "Valeria Raif",
"author_login": "valeria-raif",
"committed_at": "2026-02-23T16:01:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3ce044552661d97f0cdb498c62941923dedb3ed",
"body": null,
"is_bot": false,
"headline": "RED-182069: Automate version bump (#1891)",
"author_name": "Momchil Marinov",
"author_login": "m-marinov",
"committed_at": "2026-02-19T10:56:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a747df83c30cd7ae2ff79c24f9753e5deaa8760c",
"body": "* Fix valgrind CI job always passing despite detected memory leaks\n\nRemove `|| true` from the test step so that non-zero exit codes from\nmemcheck-summary are properly propagated. Downstream steps already\nuse `if: always()` and continue to run regardless.\n\nCo-authored-by: Cursor <cursoragent@cursor.c\n[…]\nml: || true swallowed test failures,\nmaking the job always pass regardless of test results.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Fix valgrind CI job always passing despite detected memory leaks (#1897)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-02-18T19:22:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "69dd86f562f9c8fcc8b58f528bc39acab9f887dc",
"body": "…884)\n\nA new config for `ts-libmr-protocol` (default `INTERNAL`) to be able to fall back to `GEARS` protocol if there are issues",
"is_bot": false,
"headline": "MOD-13438 Use LibMR's internal commands for multi-shards commands (#1…",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2026-02-18T14:55:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "def7ac6b7c3d46063048b67bfc599f142ef05334",
"body": "* feat: Add Slack notification for nightly workflow results\n\nAdd test-summary composite action that aggregates job results and sends\nformatted Slack notifications using Block Kit. Integrate action into\nevent-nightly.yml workflow.\n\nChanges:\n- Create .github/actions/test-summary/action.yml composite a\n[…]\nuld not run on PRs)\n- Switch to production Slack webhook (DATATYPES_SLACK_WEBHOOK_URL)\n\n---------\n\nCo-authored-by: Valeria Raif <valeria.raif@redis.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Red 182068 slack notification rebased (#1887)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-02-17T11:02:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1ff904bf438010b2e44519e849e9e3e5920d8f5c",
"body": "* fi ci to uplaed to s3\n\n* update to \"setuptools<81\"",
"is_bot": false,
"headline": "fix ci to uplaed to s3 (#1888)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-02-11T11:56:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b7c4db5a421f03d8c17a21885a1f61a6919e67b",
"body": "…-26 (#1866)\n\n* Dockerize CI\n\n* Add support for Amazon Linux 2023\n\n* Add support for Macos 26",
"is_bot": false,
"headline": "MOD-13778 | MOD-13573 | MOD-13812 Dockerize CI, add AL2023 and macos…",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-02-05T13:44:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a7d3bea1246f082e0222b98c8c7371a6eed46ae",
"body": "* Modernize benchmark runner on timeseries. remove the usage of env var for pem on benchmark flows\n\n* Remove pem secret and continue on error\n\n* Included mixed MRANGE/MGET and SET benchmarks\n\n* mrange_1k mixed using the proper dataset\n\n* Fixed missing env timeseries->search\n\n* oss-standalone-redisearch-m5 -> oss-standalone-modules-m5",
"is_bot": false,
"headline": "Modernize and future proof benchmark runner on timeseries (#1867)",
"author_name": "Filipe Oliveira (Redis)",
"author_login": "fcostaoliveira",
"committed_at": "2026-01-30T09:26:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13ebfdfe9846468702f7d986dbbeb5e0f77d2836",
"body": "* MOD-12919 minimize ksn notification",
"is_bot": false,
"headline": "MOD-12919 minimize ksn (#1865)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-01-28T12:32:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8664b66e601b6adbf808a1e839e9fc1a8a117e84",
"body": "* Bump LibMR: minimal cluster argv/GIL fix\n\nUse LibMR commit a640526 (cluster.c argv deep-copy + GIL lock) to fix ASan heap-use-after-free with minimal surface area (no mr.c changes).\n\n* Bump LibMR: argv-copy-only innercomm\n\nUpdate LibMR submodule to test ASan fix relying solely on deep-copied argv (no ThreadSafeContextLock in innercomm handler).\n\n* update to master of libMR",
"is_bot": false,
"headline": "Bump LibMR: minimal cluster argv/GIL fix (#1859)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-01-19T14:47:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de438f73b9262a535fcfdcd85673b65c589ad2ef",
"body": null,
"is_bot": false,
"headline": "Skip slot-range validation when cluster-enabled=no (#1857)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-01-18T14:50:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc28a07fc082850a9bc029bd2c77fe198cbb31b4",
"body": "* remove macOs-13\n\n* CI: run full test suite like nightly",
"is_bot": false,
"headline": "Mod 13397 ci on all (#1856)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-01-15T13:19:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38029a2313c5d7dea8b4db08dc258eb8574e0f0d",
"body": "* Fix ASM multi-key correctness: attach slot ranges + epoch to shard replies\n\n* Fix build: forward-declare MR_RecordCreate and avoid C label decl\n\n* Fix crash on LibMR error path: initialize slot-range accumulator\n\n* Tests: allow retryable topology-change error during ASM MRANGE loop\n\n* chore: clang\n[…]\nusterKeySlotC\n\n* Revert \"tests: add gated ASM A/B stats test\"\n\nThis reverts commit 21df1803fe7c46b7955604e2447bb3bb233f767f.\n\n* Refine slots metadata validation and errors\n\n* update to master of libMR",
"is_bot": false,
"headline": "Fix/asm multikey slotranges (#1852)",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2026-01-15T12:47:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ec82081af0510f5a214f3de25d3781ae126162e3",
"body": "* MOD-12932 MOD-12933 Support NaN values - Parser & Command Layer (TS.ADD/TS.MADD)\n\n* MOD-12934 Support NaN values - Aggregation Pipeline\n\n* MOD-12935 New Aggregator: countNaN\n\n* MOD-13450 New Aggregator: countAll\n\n* fix last bucket\n\n* test both compressed and uncompressed\n\n* MOD-12936 Canonicalize\n[…]\nix compaction rules for NaN only buckets\n\n* fix twa with NaN edge case + minor fixes\n\n* fix NaN response\n\n* fix twa last bucket range\n\n* CR\n\n* fix twa in NaN only buckets\n\n* fix nan with vector appand",
"is_bot": false,
"headline": "Add support for NaN values (#1853)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-01-14T14:55:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6b910f6aa77c4164ecf1ed5dff87172b1cfb3684",
"body": null,
"is_bot": false,
"headline": "MOD-12980 ts.info bring back removed changes (#1849)",
"author_name": "Aviv David",
"author_login": "AvivDavid23",
"committed_at": "2026-01-12T10:33:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bff11f294f4a1fce64e81baddc4faf78225d8883",
"body": null,
"is_bot": false,
"headline": "MOD-12980 Remove user data from logs (#1837)",
"author_name": "efeldblum",
"author_login": "ephraimfeldblum",
"committed_at": "2026-01-06T06:50:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "540a6b747c8b59188d200c5a85e9611f38144374",
"body": null,
"is_bot": false,
"headline": "MOD-13072 Add asm capability (#1839)",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2025-12-28T09:02:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "176f0af7d1e47afa9da5ba11eab2740b5d8afa0a",
"body": null,
"is_bot": false,
"headline": "MOD-11623 Update LibMR submodule to latest varsion (#1832)",
"author_name": "Gal Cohen",
"author_login": "galcohen-redislabs",
"committed_at": "2025-12-09T11:48:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b30bc84fd7d2267a38a3a698fdf950c1687d5e9",
"body": null,
"is_bot": false,
"headline": "timeseries supports only 64-bit (#1831)",
"author_name": "efeldblum",
"author_login": "ephraimfeldblum",
"committed_at": "2025-12-09T11:19:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8524b4e2002d2ef011cc7780f1f51ea2be23bf37",
"body": "Added note about 32 bit system support.",
"is_bot": false,
"headline": "Update README to include 32 bit system support note (#1829)",
"author_name": "Lior Kogan",
"author_login": "LiorKogan",
"committed_at": "2025-12-04T14:43:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac468182593405ab429d637d4de7961e06a19570",
"body": "…ions (#1828)\n\nApply the same adjustments for sanitizer builds as already exist for\nValgrind builds:\n- Reduce number_of_keys from 1000 to 100 for slower builds\n- Increase migration timeout from 5 to 60 seconds\n\nThis fixes timing issues in sanitizer builds where migrations and\nqueries can take longer to complete.",
"is_bot": false,
"headline": "Add SANITIZER support to test_asm_with_data_and_queries_during_migrat…",
"author_name": "Tom Gabsow",
"author_login": "gabsow",
"committed_at": "2025-12-01T11:10:31Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 72,
"commits_last_year": 129,
"latest_release_at": "2026-05-05T11:51:49Z",
"latest_release_tag": "v1.12.14",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 40,
"days_since_latest_release": 84,
"mean_days_between_releases": 53.7
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 147,
"stars": 1070,
"watchers": 24,
"fork_history": {
"days": [
{
"date": "2018-07-12",
"count": 1
},
{
"date": "2018-10-07",
"count": 1
},
{
"date": "2018-10-22",
"count": 1
},
{
"date": "2018-11-08",
"count": 1
},
{
"date": "2019-01-05",
"count": 1
},
{
"date": "2019-01-15",
"count": 1
},
{
"date": "2019-03-07",
"count": 1
},
{
"date": "2019-03-14",
"count": 1
},
{
"date": "2019-03-28",
"count": 2
},
{
"date": "2019-04-25",
"count": 1
},
{
"date": "2019-04-30",
"count": 1
},
{
"date": "2019-05-24",
"count": 1
},
{
"date": "2019-06-16",
"count": 1
},
{
"date": "2019-06-21",
"count": 1
},
{
"date": "2019-07-06",
"count": 1
},
{
"date": "2019-07-11",
"count": 1
},
{
"date": "2019-07-19",
"count": 1
},
{
"date": "2019-07-22",
"count": 1
},
{
"date": "2019-07-29",
"count": 1
},
{
"date": "2019-07-31",
"count": 1
},
{
"date": "2019-08-01",
"count": 1
},
{
"date": "2019-08-08",
"count": 1
},
{
"date": "2019-08-27",
"count": 1
},
{
"date": "2019-09-11",
"count": 1
},
{
"date": "2019-10-17",
"count": 1
},
{
"date": "2019-10-21",
"count": 1
},
{
"date": "2019-10-24",
"count": 1
},
{
"date": "2019-11-10",
"count": 1
},
{
"date": "2019-11-12",
"count": 1
},
{
"date": "2019-11-15",
"count": 1
},
{
"date": "2019-11-20",
"count": 1
},
{
"date": "2019-12-19",
"count": 1
},
{
"date": "2019-12-25",
"count": 1
},
{
"date": "2020-01-03",
"count": 1
},
{
"date": "2020-01-09",
"count": 1
},
{
"date": "2020-01-13",
"count": 1
},
{
"date": "2020-02-07",
"count": 1
},
{
"date": "2020-02-12",
"count": 1
},
{
"date": "2020-04-03",
"count": 1
},
{
"date": "2020-04-05",
"count": 1
},
{
"date": "2020-05-09",
"count": 1
},
{
"date": "2020-05-21",
"count": 1
},
{
"date": "2020-05-27",
"count": 1
},
{
"date": "2020-05-30",
"count": 1
},
{
"date": "2020-06-17",
"count": 1
},
{
"date": "2020-06-22",
"count": 1
},
{
"date": "2020-06-30",
"count": 1
},
{
"date": "2020-07-02",
"count": 1
},
{
"date": "2020-07-08",
"count": 1
},
{
"date": "2020-07-11",
"count": 1
},
{
"date": "2020-07-22",
"count": 1
},
{
"date": "2020-07-27",
"count": 1
},
{
"date": "2020-08-08",
"count": 1
},
{
"date": "2020-08-11",
"count": 1
},
{
"date": "2020-08-13",
"count": 1
},
{
"date": "2020-08-31",
"count": 1
},
{
"date": "2020-11-13",
"count": 1
},
{
"date": "2020-12-16",
"count": 1
},
{
"date": "2021-01-04",
"count": 1
},
{
"date": "2021-01-21",
"count": 1
},
{
"date": "2021-01-23",
"count": 1
},
{
"date": "2021-03-01",
"count": 2
},
{
"date": "2021-03-03",
"count": 1
},
{
"date": "2021-03-22",
"count": 1
},
{
"date": "2021-03-30",
"count": 2
},
{
"date": "2021-04-05",
"count": 1
},
{
"date": "2021-04-15",
"count": 1
},
{
"date": "2021-04-24",
"count": 1
},
{
"date": "2021-06-05",
"count": 1
},
{
"date": "2021-08-16",
"count": 1
},
{
"date": "2021-08-31",
"count": 1
},
{
"date": "2021-10-07",
"count": 1
},
{
"date": "2021-11-03",
"count": 1
},
{
"date": "2021-11-12",
"count": 1
},
{
"date": "2021-12-10",
"count": 1
},
{
"date": "2022-01-06",
"count": 1
},
{
"date": "2022-01-18",
"count": 1
},
{
"date": "2022-01-20",
"count": 2
},
{
"date": "2022-02-05",
"count": 1
},
{
"date": "2022-02-09",
"count": 1
},
{
"date": "2022-02-10",
"count": 1
},
{
"date": "2022-02-21",
"count": 1
},
{
"date": "2022-03-11",
"count": 1
},
{
"date": "2022-03-22",
"count": 1
},
{
"date": "2022-03-28",
"count": 1
},
{
"date": "2022-03-31",
"count": 1
},
{
"date": "2022-04-01",
"count": 1
},
{
"date": "2022-04-05",
"count": 1
},
{
"date": "2022-04-07",
"count": 1
},
{
"date": "2022-04-19",
"count": 1
},
{
"date": "2022-04-25",
"count": 1
},
{
"date": "2022-05-19",
"count": 1
},
{
"date": "2022-06-06",
"count": 1
},
{
"date": "2022-07-04",
"count": 1
},
{
"date": "2022-09-05",
"count": 1
},
{
"date": "2022-09-12",
"count": 1
},
{
"date": "2022-10-25",
"count": 1
},
{
"date": "2022-10-28",
"count": 1
},
{
"date": "2022-11-07",
"count": 1
},
{
"date": "2022-11-08",
"count": 1
},
{
"date": "2022-11-10",
"count": 1
},
{
"date": "2022-11-13",
"count": 1
},
{
"date": "2022-11-25",
"count": 1
},
{
"date": "2022-12-29",
"count": 1
},
{
"date": "2023-01-07",
"count": 1
},
{
"date": "2023-01-09",
"count": 1
},
{
"date": "2023-01-25",
"count": 1
},
{
"date": "2023-02-01",
"count": 1
},
{
"date": "2023-03-07",
"count": 1
},
{
"date": "2023-03-09",
"count": 2
},
{
"date": "2023-03-24",
"count": 1
},
{
"date": "2023-05-14",
"count": 1
},
{
"date": "2023-05-15",
"count": 1
},
{
"date": "2023-05-16",
"count": 1
},
{
"date": "2023-06-22",
"count": 1
},
{
"date": "2023-09-07",
"count": 1
},
{
"date": "2023-09-09",
"count": 1
},
{
"date": "2023-09-24",
"count": 2
},
{
"date": "2023-11-08",
"count": 1
},
{
"date": "2023-11-23",
"count": 1
},
{
"date": "2023-11-24",
"count": 1
},
{
"date": "2023-11-27",
"count": 1
},
{
"date": "2023-12-08",
"count": 1
},
{
"date": "2024-01-22",
"count": 1
},
{
"date": "2024-02-27",
"count": 1
},
{
"date": "2024-03-01",
"count": 1
},
{
"date": "2024-03-22",
"count": 1
},
{
"date": "2024-06-27",
"count": 1
},
{
"date": "2024-07-01",
"count": 1
},
{
"date": "2024-07-15",
"count": 1
},
{
"date": "2024-10-26",
"count": 1
},
{
"date": "2024-10-29",
"count": 1
},
{
"date": "2024-11-02",
"count": 1
},
{
"date": "2024-12-25",
"count": 1
},
{
"date": "2025-03-08",
"count": 1
},
{
"date": "2025-03-10",
"count": 1
},
{
"date": "2025-10-08",
"count": 1
},
{
"date": "2026-03-11",
"count": 1
},
{
"date": "2026-04-02",
"count": 1
},
{
"date": "2026-06-18",
"count": 1
},
{
"date": "2026-06-27",
"count": 1
}
],
"complete": true,
"collected": 147,
"total_forks": 147
},
"star_history": null,
"open_issues_and_prs": 193
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile",
"build/LibMR/Makefile",
"build/cpu_features/Makefile",
"build/docker/Makefile",
"build/dragonbox/Makefile",
"build/fast_double_parser_c/Makefile",
"build/hiredis/Makefile",
"build/libevent/Makefile",
"build/rmutil/Makefile",
"tests/unit/Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 188205,
"source_files_sampled": 158,
"oversized_source_files": 8,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"requirements_docker.txt",
"tools/requirements.txt"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "click",
"direct": false,
"version": "7.0",
"severity": "high",
"ecosystem": "pypi",
"cvss_score": 7.2,
"advisory_ids": [
"PYSEC-2026-2132"
],
"fixed_version": "8.3.3",
"advisory_count": 1,
"oldest_advisory_days": 89
},
{
"name": "flask-cors",
"direct": false,
"version": "4.0.2",
"severity": "moderate",
"ecosystem": "pypi",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-43qf-4rqw-9q2g",
"GHSA-7rxf-gvfg-47g4",
"GHSA-8vgw-p6qm-5gr7",
"PYSEC-2026-1383",
"PYSEC-2026-1384",
"PYSEC-2026-1385"
],
"fixed_version": "6.0.0",
"advisory_count": 6,
"oldest_advisory_days": 495
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"high": 1,
"moderate": 1
},
"advisory_count": 7,
"affected_count": 2,
"assessed_count": 7,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 10,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "addict",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "click",
"direct": false,
"version": "7.0",
"ecosystem": "pypi"
},
{
"name": "flask",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "flask-cors",
"direct": false,
"version": "4.0.2",
"ecosystem": "pypi"
},
{
"name": "gevent",
"direct": false,
"version": "23.9.1",
"ecosystem": "pypi"
},
{
"name": "jinja2",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "jwt",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pip",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "python-dateutil",
"direct": false,
"version": "2.6.0",
"ecosystem": "pypi"
},
{
"name": "ramp-packer",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "ramp-packer",
"direct": false,
"version": "2.5.13",
"ecosystem": "pypi"
},
{
"name": "redis",
"direct": false,
"version": "2.10.5",
"ecosystem": "pypi"
},
{
"name": "redis",
"direct": false,
"version": "3.0.1",
"ecosystem": "pypi"
},
{
"name": "redisbench-admin",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "setuptools",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "statistics",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "toml",
"direct": false,
"version": null,
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 17,
"direct_count": 0,
"indirect_count": 17
}
},
"maintainership": {
"issues": {
"open_prs": 83,
"merged_prs": 1301,
"open_issues": 110,
"closed_ratio": 0.745,
"closed_issues": 322,
"closed_unmerged_prs": 318
},
"bus_factor": 4,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "LiorKogan",
"commits": 343,
"avatar_url": "https://avatars.githubusercontent.com/u/7252991?v=4"
},
{
"type": "User",
"login": "gkorland",
"commits": 160,
"avatar_url": "https://avatars.githubusercontent.com/u/753206?v=4"
},
{
"type": "User",
"login": "rafie",
"commits": 114,
"avatar_url": "https://avatars.githubusercontent.com/u/7499323?v=4"
},
{
"type": "User",
"login": "filipecosta90",
"commits": 78,
"avatar_url": "https://avatars.githubusercontent.com/u/5832149?v=4"
},
{
"type": "User",
"login": "alonre24",
"commits": 60,
"avatar_url": "https://avatars.githubusercontent.com/u/28729016?v=4"
},
{
"type": "User",
"login": "K-Jo",
"commits": 60,
"avatar_url": "https://avatars.githubusercontent.com/u/4069725?v=4"
},
{
"type": "User",
"login": "danni-m",
"commits": 51,
"avatar_url": "https://avatars.githubusercontent.com/u/7194784?v=4"
},
{
"type": "User",
"login": "nermiller",
"commits": 46,
"avatar_url": "https://avatars.githubusercontent.com/u/102551568?v=4"
},
{
"type": "User",
"login": "OfirMos",
"commits": 41,
"avatar_url": "https://avatars.githubusercontent.com/u/82366525?v=4"
},
{
"type": "User",
"login": "gabsow",
"commits": 36,
"avatar_url": "https://avatars.githubusercontent.com/u/4652717?v=4"
}
],
"contributors_sampled": 68,
"top_contributor_share": 0.265
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"benchmark-flow.yml",
"benchmark-runner.yml",
"benchmark-trigger.yml",
"bump-version.yml",
"event-backport_pr.yml",
"event-ci.yml",
"event-nightly.yml",
"event-push-to-integ.yml",
"event-tag.yml",
"flow-coverage.yml",
"flow-linter.yml",
"flow-linux.yml",
"flow-macos.yml",
"flow-random-traffic.yml",
"flow-spellcheck.yml",
"mariner2.yml",
"push-docker-images.yml",
"release-drafter.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 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": 9,
"reason": "Found 29/30 approved changesets -- score normalized to 9",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 12 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 0,
"reason": "dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "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": 9,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 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": 9,
"reason": "SAST tool is not run on all commits -- score normalized to 9",
"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": null,
"reason": "no releases found",
"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": 5,
"reason": "5 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "008f5a9b692d466c0e78fc58c6be52deb2e500a0",
"ran_at": "2026-07-29T02:15:31Z",
"aggregate_score": 6.1,
"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-29T01:16:35Z",
"oldest_open_prs": [
{
"number": 186,
"created_at": "2019-08-18T11:25:31Z",
"last_comment_at": "2022-09-22T14:13:06Z",
"last_comment_author": "CLAassistant"
},
{
"number": 695,
"created_at": "2021-04-19T15:08:42Z",
"last_comment_at": "2024-02-22T03:47:16Z",
"last_comment_author": "kamikyo"
},
{
"number": 835,
"created_at": "2021-08-22T08:54:05Z",
"last_comment_at": "2021-09-02T11:10:58Z",
"last_comment_author": "codecov"
},
{
"number": 914,
"created_at": "2021-11-30T14:21:51Z",
"last_comment_at": "2022-09-22T14:13:00Z",
"last_comment_author": "CLAassistant"
},
{
"number": 947,
"created_at": "2021-12-19T17:08:59Z",
"last_comment_at": "2022-09-22T14:13:03Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1023,
"created_at": "2022-01-26T06:37:01Z",
"last_comment_at": "2022-03-24T17:50:47Z",
"last_comment_author": "rostyboost"
},
{
"number": 1082,
"created_at": "2022-03-07T22:32:57Z",
"last_comment_at": "2022-09-22T14:12:47Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1092,
"created_at": "2022-03-18T23:15:20Z",
"last_comment_at": "2022-03-18T23:51:45Z",
"last_comment_author": "codecov"
},
{
"number": 1116,
"created_at": "2022-04-04T07:26:24Z",
"last_comment_at": "2022-09-22T14:12:25Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1178,
"created_at": "2022-05-25T06:37:33Z",
"last_comment_at": "2022-09-22T14:12:32Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1232,
"created_at": "2022-07-05T19:17:03Z",
"last_comment_at": "2022-09-22T14:12:29Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1261,
"created_at": "2022-08-15T11:50:39Z",
"last_comment_at": "2022-09-22T14:12:11Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1263,
"created_at": "2022-08-16T11:19:20Z",
"last_comment_at": "2022-09-22T14:12:06Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1334,
"created_at": "2022-11-07T14:39:48Z",
"last_comment_at": "2024-09-03T11:39:21Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1340,
"created_at": "2022-11-14T09:08:23Z",
"last_comment_at": "2024-09-03T11:39:18Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1353,
"created_at": "2022-11-25T18:53:17Z",
"last_comment_at": "2024-09-03T11:39:54Z",
"last_comment_author": "codecov"
},
{
"number": 1401,
"created_at": "2023-02-16T05:57:36Z",
"last_comment_at": "2023-02-16T06:30:16Z",
"last_comment_author": "codecov"
},
{
"number": 1407,
"created_at": "2023-02-19T13:59:48Z",
"last_comment_at": "2024-09-03T11:39:10Z",
"last_comment_author": "CLAassistant"
},
{
"number": 1431,
"created_at": "2023-03-09T09:05:50Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1434,
"created_at": "2023-03-13T11:28:14Z",
"last_comment_at": "2023-03-13T12:05:11Z",
"last_comment_author": "codecov"
}
],
"last_merged_pr_at": "2026-07-28T05:57:15Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 41,
"created_at": "2019-02-12T14:52:36Z",
"last_comment_at": "2020-02-04T22:43:58Z",
"last_comment_author": "filipecosta90"
},
{
"number": 60,
"created_at": "2019-02-28T07:01:55Z",
"last_comment_at": "2019-09-12T00:06:35Z",
"last_comment_author": "github-actions"
},
{
"number": 75,
"created_at": "2019-04-08T13:37:46Z",
"last_comment_at": "2019-11-25T12:12:46Z",
"last_comment_author": "filipecosta90"
},
{
"number": 76,
"created_at": "2019-04-10T20:17:09Z",
"last_comment_at": "2019-09-12T00:06:33Z",
"last_comment_author": "github-actions"
},
{
"number": 82,
"created_at": "2019-04-10T21:01:14Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 83,
"created_at": "2019-04-10T21:17:12Z",
"last_comment_at": "2019-09-12T00:06:31Z",
"last_comment_author": "github-actions"
},
{
"number": 98,
"created_at": "2019-05-08T00:29:57Z",
"last_comment_at": "2019-09-12T00:06:30Z",
"last_comment_author": "github-actions"
},
{
"number": 99,
"created_at": "2019-05-08T10:09:47Z",
"last_comment_at": "2019-09-12T00:06:29Z",
"last_comment_author": "github-actions"
},
{
"number": 148,
"created_at": "2019-06-21T23:19:22Z",
"last_comment_at": "2020-01-13T08:37:06Z",
"last_comment_author": "ashtul"
},
{
"number": 152,
"created_at": "2019-06-24T08:58:41Z",
"last_comment_at": "2022-06-13T20:53:31Z",
"last_comment_author": "ashtonian"
},
{
"number": 153,
"created_at": "2019-06-24T10:13:49Z",
"last_comment_at": "2019-08-26T14:56:12Z",
"last_comment_author": "ashtul"
},
{
"number": 166,
"created_at": "2019-07-10T14:17:04Z",
"last_comment_at": "2019-12-05T12:35:17Z",
"last_comment_author": "ashtul"
},
{
"number": 174,
"created_at": "2019-08-04T17:05:04Z",
"last_comment_at": "2022-11-25T12:48:03Z",
"last_comment_author": "LiorKogan"
},
{
"number": 187,
"created_at": "2019-08-19T09:22:46Z",
"last_comment_at": "2021-10-19T20:28:10Z",
"last_comment_author": "danielbodart"
},
{
"number": 196,
"created_at": "2019-08-27T12:02:12Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 202,
"created_at": "2019-09-02T13:54:22Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 208,
"created_at": "2019-09-06T05:00:24Z",
"last_comment_at": "2019-09-10T09:15:02Z",
"last_comment_author": "cheekybastard"
},
{
"number": 217,
"created_at": "2019-09-23T06:07:13Z",
"last_comment_at": "2019-09-23T12:11:25Z",
"last_comment_author": "gkorland"
},
{
"number": 238,
"created_at": "2019-11-10T20:44:51Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 251,
"created_at": "2019-11-27T19:17:49Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/RedisTimeSeries/RedisTimeSeries",
"host": "github.com",
"name": "RedisTimeSeries",
"owner": "RedisTimeSeries"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 78,
"inputs": {
"security": 69,
"vitality": 92,
"community": 70,
"governance": 76,
"engineering": 81
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 92,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"commits_last_year": 129,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 40
},
"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": "40/52 weeks with commits",
"points": 27.7,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 40
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "129 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 129
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 92,
"inputs": {
"releases_count": 72,
"latest_release_tag": "v1.12.14",
"releases_from_tags": false,
"days_since_latest_release": 84,
"mean_days_between_releases": 53.7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "72 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 72
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 84 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 84
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~53.7 days",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 53.7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 1,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 1 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 1
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 70,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "good",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"forks": 147,
"stars": 1070,
"watchers": 24,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1,070 stars",
"points": 49.1,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 1070
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "147 forks",
"points": 18,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 147
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "24 watchers",
"points": 7.6,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 24
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "license file present, not a recognized license",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "license_custom",
"params": {}
}
],
"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": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 76,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "good",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 83,
"inputs": {
"bus_factor": 4,
"contributors_sampled": 68,
"top_contributor_share": 0.265
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "4 contributor(s) cover half of all commits",
"points": 43.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 4
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 26% of commits",
"points": 16.5,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 26
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "68 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 68
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 12 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 79,
"inputs": {
"merged_prs": 1301,
"open_issues": 110,
"closed_issues": 322,
"issue_closed_ratio": 0.745,
"closed_unmerged_prs": 318
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "74% of issues closed",
"points": 34.8,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 74
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "1301/1619 decided PRs merged",
"points": 30.7,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 1301,
"decided": 1619
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 29/30 approved changesets -- score normalized to 9",
"points": 13.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"followers": 50,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "RedisTimeSeries",
"public_repos": 13,
"account_age_days": 2745
},
"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": "50 followers of RedisTimeSeries",
"points": 12.3,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 50,
"login": "RedisTimeSeries"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "13 public repos, account ~7 yr old",
"points": 20.3,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 13
}
},
{
"code": "account_age_years",
"params": {
"years": 7
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 81,
"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": "18 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 18
}
}
],
"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": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"redis",
"redis-module",
"timeseries",
"redistimeseries",
"timeseries-database"
],
"has_wiki": true,
"homepage": "https://redis.io/docs/stack/timeseries/",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://redis.io/docs/stack/timeseries/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "5 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 5
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 69,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 61,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 6.1
},
"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 29/30 approved changesets -- score normalized to 9",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 12 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "dangerous workflow patterns detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"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.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow 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 9",
"points": 4.5,
"status": "partial",
"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": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": "5 existing vulnerabilities detected",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 7 resolved dependencies against OSV; 10 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 7
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 10
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 7,
"affected_packages": 2,
"assessed_packages": 7,
"unassessed_packages": 10,
"affected_by_severity": "high 1, moderate 1",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 7,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 5
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 52,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.96,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "96 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 96,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": true,
"typed_language": false,
"bootstrap_files": [
"Makefile",
"build/LibMR/Makefile",
"build/cpu_features/Makefile",
"build/docker/Makefile",
"build/dragonbox/Makefile",
"build/fast_double_parser_c/Makefile",
"build/hiredis/Makefile",
"build/libevent/Makefile",
"build/rmutil/Makefile",
"tests/unit/Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.23,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile, build/LibMR/Makefile, build/cpu_features/Makefile, build/docker/Makefile, build/dragonbox/Makefile, build/fast_double_parser_c/Makefile, build/hiredis/Makefile, build/libevent/Makefile, build/rmutil/Makefile, tests/unit/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile, build/LibMR/Makefile, build/cpu_features/Makefile, build/docker/Makefile, build/dragonbox/Makefile, build/fast_double_parser_c/Makefile, build/hiredis/Makefile, build/libevent/Makefile, build/rmutil/Makefile, tests/unit/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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "23 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 23,
"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": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 188205,
"source_files_sampled": 158,
"oversized_source_files": 8
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "8/158 source files over 60KB",
"points": 52.2,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 158,
"oversized": 8
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-29T02:16:04.702687Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/RedisTimeSeries/RedisTimeSeries.svg",
"full_name": "RedisTimeSeries/RedisTimeSeries",
"license_state": "custom",
"license_spdx": null
}Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.
Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.
Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.