From 2821d8c5a61ea6e4467232f9cdc6f15f64fa0da5 Mon Sep 17 00:00:00 2001 From: Gabriele Bartolini Date: Mon, 14 Sep 2026 13:22:24 +0200 Subject: [PATCH 1/2] chore: sync generated files with cnpg-infra policy These files are generated from cloudnative-pg/cnpg-infra and landed here by scripts/sync-ownership-files.sh, so propose a change there rather than editing them in this repository: - CODEOWNERS, from componentowners-policy.yaml. - COMPONENT_OWNERS.md, from repo-tiers.yaml's owners field, which is the same entry that populates this repo's -owners GitHub team. It is the public record of who owns this component, which a GitHub team cannot be, since team membership is only visible to other org members. - .gitvote.yml, so a vote held on an issue here actually has an electorate. Until now /vote-component-owner did nothing in this repo. Assisted-by: Claude Signed-off-by: Gabriele Bartolini --- .gitvote.yml | 63 +++++++++++++++++++++++++++++++++++++++++++++ COMPONENT_OWNERS.md | 34 ++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 .gitvote.yml create mode 100644 COMPONENT_OWNERS.md diff --git a/.gitvote.yml b/.gitvote.yml new file mode 100644 index 0000000..ae8db6b --- /dev/null +++ b/.gitvote.yml @@ -0,0 +1,63 @@ +# GitVote configuration for cloudnative-pg/docs. +# +# Rendered by cnpg-infra's scripts/render-gitvote-config.sh -- see +# cnpg-infra's gitvote-policy.yaml and scripts/check-gitvote-config.sh / +# fix-gitvote-config.sh for how this file is generated and enforced. +# +# Voters are this repository's own docs-owners GitHub team (repo-tiers.yaml's +# owners field is what populates it; see sync-project-owner-teams.sh). +# Component Owner-level decisions per CONTRIBUTOR_LADDER.md are scoped to +# the repository, not org-wide. The profiles below mirror +# CONTRIBUTOR_LADDER.md's two repository-level thresholds: +# - default: simple majority, Contributor promotion/removal +# - component-owner: two-thirds majority, Component Owner +# promotion/removal (/vote-component-owner) +# plus, where this repo belongs to a subproject, the same two scoped to +# that subproject's maintainer committee, for the case where this repo has +# too few named owners to decide for itself. +automation: + enabled: false + rules: + - patterns: [] + profile: default + +profiles: + default: + duration: 1w + pass_threshold: 50 + allowed_voters: + teams: + - docs-owners + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" + + component-owner: + duration: 1w + pass_threshold: 66 + allowed_voters: + teams: + - docs-owners + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" + + committee: + duration: 1w + pass_threshold: 50 + allowed_voters: + teams: + - community-ecosystem-maintainers + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" + + committee-component-owner: + duration: 1w + pass_threshold: 66 + allowed_voters: + teams: + - community-ecosystem-maintainers + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" diff --git a/COMPONENT_OWNERS.md b/COMPONENT_OWNERS.md new file mode 100644 index 0000000..f4566e4 --- /dev/null +++ b/COMPONENT_OWNERS.md @@ -0,0 +1,34 @@ +# Component Owners + + + +`docs` is a component of the **Community, Docs & Ecosystem** subproject of +CloudNativePG (see `subprojects/community-ecosystem.md` in +[cloudnative-pg/governance](https://github.com/cloudnative-pg/governance)). + +The people below are its **Component Owners**: they hold `Write` on this +repository through the `docs-owners` GitHub team, and are its default +[`CODEOWNERS`](CODEOWNERS) entry, so every pull request here is routed to +them for review. + +| Name | GitHub Handle | Country | +| :--- | :--- | :--- | +| Gabriele Bartolini | [@gbartolini](https://github.com/gbartolini) | | +| Francesco Canovai | [@fcanovai](https://github.com/fcanovai) | | +| Leonardo Cecchi | [@leonardoce](https://github.com/leonardoce) | | +| Niccolò Fei | [@NiccoloFei](https://github.com/NiccoloFei) | Italy | +| Marco Nenciarini | [@mnencia](https://github.com/mnencia) | | +| Anushka Saxena | [@SaxenaAnushka102](https://github.com/SaxenaAnushka102) | India | + +Component Owner is a rung of the CloudNativePG contributor ladder. A new +owner is added by a ⅔ vote of this repository's existing Component Owners, +held on an issue in this repository; the change is then recorded in +`cnpg-infra`, which grants the access and regenerates this file. See +`CONTRIBUTOR_LADDER.md` in [cloudnative-pg/governance](https://github.com/cloudnative-pg/governance) +for the full process, including what happens when a repository has too few +owners to reach that threshold. From a4f6b165b1d13288c1dbaa22470629da28a4e8e7 Mon Sep 17 00:00:00 2001 From: Gabriele Bartolini Date: Tue, 15 Sep 2026 09:48:52 +0200 Subject: [PATCH 2/2] fix: require a strict majority to pass a gitvote vote gitvote decides a vote with `in_favor_percentage >= pass_threshold`, so a flat 50 let an even-sized electorate pass its own tie: 2-2 on a four-owner repo cleared the bar. A simple majority is strictly more than half, and a percentage cannot express "half plus one vote", so the threshold moves to 50.01 -- above any exact tie, below the smallest real majority, which is 50 + 100/N percent for N voters and stays above 50.01 up to N = 10000. The two-thirds profiles move from 66 to 66.66 for the same reason: two thirds is 66.666..., so a flat 66 sat just under its own bar (33 of 50 is 66.0 and would have passed). Not 66.67 -- for an electorate divisible by three the exact two-thirds computes to 66.6666..., which falls under 66.67 and would break a legitimate 2-of-3. This file is rendered from cnpg-infra's gitvote-policy.yaml; the change is made there and regenerated here. Assisted-by: Claude Opus 5 Signed-off-by: Gabriele Bartolini --- .gitvote.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitvote.yml b/.gitvote.yml index ae8db6b..496be8e 100644 --- a/.gitvote.yml +++ b/.gitvote.yml @@ -15,6 +15,11 @@ # plus, where this repo belongs to a subproject, the same two scoped to # that subproject's maintainer committee, for the case where this repo has # too few named owners to decide for itself. +# +# The thresholds are 50.01 and 66.66, not 50 and 66, because gitvote +# passes a vote on >= rather than >: a flat 50 would let an even-sized +# electorate tie and still pass. See cnpg-infra's +# scripts/render-gitvote-config.sh for the full reasoning. automation: enabled: false rules: @@ -24,7 +29,7 @@ automation: profiles: default: duration: 1w - pass_threshold: 50 + pass_threshold: 50.01 allowed_voters: teams: - docs-owners @@ -34,7 +39,7 @@ profiles: component-owner: duration: 1w - pass_threshold: 66 + pass_threshold: 66.66 allowed_voters: teams: - docs-owners @@ -44,7 +49,7 @@ profiles: committee: duration: 1w - pass_threshold: 50 + pass_threshold: 50.01 allowed_voters: teams: - community-ecosystem-maintainers @@ -54,7 +59,7 @@ profiles: committee-component-owner: duration: 1w - pass_threshold: 66 + pass_threshold: 66.66 allowed_voters: teams: - community-ecosystem-maintainers