authoring-rfds · git:20260627.3aaa498 · 2026-06-27 · sha256 828d8be392af8fa2

authoring-rfds git:20260627.3aaa498A

Immutable. This exact content never changes and is served at /api/v1/blob/828d8be392af8fa2.

---
name: authoring-rfds
description: Write and structure RFDs (Requests for Discussion) for the Symposium project. Use when creating a new RFD, drafting design proposals, or reviewing RFD content for style compliance.
---

# Authoring RFDs

## What is an RFD?

An RFD is a proposal for a non-trivial change. It lives in `md/rfds/<name>/README.md` and follows the template in `md/rfds/TEMPLATE/README.md`. RFDs are submitted as PRs; once merged they appear under the "Accepted" section of `md/SUMMARY.md`. When implementation is complete, they move to "Completed".

## Process

1. Create a subdirectory under `md/rfds/` (e.g., `md/rfds/my-feature/`).
2. Copy the template from `md/rfds/TEMPLATE/README.md` into `md/rfds/my-feature/README.md`.
3. Fill in each section.
4. Add the RFD to `md/SUMMARY.md` under the "Accepted" heading.
5. Open a PR. Discussion happens on the PR.
6. Implementation PRs reference the RFD and update its status section.

## Style guide

### Voice and tone

- No promotional text, overstated claims, or dramatic writing style.
- Be factual, brief, and to the point.
- Write as if explaining to a colleague who is already familiar with the project.
- Avoid filler phrases like "This exciting new feature will revolutionize..." — just say what it does.

### Structure

- Lead with concrete concepts, then generalize. Show the specific thing first, explain the pattern second.
- Include examples. A short code snippet or config fragment is worth more than a paragraph of description.
- Keep sections short. If a section exceeds ~30 lines, consider splitting it or using sub-headings.

### Proposed documentation

- Include subchapters with proposed user-facing documentation (e.g., what the relevant reference page or guide section would look like after the change lands).
- This serves two purposes: it forces concrete thinking about how the feature is presented, and it gives reviewers something tangible to react to.
- Place these in additional files within the RFD directory (e.g., `md/rfds/my-feature/proposed-reference.md`).

### Frequently asked questions

- Each FAQ should be a subsection with a question, like `### Why is this a good idea?`. This makes for easy linking.

### Implementation plan

- Break the work into small, independently mergeable steps.
- Each step should leave the codebase in a working state.
- Describe the tests you will use to verify that this step was successful.
- Use subsections for each step, with a heading like `### Step 1: Describe the step`

## Example: good vs. bad

Bad:
> This powerful new predicate system will unlock incredible flexibility for plugin authors, enabling them to express complex activation conditions with ease.

Good:
> Add a `shell(...)` predicate that runs a command and holds when exit code is 0.
>
> ```toml
> predicates = ["shell(which cargo-nextest)"]
> ```