Skip to content

Commit 63d050c

Browse files
committed
Clarify process and restructure documentation
Making everything reachable from the <./README.rst> file directly. Also be very clear that the PR author has to invoke the review process after the discussion has ended, and has to do so by notifying the secretary (currently @nomeata). Authors no longer have to handle labels, as they cannot do that anyways.
1 parent 4cd3771 commit 63d050c

File tree

4 files changed

+296
-341
lines changed

4 files changed

+296
-341
lines changed

README.rst

Lines changed: 225 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,44 @@ GHC Proposals
33

44
This repository contains specifications for proposed changes to the
55
`Glasgow Haskell Compiler <https://www.haskell.org/ghc>`_.
6-
The purpose of the GHC `proposal process <./proposal-submission.rst>`_, and of
6+
The purpose of the GHC proposal process and of
77
the GHC Steering Committee, is to broaden the discussion of the evolution of
88
GHC.
99

10-
Quick links
11-
-----------
10+
What is the timeline of a propsoal?
11+
-----------------------------------
1212

13-
* `Active proposals list <https://github.com/ghc-proposals/ghc-proposals/pulls>`_
14-
* `All accepted proposals <https://github.com/ghc-proposals/ghc-proposals/pulls?q=label%3AAccepted>`_
15-
* `Proposal submission process <./proposal-submission.rst>`_
16-
* `Steering committee description <./steering-committee.rst>`_
13+
1. A new proposal is drafted.
14+
15+
`What is a proposal? <#what-is-a-proposal>`_ • `How should a proposal look like? <#how-should-a-proposal-look-like>`_
16+
17+
2. The author submits the proposal for discussion as a pull request against this repository.
18+
19+
`How to submit a proposal? <#how-to-submit-a-proposal>`_
20+
21+
3. The wider community discusses the proposal in the commit section of the pull
22+
request, while the author refines the proposal. This phase lasts as long as necessary.
23+
24+
`Discussion goals <#discussion-goals>`_ •
25+
`How to comment on a proposal? <#how-to-comment-on-a-proposal>`_ •
26+
`List of proposals under discussion <https://github.com/ghc-proposals/ghc-proposals/pulls?q=is%3Aopen+is%3Apr+label%3A%22Under+discussion%22>`_
27+
28+
4. Eventually *the proposal author* brings the proposal before the committee for review.
29+
30+
`How to bring a proposal before the committee? <#how-to-bring-a-proposal-before-the-committee>`_ •
31+
`Who is the committee? <#who-is-the-committee>`_
32+
33+
5. One committee member steps up as a shephard and generates consensus within the commitee within four weeks or five weeks.
34+
35+
`Committee process <#committee-process>`_ •
36+
`Review criteria <#review-criteria>`_ •
37+
`List of proposals under review <https://github.com/ghc-proposals/ghc-proposals/pulls?q=is%3Aopen+is%3Apr+label%3A%22Pending+committee+review%22>`_
38+
39+
6. Eventually, the committee rejects a proposal, or passes it back to the author for review, or accepts it.
40+
41+
`List of accepted proposals <https://github.com/ghc-proposals/ghc-proposals/pulls?q=label%3AAccepted>`_
42+
43+
Do not hesitate to `contact <#questions>`_ us if you have questions.
1744

1845
What is a proposal?
1946
-------------------
@@ -35,18 +62,68 @@ include,
3562
`type-indexed <https://ghc.haskell.org/trac/ghc/wiki/Typeable>`_
3663
``Typeable`` representations)
3764

65+
How should a proposal look like?
66+
--------------------------------
67+
68+
Each proposal document must follow the following outline. A template is provided in `proposal template <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0000-template.rst>`_.
69+
70+
a. *Motivation*: Give a strong reason for why the community needs this change. Describe the use case as clearly as possible and give at least one concrete example. Explain how the status quo is insufficient or not ideal.
71+
72+
b. *Proposed Change Specification*: Specify the change in precise and comprehensive yet concise language. Your specification may include,
73+
74+
- grammar and semantics of any new syntactic constructs
75+
- the types and semantics of any new library interfaces
76+
- how the proposed change addresses the original problem (perhaps referring back to the example)
77+
78+
c. *Effect and Interactions*. Detail how the proposed change addresses the original problem raised in the motivation. Detail how the proposed change interacts with existing language or compiler features. Think about what surprising or problematic interactions may occur.
79+
80+
d. *Costs and Drawbacks*. What are the drawbacks and costs to the community should this change be implemented? For example, does this make Haskell harder to learn for novice users? Does it make Haskell code harder to read or reason about? Will the implementation be complex or invasive?
81+
82+
e. *Alternatives*: List alternatives to your proposed change and discuss why they are insufficient.
83+
84+
f. *Unresolved questions*: Explicitly list any remaining issues that remain in the conceptual design and specification. Be upfront and trust that the community will help. Please do not list *implementation* issues.
85+
86+
g. *Implementation Plan* (Optional): If accepted who will implement the change? It's quite okay to say "unknown" if you don't feel willing or able to carry out the implementation yourself.
87+
88+
89+
Note that proposals are written in `ReStructuredText
90+
<http://www.sphinx-doc.org/en/stable/rest.html>`_ rather than Markdown for its
91+
expressiveness and ease of integration into other GHC infrastructure. See the
92+
`GHC Users Guide
93+
<http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/editing-guide.html>`_
94+
for a brief introduction to ReStructuredText.
95+
96+
How to submit a proposal?
97+
-------------------------
98+
99+
If you are unfamiliar with GitHub, see the `detailed instructions <detailed-instructions.rst>`_.
100+
101+
1. Fork the ``ghc-proposals`` repository
102+
2. Setup your fork,
103+
104+
a. Create a branch for your proposal
105+
b. Start your proposal by copying ``proposals/0000-template.rst`` to a new file in the ``proposals/`` directory.
106+
107+
3. Write the proposal document, commit, and push to your ``ghc-proposals`` fork
108+
4. Submit your proposal for discussion by opening a pull request for your branch against the ``master`` branch of ``ghc-proposals/ghc-proposals``.
38109

39-
Where can I find proposals currently under discussion?
40-
------------------------------------------------------
110+
The pull request summary should include a brief description of your
111+
proposal, along with a link to the rendered view of proposal document
112+
in your branch. For instance,
41113

42-
Proposal discussion occurs on GitHub pull requests. See the
43-
`Pull Requests list <https://github.com/ghc-proposals/ghc-proposals/pulls>`_ for the list of
44-
active discussions. To see the text of the proposal click on the *Files Changed*
45-
tab on corresponding Pull Request page.
114+
.. code-block::
46115
116+
This is a proposal augmenting our existing `Typeable` mechanism with a
117+
variant, `Type.Reflection`, which provides a more strongly typed variant as
118+
originally described in [A Reflection on
119+
Types](http://research.microsoft.com/en-us/um/people/simonpj/papers/haskell-dynamic/index.htm)
120+
(Peyton Jones, _et al._ 2016).
47121
48-
Expectations from discussion participants
49-
-----------------------------------------
122+
[Rendered](https://github.com/bgamari/ghc-proposals/blob/typeable/proposals/0000-type-indexed-typeable.rst)
123+
124+
125+
Discussion goals
126+
----------------
50127

51128
Members of the Haskell community are warmly invited to offer feedback on
52129
proposals. Feedback ensures that a variety of perspectives are heard, that
@@ -61,8 +138,8 @@ design are uncovered. We particularly encourage the following types of feedback,
61138
- Motivation: Is the motivation reasonable?
62139

63140

64-
How do I comment on a proposal?
65-
-------------------------------
141+
How to comment on a proposal?
142+
-----------------------------
66143

67144
To comment on a proposal you need to be viewing the proposal's diff in "source
68145
diff" view. To switch to this view use the buttons on the top-right corner of
@@ -91,21 +168,141 @@ If you would like to register your approval or disapproval of a particular
91168
comment or proposal, feel free to use GitHub's "Reactions"
92169
`feature <https://help.github.com/articles/about-discussions-in-issues-and-pull-requests>`_.
93170

94-
How do I submit a proposal?
95-
---------------------------
171+
How to bring a proposal before the committee?
172+
---------------------------------------------
173+
174+
When the discussion has ebbed down and the author thinks the proposal is ready, he
175+
176+
1. reviews the discussion thread and ensure that the proposal text accounts for
177+
all salient points.
178+
2. adds a comment to the a pull request, briefly summarizing the major points raised
179+
during the discussion period and stating your belief that the proposal is
180+
ready for review. In this comment, tag the committee secretary (currently
181+
``@nomeata``).
182+
183+
`The secretary <#who-is-the-committee>`_, will then label the pull request with
184+
``Pending committee review`` and notify the committee. (If this does not happen
185+
within a day or two, please ping the secretary or the committee.)
186+
187+
Who is the committee
188+
--------------------
189+
190+
The current members of the GHC steering committe, who you can reach
191+
by email at ghc-steering-committee@haskell.org, are:
192+
193+
- Christopher Allen
194+
- Manuel M T Chakravarty
195+
- Simon Peyton-Jones (co-chair)
196+
- Simon Marlow (co-chair)
197+
- Atze Dijkstra
198+
- Richard Eisenberg
199+
- Iavor Diatchki
200+
- Joachim Breitner (@nomeata, secretary)
201+
- Ben Gamari
202+
203+
Members have terms of 3, 4, and 5 years.
204+
205+
Committee process
206+
-----------------
207+
208+
- Once the committee has been notified that a proposal is ready for
209+
decision, the committee is responsible for making the deadline known
210+
and notifying the wider community for comment.
211+
212+
- The committee organically determines which member who will oversee
213+
discussion of the proposal. If organic doesn’t work, our chair(s)
214+
assign the proposal to a member. Membership on the committee means
215+
that we will volunteer to handle proposals as appropriate. The
216+
committee member running this discussion process is the Shepherd of
217+
the proposal.
218+
219+
- The shepherd and the committee are *not* responsible for reading
220+
GitHub (or other) commentary. The proposal will be considered on its
221+
own. If the author wishes the committee to consider any commentary,
222+
that commentary should be incorporated into the proposal.
223+
Incorporation here means the information is summarized with
224+
attribution, *not* copied and pasted.
225+
226+
- Once a decision is requested, the shepherd has four weeks (in holiday
227+
times or near the ICFP deadline, 5) to generate consensus. If
228+
consensus is elusive, then we vote, with the Simons retaining veto
229+
power. Naturally, if consensus occurs in less time, then a decision
230+
can be rendered early.
231+
232+
- **If we say no:** the shepherd updates the proposal (not just the
233+
commentary) with the reasons for rejection. The pull request will be closed
234+
with label ``Rejected``.
235+
236+
The proposer is welcome
237+
to revise and try again, but the document should retain this original
238+
rejection information.
239+
240+
In the case that the proposed change has already been implemented in
241+
GHC, it will be reverted.
242+
243+
- **If we say maybe:** If during the Debate, the need for substantial changes
244+
does arise, we reject the proposal in its current state and it can go back to
245+
Development for revision.
246+
247+
- **If we say yes:** A Trac ticket is created, referring back to the
248+
proposal and commentary. (The shepherd is responsible for making sure
249+
this happens.) At this point, the proposal process is technically
250+
complete. It is outside the purview of the committee to implement,
251+
oversee implementation, attract implementors, etc.
252+
253+
254+
Review criteria
255+
---------------
256+
257+
Below are some criteria that the committee and the supporting GHC
258+
community will genearlly use to evaluate a proposal. Note that this list
259+
is merely set of a guidelines; it is the committee's job to weigh these
260+
and any other relevant considerations appropriately.
261+
262+
- *Utility and user demand*. What exactly is the problem that the
263+
feature solves? Is it an important problem, felt by many users, or is
264+
it very specialised? The whole point of a new feature is to be useful
265+
to people, so a good proposal will explain why this is so, and
266+
ideally offer evidence of some form.
267+
268+
- *Elegant and principled*. Haskell is a beautiful and principled
269+
langauge. It is tempting to pile feature upon feature (and GHC
270+
Haskell has quite a bit of that), but we should constantly and
271+
consciously strive for simplicity and elegance.
272+
273+
This is not always easy. Sometimes an important problem has lots of
274+
solutions, none of which have that "aha" feeling of "this is the Right
275+
Way to solve this"; in that case we might delay rather than forge ahead
276+
regardless.
277+
278+
- *Fit with the language.* If we just throw things into GHC
279+
willy-nilly, it will become a large ball of incoherent and
280+
inconsistent mud. We strive to add features that are consistent with
281+
the rest of the language.
282+
283+
- *Specification cost.* Does the benefit of the feature justify the
284+
extra complexity in the language specification? Does the new feature
285+
interact awkwardly with existing features, or does it enhance them?
286+
How easy is it for users to understand the new feature?
287+
288+
- *Implementation cost.* How hard is it to implement?
96289

97-
See the `Proposal Submission <proposal-submission.rst>`_ page.
290+
- *Maintainability.* Writing code is cheap; maintaining it is
291+
expensive. GHC is a very large piece of software, with a lifetime
292+
stretching over decades. It is tempting to think that if you propose
293+
a feature *and* offer a patch that implements it, then the
294+
implementation cost to GHC is zero and the patch should be accepted.
98295

99-
How are proposals decided upon?
100-
-------------------------------
296+
But in fact every new feature imposes a tax on future implementors, (a)
297+
to keep it working, and (b) to understand and manage its interactions
298+
with other new features. In the common case the original implementor of
299+
a feature moves on to other things after a few years, and this
300+
maintenance burden falls on others.
101301

102-
Proposals are ultimately evaluated by the `GHC Steering Committee
103-
<steering-committee.rst>`_ based upon a number of criteria and in light of
104-
community feedback.
105302

106-
Who do I contact if I have questions about the process?
107-
-------------------------------------------------------
303+
Questions?
304+
----------
108305

109306
Feel free to contact any of the members of the `GHC Steering Committee
110-
<steering-committee.rst>`_ with questions. `Email <https://wiki.haskell.org/Mailing_lists>`_
307+
<#who-is-the-committee>`_ with questions. `Email <https://wiki.haskell.org/Mailing_lists>`_
111308
and IRC (``#ghc`` on ``irc.freenode.net``) are both good ways of accomplishing this.

detailed-instructions.rst

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
Detailed instructions
2+
---------------------
3+
4+
The instructions below are intended for users with little experience using
5+
GitHub and git.
6+
7+
Forking repositories
8+
^^^^^^^^^^^^^^^^^^^^
9+
10+
1. Point your browser to the ``ghc-proposals/ghc-proposals`` repository
11+
2. Click on "Fork" (in the upper right corner)
12+
13+
See GitHub's `documentation <https://help.github.com/articles/fork-a-repo/>`_ if
14+
you are unfamiliar with GitHub's notion of "forking".
15+
16+
17+
Setting up your proposal fork
18+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19+
20+
1. Clone the repository to your computer.
21+
22+
a. You find the clone command after clicking on "Clone or Download" button.
23+
b. Open a terminal in the cloned directory.
24+
25+
2. Create a new branch for your proposal (say, ``$myproposal``). ::
26+
27+
git branch $myproposal
28+
git checkout $myproposal
29+
30+
3. Copy the template to a new file ::
31+
32+
cd proposals
33+
cp 0000-template.rst 0000-$myproposal.rst
34+
35+
4. Add the new file to the repository ::
36+
37+
git add 0000-$myproposal.rst
38+
39+
5. Commit the file with an informative commit message ::
40+
41+
git commit -a
42+
43+
6. Push your new branch to your GitHub repository ::
44+
45+
git push --set-upstream=origin $myproposal
46+
47+
You only need to do this once. For all future edits to your proposal you only
48+
need to commit and push. e.g. ``git commit -a; git push``.
49+
50+
51+
Moving your proposal to the Discussion phase
52+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
53+
54+
In order to submit your proposal to the discussion phase,
55+
56+
1. Navigate to the main page of your repository in your browser
57+
2. Select the branch containing your proposal in the "Branch:" drop-down
58+
3. Click on "Compare & pull request" button
59+
4. You will be brought to the "Open a pull request" page. Ensure that ``ghc-proposals/ghc-proposals`` is specifed as the "base fork" and that ``master`` is specified as the "base branch".
60+
5. Verify that the diff shown only contains your proposal document.
61+
6. In the "comment" box at the top of the page write a brief description of your proposal along with a link to the proposal document (link to the ``0000-$myproposal.rst`` file in your GitHub fork)
62+
63+
.. code-block::
64+
65+
This is a proposal augmenting our existing `Typeable` mechanism with a
66+
variant, `Type.Reflection`, which provides a more strongly typed variant as
67+
originally described in [A Reflection on
68+
Types](http://research.microsoft.com/en-us/um/people/simonpj/papers/haskell-dynamic/index.htm)
69+
(Peyton Jones, _et al._ 2016).
70+
71+
[Rendered](https://github.com/bgamari/ghc-proposals/blob/typeable/proposals/0000-type-indexed-typeable.rst)

0 commit comments

Comments
 (0)