diff --git a/community/infrastructure/intro.md b/community/infrastructure/intro.md index 6fec98ed..77e90bbd 100644 --- a/community/infrastructure/intro.md +++ b/community/infrastructure/intro.md @@ -1,41 +1,53 @@ (github-intro)= # pyOpenSci Infrastructure - pyOpenSci uses GitHub to manage almost all of its infrastructure, from community processes to website rendering. -This page provides an overview of our core repositories, how they work together, and how they contribute to the website and community operations. +This page provides a **high-level overview** of our infrastructure, focusing on how our core repositories work together and contribute to the website and community operations. + +For detailed information about specific infrastructure components, see the [Learn more](#learn-more) section below. + +## What is pyOpenSci infrastructure? + +pyOpenSci infrastructure encompasses: -[Learn more about all of our repos here.](github-repos-overview) +* **GitHub repositories:** All code, content, and documentation repositories +* **Website and documentation:** Main website and sub-sites (handbook, guides, lessons) +* **Data processing:** Automated collection and processing of contributor and peer review data +* **Continuous Integration (CI):** GitHub Actions workflows for testing, building, and deploying +* **Access and permissions:** Repository access management and team structures +* **Issue and pull request workflows:** Processes for managing contributions and reviews +## Infrastructure overview diagrams -```{mermaid} -%%{ init: { "theme": "default", "themeVariables": { "fontSize": "200%" } } }%% +The diagrams below illustrate two key aspects of our infrastructure: -flowchart TD +### Data flow and processing + +The first diagram shows how peer review data is extracted from GitHub issues through our automated processing system to update the website: + +```{figure} /images/diagrams/website-diagram.svg +:name: website-diagram + +pyOpenSci infrastructure data flow diagram showing how peer review issues are processed through pyosMeta to update the website. +``` - %% Note above Software Review - Note["Peer review happens
in GitHub issues"] +This diagram illustrates the automated workflow: peer review happens in GitHub issues, which are parsed by scripts in the `pyosMeta` package to generate YAML files that automatically update the website's package and contributor pages. - %% Top: software-review repo - A(Software Review
github.com/pyOpenSci/software-review) --> B{{pyosMeta
github.com/pyOpenSci/pyosMeta
A Python package that processes review
and contributor data and creates YML files
}} - C(pyOpenSci Website
pyopensci.github.io) - A --> |"pyosMeta parses review issues
and contributor metadata
to create YAML files"| B - B --> |"_data/contributors.yml & packages.yml are used to populate website package and contributor pages."| C +### Website structure - %% Website outputs to 4 child "books" - C --> D1(Handbook
github.com/pyOpenSci/handbook
SPHINX
) - C --> D2(Python Package Guide
github.com/pyOpenSci/python-package-guide
SPHINX
) - C --> D3(Software Peer Review Guide
github.com/pyOpenSci/software-peer-review-guidebook
SPHINX
) - C --> D4(Lessons
github.com/pyOpenSci/software-peer-review-guidebook
SPHINX
) - C --> D5(Peer Review Metrics
github.com/pyOpenSci/peer-review-metrics
QUARTO
) +The second diagram shows how the main pyOpenSci website connects to its sub-sites: - %% Style for Website box (light purple) - style C fill:#f3e8ff,stroke:#7e22ce,stroke-width:1px - style B fill:#fef9c3,stroke:#ca8a04,stroke-width:1px - style Note fill:#f3f4f6,stroke:#9ca3af,stroke-width:1px +```{figure} /images/diagrams/website-repositories-structure.svg +:name: website-repositories-structure +pyOpenSci website structure diagram showing the main website and its sub-sites (Handbook, Python Package Guide, Software Peer Review Guide, Lessons, and Metrics). ``` -## pyOpenSci data flow and continuous integration + +All sub-sites are built separately but served under the `pyopensci.org` domain, with the main website (`pyopensci.github.io`) serving as the central hub. + +## Data flow and continuous integration + +In simple terms: pyOpenSci uses automated workflows to collect data from GitHub and automatically update our website. pyOpenSci uses a set of **Continuous Integration (CI)** jobs (GitHub Actions) to: @@ -44,24 +56,37 @@ pyOpenSci uses a set of **Continuous Integration (CI)** jobs (GitHub Actions) to The [`pyosMeta`](https://github.com/pyOpenSci/pyosMeta) package is a Python package that **parses review and contributor data** and transforms it into **machine-readable YAML files** used by our website. -### Summary of flow +### How data flows through our system * `pyosMeta` parses the **Markdown data** within review issues in the [`software-review`](https://github.com/pyOpenSci/software-review) GitHub repository. It: - * Gathers review editors, reviewers, and maintainers’ GitHub usernames, and uses the GitHub API to retrieve contributor names, emails, and other public GitHub profile information - * Extracts the GitHub URL of each reviewed package and retrieves basic repository statistics (number of forks, stars, contributors) - * Stores this peer review information in `packages.yml` + * Gathers review editors, reviewers, and maintainers’ GitHub usernames, and uses the GitHub API to retrieve contributor names, emails, and other public GitHub profile information + * Extracts the GitHub URL of each reviewed package and retrieves basic repository statistics (number of forks, stars, contributors) + * Stores this peer review information in `packages.yml` * `pyosMeta` also parses **contributor data** from across all pyOpenSci repositories. It: - * Parses `all-contributors` bot files to compile a list of contributors and their associated repositories/projects - * Parses peer review metadata to populate roles such as reviewers, editors, and other contributor roles within our organization - * Stores this contributor information in `contributors.yml` + * Parses `all-contributors` bot files to compile a list of contributors and their associated repositories/projects + * Parses peer review metadata to populate roles such as reviewers, editors, and other contributor roles within our organization + * Stores this contributor information in `contributors.yml` * The `packages.yml` and `contributors.yml` files generated by `pyosMeta` are updated **daily** via a GitHub Action **cron job** in the [`pyopensci.github.io`](https://github.com/pyOpenSci/pyopensci.github.io/tree/main/_data) repository. This data is used to populate: - * The **Our Community** page - * The **Packages** page + * The **Our Community** page + * The **Packages** page + +For more detailed information about data collection and processing, see the [Data Workflows](data-process) page. -### Sphinx books and publishing +### Website publishing * The **Python Package Guide**, **Peer Review Guide**, and **Handbook** are all **Sphinx books** that use the `pydata_sphinx_theme`. These books are built separately but are served under the `pyopensci.org` domain. * All Sphinx books use the [`pyos-sphinx-theme`](https://github.com/pyOpenSci/pyos-sphinx-theme`), which is a Sphinx theme built on top of `pydata_sphinx_theme`. * The final site is published at [pyopensci.org](https://www.pyopensci.org) using **GitHub Pages**. + +## Learn more + +This page provides a high-level overview. For detailed information about specific infrastructure components, see: + +* **[All repositories](our-repositories):** Complete list and description of all pyOpenSci GitHub repositories +* **[Data workflows](data-process):** Detailed information about data collection and processing +* **[Continuous Integration](continuous-integration):** CI/CD workflows and GitHub Actions +* **[Permissions](permissions):** Repository access management and team structures +* **[Pull requests](pull-requests):** How to work with pull requests in pyOpenSci repos +* **[Issues](issues):** Issue management and labeling workflows diff --git a/community/infrastructure/our-repositories.md b/community/infrastructure/our-repositories.md index d070dbad..0164c2ba 100644 --- a/community/infrastructure/our-repositories.md +++ b/community/infrastructure/our-repositories.md @@ -1,67 +1,12 @@ (github-repos-overview)= # pyOpenSci GitHub repositories -:::{todo} -Add repositories from the pyOpenSci organization. -::: - pyOpenSci manages multiple GitHub repositories to support various community -activities. Below is a description of each repository. - -## [Software-review repository](https://www.pyopensci.org/software-peer-review/) - -The software-review repository is where community package submissions are -peer-reviewed. All submissions are made through GitHub Issues. [Learn more -about our peer review process here.](https://www.pyopensci.org/software-peer-review/) - -Teams with access to this repository: -* [the pyOpenSci Editorial Board](https://github.com/orgs/pyOpenSci/teams/editorial-board) - -:::{important} -Important: If a pyOpenSci core member identifies an issue with the review -submission template, consult both the editorial team and core team before -making any changes. This template's data are processed by a Python workflow, -and even small modifications could disrupt the language processing. -::: - -## Software-peer-review guidebook repository - -This repository hosts our [software peer review -guidebook](https://www.pyopensci.org/software-peer-review/), which documents -the processes and guidelines for authors, editors, the Editor in Chief, and the -peer review triage team as they manage our open peer review process. It also -details our peer review policies, partnerships, and the templates used in the -review process. +activities. Below is a description of each repository organized by program area. -Individuals and teams with access to this repository include: -* [the pyOpenSci Editorial Board](https://github.com/orgs/pyOpenSci/teams/editorial-board) -* [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers). +## Website -## Python-package-guide repository - -The [python-package-guide -repository](https://www.pyopensci.org/python-package-guide/) contains our -community-developed guidelines and tutorials on Python packaging. These -resources are beginner-friendly and reflect Python packaging best practices. - -Teams with access to this repository: -* [the pyOpenSci Packaging Council](https://github.com/orgs/pyOpenSci/teams/packaging-council) -* [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) - -## [pyosMeta repository](https://github.com/pyOpenSci/pyosMeta) - -The pyosMeta repository contains a Python package published on PyPI that we use -to track our package review and contributor data. This data is used in a GitHub -action to update our website. - -Teams with access to this repository: -* [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) - -:::{todo} -Add more information about the contributor data workflow ... -::: - -## [pyopensci.github.io repository](https://github.com/pyOpenSci/pyopensci.github.io) +### [pyopensci.github.io](https://github.com/pyOpenSci/pyopensci.github.io) This repository contains code and content that builds and publishes our pyOpenSci website. The website, [pyOpenSci](https://www.pyopensci.org/), is @@ -73,10 +18,11 @@ Python package discussed above. The workflow runs every other week but can be triggered manually as a **workflow dispatch**. Teams with access to this repository: + * [the pyOpenSci Editorial Board](https://github.com/orgs/pyOpenSci/teams/editorial-board) * [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) -### Critical CI workflows in this repository +#### Critical CI workflows in this repository The [contributor workflow action](https://github.com/pyOpenSci/pyopensci.github.io/blob/main/.github/workflows/update-contribs-reviews.yml) @@ -100,7 +46,7 @@ The action will: The YAML output files are then used to populate content on the website. -### Metadata stored in this repository +#### Metadata stored in this repository 1. **Packages.yml**: Updates the [Python Packages page](https://www.pyopensci.org/python-packages.html) by parsing reviews @@ -114,50 +60,137 @@ Update the website contributors guide with general CI and specific Jekyll information. ::: -## [pyOpenSci Sphinx theme](https://github.com/pyOpenSci/pyos-sphinx-theme) +### [handbook](https://github.com/pyOpenSci/handbook) -**Platform:** Sphinx book template that builds on top of the pydata_sphinx_theme +**Platform:** Sphinx book running the `pydata_sphinx_theme` -All of our pyOpenSci Sphinx books (handbook, packaging guide, software review -guide) have been customized to match our pyOpenSci branding. This repo contains -the start of a Sphinx theme that will incorporate all of our branding, so we do -not have to manually apply the branding and update it individually in each repo. -Instead, we can update branding in the theme, and it will be applied across all -of our repositories that use the theme. +This is where we store our organization governance, code of conduct, and +processes around how we operate as an organization. -Creating a theme was inspired by the -[2i2c Sphinx theme](https://sphinx-2i2c-theme.readthedocs.io/en/latest/). +The [pyOpenSci Executive Council](https://www.pyopensci.org/our-community/index.html#executive-council-leadership--staff) has access to this repo. + +### [metrics](https://github.com/pyOpenSci/peer-review-metrics) + +The pyOpenSci peer review metrics repository contains the code for a dashboard +created using [MyST Markdown](https://mystmd.org/). Myst-md is a community +developed tool that makes it easier for scientists to create fully +reproducible (and interactive) workflows and reports that are easily shared. +This repository has a cron job that runs weekly to update review status +metrics. + +Only pyOpenSci GitHub organization admins have direct access to modify this +repository. + +### [lessons](https://github.com/pyOpenSci/lessons) + +pyOpenSci is devoted to building diverse, supportive community around the +Python open source tools that drive open science. The lessons repository +contains the source files for all of the [pyOpenSci +tutorials](https://github.com/pyOpenSci/lessons). + +The [pyOpenSci Lesson Development Team](https://github.com/orgs/pyOpenSci/teams/lesson-development) has access to this repo. + +## Packaging education + +### [python-package-guide](https://github.com/pyOpenSci/python-package-guide) + +The [python-package-guide +repository](https://www.pyopensci.org/python-package-guide/) contains our +community-developed guidelines and tutorials on Python packaging. These +resources are beginner-friendly and reflect Python packaging best practices. Teams with access to this repository: + +* [the pyOpenSci Packaging Council](https://github.com/orgs/pyOpenSci/teams/packaging-council) * [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) -## [Handbook repository](https://github.com/pyOpenSci/handbook) +### [pyos-package-template](https://github.com/pyOpenSci/pyos-package-template) -**Platform:** Sphinx book running the `pydata_sphinx_theme` +A Python package template that supports the pyOpenSci pure [Python packaging +tutorial](https://www.pyopensci.org/python-package-guide/tutorials/intro.html). +This template can be used with [copier](https://copier.readthedocs.io) to +initialize a new Python package project structure following the practices +outlined in the [pyOpenSci pure Python packaging +tutorial](https://www.pyopensci.org/python-package-guide/tutorials/installable-code.html). -This is where we store our organization governance, code of conduct, and -processes around how we operate as an organization. +Teams with access to this repository: -The [pyOpenSci Executive Council](https://www.pyopensci.org/our-community/index.html#executive-council-leadership--staff) has access to this repo. +* [the pyOpenSci Packaging Council](https://github.com/orgs/pyOpenSci/teams/packaging-council) -## [pyosPackage repository](https://github.com/pyOpenSci/pyosPackage) +### [pyosPackage](https://github.com/pyOpenSci/pyosPackage) The pyosPackage repo contains an example pure-Python package that complements -our package guide & tutorials. We will build this package example out over time -for folks that just want to see a working package without creating one +our package guide & tutorials. We will build this package example out over +time for folks that just want to see a working package without creating one themselves. Teams with access to this repository: -* [the pyOpenSci Packaging Council](https://github.com/orgs/pyOpenSci/teams/packaging-council). -## [peer-review-metrics repository](https://github.com/pyOpenSci/peer-review-metrics) +* [the pyOpenSci Packaging Council](https://github.com/orgs/pyOpenSci/teams/packaging-council) + +## Peer review -The pyOpenSci peer review metrics repository contains the code for a dashboard created using [MyST Markdown](https://mystmd.org/). Myst-md is a community developed tool that makes it easier for scientists to create fully reproducible (and interactive) workflows and reports that are easily shared. +### [software-submission](https://github.com/pyOpenSci/software-submission) -Only pyOpenSci GitHub organization admins have direct access to modify this repository. +The software-submission repository is where community package submissions are +peer-reviewed. All submissions are made through GitHub Issues. [Learn more +about our peer review process here.](https://www.pyopensci.org/software-peer-review/) -## [lessons repository](https://github.com/pyOpenSci/lessons) +Teams with access to this repository: -pyOpenSci is devoted to building diverse, supportive community around the Python open source tools that drive open science. The lessons repository contains the source files for all of the [pyOpenSci tutorials](https://github.com/pyOpenSci/lessons). +* [the pyOpenSci Editorial Board](https://github.com/orgs/pyOpenSci/teams/editorial-board) -The [pyOpenSci Lesson Development Team](https://github.com/orgs/pyOpenSci/teams/lesson-development) has access to this repo. +:::{important} +Important: If a pyOpenSci core member identifies an issue with the review +submission template, consult both the editorial team and core team before +making any changes. This template's data are processed by a Python workflow, +and even small modifications could disrupt the language processing. +::: + +### [software-peer-review](https://github.com/pyOpenSci/software-peer-review) + +This repository hosts our [software peer review +guidebook](https://www.pyopensci.org/software-peer-review/), which documents +the processes and guidelines for authors, editors, the Editor in Chief, and +the peer review triage team as they manage our open peer review process. It +also details our peer review policies, partnerships, and the templates used in +the review process. + +Individuals and teams with access to this repository include: + +* [the pyOpenSci Editorial Board](https://github.com/orgs/pyOpenSci/teams/editorial-board) +* [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) + +## Infrastructure + +### [pyosMeta](https://github.com/pyOpenSci/pyosMeta) + +The pyosMeta repository contains a Python package published on PyPI that we +use to track our package review and contributor data. This data is used in a +GitHub action to update our website. + +Teams with access to this repository: + +* [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) + +:::{todo} +Add more information about the contributor data workflow ... +::: + +### [pyos-sphinx-theme](https://github.com/pyOpenSci/pyos-sphinx-theme) + +**Platform:** Sphinx book template that builds on top of the pydata_sphinx_theme + +All of our pyOpenSci Sphinx books (handbook, packaging guide, software review +guide) have been customized to match our pyOpenSci branding. This repo +contains the start of a Sphinx theme that will incorporate all of our +branding, so we do not have to manually apply the branding and update it +individually in each repo. Instead, we can update branding in the theme, and +it will be applied across all of our repositories that use the theme. + +Creating a theme was inspired by the +[2i2c Sphinx theme](https://sphinx-2i2c-theme.readthedocs.io/en/latest/). + +Teams with access to this repository: + +* [the pyOpenSci Repository Maintainers team](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) diff --git a/community/infrastructure/permissions.md b/community/infrastructure/permissions.md index af27fee9..12018022 100644 --- a/community/infrastructure/permissions.md +++ b/community/infrastructure/permissions.md @@ -1,18 +1,21 @@ # pyOpenSci GitHub Permissions ## GitHub teams -pyOpenSci uses [GitHub Teams](https://docs.github.com/en/organizations/organizing-members-into-teams/about-teams) to allocate permissions to contributors on GitHub. pyOpenSci currently has [four active teams](https://github.com/orgs/pyOpenSci/teams): +pyOpenSci uses [GitHub +Teams](https://docs.github.com/en/organizations/organizing-members-into-teams/about-teams) +to allocate permissions to contributors on GitHub. pyOpenSci currently +has [four active teams](https://github.com/orgs/pyOpenSci/teams): * [the Editorial Board](https://github.com/orgs/pyOpenSci/teams/editorial-board) * [the Packaging Council](https://github.com/orgs/pyOpenSci/teams/packaging-council) -* [pyOpenSci Repo Maintainers](https://github.com/orgs/pyOpenSci/teams/pyos-repo-maintainers) +* [pyOpenSci maintainers](https://github.com/orgs/pyOpenSci/teams/pyopensci-repository-maintainers) * [the Translation Council](https://github.com/orgs/pyOpenSci/teams/translation-council) ## Team repository access Each of the teams has access to the following pyOpenSci repositories: -### Editorial Board +### Editorial board These are individuals who serve on the pyOpenSci [Editorial Board](https://www.pyopensci.org/our-community/#pyopensci-community-contributors). @@ -20,30 +23,44 @@ These are individuals who serve on the pyOpenSci [Editorial Board](https://www.p * [software-submission](https://github.com/pyOpenSci/software-submission) * [pyopensci.github.io repository](https://github.com/pyOpenSci/pyopensci.github.io) -### Packaging Council +### Packaging council -These are members who are actively working on our packaging projects and translation in the organization. +These are members who are actively working on our packaging projects and +translation in the organization. * [python-package-guide repository](https://www.pyopensci.org/python-package-guide/) * [pyosPackage repository](https://github.com/pyOpenSci/pyosPackage) * [pyos-package-template](https://github.com/pyOpenSci/pyos-package-template) -### pyOpenSci Repo Maintainers +(pyopensci-maintainers-permissions)= -This is a team with folks who have access to manage issues and such across our repositories. +### pyOpenSci repository maintainers -* [software-peer-review repository](https://github.com/pyOpenSci/software-peer-review) -* [python-package-guide repository](https://www.pyopensci.org/python-package-guide/) -* [pyosMeta repository](https://github.com/pyOpenSci/pyosMeta) -* [pyopensci.github.io repository](https://github.com/pyOpenSci/pyopensci.github.io) -* [pyos-sphinx-theme](https://github.com/pyOpenSci/pyos-sphinx-theme) +The pyOpenSci maintainers team has access to manage issues and +operational tasks across pyOpenSci repositories. For a complete +description of this team's responsibilities, see the [pyOpenSci +maintainers role definition](pyopensci-maintainers) in our organizational +structure documentation. -### Translation Council +[View the complete list of repositories accessible to the pyOpenSci +repository maintainers team on +GitHub](https://github.com/orgs/pyOpenSci/teams/pyopensci-repository-maintainers). -These are people working on translations across our repos. There are currently no repos assigned to the translations team. +### Translation council -## How permissions are granted +These are people working on translations across our repos. There are +currently no repos assigned to the translations team. -We liberally grant access to our GitHub repos to pyOpenSci community members. When we see a contributor actively engaging, we add them to the appropriate teams. +## How permissions are granted -To learn more about how pyOpenSci uses GitHub, please refer to our [GitHub processes page](https://www.pyopensci.org/handbook/community/github/intro.html), in particular the [GitHub Issue Guidelines](https://www.pyopensci.org/handbook/community/github/issues.html) and [Pull Requests](https://www.pyopensci.org/handbook/community/github/pull-requests.html) sections. +We liberally grant access to our GitHub repos to pyOpenSci community +members. When we see a contributor actively engaging, we add them to the +appropriate teams. + +To learn more about how pyOpenSci uses GitHub, please refer to our +[GitHub processes page](https://www.pyopensci.org/handbook/community/github/intro.html), +in particular the [GitHub Issue +Guidelines](https://www.pyopensci.org/handbook/community/github/issues.html) +and [Pull +Requests](https://www.pyopensci.org/handbook/community/github/pull-requests.html) +sections. diff --git a/governance/structure.md b/governance/structure.md index 11d4bdbc..7cedeab8 100644 --- a/governance/structure.md +++ b/governance/structure.md @@ -1,5 +1,4 @@ (pyos-structure)= - # Organization Structure and Leadership This page describes the organizational structure of pyOpenSci as they @@ -8,7 +7,7 @@ related to governance and operations. There are two levels of leadership described below. The first is the organizational level. The second is program level. -## Governing committees +## Governing councils ### Executive council @@ -28,10 +27,10 @@ The Advisory Council is comprised of leaders in the Python scientific open source ecosystem. This council advises the executive director in both organization level and day-to-day decision-making around -- Python packaging guidelines -- Peer review processes and guidelines -- Program development that supports pyOpenSci's mission -- Community engagement +* Python packaging guidelines +* Peer review processes and guidelines +* Program development that supports pyOpenSci's mission +* Community engagement Most of the communication supporting advisory council activities happens in the pyOpenSci slack. The executive director will also @@ -48,19 +47,19 @@ The Executive Director creates and oversees the execution of the mission and strategy of pyOpenSci supported by the Advisory Committee. The Executive Director also: -- is the primary interface to the organization's fiscal sponsor; -- coordinates day-to-day activities -- develops programs that drive the organization's mission -- oversees staff and volunteers -- makes tie-breaking decisions if they are at an impasse. +* is the primary interface to the organization's fiscal sponsor; +* coordinates day-to-day activities +* develops programs that drive the organization's mission +* oversees staff and volunteers +* makes tie-breaking decisions if they are at an impasse. The Executive Director reports to the Executive Council. In the early stages of the organization's development, the Executive Director will take on other responsibilities including: -- Managing the community in Slack and on social media -- Serving as the defacto Software Peer Review Lead (below) until that position is funded. +* Managing the community in Slack and on social media +* Serving as the defacto Software Peer Review Lead (below) until that position is funded. :::{todo} @@ -69,31 +68,91 @@ will take on other responsibilities including: The Community Manager is a future position to be created within the pyOpenSci organization. This position will: -- Oversee social media communications -- Create strategic communication plans -- Write and oversee blog writing -- Manage website content -- Support communications within our online communication platforms (e.g. Slack, Discourse, Discord etc.) +* Oversee social media communications +* Create strategic communication plans +* Write and oversee blog writing +* Manage website content +* Support communications within our online communication platforms (e.g. Slack, Discourse, Discord etc.) The Community Manager is a paid position in the pyOpenSci organization. ::: -## Open peer review program: Program-level leadership structure +## Infrastructure and operations teams + +The roles in this section are largely volunteer roles with a few leadership +positions becoming stipend based. + +(pyopensci-maintainers)= +### pyOpenSci repository maintainers + +The pyOpenSci maintainers team is responsible for the day-to-day +operational maintenance of pyOpenSci's infrastructure and repositories. +This team: + +* Triage open issues across pyOpenSci repositories +* Approve and merge routine updates including: + * Dependabot pull requests + * Pre-commit CI updates +* Approve and merge automated data file updates: + * Automated data file updates. Our [metrics](https://www.pyopensci.org/metrics) and [website](https://github.com/pyopensci.github.io/) are updated automatically using a GitHub action workflow that is supported by the pyosMeta Python package discussed above. A cron job runs this workflow daily to weekly and opens a pr. These pr's can be updated at whatever frequency is needed but should be updated at least once or twice a month. +* Ensure the smooth operation of pyOpenSci's technical infrastructure + +#### Triaging issues and pull requests + +Maintainers can triage open issues and pull requests as they have time. +When triaging issues: + +* **High priority items**: Flag high-priority issues with an appropriate + priority label (e.g., `priority: high`). +* **Community-contributable issues**: For issues that community members + could work on: + * Add the `help-wanted` label if the issue is suitable for community + contribution + * Add the `sprintable` label if the issue is suitable for sprint events + * Add the issue to the [pyOpenSci help-wanted project + board](https://github.com/orgs/pyOpenSci/projects/3) + * Post about the issue in the `#open-source-general-chat` Slack channel + to bring community attention to it + +Issues with the `help-wanted` or `sprintable` labels are automatically +added to the help-wanted project board, which serves as a central location +for community members to find opportunities to contribute. + +For information about GitHub team membership and repository access, +see the [pyOpenSci maintainers team section](pyopensci-maintainers-permissions) +in our permissions documentation. + +[Click here to view the pyOpenSci maintainers GitHub +team](https://github.com/orgs/pyOpenSci/teams/pyopensci-repository-maintainers) + +## Open peer review program: program-level leadership structure Several roles and groups drive the peer review process: +(peer-review-lead)= ### Peer review lead -The peer review lead is responsible for overseeing the entire software review process. They are responsible for: +The peer review lead is responsible for overseeing the entire software +review process. They are responsible for: + +* Ensuring a diverse and active [editorial board](peer-review-editorial-board) +* Onboarding and offboarding new editors +* Maintaining the [pyOpenSci Software Peer Review + Guide](https://www.pyopensci.org/software-peer-review/) +* Updating [software peer review + policies](https://www.pyopensci.org/software-peer-review/our-process/policies.html) + as needed +* Helping editors find reviewers as necessary +* Keeping the review process moving forward by checking in on stalled + reviews and supporting the editorial team +* Managing conflicts that may arise in the software peer review process -- Ensuring a diverse and active [editorial board](peer-review-editorial-board) -- Onboarding and offboarding new editors -- Maintaining the [pyOpenSci Software Peer Review Guide](https://www.pyopensci.org/software-peer-review/) -- Updating [software peer review policies](https://www.pyopensci.org/software-peer-review/our-process/policies.html) as needed -- Helping editors find reviewers as necessary. +The peer review lead role is currently held by the pyOpenSci Executive +Director. -This role will also help manage conflict if it arises in the peer review process. -The peer review lead role is currently held by the pyOpenSci Executive Director +[More detailed guidance for the peer review lead role can be found in +the pyOpenSci Software Peer Review +Guide](https://www.pyopensci.org/software-peer-review/how-to/peer-review-lead.html). (peer-review-editorial-board)= ### Peer review editorial board @@ -105,17 +164,17 @@ advocates for open source software peer review. This group helps pyOpenSci make decisions about it's open peer review process. These decisions including but are not limited to: -- Decisions about the scope of packages accepted into the ecosystem -- Decisions about how we enforce / support ongoing maintenance of accepted packages. -- Decisions about how we test for, evaluate and report package quality and health. -- Metrics that we collect surrounding the peer review process +* Decisions about the scope of packages accepted into the ecosystem +* Decisions about how we enforce / support ongoing maintenance of accepted packages. +* Decisions about how we test for, evaluate and report package quality and health. +* Metrics that we collect surrounding the peer review process Volunteers on the editorial board will serve for 1-2 years. The editors oversee 3-4 packages a year. [editorial board can be found here.](https://www.pyopensci.org/about-peer-review/#our-editorial-board) -### Editor in Chief +### Editor in chief The Editor in Chief role is a rotating position that is held by someone on the editorial board. [More on this position can be diff --git a/images/diagrams/website-diagram.excalidraw b/images/diagrams/website-diagram.excalidraw new file mode 100644 index 00000000..deb67b4b --- /dev/null +++ b/images/diagrams/website-diagram.excalidraw @@ -0,0 +1,592 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "t7oXYK0b_pQGBl0NZtLtz", + "type": "rectangle", + "x": 510.94140625, + "y": 129.88671875, + "width": 207.40625000000006, + "height": 95.125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 0, + "opacity": 40, + "groupIds": [], + "frameId": null, + "index": "a0", + "roundness": { + "type": 3 + }, + "seed": 1359546614, + "version": 284, + "versionNonce": 1415085354, + "isDeleted": false, + "boundElements": [ + { + "id": "DzugdQdO2d2T6nlUTxjw7", + "type": "arrow" + } + ], + "updated": 1766006853097, + "link": null, + "locked": false + }, + { + "id": "hfbQ0qSPLyGdxYJH4MwTF", + "type": "text", + "x": 512.1442489624023, + "y": 153.97265625, + "width": 200.0396270751953, + "height": 49.95052083333342, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a1", + "roundness": null, + "seed": 1165091754, + "version": 1303, + "versionNonce": 777042154, + "isDeleted": false, + "boundElements": null, + "updated": 1766006874285, + "link": null, + "locked": false, + "text": "Peer Review happens \non GitHub", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Peer Review happens \non GitHub", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "c-SITXKsRcTZsmlc8WTg7", + "type": "rectangle", + "x": 512.26171875, + "y": 273.82421875, + "width": 223.39062500000006, + "height": 146.3515625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 40, + "groupIds": [], + "frameId": null, + "index": "a2", + "roundness": { + "type": 3 + }, + "seed": 420430122, + "version": 358, + "versionNonce": 1743783338, + "isDeleted": false, + "boundElements": [ + { + "id": "DzugdQdO2d2T6nlUTxjw7", + "type": "arrow" + }, + { + "id": "gqQNSG8vDT0MpL6oerH4j", + "type": "arrow" + } + ], + "updated": 1766007043673, + "link": null, + "locked": false + }, + { + "id": "-3G4gEdGb2s-LglgfK1s8", + "type": "text", + "x": 523.1355514526367, + "y": 322.0546875, + "width": 201.64295959472656, + "height": 67.89583333333337, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a3", + "roundness": null, + "seed": 1621199850, + "version": 605, + "versionNonce": 1172844790, + "isDeleted": false, + "boundElements": [], + "updated": 1766006998478, + "link": null, + "locked": false, + "text": "software-review\n(GitHub Repo)", + "fontSize": 27.15833333333335, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "software-review\n(GitHub Repo)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "xWZa74sDK0eM3b9BE5vFf", + "type": "rectangle", + "x": 510.94140625, + "y": 502.5859375, + "width": 223.39062500000006, + "height": 185, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "groupIds": [], + "frameId": null, + "index": "a4", + "roundness": { + "type": 3 + }, + "seed": 110082038, + "version": 334, + "versionNonce": 783094710, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ptBuVqkPXiB0QFKWpN8-5" + }, + { + "id": "gqQNSG8vDT0MpL6oerH4j", + "type": "arrow" + } + ], + "updated": 1766007037456, + "link": null, + "locked": false + }, + { + "id": "ptBuVqkPXiB0QFKWpN8-5", + "type": "text", + "x": 523.616828918457, + "y": 507.5859375, + "width": 198.03977966308594, + "height": 175, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "groupIds": [], + "frameId": null, + "index": "a5", + "roundness": null, + "seed": 689685226, + "version": 209, + "versionNonce": 757574314, + "isDeleted": false, + "boundElements": null, + "updated": 1766007037456, + "link": null, + "locked": false, + "text": "pyosMeta package\nconverts issue\nmetadata\ninto a review yml file\nthat is used to\npopulate packages on\nthe website", + "fontSize": 20, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "xWZa74sDK0eM3b9BE5vFf", + "originalText": "pyosMeta package converts issue metadata\ninto a review yml file\nthat is used to populate packages on the website", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "e_6TYwnxx1tU4-3uOPxko", + "type": "rectangle", + "x": 511.91796875, + "y": 769.796875, + "width": 223.39062500000006, + "height": 146.3515625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "groupIds": [], + "frameId": null, + "index": "a6", + "roundness": { + "type": 3 + }, + "seed": 250225078, + "version": 459, + "versionNonce": 1726350902, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "7JdPq7TQHExQgA1jrFGQk" + }, + { + "id": "xkBDocLI21YXCdlIMO-DT", + "type": "arrow" + } + ], + "updated": 1766007117074, + "link": null, + "locked": false + }, + { + "id": "7JdPq7TQHExQgA1jrFGQk", + "type": "text", + "x": 534.4833679199219, + "y": 805.47265625, + "width": 178.25982666015625, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a7", + "roundness": null, + "seed": 199785206, + "version": 280, + "versionNonce": 8552682, + "isDeleted": false, + "boundElements": [], + "updated": 1766007120540, + "link": null, + "locked": false, + "text": "pyOpenSci Website\npyopensci.github.io\n", + "fontSize": 20, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "e_6TYwnxx1tU4-3uOPxko", + "originalText": "pyOpenSci Website\npyopensci.github.io\n", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "DzugdQdO2d2T6nlUTxjw7", + "type": "arrow", + "x": 605.896484375, + "y": 221.404296875, + "width": 0.466796875, + "height": 53.498046875, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 70, + "groupIds": [], + "frameId": null, + "index": "a8", + "roundness": null, + "seed": 1889070954, + "version": 1280, + "versionNonce": 452543862, + "isDeleted": false, + "boundElements": null, + "updated": 1766007087879, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.466796875, + 53.498046875 + ] + ], + "startBinding": { + "elementId": "t7oXYK0b_pQGBl0NZtLtz", + "mode": "inside", + "fixedPoint": [ + 0.45782168148259744, + 0.9620770367936925 + ] + }, + "endBinding": { + "elementId": "c-SITXKsRcTZsmlc8WTg7", + "mode": "inside", + "fixedPoint": [ + 0.4170630202140308, + 0.007366679122404313 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "mC9gjN9IrL6e8IbsbVqdW", + "type": "text", + "x": 703.9799346923828, + "y": 432.00325520833326, + "width": 165.97372436523438, + "height": 74.92578125000013, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a9", + "roundness": null, + "seed": 1052142902, + "version": 1703, + "versionNonce": 2102405610, + "isDeleted": false, + "boundElements": [], + "updated": 1766007108597, + "link": null, + "locked": false, + "text": "Review issues are \nparsed by \npyosMeta", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Review issues are \nparsed by \npyosMeta", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "IOIkmJdzOWFS0-O5F_aRk", + "type": "text", + "x": 724.7080841064453, + "y": 690.8118489583333, + "width": 311.4080505371094, + "height": 74.92578125000013, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aA", + "roundness": null, + "seed": 538692534, + "version": 1897, + "versionNonce": 150272950, + "isDeleted": false, + "boundElements": [], + "updated": 1766007114089, + "link": null, + "locked": false, + "text": "A cron job is run that \nupdates the yaml file daily\nA pr is opened that can be merged", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "A cron job is run that \nupdates the yaml file daily\nA pr is opened that can be merged", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "gqQNSG8vDT0MpL6oerH4j", + "type": "arrow", + "x": 617.1758346255489, + "y": 431.17578125000006, + "width": 0.07867365741549293, + "height": 60.41015625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 70, + "groupIds": [], + "frameId": null, + "index": "aB", + "roundness": null, + "seed": 2146828778, + "version": 647, + "versionNonce": 1065736554, + "isDeleted": false, + "boundElements": [], + "updated": 1766007030136, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.07867365741549293, + 60.41015625 + ] + ], + "startBinding": { + "elementId": "c-SITXKsRcTZsmlc8WTg7", + "mode": "orbit", + "fixedPoint": [ + 0.4697139259984611, + 0.9936208829338601 + ] + }, + "endBinding": { + "elementId": "xWZa74sDK0eM3b9BE5vFf", + "mode": "orbit", + "fixedPoint": [ + 0.47520237126393894, + -0.05945945945945915 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false, + "moveMidPointsWithElement": false + }, + { + "id": "xkBDocLI21YXCdlIMO-DT", + "type": "arrow", + "x": 617.6486851409333, + "y": 687.796875, + "width": 1.222408609066747, + "height": 85.177734375, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 70, + "groupIds": [], + "frameId": null, + "index": "aC", + "roundness": null, + "seed": 1397407030, + "version": 1171, + "versionNonce": 1190555830, + "isDeleted": false, + "boundElements": [], + "updated": 1766007117075, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1.222408609066747, + 85.177734375 + ] + ], + "startBinding": null, + "endBinding": { + "elementId": "e_6TYwnxx1tU4-3uOPxko", + "mode": "inside", + "fixedPoint": [ + 0.47877177030146173, + 0.021713019804622858 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false, + "moveMidPointsWithElement": false + }, + { + "id": "J9yRZCbSX1xgUz-yDNz3Q", + "type": "text", + "x": 681.9450073242188, + "y": 921.08984375, + "width": 310.3092041015625, + "height": 74.92578125000013, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aD", + "roundness": null, + "seed": 1017712246, + "version": 2099, + "versionNonce": 589804598, + "isDeleted": false, + "boundElements": [], + "updated": 1766007146136, + "link": null, + "locked": false, + "text": "Once the data pr is merged,\nthe website's our packages and \ncontributor pages will be updated.", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Once the data pr is merged,\nthe website's our packages and \ncontributor pages will be updated.", + "autoResize": true, + "lineHeight": 1.25 + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff", + "lockedMultiSelections": {} + }, + "files": {} +} diff --git a/images/diagrams/website-diagram.svg b/images/diagrams/website-diagram.svg new file mode 100644 index 00000000..fd482458 --- /dev/null +++ b/images/diagrams/website-diagram.svg @@ -0,0 +1,2 @@ +Peer Review happens on GitHubsoftware-review(GitHub Repo)pyosMeta packageconverts issuemetadatainto a review yml filethat is used topopulate packages onthe websitepyOpenSci Websitepyopensci.github.ioReview issues are parsed by pyosMetaA cron job is run that updates the yaml file dailyA pr is opened that can be mergedOnce the data pr is merged,the website's our packages and contributor pages will be updated. diff --git a/images/diagrams/website-repositories-structure.excalidraw b/images/diagrams/website-repositories-structure.excalidraw new file mode 100644 index 00000000..2b63a79c --- /dev/null +++ b/images/diagrams/website-repositories-structure.excalidraw @@ -0,0 +1,2337 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "fuIDlCFwDvrrsMrjz3ud9", + "type": "rectangle", + "x": 692.5733433668474, + "y": 194.03515625, + "width": 286.67362576630507, + "height": 148.45703125000003, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 30, + "groupIds": [], + "frameId": null, + "index": "Zv", + "roundness": { + "type": 3 + }, + "seed": 685325722, + "version": 761, + "versionNonce": 1151790938, + "isDeleted": false, + "boundElements": [ + { + "id": "3Ix2mzMaMxFqECrKxFziA", + "type": "arrow" + } + ], + "updated": 1766008158339, + "link": null, + "locked": false + }, + { + "id": "dyRaJZ0LzKVmUFbvGCs_t", + "type": "rectangle", + "x": 692.4483433668474, + "y": 362.80078125, + "width": 289.5173757663051, + "height": 129.92578125000003, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 30, + "groupIds": [], + "frameId": null, + "index": "Zw", + "roundness": { + "type": 3 + }, + "seed": 374979802, + "version": 678, + "versionNonce": 1955333894, + "isDeleted": false, + "boundElements": [ + { + "id": "eGsTm2AXBMgd95hiXbMFs", + "type": "arrow" + }, + { + "id": "iEabxXMaK1dU-5IwhCh0B", + "type": "arrow" + } + ], + "updated": 1766008185430, + "link": null, + "locked": false + }, + { + "id": "PNf-TYdL_77bSliTYjs3x", + "type": "rectangle", + "x": 692.5733433668474, + "y": 509.208984375, + "width": 286.67362576630507, + "height": 148.45703125000003, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 30, + "groupIds": [], + "frameId": null, + "index": "Zx", + "roundness": { + "type": 3 + }, + "seed": 216854406, + "version": 789, + "versionNonce": 1409565894, + "isDeleted": false, + "boundElements": [ + { + "id": "eGsTm2AXBMgd95hiXbMFs", + "type": "arrow" + } + ], + "updated": 1766008017160, + "link": null, + "locked": false + }, + { + "id": "lHWV13VxZ2B-t_iNmHbBx", + "type": "rectangle", + "x": 692.6983433668474, + "y": 675.830078125, + "width": 287.07596951630507, + "height": 162.05859375, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 30, + "groupIds": [], + "frameId": null, + "index": "Zy", + "roundness": { + "type": 3 + }, + "seed": 811048474, + "version": 906, + "versionNonce": 2095914330, + "isDeleted": false, + "boundElements": [ + { + "id": "hAFPuLn58Wo3h9CZA-Fc_", + "type": "arrow" + } + ], + "updated": 1766008170610, + "link": null, + "locked": false + }, + { + "id": "hec3FqQXdm0PkCrAcM13n", + "type": "rectangle", + "x": 293.93662461684744, + "y": 358.607421875, + "width": 286.67362576630507, + "height": 148.45703125000003, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 30, + "groupIds": [], + "frameId": null, + "index": "Zz", + "roundness": { + "type": 3 + }, + "seed": 163112922, + "version": 1354, + "versionNonce": 1375697626, + "isDeleted": false, + "boundElements": [ + { + "id": "eGsTm2AXBMgd95hiXbMFs", + "type": "arrow" + }, + { + "id": "3Ix2mzMaMxFqECrKxFziA", + "type": "arrow" + }, + { + "id": "B3d0LCTbW1I9Q8IGFSGUO", + "type": "arrow" + }, + { + "id": "hAFPuLn58Wo3h9CZA-Fc_", + "type": "arrow" + } + ], + "updated": 1766008179070, + "link": null, + "locked": false + }, + { + "id": "t7oXYK0b_pQGBl0NZtLtz", + "type": "rectangle", + "x": 510.94140625, + "y": 129.88671875, + "width": 207.40625000000006, + "height": 95.125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 0, + "opacity": 40, + "groupIds": [], + "frameId": null, + "index": "a0", + "roundness": { + "type": 3 + }, + "seed": 1359546614, + "version": 285, + "versionNonce": 496860826, + "isDeleted": true, + "boundElements": [ + { + "id": "DzugdQdO2d2T6nlUTxjw7", + "type": "arrow" + } + ], + "updated": 1766007327887, + "link": null, + "locked": false + }, + { + "id": "hfbQ0qSPLyGdxYJH4MwTF", + "type": "text", + "x": 512.1442489624023, + "y": 153.97265625, + "width": 200.0396270751953, + "height": 49.95052083333342, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a1", + "roundness": null, + "seed": 1165091754, + "version": 1304, + "versionNonce": 871550982, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "text": "Peer Review happens \non GitHub", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Peer Review happens \non GitHub", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "c-SITXKsRcTZsmlc8WTg7", + "type": "rectangle", + "x": 512.26171875, + "y": 273.82421875, + "width": 223.39062500000006, + "height": 146.3515625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 40, + "groupIds": [], + "frameId": null, + "index": "a2", + "roundness": { + "type": 3 + }, + "seed": 420430122, + "version": 359, + "versionNonce": 1432787802, + "isDeleted": true, + "boundElements": [ + { + "id": "DzugdQdO2d2T6nlUTxjw7", + "type": "arrow" + }, + { + "id": "gqQNSG8vDT0MpL6oerH4j", + "type": "arrow" + } + ], + "updated": 1766007327887, + "link": null, + "locked": false + }, + { + "id": "-3G4gEdGb2s-LglgfK1s8", + "type": "text", + "x": 523.1355514526367, + "y": 322.0546875, + "width": 201.64295959472656, + "height": 67.89583333333337, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a3", + "roundness": null, + "seed": 1621199850, + "version": 606, + "versionNonce": 241622854, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "text": "software-review\n(GitHub Repo)", + "fontSize": 27.15833333333335, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "software-review\n(GitHub Repo)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "xWZa74sDK0eM3b9BE5vFf", + "type": "rectangle", + "x": 510.94140625, + "y": 502.5859375, + "width": 223.39062500000006, + "height": 185, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "groupIds": [], + "frameId": null, + "index": "a4", + "roundness": { + "type": 3 + }, + "seed": 110082038, + "version": 335, + "versionNonce": 393093146, + "isDeleted": true, + "boundElements": [ + { + "type": "text", + "id": "ptBuVqkPXiB0QFKWpN8-5" + }, + { + "id": "gqQNSG8vDT0MpL6oerH4j", + "type": "arrow" + } + ], + "updated": 1766007327887, + "link": null, + "locked": false + }, + { + "id": "ptBuVqkPXiB0QFKWpN8-5", + "type": "text", + "x": 523.616828918457, + "y": 507.5859375, + "width": 198.03977966308594, + "height": 175, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "groupIds": [], + "frameId": null, + "index": "a5", + "roundness": null, + "seed": 689685226, + "version": 210, + "versionNonce": 1981220486, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "text": "pyosMeta package\nconverts issue\nmetadata\ninto a review yml file\nthat is used to\npopulate packages on\nthe website", + "fontSize": 20, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "xWZa74sDK0eM3b9BE5vFf", + "originalText": "pyosMeta package converts issue metadata\ninto a review yml file\nthat is used to populate packages on the website", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "e_6TYwnxx1tU4-3uOPxko", + "type": "rectangle", + "x": 511.91796875, + "y": 769.796875, + "width": 223.39062500000006, + "height": 146.3515625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "groupIds": [], + "frameId": null, + "index": "a6", + "roundness": { + "type": 3 + }, + "seed": 250225078, + "version": 460, + "versionNonce": 1604783322, + "isDeleted": true, + "boundElements": [ + { + "type": "text", + "id": "7JdPq7TQHExQgA1jrFGQk" + }, + { + "id": "xkBDocLI21YXCdlIMO-DT", + "type": "arrow" + } + ], + "updated": 1766007327887, + "link": null, + "locked": false + }, + { + "id": "7JdPq7TQHExQgA1jrFGQk", + "type": "text", + "x": 534.4833679199219, + "y": 805.47265625, + "width": 178.25982666015625, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a7", + "roundness": null, + "seed": 199785206, + "version": 281, + "versionNonce": 465585606, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "text": "pyOpenSci Website\npyopensci.github.io\n", + "fontSize": 20, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "e_6TYwnxx1tU4-3uOPxko", + "originalText": "pyOpenSci Website\npyopensci.github.io\n", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "DzugdQdO2d2T6nlUTxjw7", + "type": "arrow", + "x": 605.896484375, + "y": 221.404296875, + "width": 0.466796875, + "height": 53.498046875, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 70, + "groupIds": [], + "frameId": null, + "index": "a8", + "roundness": null, + "seed": 1889070954, + "version": 1281, + "versionNonce": 866410906, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.466796875, + 53.498046875 + ] + ], + "startBinding": { + "elementId": "t7oXYK0b_pQGBl0NZtLtz", + "mode": "inside", + "fixedPoint": [ + 0.45782168148259744, + 0.9620770367936925 + ] + }, + "endBinding": { + "elementId": "c-SITXKsRcTZsmlc8WTg7", + "mode": "inside", + "fixedPoint": [ + 0.4170630202140308, + 0.007366679122404313 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "mC9gjN9IrL6e8IbsbVqdW", + "type": "text", + "x": 703.9799346923828, + "y": 432.00325520833326, + "width": 165.97372436523438, + "height": 74.92578125000013, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a9", + "roundness": null, + "seed": 1052142902, + "version": 1704, + "versionNonce": 276798726, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "text": "Review issues are \nparsed by \npyosMeta", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Review issues are \nparsed by \npyosMeta", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "IOIkmJdzOWFS0-O5F_aRk", + "type": "text", + "x": 724.7080841064453, + "y": 690.8118489583333, + "width": 311.4080505371094, + "height": 74.92578125000013, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aA", + "roundness": null, + "seed": 538692534, + "version": 1898, + "versionNonce": 1855528538, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "text": "A cron job is run that \nupdates the yaml file daily\nA pr is opened that can be merged", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "A cron job is run that \nupdates the yaml file daily\nA pr is opened that can be merged", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "gqQNSG8vDT0MpL6oerH4j", + "type": "arrow", + "x": 617.1758346255489, + "y": 431.17578125000006, + "width": 0.07867365741549293, + "height": 60.41015625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 70, + "groupIds": [], + "frameId": null, + "index": "aB", + "roundness": null, + "seed": 2146828778, + "version": 648, + "versionNonce": 970067014, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.07867365741549293, + 60.41015625 + ] + ], + "startBinding": { + "elementId": "c-SITXKsRcTZsmlc8WTg7", + "mode": "orbit", + "fixedPoint": [ + 0.4697139259984611, + 0.9936208829338601 + ] + }, + "endBinding": { + "elementId": "xWZa74sDK0eM3b9BE5vFf", + "mode": "orbit", + "fixedPoint": [ + 0.47520237126393894, + -0.05945945945945915 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false, + "moveMidPointsWithElement": false + }, + { + "id": "xkBDocLI21YXCdlIMO-DT", + "type": "arrow", + "x": 617.6486851409333, + "y": 687.796875, + "width": 1.222408609066747, + "height": 85.177734375, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f0fc", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 70, + "groupIds": [], + "frameId": null, + "index": "aC", + "roundness": null, + "seed": 1397407030, + "version": 1172, + "versionNonce": 223888154, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1.222408609066747, + 85.177734375 + ] + ], + "startBinding": null, + "endBinding": { + "elementId": "e_6TYwnxx1tU4-3uOPxko", + "mode": "inside", + "fixedPoint": [ + 0.47877177030146173, + 0.021713019804622858 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false, + "moveMidPointsWithElement": false + }, + { + "id": "J9yRZCbSX1xgUz-yDNz3Q", + "type": "text", + "x": 681.9450073242188, + "y": 921.08984375, + "width": 310.3092041015625, + "height": 74.92578125000013, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aD", + "roundness": null, + "seed": 1017712246, + "version": 2100, + "versionNonce": 1167364998, + "isDeleted": true, + "boundElements": [], + "updated": 1766007327887, + "link": null, + "locked": false, + "text": "Once the data pr is merged,\nthe website's our packages and \ncontributor pages will be updated.", + "fontSize": 19.98020833333337, + "fontFamily": 6, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Once the data pr is merged,\nthe website's our packages and \ncontributor pages will be updated.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "ebKzvBzlcwqYiyP_zbYRH", + "type": "image", + "x": 1105.4429065743943, + "y": 82.875, + "width": 473.11418685121106, + "height": 484, + "angle": 0, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aE", + "roundness": null, + "seed": 1503773850, + "version": 7, + "versionNonce": 1555654406, + "isDeleted": true, + "boundElements": null, + "updated": 1766007923594, + "link": null, + "locked": false, + "status": "saved", + "fileId": "d4d2f4b1ece39dfffb353dd28d589b7780ea6ec2", + "scale": [ + 1, + 1 + ], + "crop": null + }, + { + "id": "B9AQda_WTPlQDzG4te1Jl", + "type": "rectangle", + "x": 403.6328125, + "y": 239.40234375, + "width": 228.10546875, + "height": 121.703125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aF", + "roundness": { + "type": 3 + }, + "seed": 650390918, + "version": 167, + "versionNonce": 2135769818, + "isDeleted": true, + "boundElements": null, + "updated": 1766007698804, + "link": null, + "locked": false + }, + { + "id": "ZciCdae1JWl_N6mQadR0F", + "type": "rectangle", + "x": 692.5733433668474, + "y": -8.17578125, + "width": 290.30253201630507, + "height": 183.00000000000003, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 30, + "groupIds": [], + "frameId": null, + "index": "aG", + "roundness": { + "type": 3 + }, + "seed": 1756720026, + "version": 500, + "versionNonce": 1223087450, + "isDeleted": false, + "boundElements": [ + { + "id": "B3d0LCTbW1I9Q8IGFSGUO", + "type": "arrow" + } + ], + "updated": 1766008164670, + "link": null, + "locked": false + }, + { + "id": "44TkSY7Tm74Qbr4ZdReBT", + "type": "rectangle", + "x": 690.603515625, + "y": 199.60546875, + "width": 228.10546875, + "height": 121.703125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aH", + "roundness": { + "type": 3 + }, + "seed": 1493504262, + "version": 398, + "versionNonce": 228263706, + "isDeleted": true, + "boundElements": [], + "updated": 1766007613441, + "link": null, + "locked": false + }, + { + "id": "plPzLbYSgALQtggiPHCnm", + "type": "rectangle", + "x": 698.150390625, + "y": 355.1875, + "width": 228.10546875, + "height": 121.703125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aI", + "roundness": { + "type": 3 + }, + "seed": 67907910, + "version": 379, + "versionNonce": 242233030, + "isDeleted": true, + "boundElements": [], + "updated": 1766007615053, + "link": null, + "locked": false + }, + { + "id": "kEQXp1ckQfpnal9T5ynL7", + "type": "rectangle", + "x": 699.494140625, + "y": 498.9765625, + "width": 228.10546875, + "height": 121.703125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aJ", + "roundness": { + "type": 3 + }, + "seed": 1847322566, + "version": 366, + "versionNonce": 1702585690, + "isDeleted": true, + "boundElements": [], + "updated": 1766007616361, + "link": null, + "locked": false + }, + { + "id": "Vk00JAtQb_1ImY2vvgOzk", + "type": "rectangle", + "x": 700.931640625, + "y": 641.109375, + "width": 228.10546875, + "height": 121.703125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aK", + "roundness": { + "type": 3 + }, + "seed": 109635590, + "version": 378, + "versionNonce": 1291918470, + "isDeleted": true, + "boundElements": [], + "updated": 1766007617951, + "link": null, + "locked": false + }, + { + "id": "-T3kwGkJWpE-CawXh0yQw", + "type": "rectangle", + "x": 687.404296875, + "y": 643.609375, + "width": 228.10546875, + "height": 121.703125, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aL", + "roundness": { + "type": 3 + }, + "seed": 1629538118, + "version": 317, + "versionNonce": 2090269082, + "isDeleted": true, + "boundElements": [], + "updated": 1766007359919, + "link": null, + "locked": false + }, + { + "id": "P__pWln036jjxl1no2P0V", + "type": "text", + "x": 341.62097930908203, + "y": 457.26171875, + "width": 173.27981567382812, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aN", + "roundness": null, + "seed": 1594109766, + "version": 558, + "versionNonce": 264807834, + "isDeleted": false, + "boundElements": [], + "updated": 1766007989670, + "link": null, + "locked": false, + "text": "pyopensci.github.io", + "fontSize": 20, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "pyopensci.github.io", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "_o5tDnphJir5GWC4618uz", + "type": "text", + "x": 772.2010726928711, + "y": 6.375, + "width": 125.41194152832031, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aO", + "roundness": null, + "seed": 1133217114, + "version": 353, + "versionNonce": 1579741402, + "isDeleted": false, + "boundElements": [], + "updated": 1766007786640, + "link": null, + "locked": false, + "text": "handbook", + "fontSize": 28, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "handbook", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "6KZznW_bSdJlJcuqwUZik", + "type": "text", + "x": 705.264009308815, + "y": 208.671875, + "width": 259.2860682964325, + "height": 31.41796875, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aP", + "roundness": null, + "seed": 9021254, + "version": 477, + "versionNonce": 1347011994, + "isDeleted": false, + "boundElements": [], + "updated": 1766007786640, + "link": null, + "locked": false, + "text": "python-package-guide", + "fontSize": 25.134375000000006, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "python-package-guide", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "paO66pSVm7Sqlt1_zt04u", + "type": "text", + "x": 313.421875, + "y": 395.5078125, + "width": 249.56387329101562, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aPV", + "roundness": null, + "seed": 762885722, + "version": 594, + "versionNonce": 1686761990, + "isDeleted": false, + "boundElements": [ + { + "id": "bfqA7EBnn1VBpHmaA7SEd", + "type": "arrow" + } + ], + "updated": 1766008040478, + "link": null, + "locked": false, + "text": "pyOpenSci Website", + "fontSize": 28, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "pyOpenSci Website", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "LZJ_GuzpVhfiJuwCOfX-n", + "type": "text", + "x": 794.4981822967529, + "y": 304.83203125, + "width": 58.831939697265625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aQ", + "roundness": null, + "seed": 952273222, + "version": 572, + "versionNonce": 1246873862, + "isDeleted": false, + "boundElements": [], + "updated": 1766007815980, + "link": null, + "locked": false, + "text": "SPHINX", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "SPHINX", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "BNedz3HEF_vMfRoAD155E", + "type": "text", + "x": 794.4981822967529, + "y": 136.31640625, + "width": 58.831939697265625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aR", + "roundness": null, + "seed": 1062011994, + "version": 783, + "versionNonce": 1350481990, + "isDeleted": false, + "boundElements": [], + "updated": 1766007815980, + "link": null, + "locked": false, + "text": "SPHINX", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "SPHINX", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "6P7TQy9LROLNAOchjo1eG", + "type": "text", + "x": 696.3385009765625, + "y": 376.78515625, + "width": 275.8558349609375, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aS", + "roundness": null, + "seed": 1928018970, + "version": 607, + "versionNonce": 1309964294, + "isDeleted": false, + "boundElements": [], + "updated": 1766007890908, + "link": null, + "locked": false, + "text": "software-peer-review", + "fontSize": 28, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "software-peer-review", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Gxby9RrT_BJeUMJSoRkE-", + "type": "text", + "x": 794.2520885467529, + "y": 467.1484375, + "width": 58.831939697265625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aT", + "roundness": null, + "seed": 86026458, + "version": 858, + "versionNonce": 630420314, + "isDeleted": false, + "boundElements": [], + "updated": 1766007890908, + "link": null, + "locked": false, + "text": "SPHINX", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "SPHINX", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Et7YLAWtolBBMAqsPX5c9", + "type": "text", + "x": 794.4981822967529, + "y": 622.46484375, + "width": 58.831939697265625, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aU", + "roundness": null, + "seed": 497120454, + "version": 931, + "versionNonce": 1517674182, + "isDeleted": false, + "boundElements": [], + "updated": 1766007815980, + "link": null, + "locked": false, + "text": "SPHINX", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "SPHINX", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "NT6yFwUF5uaEpw-5ylsXq", + "type": "text", + "x": 787.153076171875, + "y": 520.40625, + "width": 95.5079345703125, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aV", + "roundness": null, + "seed": 676171910, + "version": 636, + "versionNonce": 1192121094, + "isDeleted": false, + "boundElements": [], + "updated": 1766007844159, + "link": null, + "locked": false, + "text": "lessons", + "fontSize": 28, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "lessons", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "fAamY3oai878pECy9peis", + "type": "text", + "x": 789.0981731414795, + "y": 808.2265625, + "width": 67.47196960449219, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aW", + "roundness": null, + "seed": 1638692442, + "version": 1090, + "versionNonce": 182557190, + "isDeleted": false, + "boundElements": [], + "updated": 1766007918564, + "link": null, + "locked": false, + "text": "QUARTO", + "fontSize": 16, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "QUARTO", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Qf8tQwZ3esSTze903Ykv-", + "type": "text", + "x": 788.7210845947266, + "y": 679.1015625, + "width": 92.45591735839844, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aX", + "roundness": null, + "seed": 1950391066, + "version": 739, + "versionNonce": 1092710746, + "isDeleted": false, + "boundElements": [], + "updated": 1766007918564, + "link": null, + "locked": false, + "text": "metrics", + "fontSize": 28, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "metrics", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "YfS9EHccEwHsSkcoHfbPn", + "type": "text", + "x": 717.4501876831055, + "y": 45.95703125, + "width": 218.46803283691406, + "height": 59.09765624999996, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aY", + "roundness": null, + "seed": 123613894, + "version": 526, + "versionNonce": 667691674, + "isDeleted": false, + "boundElements": [], + "updated": 1766007795355, + "link": null, + "locked": false, + "text": "pyOS governance, \nstructure, code of conduct and \ncommunity guide", + "fontSize": 15.75937499999999, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "pyOS governance, \nstructure, code of conduct and \ncommunity guide", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "5pUvKlwrEIMuvvE3TZQbd", + "type": "text", + "x": 717.4501876831055, + "y": 249.2578125, + "width": 150.2075958251953, + "height": 39.39843749999997, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aZ", + "roundness": null, + "seed": 437396058, + "version": 844, + "versionNonce": 208117830, + "isDeleted": false, + "boundElements": [], + "updated": 1766007797215, + "link": null, + "locked": false, + "text": "Packaging guidelines\nand tutorials.", + "fontSize": 15.75937499999999, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Packaging guidelines\nand tutorials.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "7NuDQOzFI1zneiCqVBk_5", + "type": "text", + "x": 717.0790939331055, + "y": 417.90234375, + "width": 238.76980590820312, + "height": 19.699218749999986, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aa", + "roundness": null, + "seed": 1624917914, + "version": 885, + "versionNonce": 1175684934, + "isDeleted": false, + "boundElements": [], + "updated": 1766007890908, + "link": null, + "locked": false, + "text": "Software peer review guidebook. ", + "fontSize": 15.75937499999999, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Software peer review guidebook. ", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "v2m1nRvsatE2D3G6XDUIY", + "type": "text", + "x": 721.3720626831055, + "y": 558.03515625, + "width": 159.5630645751953, + "height": 39.39843749999997, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ab", + "roundness": null, + "seed": 1177951130, + "version": 1044, + "versionNonce": 1757634950, + "isDeleted": false, + "boundElements": [], + "updated": 1766007840809, + "link": null, + "locked": false, + "text": "Coding and publishing\nfocused tutorials", + "fontSize": 15.75937499999999, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Coding and publishing\nfocused tutorials", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "jl63DcjECRfs1IAlhWYkf", + "type": "text", + "x": 717.3290939331055, + "y": 732.609375, + "width": 255.6065216064453, + "height": 59.09765624999996, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ac", + "roundness": null, + "seed": 577844038, + "version": 1377, + "versionNonce": 1894541638, + "isDeleted": false, + "boundElements": [], + "updated": 1766007918564, + "link": null, + "locked": false, + "text": "Calculated metrics and dashboards \nthat track peer review, contributions\nand community health.", + "fontSize": 15.75937499999999, + "fontFamily": 6, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Calculated metrics and dashboards \nthat track peer review, contributions\nand community health.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Ia09lvtc4atchtKDutoc_", + "type": "arrow", + "x": 587.6102503831526, + "y": 443.19531250000006, + "width": 97.96309298369488, + "height": 323.4715401306669, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ad", + "roundness": null, + "seed": 138096154, + "version": 899, + "versionNonce": 1907207322, + "isDeleted": true, + "boundElements": null, + "updated": 1766008126426, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 2.9793166797347226 + ], + [ + 48.98154649184744, + 2.9793166797347226 + ], + [ + 48.98154649184744, + -320.49222345093216 + ], + [ + 97.96309298369488, + -320.49222345093216 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5697802920668336 + ] + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": [ + { + "index": 3, + "start": [ + 10, + 2.9793166797347226 + ], + "end": [ + 48.98154649184744, + 2.9793166797347226 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "eGsTm2AXBMgd95hiXbMFs", + "type": "arrow", + "x": 587.6102503831526, + "y": 445.55078125, + "width": 97.96309298369499, + "height": 137.78671874999998, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ae", + "roundness": null, + "seed": 1750891930, + "version": 1318, + "versionNonce": 2052502854, + "isDeleted": false, + "boundElements": [], + "updated": 1766008084356, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 48.98154649184744, + 0 + ], + [ + 48.98154649184744, + 137.78671874999998 + ], + [ + 97.96309298369499, + 137.78671874999998 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5856466254440205 + ] + }, + "endBinding": { + "elementId": "PNf-TYdL_77bSliTYjs3x", + "mode": "orbit", + "fixedPoint": [ + -0.024418011881240348, + 0.4993264044204707 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "oBWVT3DtwEM6eSL3o_OlU", + "type": "arrow", + "x": 579.1996564415763, + "y": 446.63408498158344, + "width": 106.37368692527127, + "height": 157.83946266616204, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "af", + "roundness": null, + "seed": 1431152838, + "version": 1395, + "versionNonce": 1374131226, + "isDeleted": true, + "boundElements": [], + "updated": 1766008149970, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 57.02595789902921, + 0 + ], + [ + 57.02595789902921, + -157.83946266616204 + ], + [ + 106.37368692527127, + -157.83946266616204 + ] + ], + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": [ + { + "index": 2, + "start": [ + 57.02595789902921, + 0 + ], + "end": [ + 57.02595789902921, + -157.83946266616204 + ] + } + ], + "startIsSpecial": false, + "endIsSpecial": false + }, + { + "id": "82Z4o2Pq0jR-_8ODsdwJt", + "type": "arrow", + "x": 587.6102503831526, + "y": 446.5995873317745, + "width": 97.83809298369488, + "height": 8.983583441823725, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ag", + "roundness": null, + "seed": 282295066, + "version": 1228, + "versionNonce": 2133692314, + "isDeleted": true, + "boundElements": [], + "updated": 1766008142814, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 44.41904649184744, + 0 + ], + [ + 44.41904649184744, + -8.983583441823725 + ], + [ + 97.83809298369488, + -8.983583441823725 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5927113368486848 + ] + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "bfqA7EBnn1VBpHmaA7SEd", + "type": "arrow", + "x": 587.6102503831526, + "y": 446.8169545693196, + "width": 98.08809298369476, + "height": 334.0775766806804, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ah", + "roundness": null, + "seed": 1352829190, + "version": 2042, + "versionNonce": 787345690, + "isDeleted": true, + "boundElements": [], + "updated": 1766008148165, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 49.04404649184744, + 0 + ], + [ + 49.04404649184744, + 334.0775766806804 + ], + [ + 98.08809298369476, + 334.0775766806804 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5941755129521329 + ] + }, + "endBinding": { + "elementId": "lHWV13VxZ2B-t_iNmHbBx", + "mode": "orbit", + "fixedPoint": [ + -0.024383789461007235, + 0.648311519271097 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "3Ix2mzMaMxFqECrKxFziA", + "type": "arrow", + "x": 587.6102503831526, + "y": 444.89883887087063, + "width": 97.96309298369499, + "height": 167.51467337717304, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ai", + "roundness": null, + "seed": 1926365402, + "version": 126, + "versionNonce": 1666732698, + "isDeleted": false, + "boundElements": null, + "updated": 1766008158339, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 48.98154649184744, + 0 + ], + [ + 48.98154649184744, + -167.51467337717304 + ], + [ + 97.96309298369499, + -167.51467337717304 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5812551703971287 + ] + }, + "endBinding": { + "elementId": "fuIDlCFwDvrrsMrjz3ud9", + "mode": "orbit", + "fixedPoint": [ + -0.024418011881240348, + 0.5614352418467723 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "B3d0LCTbW1I9Q8IGFSGUO", + "type": "arrow", + "x": 587.6102503831526, + "y": 444.97789044313265, + "width": 97.96309298369488, + "height": 361.7536716931326, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aj", + "roundness": null, + "seed": 2090086854, + "version": 134, + "versionNonce": 991754394, + "isDeleted": false, + "boundElements": null, + "updated": 1766008164670, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 48.98154649184744, + 0 + ], + [ + 48.98154649184744, + -361.7536716931326 + ], + [ + 97.96309298369488, + -361.7536716931326 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5817876582934339 + ] + }, + "endBinding": { + "elementId": "ZciCdae1JWl_N6mQadR0F", + "mode": "orbit", + "fixedPoint": [ + -0.024112776252350563, + 0.4994535519125684 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "hAFPuLn58Wo3h9CZA-Fc_", + "type": "arrow", + "x": 587.6102503831526, + "y": 443.40125075190736, + "width": 98.08809298369476, + "height": 313.3581242480926, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ak", + "roundness": null, + "seed": 132171482, + "version": 94, + "versionNonce": 1145847962, + "isDeleted": false, + "boundElements": null, + "updated": 1766008170610, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 49.04404649184744, + 0 + ], + [ + 49.04404649184744, + 313.3581242480926 + ], + [ + 98.08809298369476, + 313.3581242480926 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5711674830282405 + ] + }, + "endBinding": { + "elementId": "lHWV13VxZ2B-t_iNmHbBx", + "mode": "orbit", + "fixedPoint": [ + -0.024383789461007235, + 0.49938293923397675 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "3uP3A2Opai0FcZAUxRIEw", + "type": "arrow", + "x": 587.6102503831526, + "y": 442.23304418403575, + "width": 484.88919049605875, + "height": 36.27149640621013, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "al", + "roundness": null, + "seed": 734749638, + "version": 143, + "versionNonce": 193640582, + "isDeleted": true, + "boundElements": null, + "updated": 1766008179070, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 237.94459524802937, + 0 + ], + [ + 237.94459524802937, + -36.27149640621013 + ], + [ + 484.88919049605875, + -36.27149640621013 + ] + ], + "startBinding": { + "elementId": "hec3FqQXdm0PkCrAcM13n", + "mode": "orbit", + "fixedPoint": [ + 1.024418011881241, + 0.5632984952272898 + ] + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + }, + { + "id": "iEabxXMaK1dU-5IwhCh0B", + "type": "arrow", + "x": 624.5800571807277, + "y": 446.01873614458214, + "width": 60.86828618611969, + "height": 11.159446950984375, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "am", + "roundness": null, + "seed": 506384134, + "version": 97, + "versionNonce": 1402073030, + "isDeleted": false, + "boundElements": null, + "updated": 1766008185430, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 34.93414309305979, + 0 + ], + [ + 34.93414309305979, + -11.159446950984375 + ], + [ + 60.86828618611969, + -11.159446950984375 + ] + ], + "startBinding": null, + "endBinding": { + "elementId": "dyRaJZ0LzKVmUFbvGCs_t", + "mode": "orbit", + "fixedPoint": [ + -0.02417816886282609, + 0.5546128508932691 + ] + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": true, + "fixedSegments": null, + "startIsSpecial": null, + "endIsSpecial": null + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff", + "lockedMultiSelections": {} + }, + "files": {} +} diff --git a/images/diagrams/website-repositories-structure.svg b/images/diagrams/website-repositories-structure.svg new file mode 100644 index 00000000..80b6dbb7 --- /dev/null +++ b/images/diagrams/website-repositories-structure.svg @@ -0,0 +1,4 @@ + + +pyopensci.github.iohandbookpython-package-guidepyOpenSci WebsiteSPHINXSPHINXsoftware-peer-reviewSPHINXSPHINXlessonsQUARTOmetricspyOS governance, structure, code of conduct and community guidePackaging guidelinesand tutorials.Software peer review guidebook. Coding and publishingfocused tutorialsCalculated metrics and dashboards that track peer review, contributionsand community health.