mirror of
https://github.com/hanzokv/go.git
synced 2026-09-24 00:31:51 +00:00
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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user