The RFC process
Design changes to what WeaveC guards, how its runtime enforces it and what it guarantees go through a lightweight RFC. The RFC is the durable record of why the design is the way it is; the code and tests record what it does.
When an RFC is required
Section titled “When an RFC is required”Write an RFC when a change would:
- change which accesses get a guard, or add or change a rule that removes
one (
lib/Frontend/Guard*.cpp); - change the shadow encoding, frame layout, global redzones, the quarantine or the sweep;
- change the runtime’s checked library wrappers, its report kinds or their
formats, or the library table (
lib/Core/LibrarySpec.txt); - change the enforcement ledger’s format or the driver’s
-fweavec-*flags; - add or change an annotation in
resources/include/weavec.h; - change what WeaveC guarantees, including trading soundness for cost.
Do not write an RFC for driver plumbing, build or CI changes,
documentation, or bug fixes that bring the implementation in line with an
already-accepted RFC. Those go through normal
pull requests; release-worthy changes appear in the generated CHANGELOG.md.
Process
Section titled “Process”- Copy
0000-template.mdtoNNNN-short-title.mdusing the next unused number, fill it in, and open a pull request containing only the RFC. Discussion happens on that PR. - When there is consensus, the RFC is merged with status Accepted. Implementation proceeds in follow-up PRs that reference the RFC number.
- When every item in the RFC’s Detailed design and Diagnostics sections
has landed with tests, a PR flips the status to Implemented. Lit tests
that pin RFC behaviour are named by feature (
test/Guards/<feature>.c,test/cases/<area>/…), and the pull request names the RFC. - An RFC that is abandoned is marked Withdrawn; one replaced by a later RFC is marked Superseded with a link. RFCs are never deleted or renumbered.
Statuses: Draft → Accepted → Implemented, or Withdrawn /
Superseded.
Small corrections to an Accepted RFC (typos, clarifying a sentence to match what was actually built) may be made directly. Anything that changes a decision is a new RFC that supersedes the relevant section.