diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..90da284 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +_build +docs/team/active.txt +docs/team/inactive.txt +.ipynb_checkpoints +.vscode diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..c5f9aa6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,4 @@ +# CODE OF CONDUCT + +The projects hosted in the JupyterHub organizations follow the +[Project Jupyter Code of Conduct](https://github.com/jupyter/governance/blob/master/conduct/code_of_conduct.md). \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..950d93e --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python -msphinx +SPHINXPROJ = TeamCompass +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/docs/_static/custom.css b/docs/_static/custom.css new file mode 100644 index 0000000..cde2e68 --- /dev/null +++ b/docs/_static/custom.css @@ -0,0 +1,43 @@ +.contrib_entry p { + margin: 2px; + text-align: center; +} + +p.contrib_affiliation { + font-size: .7em; + font-weight: bold; +} + +.contribs_text { + font-size: .8em; +} + +.contrib_entry p.contribs { + float: left; + margin: 0px; +} + +td.contrib_entry { + width: 100px; + height: 200px; + padding: 1em !important; + vertical-align: top; + text-align: center; +} + +td.contrib_entry a { + text-decoration: none; +} + +td.contrib_entry img { + max-width: 120px; +} + +table.contributors { + margin: 0px auto; +} + +/* Team colors */ +p.team { + font-size: .8em; +} diff --git a/docs/_static/favicon.png b/docs/_static/favicon.png new file mode 100644 index 0000000..12ccd94 Binary files /dev/null and b/docs/_static/favicon.png differ diff --git a/docs/_static/jupyter_server_logo.svg b/docs/_static/jupyter_server_logo.svg new file mode 100644 index 0000000..e74c3ab --- /dev/null +++ b/docs/_static/jupyter_server_logo.svg @@ -0,0 +1,213 @@ + + + + + + image/svg+xml + + logo.svg + + + + logo.svg + Created using Figma 0.90 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + server + team compass + diff --git a/docs/_static/logo.png b/docs/_static/logo.png new file mode 100644 index 0000000..4131482 Binary files /dev/null and b/docs/_static/logo.png differ diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..82694dc --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Team Compass documentation build configuration file, created by +# sphinx-quickstart on Sun Dec 3 20:44:20 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx.ext.mathjax', 'myst_parser'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +source_suffix = ['.rst', '.md'] + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'Team Compass' +copyright = '2021, Jupyter Server' +author = 'Jupyter Server Team' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +def setup(app): + app.add_css_file("custom.css") + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_book_theme' + +# Logo +html_logo = '_static/logo.png' +html_favicon = '_static/favicon.png' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + "logo_only": True +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# This is required for the alabaster theme +# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars +# html_sidebars = { +# '**': [ +# 'navigation.html', +# 'relations.html', # needs 'show_related': True theme option to display +# 'searchbox.html', +# 'donate.html', +# ] +# } + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'TeamCompassdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'TeamCompass.tex', 'Team Compass Documentation', + 'Jupyter Server Team', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'teamcompass', 'Team Compass Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'TeamCompass', 'Team Compass Documentation', + author, 'TeamCompass', 'One line description of project.', + 'Miscellaneous'), +] + + + +# -- Options for Epub output ---------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project +epub_author = author +epub_publisher = author +epub_copyright = copyright + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + +# -- Update contributor lists -------------------------------------------- +import subprocess +subprocess.run(['python', 'scripts/gen_contributors.py'], check=True) diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..4dba02a --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,53 @@ +=========================== +Jupyter Server Team Compass +=========================== + + +This page contains links to the notes from team meetings +with the Jupyter Server community. For more some more technical information +and links to various Jupyter Server repositories, see the +`Team Compass README `_. + +Team Compass Resources +====================== + +The following pages contain information about the Jupyter Server +team, resources for community members, and team practices for +governance and planning. + +.. toctree:: + :maxdepth: 1 + + team + team/becoming-member + team/decision-making + team/member-guide + +Why have a Team Compass? +======================== + +This repository helps the Jupyter Server team set a weekly +course for project activity. Our overriding goal is continuous team and +project improvement. + +As projects and their growth evolve rapidly, the contents of this repo +should aid us in setting project direction and adjusting the course as +needed. The repo contains: + +- team meeting agendas and archives +- direction and action plans +- communication and culture of respectful teamwork +- recognitions and team celebrations + +We sail together +================ + +While we value each others individual strengths and contributions, we succeed +or fail as a team. Whether taking corrective actions for a bug or being +recognized for good work, the team, instead of an individual, shoulders +the burden and success. + +Code of Conduct +=============== + +The Jupyter Server community follows the broader `Jupyter Community's Code of Conduct `_. diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..8dcd054 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=python -msphinx +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=TeamCompass + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The Sphinx module was not found. Make sure you have Sphinx installed, + echo.then set the SPHINXBUILD environment variable to point to the full + echo.path of the 'sphinx-build' executable. Alternatively you may add the + echo.Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..598b4e6 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,6 @@ +sphinx>=3 +sphinx_copybutton +sphinx_book_theme +pandas +ruamel.yaml +myst_parser diff --git a/docs/scripts/gen_contributors.py b/docs/scripts/gen_contributors.py new file mode 100644 index 0000000..059c25f --- /dev/null +++ b/docs/scripts/gen_contributors.py @@ -0,0 +1,69 @@ +"""Generate HTML Contributors tables for team pages +""" +import pathlib +import pandas as pd +import os +import os.path as op +from ruamel import yaml + +# Variables +N_PER_ROW = 4 + +# Init +path_data = op.join(op.dirname(op.abspath(__file__)), "..", "team") +yaml = yaml.YAML() + +template = '{NAME}

{NAME}

{AFFILIATION}

' + + +def _generate_contributors(contributors): + """Generate an HTML list of contributors, given a dataframe of their information.""" + s = ['', ''] + for ix, person in contributors.iterrows(): + if ix % N_PER_ROW == 0 and ix != 0: + s += [''] + + # Find user gravatar url + avatar_url = "https://github.com/{HANDLE}.png?size=200".format( + HANDLE=person["handle"].lstrip("@") + ) + + # Add user + format_dict = dict( + HANDLE=person["handle"], + HANDLE_URL="https://github.com/{HANDLE}".format( + HANDLE=person["handle"].lstrip("@") + ), + AFFILIATION=person["affiliation"], + AVATAR_URL=avatar_url, + NAME=person["name"], + ) + + # Render + s += [template.format(**format_dict)] + s += ["
"] + final_text = [".. raw:: html", ""] + for line in s: + final_text += [" " + line] + final_text = "\n".join(final_text) + return final_text + +# Load contributor list +source_dir = pathlib.Path(path_data) +contributor_file = source_dir / "contributors-jupyter-server.yaml" +with open(contributor_file, "r") as ff: + data = yaml.load(ff) + +people = pd.DataFrame(data) + +# Create active member table +active_people = people[people.team == "active"] +table = _generate_contributors(active_people) +with open(source_dir / "active.txt", "w") as ff: + ff.write(table) + +# Create inactive member table +inactive_people = people[people.team == "inactive"] +table = _generate_contributors(inactive_people) +with open(source_dir / "inactive.txt", "w") as ff: + ff.write(table) diff --git a/docs/team.md b/docs/team.md new file mode 100644 index 0000000..70bf629 --- /dev/null +++ b/docs/team.md @@ -0,0 +1,29 @@ +# Current team members + +This page lists (alphabetically) the officially named Jupyter Server Team. + +## Active members + +Active team members are actively participating in the development, maintenance, planning, and discussion around projects in the Jupyter Server Github organization. + +```{eval-rst} + +.. include:: team/active.txt + +``` + +## Inactive members + +Inactive team members are (temporarily or not) pausing their active participation in the Jupyter Server community. They can reactivate themselves at any point in the future; it does not require a nomination by a current active member. + +```{eval-rst} + +.. include:: team/inactive.txt + +``` + +## Software Steering Council Representative + +Each *official* subproject in Jupyter gets a single [Software Steering Council Representative](https://jupyter.org/governance/software_steering_council.html#software-steering-council). Jupyter Server's representative is elected by the active team members. This representative *should* be re-elected every year (i.e. in January). + +(Jupyter Server's representative hasn't been nominated yet). diff --git a/docs/team/becoming-member.md b/docs/team/becoming-member.md new file mode 100644 index 0000000..7ed3363 --- /dev/null +++ b/docs/team/becoming-member.md @@ -0,0 +1,68 @@ +# Becoming a team member + +## Team member responsibilities + +Active team members actively carry out the responsibilities listed in the [Membership Guide Page](membership_guidelines). + +## Active and inactive membership + +There are two types of team members, **active** and **inactive**. + +Active members: + +* Must be nominated by a current team member. +* Can be elected as the Software Steering Council representative for Jupyter Server. +* Get a vote in a voting situation. +* Count towards quorum in a voting situation. +* Are expected to participate in a majority of the team votes. +* Can nominate new team members. +* Should actively participate, either synchronously or asynchronously, in team meetings. + +Inactive members: + +* Were previously an active team member. +* Do not vote. +* Are not counted towards voting quorum. +* Can "reactivate" at any time by expressing their change in status publicly. + +Team members can freely pass between active and inactive at any time. They *should* publicly state their status change in a pull request that updates the `contributors-jupyter-server.yaml` file with their status change. + +This means an inactive team member can "reactivate" themselves at any time by publicly stating their change in status. This does not require a nomination from another team member. + +For example, a team member who is going out on a long leave/vacation (>2 weeks) can temporarily move to the inactive team during their absence and immediately reactivate upon return. This isn't required, but this can relieve them from having to watch this repository for any formal votes that happen during their absence. + +## Nominating a new member + +For someone to become a team member, they should already be a consistent, +positive, productive member of the community. Newcomers are encouraged to +become team members after they've shown a sustained interest in +engaging with the community. Moreover, team members should be interested in +**continuing their engagement** over a long-ish period of time (at least one year), generally +putting in more time and effort than non-team members. This doesn't have to +mean contributing code - it can be assisting others in forums/issues, reviewing +pull requests, participating in team meetings, etc. + +Any new team members must be nominated and championed by an active team member. +This process takes the following steps: + +1. The champion should first discuss internally with team members to + ensure that there's general consensus before officially starting + the process. +2. If there seems to be team consensus, + the champion contacts the potential new team member and asks if they are + interested. Don't forget to run them by the {ref}`membership_guidelines` + page to make sure they understand what they're signing up for. + If so, then move to the next step. +3. The champion opens a new issue in the [team compass repository](https://github.com/jupyter-server/team-compass>). + The issue should state your support of the new team member, discuss why + you think they are great and why they should join the team. +4. This issue should stay open for around 7 days to give members of the team + a chance to weigh in their thoughts (and support!). +5. If there are no objections that haven't been resolved, the new team member + is welcomed into the community as an official team member! + +## Membership Maintenance + +Every six months, one currently active member should open an issue in the team-compass repo asking all currently active team members to reply if they still consider themselves active. If not (or no response is given by a team member), it will be assumed that they have gone inactive. This will help keep the active team up-to-date. + +Remember, an inactive member can return at any time by simply changing their status on the team-compass page. diff --git a/docs/team/contributors-jupyter-server.yaml b/docs/team/contributors-jupyter-server.yaml new file mode 100644 index 0000000..66eeeef --- /dev/null +++ b/docs/team/contributors-jupyter-server.yaml @@ -0,0 +1,74 @@ +# Active Team members +# Use ALPHABETICAL (BY LAST NAME) ORDER please :-) +- name: Kevin Bates + handle: "@kevin-bates" + affiliation: IBM + team: active + last-check-in: 2021-12 + +- name: David Brochart + handle: "@davidbrochart" + affiliation: Quantstack + team: active + last-check-in: 2022-01 + +- name: Eric Charles + handle: "@echarles" + affiliation: Datalayer + team: active + last-check-in: 2022-01 + +- name: Sylvain Corlay + handle: "@SylvainCorlay" + affiliation: QuantStack + team: active + last-check-in: 2022-01 + +- name: Afshin Darian + handle: "@afshin" + affiliation: Two Sigma + team: active + last-check-in: 2022-01 + +- name: Vidar Fauske + handle: "@vidartf" + affiliation: J.P. Morgan Chase + team: active + last-check-in: 2022-01 + +- name: Luciano Resende + handle: "@lresende" + affiliation: Apple + team: active + last-check-in: 2022-01 + +- name: Zach Sailer + handle: "@Zsailer" + affiliation: Apple + team: active + last-check-in: 2022-01 + +- name: Steve Silvester + handle: "@blink1073" + affiliation: MongoDB + team: active + last-check-in: 2022-01 + +- name: Mariko Wakabayashi + handle: "@mwakaba2" + affiliation: OpenZeppelin + team: active + last-check-in: 2022-01 + +- name: Jessica Xu + handle: "@jess-x" + affiliation: Quansight + team: active + last-check-in: 2022-01 + +# Inactive team members at the end, also alphabetical +- name: Jeremy Tuloup + handle: "@jtpio" + affiliation: Quantstack + team: inactive + last-check-in: 2022-01 diff --git a/docs/team/decision-making.md b/docs/team/decision-making.md new file mode 100644 index 0000000..0fe4b51 --- /dev/null +++ b/docs/team/decision-making.md @@ -0,0 +1,11 @@ +# How decisions are made + +The Jupyter Server team follows the ["Decision Making" Guidelines](https://jupyter.org/governance/decision_making.html#required-aspects-of-decision-making) described in the main Jupyter governance documents. + +In short, we'll first seek an informal consensus. If a clear consensus cannot be reached, an active team member can call for a vote. The voting process then follows the guidelines laid out by the [Jupyter Governance model]((https://jupyter.org/governance/decision_making.html#required-aspects-of-decision-making)). + +## Team size + +There is no limit to the size of the team. We follow the [guidelines laid out](https://jupyter.org/governance/bootstrapping_decision_making.html#bootstrapping-decision-making-bodies) by the broader Jupyter governance model which encourages a large, highly participatory decision body: + +> The new governance model and decision-making guide is designed to support large, highly participatory decision-making bodies. As such, even Subprojects that have a clear decision-making body today may wish to increase the size of that body to include more contributors. diff --git a/docs/team/member-guide.md b/docs/team/member-guide.md new file mode 100644 index 0000000..6033ad3 --- /dev/null +++ b/docs/team/member-guide.md @@ -0,0 +1,110 @@ +(membership_guidelines)= + +# Membership guidelines + +This page holds resources for members of the Jupyter Server team. +They're meant to guide team members to be happy, productive members of the +team! + +## What are the team resources? + +There are a few resources that are particularly useful for team members. Here's +a quick list to get you started. + +* [**The Jupyter Server Team Compass**](https://github.com/jupyter-server/team-compass) + is a repository with lots of information about team-related things. It has + development tips, information about team meetings, milestones and roadmaps, + etc. +* [**The Jupyter Server Team Compass issues**](https://github.com/jupyter-server/team-compass/issues) + are where we often discuss specific, actionable things related to the *team* + (e.g., discussing whether to change something in the team-compass repo). +* [**The Jupyter Server gitter channel**](https://gitter.im/jupyter/jupyter_server) is used to have synchronous conversation + for several projects. If a conversation will likely span multiple hours, + or is relevant to many people, consider opening a thread in Discourse or + the `team-compass` repository instead. + +### General policy about communication channels + +We are trying to organize our discussions in order to help both contributors and +maintainers find and choose the right communication channels and have a positive experience. + +In this respect, we are using: +1. GitHub issues for specific discussions related to changing a repository's content +(e.g. feature requests, bug reports). +2. The [Discourse forum](http://discourse.jupyter.org/) for general discussions, support +questions, or just as a place where we can inspire each other. + +## How can I help? + +As a member of the team, you are encouraged to continue +helping in the same ways that you already have. Your contributions to +documentation, code, etc are always welcome. + +Don't forget that, as a member of the team, you're representing the community +when you interact with people (online and offline). Try to keep a friendly, positive +attitude, and be welcoming and helpful in bringing others into the community +and answering their questions. + +### Are there any specific responsibilies? + +We don't want team membership to +be a big burden (many of us have one or more other jobs too!) but there are +a few things that you should do as a new team member: + +1. **"Watch" the [team compass repository](https://github.com/jupyter-server/team-compass)** + so that you're notified when team conversations are happening. +2. **Stay up-to-date on team meetings**. You can find a notes from previous meetings pinned at + the [top of the team-compass issues page](https://github.com/jupyter-server/team-compass/issues). +3. **Vote**. Participate in at least 2/3 of votes happening in the team-compass repo. You should be automatically pinged on Github when a vote is called. +4. **Let us know if you'll be unavailable** or out of town for an extended period + of time. It's no problem if you need to focus on other things for a bit, but it's + helpful for the team to know who will be around. + If it's something you'd rather not mention to the public then + send an email to one of the team members letting them know, and they + can communicate it to the others. +5. **Foster open and inclusive discussion**. As a team member, you are + responsible for ensuring that conversation in our communities is positive + and inclusive. Open public issues to discuss things with the team. Try to + do most communication in public spaces where others can join, or + report back to team members if important conversations happened offline. + When creating issues, provide enough context so that others can understand + and provide their input. Encourage feedback and input from others + often, and be patient when merging code - it is almost better to + wait a bit for an approval than to self-merge. + +## When should I merge a pull request? + +As a team member, you're encouraged to help others contribute to the project +by reviewing their code, guiding them towards making a contribution and +improving it, and ultimately merging their contribution into the project. + +Having merge rights is both a privilege and a responsibility - please be +thoughtful when using it! To that extent, here are a few guidelines when +deciding to merge things into one of our repositories: + +* **Use your best judgment**. As a member of the Jupyter Server team, we trust + your judgment, and we ask you to use your best judgment in deciding when to + take an action. +* **Make sure it's quality code**. We know this is somewhat subjective, but + ensure that the code is well-organized and thoughtfully-written, that any + new features are documented, and that it abides by best-practices in Python, + JavaScript, etc. +* **Make sure there are tests**. We try not to merge any new features (or + bugfixes!) without adding tests for them. It's easy to consider something + minor-enough that it doesn't warrant a test, but try to avoid doing this! + Adding tests usually only takes a moment, and our future selves will thank + us for it later. +* **Make sure there's been enough time for discussion**. We're an open + community with an inclusive decision-making process. This means that + sometimes we need to slow down to make sure others have a chance to + review and provide their thoughts on changes. There's no hard rule for + this, but try to make sure people have a chance to weigh in. Consider + pinging people that you think might be interested in a question, and + give it a few extra days before merging if you think a topic will be + complex enough to warrant discussion. +* **Don't be afraid to merge!** We know this is a bit counter-intuitive + given what we just said, but don't be afraid to merge new code. If you + think a change is really complex or potentially controversial, give it + some time, but for most changes it is fine to just go ahead and merge. + Again, we trust your judgment, and we don't want these guidelines to become + a burden that slows down development. diff --git a/readthedocs.yml b/readthedocs.yml new file mode 100644 index 0000000..0b606ec --- /dev/null +++ b/readthedocs.yml @@ -0,0 +1,5 @@ +name: team +type: sphinx +requirements_file: docs/requirements.txt +python: + version: 3