Skip to content

Commit 27a6d3a

Browse files
authored
Merge pull request #97 from mattam82/rework-governance
Rework governance
2 parents ccabd66 + 35ecf10 commit 27a6d3a

File tree

9 files changed

+63
-41
lines changed

9 files changed

+63
-41
lines changed

data/governance.yml

+17-20
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
teams:
2-
- id: governance
3-
name: Governance
4-
description: The governance is ensured by the Core team and its Project Leader.
5-
subteams:
6-
- id: core
7-
name: Core
8-
description: The Core team is composed of co-opted, long-term and significant
9-
contributors to the Rocq project and its scientific underpinnings.
10-
It is responsible for the Rocq Prover and all official Rocq Projects.
11-
default_role: Core developer
12-
dev_meeting:
13-
date: Every Tuesday
14-
time: 4:00 PM CET (see wiki) Open to all
15-
calendar: https://github.com/coq/coq/wiki/Coq-Calls
16-
link: https://rendez-vous.renater.fr/coq-call
17-
notes: https://github.com/coq/coq/wiki/Coq-Calls
18-
members:
19-
- name: Matthieu Sozeau
20-
github: mattam82
21-
role: Project Leader
2+
- id: core
3+
name: Core Team
4+
description: The Core team and its Project Leader govern the project.
5+
The Core team is composed of co-opted, long-term and significant
6+
contributors to the Rocq project and its scientific underpinnings.
7+
It is responsible for the Rocq Prover and all official Rocq Projects.
8+
default_role: Core developer
9+
dev_meeting:
10+
date: Every Tuesday
11+
time: 4:00 PM CET (see wiki) Open to all
12+
calendar: https://github.com/coq/coq/wiki/Coq-Calls
13+
link: https://rendez-vous.renater.fr/coq-call
14+
notes: https://github.com/coq/coq/wiki/Coq-Calls
15+
members:
16+
- name: Matthieu Sozeau
17+
github: mattam82
18+
role: Project Leader
2219
- id: community
2320
name: Community
2421
description: The Community team is responsible for managing forums, social media, and community events.

data/pages/governance.md

+28-5
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,17 @@ It is the role of the Core team to resolve disputes that may arise in relation t
7575
the official Rocq Projects, specifically to ensure that
7676
these projects are able to progress in a coordinated way.
7777

78-
The Rocq Core team has a formal [voting process](https://github.com/coq/coq/wiki/Core-Team-Voting-Process)
78+
The Rocq Core team has a formal [voting process](#a1-voting-process)
7979
that can be used to resolve conflicts in case consensus cannot be reached.
8080

81-
Yearly, the Core Team designate a Project Leader among them, who is in charge of representing the
82-
Core Team and maintaing the long term vision of the Rocq Prover and official Rocq Projects.
83-
The Project Leader is tacitly reconducted each calendar year, unless a Core Team member asks for a vote
84-
or the Project Leader decides to resign. The current Project Leader is Matthieu Sozeau.
81+
The Core Team elects a Project Leader among them, who is in charge of representing the
82+
Core Team and maintaing the long term roadmap of the Rocq Prover and official Rocq Projects.
83+
The current Project Leader is Matthieu Sozeau. The Project Leader's mandate is for one year,
84+
renewable each year. The Project Leader is elected each calendar year on the anniversary date
85+
of the Rocq 9.0 release, or the date of the previous Project Leader's resignation. If there is
86+
a single candidate among the Core Team members, he or she is automatically elected. Otherwise
87+
the Core Team must proceed with a Condorcet vote on [Belenios](https://vote.belenios.org),
88+
with a two weeks notice and 72hr voting window.
8589

8690
It is the community's role to guide the decisions of the Core Team through active engagement,
8791
contributions, and discussions. To foster a healthy and growing community, the
@@ -91,6 +95,25 @@ It is anticipated that the Projects themselves will be self-managing and will
9195
resolve issues within their communities, without recourse to the Project Leader. Where
9296
the Project Leader needs to become involved, he/she will act as arbitrator.
9397

98+
#### A.1 Voting process
99+
100+
These rules were approved by the Coq Core Team on ???.
101+
102+
To resolve certain conflicting situations, the Core Team can proceed to vote on a binary decision,
103+
as an ultimate recourse in case consensus cannot be reached. The result binds the core team only
104+
and it is its responsibility to enforce the decision.
105+
106+
Each Core Team member has a vote (including the project leader).
107+
108+
- Abstention and delegation of a vote are allowed.
109+
- Majority of >= 2/3 of casted votes (in Q)
110+
- Votes take place online, anonymously, within a 72hr voting window, using the [Belenios](https://vote.belenios.org) system.
111+
- The vote must be announced with precise options 2 weeks in advance by the project leader.
112+
- Decision to take a vote is taken by the project leader, taking input from the core team members.
113+
- In case a majority of >= 2/3 cannot be reached, the project leader can decide to launch a second
114+
vote with the same announcement conditions and same rules except it is to be decided by > 50% majority.
115+
The project leader's vote is decisive in case of a tie in this second round.
116+
94117
### B. Delegates
95118

96119
The Project Leader may choose to delegate authority to others to manage a subproject and

src/global/url.ml

+4-2
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ let news = "/news"
9494
let news_post v = "/news/" ^ v
9595
let jobs = "/jobs"
9696
let donation = "/donation"
97-
let governance = "/rocq-team"
98-
let governance_team id = "/rocq-team/" ^ id
97+
let rocq_team id =
98+
match id with
99+
| None -> "/rocq-team"
100+
| Some id -> "/rocq-team/" ^ id
99101
let privacy_policy = "/policies/privacy-policy"
100102
let governance_policy = "/policies/governance"
101103
let code_of_conduct = "/policies/code-of-conduct"

src/rocqproverorg_frontend/components/footer.eml

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ let resources = [
2121
let ecosystem = [
2222
(Url.platform, "Platform");
2323
(Url.packages, "Packages");
24+
(Url.rocq_team None, "Rocq Team");
2425
(Url.community, "Community");
2526
(Url.consortium, "Consortium");
2627
(Url.events, "Events");
@@ -29,7 +30,6 @@ let ecosystem = [
2930
]
3031

3132
let policies = [
32-
(Url.governance, "Rocq Team");
3333
(Url.governance_policy, "Governance");
3434
(Url.privacy_policy, "Privacy");
3535
(Url.code_of_conduct, "Code of Conduct");

src/rocqproverorg_frontend/pages/about.eml

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ Layout.render
8989
All in all, more than 200 people have contributed to the development of Rocq.
9090
</p>
9191
<p>
92-
The <a href="<%s Url.governance %>">Rocq Team</a> is responsible for the development of
92+
The <a href="<%s Url.rocq_team None %>">Rocq Team</a> is responsible for the development of
9393
Rocq and integration of contributions. See <a href="/refman/changes.html">the changelog</a> for a detailed list of contributors in each release of Rocq and <a href="/refman/history.html">the history page in the reference manual</a> for the early history of Rocq.
9494
</p>
9595
<p>
@@ -106,7 +106,7 @@ Layout.render
106106
The new name, "the Rocq Prover", honors Inria Rocquencourt, the original site where the prover was developed.
107107
It also alludes to the mythological bird Roc (or Rokh), symbolizing strength and not so disconnected to a rooster.
108108
Furthermore, the name conveys a sense of solidity, and its unintended connection to music adds a pleasant resonance.
109-
The new name was chosen by the <a href="<%s Url.governance_team "governance" %>#Core">Core team</a> after a poll of the users, see
109+
The new name was chosen by the <a href="<%s Url.rocq_team (Some "governance") %>#Core">Core team</a> after a poll of the users, see
110110
<a href="https://coq.discourse.group/t/coq-community-survey-2022-results-part-iv-and-itp-paper-announcement/2001#renaming-coq-8">this page</a>
111111
for a detailed breakdown of the results.
112112
</p>

src/rocqproverorg_frontend/pages/governance.eml

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ let render_working_group (team : Data.Governance.team) member_label btn_class =
1010
</div>
1111
<p class="mb-2 text-white dark:text-dark-title"><%s team.description %></p>
1212
<div class="font-semibold my-6 text-white dark:text-dark-title"><%i count_members team %> <%s member_label %></div>
13-
<a href="<%s Url.governance_team team.id %>" class="btn-transparent <%s btn_class %>">
13+
<a href="<%s Url.rocq_team (Some team.id) %>" class="btn-transparent <%s btn_class %>">
1414
<span>Details</span>
1515
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24"
1616
stroke="currentColor">
@@ -24,7 +24,7 @@ let render_team_card (team: Data.Governance.team) member_label =
2424
<p class="text-title dark:text-dark-title text-lg mb-5"><%s team.name %></p>
2525
<p class="text-content dark:text-dark-content flex-grow text-base mb-5"><%s team.description %></p>
2626
<p class="text-content dark:text-dark-content text-base font-bold mb-2"><%i count_members team %> <%s member_label %></p>
27-
<a href="<%s Url.governance_team team.id %>" class="flex gap-2 items-center text-base text-primary hover:text-primary-dark hover:underline dark:text-dark-primary dark:hover:underline py-2">
27+
<a href="<%s Url.rocq_team (Some team.id) %>" class="flex gap-2 items-center text-base text-primary hover:text-primary-dark hover:underline dark:text-dark-primary dark:hover:underline py-2">
2828
Details
2929
<%s! Icons.arrow_right_circle "h-5 w-5" %>
3030
</a>

src/rocqproverorg_frontend/pages/governance_team.eml

+5-5
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ Layout.render
113113
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18">
114114
</path>
115115
</svg>
116-
<a href="<%s Url.governance %>" class="hover:underline">Back to Governance</a>
116+
<a href="<%s Url.rocq_team None %>" class="hover:underline">Back to Governance</a>
117117
</div>
118118
<div class="flex flex-col md:flex-row gap-8 mb-8 md:items-center">
119119
<div class="md:max-w-[70%]">
@@ -134,24 +134,24 @@ Layout.render
134134
</div>
135135
</div>
136136
<div class="bg-background dark:bg-dark-background">
137-
<div class="py-8">
137+
<div class="py-2">
138138
<div class="container-fluid">
139139
<% (match t.dev_meeting with | None -> () | Some dev_meeting -> %>
140-
<h2 class="font-bold gradient mb-6 mt-12 md:mt-16 text-4xl text-title dark:text-dark-title">Dev Meeting</h2>
140+
<h2 class="font-bold gradient mb-6 mt-6 md:mt-8 text-4xl text-title dark:text-dark-title">Dev Meeting</h2>
141141
<%s! render_dev_meeting dev_meeting "text-white mb-6" %>
142142
<% ); %>
143143

144144
<% (match List.length t.members with | 0 -> () | _ -> %>
145145
<div class="">
146-
<h2 class="font-bold gradient mb-6 mt-12 md:mt-16 text-4xl text-title dark:text-dark-title">People</h2>
146+
<h2 class="font-bold gradient mb-6 mt-6 md:mt-8 text-4xl text-title dark:text-dark-title">People</h2>
147147
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-12 mb-4">
148148
<%s! t.members |> List.map (fun (member : Data.Governance.Member.t) -> render_team_member ~default_role:t.default_role member ) |> String.concat "\n" %>
149149
</div>
150150
</div>
151151
<% ); %>
152152

153153
<% (match List.length t.subteams with | 0 -> () | _ -> %>
154-
<h2 class="font-bold gradient mb-6 mt-12 md:mt-16 text-4xl text-title dark:text-dark-title">Teams</h2>
154+
<h2 class="font-bold gradient mb-6 mt-6 md:mt-8 text-4xl text-title dark:text-dark-title">Teams</h2>
155155
<div class="flex flex-col gap-12">
156156
<% t.subteams |> List.iter (fun (team : Data.Governance.team) -> %>
157157
<%s! render_subteam team %>

src/rocqproverorg_web/lib/router.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ let page_routes _t =
5454
Dream.get Url.jobs Handler.jobs;
5555
Dream.get Url.privacy_policy Handler.privacy_policy;
5656
Dream.get Url.code_of_conduct Handler.code_of_conduct;
57-
Dream.get Url.governance Handler.governance;
58-
Dream.get (Url.governance_team ":id") Handler.governance_team;
57+
Dream.get (Url.rocq_team None) Handler.governance;
58+
Dream.get (Url.rocq_team (Some ":id")) Handler.governance_team;
5959
Dream.get Url.governance_policy Handler.governance_policy;
6060
Dream.get Url.papers Handler.papers;
6161
Dream.get (Url.paper ":id") Handler.paper;

src/rocqproverorg_web/lib/sitemap.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ let urls =
1818
Url.events;
1919
Url.exercises;
2020
Url.getting_started;
21-
Url.governance;
21+
Url.rocq_team None;
2222
Url.governance_policy;
2323
Url.index;
2424
Url.industrial_users;
@@ -43,7 +43,7 @@ let urlables =
4343
[
4444
Urlable (urls, to_url);
4545
Urlable (Changelog.all, fun r -> to_url @@ Url.changelog_entry r.slug);
46-
Urlable (Governance.teams, fun r -> to_url @@ Url.governance_team r.id);
46+
Urlable (Governance.teams, fun r -> to_url @@ Url.rocq_team (Some r.id));
4747
Urlable (News.all, fun r -> to_url @@ Url.news_post r.slug);
4848
Urlable (Release.all, fun r -> to_url @@ Url.release r.version);
4949
Urlable (Success_story.all, fun r -> to_url @@ Url.success_story r.slug);

0 commit comments

Comments
 (0)