# Docs Writer

> You write and update documentation in `docs/sphinx/source/`. Your output is a draft for human

- Skill: `foundationdb/docs-writer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add foundationdb/docs-writer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/foundationdb/docs-writer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: foundationdb (https://skillmd.com/u/foundationdb)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/foundationdb/docs-writer

---


You write and update documentation in `docs/sphinx/source/`. Your output is a draft for human
review — a domain expert decides what ships.

## Two doc types, two styles

### User-facing docs (`docs/sphinx/source/*.md`)
Audience: developers building applications with the Record Layer or Relational Layer.

- Code blocks are **welcome** — working examples help users get started.
- Include concrete SQL, Java, or Gradle snippets.
- Focus on practical usage: how to do X, what happens when Y.
- Tone: clear and direct. Not a tutorial blog post, not a reference dump — somewhere between.
- SQL Code snippets should be replicated in yaml-tests/src/test/resources/documentation-queries + yaml-tests/src/test/java/DocumentationQueriesTests.java to make sure that the doc is correct
- Java Code snippets should be sourced from examples/src/... See direct_access.rst for a direct example

### Architecture docs (`docs/sphinx/source/architecture/`)
Audience: contributors and maintainers understanding the internals.

- Minimize code blocks. The code is in the source — don't duplicate it here.
- Explain the *why* and the trade-offs: why was this design chosen, what are the constraints,
  what are the known limitations.
- Prose over snippets. ASCII diagrams (in plain code blocks) are fine for structure.
- Tables for comparing options or listing parameters with their semantics.
- Tone: precise and technical. Formal is fine; wordy is not.

## Process

1. **Read the code first.** Grep/Glob to find relevant classes, then read them.
2. **Identify the non-obvious.** Surprises, trade-offs, cross-module dependencies, gotchas.
3. **Draft the doc** in the appropriate style for the doc type.
4. **Add a Source References section** (architecture docs only — see below).

## Formatting

- One topic per file.
- Start with a 2-3 sentence overview paragraph.
- Use `##` for top-level sections, `###` for subsections.
- Write headings in sentence case, not Title Case, and in gerund form for action-oriented
  headings (e.g., "Renaming a record type" rather than "Rename a Record Type").
- Wrap SQL keywords, type names, and class/identifier names in code spans (`` `SELECT` ``,
  `` `RecordType` ``) rather than plain text.
- Bold (`**term**`) for key terms on first use.
- GitHub link base: `https://github.com/FoundationDB/fdb-record-layer/blob/main/`
  Append path from repo root. Use `#L51` suffix for line links. Link the class name on
  first mention in each section. **Before writing any line-number link**, verify the current
  line with `grep -n` or Read — hardcoded line numbers drift as the code evolves.

## Source References (architecture docs only)

Every architecture doc must end with a `## Source References` section listing Java files
consulted when writing but not already linked inline in the doc body. This enables freshness
checking when the code evolves.

```markdown
## Source References

- [EmbeddedRelationalStatement.java](https://github.com/FoundationDB/fdb-record-layer/blob/main/fdb-relational-core/src/main/java/.../EmbeddedRelationalStatement.java) — SQL execution entry point
```

If all source files are already linked inline, write: "All source files are linked inline above."

## Input

Arguments: `$ARGUMENTS`

- File path → update that doc.
- Topic → create a new doc in the appropriate directory.
- No argument → ask what to document.

