|
| 1 | +# ClusterShell Governance |
| 2 | + |
| 3 | +This document describes the governance model of the ClusterShell project. |
| 4 | + |
| 5 | +ClusterShell is maintained by a small group of maintainers. The project aims to remain lightweight and responsive while ensuring continuity if an individual maintainer becomes unavailable. |
| 6 | + |
| 7 | +## Roles |
| 8 | + |
| 9 | +### Maintainers |
| 10 | + |
| 11 | +**Role** |
| 12 | + |
| 13 | +Maintainers are responsible for the technical direction and day-to-day operations of the project: |
| 14 | + |
| 15 | +- Review, approve, and merge contributions |
| 16 | +- Maintain project quality (tests/CI, coding standards, releases) |
| 17 | +- Triage issues and manage roadmap/priorities |
| 18 | +- Perform administrative operations on project infrastructure (repository settings, CI, packaging, etc.) |
| 19 | +- Create and publish releases (including PyPI releases) |
| 20 | + |
| 21 | +**Current roster (GitHub)** |
| 22 | + |
| 23 | +- Stéphane Thiell (`@thiell`) — Lead maintainer |
| 24 | +- Aurélien Degrémont (`@degremont`) — Maintainer |
| 25 | +- Dominique Martinet (`@martinetd`) — Maintainer |
| 26 | + |
| 27 | +> Note: Machine/service accounts (eg. CI bots) may have repository access but are not part of governance. |
| 28 | +
|
| 29 | +**Lead maintainer** |
| 30 | + |
| 31 | +The Lead maintainer coordinates project operations and is responsible for ensuring timely decisions, including final decisions when consensus cannot be reached. |
| 32 | + |
| 33 | +Currently: `@thiell`. |
| 34 | + |
| 35 | +### Contributors |
| 36 | + |
| 37 | +Contributors are anyone who reports issues, submits pull requests, improves documentation, or otherwise participates in the project. |
| 38 | + |
| 39 | +Contributors are expected to follow the project’s Code of Conduct and contribution guidelines. |
| 40 | + |
| 41 | +## Decision-making |
| 42 | + |
| 43 | +ClusterShell uses a consensus-seeking, maintainer-led model: |
| 44 | + |
| 45 | +- Most decisions are made through discussion on GitHub issues and pull requests. |
| 46 | +- For routine changes, maintainers aim for **lazy consensus**: if there are no objections from maintainers after review, the change may be merged. |
| 47 | +- For significant changes (eg. architecture, backward-incompatible behavior, security-sensitive changes), maintainers should seek explicit agreement from at least one other maintainer before merging. |
| 48 | + |
| 49 | +If maintainers cannot reach consensus in a reasonable timeframe, the Lead maintainer makes the final decision. |
| 50 | + |
| 51 | +## Contributions and merging |
| 52 | + |
| 53 | +- Changes should be proposed via pull requests. |
| 54 | +- Maintainers are expected to ensure CI is green (when available) and that changes meet project quality expectations before merging. |
| 55 | +- Non-trivial changes require at least one approval from another maintainer before merge. |
| 56 | + |
| 57 | +## Maintainer continuity / bus factor |
| 58 | + |
| 59 | +To reduce single-maintainer risk: |
| 60 | + |
| 61 | +- The project maintains multiple maintainers with write access. |
| 62 | +- If the Lead maintainer becomes unavailable for an extended period, the remaining maintainers may designate a new Lead maintainer by agreement. |
| 63 | +- If a maintainer becomes unresponsive or wishes to step down, repository access may be adjusted by the remaining maintainers. |
| 64 | + |
| 65 | +## Adding or removing maintainers |
| 66 | + |
| 67 | +- New maintainers may be nominated by any current maintainer. |
| 68 | +- Selection is based on sustained, high-quality contributions and alignment with project practices. |
| 69 | +- Adding a maintainer requires agreement of the existing maintainers. |
| 70 | + |
| 71 | +Maintainers may step down at any time. |
| 72 | + |
| 73 | +## Releases and release notes |
| 74 | + |
| 75 | +- Release planning (scope, timing, and next version number) is discussed by maintainers (typically in the ClusterShell maintainer Slack channel). |
| 76 | +- The Lead maintainer coordinates releases; maintainers aim for consensus on release scope and versioning. In case of disagreement, the Lead maintainer makes the final call. |
| 77 | +- Releases are tagged in Git and published to PyPI by maintainers with PyPI access. |
| 78 | +- For each release, maintainers publish public release notes in the documentation: |
| 79 | + https://clustershell.readthedocs.io/en/latest/release.html |
| 80 | +- When applicable, GitHub milestones/issues are used to track release work, and release notes may reference the relevant milestone. |
| 81 | + |
| 82 | +## Communication channels |
| 83 | + |
| 84 | +- **GitHub (issues and pull requests)** is the primary public forum for user support, bug reports, and technical discussion. |
| 85 | +- The project also uses an **invite-only ClusterShell Slack** for maintainer and supporter coordination. |
| 86 | + - Some discussions are maintainer-only (private). |
| 87 | + - Where appropriate, maintainers will summarize decisions that affect users or contributors (eg. release scope, policy changes, deprecations) in public on GitHub and/or in the published release notes. |
0 commit comments