Reviews and lints Avalonia documentation pages against house style rules, content boundaries, anti-marketing standards, accessibility, and SEO. Use when reviewing, editing, or writing documentation to ensure consistency with established patterns. Checks structure, voice, terminology, formatting, linking, tone, Diataxis compliance, image accessibility, meta descriptions, and jargon simplification.
Review documentation pages against Avalonia's house style rules derived from corpus analysis of professional .NET framework documentation, adapted for Avalonia's Docusaurus-based site.
Diataxis is an editorial QA layer, not a navigation structure. The visible site structure follows product domains and user journeys (Getting Started, Controls, Styling, Layout, Binding, MVVM). Each page declares a doc-type in frontmatter, and that type constrains what content is allowed and forbidden. This prevents the "duplication swamp" where every page re-explains everything. If doc-type is present, use it. If absent, infer the type and flag BOUND-005.
Diataxis defines exactly four canonical types (tutorial, how-to, reference, explanation) derived from two dimensions: action/cognition and acquisition/application. The Avalonia docs also use four project-specific types (overview, troubleshooting, release-notes, migration) that are specializations of the canonical four, not additional Diataxis categories.
This skill must NEVER fabricate, invent, or guess technical details. Every API name, property, method, event, enum value, parameter, and behavioral claim in documentation must be verified against the actual Avalonia API reference before it can appear in output. When in doubt, look it up; never assume.
Three hard rules:
ACCU-001 (blocker): Never fabricate technical details. All API names, property names, method signatures, event names, enum values, and behavioral claims must be verified. Do not invent, guess, or hallucinate any technical detail. If you cannot verify a technical claim, flag it as unverified rather than asserting it.
ACCU-002 (blocker): Never modify existing code snippets unless the user has expressly asked for code changes. When linting or reviewing documentation, flag prose issues but leave all code blocks (``` fenced blocks and ` inline code) exactly as they are. Code changes require explicit user authorization.
ACCU-003 (blocker): Validate all API mentions against the Avalonia API reference. Use the lookup_avalonia_api tool from the Avalonia Docs MCP server to confirm that every class, property, method, event, or enum value referenced in the documentation actually exists. Any API reference that cannot be validated must be flagged in the lint report as ACCU-003: Unverified API reference. See Avalonia Build MCP for MCP tool documentation.
$ARGUMENTS: Path to the file(s) to lint, or "all" to scan changed filesRead the target file and classify it as one of the page archetypes defined in page-templates.yaml:
| Type | Signal |
|---|---|
| tutorial | Title contains "Tutorial:" or file is under get-started/, step-by-step build |
| how-to | Title starts with "How to" or file focuses on a single bounded task |
| overview | Introduces a topic area, orients and links (lightweight explanation) |
| explanation | Explains model, behavior, or architecture in depth (answers "why?") |
| reference | Precise syntax/semantics definitions, API-like (describes the machinery) |
| troubleshooting | Problem-first with remediation (problem-scoped how-to) |
| migration | Upgrade/breaking-change guidance (version-scoped how-to) |
| release-notes | Version change summaries (version-scoped reference) |
If the page has a doc-type frontmatter field, use that value. If doc-type is absent, infer the type from the signals above and flag BOUND-005.
Diataxis compass (use when surface signals are ambiguous):
| Acquisition (study) | Application (work) | |
|---|---|---|
| Action (doing) | tutorial | how-to |
| Cognition (thinking) | explanation | reference |
Apply rules from house-rules.yaml that match the page type scope.
Blocker-level checks (must pass):
title as H1, so an explicit # heading in the body is not required; count the frontmatter title as the H1)## Prerequisites before first procedureclick here, here, this link)lookup_avalonia_api MCP toolMajor-level checks (should pass; justify exceptions):
## See also or ## Related content or similar navigation handoffyou/your addresswe/our/us usage (< 1 per 1,000 words). Exception: tutorials use we to establish the instructor-learner bond (per Diataxis). VOI-002 does not apply to tutorials.backticks:::note, :::tip, :::info, :::caution, :::dangercontrol not widget for UI componentsMinor-level checks (style drift warnings):
simply, obviously, just) are rare (< 1 per 1,000 words)<kbd> tags with platform-native symbols (e.g., <kbd>⌘</kbd> <kbd>S</kbd> not plain text "Cmd+S"), not )description present, 50-160 characters, no marketing buzzwordstitle is <= 60 characters4.71 × (characters ÷ words) + 0.5 × (words ÷ sentences) - 21.43. Strip all fenced code blocks, inline code spans, frontmatter, and admonition markers before counting, measure prose only. Report score to one decimal place with the grade-level label (8 or below = high-school, 9-12 = standard adult, 13-14 = college, above 14 = graduate). Scores above 14 are a warning to simplify sentence structure and word choice.Apply tone rules from house-rules.yaml. Documentation must never read like marketing copy.
Blocker-level:
Major-level:
Cross-reference against terminology-map.yaml:
must vs should usage matches intent (TERM-003)framework_jargon in terminology-map.yaml for definitions and link targets.Extract all Avalonia API mentions from the page: class names, property names, method names, event names, enum values, and any other identifiers presented as part of the Avalonia API surface.
For each API mention:
lookup_avalonia_api (from the Avalonia Docs MCP server) with the API identifier (e.g., TextBlock, Window.Show, StyledProperty, Control.PointerPressed).Important constraints:
MCP tool reference: The lookup_avalonia_api tool is part of the Avalonia Docs MCP server. It accepts queries for classes, properties, methods, and events using dot notation (e.g., TextBlock, Window.Show). See Build MCP documentation.
Apply content boundary rules using the page's declared (or inferred) doc-type and the forbidden_content and content_boundaries fields in page-templates.yaml.
forbidden_content. Forbidden content should be linked to the appropriate page type, not duplicated.doc-type field with a valid value (tutorial, how-to, explanation, overview, reference, troubleshooting, release-notes, migration).Compare page structure against the expected archetype from page-templates.yaml:
Flag any use of:
| Banned | Replacement |
|---|---|
| "Simply" / "Just" | Remove or rewrite without |
| "Obviously" / "Clearly" | Remove |
| "Easy" / "Straightforward" | Remove |
| "As you know" | Remove |
| "Etc." | List items or use "and similar" |
| "Various" / "Several" | Give count or list |
| "In order to" | "To" |
| "It should be noted that" | State fact directly |
| "Refer to the documentation" | Link to specific page |
| Em dash (—) | Comma, colon, parentheses, or separate sentence |
| En dash (–) | Hyphen or "to" for ranges |
| "Powerful" | State the specific capability |
| "Seamless" | Describe the integration concretely |
| "Cutting-edge" / "State-of-the-art" | Remove, or name the technology |
| "Leverage" | "Use" or "apply" |
| "Unlock" | "Enable" or "allow" |
| "Robust" | Describe the specific reliability characteristic |
| "Game-changing" / "Revolutionary" | Describe the concrete improvement |
Apply inclusive language rules from house-rules.yaml.
Major-level:
he/she/him/her/his/hers referring to an unspecified person or the reader) and gendered nouns (guys as a group address, mankind, manmade, man-hours). Suggest they/them/their, everyone, humankind, human-made, person-hours. Flag singular pronoun uses as candidates — distinguish generic use from a named individual (manual review).blacklist/whitelist → blocklist/allowlist; master/slave in role contexts → primary/replica; sanity check → verify or check; dummy as placeholder data → placeholder/sample/stub. Context-sensitive uses (e.g. master in a git command literal, established API names like MasterDetail) require human review before flagging.Output a structured lint report:
## Style Lint Report: [filename]
**Page type**: [detected type]
**doc-type frontmatter**: [present/absent]
**Score**: [PASS / FAIL with score]
### Blockers (must fix)
- [rule-id]: [description of issue] (line X)
### Major issues (should fix)
- [rule-id]: [description] (line X)
### Minor issues (consider fixing)
- [rule-id]: [description] (line X)
### Technical accuracy
- ACCU-001 (no fabricated details): [pass / N findings]
- ACCU-002 (code snippets preserved): [pass / N unauthorized modifications]
- ACCU-003 (API validation): [N APIs checked, N verified, N unverified]
- Verified: [list of confirmed API references]
- Unverified: [list of API references that could not be confirmed — BLOCKER]
### Anti-marketing compliance
- [TONE rule findings or "Clean"]
### Content boundary compliance
- [BOUND rule findings or "Clean"]
- Declared doc-type: [type]
- Forbidden content detected: [none / list]
- Single responsibility: [pass / concern]
### Inclusive language
- INC-001 (gender-neutral language): [pass / N findings]
- INC-002 (inclusive terminology): [pass / N findings]
### Readability
- QUAL-004 (ARI score): [X.X — grade label (pass / warning: above 14)]
### Accessibility & SEO
- ACC-001 (image alt text): [pass / N findings]
- SEO-001 (meta description): [pass / missing / too short / too long / contains buzzwords]
- SEO-002 (title length): [pass / X characters (over 60)]
### Template compliance
- Required sections: [present/missing list]
- Section order: [correct/issues]
### Suggested fixes
For each flagged issue, provide a structured fix suggestion:
- **[rule-id]** (line X):
- Original: `[exact text from the page]`
- Suggested: `[corrected text]`
- Explanation: [why the change is needed]
### Summary
[1-2 sentence overall assessment with priority fixes]
These override or extend the base rules for Avalonia's Docusaurus site:
Avalonia docs use simple frontmatter with doc-type and description fields:
---