Fact-check a single lesson against Neo4j documentation using the neo4j-docs MCP. Fixes inaccurate claims inline and appends a WHY report.
Purpose: Verify technical claims in a single lesson.adoc against official Neo4j documentation. Fixes confirmed inaccuracies inline; flags unverified claims; softens best-practice recommendations that are not in official docs.
When to use: Stage 4 of the course review pipeline. Run after grammar, structure, and technical formatting reviews.
Input: Path to a lesson folder (e.g. asciidoc/courses/my-course/modules/1-intro/lessons/1-overview/)
Output:
lesson.adoc — fixed in place where claims are confirmed wrongREVIEW-REPORT.md in the lesson folder — created or appended with a fact-check sectionThis review:
Read lesson.adoc in full. Build a list of technical claims to verify:
Types of claims to extract:
neo4j.dbms.page.cache.hits)Map each claim to the appropriate manual. Use mcp_neo4j-docs_list_manual_pages to find relevant pages.
Available manuals:
| Manual | Content |
|---|---|
aura | Aura cloud service — metrics, tiers, console, performance |
operations-manual | Self-managed Neo4j — config, monitoring, metrics, clustering |
cypher-manual | Cypher language reference — clauses, functions, syntax |
graph-data-science | GDS library — algorithms, procedures, syntax |
java-reference | Java API, JVM settings |
cdc | Change Data Capture |
Key documentation URLs to check directly:
https://neo4j.com/docs/aura/metrics/view-metrics/https://neo4j.com/docs/aura/metrics/metrics-integration/reference/https://neo4j.com/docs/operations-manual/current/monitoring/metrics/essential/https://neo4j.com/docs/operations-manual/current/monitoring/metrics/reference/https://neo4j.com/docs/cypher-manual/current/For each claim, use mcp_neo4j-docs_read_page to read the relevant documentation page.
Categorise each finding:
| Symbol | Meaning |
|---|---|
| ✅ Accurate | Directly confirmed by documentation |
| ⚠️ Needs clarification | Correct but could be more precise |
| ❓ Unverified | Not found in docs — may be a best practice |
| ❌ Incorrect | Contradicts documentation |
For claims categorised as ❌ Incorrect, update the lesson text to match the documentation.
Examples:
For claims categorised as ❓ Unverified that contain specific thresholds or recommendations not found in official docs, add qualifying language to make it clear these are guidelines, not official requirements.
Thresholds presented as absolute rules:
❌ Failed queries should be less than 1% of total queries.
✅ As a general guideline, failed queries should be low, typically less than 1% of total queries. The right threshold depends on your application requirements.
Specific numbers without qualification:
❌ A cache hit rate below 98% indicates a problem.
✅ A cache hit rate below 98%, for example, may indicate that more memory is needed. The appropriate threshold varies by workload.
Imperative recommendations without source:
❌ Always set the page cache to 50% of available RAM.
✅ A common starting point is to set the page cache to around 50% of available RAM. Tune this value based on your workload and data size.
Do not use parentheses for examples — use commas instead.
For any Cypher code blocks in the lesson, verify:
cypher-manual to verify)OPTIONAL MATCH for counting — use COUNT {} subqueries instead)For GDS procedures, always check whether they have graduated from alpha/beta:
mcp_neo4j-docs_list_manual_pages("graph-data-science")
After reviewing, create or append REVIEW-REPORT.md in the lesson folder.
## Fact Check Review — YYYY-MM-DD
**Status:** ✅ Complete / ⚠️ Issues remain
### Claims Verified
| Claim | Status | Source |
| -------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------ |
| Cache hit rate metric name `neo4j.page_cache.hits` | ✅ Accurate | operations-manual/monitoring/metrics/reference |
| "Available in all Aura tiers" | ⚠️ Needs clarification | Aura Free has limited metrics — updated to "Aura Professional and above" |
| Threshold "above 98%" for cache hits | ❓ Unverified | Not in docs — qualified with "as a general guideline" |
| Procedure name `gds.beta.kmeans` | ❌ Incorrect | Graduated to `gds.kmeans` in GDS 2.3 — fixed |
### Changes Made
- **Procedure name**: `gds.beta.kmeans` → `gds.kmeans` — _Procedure graduated from beta in GDS 2.3 per graph-data-science docs_
- **Availability**: "available in all Aura tiers" → "available in Aura Professional and above" — _Aura Free has limited monitoring capabilities_
- **Threshold language**: Added "As a general guideline..." before 98% cache hit recommendation — _Threshold not found in official docs; framed as guidance not rule_
### Issues Requiring Manual Review
- [ ] Claim "default page cache is 512MB" — _Not verified against current docs; check operations-manual for current default_
- [ ] Code example uses deprecated `OPTIONAL MATCH` for counting — _Consider updating to COUNT {} subquery per neo4j-cypher best practices_
The Text2Cypher tool automatically receives the full database schema on every invocation. Lessons must not instruct learners to manually list all node labels and relationship types in the tool description.
❌ List the relevant node labels and relationship types. For Northwind: Customer, Order, Product connected by PLACED, CONTAINS...
✅ Add context the schema does not provide: the shape of identifiers (for example, "Customer IDs are uppercase codes like ALFKI"), which categorical properties are useful for filtering, and which numeric properties are suitable for aggregation.
Repeating the schema in the description adds noise and creates maintenance burden as the schema evolves. The agent already has it.
The platform has built-in retry logic for hallucinated labels and relationship types. Do not advise learners to fix Text2Cypher errors by adding node labels or relationship types to the tool description.
❌ If the Text2Cypher tool produces Cypher with incorrect relationship types or node labels, try adding the correct nodes and relationship types to the tool description.
✅ Guide learners to inspect the reasoning panel, verify domain context (identifier shapes, aggregation fields), and trust the platform's retry mechanism for schema-level errors.
.cursor/rules/fact-check-lessons.mdc — fact-check process, categories, handling recommendationsmcp_neo4j-docs_read_page, mcp_neo4j-docs_list_manual_pagesWebSearch + WebFetch to fetch PyPI and GitHub docs before reviewing