review-docs
Skill442 starsChanged 5 months agoApache-2.0View on GitHub
Review documentation files for grammar, factual accuracy, and query correctness. Use when the user asks to review docs, validate documentation, or check YQL examples. Accepts a path to a file or directory as argument.
We split this skill into the rules it gives an agent
22 rules. 0 are common, 8 are distinctive, and 14 are very specific to this project.
0
Common
Most of the 21 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
14
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 10
Use $ARGUMENTS as the target path.
- Very specific: line 25
If $ARGUMENTS points to a single .md file, review that file.
- Very specific: line 26
If $ARGUMENTS points to a directory, discover all .md files in it recursively using Glob.
- Distinctive: line 27
Read each file and build a review queue.
- Very specific: line 38
Code block language tags: ensure
sql ,java , etc. - Very specific: line 47
Check for inconsistent link targets (e.g., a file linked as both SQL-Syntax.md and YQL-Syntax.md when only one exists).
- Very specific: line 51
Read through each document and extract all verifiable factual claims about YouTrackDB / YQL behavior.
- Very specific: line 69
Add new test methods to the persistent DocValidationTest class …
- Very specific: line 151
Parameterized queries: use alternating key/value pairs: tx.yql("SELECT FROM Foo WHERE name = :name", "name", "bar")
- Distinctive: line 164
Run the test class:
- Distinctive: line 168
If Spotless formatting fails, fix it first:
- Distinctive: line 172
If tests fail, analyze each failure:
- Distinctive: line 180
After all checks complete, present a consolidated report to the user:
- Distinctive: line 215
Ask the user whether to:
- Distinctive: line 222
After the review is complete:
- Very specific: line 224
Ensure all new test methods were added and pass: ./mvnw -pl core clean test -Dtest=DocValidationTest
- Very specific: line 225
Run Spotless to ensure formatting: ./mvnw -pl core spotless:apply
- Very specific: line 229
Never modify the test infrastructure — only add methods to DocValidationTest.
- Very specific: line 231
Always run spotless:apply before running tests if the test class is new.
- Very specific: line 232
When validating queries, create unique class names per test to avoid collisions (e.g., CityDistinct, EmpSalary).
- Distinctive: line 234
If a document references files that don't exist yet, flag them as warnings but don't fail the review.
- Very specific: line 237
Transaction helpers: Use g.executeInTx() for side-effecting operations, g.computeInTx() when you need a return value, and …
“Common” is measured: kept by at least 6 in 10 of the 21 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Review documentation files for grammar, factual accuracy, and query correctness.
The user will provide a path to a single document or a folder containing documents.
Use $ARGUMENTS as the target path. If no argument is provided, ask the user for the path.
Scope
This command reviews Markdown documentation files (.md) covering:
- Grammar and style — punctuation, spelling, word choice, hyphenation, sentence structure
- Factual claims — verify statements about database behavior against the actual codebase
- Query correctness — validate all YQL/SQL code examples by executing them on a real in-memory database
- Internal consistency — cross-reference links, terminology, and naming conventions within and across documents
- Code example formatting — verify code blocks have correct language tags, consistent style
Workflow
Step 1: Discover target files
- If
$ARGUMENTSpoints to a single.mdfile, review that file. - If
$ARGUMENTSpoints to a directory, discover all.mdfiles in it recursively using Glob. - Read each file and build a review queue.
Step 2: Grammar and style review (per file)
For each document, check for:
- Punctuation: missing commas after introductory phrases ("For this reason,"), before conjunctions in compound sentences, around parenthetical clauses.
- Spelling: typos, common misspellings (e.g., "straight forward" -> "straightforward").
- Hyphenation: compound adjectives before nouns need hyphens (e.g., "case-insensitive", "not-indexed").
- Word choice: awkward phrasing (e.g., "suggest to use" -> "suggest using", "look to" -> "refer to").
- Consistency: same terms spelled/capitalized the same way throughout. Check
YouTrackDB,YQL, class names, etc. - Formatting: extra spaces before colons/punctuation, double spaces, inconsistent heading levels.
- Code block language tags: ensure
```sql,```java, etc. are present and correct.
Produce a table of findings per file: line number, issue, suggested fix.
Step 3: Link and reference validation (per file)
- Extract all Markdown links
[text](target)and anchor links[text](#anchor). - For file links (e.g.,
YQL-Where.md), check if the referenced file exists relative to the document using Glob. Report missing files but do not block the review — flag them as warnings. - For anchor links, check if the referenced heading exists in the target file.
- Check for inconsistent link targets (e.g., a file linked as both
SQL-Syntax.mdandYQL-Syntax.mdwhen only one exists).
Step 4: Factual claim extraction
Read through each document and extract all verifiable factual claims about YouTrackDB / YQL behavior. Examples:
- "Keywords and class names are case-insensitive"
- "Field names and values are case-sensitive"
- "YouTrackDB does not support the HAVING keyword"
- "YouTrackDB allows only one class as the target"
- "The YQL engine automatically recognizes if any indexes can be used"
For each claim, note the file, line number, and the exact claim text.
Step 5: Query extraction
Extract all YQL/SQL code examples from fenced code blocks (```sql sections). For each query, note:
- The file and line number
- Whether it is a YouTrackDB YQL query or a standard SQL example (for comparison only)
- Whether it should succeed or fail (some examples demonstrate unsupported syntax)
Step 6: Build validation test
Add new test methods to the persistent DocValidationTest class (core/src/test/java/com/jetbrains/youtrackdb/internal/core/sql/DocValidationTest.java) that validate extracted queries and factual claims against a real in-memory YouTrackDB instance using the Gremlin API with yql() methods. If the test class does not exist yet, create it with the following pattern:
package com.jetbrains.youtrackdb.internal.core.sql;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import com.jetbrains.youtrackdb.api.DatabaseType;
import com.jetbrains.youtrackdb.api.YouTrackDB;
import com.jetbrains.youtrackdb.api.YourTracks;
import com.jetbrains.youtrackdb.api.gremlin.YTDBGraphTraversalSource;
import java.nio.file.Path;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class DocValidationTest {
private static YouTrackDB youTrackDB;
private static Path dbPath;
private YTDBGraphTraversalSource g;
@BeforeClass
public static void setUpClass() throws Exception {
dbPath = Path.of(System.getProperty("java.io.tmpdir"), "doc-validation-test");
youTrackDB = YourTracks.instance(dbPath.toString());
youTrackDB.create("test", DatabaseType.MEMORY, "admin", "admin", "admin");
}
@AfterClass
public static void tearDownClass() {
youTrackDB.close();
}
@Before
public void setUp() {
g = youTrackDB.openTraversal("test", "admin", "admin");
}
@After
public void tearDown() {
g.close();
}
}CRITICAL: Only use the public Gremlin API. The test class lives in com.jetbrains.youtrackdb.internal.core.sql for organizational reasons (it is in the core module's test tree), but it must only import from com.jetbrains.youtrackdb.api.* and standard TinkerPop packages (org.apache.tinkerpop.gremlin.*). Never import internal classes like DatabaseSessionEmbedded, YouTrackDBImpl, DbTestBase, or anything else under com.jetbrains.youtrackdb.internal.
Key patterns for writing tests:
- Schema commands (CREATE CLASS, CREATE PROPERTY, CREATE INDEX) run outside transactions using
g.command():g.command("CREATE CLASS Foo EXTENDS V")— always useEXTENDS V(vertex) orEXTENDS E(edge) so results are compatible with the Gremlin result mapper. - Creating data — use
CREATE VERTEX(notINSERT INTO) inside transactions:g.executeInTx(tx -> { tx.yql("CREATE VERTEX Foo SET name = 'bar'").iterate(); }); - Updating data — use
UPDATEinside transactions viayql().iterate():g.executeInTx(tx -> { tx.yql("UPDATE Foo SET name = 'baz' WHERE name = 'bar'").iterate(); }); - Querying data — use
SELECTinside transactions viag.computeInTx():
Results fromvar results = g.computeInTx(tx -> tx.yql("SELECT FROM Foo").toList()); assertThat(results).isNotEmpty();SELECTon vertex classes areVertexobjects — cast and use.value("prop"):Vertex v = (Vertex) results.get(0); assertThat((String) v.value("name")).isEqualTo("baz"); - Queries that should fail (unsupported syntax): wrap in
assertThatThrownBy:assertThatThrownBy(() -> g.executeInTx(tx -> { tx.yql("BAD QUERY").iterate(); })); - The
yql()method returns a lazyYTDBGraphTraversal— always call.iterate()or.toList()to execute it. - The
command()method executes eagerly — no need to call.iterate(). However,command()internally iterates results through the Gremlin result mapper, which only supports vertices and stateful edges. Therefore, only usecommand()for DDL (CREATE CLASS, CREATE PROPERTY, CREATE INDEX) — never for INSERT, UPDATE, or DELETE. - Parameterized queries: use alternating key/value pairs:
tx.yql("SELECT FROM Foo WHERE name = :name", "name", "bar")
Gremlin API limitations to be aware of
These limitations affect what can be validated through the public API:
- All classes must extend V or E — the Gremlin result mapper (
GremlinResultMapper) only supports vertices and stateful edges. SELECT on a plain class (not extending V/E) will throwIllegalStateException: Only vertices and stateful edges are supported in Gremlin results. If a document example uses a plain class, create it withEXTENDS Vfor testing purposes. - Use
yql().iterate()for UPDATE/INSERT — never usecommand()for data mutation commands, as it will fail when the result mapper tries to process the non-vertex result. RETURN AFTERon UPDATE — usetx.yql("UPDATE ... RETURN AFTER @this").toList()to collect results. The results are vertex objects when the target class extends V.
Group tests by document section. Each test method should have a comment referencing the document claim it validates.
Step 7: Run validation
- Run the test class:
./mvnw -pl core clean test -Dtest=DocValidationTest - If Spotless formatting fails, fix it first:
./mvnw -pl core spotless:apply - If tests fail, analyze each failure:
- Parse error on a query the doc says should work -> the document has a query bug. Flag it.
- Query succeeds but the doc says it should fail -> the document claim is wrong. Flag it.
- Wrong result count or values -> the document example may be misleading. Flag it.
- Compilation error -> fix the test code and re-run.
Step 8: Produce review report
After all checks complete, present a consolidated report to the user:
## Documentation Review: <path>
### Grammar & Style
| File | Line | Issue | Suggested Fix |
|------|------|-------|---------------|
| ... | ... | ... | ... |
### Link Validation
| File | Line | Link Target | Status |
|------|------|-------------|--------|
| ... | ... | ... | Missing / OK |
### Factual Claims
| File | Line | Claim | Verified | Notes |
|------|------|-------|----------|-------|
| ... | ... | ... | Yes/No | ... |
### Query Validation
| File | Line | Query | Expected | Result | Notes |
|------|------|-------|----------|--------|-------|
| ... | ... | ... | Success/Fail | Pass/Fail | ... |
### Summary
- Total files reviewed: N
- Grammar issues found: N
- Broken links: N
- Factual claims verified: N/N
- Queries validated: N/NStep 9: Apply fixes
Ask the user whether to:
- Apply grammar fixes — edit the documents directly using the Edit tool.
- Flag query/factual issues only — report without changing files (the user may want to rewrite sections).
- Apply all fixes — grammar fixes + rewrite incorrect queries/claims.
Step 10: Verify test class
After the review is complete:
- Keep the
DocValidationTestclass — it serves as a living validation of documentation examples. - Ensure all new test methods were added and pass:
./mvnw -pl core clean test -Dtest=DocValidationTest - Run Spotless to ensure formatting:
./mvnw -pl core spotless:apply
Important notes
- Never modify the test infrastructure — only add methods to
DocValidationTest. - The
coremodule uses JUnit 4 (not JUnit 5). Use@Test,@Before,@After,@BeforeClass,@AfterClassfromorg.junit. - Always run
spotless:applybefore running tests if the test class is new. - When validating queries, create unique class names per test to avoid collisions (e.g.,
CityDistinct,EmpSalary). - Standard SQL examples shown for comparison (e.g., JOIN syntax) should NOT be executed — they are expected to be invalid in YouTrackDB.
- If a document references files that don't exist yet, flag them as warnings but don't fail the review.
- Use
yql()for YQL queries — theyql()method onYTDBGraphTraversalSourceDSLreturns a lazy traversal; always terminate with.iterate()or.toList(). - Use
command()for schema DDL —command()executes eagerly and is appropriate for CREATE CLASS, CREATE PROPERTY, CREATE INDEX, etc. - Transaction helpers: Use
g.executeInTx()for side-effecting operations,g.computeInTx()when you need a return value, andg.autoExecuteInTx()when returning a traversal that should be auto-iterated.
Other versions23 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 23
- tldraw/tldraw★ 51ksame name
- videojs/video.js★ 40ksame name
- reactjs/react.dev★ 12ksame name
- hashicorp/terraform-provider-aws★ 11ksame name
- JamieMason/syncpack★ 2.1ksame name
- OpenAEV-Platform/openaev★ 1.8ksame name
- FranciscoMoretti/chat-js★ 1.2ksame name
- FranciscoMoretti/chatjs★ 1.2ksame name
- FranciscoMoretti/sparka★ 1.2ksame name
- opensanctions/opensanctions★ 862same name
13 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use create-vercel-ai-issue, dev-auth-bypass and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
FranciscoMorettiSkillcreate-vercel-ai-issue
Create a well-formed GitHub issue in vercel/ai using the gh CLI. Use when reporting an AI SDK bug or preparing an issue body that contains logs, code blocks, versions, reproduction steps, and shell-sensitive text.
Also in 3 projects that use this
FranciscoMorettiSkilldev-auth-bypass
Authenticate a browser against a local ChatJS app without OAuth. Use for development login, local auth bypass, authenticated browser or Playwright testing, and the /api/dev-login route.
Also in 3 projects that use this
- +10 more from FranciscoMoretti
In this repository17 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- ai-tellsSkill
- analyze-changesSkill
- code-reviewSkill
- create-planSkill
- create-presentationSkill
- edit-designSkill
- execute-tracksSkill
- fix-ci-failureSkill
- migrate-workflowSkill
- profile-jmh-regressionsSkill
- profile-query-bottleneckSkill
- readability-feedbackSkill
- review-planSkill
- review-workflow-prSkill
- run-jmh-benchmarks-hetznerSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

