Skip to content

Commit db7391e

Browse files
kirkbrauerclaude
andcommitted
Align JEP process with SpecKit standards and ADR conventions
- 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>
1 parent 6b005cf commit db7391e

3 files changed

Lines changed: 164 additions & 14 deletions

File tree

jeps/JEP-0000-jep-process.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,29 @@ Not every change needs a JEP. Use the following guidelines:
7070
When in doubt, ask in [Matrix](https://matrix.to/#/#jumpstarter:matrix.org) or
7171
open a GitHub issue to gauge whether your idea warrants a JEP.
7272

73+
## JEPs and Architecture Decision Records (ADRs)
74+
75+
The project uses both JEPs and Architecture Decision Records (ADRs). They serve
76+
different purposes and operate at different scopes:
77+
78+
| Aspect | JEP | ADR |
79+
|---------------|--------------------------------------------|----------------------------------------------------|
80+
| **Scope** | Cross-cutting changes to the project | Scoped to a single component or driver |
81+
| **Process** | Requires community review and maintainer approval | Included with the implementation PR |
82+
| **When** | Before implementation begins | Alongside or within an implementation PR |
83+
| **Location** | `jeps/` directory | `python/docs/source/contributing/adr/` directory |
84+
| **Example** | New lease scheduling strategy | Choice of telnet vs pyrenode3 for Renode driver |
85+
86+
**Use a JEP** when the change affects multiple components, changes public APIs or
87+
protocols, or requires community consensus. **Use an ADR** when you are making a
88+
significant technical decision within a self-contained piece of work (e.g., a new
89+
driver) that does not need project-wide review but should be documented for
90+
posterity.
91+
92+
JEPs borrow the structured decision format from ADRs: each design decision in a
93+
JEP should document alternatives considered and rationale, following the `DD-N`
94+
pattern in the [JEP template](JEP-NNNN-template.md).
95+
7396
## JEP Types
7497

7598
| Type | Description |
@@ -209,6 +232,13 @@ This process draws inspiration from:
209232
test plan requirements, graduation criteria, production readiness.
210233
- [Rust RFCs](https://github.com/rust-lang/rfcs) — PR-based workflow, emphasis
211234
on motivation and teaching, prior art section.
235+
- [Architecture Decision Records (ADRs)](https://adr.github.io/) — structured
236+
decision documentation with context, alternatives, and consequences. The JEP
237+
template adopts the ADR pattern for individual design decisions.
238+
- [GitHub SpecKit](https://github.com/github/spec-kit) — spec-driven development
239+
methodology with structured templates and agent-friendly document conventions.
240+
The JEP template adopts SpecKit's practice of marking sections as mandatory or
241+
optional and structuring documents for machine readability.
212242

213243
## Copyright
214244

jeps/JEP-NNNN-template.md

Lines changed: 79 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
- Hardware-related proposals must address the Hardware Considerations section.
1111
- Protocol/API changes must include backward compatibility analysis.
1212
- Write as if teaching the feature to a new Jumpstarter contributor.
13+
- Each design decision should document alternatives considered and rationale
14+
(following the ADR pattern used in the project).
15+
- Sections marked (mandatory) must be filled in. Sections marked (optional)
16+
may be omitted if not applicable.
1317
-->
1418

1519
| Field | Value |
@@ -28,14 +32,14 @@
2832

2933
---
3034

31-
## Abstract
35+
## Abstract *(mandatory)*
3236

3337
<!--
3438
One paragraph (3-5 sentences) summarizing the proposal. A reader should be
3539
able to decide whether this JEP is relevant to them from the abstract alone.
3640
-->
3741

38-
## Motivation
42+
## Motivation *(mandatory)*
3943

4044
<!--
4145
Why is this change needed? What problem does it solve? Who benefits?
@@ -48,7 +52,7 @@
4852
Do not describe the solution here — that belongs in the Proposal section.
4953
-->
5054

51-
### User Stories (Optional)
55+
### User Stories *(optional)*
5256

5357
<!--
5458
Describe 2-3 concrete scenarios from the perspective of a Jumpstarter user.
@@ -59,7 +63,7 @@
5963
specific device is offline.
6064
-->
6165

62-
## Proposal
66+
## Proposal *(mandatory)*
6367

6468
<!--
6569
Explain the proposal as if it were already implemented and you are teaching
@@ -76,7 +80,7 @@
7680
someone could begin implementation from it.
7781
-->
7882

79-
### API / Protocol Changes (if applicable)
83+
### API / Protocol Changes *(if applicable)*
8084

8185
<!--
8286
If this JEP modifies gRPC .proto definitions, operator CRDs, driver
@@ -87,7 +91,7 @@
8791
- For breaking changes, describe the migration path.
8892
-->
8993

90-
### Hardware Considerations (if applicable)
94+
### Hardware Considerations *(if applicable)*
9195

9296
<!--
9397
Jumpstarter operates at the hardware-software boundary. If this proposal
@@ -101,7 +105,38 @@
101105
- Are there power/thermal/physical safety implications?
102106
-->
103107

104-
## Design Details
108+
## Design Decisions *(mandatory for Standards Track)*
109+
110+
<!--
111+
Document each significant design decision using the pattern below.
112+
This follows the Architecture Decision Record (ADR) convention used
113+
elsewhere in the project (see python/docs/source/contributing/adr/).
114+
115+
For each decision, state what was decided, what alternatives were
116+
considered, and why the chosen approach was preferred. This section
117+
is the most important part of the JEP for long-term project memory —
118+
future contributors will refer to it to understand *why* things are
119+
the way they are.
120+
-->
121+
122+
### DD-1: *Decision title*
123+
124+
**Alternatives considered:**
125+
126+
1. **Option A** — Brief description.
127+
2. **Option B** — Brief description.
128+
129+
**Decision:** Option A.
130+
131+
**Rationale:** Explain why this option was chosen over the alternatives.
132+
Reference specific project constraints, prior art, or technical tradeoffs.
133+
134+
<!--
135+
Add more DD-N subsections as needed. Each decision should be
136+
independently understandable.
137+
-->
138+
139+
## Design Details *(mandatory for Standards Track)*
105140

106141
<!--
107142
The technical heart of the JEP. Cover:
@@ -116,7 +151,7 @@
116151
interactions.
117152
-->
118153

119-
## Test Plan
154+
## Test Plan *(mandatory for Standards Track)*
120155

121156
<!--
122157
How will this feature be tested? Jumpstarter's HiL nature means pure unit
@@ -137,7 +172,7 @@
137172
the implementation?
138173
-->
139174

140-
## Graduation Criteria (Optional)
175+
## Graduation Criteria *(optional)*
141176

142177
<!--
143178
For features that should be introduced incrementally (e.g., behind a
@@ -152,7 +187,7 @@
152187
- How long should the feature be in experimental before promotion?
153188
-->
154189

155-
## Backward Compatibility
190+
## Backward Compatibility *(mandatory for Standards Track)*
156191

157192
<!--
158193
- Does this change break existing users, drivers, exporters, or deployments?
@@ -162,7 +197,31 @@
162197
- For protocol changes: is the wire format backward compatible?
163198
-->
164199

165-
## Rejected Alternatives
200+
## Consequences *(mandatory)*
201+
202+
<!--
203+
Summarize the expected outcomes of this proposal, following ADR convention.
204+
-->
205+
206+
### Positive
207+
208+
<!--
209+
What benefits does this proposal deliver? Be specific.
210+
-->
211+
212+
### Negative
213+
214+
<!--
215+
What downsides or costs does this proposal introduce? Be honest.
216+
-->
217+
218+
### Risks *(optional)*
219+
220+
<!--
221+
What could go wrong? What assumptions might prove incorrect?
222+
-->
223+
224+
## Rejected Alternatives *(mandatory)*
166225

167226
<!--
168227
What other designs were considered? Why were they not chosen?
@@ -171,9 +230,15 @@
171230
explored and helps future contributors understand why the chosen approach
172231
was preferred. Include brief descriptions of alternatives and the reasons
173232
they were rejected.
233+
234+
Note: If you used the Design Decisions section above with alternatives
235+
for each decision, you may keep this section brief and refer back to
236+
those decisions. Use this section for higher-level alternatives that
237+
don't fit into individual design decisions (e.g., "we considered not
238+
doing this at all").
174239
-->
175240

176-
## Prior Art (Optional)
241+
## Prior Art *(optional)*
177242

178243
<!--
179244
Are similar features present in other HiL frameworks, testing tools, or
@@ -186,15 +251,15 @@
186251
- Remote access solutions (if relevant)
187252
-->
188253

189-
## Unresolved Questions
254+
## Unresolved Questions *(optional)*
190255

191256
<!--
192257
What aspects of the design are still open? List specific questions that
193258
should be resolved during the JEP review process. Questions that can wait
194259
until implementation should be noted as such.
195260
-->
196261

197-
## Future Possibilities (Optional)
262+
## Future Possibilities *(optional)*
198263

199264
<!--
200265
What natural extensions or follow-up work does this proposal enable? This

jeps/README.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ For the full process definition, see [JEP-0000](JEP-0000-jep-process.md).
4242
|------|-------|--------|-----------|
4343
| *none yet* | | | |
4444

45+
## Related: Architecture Decision Records (ADRs)
46+
47+
For technical decisions scoped to a single component or driver (e.g., choosing a
48+
control interface for a new driver), use an Architecture Decision Record instead
49+
of a JEP. ADRs live in `python/docs/source/contributing/adr/` and are submitted
50+
alongside the implementation PR. See [JEP-0000](JEP-0000-jep-process.md) for
51+
guidance on when to use a JEP vs an ADR.
52+
4553
## Status Key
4654

4755
| Status | Meaning |
@@ -56,3 +64,50 @@ For the full process definition, see [JEP-0000](JEP-0000-jep-process.md).
5664
| Deferred | Sound but not a current priority |
5765
| Withdrawn | Author voluntarily withdrew |
5866
| Superseded | Replaced by a newer JEP |
67+
68+
## For AI Agents
69+
70+
This section provides conventions for AI agents working with JEPs.
71+
72+
### Document structure
73+
74+
JEP files are Markdown documents with a metadata table at the top. The metadata
75+
table uses pipe-delimited rows with bold field names. Required fields:
76+
`JEP`, `Title`, `Author(s)`, `Status`, `Type`, `Created`.
77+
78+
### Section markers
79+
80+
Sections in the JEP template are marked `*(mandatory)*`, `*(optional)*`, or
81+
`*(mandatory for Standards Track)*`. When helping an author draft a JEP, ensure
82+
all mandatory sections are filled in. Optional sections may be omitted entirely.
83+
84+
### Design Decisions format
85+
86+
Each design decision uses a numbered `DD-N` subsection under `## Design Decisions`
87+
with the following structure:
88+
89+
```text
90+
### DD-N: Decision title
91+
92+
**Alternatives considered:**
93+
94+
1. **Option A** — Description.
95+
2. **Option B** — Description.
96+
97+
**Decision:** Chosen option.
98+
99+
**Rationale:** Why this option was chosen.
100+
```
101+
102+
This matches the ADR convention used elsewhere in the project (see
103+
`python/docs/source/contributing/adr/`).
104+
105+
### File naming
106+
107+
JEP files are named `JEP-NNNN-short-title.md` where `NNNN` is the PR number
108+
(zero-padded to 4 digits). The template file is `JEP-NNNN-template.md`.
109+
110+
### JEP numbering
111+
112+
The JEP number is the pull request number. JEP-0000 through JEP-0009 are
113+
reserved for process and meta-JEPs.

0 commit comments

Comments
 (0)