SeekDB Code Review
oceanbase/seekdb
Reviews seekdb pull requests and diffs for real defects in correctness, resources, concurrency, security and tests, reporting only Blocker or Major findings.
Rocky's Rust coding style — let-else early returns, shadowing, newtypes, enums over bools, no wildcard matches, no noise comments.
$ npx skills add rocky-data/rocky --skill rust-style -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rocky-data/rocky rust-style --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .claude/skills && cp -r skills-src/engine/.claude/skills/rust-style .claude/skills/rust-style && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "rust-style" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-style into .claude/skills/rust-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-style", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-styleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rocky-data/rocky --skill rust-style -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rocky-data/rocky rust-style --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .agents/skills && cp -r skills-src/engine/.claude/skills/rust-style .agents/skills/rust-style && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "rust-style" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-style into .agents/skills/rust-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-style", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rocky-data/rocky --skill rust-style -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rocky-data/rocky rust-style --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/engine/.claude/skills/rust-style .cursor/skills/rust-style && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "rust-style" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-style into .cursor/skills/rust-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-style", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rocky-data/rocky.git --path engine/.claude/skills/rust-style--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rocky-data/rocky --skill rust-style -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rocky-data/rocky rust-style --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/engine/.claude/skills/rust-style .gemini/skills/rust-style && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "rust-style" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-style into .gemini/skills/rust-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-style", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rocky-data/rocky rust-styleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rocky-data/rocky --skill rust-style -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .github/skills && cp -r skills-src/engine/.claude/skills/rust-style .github/skills/rust-style && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "rust-style" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-style into .github/skills/rust-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-style", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rocky-data/rocky --skill rust-style -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rocky-data/rocky rust-style --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/engine/.claude/skills/rust-style .opencode/skills/rust-style && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "rust-style" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-style into .opencode/skills/rust-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-style", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
rust-styleRocky's Rust coding style — let-else early returns, shadowing, newtypes, enums over bools, no wildcard matches, no noise comments.
Rust Style is an agent skill from rocky-data/rocky. Rocky's Rust coding style — let-else early returns, shadowing, newtypes, enums over bools, no wildcard matches, no noise comments. Use when writing or reviewing Rust code in any engine crate.
Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development. It works with Rust. The repository describes itself as: A SQL transformation engine that type-checks your whole pipeline and catches breaking changes before they run — branches, replay, column-level lineage, compile-time contracts… The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 9c3d777. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitcargoFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
gist.github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Rust Style loads about 1.8k tokens when it runs. Until then it costs about 51 tokens; SKILL.md has 575 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rocky-data/rocky at commit 9c3d777, republished under its Apache-2.0 licence (© rocky-data). 575 words, ~1,816 tokens.
.claude/skills/rust-style/SKILL.md (or your agent's skills folder).Source: partially vendored from davidbarsky/8fae6dc45c294297db582378284bd1f2 @ 191b2ee46088920de97d682561e2abd1edd64a42 (SKILL-2.md).
This is a cherry-pick of Barsky's rust-style gist, not a verbatim vendor. Barsky himself flags that his gist is personal preference. The rules below are the ones that fit Rocky's existing code; the rules that conflict with idiomatic Rocky are deliberately omitted.
| Upstream rule | Why Rocky doesn't enforce it |
|---|---|
"Use for loops, not iterator chains" | Rocky uses iter().filter().map().collect() freely throughout the codebase — it's idiomatic Rust and the codebase is already consistent with it. Swapping to mutable-accumulator loops would be a large and contentious rewrite. |
"Avoid the matches! macro" | matches! is the standard Rust idiom for boolean variant checks. Rocky uses it; removing it would produce more verbose code, not clearer code. |
| "Always use explicit destructuring for struct field access" | Too strict for a workspace this size. Dot-access is fine for ad-hoc reads; reserve destructuring for match arms and when all fields are consumed. |
The rules below are the ones that are enforced.
let ... elseUse let ... else to extract values and exit early on failure. This keeps the happy path unindented.
// DO
let Some(user) = get_user(id) else {
return Err(Error::NotFound);
};
let Ok(session) = user.active_session() else {
return Err(Error::NoSession);
};
// continue with user and session
// DON'T
if let Some(user) = get_user(id) {
if let Ok(session) = user.active_session() {
// deeply nested code
} else {
return Err(Error::NoSession);
}
} else {
return Err(Error::NotFound);
}// DO
let Some(value) = maybe_value else { continue };
let Ok(parsed) = input.parse::<i32>() else { continue };if let only for short, no-else cases// ACCEPTABLE: short action, no else
if let Some(callback) = self.on_change {
callback();
}
// DO: use let-else when you need the value to continue
let Some(config) = load_config() else {
return default_config();
};
// DO: use match for multiple branches
match result {
Ok(value) => process(value),
Err(Error::NotFound) => use_default(),
Err(e) => return Err(e),
}Shadow variables through transformations. Avoid prefixes like raw_, parsed_, trimmed_.
// DO
let input = get_raw_input();
let input = input.trim();
let input = input.to_lowercase();
let input = parse(input)?;
// DON'T
let raw_input = get_raw_input();
let trimmed_input = raw_input.trim();
let lowercase_input = trimmed_input.to_lowercase();
let parsed_input = parse(lowercase_input)?;Keep comments to what the code can't say for itself.
// --- Section ---).git log.///) on public items are required and follow the rust-doc skill. SAFETY: comments on unsafe blocks are required and follow the rust-unsafe skill.// DON'T
// Check if user is valid
if user.is_valid() {
// Update the timestamp
user.touch();
}
// --- Helper functions ---
// TODO: refactor this later
fn helper() { }
// Old implementation:
// fn old_way() { }
// DO
if user.is_valid() {
user.touch();
}
fn helper() { }Wrap strings in newtypes to add semantic meaning and prevent mixing. Rocky already uses this pattern for SQL identifiers and catalog/schema/table names — see rocky-sql/src/validation.rs.
// DO
struct TenantId(String);
struct CatalogName(String);
fn create_catalog(tenant: TenantId, catalog: CatalogName) { }
// DON'T
fn create_catalog(tenant: String, catalog: String) { }When to not create a newtype: transient locals that never escape a function, or values that are immediately passed through unchanged. Don't cargo-cult this rule.
Use enums with meaningful variant names instead of bool parameters.
// DO
enum Visibility {
Public,
Private,
}
fn create_repo(name: &str, visibility: Visibility) { }
// DON'T
fn create_repo(name: &str, is_public: bool) { }// DO — already used in Rocky for materialization strategies
enum RefreshMode {
FullRefresh,
Incremental,
}
// DON'T
fn run_pipeline(full: bool) { }Always match all variants explicitly so the compiler errors when a variant is added. This is load-bearing for Rocky because MaterializationStrategy, PipelineType, and the various *Output enums all grow over time and we want the compiler to find every site that needs updating.
// DO
match strategy {
MaterializationStrategy::FullRefresh => handle_full(),
MaterializationStrategy::Incremental => handle_incremental(),
MaterializationStrategy::Merge => handle_merge(),
MaterializationStrategy::MaterializedView => handle_mv(),
MaterializationStrategy::DynamicTable => handle_dt(),
MaterializationStrategy::TimeInterval => handle_ti(),
}
// DON'T
match strategy {
MaterializationStrategy::FullRefresh => handle_full(),
_ => handle_other(),
}Exception: wildcard-matching an enum you don't own (e.g. std::io::ErrorKind, which is #[non_exhaustive]) is fine and often required. The rule is about enums defined inside the Rocky workspace.
If a wildcard seems unavoidable for a Rocky-owned enum, stop and reconsider — it usually means a variant-specific case was overlooked.
When searching or navigating Rust code in the multi-crate workspace, prefer LSP operations over raw text search — they respect type resolution and paths:
goToDefinition — find where a symbol is definedfindReferences — find all references (respects re-exports)hover — type info and documentationdocumentSymbol — all symbols in a filegoToImplementation — find trait implementations (especially useful for the Adapter trait family)For structural refactors, see the rust-analyzer-ssr skill.
rust-doc — RFC 1574 doc comment conventions for public itemsrust-error-handling — thiserror (lib) vs anyhow (bin) decision treerust-async-tokio — Tokio, #[async_trait], AIMD concurrencyrust-unsafe — SAFETY: comment conventions for the engine's few unsafe sites (mmap, a repr(transparent) cast, serialised test env mutation)rust-clippy-triage — playbook when cargo clippy -D warnings fires© rocky-data, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in engine/.claude/skills/rust-style of rocky-data/rocky.
Open the folder on GitHubat commit 9c3d777
Rust Style next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Rust Style this skillrocky-data/rocky | 304 | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| SeekDB Code Reviewoceanbase/seekdb | 3.1k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Clippy CIlakeops-org/queryflux | 144 | — | ~458 | Automated safety check: Pass | Apache-2.0 | |
| Mz ProfileMaterializeInc/materialize | 6.4k | — | ~480 | Automated safety check: Pass | Custom licence | |
| Rust Projectmajiayu000/spellbook | 287 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Migrate Core Code to Submodulestinyhumansai/openhuman | 42k | — | ~2.6k | Automated safety check: Pass | GPL-3.0 |
oceanbase/seekdb
Reviews seekdb pull requests and diffs for real defects in correctness, resources, concurrency, security and tests, reporting only Blocker or Major findings.
lakeops-org/queryflux
Run QueryFlux Clippy the same way CI does (-D warnings, workspace, exclude queryflux-bench) and fix failures before opening or updating a PR.
MaterializeInc/materialize
Trigger: "profile Materialize", "check memory usage", "analyze binary size", "debug performance", or mentions profiling, samply, heaptrack, flame graphs, memory checking, binary size, slow queries…
majiayu000/spellbook
Modern Rust project architecture guide for 2025. An agent skill from majiayu000/spellbook.
tinyhumansai/openhuman
Plans and carries out moving non-host-specific code and its tests from the OpenHuman core into vendored tiny submodule libraries, then releases the submodule and re-pins the host.
AprilNEA/OpenLogi
Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.
rocky-data/rocky
Fivetran REST API reference for Rocky's source adapter. An agent skill from rocky-data/rocky.
rocky-data/rocky
Databricks REST API and SQL reference for Rocky's warehouse adapter.
rocky-data/rocky
Rocky CLI JSON-output schema cascade. An agent skill from rocky-data/rocky.
rocky-data/rocky
Top-level router for Rocky development tasks. An agent skill from rocky-data/rocky.
rocky-data/rocky
Rocky DSL (.rocky file) cross-subproject cascade. An agent skill from rocky-data/rocky.
rocky-data/rocky
Adding a new warehouse or source adapter crate to the Rocky engine.
Works with
Categories
Rocky's Rust coding style — let-else early returns, shadowing, newtypes, enums over bools, no wildcard matches, no noise comments. Rust Style is an agent skill from rocky-data/rocky. Rocky's Rust coding style — let-else early returns, shadowing, newtypes, enums over bools, no wildcard matches, no noise comments.
Rust Style fits situations like: reviewing Rust code in any engine crate.
Run `npx skills add rocky-data/rocky --skill rust-style -a claude-code`. Or copy the skill folder (engine/.claude/skills/rust-style in rocky-data/rocky) into .claude/skills/rust-style in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rocky-data/rocky --skill rust-style -a codex`. Or copy the skill folder (engine/.claude/skills/rust-style in rocky-data/rocky) into .agents/skills/rust-style in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rocky-data/rocky --skill rust-style -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rust-style, .gemini/skills/rust-style, .github/skills/rust-style and .opencode/skills/rust-style in your project.
Going by SKILL.md and its folder, Rust Style needs the command-line tools its instructions call (git and cargo).
SKILL.md names 1 domain. As links in the text: gist.github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Rust Style is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Rust Style: SeekDB Code Review (oceanbase/seekdb, 3.1k stars), Clippy CI (lakeops-org/queryflux, 144 stars), Mz Profile (MaterializeInc/materialize, 6.4k stars) and Rust Project (majiayu000/spellbook, 287 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rocky-data (a GitHub organization) maintains it in rocky-data/rocky, which has 304 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 9, 2026.
Source: rocky-data/rocky on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.