3. Proposals: issues vs RFCs¶
This chapter explains how we decide between filing:
- a GitHub issue (bug/feature/chore), or
- an RFC (design record) for a larger change.
The goal is to keep the project moving while making sure new language features are deliberate and reviewed.
The short rule¶
- Bugs / chores: file an issue in github. No RFC required.
- New language features (syntax, semantics, type system behavior): RFC required.
- Tooling features: issue by default; RFC when the change affects stable contracts or needs design discussion.
If a change alters how .incn behaves for users, assume “RFC required” unless a maintainer says otherwise.
What is an RFC (in this repo)?¶
RFCs are PEP-style design records (proposal + rationale + trade-offs). They are not canonical user docs, but user docs may link to them for background.
Start here:
- RFC index: RFCs
- Template: RFC template
How to file¶
1) File an issue (bug/feature/chore)¶
Use an issue when you can describe the work without needing agreement on a new language design. Pick the template that best fits your situation:
-
Bug report: a bug in compiler/tooling (e.g. codegen emits invalid Rust for an edge case). Include a minimal
.incnrepro, expected output, and actual output. -
Feature request: a feature you want (but no language design required). Include the problem statement, a concrete example, and acceptance criteria (“done when…”).
-
Chore: maintenance work (no user-visible change). Include the motivation and a small checklist of the intended changes.
-
Documentation: missing documentation, typos or grammar/style issues, or drift (doc claims a feature exists but it’s planned/bugged/wrong), Include the doc link, proposed wording, and a tracking issue link.
-
Question: you’re unsure which direction is correct and want to engage the community for feedback or assistance. Include context, what you already tried, and 1–2 concrete questions you want answered.
-
Task: a scoped piece of work (e.g. performance regression in a hot path). Include before/after timings, benchmark notes, and the suspected hotspot.
2) Write an RFC (new language features)¶
Write an RFC when you propose a new user-visible language capability or meaning change, such as:
- new keyword / syntax form
- new type system rule
- new standard library contract that effectively becomes part of the language
Essentially, anytime the 'look-and-feel' of the language itself would be affected, an RFC is required.
How to file an RFC (workflow)¶
Use the RFC template and follow the detailed workflow here: Writing RFCs (how-to)
An RFC should answer:
- What problem are we solving?
- Why is this the right solution?
- What are alternatives?
- What is the migration story?
- What are the acceptance criteria?
Next¶
Next chapter: 04. Your first change: add a builtin.