Production (spikersoft-infrastructure/redis-cluster/docker-stack.yml) pins redis/redis-stack-server:latest — a floating tag. Two actions:
Pin to a digest so the 6-node cluster doesn't silently change under us on node restarts/re-pulls.
Plan the redis:8 migration: redis-stack-server is on a deprecation path; redis:8 bundles the modules we use (Search, JSON, TimeSeries, Bloom) in core.
When the image moves, update in lockstep (per SpikerSoft.Tests.Integration/README.md): RedisFixture.RedisImage, RedisClusterTestFixture.RedisImage, docker-compose.test.yml, and the infra stack file — the test fixtures exist to stay prod-parity.
Follow-up flagged in #444 (notes section).
Production (`spikersoft-infrastructure/redis-cluster/docker-stack.yml`) pins `redis/redis-stack-server:latest` — a floating tag. Two actions:
1. **Pin to a digest** so the 6-node cluster doesn't silently change under us on node restarts/re-pulls.
2. **Plan the redis:8 migration**: redis-stack-server is on a deprecation path; `redis:8` bundles the modules we use (Search, JSON, TimeSeries, Bloom) in core.
When the image moves, update in lockstep (per SpikerSoft.Tests.Integration/README.md): `RedisFixture.RedisImage`, `RedisClusterTestFixture.RedisImage`, `docker-compose.test.yml`, and the infra stack file — the test fixtures exist to stay prod-parity.
Repos: spikersoft-infrastructure (primary), spikersoft-backend (test fixtures).
Digest pinning is done (action 1). Chosen digest — the manifest-list digest of redis/redis-stack-server:latest as of 2026-07-08, covering linux/amd64 and linux/arm64:
(Per-platform manifests: amd64 sha256:39adcbb0..., arm64 sha256:75cb09fe.... This is the content prod nodes already run, so redeploys are a no-op image-wise.)
Pinned in lockstep across all four locations:
spikersoft-backend PR #190 (merged): RedisFixture.RedisImage, RedisClusterTestFixture.RedisImage, docker-compose.test.yml + README lockstep note — full integration suite green against the pinned image (143 passed / 3 skipped, 4m24s).
spikersoft-infrastructure PR #14 (merged): all 7 references in redis-cluster/docker-stack.yml (6 nodes + cluster_initiator).
redis-cluster/backup.yml was left untouched — per spikerj it's a dead experiment, not a live deployment target.
Action 2 (redis:8 migration) is being attempted as part of the spikersoft-issues#465 coverage effort: redis:8 bundles Search/JSON/TimeSeries/Bloom in core, so the four --loadmodule /opt/redis-stack/lib/*.so lines drop out of the cluster fixture, compose file, and stack file. The integration suite (FT.SEARCH KNN under RESP3, Redis.OM round-trip, cluster health) is the validation gate; findings will be reported here either way. Prod redeploy/rollout planning stays with this ticket.
Digest pinning is done (action 1). Chosen digest — the manifest-list digest of `redis/redis-stack-server:latest` as of 2026-07-08, covering linux/amd64 and linux/arm64:
```
redis/redis-stack-server:latest@sha256:798ab84d9f266936b034ab11c4d04a2b8e4b441884c5aa7d17ac951eefdf742a
```
(Per-platform manifests: amd64 `sha256:39adcbb0...`, arm64 `sha256:75cb09fe...`. This is the content prod nodes already run, so redeploys are a no-op image-wise.)
Pinned in lockstep across all four locations:
- spikersoft-backend PR #190 (merged): `RedisFixture.RedisImage`, `RedisClusterTestFixture.RedisImage`, `docker-compose.test.yml` + README lockstep note — full integration suite green against the pinned image (143 passed / 3 skipped, 4m24s).
- spikersoft-infrastructure PR #14 (merged): all 7 references in `redis-cluster/docker-stack.yml` (6 nodes + `cluster_initiator`).
`redis-cluster/backup.yml` was left untouched — per spikerj it's a dead experiment, not a live deployment target.
Action 2 (redis:8 migration) is being attempted as part of the spikersoft-issues#465 coverage effort: redis:8 bundles Search/JSON/TimeSeries/Bloom in core, so the four `--loadmodule /opt/redis-stack/lib/*.so` lines drop out of the cluster fixture, compose file, and stack file. The integration suite (FT.SEARCH KNN under RESP3, Redis.OM round-trip, cluster health) is the validation gate; findings will be reported here either way. Prod redeploy/rollout planning stays with this ticket.
redis:8 migration (action 2) is done in code, validated by the integration suite:
spikersoft-backend PR #191 (merged): fixtures → redis:8@sha256:2838d5524559494f6f1cd66e97e76b200d64a633a8614200620755ed395daf32 (v8.8.0). RedisFixture is an image swap only; the cluster fixture and docker-compose.test.yml keep explicit --loadmodule (they bypass the entrypoint) with paths moved to /usr/local/lib/redis/modules. Full suite: 143 passed / 3 skipped, 4m47s.
spikersoft-infrastructure PR #15 (merged): all 7 stack references → same digest, all --loadmodule lines dropped (the redis:8 entrypoint injects them automatically for redis-server commands — verified against the image's docker-entrypoint.sh and MODULE LIST with a command override).
The suite caught a real prod bug: RediSearch 8.x renamed the missing-index error to SEARCH_INDEX_NOT_FOUND Index not found: <name>. RedisVectorIndexInitializationService (and three other call sites sniffing the old Unknown index name/no such index wording) would have treated "index missing" as a hard failure on redis:8 and never created the vector index — silently degrading vector search to the in-memory fallback. Fixed in PR #191; deploy the backend before rolling the cluster image.
Remaining for this ticket = prod rollout only: rolling redeploy (replicas first; engine goes 7.4-era → 8.8.0, no image rollback after nodes persist under the new version), then MODULE LIST / FT._LIST spot checks. Leaving the ticket open for that.
redis:8 migration (action 2) is done in code, validated by the integration suite:
- **spikersoft-backend PR #191 (merged)**: fixtures → `redis:8@sha256:2838d5524559494f6f1cd66e97e76b200d64a633a8614200620755ed395daf32` (v8.8.0). `RedisFixture` is an image swap only; the cluster fixture and `docker-compose.test.yml` keep explicit `--loadmodule` (they bypass the entrypoint) with paths moved to `/usr/local/lib/redis/modules`. Full suite: 143 passed / 3 skipped, 4m47s.
- **spikersoft-infrastructure PR #15 (merged)**: all 7 stack references → same digest, all `--loadmodule` lines dropped (the redis:8 entrypoint injects them automatically for `redis-server` commands — verified against the image's `docker-entrypoint.sh` and `MODULE LIST` with a command override).
**The suite caught a real prod bug**: RediSearch 8.x renamed the missing-index error to `SEARCH_INDEX_NOT_FOUND Index not found: <name>`. `RedisVectorIndexInitializationService` (and three other call sites sniffing the old `Unknown index name`/`no such index` wording) would have treated "index missing" as a hard failure on redis:8 and never created the vector index — silently degrading vector search to the in-memory fallback. Fixed in PR #191; **deploy the backend before rolling the cluster image**.
Remaining for this ticket = prod rollout only: rolling redeploy (replicas first; engine goes 7.4-era → 8.8.0, no image rollback after nodes persist under the new version), then `MODULE LIST` / `FT._LIST` spot checks. Leaving the ticket open for that.
Resolved — both actions done and exceeded: digest pinning in spikersoft-backend PR #190 + spikersoft-infrastructure PR #14 (merged), and the redis:8 migration itself (not just the plan) landed in backend PR #191 + infra PR #15 (merged), keeping fixtures and prod in lockstep. Closing.
Resolved — both actions done and exceeded: digest pinning in spikersoft-backend PR #190 + spikersoft-infrastructure PR #14 (merged), and the redis:8 migration itself (not just the plan) landed in backend PR #191 + infra PR #15 (merged), keeping fixtures and prod in lockstep. Closing.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-up flagged in #444 (notes section).
Production (
spikersoft-infrastructure/redis-cluster/docker-stack.yml) pinsredis/redis-stack-server:latest— a floating tag. Two actions:redis:8bundles the modules we use (Search, JSON, TimeSeries, Bloom) in core.When the image moves, update in lockstep (per SpikerSoft.Tests.Integration/README.md):
RedisFixture.RedisImage,RedisClusterTestFixture.RedisImage,docker-compose.test.yml, and the infra stack file — the test fixtures exist to stay prod-parity.Repos: spikersoft-infrastructure (primary), spikersoft-backend (test fixtures).
Digest pinning is done (action 1). Chosen digest — the manifest-list digest of
redis/redis-stack-server:latestas of 2026-07-08, covering linux/amd64 and linux/arm64:(Per-platform manifests: amd64
sha256:39adcbb0..., arm64sha256:75cb09fe.... This is the content prod nodes already run, so redeploys are a no-op image-wise.)Pinned in lockstep across all four locations:
RedisFixture.RedisImage,RedisClusterTestFixture.RedisImage,docker-compose.test.yml+ README lockstep note — full integration suite green against the pinned image (143 passed / 3 skipped, 4m24s).redis-cluster/docker-stack.yml(6 nodes +cluster_initiator).redis-cluster/backup.ymlwas left untouched — per spikerj it's a dead experiment, not a live deployment target.Action 2 (redis:8 migration) is being attempted as part of the spikersoft-issues#465 coverage effort: redis:8 bundles Search/JSON/TimeSeries/Bloom in core, so the four
--loadmodule /opt/redis-stack/lib/*.solines drop out of the cluster fixture, compose file, and stack file. The integration suite (FT.SEARCH KNN under RESP3, Redis.OM round-trip, cluster health) is the validation gate; findings will be reported here either way. Prod redeploy/rollout planning stays with this ticket.redis:8 migration (action 2) is done in code, validated by the integration suite:
redis:8@sha256:2838d5524559494f6f1cd66e97e76b200d64a633a8614200620755ed395daf32(v8.8.0).RedisFixtureis an image swap only; the cluster fixture anddocker-compose.test.ymlkeep explicit--loadmodule(they bypass the entrypoint) with paths moved to/usr/local/lib/redis/modules. Full suite: 143 passed / 3 skipped, 4m47s.--loadmodulelines dropped (the redis:8 entrypoint injects them automatically forredis-servercommands — verified against the image'sdocker-entrypoint.shandMODULE LISTwith a command override).The suite caught a real prod bug: RediSearch 8.x renamed the missing-index error to
SEARCH_INDEX_NOT_FOUND Index not found: <name>.RedisVectorIndexInitializationService(and three other call sites sniffing the oldUnknown index name/no such indexwording) would have treated "index missing" as a hard failure on redis:8 and never created the vector index — silently degrading vector search to the in-memory fallback. Fixed in PR #191; deploy the backend before rolling the cluster image.Remaining for this ticket = prod rollout only: rolling redeploy (replicas first; engine goes 7.4-era → 8.8.0, no image rollback after nodes persist under the new version), then
MODULE LIST/FT._LISTspot checks. Leaving the ticket open for that.Resolved — both actions done and exceeded: digest pinning in spikersoft-backend PR #190 + spikersoft-infrastructure PR #14 (merged), and the redis:8 migration itself (not just the plan) landed in backend PR #191 + infra PR #15 (merged), keeping fixtures and prod in lockstep. Closing.