rfc-author
When a change needs an RFC in docs/rfc and how to write one that survives. Use when a change contradicts something already written in docs/design, when reversing an earlier decision, when widening any
SKILL.md.claude/skills/rfc-author/SKILL.md
GitHubRFCs
docs/design/ is rewritten as the design moves, which means the reasoning
survives and the reversals do not. docs/rfc/ holds the reversals. Entries
are append-only; a superseded RFC is marked superseded, never edited away.
When one is needed
- The change contradicts something already written down in
docs/design/. - It reverses an earlier RFC.
- It widens a policy: a new
DETERMINISM_ALLOWpath, a crate added toUNSAFE_ALLOW, a new way intothird_party/. - A future contributor would otherwise re-litigate it — which is most cases where two reasonable engineers would pick differently.
Not needed for: an implementation that follows a decision already recorded, a bug fix, or a number (that is a claim, not an RFC).
Writing one
Copy docs/rfc/0000-template.md. Numbering is sequential and permanent.
The section that carries the weight is What would reverse this. An RFC with
nothing there is a preference wearing a decision's clothes, and that phrasing is
in CONTRIBUTING.md because it is the failure mode. Write an observation
somebody could actually make: a measured number crossing a stated line, a
dependency that fails to materialise, a class of bug appearing that the decision
was supposed to prevent. RFC 0001 does this well — it names 10% unsafe code as
its own reversal condition.
Decision is one paragraph, stated so somebody can disagree with it. If it cannot be disagreed with, it is a description rather than a decision.
Context is what was true when this was decided, including which alternatives were live. The alternatives are what make the entry useful in two years; without them a reader can only conclude that the author did not think of anything else.
Consequences says what this makes easy, what it makes hard, and what it forecloses. All three. An RFC listing only the first is advocacy.
Superseding
Add a new RFC. Mark the old one Status: superseded by RFC NNNN and change
nothing else in it. The old reasoning is the record of what we believed and why
it was wrong, which is the more expensive half of the pair to reconstruct.