-
Notifications
You must be signed in to change notification settings - Fork 17
Add governance document for the DANDI Archive Project #204
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
6c1ad6c
f49306c
0cb9fd8
c051cfe
28c50c3
5689ba4
6f635f6
726f856
f7f4194
c450e97
3d1fd85
03280c1
64914af
55f16bd
3faf19f
ecc2a71
3a05ed0
28392b5
101af76
dff3810
cfee9a7
48eb363
fd3646d
d876f9d
2451780
d869748
9da61f0
dd24798
63a0fc7
2666b00
d2f71ee
dc77de8
59e5097
c0f170b
f84bf5d
7aedf3e
e05ebd0
ee86f6f
5b40457
09adf62
c437b80
8f656ea
9b70617
062d8c0
2421a1f
7ee5839
08969df
14200c4
9b209c5
d503d82
cad86da
1196627
c9f1b39
01bb71c
5ae0931
2bbb432
7244d4e
a56639f
c1a6af9
94dbb90
266fd99
5e79ee9
07528ff
679f331
0790a31
ee0fd88
ca5ab3a
3d674f0
2105a78
755764c
8ce341f
0d2fc23
c42d74c
fc1200f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,288 @@ | ||
| # DANDI Project Governance | ||
|
|
||
| Version: 1.0 | ||
| Effective Date: YYYY-MM-DD | ||
| Status: Draft | ||
|
|
||
| ## 1. Purpose | ||
|
|
||
| This document defines the governance structure, roles, responsibilities, and decision‑making processes for the DANDI Project. It applies uniformly to all current and future repositories and services, including: | ||
|
|
||
| Sites: | ||
|
|
||
| - https://dandiarchive.org | ||
| - https://hub.dandiarchive.org | ||
| - https://about.dandiarchive.org | ||
|
|
||
| Code git repositories: | ||
|
|
||
| - https://github.com/dandi | ||
|
kabilar marked this conversation as resolved.
|
||
|
|
||
| Data git/git-annex repositories: | ||
|
|
||
| - https://github.com/dandisets | ||
| - https://github.com/dandizarrs | ||
|
|
||
| ## 2. Mission | ||
|
|
||
| DANDI (Distributed Archives for Neurophysiology Data Integration) enables FAIR (Findable, Accessible, Interoperable, Reusable) publishing, preservation, discovery, and computational reuse of neurophysiology data. DANDI provides: | ||
|
|
||
| - a cloud-based platform to store, process, and disseminate data. You can use DANDI to collaborate and publish datasets. | ||
| - open access to data to enable secondary uses of data outside the intent of the study; | ||
| - optimized data storage and access, achieved through partnerships with cloud providers, compression to reduce storage costs and bandwidth, and accessibility technologies that broaden who can use the data; | ||
| - facilities to encourage reproducible practices and publications through data standards such as NWB and BIDS; | ||
| - a platform that is not merely an endpoint to dump data, but rather a living repository that enables collaboration within and across labs. | ||
|
|
||
| ## 3. Core Principles | ||
|
|
||
| 1. Openness & Transparency: Designs, discussions, and decisions are public by default. | ||
| 2. FAIR & Reproducibility: Data and code follow standards and their evolution remain open, traceable, and citable. | ||
| 3. Sustainability: Architectural and process decisions consider long-term maintainability. | ||
| 4. Inclusivity & Respect: Guided by a project-wide [Code of Conduct](https://github.com/dandi/dandi-archive/blob/master/CODE_OF_CONDUCT.md) that applies across all DANDI repositories and instances, regardless of whether a `CODE_OF_CONDUCT.md` file is present in a given repository. | ||
| 5. Stewardship: Authority derives from consistent, high‑quality contribution. | ||
| 6. Accountability: Roles carry explicit responsibilities. | ||
| 7. Security & Privacy: Responsible handling of sensitive data and credentials. | ||
| 8. Pragmatism: Decisions follow the sociocracy principle of "good enough for now, safe enough to try" — preferring incremental, reversible progress over indefinite deliberation. | ||
|
|
||
| ## 4. Project Structure | ||
|
|
||
| The DANDI Project codebase includes the components listed in the table below: | ||
|
|
||
| | Domain | Primary Repos | | ||
| |--------|------------------------------| | ||
| | Archive | [dandi-archive](https://github.com/dandi/dandi-archive), [dandi-infrastructure](https://github.com/dandi/dandi-infrastructure) | | ||
| | Client | [dandi-cli](https://github.com/dandi/dandi-cli), [dandidav](https://github.com/dandi/dandidav) | | ||
| | Metadata | [dandi-schema](https://github.com/dandi/dandi-schema), [schema](https://github.com/dandi/schema) | | ||
| | JupyterHub | [dandi-hub](https://github.com/dandi/dandi-hub), [nebari](https://github.com/dandi/nebari), [nebari-deployments](https://github.com/dandi/nebari-deployments), [nebari-docker-images](https://github.com/dandi/nebari-docker-images) | | ||
| | Documentation & Support | [dandi-docs](https://github.com/dandi/dandi-docs), [dandi-about](https://github.com/dandi/dandi-about), [helpdesk](https://github.com/dandi/helpdesk) | | ||
|
|
||
| Multiple deployments of this codebase operate as separate instances, each serving distinct research communities and datasets. The DANDI Archive instance is available at https://dandiarchive.org/, and the EMBER-DANDI Archive instance is available at https://dandi.emberarchive.org/. This document governs over the DANDI Project codebase unless otherwise specified. | ||
|
|
||
| Contributing code to DANDI repositories does not grant rights or access to the separate instances. Similarly, using any DANDI instance (e.g. the DANDI Archive or EMBER-DANDI Archive service) does not require contributing to the codebase. | ||
|
|
||
| ## 5. Roles & Responsibilities | ||
|
|
||
| The responsibilities, expectations, and paths to role described in the subsections below include, but are not limited to, the items listed. | ||
|
|
||
| ### 5.1 Contributors | ||
| Anyone submitting issues, pull requests, documentation, or feedback. | ||
|
|
||
| Responsibilities: | ||
| - Follow [Code of Conduct](https://github.com/dandi/dandi-archive/blob/master/CODE_OF_CONDUCT.md) and contribution guidelines. | ||
| - Strive to provide sufficient context and steps to reproduce. | ||
| - Where applicable, write tests and documentation for code changes. | ||
|
|
||
| ### 5.2 Reviewers | ||
| Contributors granted reviewer status for designated repositories. | ||
|
|
||
| Responsibilities: | ||
|
kabilar marked this conversation as resolved.
|
||
| - Perform timely, constructive reviews. | ||
| - Enforce style, testing, and security practices. | ||
| - Identify architectural and performance impacts. | ||
|
|
||
| Path to role: | ||
|
kabilar marked this conversation as resolved.
|
||
| - Consistent high‑quality reviews. | ||
| - Sponsored by at least one Maintainer. | ||
|
|
||
| ### 5.3 Maintainers | ||
| Individuals with merge rights for designated repositories. | ||
|
|
||
| Responsibilities: | ||
|
kabilar marked this conversation as resolved.
|
||
| - Merge approval. | ||
| - Release planning and tagging. | ||
| - Triage (labels, prioritization, assignment). | ||
| - Manage vulnerability reports. | ||
| - Escalate policy or security concerns. | ||
| - Facilitate cross‑repository alignment. | ||
| - Onboard and mentor reviewers. | ||
|
|
||
| Expectations: | ||
|
kabilar marked this conversation as resolved.
|
||
| - Active presence. | ||
| - Follow the [Conflict of Interest](#63-conflict-of-interest) policy. | ||
| - Avoid bias (e.g., favoring contributions from one's own institution, affiliated collaborators, or preferred technologies over others on non-technical grounds). | ||
|
|
||
| Path to role: | ||
|
kabilar marked this conversation as resolved.
|
||
| - Demonstrated sustained contributions and review quality. | ||
| - Nomination and consensus of existing repository Maintainers. | ||
|
|
||
| Maintainers for the respective DANDI repositories: | ||
| | Repository | Maintainers | | ||
| | -- | -- | | ||
| | [dandi/dandi-archive](https://github.com/dandi/dandi-archive) | [@dandi/archive-maintainers](https://github.com/orgs/dandi/teams/archive-maintainers) | | ||
|
kabilar marked this conversation as resolved.
|
||
| | [dandi/dandi-infrastructure](https://github.com/dandi/dandi-infrastructure) | [@dandi/archive-admin](https://github.com/orgs/dandi/teams/archive-admin) | | ||
| | [dandi/dandi-cli](https://github.com/dandi/dandi-cli) | [@dandi/dandi-cli-maintainers](https://github.com/orgs/dandi/teams/dandi-cli-maintainers) | | ||
| | [dandi/dandi-schema](https://github.com/dandi/dandi-schema) | [@dandi/dandi-schema-maintainers](https://github.com/orgs/dandi/teams/dandi-schema-maintainers) | | ||
| | [dandi/dandi-hub](https://github.com/dandi/dandi-hub) | [@dandi/dandi-hub-maintainers](https://github.com/orgs/dandi/teams/dandi-hub-maintainers) | | ||
| | [dandi/nebari-deployments](https://github.com/dandi/nebari-deployments) (Private) | [@dandi/dandi-hub-maintainers](https://github.com/orgs/dandi/teams/dandi-hub-maintainers) | | ||
| | [dandi/nebari](https://github.com/dandi/nebari) | [@dandi/dandi-hub-maintainers](https://github.com/orgs/dandi/teams/dandi-hub-maintainers) | | ||
| | [dandi/dandidav](https://github.com/dandi/dandidav) | [@dandi/dandi-dav-maintainers](https://github.com/orgs/dandi/teams/dandi-dav-maintainers) | | ||
| | [dandi/dandi-about](https://github.com/dandi/dandi-about) | [@dandi/dandi-docs-maintainers](https://github.com/orgs/dandi/teams/dandi-docs-maintainers) | | ||
| | [dandi/dandi-docs](https://github.com/dandi/dandi-docs) | [@dandi/dandi-docs-maintainers](https://github.com/orgs/dandi/teams/dandi-docs-maintainers) | | ||
| | [dandi/example-notebooks](https://github.com/dandi/example-notebooks) | [@dandi/dandi-docs-maintainers](https://github.com/orgs/dandi/teams/dandi-docs-maintainers) | | ||
|
|
||
| ### 5.4 Project Leadership | ||
| - Current leadership team: | ||
| - [Satrajit Ghosh](https://satra.cogitatum.org/) ([@satra](https://github.com/satra)) | ||
| - [Yaroslav O. Halchenko](https://centerforopenneuroscience.org/whoweare) ([@yarikoptic](https://github.com/yarikoptic)) | ||
|
|
||
| - Responsibilities: | ||
| - Approve or amend governance document and Code of Conduct. | ||
| - Strategic project oversight. | ||
| - Resolve escalated disputes. | ||
| - Approve major architectural shifts. | ||
| - Oversee risk, sustainability, funding alignment. | ||
|
|
||
| ### 5.5 DANDI Administrators | ||
|
|
||
| Administrators are scoped by DANDI service. Authoritative per-service membership lives in the corresponding [GitHub team](https://github.com/orgs/dandi/teams) and may evolve independently of this document. | ||
|
|
||
| Responsibilities for each service: | ||
| - Monitor service health and performance. | ||
| - Manage user accounts and permissions. | ||
| - Respond to data access requests and operational issues. | ||
|
|
||
| | Service/Repository | Administrators | | ||
| | -- | -- | | ||
| | `dandi-archive` & `dandi-infrastructure`| @satra, @yarikoptic, @waxlamp, @mvandenburgh, @jjnesbitt, @danlamanna, @brianhelba | | ||
| | `dandi-cli` & `dandi-schema` | @satra, @yarikoptic, @CodyCBakerPhD, @candleindark, @asmacdo | | ||
| | `dandi-hub` | @satra, @yarikoptic, @asmacdo, @kabilar | | ||
| | `dandi-docs`, `dandi-about`, `helpdesk` | @satra, @yarikoptic, @kabilar, @bendichter, @CodyCBakerPhD | | ||
|
|
||
| ## 6. Decision-Making Model | ||
|
|
||
| ### 6.1 Roadmap | ||
| - Project targets are discussed during the biweekly Engineering Core and Scientific Core meetings. | ||
|
kabilar marked this conversation as resolved.
|
||
| - Project Leadership provides guidance on prioritization of targets. | ||
| - Public notes of these meetings are available on [Google Drive](https://drive.google.com/drive/folders/1-jXLpcrh3L650FiZyTFgcs096nZjO2C3). | ||
|
|
||
| ### 6.2 Consensus Process | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. could have a reference to sociocracy. one consideration is whether relevant voices have been heard. i.e. should the change be announced somewhere on a project roadmap or board.
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Thanks. I have update the
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
We welcome input from the broader community. Currently, changes are announced through pull requests and the subsequent release notes. Using GitHub project boards and Google Docs/Sheets project roadmaps haven't worked for our team in the past. So we currently use our Google Docs meeting minutes that are public to also track developments. Is there a different tool or process that you would like us to try out? |
||
| 1. Open a GitHub issue describing the bug/feature request, context, and possible solutions. | ||
| 2. For major architectural changes, create a design document and submit as a PR for discussion and refinement. | ||
| For reference, see [previous design documents](https://github.com/dandi/dandi-archive/tree/master/doc). | ||
| 3. Collect feedback during a 7-day review period. | ||
| 4. Summarize consensus in the GitHub issue and resolve all suggestions in the design document. | ||
| 5. Implement via pull request(s) referencing the proposed design. | ||
|
|
||
| ### 6.3 Conflict of Interest | ||
| - Participants should disclose direct commercial interest in a technology choice. | ||
| - Conflicted member recuses themselves from final decision phase. | ||
|
|
||
| ## 7. Pull Request Workflow | ||
|
|
||
| ### 7.1 Pull Request Requirements | ||
|
kabilar marked this conversation as resolved.
|
||
|
|
||
| Requirements include, but are not limited to, the following. | ||
|
|
||
| - Link the associated issue. | ||
| - Add a clear description (problem, approach, alternatives considered). | ||
| - Major architectural changes require a design document. | ||
| - Add or update tests. | ||
| - Update documentation. | ||
| - Ensure CI passes. | ||
| - Large pull requests should be split unless justified. | ||
| - No introduction of unreviewed secrets or credentials. | ||
| - Large binary additions are discouraged in code repositories; when unavoidable, the contributor must document the binary's origin and licensing in the pull request description so its provenance can be verified during review. | ||
|
|
||
| ### 7.2 Merge Policy | ||
| - All pull requests require: | ||
| - All comments must be resolved or addressed. | ||
| - If a comment cannot be resolved, the Project Leadership would be enlisted to decide on the path forward. | ||
| - Approval by at least 1 listed Maintainer for that repository. | ||
| - 24-hour waiting period (unless addressing a critical issue or trivial issue [e.g. typos]). | ||
|
|
||
| ### 7.3 Draft vs Ready for Review | ||
| - Open as a Draft for early feedback. | ||
| - Convert to “Ready” only when tests and documentation are updated. | ||
|
|
||
| ### 7.4 Reverts | ||
| - Any Maintainer may revert a merged pull request causing regression, security issue, or service degradation, with immediate notice in original pull request thread. | ||
|
kabilar marked this conversation as resolved.
|
||
| - All changes (including reverts) must be submitted through a pull request, and a new release must be made if the prior change was already released. | ||
| - Follow-up issue required to track remediation. | ||
|
|
||
| ## 8. Releases | ||
|
|
||
| ### 8.1 Release Approach | ||
| - Releases generally follow [Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html) for APIs and libraries. | ||
| - Each repository has a release approach that is documented n the table below. | ||
|
|
||
| | Repository | Approach | Tagging | Publishing | | ||
| | -- | -- | -- | -- | | ||
| | [dandi-archive](https://github.com/dandi/dandi-archive) | [`auto`](https://github.com/intuit/auto) creates a release upon merge of a `release`-labeled pull request | `v{version}` | [GitHub Release](https://github.com/dandi/dandi-archive/releases) | | ||
| | [dandi-cli](https://github.com/dandi/dandi-cli) | [`auto`](https://github.com/intuit/auto) creates a release upon merge of a `release`-labeled pull request | `{version}` | [GitHub Release](https://github.com/dandi/dandi-cli/releases) + [PyPI](https://pypi.org/project/dandi/) | | ||
| | [dandi-schema](https://github.com/dandi/dandi-schema) | [`auto`](https://github.com/intuit/auto) creates a release upon merge of a `release`-labeled pull request | `{version}` | [GitHub Release](https://github.com/dandi/dandi-schema/releases) + [PyPI](https://pypi.org/project/dandischema/) + [`dandi/schema` release for the JSON schema](https://github.com/dandi/schema/tree/master/releases) | | ||
| | [dandidav](https://github.com/dandi/dandidav) | merge of a `release`-labeled pull request | `v{version}` | [GitHub Release](https://github.com/dandi/dandidav/releases) + https://webdav.dandiarchive.org | | ||
| | [dandi-hub](https://github.com/dandi/dandi-hub), [nebari-deployments](https://github.com/dandi/nebari-deployments) | ad-hoc | - | https://hub.dandiarchive.org | | ||
| | [dandi-docs](https://github.com/dandi/dandi-docs), [dandi-about](https://github.com/dandi/dandi-about) | continuous deployment from `master` | - | https://docs.dandiarchive.org, https://about.dandiarchive.org | | ||
|
|
||
| ### 8.2 Example of the `dandi-archive` release flow | ||
| - Once a pull request is merged the changes are deployed to the sandbox environment (https://sandbox.dandiarchive.org) for review and testing prior to release. | ||
| - New releases are created with a GitHub Actions workflow built around [`auto`](https://github.com/intuit/auto). | ||
| - When a pull request is merged that has the "`release`" label, `auto`: | ||
| - Updates the changelog based on the pull requests since the last release and commits the results. | ||
| - Tags the new commit with the next version number. | ||
| - Creates a GitHub release for the tag. | ||
|
|
||
| ## 9. Security | ||
|
kabilar marked this conversation as resolved.
kabilar marked this conversation as resolved.
|
||
|
|
||
| ### 9.1 Reporting | ||
| - Security reports via help@dandiarchive.org. | ||
| - Acknowledge within 48 hours. | ||
|
|
||
| ### 9.2 Handling | ||
| - Initial assessment within 5 business days. | ||
| - Coordinate and address issue within 30 days. | ||
| - User advisory via email when appropriate. | ||
|
|
||
| ### 9.3 Hardening Practices | ||
| - Mandatory dependency scanning. | ||
| - Principle of least privilege enforced for service accounts. | ||
|
|
||
| ## 10. Documentation | ||
|
|
||
| - User and developer documentation is available at https://docs.dandiarchive.org. | ||
| - Design documents for major decisions are available at https://github.com/dandi/dandi-archive/tree/master/doc. | ||
| - DEVELOPMENT.md and CODE_OF_CONDUCT.md are maintained in relevant repositories. | ||
|
|
||
| ## 11. Communication | ||
|
|
||
| Communication channels include: | ||
|
|
||
| - GitHub Issues and Discussions for user support and team discussions. | ||
| - https://github.com/dandi/helpdesk for generic support requests and questions. | ||
| - individual repositories for targeted discussions. | ||
| - Slack for user support and team discussions. | ||
| - Email (info@dandiarchive.org, help@dandiarchive.org) for user support. | ||
| - Email announcements for critical notifications to users. | ||
| - GitHub Releases for release announcements. | ||
| - Email newsletter to highlight major changes. | ||
|
|
||
| ## 12. Community | ||
|
|
||
| - Outreach events are hosted in collaboration with the Neurodata Without Borders team and can be found at https://nwb.org/events. | ||
| - Code of Conduct is available at https://github.com/dandi/dandi-archive/blob/master/CODE_OF_CONDUCT.md | ||
| - Instances of Code of Conduct violation can be reported to community@dandiarchive.org. | ||
| - Enforcement of Code of Conduct is separate from primary technical decision flow where possible. | ||
|
|
||
| ## 13. Amendments to Project Governance | ||
|
|
||
| Process | ||
|
|
||
| 1. Proposal pull request. | ||
| 2. Minimum of a 30-day public comment. | ||
| 3. Approval by Project Leadership. | ||
| 4. Update version and effective data in Governance document header. | ||
|
|
||
| - Urgent amendments may use an accelerated 7-day window with rationale documented. | ||
| - The document becomes active upon Project Leadership approval and publication in the [DANDI Docs](https://docs.dandiarchive.org/). | ||
|
|
||
| ## 14. Sunset Policy | ||
|
|
||
| If a component becomes unmaintained: | ||
| - Create a plan with guidance from the Project Leadership. | ||
| - Update documentation to reflect deprecation including migration guidance. | ||
| - Mark repository with `ARCHIVED` notice. | ||
|
|
||
| ## 15. Licenses | ||
|
|
||
| - Licenses (for code, artwork, documentation) are declared per repository. | ||
| - Licenses must be [DFSG](https://www.debian.org/social_contract#guidelines) and [OSI](https://opensource.org/licenses) compliant. | ||
Uh oh!
There was an error while loading. Please reload this page.