Skip to content

DOC-7292 Add API mappings for the new Redis 8.12 commands [PARKED] - #4525

Open
andy-stark-redis wants to merge 1 commit into
feature-oss-8.12from
DOC-7292-8-12-command-api-mapping
Open

andy-stark-redis wants to merge 1 commit into
feature-oss-8.12from
DOC-7292-8-12-command-api-mapping

Conversation

@andy-stark-redis

@andy-stark-redis andy-stark-redis commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Adds data/command-api-mapping/ entries (15 files) for the commands new in Redis 8.12, and regenerates data/command-api-mapping.json (additions only; git diff --patience shows +8,516/-0).

Commands: BITRANGEINTARRAY; SADDEX, SEXPIRE, SPEXPIRE, SEXPIREAT, SPEXPIREAT, STTL, SPTTL, SEXPIRETIME, SPEXPIRETIME, SPERSIST; BLESS SET/CLEAR/GET/SCAN.

Warning

Do not merge yet. This PR documents client APIs that are on the clients' default branches but in no stable release. Base is feature-oss-8.12 (the 8.12 release branch), not main.

Run-verified on redis:8.12-rc2 (reports redis_version:8.11.241, the rc2 string), 2026-11-10. Every mapped signature was called as written against the default branch of its client and returned the expected value: redis-py 509306fc7325, go-redis 9f33ff11dff1, node-redis be1e998a653d, redis-rb cadebe5d2c5e, predis 1685693b83ef, Jedis c701a365ab46, lettuce 62e6e6e7010b (sync, async and reactive). 320 overload rows passed, with no mismatches. Notes: node-redis blessScan needs a string cursor ('0'), and SADDEX replies 1 for any successful call, not a member count.

Park manifest

Ticket: DOC-7292
Parked at: 2026-11-10
Trigger to pick up: for each client, the merge commit of its PR below is an ancestor of a non-prerelease tag (gh api repos/<o>/<r>/compare/<merge-sha>...<tag> returns behind_by: 0), and Redis 8.12 is GA. Clients ship at different times, so unpark can land client rows in stages: remove rows for clients still unreleased.
Labels: parked, do not merge yet

Pinned sources (state observed at park time, 2026-11-10)

Source State Head / merge SHA Latest stable tag
jedis#4828 set expiry merged, base master merge e7c37d3d3d5e v8.0.2 (v8.1.0-beta2 predates it)
jedis#4773 BLESS merged, base master merge 4978e839ce6f v8.0.2
jedis#4830 BITRANGEINTARRAY open, base master head 8308d7a675b0 not mapped
lettuce#3991 set expiry merged, base main merge c8c11f7e454b 7.9.0.RELEASE (8.0.0.BETA1 is a prerelease)
lettuce#3992 BITRANGEINTARRAY merged 2026-11-09 merge 5320f301a087 same
lettuce#3936 BLESS merged merge 55b8a8a91dde same
redis-py#4587 BITRANGEINTARRAY merged merge 4fe8a8c18e28; master 509306fc7325 v8.1.0 (v8.2.0b1 has all but BITRANGEINTARRAY)
redis-rb#1409 BITRANGEINTARRAY merged merge cadebe5d2c5e (= master) v6.0.0
go-redis#4242 BITRANGEINTARRAY merged merge f477e06feb2c; master 9f33ff11dff1 v9.23.0
predis#1749 set expiry merged merge 1685693b83ef (= main) v3.7.1 (BLESS shipped there; set expiry did not)
predis#1754 BITRANGEINTARRAY open head 15c24ca18790 not mapped
node-redis master all 15 be1e998a653d redis@6.3.1 / 6.4.0-beta.0 has BLESS only
SE.Redis#3343 8.12 into main open head b7b0bc548ef8 none; not mapped (also NRedisStack)

Re-fetch a PR: gh api repos/<o>/<r>/pulls/<n> --jq '{state, merged, head_sha: .head.sha, merge: .merge_commit_sha, base: .base.ref, updated_at}'. Re-read signatures from each client's default branch or release tag, not from the PR.

Observed shape the page assumes

Confidence: MEDIUM for what each command does; LOW for identifiers, because none is released.

  • redis_py, node_redis, go-redis, redis_rb: all 15 commands typed on the default branch. php (predis): all but BITRANGEINTARRAY.
  • jedis: 14 commands (all but BITRANGEINTARRAY), String and byte[] overloads as separate entries.
  • lettuce_sync/async/reactive: all 15, with many overloads (sexpire and spexpire have 8, sexpireat and spexpireat 12).
  • Left out on purpose: redis-rs (only redis::cmd), nredisstack (SE.Redis work is on its 8.12 branch behind SER011), ioredis, redisvl.
  • Descriptions are empty strings, as in HEXPIRE.json.

Re-check checklist

  • Signatures called against a live 8.12-rc2 server on each client's default branch (2026-11-10).
  • Highest risk: re-read every signature at each client's release tag. Identifiers move between a default branch and a release.
  • SE.Redis maps several commands onto one method (SetMemberExpire covers SEXPIRE/SPEXPIRE/SEXPIREAT/SPEXPIREAT; SetMemberGetTimeToLive is SPTTL only; BLESS SCAN is IServer.BlessedKeys). Decide how NRedisStack rows should represent that once 8.12 reaches main.
  • Add BITRANGEINTARRAY rows for jedis (#4830) and predis (DEV: add RESP2/3 return information to the t-digest commands #1754) once merged.
  • Add redis-rs rows if typed methods appear.
  • Check CMS.INITBYDIM, CMS.INITBYPROB and CMS.INCRBY for CELL_SIZE and negative increments (not mapped here).
  • node-redis: only BLESS confirmed in a release; the other S* files were assumed to match SEXPIRE.
  • go-redis BlessScan is node-local (cursor); node-redis BLESS SCAN returns a transformed {cursor, keys} object. Check whether the rows should say so.
  • Reconcile redis_py/php signature style with older files such as HEXPIRE.json, which differ slightly from the client-quirks.md rules.
  • The 2026-11-07 PR scan was already stale for lettuce and jedis; re-read defaults, don't trust the scan.

On unpark, then

Run /unpark with this PR's number. /unpark Steps 4–5 own the closing sequence; /finalize is deferred until then.

Adds data/command-api-mapping/ entries for BITRANGEINTARRAY, SADDEX,
SEXPIRE, SPEXPIRE, SEXPIREAT, SPEXPIREAT, STTL, SPTTL, SEXPIRETIME,
SPEXPIRETIME, SPERSIST and BLESS SET/CLEAR/GET/SCAN (15 files), and
regenerates data/command-api-mapping.json (additions only).

Signatures were read from each client's default branch on 2026-11-10, not
from a release. None of these APIs is in a stable release yet, so this PR is
parked until the clients ship (see the park manifest).

Per-client state on 2026-11-10:
- redis_py: all 15 typed on master; in v8.2.0b1 except BITRANGEINTARRAY;
  none in v8.1.0 (latest stable).
- node_redis: all 15; only BLESS confirmed shipped (6.3.1, 6.4.0-beta.0).
- go-redis, redis_rb: all 15 on master, none in v9.23.0 / v6.0.0.
- php (predis): BLESS shipped in 3.7.1; set expiry on main only (#1749);
  BITRANGEINTARRAY only in open PR #1754, so it is NOT mapped.
- jedis: 14 on master (BLESS #4773, set expiry #4828), none in v8.1.0-beta2;
  BITRANGEINTARRAY only in open PR #4830, NOT mapped.
- lettuce: all 15 on main (BITRANGEINTARRAY #3992 merged 2026-11-09), none in
  a tag.
- nredisstack/SE.Redis and redis-rs: nothing on the default branch, so no
  entries. SE.Redis has the work on its 8.12 branch behind SER011.

Learned:
- The 2026-11-07 PR scan was already stale for lettuce and jedis; re-read the
  default branch rather than trusting the scan.
- git's default diff of the regenerated merged file shows ~44k changed lines
  for what is an 8.5k-line pure addition; check with `git diff --patience`.
- Several upstream tests gate these commands at 8.11.x while the commands ship
  in 8.12 (redis-py 8.11.240, predis 8.11.0); not a docs problem, but do not
  copy those gates.
- go-redis BlessScan is node-local (cursor), and node_redis BLESS SCAN returns
  a transformed {cursor, keys} object; descriptions are left empty.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@andy-stark-redis andy-stark-redis added do not merge yet parked PR speculatively added based on pre-release info. Check validity when release goes ahead. labels Nov 10, 2026
@github-actions

github-actions Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

DOC-7292

@github-actions

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 5 related items from repository history (5 new this commit):

Memory updated at 85470f0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clients Client library docs do not merge yet parked PR speculatively added based on pre-release info. Check validity when release goes ahead.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants