Skip to content

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

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

Add Jumpstarter Enhancement Proposal (JEP) Process and Issue Template#423
kirkbrauer wants to merge 5 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 a30de99
🔍 Latest deploy log https://app.netlify.com/projects/jumpstarter-docs/deploys/69d88512a0b7a200080fbb1c

@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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cc3f9e23-317c-4fce-9b74-3aeeeea308d0

📥 Commits

Reviewing files that changed from the base of the PR and between db7391e and a30de99.

📒 Files selected for processing (5)
  • .claude/rules/jep-adr-process.md
  • .cursor/rules/jep-adr-process.mdc
  • jeps/JEP-0000-jep-process.md
  • jeps/JEP-NNNN-template.md
  • jeps/README.md
✅ Files skipped from review due to trivial changes (5)
  • .claude/rules/jep-adr-process.md
  • .cursor/rules/jep-adr-process.mdc
  • jeps/JEP-NNNN-template.md
  • jeps/README.md
  • jeps/JEP-0000-jep-process.md

📝 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 -->

@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. :)

jep/README.md Outdated
1. Read [JEP-0000](JEP-0000-jep-process.md) to understand when a JEP is needed.
2. Socialize your idea in [Matrix](https://matrix.to/#/#jumpstarter:matrix.org)
or at the [weekly meeting](https://meet.google.com/gzd-hhbd-hpu).
3. Open a new issue using the **JEP: Enhancement Proposal** template.
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.

I think it would be better to materialize JEPs as PRs always. It makes discussion easier. But that is probably something we can automate and convert issues into PRs at will. But it would be good to explain it here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Updated both the README and JEP-0000 process doc to clarify that JEPs should be submitted as pull requests containing the JEP markdown file. The PR-based workflow is now presented as the primary path, with issues available for initial discussion or lightweight proposals.

@mangelajo mangelajo requested a review from raballew April 8, 2026 10:36
- 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>
Comment on lines +20 to +24
3. Create a branch and add your JEP markdown file to the `jeps/` directory
using the [JEP-NNNN-template.md](JEP-NNNN-template.md) as a starting point.
4. Open a pull request. The PR serves as the primary venue for discussion,
allowing inline review comments on the JEP text.

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.

ok, I wanted to discuss about this but ambient code went ahead ... lol...

WDYT @kirkbrauer ?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Yeah, so we could use PRs or Issues to track these (or maybe both), that's why I added the issue template.

@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.

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>
@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.


The issue number automatically becomes the JEP number (e.g., issue #400
becomes JEP-0400). Apply the `jep` label to the issue.
The PR number becomes the JEP number (e.g., PR #400 becomes JEP-0400).
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.

I think that using the PR number is not very deterministic, we should probably do sequential PRs. i.e. at the time of creating a new PR you can try to guess which number is next (counter is shared across issues and PRs, not sure if something else.)

I think it's just simpler to use a monotonic JEP counter, and manually fix when two competing PRs collide on the JEP number.

WDYT?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code Let's clartify that the JEP number is just an incrementing integer, not reflective of the PR#.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Clarified that JEP numbers are incrementing integers assigned sequentially, not derived from PR numbers. Updated the workflow section, the numbering section, the template metadata, and the README's agent-facing documentation to all reflect this.

updates the JEP status in the issue body. Rejected JEPs are closed but not
deleted — they remain as the historical record of why an approach was not
taken.
Decisions are recorded as a comment on the pull request with a rationale. The
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.

@kirkbrauer we must decide if we merge the PRs with rejected JEPs, or not.

We have two options:

  1. Not merge them, but github will keep the history on the PR, including comments, rationale, etc.
  2. Merge them, clearly marked as rejected, may be using a sub-directory?

I would say that 2 gives us future context for any later decision making.

WDYT?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code We should always merge the JEPs as PRs so the Markdown documentation is incorporated directly into the Jumpstarter docs/source.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Added clarification in the Decision section that JEPs should always be merged as PRs so the markdown documentation is incorporated directly into the Jumpstarter docs/source.

deleted — they remain as the historical record of why an approach was not
taken.
Decisions are recorded as a comment on the pull request with a rationale. The
author updates the JEP status in the markdown file. Rejected JEPs are closed
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.

if we want to merge the rejections, it's probably something we can automate with the bot, 1) move to a jeps/rejected directory 2) add a clear rejected message, collecting the reasoning in the PR discussions, etc..

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code Let's clarify that the rejected JEPs will not be accepted as PRs, but if there is an architectural reason to merge them, then we can merge them with a "Rejected" status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Updated the rejection section: rejected JEPs are normally not merged as PRs. However, if there is an architectural reason to preserve them (e.g., documenting why an approach was not taken), they may be merged with a "Rejected" status clearly set in the metadata.

## JEP Numbering

JEP numbers are assigned from the GitHub issue number used to submit the JEP.
JEP numbers are assigned from the pull request number used to submit the JEP.
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.

We need to decide on this. May be one option is simply submit a bogus/expected one, then self-correct? IDK

document is preferred (e.g., attaching to an issue or linking from one).
Use this template to create your JEP. Copy it to a new file named
JEP-NNNN-short-title.md (where NNNN will be the PR number) and open a
pull request against the main branch.
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.

Should we add some .cursor/rules .claude/rules to help with this process? i.e. ask a few questions to the user, and prepare the initial template, even try to figure out what is the next PR number :)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code Let's add some claude/cursor rules to help out with this process of generating JEPs/ADRs and filling out the initial template, choosing the number, etc.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Added claude and cursor rules files (.claude/rules/jep-adr-process.md and .cursor/rules/jep-adr-process.mdc) that guide agents through the JEP/ADR creation process, including how to choose the next number, which template to use, what sections are mandatory, and the design decision DD-N format.

@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

- 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>
@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.

| **Scope** | Cross-cutting changes to the project | Scoped to a single component or driver |
| **Process** | Requires community review and maintainer approval | Included with the implementation PR |
| **When** | Before implementation begins | Alongside or within an implementation PR |
| **Location** | `jeps/` directory | `python/docs/source/contributing/adr/` directory |
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code We should try to unify the location of all of our documentation to ensure consistency and the ability to serve these docs later. We can refer to the Ambient Code project on GitHub, which uses the docs/internal directory to store internal documentation such as specs and ADRs.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Updated the location table to point both JEPs and ADRs to the docs/internal/ directory (docs/internal/jeps/ and docs/internal/adr/ respectively). Also updated all file path references throughout JEP-0000, the template, and the README to reflect the new unified location.


The issue number automatically becomes the JEP number (e.g., issue #400
becomes JEP-0400). Apply the `jep` label to the issue.
The PR number becomes the JEP number (e.g., PR #400 becomes JEP-0400).
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code Let's clartify that the JEP number is just an incrementing integer, not reflective of the PR#.

updates the JEP status in the issue body. Rejected JEPs are closed but not
deleted — they remain as the historical record of why an approach was not
taken.
Decisions are recorded as a comment on the pull request with a rationale. The
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code We should always merge the JEPs as PRs so the Markdown documentation is incorporated directly into the Jumpstarter docs/source.

deleted — they remain as the historical record of why an approach was not
taken.
Decisions are recorded as a comment on the pull request with a rationale. The
author updates the JEP status in the markdown file. Rejected JEPs are closed
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code Let's clarify that the rejected JEPs will not be accepted as PRs, but if there is an architectural reason to merge them, then we can merge them with a "Rejected" status.

document is preferred (e.g., attaching to an issue or linking from one).
Use this template to create your JEP. Copy it to a new file named
JEP-NNNN-short-title.md (where NNNN will be the PR number) and open a
pull request against the main branch.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@ambient-code Let's add some claude/cursor rules to help out with this process of generating JEPs/ADRs and filling out the initial template, choosing the number, etc.

- 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>
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.

2 participants