diff --git a/doc/source/newton/index.rst b/doc/source/newton/index.rst
index 75ccfd8615..42fe2ca6ff 100644
--- a/doc/source/newton/index.rst
+++ b/doc/source/newton/index.rst
@@ -4,7 +4,10 @@
Projected Release Date:
-Release schedule:
+.. toctree::
+ :maxdepth: 1
+
+ schedule
.. deliverable::
:series: newton
diff --git a/doc/source/newton/schedule.rst b/doc/source/newton/schedule.rst
new file mode 100644
index 0000000000..dc3b84f997
--- /dev/null
+++ b/doc/source/newton/schedule.rst
@@ -0,0 +1,215 @@
+=========================
+ Newton release schedule
+=========================
+
++-------------------+---------------------------+-----------------------------+
+| Week | Cross-project events | Project-specific events |
++============+======+===========================+=============================+
+| Apr 04-08 | | :ref:`m-release` | |
++------------+------+---------------------------+-----------------------------+
+| Apr 11-15 | R-26 | | |
++------------+------+---------------------------+-----------------------------+
+| Apr 18-22 | R-25 | | |
++------------+------+---------------------------+-----------------------------+
+| Apr 25-29 | R-24 | :ref:`n-design-summit` | |
++------------+------+---------------------------+-----------------------------+
+| May 02-06 | R-23 | | |
++------------+------+---------------------------+-----------------------------+
+| May 09-13 | R-22 | | |
++------------+------+---------------------------+-----------------------------+
+| May 16-20 | R-21 | | |
++------------+------+---------------------------+-----------------------------+
+| May 23-27 | R-20 | | |
++------------+------+---------------------------+-----------------------------+
+| May 30-03 | R-19 | | |
++------------+------+---------------------------+-----------------------------+
+| Jun 06-10 | R-18 | | |
++------------+------+---------------------------+-----------------------------+
+| Jun 13-17 | R-17 | | |
++------------+------+---------------------------+-----------------------------+
+| Jun 20-24 | R-16 | | |
++------------+------+---------------------------+-----------------------------+
+| Jun 27-01 | R-15 | | |
++------------+------+---------------------------+-----------------------------+
+| Jul 04-08 | R-14 | | |
++------------+------+---------------------------+-----------------------------+
+| Jul 11-15 | R-13 | | |
++------------+------+---------------------------+-----------------------------+
+| Jul 18-22 | R-12 | | |
++------------+------+---------------------------+-----------------------------+
+| Jul 25-29 | R-11 | | |
++------------+------+---------------------------+-----------------------------+
+| Aug 01-05 | R-10 | | |
++------------+------+---------------------------+-----------------------------+
+| Aug 08-12 | R-9 | | |
++------------+------+---------------------------+-----------------------------+
+| Aug 15-19 | R-8 | | |
++------------+------+---------------------------+-----------------------------+
+| Aug 22-26 | R-7 | | |
++------------+------+---------------------------+-----------------------------+
+| Aug 29-02 | R-6 | | |
++------------+------+---------------------------+-----------------------------+
+| Sep 05-09 | R-5 | | |
++------------+------+---------------------------+-----------------------------+
+| Sep 12-16 | R-4 | | |
++------------+------+---------------------------+-----------------------------+
+| Sep 19-23 | R-3 | | |
++------------+------+---------------------------+-----------------------------+
+| Sep 26-30 | R-2 | | |
++------------+------+---------------------------+-----------------------------+
+| Oct 03-07 | R-1 | | |
++------------+------+---------------------------+-----------------------------+
+| Oct 10-14 | R+0 | :ref:`n-release` | |
++------------+------+---------------------------+-----------------------------+
+| Oct 10-14 | R+1 | | |
++------------+------+---------------------------+-----------------------------+
+| Oct 17-21 | R+2 | | |
++------------+------+---------------------------+-----------------------------+
+| Oct 24-28 | R+3 | :ref:`o-design-summit` | |
++------------+------+---------------------------+-----------------------------+
+
+Cross-project events
+====================
+
+.. _n-design-summit:
+
+Newton Design Summit
+--------------------
+
+`Planning in Austin `__
+
+
+.. _n-1:
+
+newton-1 milestone
+------------------
+
+XXX is the newton-1 milestone window for projects following the
+`release:cycle-with-milestones`_ model.
+
+.. _release:cycle-with-milestones: http://governance.openstack.org/reference/tags/release_cycle-with-milestones.html
+
+.. _n-2:
+
+newton-2 milestone
+------------------
+
+XXX is the newton-2 milestone window for projects following the
+`release:cycle-with-milestones`_ model.
+
+.. _n-final-lib:
+
+Final release for non-client libraries
+--------------------------------------
+
+Libraries that are not client libraries (Oslo and others) should issue their
+final release during this week. That allows to give time for last-minute
+changes before feature freeze.
+
+.. _n-3:
+
+newton-3 milestone
+------------------
+
+XXX is the newton-3 milestone window for projects following the
+`release:cycle-with-milestones`_ model.
+
+.. _n-ff:
+
+Feature freeze
+--------------
+
+The newton-3 milestone marks feature freeze for projects following the
+`release:cycle-with-milestones`_ model. No featureful patch should be landed
+after this point. Exceptions may be granted by the project PTL.
+
+.. _n-final-clientlib:
+
+Final release for client libraries
+----------------------------------
+
+Client libraries should issue their final release during this week, to match
+feature freeze.
+
+.. _n-soft-sf:
+
+Soft StringFreeze
+-----------------
+
+You are no longer allowed to accept proposed changes containing modifications
+in user-facing strings. Such changes should be rejected by the review team
+and postponed until the next series development opens (which should happen
+when RC1 is published).
+
+.. _n-rc1:
+
+RC1 target week
+---------------
+
+The week of XXX is the target date for projects following the
+`release:cycle-with-milestones`_ model to issue their first release candidate.
+
+.. _n-hard-sf:
+
+Hard StringFreeze
+-----------------
+
+This happens when the RC1 for the project is tagged. At this point, ideally
+no strings are changed (or added, or removed), to give translator time to
+finish up their efforts.
+
+.. _n-finalrc:
+
+Final RCs and intermediary releases
+-----------------------------------
+
+The week of XXX is the last week to issue release candidates
+or intermediary releases before release week. On release week only
+final-release-critical releases will be accepted (at the discretion of the
+release team).
+
+.. _n-release:
+
+Newton release
+--------------
+
+The Newton coordinated release will happen on XXX.
+
+
+Project-specific events
+=======================
+
+Elections
+---------
+
+.. _o-ptl-nomination:
+
+Ocata cycle PTLs self-nomination
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Project team lead candidates for the Ocata cycle should announce their
+candidacy during this week.
+
+.. _o-ptl-election:
+
+Ocata cycle PTLs election
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Election week for Project team leads (where an election must be held to
+determine the winner).
+
+.. _o-tc-nomination:
+
+TC member self-nomination
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Candidates for the partial Technical Committee member renewal should announce
+their candidacy during this week.
+
+.. _o-tc-election:
+
+TC member election
+^^^^^^^^^^^^^^^^^^
+
+Election for partially renewing Technical Committee members will happen
+during this week.
diff --git a/doc/source/ocata/index.rst b/doc/source/ocata/index.rst
index ff6e699978..8f8d7a8970 100644
--- a/doc/source/ocata/index.rst
+++ b/doc/source/ocata/index.rst
@@ -2,9 +2,13 @@
Ocata
========
-Projected Release Date:
+Projected Release Date: TBD
+
+.. toctree::
+ :maxdepth: 1
+
+ schedule
-Release schedule:
.. deliverable::
:series: ocata
diff --git a/doc/source/ocata/schedule.rst b/doc/source/ocata/schedule.rst
new file mode 100644
index 0000000000..05878f0de0
--- /dev/null
+++ b/doc/source/ocata/schedule.rst
@@ -0,0 +1,149 @@
+========================
+ Ocata release schedule
+========================
+
+Cross-project events
+====================
+
+.. _o-design-summit:
+
+Ocata Design Summit
+--------------------
+
+`Planning in Barcelona `__
+
+
+.. _o-1:
+
+ocata-1 milestone
+------------------
+
+XXX is the ocata-1 milestone window for projects following the
+`release:cycle-with-milestones`_ model.
+
+.. _release:cycle-with-milestones: http://governance.openstack.org/reference/tags/release_cycle-with-milestones.html
+
+.. _o-2:
+
+ocata-2 milestone
+------------------
+
+XXX is the ocata-2 milestone window for projects following the
+`release:cycle-with-milestones`_ model.
+
+.. _o-final-lib:
+
+Final release for non-client libraries
+--------------------------------------
+
+Libraries that are not client libraries (Oslo and others) should issue their
+final release during this week. That allows to give time for last-minute
+changes before feature freeze.
+
+.. _o-3:
+
+ocata-3 milestone
+------------------
+
+XXX is the ocata-3 milestone window for projects following the
+`release:cycle-with-milestones`_ model.
+
+.. _o-ff:
+
+Feature freeze
+--------------
+
+The ocata-3 milestone marks feature freeze for projects following the
+`release:cycle-with-milestones`_ model. No featureful patch should be landed
+after this point. Exceptions may be granted by the project PTL.
+
+.. _o-final-clientlib:
+
+Final release for client libraries
+----------------------------------
+
+Client libraries should issue their final release during this week, to match
+feature freeze.
+
+.. _o-soft-sf:
+
+Soft StringFreeze
+-----------------
+
+You are no longer allowed to accept proposed changes containing modifications
+in user-facing strings. Such changes should be rejected by the review team
+and postponed until the next series development opens (which should happen
+when RC1 is published).
+
+.. _o-rc1:
+
+RC1 target week
+---------------
+
+The week of XXX is the target date for projects following the
+`release:cycle-with-milestones`_ model to issue their first release candidate.
+
+.. _o-hard-sf:
+
+Hard StringFreeze
+-----------------
+
+This happens when the RC1 for the project is tagged. At this point, ideally
+no strings are changed (or added, or removed), to give translator time to
+finish up their efforts.
+
+.. _o-finalrc:
+
+Final RCs and intermediary releases
+-----------------------------------
+
+The week of XXX is the last week to issue release candidates
+or intermediary releases before release week. On release week only
+final-release-critical releases will be accepted (at the discretion of the
+release team).
+
+.. _o-release:
+
+Ocata release
+--------------
+
+The Ocata coordinated release will happen on XXX.
+
+
+Project-specific events
+=======================
+
+Elections
+---------
+
+.. _p-ptl-nomination:
+
+P cycle PTLs self-nomination
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Project team lead candidates for the Ocata cycle should announce their
+candidacy during this week.
+
+.. _p-ptl-election:
+
+Ocata cycle PTLs election
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Election week for Project team leads (where an election must be held to
+determine the winner).
+
+.. _p-tc-nomination:
+
+TC member self-nomination
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Candidates for the partial Technical Committee member renewal should announce
+their candidacy during this week.
+
+.. _p-tc-election:
+
+TC member election
+^^^^^^^^^^^^^^^^^^
+
+Election for partially renewing Technical Committee members will happen
+during this week.
diff --git a/tools/list_weeks.py b/tools/list_weeks.py
new file mode 100755
index 0000000000..c78192a9f6
--- /dev/null
+++ b/tools/list_weeks.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+
+import argparse
+import datetime
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument(
+ 'previous_release',
+ help='date of previous release, YYYY-MM-DD',
+)
+parser.add_argument(
+ 'next_release',
+ help='date of upcoming release, YYYY-MM-DD',
+)
+parser.add_argument(
+ 'summit',
+ help='date of upcoming summit after the release, YYYY-MM-DD',
+)
+args = parser.parse_args()
+
+
+previous_release_date = datetime.datetime.strptime(
+ args.previous_release, '%Y-%m-%d')
+next_release_date = datetime.datetime.strptime(
+ args.next_release, '%Y-%m-%d')
+summit_date = datetime.datetime.strptime(
+ args.summit, '%Y-%m-%d')
+
+week = datetime.timedelta(weeks=1)
+work_week = datetime.timedelta(days=4)
+
+# Build the list of Mondays leading up to the release.
+weeks = []
+current = previous_release_date
+while current < next_release_date:
+ current += week
+ weeks.append(current)
+
+n_weeks = len(weeks)
+
+# Add the list of Mondays following the release leading up to the
+# summit.
+while current <= summit_date:
+ weeks.append(current)
+ current += week
+
+print('''
++-------------------+---------------------------+-----------------------------+
+| Week | Cross-project events | Project-specific events |
++============+======+===========================+=============================+
+''', end='')
+
+week_fmt = '''
+| {:<10} | {:<4} |{:<27}|{:<29}|
++------------+------+---------------------------+-----------------------------+
+'''.strip()
+
+
+def show_week(week, name):
+ date_range = '{:%b %d}-{:%d}'.format(
+ week,
+ week + work_week,
+ )
+ print(week_fmt.format(date_range, name, '', ''))
+
+
+# Print the date for the previous release
+show_week(previous_release_date, '')
+
+for n, week in enumerate(weeks, 1):
+ show_week(week, 'R{:<+3d}'.format(n - n_weeks))