Skip to content

Commit 199022f

Browse files
committed
feat: Clarify and Simplify SHIP Lifecycle
This change proposes to merge the `rejected` and `withdrawn` phases with a `declined` phase. This phase preserves the intent of a feature that the community decided to not implement. To communicate how the lifecycle works, a MermaidJS flowchart has been added, and the markdown content has been restructured to include sub-headers. The `replaced` state has also been updated to communicate that a specific feature has been deprecated or removed. Deprecations and removals require SHIP proposals to ensure the end community is well informed and has sufficient time to stop using the given functionality. Finally, this change also adds a requirement that `implementable` proposals should create corresponding feature tracker issues in GitHub, with sub-issues that identify specific tasks that implement the feature. Tracker issues broadcast to the community work that needs to be done and document the progress of a feature. These tracker issues also encourage contributions from new community members. Assisted-by: Cursor Signed-off-by: Adam Kaplan <adam.kaplan@redhat.com>
1 parent 5cf5226 commit 199022f

File tree

2 files changed

+76
-23
lines changed

2 files changed

+76
-23
lines changed

ships/README.md

Lines changed: 75 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,78 @@ A Shipwright Improvement Proposal (SHIP) is a way to propose, communicate, and c
1717

1818
## SHIP Lifecycle
1919

20-
* **Draft**: SHIPs start their lifecycle as a pull request, copying the proposal template.
21-
They graduate to the _provisional_ or _implementable_ phase when the pull request is merged.
22-
* **Provisional**: SHIPs that reach this phase focus on the _why_.
23-
The objective is to agree that an idea addresses a need for the community.
24-
The summary, motivation, and goals should be clearly articulated.
25-
Drawbacks and alternatives may not need to be identified at this phase, though the community may ask that these be included during review.
26-
Merging a SHIP as provisional does not imply that the community will implement a feature within any reasonable timeframe.
27-
* **Implementable**: SHIPs that reach this phase focus on the _how_.
28-
To graduate to this phase, the proposal needs to provide details on how the feature will be implemented and any new APIs that are introduced.
29-
The proposal must also highlight the risks, drawbacks, and alternatives considered for this feature.
30-
Test and release plans do not need to be fully articulated, though the community may suggest ways to test or release the feature at this stage.
31-
Implementable proposals indicate that the community agrees to a feature and related code can be merged.
32-
* **Implemented**: SHIPs that reach this phase focus on _what_ and _when_.
33-
At this point the feature may have related code pull requests that are under review or merged.
34-
Implemented proposals should have test and release plans identified.
35-
At this point the propsosal is considered "done."
36-
37-
Other phases in the proposal lifecycle can be:
38-
39-
* **Rejected**: Used if a provisional or implementable proposal is later rejected by the community.
40-
* **Withdrawn**: Used if the author of a provisional or implementable proposal later withdraws it from consideration.
41-
* **Replaced**: Used if a subsequent proposal is used to implement the same set of functionality.
20+
```mermaid
21+
flowchart LR
22+
Draft ---> Provisional
23+
Draft ---> Implementable
24+
Draft ---> Declined
25+
26+
Provisional ---> Implementable
27+
Provisional ---> Declined
28+
29+
Implementable ---> Implemented
30+
Implementable ---> Replaced
31+
32+
Implemented -.-> Replaced
33+
```
34+
35+
### 0. Draft
36+
37+
SHIPs start their lifecycle as a pull request, copying the proposal template. They graduate to the
38+
_provisional_ or _implementable_ phase when the pull request is merged.
39+
40+
### 1. Provisional
41+
42+
SHIPs that reach this phase focus on the _why_:
43+
44+
- The objective is to agree that an idea addresses a need for the community.
45+
- The summary, motivation, and goals should be clearly articulated.
46+
- Drawbacks and alternatives may not need to be identified at this phase, though the community may
47+
ask that these be included during review.
48+
- Merging a SHIP as provisional does not imply that the community will implement a feature within
49+
any reasonable timeframe.
50+
51+
### 2. Implementable
52+
53+
SHIPs that reach this phase focus on the _how_:
54+
55+
- The proposal needs to provide details on how the feature will be implemented and any new APIs
56+
that are introduced.
57+
- The proposal must also highlight the risks, drawbacks, and alternatives considered for this feature.
58+
- Test and release plans do not need to be fully articulated, though the community may suggest ways
59+
to test or release the feature at this stage.
60+
61+
Implementable proposals indicate that the community agrees to a feature and related code can be
62+
merged. Once an implementable proposal is accepted, Shipwright project maintainers should do the
63+
following:
64+
65+
- Create a "feature tracker" GitHub issue in the `community` repository, documenting the desired
66+
functionality and providing links to the relevant SHIP proposal. Feature trackers should link to
67+
sub-issues that target tasks in specific code repositories. See [community#282](https://github.com/shipwright-io/community/issues/282)
68+
for an example feature tracker.
69+
- Add the feature tracker to the project [Roadmap], which communicates that this
70+
approved is approved and seeking contributions.
71+
72+
### 3. Implemented
73+
74+
Implemented SHIPs that reach this phase focus on _what_ and _when_:
75+
76+
- All code and documentation related to the feature should be merged.
77+
- All contributions should be linked to specific releases thorough associated GitHub issues and
78+
pull requests.
79+
- Implemented proposals should have test and release plans identified.
80+
81+
At this point the propsosal is considered "done." Related feature trackers should be closed in
82+
GitHub and the feature should be marked "done" on the [Roadmap]. Completed features can be removed
83+
frm the [Roadmap] at the discretion of project maintainers.
84+
85+
### Other Lifecycle Phases
86+
87+
* **Declined**: Used if the community decides to not implement a feature at any phase of its
88+
lifecycle (outside of `implemented`). `implementable` proposals with code contributions should
89+
not move to the `declined` state.
90+
* **Replaced**: Used if a subsequent proposal is used to implement the same set of functionality,
91+
or is used to deprecate and remove this feature.
4292

4393
## FAQs
4494

@@ -59,3 +109,6 @@ You do not have to complete every section of the proposal template - different s
59109
**My FAQ isn't answered here!**
60110

61111
Open an issue and ask or even better open a PR with a question and proposed answer.
112+
113+
114+
[Roadmap]: ./../ROADMAP.md

ships/guidelines/ship-template.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ approvers:
1616
- "@oscardoe"
1717
creation-date: yyyy-mm-dd
1818
last-updated: yyyy-mm-dd
19-
status: provisional|implementable|implemented|rejected|withdrawn|replaced
19+
status: provisional|implementable|implemented|declined|replaced
2020
see-also:
2121
- "/docs/proposals/this-other-neat-thing.md"
2222
replaces:

0 commit comments

Comments
 (0)