Skip to content

Commit 1102304

Browse files
stefanvbsipoczjarrodmillman
authored
Clarify the SPEC process: scope, procedure (#395)
This PR aims to clarify the SPEC process to make it very clear to new contributors what the procedures are for submitting a SPEC, as well is what is, and is not, in scope for a SPEC. /cc @scientific-python/spec-steering-committee --------- Co-authored-by: Brigitta Sipőcz <b.sipocz@gmail.com> Co-authored-by: Jarrod Millman <jarrod.millman@gmail.com>
1 parent 73a3de4 commit 1102304

4 files changed

Lines changed: 117 additions & 60 deletions

File tree

_index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ Community discussions take place on the
1414
[`SPECs` Discourse forum](https://discuss.scientific-python.org/c/specs/6).
1515
SPEC development takes place in the [SPEC repository](https://github.com/scientific-python/specs).
1616

17+
If you want to **contribute a SPEC**, start by reading [SPEC Purpose and Process](/specs/purpose-and-process).
18+
Core projects may also want to [endorse a SPEC](/specs/purpose-and-process/#endorsing-a-spec).
1719
Contributors must adhere to our [code of conduct](https://scientific-python.org/code_of_conduct/).

core-projects/_index.md

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,7 @@ The 3-clause (also called "modified" or "new") BSD license is by far the most co
7171

7272
### How does a Core Project endorse a SPEC?
7373

74-
Core Projects use their project-specific discussion and decision making mechanisms to decide whether to support a SPEC.
75-
Certain SPECs may, for example, require Core Projects to create their _own_ enhancement
76-
proposals to expand on implementation details.
77-
78-
Once a Core Project decides to endorse a SPEC, they add their project
79-
name to the `endorsed-by` field in the SPEC header via a pull request against
80-
the [scientific-python/specs](https://github.com/scientific-python/specs)
81-
repository.
74+
See [purpose and process](/specs/purpose-and-process/#endorsing-a-spec).
8275

8376
### How many Core Projects should there be?
8477

purpose-and-process/_index.md

Lines changed: 94 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,36 @@ will benefit the ecosystem as a whole.
3030

3131
Projects decide for themselves whether to adopt any given SPEC—often, this
3232
would be through team consensus.
33-
A SPEC may not be a good fit for every single project, and thus there is no
34-
expectation that all SPECs must be adopted by all projects.
35-
That said, SPECs serve their purpose through being adopted by
36-
several projects—and their authority stems from the extent to which they are.
33+
They may look towards endorsements by [Core Projects](/specs/core-projects) as a signal to help them decide.
34+
A SPEC may not be a good fit for a project, and thus there is no
35+
expectation that all SPECs must be adopted by all projects (in fact, even Core Projects that endorse a SPEC—i.e., signaling that they think it is a good idea—may choose not to adopt it themselves).
36+
Still, SPECs best serve their purpose of communicating cross-project concepts when adopted by numerous projects—and their authority stems from the extent to which they are.
3737

3838
Participants in the SPEC process must adhere to our
3939
[Code of Conduct](https://scientific-python.org/code_of_conduct/).
4040

41+
## What is a SPEC?
42+
43+
A SPEC (Scientific Python Ecosystem Coordination) is a document that captures an idea applicable to multiple projects.
44+
It is the product of discussions with developers across the ecosystem, and captures one of the following types of narratives:
45+
46+
- **Recommendation:** We recommend that you do Y (e.g., [SPEC 8 — Securing the Release Process](https://scientific-python.org/specs/spec-0008/)).
47+
- **Guideline:** Some projects may need to do Y. If you do Y, we recommend that you do it as follows (e.g., [SPEC 1 — Lazy Loading](https://scientific-python.org/specs/spec-0001/)).
48+
- **Memorandum:** If you do Y, you should be aware of the following (we don't have any such advisories yet).
49+
50+
{{< admonition important >}}
51+
**What a SPEC is not**
52+
53+
SPECs are _not_ meant to be extensive technical documents that cover a large amount of detail.
54+
They typically _summarize_ an idea, referring to external sources, such as GitHub repositories or websites, for further detail.
55+
56+
If you find yourself wanting to _disseminate information_ across the
57+
ecosystem, it may be better to write a blog post on
58+
https://blog.scientific-python.org or to contribute to an existing
59+
piece of documentation, such as https://learn.scientific-python.org/development/.
60+
A blog post is also a good way to generate initial engagement around an idea that is not yet mature enough, or within scope, to become a SPEC.
61+
{{< /admonition >}}
62+
4163
### Key Terms
4264

4365
Scientific Python Ecosystem
@@ -113,28 +135,27 @@ style START fill:#FFFFFF, stroke:#FFFFFF;
113135
```
114136
<!-- prettier-ignore-end -->
115137

116-
The authors starts by _proposing_ a SPEC, as outlined in [New SPEC
117-
Proposals](#new-spec-proposals).
118-
The decision to **accept** a SPEC is made by the Steering Committee,
119-
at which point it is added to the main branch of the [SPEC
120-
repository](https://github.com/scientific-python/specs), clearly
121-
labeled as a draft.
122-
Proposed SPECs are accepted once (a) there is agreement that the SPEC
123-
concept is applicable to the ecosystem, (b) a draft pull request is
124-
written to clearly explain the area of common concern and a general
125-
approach to a shared solution, and (c) there are contributors (from at least two Core
126-
Projects) interested in working on the new SPEC and in championing it
127-
to their projects as well as the larger community.
128-
Additional details may be found in [Steering Committee
129-
documentation](/specs/steering-committee).
138+
The authors start by _proposing_ a SPEC idea, as outlined in [New
139+
SPEC Proposals](#new-spec-proposals)—please read that section carefully before
140+
proposing a new SPEC.
141+
142+
The decision to **accept** (and number) a SPEC is made by the Steering
143+
Committee, once there is agreement that the SPEC concept is
144+
applicable, and it has been confirmed that there are at least two
145+
authors from two different projects interested in working on the new
146+
SPEC and championing it to various projects.
147+
At this point, the authors may submit a first version of the SPEC as a
148+
PR to the [SPEC
149+
repository](https://github.com/scientific-python/specs).
150+
This version may be merged to the main branch whenever the authors
151+
consider it ready, clearly labeled as a draft (see `is-draft` header
152+
field).
130153

131154
In the accepted phase, the authors _develop_ their SPEC, in
132155
consultation with Core Projects and interested community members.
133-
This is done in a collabortive and iterative process, focused on
156+
This is done in a collaborative and iterative process, focused on
134157
ensuring that the SPEC is broadly applicable and likely to be widely
135158
adopted.
136-
The intent is that most SPECs will have authors from several projects,
137-
including Core Projects.
138159
Once authors consider their SPEC complete, they **publish** it,
139160
removing its draft status.
140161

@@ -237,45 +258,79 @@ content = '''
237258

238259
### New SPEC Proposals
239260

261+
<!-- This is a focused distillation of #decision-points for authors. -->
262+
240263
A good SPEC proposal focuses on a single key recommendation or idea
241-
for coordinating projects in the scientific Python ecosystem.
242-
Before proposing a SPEC, we highly recommended that you first **vet
264+
for coordinating projects in the scientific Python ecosystem, as
265+
discussed under [What is a SPEC?](#what-is-a-spec).
266+
267+
As a SPEC moves through the process, it goes through different states,
268+
as discussed under [Decision Points](#decision-points) and summarized
269+
here.
270+
271+
**Before proposing** a SPEC, we highly recommended that you first **vet
243272
the idea** by doing one or more of the following:
244273

245-
1. discuss the idea with at least one project in the ecosystem,
246-
2. discuss the idea with at least one other member of the ecosystem, or
247-
3. create a minimal, proof of concept prototype.
274+
1. Discuss the idea with at least one project in the ecosystem—for example, by posting to a project mailing list, attending a community call, or by having a birds-of-a-feather discussion at a conference like SciPy;
275+
2. discuss the idea with at least one other member of a [Core Project](/specs/core-projects); or
276+
3. if it is a technical idea, create a minimal proof of concept.
277+
278+
**Before submitting** a proposed SPEC:
248279

249-
Before a proposed SPEC can be accepted:
280+
1. Ensure that the SPEC has at least two authors from two different projects,
281+
to show cross-project interest.
250282

251-
1. The idea must be proposed on the discussion forum under the [`SPECS/Ideas`
283+
2. The **idea must be proposed** on the discussion forum under the [`SPECS/Ideas`
252284
topic](https://discuss.scientific-python.org/c/specs/ideas/9).
253-
2. A draft SPEC document must be submitted via pull request to the [SPEC repository](https://github.com/scientific-python/specs).
285+
Please list your co-authors.
286+
287+
If the SPEC committee considers the idea suitable for a SPEC, the spec
288+
is **approved** and a number is allocated.
289+
290+
At this point, you should **draft your SPEC document and submit it**
291+
via pull request to the [SPEC repository](https://github.com/scientific-python/specs).
254292

255293
Use the `quickstart.py` script to create the new SPEC document.
256294
Located at the top-level of the [SPEC
257295
repository](https://github.com/scientific-python/specs), the script
258296
will ask you a few questions[^newspec] and then create a new file
259297
appropriately named with a basic template for you to complete (e.g.,
260298
`spec-0000/index.md`).
261-
Once the SPEC is in reasonable shape, file a pull request against the
299+
Leave the `draft` field set to `true` and the `endorsed-by` field empty.
300+
Once the SPEC is in readable shape, file a pull request against the
262301
[SPEC repository](https://github.com/scientific-python/specs).
302+
Let the SPEC committee know when you are ready for your PR to be
303+
merged.
304+
Once they do so, the SPEC will appear in draft form at
305+
<https://scientific-python.org/specs>.
306+
307+
Your job now is to refine the SPEC iteratively and collaboratively
308+
with the community, using follow-up PRs.
309+
You should focus on ensuring that the SPEC is broadly applicable and
310+
likely to be widely adopted.
311+
Once you consider your SPEC complete, **publish** it by making a PR to
312+
remove its draft status.
313+
314+
## Endorsing a SPEC
315+
316+
<!-- This is a focused distillation of #decision-points for Core Projects. -->
317+
318+
[Core Projects](/specs/core-projects) may signal their approval of a SPEC by _endorsing_ it.
319+
This endorsement makes it more likely that other projects will _adopt_ it.
320+
Endorsing a SPEC does _not_, however, mean that a Core Project needs to _adopt_ a SPEC, although it typically would if feasible.
321+
Core Projects use their project-specific discussion and decision making mechanisms to decide whether to endorse a SPEC.
322+
323+
Once a Core Project decides to endorse a SPEC, they add their project
324+
name to the `endorsed-by` field in the SPEC header via a pull request against
325+
the [scientific-python/specs](https://github.com/scientific-python/specs)
326+
repository.
263327

264328
## Notes
265329

266330
[^newspec]:
267-
When asked to enter the SPEC number, choose the next available number that
268-
has not yet been used.
269-
Before the SPEC is merged, the Steering Committee may ask you to change the SPEC number so
270-
that it doesn't conflict with another pull request.
271-
If so, just rename the file as appropriate and update the SPEC number in the
272-
`title` field of the SPEC header.
273-
274331
The script currently only supports adding one author.
275332
If you need to add additional authors, just edit the text file.
276333

277334
Additional files associated with a SPEC document may be kept in the directory
278335
containing the SPEC.
279336
For example, files associated with `spec-0000/index.md` are in `spec-0000/`.
280-
281-
Leave the `draft` field set to `true` and the `endorsed-by` field empty.

steering-committee/_index.md

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,26 @@ to consensus-seeking and voting.
4646

4747
### How are SPECs accepted?
4848

49-
To accept a SPEC (i.e., assigning it a SPEC number, marking its discussion
50-
`Accepted`, and merging the pull request) requires two members of the Steering
51-
Committee to approve and no members objecting.
52-
Since the role of the Steering Committee is mainly to ensure that SPEC proposals are
53-
appropriate,[^accept] objections should be rare.
49+
<!-- This is a focused distillation of purpose-and-process#decision-points for the SPEC committee. -->
50+
51+
Also refer to [SPEC Purpose and Process: New
52+
Proposals](/specs/purpose-and-process/#new-spec-proposals), a summary
53+
of steps for SPEC authors.
54+
55+
To accept a SPEC requires two members of the Steering Committee to
56+
approve and no members objecting.
57+
58+
Verify that:
59+
60+
1. The SPEC has two authors from two projects; and
61+
2. that the idea is widely applicable to the ecosystem (i.e., it makes sense to
62+
write this up as a SPEC).
63+
64+
Assign the SPEC a number, and ask the authors to submit a draft PR
65+
with a preliminary write-up.
66+
67+
The role of the Steering Committee is mainly to ensure that SPEC
68+
proposals are appropriate, so objections should be rare.
5469

5570
### How is the SPEC process changed?
5671

@@ -102,11 +117,3 @@ then they should
102117
[Steering Committee Team](https://github.com/orgs/scientific-python/teams/spec-steering-committee/members), and
103118
(3) be removed from the
104119
[Steering Committee Discourse Group](https://discuss.scientific-python.org/g/spec-steering-committee).
105-
106-
## Notes
107-
108-
[^accept]:
109-
Proposed SPECs are accepted once (a) the draft is written to clearly explain the area of
110-
common concern and a general approach to a shared solution and (b) there
111-
are contributors (from at least two Core Projects) interested in working on the new SPEC
112-
and in championing it to their projects as well as the larger community.

0 commit comments

Comments
 (0)