Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .ai/AI-README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Use `resources/terms.md` when terminology is uncertain or not covered by the qui

- `.ai/skills/review-doc-pr/`: review documentation PRs and Markdown diffs for factual accuracy, user usefulness, completeness, version fit, related-doc impact, links, and style
- `.ai/skills/create-or-update-zh-translation-pr/`: create a new docs translation PR or update an existing one by combining repo-local scripts with minimal-edit translation rules and incremental source-diff handling
- `.ai/skills/writing-doc-summaries/`: write or update the `summary` front matter field in a document following the repo's 115-145 character SEO-friendly sentence rules

The translation skill includes bundled scripts under `.ai/skills/create-or-update-zh-translation-pr/scripts/` for:

Expand Down
142 changes: 142 additions & 0 deletions .ai/skills/writing-doc-summaries/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
---
name: writing-doc-summaries
description: Writes or updates the front matter `summary` field in pingcap/docs and pingcap/docs-cn Markdown files. The summary is an SEO-friendly sentence of 115-145 characters. Use when a document is missing a summary, when a reviewer or CI check flags a low-quality summary, or when an existing summary is outdated, inaccurate, or the wrong length.
---

# Writing Doc Summaries

Write or improve the `summary` field in the YAML front matter of Markdown files in `pingcap/docs` and `pingcap/docs-cn`.

## Front matter example

```yaml
---
title: Back up and Restore Data Using Dumpling and TiDB Lightning
summary: Learn how to use Dumpling and TiDB Lightning to back up and restore full data of TiDB.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This summary is below the 115-character minimum stated in Rule 1. Perhaps we could change the length range or update this example.

---
```

## Summary rules

1. **Length**: 115-145 characters including spaces.
2. **Opening verb**: Start with an SEO-friendly verb phrase (see table below) that tells the reader what they will get from this document. Never start with the document title, a product name alone, or a noun phrase.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"See table below" is vague, as the table is several sections away under "## Opening verb guidance".

3. **Perspective**: Reader-focused — tell them what they will learn or do.

Check failure on line 23 in .ai/skills/writing-doc-summaries/SKILL.md

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [PingCAP.EmDash] Don't put a space before or after a dash. Raw Output: {"message": "[PingCAP.EmDash] Don't put a space before or after a dash.", "location": {"path": ".ai/skills/writing-doc-summaries/SKILL.md", "range": {"start": {"line": 23, "column": 35}}}, "severity": "ERROR"}
4. **No special leading characters**: Do not start with `>`, `*`, `#`, `-`, or `[`.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
4. **No special leading characters**: Do not start with `>`, `*`, `#`, `-`, or `[`.
4. **No special leading characters**: Do not start with `>`, `*`, `#`, `-`, or `[`. If the summary must begin with a special character, wrap the entire value in quotation marks.

5. **YAML quoting**: Wrap the value in double quotes if it contains `:` or other YAML special characters.
6. **No redundancy**: Do not repeat the document title word-for-word. Rephrase to add value.
7. **Language**: Match the document body language. Chinese body → Chinese summary.
8. **Self-contained**: Must be understandable without the title or body — it may appear as a standalone search snippet.

Check failure on line 28 in .ai/skills/writing-doc-summaries/SKILL.md

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [PingCAP.EmDash] Don't put a space before or after a dash. Raw Output: {"message": "[PingCAP.EmDash] Don't put a space before or after a dash.", "location": {"path": ".ai/skills/writing-doc-summaries/SKILL.md", "range": {"start": {"line": 28, "column": 72}}}, "severity": "ERROR"}
9. **Accuracy**: Must match the actual scope of the document. Do not promise content the document does not deliver.
10. **Tone**: Conversational but professional. No marketing language.

## Structure formula

For most document types, a reliable pattern is:

**[Action/Topic] + [Object] + [Outcome/Value]**

| Part | What it covers | Example |
|---|---|---|
| Action/Topic | Opening verb phrase | `Learn how to configure` |
| Object | What the document is about | `TLS encryption between TiDB components` |
| Outcome/Value | What the reader gains or achieves | `to secure data in transit and meet compliance requirements` |

Full example: `Learn how to configure TLS encryption between TiDB components to secure data in transit and meet compliance requirements.`

**Exceptions:**

- **SQL statement reference**: Use fixed template — `An overview of the usage of <STATEMENT> for the TiDB database`. No outcome clause needed.

Check failure on line 48 in .ai/skills/writing-doc-summaries/SKILL.md

View workflow job for this annotation

GitHub Actions / vale

[vale] reported by reviewdog 🐶 [PingCAP.EmDash] Don't put a space before or after a dash. Raw Output: {"message": "[PingCAP.EmDash] Don't put a space before or after a dash.", "location": {"path": ".ai/skills/writing-doc-summaries/SKILL.md", "range": {"start": {"line": 48, "column": 50}}}, "severity": "ERROR"}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. This summary is below the 115-character minimum stated in Rule 1.

- **Focused task docs**: Omit the outcome clause if the action and object already imply it and the sentence meets minimum length.

## Opening verb guidance

Scan a few existing summaries in the same subdirectory first to match local conventions.

### Preferred patterns
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this skill is for both pingcap/docs and pingcap/docs-cn, we might also include some examples in Chinese?


| Document type | Preferred opening |
|---|---|
| Concept / overview | Learn what, Learn how X works, Learn about, Introduce the concept of |
| Feature introduction | Introduce, Introduce the, Learn about |
| Task / procedure | Learn how to |
| Quick start | Learn how to quickly get started with |
| Configuration | Learn all the configuration options for, Learn how to configure |
| Troubleshooting | Learn how to troubleshoot, Learn how to diagnose |
| SQL statement reference | An overview of the usage of `<STATEMENT>` for the TiDB database |
| Release notes | Learn about the new features, compatibility changes, improvements, and bug fixes in TiDB `<version>` |

### Patterns to avoid

- Starting with the product name alone: `TiDB ...`, `TiKV ...`
- `This document`, `This guide`, `This article`, `This page`
- `Explains`, `Describes` (use `Learn` or `An overview of` instead)
- `The reference for`, `The usage of`
- Repeating the document title word-for-word

## Before and after

**Before** (vague, filler opening, no outcome):

```yaml
summary: This document explains the auto-tune feature of Backup & Restore.
```

**After** (reader-focused, specific, includes outcome):

```yaml
summary: Learn how the BR auto-tune feature automatically limits backup resource usage to reduce impact on online TiDB cluster performance.
```

**Before** (generic, no user intent):

```yaml
summary: An introduction to metadata lock in TiDB.
```

**After** (introduces concept and explains why it matters):

```yaml
summary: Introduce the concept, principles, and implementation of metadata lock in TiDB, and learn how it prevents DDL and DML conflicts.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
summary: Introduce the concept, principles, and implementation of metadata lock in TiDB, and learn how it prevents DDL and DML conflicts.
summary: Learn about the concept, principles, and implementation of metadata lock in TiDB, and understand how it prevents DDL and DML conflicts.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reason: "Introduce" is document-focused (the document introduces something), while "learn how" is reader-focused (the reader learns). This switches perspective mid-sentence, which conflicts with Rule 3: "Reader-focused — tell them what they will learn or do."

```

## Workflow

1. **Read** the target Markdown file fully. Note the title, opening paragraph, main sections, scope, and any existing `summary`.

2. **Draft** 2-3 candidate sentences using the structure formula and the opening-verb table.

3. **Validate** each candidate:
- Count characters. Must be 115-145.
- Confirm opening verb fits the document type.
- Confirm it does not promise content the document lacks.
- Confirm language matches the document body.
- If it contains `:`, confirm the value is wrapped in double quotes.

4. **If validation fails** → revise and re-validate. Repeat until all checks pass.

5. **Apply** the best candidate:
- If front matter exists, update the `summary` line in place.
- If front matter is missing, add it at the top:

```yaml
---
title: <existing H1 text, in title case>
summary: <new summary>
---
```

- Preserve all other front matter fields. Do not change the document body.

6. **Final check**: Re-count characters one more time after editing. Confirm `title` matches the H1. Confirm no special leading character without wrapping quotes.

## Output expectations

- Apply the change directly using the Edit tool.
- Report the final summary text and its character count.
- If the existing summary is already acceptable, say so and explain why.
- Prefer a full rewrite over minor edits when the existing summary is structurally weak.
- Do not rewrite or reformat any other part of the document.

## Gut check

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

low

Add a newline at the end of the file to follow standard POSIX conventions.

Suggested change
Before applying: **would this make a TiDB user want to click through from search results?** If not, rewrite.

Before applying: **would this make a TiDB user want to click through from search results?** If not, rewrite.
Loading