Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .claude/rules/jep-process.md
1 change: 1 addition & 0 deletions .claude/skills/propose-jep/SKILL.md
62 changes: 62 additions & 0 deletions .cursor/rules/jep-process.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
alwaysApply: false
---

# JEP Process

This rule helps with creating Jumpstarter Enhancement Proposals (JEPs).

## When to Use

- **JEP**: Cross-cutting changes that affect multiple components, change public APIs or protocols, or require community consensus.

## Creating a JEP

1. **Choose the next JEP number**: Look at existing files in `python/docs/source/internal/jeps/` and pick the next available incrementing integer. JEP-0000 through JEP-0009 are reserved for process/meta-JEPs, so start from JEP-0010 for regular proposals.

2. **Create the file**: Copy the template from `python/docs/source/internal/jeps/JEP-NNNN-template.md` to `python/docs/source/internal/jeps/JEP-NNNN-short-title.md`, replacing `NNNN` with the zero-padded number and `short-title` with a descriptive slug.

3. **Fill in the metadata table**:
- Set the JEP number (incrementing integer, NOT the PR number)
- Set the title, author(s) with GitHub handle and email
- Set the type: `Standards Track`, `Informational`, or `Process`
- Set the status to `Draft` initially, then `Discussion` when the PR is ready for review
- Set the created date to today

4. **Fill in all mandatory sections**:
- Abstract (3-5 sentences)
- Motivation (concrete problem description)
- Proposal (written as if teaching the feature)
- Design Decisions (use DD-N pattern with alternatives and rationale)
- Design Details (architecture, data flow, error handling)
- Test Plan (unit, integration, HiL, manual)
- Backward Compatibility
- Consequences (positive and negative)
- Rejected Alternatives

5. **Open a PR** against main with the `jep` label.

## Design Decision Format (DD-N)

JEPs use this format for individual decisions:

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

**Alternatives considered:**

1. **Option A** — Brief description.
2. **Option B** — Brief description.

**Decision:** Option A.

**Rationale:** Explain why this option was chosen.
```

## Key Rules

- JEP numbers are incrementing integers, NOT derived from PR numbers
- JEPs live in `python/docs/source/internal/jeps/`
- All JEPs should be merged as PRs so the documentation is part of the Jumpstarter docs/source
- Rejected JEPs are normally not merged, but can be merged with "Rejected" status if there is an architectural reason to preserve them
- The license for all documents is Apache-2.0
5 changes: 4 additions & 1 deletion .cursor/rules/project-structure.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ jumpstarter/
│ ├── pyproject.toml # Main workspace configuration
│ ├── packages/ # All Python packages
│ ├── examples/ # Example applications
│ ├── docs/ # Documentation
│ ├── docs/ # Documentation (Sphinx)
│ │ └── source/
│ │ └── internal/ # JEPs (rendered as part of docs)
│ │ └── jeps/ # Jumpstarter Enhancement Proposals
│ └── __templates__/ # Templates for creating new drivers
├── controller/ # Controller components
├── protocol/ # Protocol definitions
Expand Down
60 changes: 60 additions & 0 deletions .cursor/skills/propose-jep/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
name: propose-jep
description: Create a new Jumpstarter Enhancement Proposal (JEP)
argument-hint: Short title or description of the proposal
---

# Propose a JEP

You are helping the user create a new Jumpstarter Enhancement Proposal (JEP).

## 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 `.cursor/rules/jep-process.mdc` for the full process definition.

JEP topic: $ARGUMENTS

## Steps

### 1. Determine the next JEP number

List existing files in `python/docs/source/internal/jeps/` and pick the next available incrementing integer. JEP-0000 through JEP-0009 are reserved for process/meta-JEPs, so start from JEP-0010 for regular proposals.

### 2. Gather information

Before writing the JEP, ask the user clarifying questions to understand:

- **What problem does this solve?** — The motivation section needs a concrete problem description.
- **Who is affected?** — Which components, drivers, or user workflows are impacted?
- **What are the alternatives?** — Each design decision needs at least two alternatives considered.
- **What are the compatibility implications?** — Does this break existing APIs, protocols, or workflows?

If the user provided a description in `$ARGUMENTS`, use it as a starting point but still ask about gaps.

### 3. Create the JEP file

Copy the template from `python/docs/source/internal/jeps/JEP-NNNN-template.md` and create a new file at `python/docs/source/internal/jeps/JEP-NNNN-short-title.md` where:

- `NNNN` is the zero-padded next number
- `short-title` is a descriptive slug derived from the proposal title

Fill in:

- The metadata table with the JEP number, title, author (ask the user), status `Draft`, type, and today's date
- All mandatory sections based on the information gathered
- Mark optional sections that need further input with TODO comments

### 4. Update the JEP index

Add the new JEP to the appropriate table in `python/docs/source/internal/jeps/README.md` (Process, Standards Track, or Informational).

Add the new JEP file to the `{toctree}` directive at the bottom of `python/docs/source/internal/jeps/README.md`.

### 5. Present the result

Show the user:

- The file path of the new JEP
- A summary of sections that are complete vs need further work
- Remind them to set status to `Discussion` when the PR is ready for review
- Remind them to apply the `jep` label to their pull request
3 changes: 3 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,14 @@ Important project-specific rules and guidelines are located in the `.claude/rule

- **`.claude/rules/releasing-operator.md`**: Step-by-step guide for releasing a new version of the Jumpstarter operator, including which files to update, image tag conventions, bundle generation, and community-operators contribution workflow.

- **`.claude/rules/jep-process.md`**: Process for creating Jumpstarter Enhancement Proposals (JEPs), including when to use them, numbering conventions, required sections, and the design decision format. Read this when proposing or reviewing cross-cutting changes or features that require community consensus.

## When to Read These Rules

- **Always**: Read `project-structure.md` when working with files, packages, or understanding the codebase layout
- **When creating drivers**: Read `creating-new-drivers.md` before creating, improving, or documenting driver packages
- **When releasing the operator**: Read `releasing-operator.md` before preparing a new operator version for OLM
- **When creating JEPs**: Read `jep-process.md` before proposing enhancements that affect multiple components, change public APIs, or require community discussion
- **When modifying structure**: Consult both files when making changes that affect project organization

## Key Information
Expand Down
3 changes: 2 additions & 1 deletion python/docs/source/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,5 @@ contributing.md
glossary.md
reference/index.md
```
internal/index.md
```
11 changes: 11 additions & 0 deletions python/docs/source/internal/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Project Governance

This section contains Jumpstarter Enhancement Proposals (JEPs) that document
significant design decisions and process changes.

```{toctree}
:maxdepth: 2
:hidden:
jeps/README.md
```
Loading
Loading