Repository navigation
Replies: 2 comments 2 replies
Worth clarifying if the sponsoring maintainer or the Project Lead can count against the two-supporting-maintainers quota. The other thing is clarifying how conflicting RFCs are handled, since they can be merged without being implemented for a while. If one RFC gets merged, and another RFC that touches some of the same systems also get merged, the latter could affect some aspects of the design that the earlier RFC didn't account for, or could make its end-goal no longer relevant, etc. Otherwise this looks good to me! |
|
Thanks Matt!
|
Uh oh!
There was an error while loading. Please reload this page.
Every new feature would be designed and accepted before its implementation PR opens. A narrowly-scoped feature would use a short feature plan. A broader or harder-to-reverse change would use a full request for comments (RFC). Both would be reviewed as design PRs, and merging the design PR would accept the design and permit implementation.
"Ideas" Discussions currently mix early requests, concrete proposals, and offers to implement a feature. Approving an idea can establish that the feature is wanted without settling how it should work. The remaining design decisions then move into the implementation PR, where each change requires code and tests to be revised as well.
This proposal gives requests, designs, implementations, and roadmap priorities distinct purposes. Project roles, maintainer authority, and merge rights are covered by the separate governance proposal.
Process at a glance
There are two feature paths:
feat:PR must link its merged design PR.Roadmap placement is a separate decision. Accepting a design permits implementation but does not make the work a current project priority or promise it for a release.
Changes that do not introduce a feature can normally go directly to an implementation PR. These include
i18n:,fix:,chore:,docs:, andtest:changes, plus behaviour-preservingrefactor:andperf:changes.Why design comes first
Agentic coding tools have changed where feature development spends its time. Once a feature has a complete and internally consistent plan, implementation can be quick. The difficult work is deciding the behaviour, interface, data model, compatibility constraints, failure handling, security boundaries, user experience, and tests.
Review is most useful while those decisions exist as a design and remain inexpensive to change. Resolving them inside an implementation PR requires repeated changes to code and tests. A long-lived branch also becomes stale, conflicts with
main, and can stop fitting the codebase as other work lands.The accepted design should be detailed enough that implementation does not reopen ordinary product or architecture decisions. Implementation review still verifies correctness, security, compatibility, tests, and conformance with the design. If implementation exposes a flaw in the plan, the design should be amended explicitly rather than changed implicitly through code review.
Prototypes remain useful during design. Contributors are encouraged to test feasibility, interfaces, performance, or interactions locally or in a fork, then link the findings from the design PR. Prototype code should not open as an implementation PR (including draft PRs) against EmDash before the design is accepted.
Settling the design first also avoids wasting CI on implementation revisions that may be rewritten or discarded.
An accepted design also gives human reviewers and EmDashBot something to review against. The reviewer guidelines can require EmDashBot to compare the implementation with the linked design and report omissions, divergences, unplanned scope, and missing tests.
Feature plans and RFCs
Feature plans
A feature plan is the normal route for bounded, additive functionality within the existing architecture. It is assumed that the person opening the plan is also proposing to implement it. The plan should explain:
A feature plan does not require a separate Discussion. It can link to an issue, earlier Discussion, or roadmap item when one exists, but the feature-plan PR can itself establish the problem and proposed design. It can merge after approval from one human maintainer other than the author and has no fixed minimum review period.
The boundary does not need to be decided perfectly before writing begins. A contributor can start with the shortest plausible plan. If review reveals RFC-level risk, the project pauses acceptance and opens an "Ideas" Discussion. The proposal can then expand into a full RFC in the same PR rather than starting again.
Full RFCs
A full RFC is required for changes that affect public APIs, stored data, plugin surfaces, security boundaries, defaults, backwards compatibility, several packages or runtimes, critical-path performance, privileged supply-chain systems, breaking changes, or another decision that would be expensive to reverse.
The RFC process starts with a public "Ideas" Discussion to establish the problem, demand, and broad scope before detailed design begins. The resulting RFC adds the architecture, alternatives, failure handling, versioning, migration, security, performance, rollout, and rollback detail relevant to the change. It requires a named champion and maintainer sponsor, support from at least two maintainers, and acceptance by the Project Lead after a public review period. The proposed default review period is seven days.
Design PRs and acceptance
A design PR adds or amends a feature plan or RFC. They should not contain any code. Feature plans and RFCs should live together under
proposals/and use descriptive filenames. They do not need manually allocated proposal numbers. The GitHub PR number identifies the design review and acceptance event after the PR is opened.A dedicated design PR template will distinguish proposal work from implementation work. Contributors are encouraged to open draft design PRs when early feedback would help. A draft can contain unresolved questions or have no sponsor yet, provided it says what remains open.
Merging the design PR means acceptance. The merged proposal becomes the plan of record; the design PR should not remain open during implementation. A later design PR can amend, supersede, or withdraw it.
Every
feat:implementation PR must link a merged design PR in the EmDash repository. This rule applies equally to maintainers, the Project Lead, employees, and external contributors. There is no routinedesign-not-requiredexemption for features. If a PR is classified incorrectly, a maintainer can correct its type.Automation should verify the design link and use lightweight checks for design-only PRs. The exact templates, proposal metadata, labels, path rules, and checks belong in the implementation PR rather than this Discussion.
EmDashBot should load the accepted design when reviewing an implementation and report where the code diverges from it. Its report remains review evidence; a human maintainer retains approval authority.
Indicative lifecycles
The process should remain proportionate to the change.
Small feature
An issue or maintainer sponsor already establishes the need.
No separate Discussion, fixed comment period, or roadmap entry is required.
Complex feature
The change introduces a public contract, stored data, security boundary, or architectural decision.
Roadmap priority is decided separately. An accepted RFC does not automatically become current work.
Roadmap discovery
The project has selected an important problem but has not chosen a solution.
The roadmap records a commitment to investigate the problem, not acceptance of a particular solution.
Requests and triage
Ideas Discussions remain the request inbox. A requester should describe the problem and use case but does not need to design or implement the solution. The Discussion form should separately ask whether the author is requesting the capability, offering to champion the design, or offering to implement it after acceptance.
The Project Team should keep requests understandable by classifying them, connecting duplicates and related work, asking for missing use cases, and surfacing candidates to maintainers. Triage does not accept a design or commit the project to implementation. Detailed responsibilities and closing rules belong in the triage documentation.
A request does not become a roadmap item merely because it exists. It can remain open until it is implemented, superseded, declined with a public reason, or found to be outside the project's scope.
Rolling roadmap
The roadmap covers project-led work: initiatives the project has chosen to prioritise and coordinate. It is not a backlog of every idea or accepted design, and it is not an implementation gate. A contributor who brings an accepted design and intends to implement it can proceed immediately without roadmap placement.
An accepted design without an implementer remains available in the proposals index. It enters the roadmap only if the project later decides to drive the work.
Tracking project-led work
Each project-led initiative has a public tracking issue and an item in the public GitHub Project. The issue is the canonical record for the intended outcome, why the project is prioritising it, its champion and maintainer sponsor, the next step, and links to relevant Discussions, design PRs, and implementation PRs. One initiative can produce several proposals and implementations.
The Project records two separate dimensions:
The horizons are:
The stages are Discovery, Design, Ready, Building, Paused, and Shipped. A roadmap initiative can begin in Discovery before a solution is ready to specify. Its tracking issue links the research and Discussions until a feature plan or RFC is ready. Later design and implementation PRs link back to the same issue.
Now and Next items require an active champion, a maintainer sponsor, and a defined next step. The Project Lead makes the final decision on roadmap placement after public reasoning and consultation. GitHub remains the decision record.
Direction and timelines
The horizons are planning signals rather than release promises. Exact dates or target releases should appear only when delivery is sufficiently certain.
ROADMAP.mdprovides a short rolling 12-month summary of the outcomes the project is aiming for, grouped by horizon. It states when the roadmap was last reviewed and links each outcome to its tracking issue and the live GitHub Project. The Project holds detailed current status rather than duplicating it in the document.The roadmap should be reviewed every few months and whenever priorities materially change. Decisions can still happen asynchronously between reviews.
Transition
If this proposal is accepted, follow-up PRs will add the proposal documentation and templates, implement the design-link check, update EmDashBot's reviewer guidelines, and document the public roadmap and triage process. Existing feature PRs will receive a published transition rather than being closed automatically: settled designs can be recorded retrospectively, while PRs with unresolved design questions can move those decisions into a proposal.
Feedback requested
Feedback is particularly useful on:
feat:PR creates any cases the classification rules cannot handle.After public feedback and consultation with the Project Team and Maintainers, the Project Lead will post a decision summary and open the follow-up PRs needed to implement the accepted process.
All reactions