| Command tokens | src/main/java/redis/clients/jedis/Protocol.java (Protocol.Command, Protocol.Keyword); module tokens in search/SearchProtocol.java (SearchCommand, SearchKeyword), timeseries/TimeSeriesProtocol.java, json/JsonProtocol.java, bloom/RedisBloomProtocol.java | the Command constant; Keyword constants for sub-tokens that no Rawable enum already carries |
| Token-valued enums | src/main/java/redis/clients/jedis/args/ (Rawable, raw = SafeEncoder.encode(name()); cf. args/HotkeysMetric) | one enum per token set the HLD defines |
| Params | src/main/java/redis/clients/jedis/params/ (IParams#addParams(CommandArguments); cf. params/HotkeysParams, params/SetParams; self-typed base when two overloads differ in a typed field) | the class, static factory, fluent setters, validation messages, equals/hashCode, the wire-emission order |
| Response models | src/main/java/redis/clients/jedis/BuilderFactory.java generic builders first (LONG_LIST, STRING, ENCODED_OBJECT_MAP, ...), util/KeyValue for pairs; a resps/ model only for map-shaped replies (cf. resps/HotkeysInfo); module replies in search/SearchBuilderFactory.java, json/JsonBuilderFactory.java and the other modules' *BuilderFactory | which builder parses the HLD section 5 reply under RESP2 and RESP3, and whether one exists |
| String interface - the contract | src/main/java/redis/clients/jedis/commands/<Group>Commands.java; module interfaces such as search/RediSearchCommands.java | exact signatures with the full Javadoc (redis.io link, complexity, @param, @return, @since) |
| Binary and pipeline interfaces | commands/<Group>BinaryCommands.java, commands/<Group>PipelineCommands.java, commands/<Group>PipelineBinaryCommands.java; module pipeline interface search/RediSearchPipelineCommands.java; a new family also extends commands/JedisCommands, JedisBinaryCommands, PipelineCommands, PipelineBinaryCommands | the mirrored signatures (byte[] for keys and textual values only; none for modules) |
| Command factory | src/main/java/redis/clients/jedis/CommandObjects.java (String and byte[] methods side by side under a // <Group> commands comment); ClusterCommandObjects.java for multi-key slot checks and for commands the HLD marks cluster-incompatible or special (cf. its scan, waitReplicas, waitAOF, hotkeysStart overrides) | one factory method per signature and the builder it uses |
| Execution entry points | src/main/java/redis/clients/jedis/UnifiedJedis.java, PipeliningBase.java, Jedis.java | the one-line delegations; Jedis additionally checkIsInMultiOrPipeline() |
| Formatter allowlist | pom.xml, formatter-maven-plugin <includes> | every new source and test file |
| Params unit tests | src/test/java/redis/clients/jedis/params/<Name>ParamsTest.java with src/test/java/redis/clients/jedis/util/CommandArgumentsMatchers.java (cf. params/HotkeysParamsTest) | validation, exact wire args and order, equals/hashCode |
| Mocked delegation tests | src/test/java/redis/clients/jedis/mocked/MockedCommandObjectsTestBase.java (typed @Mock CommandObject<T> fields), mocked/unified/UnifiedJedis<Group>CommandsTest.java (extends UnifiedJedisMockedTestBase), mocked/pipeline/PipeliningBase<Group>CommandsTest.java | which mock fields are reused or added, and the when/verify tests |
| Unified integration base | src/test/java/redis/clients/jedis/commands/unified/<Group>CommandsTestBase.java (extends UnifiedJedisCommandsTestBase; cf. HotkeysCommandsTestBase) | the test methods, with assertions taken from HLD section 8 |
| Topology runners | standalone commands/unified/client/RedisClient<Group>CommandsTest.java (RedisClientCommandsTestHelper), cluster commands/unified/cluster/Cluster<Group>CommandsTest.java (ClusterCommandsTestHelper), both @ParameterizedClass over redis.clients.jedis.commands.CommandsTestsParameters#respVersions; module runners under commands/unified/client/search/*RedisClientCommandsIT.java and commands/unified/cluster/search/*ClusterCommandsIT.java; pipeline commands/unified/pipeline/<Group>PipelineCommandsTest.java (PipelineCommandsTestBase) | existing runners to reuse for an existing group; new runners named *IT for a new family; the cluster overrides (hash-tagged keys, @Disabled where cluster semantics differ) |
Legacy Jedis tests | src/test/java/redis/clients/jedis/commands/jedis/<Group>CommandsTest.java (JedisCommandsTestBase), Cluster<Group>CommandsTest.java (ClusterJedisCommandsTestBase) | the smoke-level coverage and the binary variant tests |
| Gating | src/test/java/io/redis/test/annotations/SinceRedisVersion.java, EnabledOnCommand.java, ConditionalOnEnv.java; src/test/java/redis/clients/jedis/util/TestEnvUtil.java (ENV_OSS_DOCKER, ENV_REDIS_ENTERPRISE) | the annotation, its value and where it sits (base class, once) |
| Test endpoints | src/test/resources/endpoints.json (standalone0, modules-docker, cluster-stable; selected by REDIS_ENDPOINTS_CONFIG_PATH), src/test/resources/env/.env.v* | nothing to change; the plan names which endpoint each integration class needs (module commands: modules-docker) |
| Docs | docs/release-notes/<next-version>.md (## Highlights / ## Behavior Changes, entries headed ### <Title> ([#N](url))), docs/migration-guides/ for breaking changes, module pages such as docs/redisearch.md | the entry the PR must add |
| Build | pom.xml <version> (-> @since), maven-compiler-plugin <source>1.8</source> / <target>1.8</target>, Failsafe it-suffix execution (**/*IT.java), Surefire excludes **/*IntegrationTest(s).java | the @since value; whether the feature needs a server newer than the highest .env.v* pin (a Risk, not a planned edit) |