Skip to main content

tce-examples

Create or extend tabbed code examples (TCEs) — the multi-language code blocks rendered by the clients-example shortcode. Use when a docs page needs client examples added, when auditing a command page for missing client coverage, when an example set needs a new step, or when a client needs backfilling into an existing set. Covers audit, parallel generation across clients, live testing, and Codex review.

소스 정보

저장소
redis/docs
최근 소스 활동
2026년 8월 28일 08:42
감지된 SKILL.md 언어
영어
스타
85
포크
368

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
36 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
tce-examples
description
Create or extend tabbed code examples (TCEs) — the multi-language code blocks rendered by the clients-example shortcode. Use when a docs page needs client examples added, when auditing a command page for missing client coverage, when an example set needs a new step, or when a client needs backfilling into an existing set. Covers audit, parallel generation across clients, live testing, and Codex review.
# Tabbed code examples (TCEs) Take a docs page that demonstrates Redis commands and produce working, tested examples for every supported client library, wired into the page with the `clients-example` shortcode. This is **AI-in-the-loop work.** The parsing is mechanical and already scripted (Phase 0); the code generation is not. Each client has real API differences, real return-shape differences, and real idioms — that judgment is yours. What the reference files give you is the durable facts, so you don't re-derive (or misremember) them. ## The client table **`build/example-test-harness/clients.tsv` is the single source of truth for client identity** — display names, component ids, API-mapping keys, `local_examples` directory aliases, filename conventions, and where each client is testable. Read it before you touch anything: ```bash column -t -s$'\t' build/example-test-harness/clients.tsv ``` Do not restate its contents in prose, in a brief, or in another table. The five duplicated client tables in the skill this replaced had all drifted from `config.toml`; that is the failure mode this file exists to prevent. ## Three file locations, one lifecycle An example lives in up to three places, and **which one you read from matters**: | Location | Role | Notes | |---|---|---| | `local_examples/<set>/<client>/` | **Staging** — tested, pending upstream merge | Usually the *most complete* version. Has steps the client repo doesn't. | | Client repo (`repo_path` in clients.tsv) | **Source of truth** — merged upstream | What the site build actually fetches. | | `tmp/clients/examples/<client>/` | **Test bed** — gitignored, transient | Where files get staged to run. Never author here. | > **Read `local_examples/` first.** If the file exists there it supersedes the client repo copy. > Starting from the client repo — or from a blank file — silently drops the pending steps. This > is the single most common way TCE work goes wrong. ## Phases Each phase has a gate. Don't skip them; the whole point of the ordering is that a mistake in Phase 1 gets multiplied by every agent in Phase 2. ### Phase 0 — Audit ```bash python3 .claude/skills/tce-examples/scripts/audit_page.py content/commands/hset.md ``` Wraps the repo's existing parsers (`build/components/cli_parser.py`, `build/components/markdown_parser.py`) so the four CLI source formats and the `> ` / `redis> ` / `127.0.0.1:6379> ` prompt handling stay correct without being restated here. Emits a human table plus `--json` for a machine-readable work plan: per CLI block, the source format, line range, commands, `set`/`step` if already wired, existing coverage from `data/examples.json`, and which clients are missing. **Gate:** you can name the set id, the step names, and the exact client list before writing code. ### Phase 1 — Reference implementation Write **one** client by hand — default `redis-py`, because Python surfaces design decisions most plainly. Test it (Phase 3 for that client alone). This fixes the step names, the command sequence, and the expected-output comments that every other client must match. **Gate: show the user the reference before Phase 2.** Its conventions propagate to a dozen parallel agents; a wrong step name here costs a dozen retrofits. ### Phase 2 — Parallel fan-out Spawn one subagent per remaining client, **all in a single message** so they run concurrently. Fill in `assets/brief-template.md` per agent. Each brief must carry: - The reference implementation file, and the step names as a closed list. - The client's row from `clients.tsv` (target path, filename, aliases). - The relevant `data/command-api-mapping/<COMMAND>.json` entries — the real signatures. Do not let an agent guess a method name. - The client's `assets/<assets>/*_TEST_PATTERNS.md` **and** its working sample. - **The most complete existing version of the file**, per the lifecycle table above, with an explicit instruction to extend rather than replace. - For C#: which flavor. See "The two C# clients" below — this is not optional context. Each agent returns `assets/report-template.md`. Read all of them before Phase 3: repeated questions mean the brief was ambiguous, and identical divergences across agents usually mean a convention is missing rather than that a dozen agents each erred. ### Phase 3 — Test ```bash redis-server --daemonize yes # scratch instance; the harness FLUSHes it build/example-test-harness/run.sh --fidelity cmds_hash ``` See `reference/testing.md` for both environments, what each client needs, and the known traps. **Gate:** every client PASS, or SKIP with a stated reason. A silent SKIP is a failure. ### Phase 4 — Codex review An independent reviewer with fresh context, invoked per client in parallel. Catches the class the harness structurally cannot: tests that pass while the expected-output comments are wrong, step names that drifted, an API the docs shouldn't showcase, scaffolding that leaks into the rendered page. Invocation and schema in `reference/testing.md`. **Gate:** no unresolved `severity: high`. ### Phase 5 — Retrofit Fix, then re-run Phases 3–4 for touched clients only. > **Verify each finding against the current file before editing it.** Reviewers work from a > snapshot; a parallel agent may have already fixed the thing being reported. `grep` for the > described pattern first — a one-second check that prevents reverting a good fix. ### Phase 6 — Wire into the docs 1. Place files at `local_examples/<set>/<client>/<filename>` per `clients.tsv`. 2. Add or update the shortcode. Use **named** parameters: `set`, `step`, `description`, `difficulty`, `buildsUpon`. The guidance in `for-ais-only/tcedocs/README.md` on writing descriptions and choosing difficulty is current and good — follow it there rather than guessing. 3. Rebuild and confirm the steps landed: ```bash python3 build/make.py jq '.<set> | keys' data/examples.json ``` **Gate:** `hugo serve`, open the page, confirm the right tabs appear, the correct step is highlighted, and no `REMOVE`/`HIDE` scaffolding is visible. ## Using the samples as templates Each `assets/<client>/sample_*` file is a **working, runnable** example — that's the point, it gives you a compilable starting shape. Two rules when working from one: 1. **Never copy the banner comment.** Each sample opens with a ~18-line header explaining the markers. Comment lines that are not inside a `HIDE` or `REMOVE` block are **published verbatim** into the rendered docs. A real example starts directly with `// EXAMPLE: <name>` on line 1, optionally `BINDER_ID` on line 2. 2. **Take the structure, not the step list.** Samples deliberately demonstrate several unrelated steps to show the range of patterns. A generated example normally covers one command page. Always read the matching `*_TEST_PATTERNS.md` alongside the sample — it carries the per-client traps (surefire include rules, Rust file placement, PHP test-base class, C# fixture API). ## Markers `EXAMPLE:`, `BINDER_ID`, `HIDE_START`/`HIDE_END`, `REMOVE_START`/`REMOVE_END`, `STEP_START <name>`/`STEP_END`. Full semantics — including what each does to the rendered output — are specified in `for-ais-only/tcedocs/SPECIFICATION.md`; read it there rather than working from memory. The structural pattern: ``` EXAMPLE marker → HIDE: imports + connection → REMOVE: pre-test cleanup → STEP: the example code, with `>>>` output comments → REMOVE: assertions → REMOVE: post-test cleanup → HIDE: disconnect ``` **Step naming:** one example per command page → the command name (`hmget`). Multiple → numbered (`scan1`, `scan2`). Lowercase, concise, and **identical across every client in the set**. ## The two C# clients `C#-Sync (NRedisStack)` and `C#-Sync (SE.Redis)` are not two codebases. Both are fed from the same `NRedisStack` repo directory, partitioned by a content filter in `data/components/`: - imports `using NRedisStack` → the **NRedisStack** tabs - does **not** import it → the **SE.Redis** tabs - `using NRedisStack.Tests` is excluded from that test — every file has it for fixtures So a single `.cs` file feeds one tab or the other, never both, and the deciding factor is an import line. Most command-page C# examples are SE.Redis-flavored, because plain hash/list/string commands don't need NRedisStack. Both flavors carry identical test scaffolding, so this is a **generation** distinction, not a testing one — the same runner handles both. Getting the flavor wrong puts a working, passing example in the wrong tab. Say which flavor you want in the brief, and check it in review. ## Validation checklist - [ ] Every client in the Phase 0 work plan implemented (not "all 12" — read `clients.tsv`) - [ ] Method signatures taken from `data/command-api-mapping/`, not guessed - [ ] Step names identical across clients, and matching the reference - [ ] Pre-existing steps preserved, not overwritten - [ ] Markers placed so no scaffolding or banner text reaches the rendered page - [ ] Expected-output comments (`>>>`) match what the client actually returns - [ ] Assertions and cleanup inside `REMOVE` blocks - [ ] Test keys deleted both before and after - [ ] C# files carry the intended flavor ## Guardrails - **Don't invent method names.** If `data/command-api-mapping/` lacks the command for a client, read the client source (see `.claude/skills/command-api-mapping/` for how) or omit that client and say so — don't guess a plausible signature. - **Don't add a client that doesn't support the command.** An empty or wrong tab is worse than an absent one. - **Don't edit `data/examples.json`.** It's generated by `build/make.py`. - **Don't author in `tmp/clients/`.** It's gitignored and transient; work lands in `local_examples/`.
GitHub에서 보기