Skip to content

Add Jumpstarter Enhancement Proposal (JEP) Process and Issue Template#423

Open
kirkbrauer wants to merge 8 commits intomainfrom
jep-process
Open

Add Jumpstarter Enhancement Proposal (JEP) Process and Issue Template#423
kirkbrauer wants to merge 8 commits intomainfrom
jep-process

Conversation

@kirkbrauer
Copy link
Copy Markdown
Member

No description provided.

@netlify
Copy link
Copy Markdown

netlify bot commented Apr 7, 2026

Deploy Preview for jumpstarter-docs failed. Why did it fail? →

Name Link
🔨 Latest commit cb16b2f
🔍 Latest deploy log https://app.netlify.com/projects/jumpstarter-docs/deploys/69daa97693dec600089a42f1

@kirkbrauer kirkbrauer requested a review from mangelajo April 7, 2026 15:49
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 7, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a Jumpstarter Enhancement Proposal (JEP) governance system: a process specification, a reusable JEP template, a README index, and corresponding rule files describing when to use JEPs vs ADRs, numbering, metadata, and submission workflow. All changes are documentation-only.

Changes

Cohort / File(s) Summary
JEP process & template
jeps/JEP-0000-jep-process.md, jeps/JEP-NNNN-template.md, jeps/README.md
New JEP process spec (eligibility, types, full lifecycle, roles, numbering, workflow), a comprehensive JEP template with required metadata/sections, and README with quick-start, index, conventions, and status key.
Policy/rules artifacts
.claude/rules/jep-adr-process.md, .cursor/rules/jep-adr-process.mdc
New rule documents formalizing JEP/ADR usage, DD-N design-decision convention, numbering/placement rules, merge/PR expectations, and Apache-2.0 notice.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Suggested reviewers

  • raballew
  • kirkbrauer
  • mangelajo

Poem

🐇 I nibbled notes and penned a plan,
A carrot-led map for every branch and clan.
Drafts hop, reviewers dance in tune,
From burrowed ideas to a mid-afternoon bloom.
Hop on the trail — proposals sprout like noon.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive No pull request description was provided by the author, making it impossible to assess relevance to the changeset. Add a description explaining the purpose, scope, and key changes introduced by this pull request for better context.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the main change: introducing a formal JEP process and associated templates for the Jumpstarter project.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jep-process

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
jep/JEP-0000-jep-process.md (1)

140-142: Add language specifier to fenced code block.

The fenced code block is missing a language specifier, which is flagged by markdownlint.

📝 Proposed fix
-```
+```text
 JEP: Short descriptive title

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @jep/JEP-0000-jep-process.md around lines 140 - 142, The fenced code block
containing "JEP: Short descriptive title" lacks a language specifier (triggering
markdownlint); update that fenced block (the triple-backtick block that wraps
the line "JEP: Short descriptive title") to include a language tag such as text
(e.g., ```text) so the block is properly annotated.


</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🤖 Prompt for all review comments with AI agents</summary>

Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/ISSUE_TEMPLATE/jep-proposal.yml:

In @jep/JEP-0000-jep-process.md:

  • Line 203: Update the incorrect directory path reference in the JEP text:
    replace the occurrence of "jeps/README.md" with the correct "jep/README.md" in
    the document (JEP-0000-jep-process.md) so it points to the actual README in the
    jep/ directory.

Nitpick comments:
In @jep/JEP-0000-jep-process.md:

  • Around line 140-142: The fenced code block containing "JEP: Short descriptive
    title" lacks a language specifier (triggering markdownlint); update that fenced
    block (the triple-backtick block that wraps the line "JEP: Short descriptive
    title") to include a language tag such as text (e.g., ```text) so the block is
    properly annotated.

</details>

<details>
<summary>🪄 Autofix (Beta)</summary>

Fix all unresolved CodeRabbit comments on this PR:

- [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended)
- [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes

</details>

---

<details>
<summary>ℹ️ Review info</summary>

<details>
<summary>⚙️ Run configuration</summary>

**Configuration used**: Organization UI

**Review profile**: CHILL

**Plan**: Pro

**Run ID**: `5aed2daa-10d5-4d72-a927-5a6ff2159142`

</details>

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between d713354eeaea42fe7774665a561a07da404e5598 and 652b3d2a7b591889b699aafd65bbc33fbe214c66.

</details>

<details>
<summary>📒 Files selected for processing (4)</summary>

* `.github/ISSUE_TEMPLATE/jep-proposal.yml`
* `jep/JEP-0000-jep-process.md`
* `jep/JEP-NNNN-template.md`
* `jep/README.md`

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment thread .github/ISSUE_TEMPLATE/jep-proposal.yml Outdated
Comment thread jeps/JEP-0000-jep-process.md Outdated
@mangelajo
Copy link
Copy Markdown
Member

This is a great idea, having a structured process for substantial changes brings much-needed formality and a clear planning trail, especially for anything touching interfaces, the gRPC protocol, or CRDs where mistakes are expensive to undo, etc.

One optional idea for down the road: once a JEP is approved, we could experiment with spec-kit deriving a spec-kit spec from a JEP. :)

Comment thread jep/README.md Outdated
@mangelajo mangelajo requested a review from raballew April 8, 2026 10:36
Comment thread jeps/README.md Outdated
@kirkbrauer
Copy link
Copy Markdown
Member Author

kirkbrauer commented Apr 8, 2026

@ambient-code Let's go ahead and remove the issue template and standardize the process on creating PRs for formal proposals.

@ambient-code
Copy link
Copy Markdown
Contributor

ambient-code bot commented Apr 8, 2026

Done. I've removed the .github/ISSUE_TEMPLATE/jep-proposal.yml file and updated all JEP documentation (jeps/JEP-0000-jep-process.md, jeps/README.md, jeps/JEP-NNNN-template.md) to standardize on pull requests as the sole mechanism for submitting JEPs. References to the issue template, issue-based numbering, and issue-centric language have been replaced with PR-based equivalents throughout.

Comment thread jeps/JEP-0000-jep-process.md Outdated
Comment thread python/docs/source/internal/jeps/JEP-0000-jep-process.md
Comment thread jeps/JEP-0000-jep-process.md Outdated
Comment thread jeps/JEP-0000-jep-process.md Outdated
Comment thread jeps/JEP-NNNN-template.md Outdated
@kirkbrauer
Copy link
Copy Markdown
Member Author

@ambient-code Let's go ahead and make this align with the SpecKit (https://github.com/github/spec-kit) standards for specifications that can be implemented by agents. We might also want to pull in Architecture Decision Records (ADRs) similar to the one added into this PR: #533

@ambient-code
Copy link
Copy Markdown
Contributor

ambient-code bot commented Apr 9, 2026

I've reviewed both SpecKit and the ADR format from PR #533 and made the following changes to align the JEP process:

JEP template (JEP-NNNN-template.md):

  • Added a Design Decisions section using the DD-N pattern from ADRs (alternatives considered, decision, rationale) — this matches the format used in ADR-0001 from PR Add Renode emulator driver for embedded target simulation #533
  • Added a Consequences section (positive/negative/risks) following ADR convention
  • Marked all sections as *(mandatory)*, *(optional)*, or *(mandatory for Standards Track)* following SpecKit's practice of making document structure explicit for agents and contributors alike

Process document (JEP-0000-jep-process.md):

  • Added a JEPs and Architecture Decision Records section that clarifies when to use a JEP vs an ADR (JEPs for cross-cutting changes needing community review; ADRs for scoped technical decisions within a single component/driver)
  • Added SpecKit and ADR references to the Prior Art section

Index (README.md):

  • Added a Related: ADRs section pointing contributors to the right process
  • Added a For AI Agents section documenting JEP conventions (metadata format, section markers, DD-N pattern, file naming) so agents can help draft and review JEPs

What I intentionally did not adopt from SpecKit: SpecKit's full workflow (/speckit.specify/speckit.plan/speckit.tasks) is designed for product feature development with code generation. That doesn't map well to an enhancement proposal process. Instead, I adopted the parts that are relevant: explicit mandatory/optional section markers, structured document conventions for agent readability, and the spec-as-source-of-truth philosophy.

Copy link
Copy Markdown
Member Author

@kirkbrauer kirkbrauer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ambient-code Let's address these comments first before further reviews.

Comment thread jeps/JEP-0000-jep-process.md Outdated
Comment thread jeps/JEP-0000-jep-process.md Outdated
Comment thread python/docs/source/internal/jeps/JEP-0000-jep-process.md
Comment thread jeps/JEP-0000-jep-process.md Outdated
Comment thread jeps/JEP-NNNN-template.md Outdated
vtz added a commit to vtz/jumpstarter that referenced this pull request Apr 11, 2026
Restructure the Renode integration ADR to follow the JEP template
format: metadata table, Abstract, Motivation, Rejected Alternatives,
Prior Art, Implementation History, and References sections. The DD-N
design decisions and Consequences sections were already aligned.

Made-with: Cursor
@kirkbrauer
Copy link
Copy Markdown
Member Author

@ambient-code Finally, we should migrate the ADRs and JEPs into the docs directory for consistency so we can render it as part of the documentation.

@ambient-code
Copy link
Copy Markdown
Contributor

ambient-code bot commented Apr 11, 2026

Migrated JEPs and ADRs into the docs directory for documentation rendering:

  • Moved jeps/docs/internal/jeps/ (JEP-0000, JEP template, and README)
  • Created docs/internal/adr/ directory (with .gitkeep) for future ADRs
  • Updated all internal path references:
    • docs/internal/jeps/README.md — updated Quick Start instructions to reference docs/internal/jeps/
    • docs/internal/jeps/JEP-0000-jep-process.md — fixed the JEP template link (was a broken relative path ../docs/internal/jeps/..., now co-located JEP-NNNN-template.md)
    • .claude/rules/jep-adr-process.md — updated template source path
    • .cursor/rules/jep-adr-process.mdc — updated template source path

The physical file locations now match the paths already documented in JEP-0000, the rules files, and the JEP template. This enables rendering JEPs and ADRs as part of the project documentation site.

@jumpstarter-dev jumpstarter-dev deleted a comment from ambient-code bot Apr 13, 2026
vtz added a commit to vtz/jumpstarter that referenced this pull request Apr 15, 2026
Move the Renode integration design document from
python/docs/source/contributing/adr/ to the JEP directory at
docs/internal/jeps/, following the JEP template from PR jumpstarter-dev#423.

Adds mandatory sections (Proposal, Design Details, Test Plan,
Backward Compatibility, User Stories, Future Possibilities) and
a new DD-5 for security decisions (allow_raw_monitor, load_command
allowlist, newline rejection).

Made-with: Cursor
vtz added a commit to vtz/jumpstarter that referenced this pull request Apr 15, 2026
Restructure the Renode integration ADR to follow the JEP template
format: metadata table, Abstract, Motivation, Rejected Alternatives,
Prior Art, Implementation History, and References sections. The DD-N
design decisions and Consequences sections were already aligned.

Made-with: Cursor
vtz added a commit to vtz/jumpstarter that referenced this pull request Apr 15, 2026
Move the Renode integration design document from
python/docs/source/contributing/adr/ to the JEP directory at
docs/internal/jeps/, following the JEP template from PR jumpstarter-dev#423.

Adds mandatory sections (Proposal, Design Details, Test Plan,
Backward Compatibility, User Stories, Future Possibilities) and
a new DD-5 for security decisions (allow_raw_monitor, load_command
allowlist, newline rejection).

Made-with: Cursor
kirkbrauer and others added 4 commits April 15, 2026 19:13
- Rename jep/ directory to jeps/ per maintainer feedback
- Add text language specifier to fenced code block
- Update workflow to clarify JEPs should be submitted as PRs for discussion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the JEP proposal issue template and update all JEP documentation
to reference pull requests as the sole mechanism for submitting formal
proposals. This simplifies the process by having a single, consistent
workflow for JEP submission and review.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add structured Design Decisions (DD-N) section to JEP template following
  the ADR pattern used in the project (e.g., ADR-0001 from PR #533)
- Add Consequences section (positive/negative/risks) to JEP template
- Mark all template sections as mandatory, optional, or conditional
- Document the relationship between JEPs and ADRs in JEP-0000
- Add SpecKit and ADR references to Prior Art in JEP-0000
- Add agent instructions and document conventions to jeps/README.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
kirkbrauer and others added 4 commits April 15, 2026 19:13
- Unify documentation location to docs/internal/ for JEPs and ADRs
- Clarify JEP numbers are incrementing integers, not PR numbers
- Clarify JEPs should always be merged as PRs into docs/source
- Update rejection policy: rejected JEPs not merged unless architectural reason
- Add claude/cursor rules to assist with JEP/ADR generation workflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move JEP files from jeps/ to docs/internal/jeps/ and create
docs/internal/adr/ directory, matching the paths already referenced
in the documentation. Update all internal references in the JEP
process document, README, and claude/cursor rules files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@@ -0,0 +1,76 @@
---
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[HIGH] The existing .claude/rules/ directory uses symlinks that point to .cursor/rules/ as the single source of truth (e.g. creating-new-drivers.md -> ../../.cursor/rules/creating-new-drivers.mdc). All three new .claude/ files in this PR are regular files with content duplicated verbatim across both directories. If someone edits one copy later, the other will silently diverge.

Suggestion: follow the existing convention and make .cursor/ the source of truth, then replace these .claude/ copies with symlinks (e.g. .claude/rules/jep-adr-process.md -> ../../.cursor/rules/jep-adr-process.mdc). Same for the skill directories.

AI-generated, human reviewed

@@ -0,0 +1,298 @@
---
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] The template is missing an "Acceptance Criteria" section. It has motivation, design decisions, consequences, and rejected alternatives, but no place for authors to define measurable criteria for when a proposal's goals have been met. The closest section is "Graduation Criteria" which is optional and serves a different purpose.

Suggestion: add an ## Acceptance Criteria section (mandatory for Standards Track JEPs) with guidance on defining measurable success criteria.

AI-generated, human reviewed

Comment on lines +125 to +136
| Status | Meaning |
| ---------------- | ------------------------------------------------------------------------------------ |
| **Draft** | Author is still writing the JEP. Not yet open for formal review. |
| **Proposed** | JEP PR is open and under community discussion. |
| **Accepted** | Maintainers have approved the design. Implementation may begin. |
| **Implementing** | Implementation is in progress. The JEP may be updated with implementation learnings. |
| **Implemented** | Reference implementation is complete and merged. |
| **Final** | JEP is complete and considered the authoritative record of the feature. |
| **Rejected** | Maintainers have declined the proposal. The JEP remains as a record of the decision. |
| **Deferred** | Proposal is sound but not a current priority. May be revisited later. |
| **Withdrawn** | Author has voluntarily withdrawn the proposal. |
| **Superseded** | Replaced by a newer JEP. The `Superseded-By` field indicates the replacement. |
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] The lifecycle states use "Proposed" instead of "Discussion" as defined earlier in the spec. The additional states (Implementing, Final, Deferred) are fine as additive, but renaming "Discussion" to "Proposed" is a semantic change that creates a mismatch.

Suggestion: either rename the "Proposed" state back to "Discussion" here, or update the spec to reflect the chosen name.

AI-generated, human reviewed

| **JEP** | 0000 |
| **Title** | Jumpstarter Enhancement Proposal Process |
| **Author(s)** | Jumpstarter Maintainers |
| **Status** | Active |
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] The metadata table sets Status: Active, but "Active" is not one of the 10 lifecycle states defined later in this same document (lines 125-136), nor in the README status key. JEP-0000 defines the valid statuses for all JEPs but then uses an undefined status for itself.

Suggestion: add "Active" to the lifecycle states table and README status key with a definition like "Living document, actively maintained and updated as the process evolves" (similar to how Python's PEP-0001 uses "Active" for process PEPs).

AI-generated, human reviewed


## Context

JEPs are design documents for substantial changes to the Jumpstarter project — changes that affect multiple components, alter public APIs or protocols, or require community consensus. Read `.claude/rules/jep-adr-process.md` for the full process definition.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] This Cursor skill file references .claude/rules/jep-adr-process.md but it should reference the Cursor-specific equivalent .cursor/rules/jep-adr-process.mdc. A Cursor agent following this instruction would be directed to read a Claude-specific config file rather than its own.

Same issue exists in .cursor/skills/create-adr/SKILL.md:13.

AI-generated, human reviewed

For guidance on when to use an ADR vs a JEP, see
[JEP-0000](../jeps/JEP-0000-jep-process.md).

*No ADRs have been submitted yet.*
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] The JEP index (README.md) correctly includes a {toctree} directive listing all JEP files for Sphinx navigation, but this ADR index page has no toctree. When ADRs are eventually created, they won't appear in the rendered docs navigation unless someone manually adds a toctree later.

Suggestion: add an empty toctree directive here and update the create-adr skill to mention adding new ADR files to it.

AI-generated, human reviewed

Comment on lines +68 to +115
## For AI Agents

This section provides conventions for AI agents working with JEPs.

### Document structure

JEP files are Markdown documents with a metadata table at the top. The metadata
table uses pipe-delimited rows with bold field names. Required fields:
`JEP`, `Title`, `Author(s)`, `Status`, `Type`, `Created`.

### Section markers

Sections in the JEP template are marked `*(mandatory)*`, `*(optional)*`, or
`*(mandatory for Standards Track)*`. When helping an author draft a JEP, ensure
all mandatory sections are filled in. Optional sections may be omitted entirely.

### Design Decisions format

Each design decision uses a numbered `DD-N` subsection under `## Design Decisions`
with the following structure:

```text
### DD-N: Decision title

**Alternatives considered:**

1. **Option A** — Description.
2. **Option B** — Description.

**Decision:** Chosen option.

**Rationale:** Why this option was chosen.
```

This matches the ADR convention used elsewhere in the project (see
`python/docs/source/internal/adr/`).

### File naming

JEP files are named `JEP-NNNN-short-title.md` where `NNNN` is the next
available incrementing integer (zero-padded to 4 digits). The template file
is `JEP-NNNN-template.md`.

### JEP numbering

The JEP number is an incrementing integer assigned sequentially; it is not
derived from the pull request number. JEP-0000 through JEP-0009 are
reserved for process and meta-JEPs.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] The "For AI Agents" section adds machine-oriented parsing conventions (metadata table format, section marker semantics, DD-N format, file naming regex, numbering rules) into what is otherwise a human-readable index. This same information already exists in the dedicated agent rule files (.claude/rules/jep-adr-process.md, .cursor/rules/jep-adr-process.mdc), so it is duplicated.

Suggestion: move the "For AI Agents" content into the agent rule files, which are purpose-built for machine consumers.

AI-generated, human reviewed


reference/index.md
internal/index.md
``` No newline at end of file
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[LOW] The file is missing a trailing newline. The diff shows No newline at end of file. Since this PR already modified the file (adding internal/index.md to the toctree), it would be a nice cleanup to add the missing trailing newline for POSIX compliance.

AI-generated, human reviewed

Comment on lines +54 to +65

| Status | Meaning |
| ------------ | ------------------------------------------------ |
| Draft | Author is still writing; not yet open for review |
| Proposed | PR is open and under community discussion |
| Accepted | Design approved; implementation may begin |
| Implementing | Implementation in progress |
| Implemented | Reference implementation merged |
| Final | Complete and authoritative |
| Rejected | Declined (record preserved) |
| Deferred | Sound but not a current priority |
| Withdrawn | Author voluntarily withdrew |
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[LOW] The lifecycle status table, DD-N format, and JEP numbering rules are substantively repeated in JEP-0000 (authoritative), README (quick reference), and the agent rules files, but none of the secondary copies indicate that JEP-0000 is the canonical source. If the process evolves, multiple files will need synchronized updates.

Suggestion: add a brief note to the README status table and agent rules indicating that JEP-0000 is the canonical source.

AI-generated, human reviewed

| **Discussion** | [PR #533](https://github.com/jumpstarter-dev/jumpstarter/pull/533) |

---

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[LOW] Minor: in the Implementation History section (not shown in the diff, but visible in the full file), line 360 uses - 2026-04-06 JEP proposed (no colon) while line 361 uses - 2026-04-06: Initial implementation proposed (with colon). The template's documented format uses colons (- YYYY-MM-DD: description). Consider adding a colon after the date on line 360 for consistency.

AI-generated, human reviewed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants