From 08d3f310e227202d367d467fef83cebddf47476a Mon Sep 17 00:00:00 2001 From: Kris West Date: Thu, 6 Aug 2026 07:28:05 +0100 Subject: [PATCH] chore(governance): update project governance to current FINOS standard plus cross-firm reviews --- CHARTER.md | 45 +++++++++ CONTRIBUTING.md | 112 +++++++++++++++++++++- website/docs/development/contributing.mdx | 30 +----- 3 files changed, 156 insertions(+), 31 deletions(-) create mode 100644 CHARTER.md diff --git a/CHARTER.md b/CHARTER.md new file mode 100644 index 000000000..1aad4827d --- /dev/null +++ b/CHARTER.md @@ -0,0 +1,45 @@ +# GitProxy Technical Charter + +## Mission + +GitProxy enables organisations — particularly regulated financial institutions and other enterprises — to enforce configurable policies on outgoing Git push operations, ensuring compliance with security, legal, and risk requirements while preserving the standard open source developer experience. + +## Scope + +The project develops and maintains: + +- The Git HTTP and SSH proxy server +- The policy engine (processor chain and plugin system) +- The approval and review workflow +- The service API and web-based dashboard +- The command-line interface (CLI) +- Associated documentation and tooling + +Out of scope: + +- Organisation-specific policy content or plugin implementations +- Hosting, infrastructure, or operational support for production deployments + +## Maintainer Structure + +The project community consists of Contributors and Maintainers: + +- **Contributor** — anyone who submits a contribution to the project (code, issues, comments, documentation, media, or any combination). +- **Maintainer** — a Contributor who, by virtue of their contribution history, has been given write access to project repositories and may merge approved contributions. +- **Lead Maintainer** — the project's interface with the FINOS team and Board. Responsible for approving quarterly project reports and communicating on behalf of the project. Elected by a vote of the Maintainers. + +The Maintainers collectively serve as the project's technical steering body. The current roster is recorded in [`MAINTAINERS.md`](MAINTAINERS.md). + +## Decision Making + +Maintainers reach decisions by consensus where possible, and by vote when necessary. The voting process, contribution rules, cross-firm review requirements, and dispute resolution procedures are defined in [`CONTRIBUTING.md`](CONTRIBUTING.md). + +## Intellectual Property + +- The project is licensed under the [Apache License, Version 2.0](LICENSE). +- Contributions are governed by the [FINOS IP Policy](https://community.finos.org/assets/files/IP-Policy-fe5925025fc0a57b1cbed64f86b26a73.pdf). +- All contributors must have a Contributor License Agreement (CLA) on file with FINOS before contributions can be merged. + +## Amendments + +This charter may be amended by a vote of the Maintainers according to the voting process defined in [`CONTRIBUTING.md`](CONTRIBUTING.md), subject to FINOS Board approval. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6d09f1be5..14d96f7a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,112 @@ -# Contributing to GitProxy +# GitProxy Contribution and Governance Policies -Thanks for your interest in contributing to GitProxy! This guide covers everything you need to get a local development environment running, understand the codebase, and submit high-quality pull requests. +This document describes the contribution process and governance policies of the FINOS GitProxy project. The project is also governed by the [Linux Foundation Antitrust Policy](https://www.linuxfoundation.org/antitrust-policy/), and the FINOS [IP Policy](https://community.finos.org/assets/files/IP-Policy-fe5925025fc0a57b1cbed64f86b26a73.pdf), [Code of Conduct](https://www.finos.org/code-of-conduct), [Collaborative Principles](https://community.finos.org/docs/governance/collaborative-principles/), and [Meeting Procedures](https://community.finos.org/docs/governance/meeting-procedures/). -For project governance, roles, and voting procedures, see the [Governance section on the website](https://git-proxy.finos.org). +## Technical Charter + +The project's [Technical Charter](CHARTER.md) defines its mission, scope, maintainer structure, intellectual property framework, and amendment process. Do not duplicate that material here. + +## Contribution Process + +Before making a contribution, please take the following steps: + +1. Check whether there's already an [open issue](https://github.com/finos/git-proxy/issues) related to your proposed contribution. If there is, join the discussion and propose your contribution there. +1. If there isn't already a relevant issue, [create one](https://github.com/finos/git-proxy/issues/new), describing your contribution and the problem you're trying to solve. +1. Respond to any questions or suggestions raised in the issue by other developers. +1. Fork the project repository and prepare your proposed contribution. +1. Submit a pull request. + +> **NOTE:** Contributors must meet FINOS contribution requirements (CLA). Please read the [FINOS Contribution Requirements](https://community.finos.org/docs/governance/Software-Projects/contribution) before opening pull requests. + +## Governance + +### Roles + +The project community consists of Contributors and Maintainers: + +- A **Contributor** is anyone who submits a contribution to the project. (Contributions may include code, issues, comments, documentation, media, or any combination of the above.) +- A **Maintainer** is a Contributor who, by virtue of their contribution history, has been given write access to project repositories and may merge approved contributions. +- The **Lead Maintainer** is the project's interface with the FINOS team and Board. They are responsible for approving quarterly project reports and communicating on behalf of the project. The Lead Maintainer is elected by a vote of the Maintainers. + +### Contribution Rules + +Anyone is welcome to submit a contribution to the project. The rules below apply to all contributions. (The key words "MUST", "SHALL", "SHOULD", "MAY", etc. in this document are to be interpreted as described in [IETF RFC 2119](https://www.ietf.org/rfc/rfc2119.txt).) + +- All contributions MUST be submitted as pull requests, including contributions by Maintainers. +- All pull requests MUST be reviewed by a Maintainer (other than the Contributor) before being merged. +- Pull requests for non-trivial contributions SHOULD remain open for a review period sufficient to give all Maintainers a reasonable opportunity to review and comment on them. +- After the review period, if no Maintainer has an objection to the pull request, any Maintainer MAY merge it. +- If any Maintainer objects to a pull request, the Maintainers SHOULD try to come to consensus through discussion. If consensus cannot be reached, any Maintainer MAY call for a vote on the contribution using the Maintainer Voting process below. + +#### Cross-Firm Review + +GitProxy is used as a risk control in regulated financial institutions. To ensure broad consensus among the firms involved in project maintenance, pull requests that introduce new features (corresponding to `feat:` conventional commits), breaking changes (corresponding to a major version bump), or other changes that a Maintainer judges to be significant MUST be approved by at least one Maintainer from a different organisation than the contributing author before being merged. + +This requirement does NOT apply to: + +- Bug fixes +- Documentation updates +- Dependency patches and vulnerability remediation +- CI/infrastructure maintenance +- Refactoring that does not change external behaviour +- Other routine upkeep + +Maintainers contributing such changes are expected to abide by the spirit of this rule — i.e., seek cross-firm review proactively rather than requiring it to be enforced. + +### Maintainer Voting + +The Maintainers MAY hold votes only when they are unable to reach consensus on an issue. Any Maintainer MAY call a vote on a contested issue, after which Maintainers SHALL have 36 hours to register their votes. Votes SHALL take the form of "+1" (agree), "-1" (disagree), "+0" (abstain). Issues SHALL be decided by the majority of votes cast. If there is only one Maintainer, they SHALL decide any issue otherwise requiring a Maintainer vote. If a vote is tied, FINOS (via [help@finos.org](mailto:help@finos.org)) SHALL cast the deciding vote. + +The Maintainers SHALL decide the following matters by consensus or, if necessary, a vote: + +- Contested pull requests +- Election and removal of the Lead Maintainer +- Election and removal of Maintainers + +All Maintainer votes MUST be carried out transparently, with all discussion and voting occurring in public, either: + +- in comments associated with the relevant issue or pull request, if applicable; +- on the project mailing list or other official public communication channel; or +- during a regular, minuted community meeting. + +### Dispute Resolution + +If a contribution or project decision is contested, the following escalation process applies: + +1. Discussion in the relevant PR or issue thread to seek consensus among Maintainers. +1. If unresolved, raise the matter at the next community meeting for open discussion. +1. If still unresolved, any Maintainer MAY call a vote (36-hour window, majority decides per the Maintainer Voting process above). +1. If the vote is tied, FINOS (via [help@finos.org](mailto:help@finos.org)) SHALL cast the deciding vote. + +A contributor whose pull request is closed may address the concerns raised and re-submit. If a contributor believes their contribution was unfairly rejected, they may invoke the dispute resolution process above. + +### Maintainer Qualifications + +Any Contributor who has made a substantial contribution to the project MAY apply (or be nominated) to become a Maintainer. The existing Maintainers SHALL decide whether to approve the nomination according to the Maintainer Voting process above. + +### Maintainer List + +The current Maintainer roster is recorded in [`MAINTAINERS.md`](MAINTAINERS.md). All changes to the maintainer list are managed publicly: + +- Any addition, removal, or update MUST be submitted as a pull request to `MAINTAINERS.md`. +- If the change requires a Maintainer vote (e.g. election or removal of a Maintainer or the Lead Maintainer), the vote outcome MUST be documented in, or linked from, the pull request description or comments. +- This process creates a public audit trail of project leadership over time. + +Whenever `MAINTAINERS.md` is updated with a change to maintainership, please email [help@finos.org](mailto:help@finos.org). + +### Changes to this Document + +This document MAY be amended by a vote of the Maintainers according to the Maintainer Voting process above. + +## Contributor License Agreement (CLA) + +All contributors must have a CLA on file with FINOS before PRs can be merged. Review the FINOS [contribution requirements](https://community.finos.org/docs/governance/Software-Projects/contribution) and submit (or have your employer submit) the required CLA via [EasyCLA](https://community.finos.org/docs/governance/Software-Projects/easycla). + +--- + +# Development Guide + +Thanks for your interest in contributing to GitProxy! This section covers everything you need to get a local development environment running, understand the codebase, and submit high-quality pull requests. ## Table of Contents @@ -403,7 +507,7 @@ The following checks must pass before a PR can be merged: ### Contributor License Agreement (CLA) -All contributors must have a CLA on file with FINOS before PRs can be merged. Review the FINOS [contribution requirements](https://finosfoundation.atlassian.net/wiki/spaces/FINOS/pages/75530375/Contribution+Compliance+Requirements) and submit the required CLA. +See the [CLA section](#contributor-license-agreement-cla) in the Governance section above. ## Community diff --git a/website/docs/development/contributing.mdx b/website/docs/development/contributing.mdx index 06b92224d..94443f14e 100644 --- a/website/docs/development/contributing.mdx +++ b/website/docs/development/contributing.mdx @@ -4,7 +4,7 @@ title: Contributing GitProxy is a [FINOS](https://www.finos.org/) project. We welcome contributions from anyone in the community. -For developer setup, building, testing, and coding guidelines, see [`CONTRIBUTING.md`](https://github.com/finos/git-proxy/blob/main/CONTRIBUTING.md) in the repository. +For project governance, roles, voting procedures, and contribution rules, see [`CONTRIBUTING.md`](https://github.com/finos/git-proxy/blob/main/CONTRIBUTING.md) in the repository. The project's Technical Charter is available in [`CHARTER.md`](https://github.com/finos/git-proxy/blob/main/CHARTER.md). ## Contribution Process @@ -15,34 +15,12 @@ For developer setup, building, testing, and coding guidelines, see [`CONTRIBUTIN If this is your first open source contribution, the [first-contributions guide](https://github.com/firstcontributions/first-contributions#first-contributions) is a great starting point. +For developer setup, building, testing, and coding guidelines, see the [Development Guide](https://github.com/finos/git-proxy/blob/main/CONTRIBUTING.md#development-guide) section of `CONTRIBUTING.md`. + ## Contributor License Agreement (CLA) All contributors must have a CLA on file with FINOS before pull requests can be merged. Review the FINOS [contribution requirements](https://community.finos.org/docs/governance/Software-Projects/contribution) and submit (or have your employer submit) the required CLA via [EasyCLA](https://community.finos.org/docs/governance/Software-Projects/easycla). -## Governance - -The project is governed by the [Linux Foundation Antitrust Policy](https://www.linuxfoundation.org/antitrust-policy/) and the FINOS [IP Policy](https://community.finos.org/assets/files/IP-Policy-fe5925025fc0a57b1cbed64f86b26a73.pdf), [Code of Conduct](https://www.finos.org/code-of-conduct), [Collaborative Principles](https://github.com/finos/git-proxy/blob/main/Collaborative-Principles.md), and [Community Meeting Procedures](https://community.finos.org/docs/journey/engage#meet-the-community). - -### Roles - -- **Contributor** — anyone who submits a contribution (code, issues, comments, documentation, media, or any combination). -- **Maintainer** — a Contributor who, by virtue of their contribution history, has been given write access to the repository and may merge approved contributions. -- **Lead Maintainer** — the project's interface with the FINOS team and Board. Responsible for communicating on behalf of the project and for ensuring the project is following FINOS policies and procedures. - -### Contribution Rules - -- All contributions **must** be submitted as pull requests, including contributions by Maintainers. -- All pull requests **must** be reviewed by a Maintainer (other than the contributor) before being merged. -- Pull requests for non-trivial contributions **must** remain open long enough for all Maintainers to review and comment. -- After the review period, if no Maintainer objects, any Maintainer **may** merge. -- If any Maintainer objects, the Maintainers **should** try to reach consensus through discussion. If consensus cannot be reached or the contribution is deemed inappropriate or otherwise unable to be accepted into the project, the pull request will be closed. - -If a pull request is closed due to objections, the contributor may address the concerns and re-open it for review. We encourage contributors to engage in good faith with any feedback and to seek help from the community if needed. If a contributor feels that their contribution was unfairly rejected, they may request a review by the Maintainer team and/or raise the issue in the community meeting. - -### Becoming a Maintainer - -Any Contributor who has made a substantial contribution may apply (or be nominated) to become a Maintainer. Existing Maintainers approve nominations via the voting process above. - ## Community Meetings Join our [fortnightly Zoom meeting](https://zoom-lfx.platform.linuxfoundation.org/meeting/95849833904?password=99413314-d03a-4b1c-b682-1ede2c399595) on Monday, 4PM BST (odd week numbers). @@ -50,8 +28,6 @@ Join our [fortnightly Zoom meeting](https://zoom-lfx.platform.linuxfoundation.or [Add to Google Calendar](https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=MTRvbzM0NG01dWNvNGc4OGJjNWphM2ZtaTZfMjAyNTA2MDJUMTUwMDAwWiBzYW0uaG9sbWVzQGNvbnRyb2wtcGxhbmUuaW8&tmsrc=sam.holmes%40control-plane.io&scp=ALL). Alternatively, email [help@finos.org](mailto:help@finos.org) for a calendar invitation. -Previous recordings available at: https://openprofile.dev - ## Contact - **Slack**: [#git-proxy](https://finos-lf.slack.com/archives/C06LXNW0W76) on the FINOS Slack workspace