plano/docs/peps/PEP-0000-process.md
2026-04-08 13:00:58 -07:00

6.3 KiB

PEP-0000: Plano Enhancement Proposal Process

Field Value
PEP 0000
Title Plano Enhancement Proposal Process
Status Active
Authors Plano Maintainers
Created 2026-04-07

What is a PEP?

A Plano Enhancement Proposal (PEP) is a design document that describes a significant change to the Plano project. PEPs provide a structured way to propose, discuss, and track major features, architectural changes, and process improvements.

PEPs are inspired by Kafka's KIP process, Kubernetes KEPs, and Envoy's design document process.

When is a PEP Required?

A PEP is required for changes that:

  • Introduce a new user-facing feature or capability
  • Change existing user-facing behavior in a breaking way
  • Add a new subsystem or architectural component
  • Modify the configuration schema in a significant way
  • Add a new LLM provider with non-standard API patterns
  • Change the project's processes or governance

A PEP is not required for:

  • Bug fixes
  • Documentation improvements
  • Refactoring that doesn't change behavior
  • Adding models to an existing provider
  • Minor CLI improvements
  • Test improvements
  • Dependency updates

When in doubt, open a GitHub issue or Discussion first. A maintainer will let you know if a PEP is warranted.

PEP Lifecycle

Draft → Under Review → Accepted → Implementing → Complete
                  ↘ Declined
                  ↘ Deferred
                  ↘ Withdrawn

States

State Description
Draft Author is writing the proposal. Not yet ready for formal review.
Under Review PR is open. Maintainers and community are discussing the design.
Accepted Maintainers have approved the design. Implementation can begin.
Declined Maintainers have decided not to pursue this proposal. The PEP remains in the repo for historical reference with an explanation of the decision.
Deferred Good idea, but not the right time. Will be reconsidered later.
Withdrawn Author has decided not to pursue this proposal.
Implementing Accepted and actively being built. Linked to tracking issue(s).
Complete Fully implemented and released.

How to Submit a PEP

Before writing a full PEP, validate the idea:

This step saves time by catching fundamental objections early.

2. Write the PEP

Copy docs/peps/PEP-TEMPLATE.md to docs/peps/PEP-XXXX-short-title.md (use the next available number). Fill in all sections. The template is deliberately structured — each section exists for a reason.

Key guidelines:

  • Be specific. "Add caching" is too vague. "Add exact-match response cache with configurable TTL keyed by model + message hash" is actionable.
  • Show the config. If the feature involves user-facing configuration, include the YAML snippet users would write.
  • Address trade-offs. Every design has trade-offs. Acknowledging them strengthens the proposal.
  • Include alternatives. Explain what other approaches you considered and why you chose this one.

3. Submit as a Pull Request

Open a PR adding your PEP file to docs/peps/. The PR title should be PEP-XXXX: Short Title. Set the status to Draft or Under Review depending on readiness.

4. Review and Discussion

  • At least two maintainers must review the PEP
  • Community members are encouraged to comment on the PR
  • The author is expected to respond to feedback and revise the proposal
  • Discussion should focus on the design, not implementation details (those belong in code review)
  • Complex PEPs may be discussed in a community meeting

5. Decision

Maintainers aim to provide initial feedback within two weeks of a PEP entering Under Review. Complex proposals may take longer, but the author should never be left without a response.

A PEP is accepted when at least two maintainers approve the PR and there are no unresolved objections. The accepting maintainer merges the PR with the status set to Accepted.

A PEP is declined when maintainers determine the proposal doesn't align with the project's direction or has fundamental issues that can't be resolved. The PR is merged (not closed) with the status set to Declined and a rationale recorded — declined PEPs remain in the repo as a record.

Resolving disagreements: If maintainers disagree on a PEP, the proposal is discussed in a community meeting. If consensus still can't be reached, the project lead makes the final call and records the rationale in the PEP.

6. Implementation

Once accepted:

  • Create a tracking GitHub issue (or issues) for the implementation
  • Link the issue(s) in the PEP header
  • Update the PEP status to Implementing
  • Implementation PRs should reference the PEP number (e.g., "Part of PEP-0042")
  • When all implementation work is merged and released, update status to Complete

PEP Numbering

  • PEPs are numbered sequentially starting from 0001
  • PEP-0000 is reserved for this process document
  • The author picks the next available number when submitting

Roles

Role Responsibility
Author Writes the PEP, responds to review feedback, drives the proposal to a decision
Sponsor A maintainer who shepherds the PEP through review. Required for PEPs from non-maintainers. Find a sponsor by asking in Discord or a community meeting.
Reviewers Maintainers and community members who provide feedback on the design

Amending Accepted PEPs

If an accepted PEP needs material changes during implementation:

  • For minor adjustments (implementation details, clarifications): update the PEP in-place via a PR
  • For significant design changes: open a new PEP that supersedes the original, linking back to it

Index

PEP Title Status Author
0000 Plano Enhancement Proposal Process Active Plano Maintainers