docs: state the kv vocabulary and the version floors

The package is kv, the scheme is kv://, and the org holds one repo per language
or concern. Records the two floors a consumer has to clear: v9.21.1 for the
module path, v9.22.0 for the package rename.
This commit is contained in:
2026-07-26 11:13:30 -07:00
parent a55222f4eb
commit e38f534b7f
+52 -31
View File
@@ -1,38 +1,59 @@
# LLM.md - Hanzo Kv Go
# LLM.md — Hanzo KV, Go client
## Overview
Go module: github.com/hanzokv/go/v9
Module: `github.com/hanzokv/go/v9` · package `kv`
## Tech Stack
- **Language**: Go
## Build & Run
```bash
go build ./...
go test ./...
go test ./... # the integration suites need a live KV on :6379
```
## Structure
```
kv-go/
CONTRIBUTING.md
LICENSE
Makefile
README.md
RELEASE-NOTES.md
RELEASING.md
acl_commands.go
acl_commands_test.go
adapters.go
async_handoff_integration_test.go
auth/
bench_test.go
bitmap_commands.go
bitmap_commands_test.go
cluster_commands.go
```
## The vocabulary is `kv`
## Key Files
- `README.md` -- Project documentation
- `go.mod` -- Go module definition
- `Makefile` -- Build automation
We do not use Redis. The client says so end to end:
| | |
|---|---|
| package | `kv` — `kv.NewClient`, `kv.Options`, `kv.Nil`, `kv.UniversalClient` |
| errors | `"kv: …"` |
| URL scheme | **`kv://`, `kvs://`, `unix://`** — `redis://` does not parse |
| companions | `extra/kv{otel,cmd,prometheus,census}` |
| env | `KV_VERSION`, `KV_ENDPOINTS_CONFIG_PATH` |
`ParseURL` accepting only `kv://` fails closed by design. A stale
`KV_URL=redis://…` stops a service that validates it and silently degrades one
that does not. No alias, no dual-accept.
Two spellings stay, and neither is branding: **`RediSearch`** names a specific
external module the `FT.*` commands map to, and **`StoreDist`** matches a
case-insensitive search for "redis" by accident — `sto-reDis-t`.
None of this touches the wire. RESP commands are `GET`/`SET`/`HSET`; the word
never appears in the protocol. The only server-visible spellings were the
`ParseURL` scheme, which we choose, and the `CLIENT SETINFO` lib-name label,
which the server merely records.
## One of each thing in the org
| repo | is |
|---|---|
| `hanzokv/go` | this client |
| `hanzokv/js` | the TypeScript client — npm **`@hanzo/kv`** |
| `hanzokv/mock` | the test mock — typed against this client, so it moves in lockstep |
| `hanzokv/lock` | distributed locks — its adapter is typed against this client too |
| `hanzokv/valkey` | the server fork |
Named for the language or the concern; the org supplies the product noun. A repo
called `kv-go` under `hanzokv` would say it twice. Same convention as `hanzo-ds`.
## Versioning
Always `x.y.z` → `x.y.z+1`. This module stays **v9** forever — breaking changes
are minor bumps, so there is no `/v10` import churn.
**v9.21.1 is the floor for the module path** and **v9.22.0 for the package
rename**. Anything below declares an older path or the old package name, and Go
rejects a module whose declared path does not match the requested one.
`extra/*` are separate modules with their own tags (`extra/kvotel/v9.22.0`) and
carry `replace` directives to the parent for local work, so a release is the core
tag plus four extras.