Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion .claude/skills/command-api-mapping/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,12 @@ Classify each empty (command, client) against the **released** client, not the f

- `real_gap`: a typed method exists but the mapping has no signature. Fill it.
- `generic_only`: reachable only through `execute_command`, `call`, `Do`, `sendCommand`,
`executeRaw`, `redis::cmd` or container magic dispatch with no typed `@method`. Leave empty.
`executeRaw`, `redis::cmd` or container magic dispatch with no typed `@method`. Leave empty
and record it in the status file (below).
- `unsupported`: no way to call it, the method throws or panics (`Quit`/`Sync` in go-redis,
`memory_doctor` in redis-py), it is `[Obsolete(error: true)]` (SE.Redis `SlaveOf`), or it
is client-side and sends no command (`SELECT` as `GetDatabase`, `CLUSTER KEYSLOT`).
Leave empty and record it in the status file (below).
- Bare container rows (`ACL`, `CLIENT`, `CLUSTER`, `CONFIG`, `LATENCY`, `MEMORY`, `MODULE`,
`SLOWLOG`, `FUNCTION`, `SCRIPT`, `PUBSUB`) stay empty: the subcommand rows carry the
signatures. `HOTKEYS` is not one: check whether its subcommand files already exist.
Expand All @@ -99,6 +101,14 @@ A name match is a hypothesis. Read the method, and check a sample of hits before
count. Typed methods on a non-obvious receiver (`StatefulCmdable`, `IServer`, a `PubSub`
object, a callback object) still count as `real_gap`: cite the receiver in your report.

**Record why a list stays empty in `data/command-api-mapping-status.json`**, not in the
per-command files: `{command: {client_id: "generic_only" | "unsupported"}}`. The tab reads it
only when the list is empty, so an entry for a list you later fill is harmless but stale;
remove it. Keep it out of `api_calls`, other scripts read that shape. Sync and async clients
of one library can differ on purpose (SE.Redis `ReplicaOfAsync` works while `ReplicaOf` is
obsolete), so check the filled data before calling a pair unpaired. The README section "Why a
client has no signature" has the format; `genericCall` per client is in `config.toml`.

To fill many at once, write one fragment per client (`{command: [signatures]}`) outside the
repo, verify every signature by compiling or reflecting against the released artifact, then
apply with a script that replaces only lists that are currently `[]`, refuses any file that
Expand Down
Loading