Skip to content
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

docs(policy)_: Introduction of policy zero #6165

Open
wants to merge 12 commits into
base: develop
Choose a base branch
from

Conversation

Samyoul
Copy link
Member

@Samyoul Samyoul commented Dec 4, 2024

Summary

This pull request introduces Policy Zero, the foundational policy for creating, reviewing, and maintaining all policies in the status-go Git repository. Policy Zero establishes clear guidelines to ensure a collaborative, inclusive, and transparent process for defining and evolving repository policies. It sets the tone for a consensus-driven approach to repository governance.

Purpose

Policy Zero serves as the cornerstone for all subsequent policies by defining:

  1. How policies are proposed:

    • Encouraging open discussion with Core Contributors (CCs) and community members.
    • Formal submission requirements, including directory, format, and naming conventions.
  2. Review and approval processes:

    • Emphasising the importance of reaching consensus among CCs and key stakeholders.
    • Clear criteria for policy PR approval, including team leads and Guild involvement.
  3. Policy amendments and archival:

    • Outlining procedures for amending or archiving outdated or obsolete policies to ensure relevance.

Key Details

  1. Submitting Policies:

  2. Review Process:

    • Requires active participation from CCs, team leads, and the status-go Guild.
    • Specifies approval thresholds to ensure broad support and alignment.
  3. Amendments and Archival:

    • Enables flexibility in policy maintenance while mandating a transparent PR process.

Implementation Notes

  • This policy will be stored as 000-submitting-policy.md in _docs/policies.
  • The policy adheres to Markdown format and follows ADR file naming conventions.

Request for Reviewers

We encourage all Core Contributors, team leads, and status-go Guild members to review this PR. Your feedback will ensure the policy reflects the values of the status-go community and establishes a strong foundation for future policies.

Next Steps

Upon approval, Policy Zero will guide the submission and governance of all future policies in the status-go repository. This ensures a standardised, inclusive, and transparent process moving forward.

@status-im-auto
Copy link
Member

status-im-auto commented Dec 4, 2024

Jenkins Builds

Click to see older builds (105)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 85efbd3 #1 2024-12-04 14:38:31 ~4 min macos 📦zip
✔️ 85efbd3 #1 2024-12-04 14:39:05 ~5 min macos 📦zip
✔️ 85efbd3 #1 2024-12-04 14:39:56 ~6 min windows 📦zip
✔️ 85efbd3 #1 2024-12-04 14:40:24 ~6 min ios 📦zip
✔️ 85efbd3 #1 2024-12-04 14:44:10 ~10 min android 📦aar
✔️ 85efbd3 #1 2024-12-04 14:45:21 ~11 min linux 📦zip
✔️ 85efbd3 #1 2024-12-04 14:48:14 ~14 min tests-rpc 📄log
✖️ 85efbd3 #1 2024-12-04 15:12:40 ~38 min tests 📄log
✔️ 5d7cf41 #2 2024-12-10 14:47:03 ~4 min windows 📦zip
✔️ 5d7cf41 #2 2024-12-10 14:47:11 ~4 min ios 📦zip
✔️ 5d7cf41 #2 2024-12-10 14:47:19 ~4 min macos 📦zip
✔️ 5d7cf41 #2 2024-12-10 14:47:52 ~5 min macos 📦zip
✔️ 5d7cf41 #2 2024-12-10 14:48:51 ~6 min linux 📦zip
✔️ 5d7cf41 #2 2024-12-10 14:49:07 ~6 min android 📦aar
✔️ 5d7cf41 #2 2024-12-10 14:49:21 ~6 min tests-rpc 📄log
✔️ 5d7cf41 #2 2024-12-10 15:14:26 ~31 min tests 📄log
✔️ fcea8b6 #3 2024-12-10 14:57:37 ~3 min windows 📦zip
✔️ fcea8b6 #3 2024-12-10 14:59:20 ~5 min ios 📦zip
✔️ fcea8b6 #3 2024-12-10 14:59:20 ~5 min macos 📦zip
✔️ fcea8b6 #3 2024-12-10 14:59:30 ~5 min macos 📦zip
✔️ fcea8b6 #3 2024-12-10 14:59:32 ~5 min linux 📦zip
✔️ fcea8b6 #3 2024-12-10 14:59:48 ~5 min android 📦aar
✔️ fcea8b6 #3 2024-12-10 15:01:21 ~6 min tests-rpc 📄log
✔️ aaadf85 #4 2024-12-10 15:00:34 ~2 min windows 📦zip
✔️ aaadf85 #4 2024-12-10 15:04:37 ~5 min ios 📦zip
✔️ aaadf85 #4 2024-12-10 15:04:56 ~5 min macos 📦zip
✔️ aaadf85 #4 2024-12-10 15:05:27 ~5 min macos 📦zip
✔️ aaadf85 #4 2024-12-10 15:06:19 ~6 min linux 📦zip
✔️ aaadf85 #4 2024-12-10 15:06:42 ~6 min android 📦aar
✔️ aaadf85 #4 2024-12-10 15:08:34 ~7 min tests-rpc 📄log
✔️ a804bb4 #5 2024-12-10 15:13:28 ~2 min windows 📦zip
✔️ a804bb4 #5 2024-12-10 15:14:54 ~4 min ios 📦zip
✔️ a804bb4 #5 2024-12-10 15:15:06 ~4 min macos 📦zip
✔️ a804bb4 #5 2024-12-10 15:15:39 ~5 min macos 📦zip
✔️ a804bb4 #5 2024-12-10 15:16:25 ~5 min linux 📦zip
✔️ a804bb4 #5 2024-12-10 15:16:29 ~6 min android 📦aar
✔️ a804bb4 #5 2024-12-10 15:16:42 ~6 min tests-rpc 📄log
✔️ a804bb4 #3 2024-12-10 15:44:18 ~29 min tests 📄log
✔️ d4f62c9 #6 2024-12-10 16:27:26 ~2 min windows 📦zip
✔️ d4f62c9 #6 2024-12-10 16:29:31 ~5 min ios 📦zip
✔️ d4f62c9 #6 2024-12-10 16:29:32 ~5 min macos 📦zip
✔️ d4f62c9 #6 2024-12-10 16:29:42 ~5 min macos 📦zip
✔️ d4f62c9 #6 2024-12-10 16:30:34 ~6 min linux 📦zip
✔️ d4f62c9 #6 2024-12-10 16:30:41 ~6 min android 📦aar
✔️ d4f62c9 #6 2024-12-10 16:31:07 ~6 min tests-rpc 📄log
✖️ d4f62c9 #4 2024-12-10 16:54:08 ~29 min tests 📄log
✔️ d4f62c9 #5 2024-12-10 17:29:16 ~30 min tests 📄log
✔️ f6b4b5e #7 2024-12-12 16:29:49 ~2 min windows 📦zip
✔️ f6b4b5e #7 2024-12-12 16:31:22 ~4 min macos 📦zip
✔️ f6b4b5e #7 2024-12-12 16:31:40 ~4 min ios 📦zip
✔️ f6b4b5e #7 2024-12-12 16:32:20 ~5 min macos 📦zip
✔️ f6b4b5e #7 2024-12-12 16:32:31 ~5 min linux 📦zip
✔️ f6b4b5e #7 2024-12-12 16:32:39 ~5 min android 📦aar
✔️ f6b4b5e #7 2024-12-12 16:32:55 ~5 min tests-rpc 📄log
✔️ f6b4b5e #6 2024-12-12 16:57:24 ~30 min tests 📄log
✔️ 776c52c #8 2024-12-16 12:01:38 ~2 min windows 📦zip
✔️ 776c52c #8 2024-12-16 12:03:08 ~4 min ios 📦zip
✔️ 776c52c #8 2024-12-16 12:03:23 ~4 min macos 📦zip
✔️ 776c52c #8 2024-12-16 12:03:51 ~5 min macos 📦zip
✔️ 776c52c #8 2024-12-16 12:04:17 ~5 min linux 📦zip
✔️ 776c52c #8 2024-12-16 12:04:23 ~5 min android 📦aar
✔️ 776c52c #8 2024-12-16 12:04:28 ~5 min tests-rpc 📄log
✔️ 776c52c #7 2024-12-16 12:28:46 ~30 min tests 📄log
✔️ e742eae #9 2024-12-16 12:08:02 ~2 min windows 📦zip
✔️ e742eae #9 2024-12-16 12:09:30 ~4 min macos 📦zip
✔️ e742eae #9 2024-12-16 12:09:43 ~4 min ios 📦zip
✔️ e742eae #9 2024-12-16 12:10:29 ~5 min macos 📦zip
✔️ e742eae #9 2024-12-16 12:10:41 ~5 min linux 📦zip
✔️ e742eae #9 2024-12-16 12:10:49 ~5 min android 📦aar
✔️ e742eae #9 2024-12-16 12:10:53 ~5 min tests-rpc 📄log
✔️ e742eae #8 2024-12-16 12:59:25 ~30 min tests 📄log
✔️ 85a8b33 #10 2024-12-16 20:38:03 ~3 min windows 📦zip
✔️ 85a8b33 #10 2024-12-16 20:39:10 ~4 min macos 📦zip
✔️ 85a8b33 #10 2024-12-16 20:39:18 ~4 min ios 📦zip
✔️ 85a8b33 #10 2024-12-16 20:40:29 ~5 min tests-rpc 📄log
✔️ 85a8b33 #10 2024-12-16 20:40:40 ~6 min linux 📦zip
✔️ 85a8b33 #10 2024-12-16 20:40:46 ~6 min macos 📦zip
✔️ 85a8b33 #10 2024-12-16 20:40:53 ~6 min android 📦aar
✖️ 85a8b33 #9 2024-12-16 21:05:13 ~30 min tests 📄log
✔️ b36055a #11 2024-12-16 20:41:12 ~3 min windows 📦zip
✔️ b36055a #11 2024-12-16 20:43:47 ~4 min macos 📦zip
✔️ b36055a #11 2024-12-16 20:44:21 ~4 min ios 📦zip
✔️ b36055a #11 2024-12-16 20:45:52 ~5 min linux 📦zip
✔️ b36055a #11 2024-12-16 20:46:23 ~5 min macos 📦zip
✖️ b36055a #11 2024-12-16 20:46:23 ~5 min tests-rpc 📄log
✔️ b36055a #11 2024-12-16 20:46:27 ~5 min android 📦aar
✔️ fec5c77 #12 2024-12-16 20:45:03 ~3 min windows 📦zip
✔️ fec5c77 #12 2024-12-16 20:48:20 ~4 min macos 📦zip
✔️ fec5c77 #12 2024-12-16 20:48:58 ~4 min ios 📦zip
✔️ 817d38a #13 2024-12-16 20:48:08 ~2 min windows 📦zip
✔️ 817d38a #12 2024-12-16 20:50:52 ~4 min linux 📦zip
✔️ 817d38a #12 2024-12-16 20:51:41 ~5 min android 📦aar
✔️ 817d38a #12 2024-12-16 20:51:50 ~5 min macos 📦zip
✔️ 817d38a #12 2024-12-16 20:52:46 ~6 min tests-rpc 📄log
✔️ 817d38a #13 2024-12-16 20:52:57 ~4 min macos 📦zip
✔️ 817d38a #13 2024-12-16 20:53:46 ~4 min ios 📦zip
✔️ 817d38a #10 2024-12-16 21:34:49 ~29 min tests 📄log
✔️ ec5886e #14 2024-12-17 14:51:22 ~3 min windows 📦zip
✔️ ec5886e #14 2024-12-17 14:52:43 ~4 min macos 📦zip
✔️ ec5886e #14 2024-12-17 14:52:57 ~4 min ios 📦zip
✔️ ec5886e #13 2024-12-17 14:53:28 ~5 min macos 📦zip
✔️ ec5886e #13 2024-12-17 14:53:36 ~5 min linux 📦zip
✔️ ec5886e #13 2024-12-17 14:53:48 ~5 min android 📦aar
✔️ ec5886e #13 2024-12-17 14:54:41 ~6 min tests-rpc 📄log
✖️ ec5886e #11 2024-12-17 15:17:45 ~29 min tests 📄log
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 0697756 #15 2024-12-17 14:54:46 ~2 min windows 📦zip
✔️ 0697756 #15 2024-12-17 14:57:23 ~4 min macos 📦zip
✔️ 0697756 #15 2024-12-17 14:58:03 ~4 min ios 📦zip
✔️ 0697756 #14 2024-12-17 14:58:56 ~5 min linux 📦zip
✔️ 0697756 #14 2024-12-17 14:59:02 ~5 min macos 📦zip
✔️ 0697756 #14 2024-12-17 14:59:28 ~5 min android 📦aar
✔️ 0697756 #14 2024-12-17 15:01:26 ~6 min tests-rpc 📄log
✔️ 0697756 #12 2024-12-17 15:46:41 ~28 min tests 📄log
✔️ 29917ef #16 2024-12-20 16:04:26 ~2 min windows 📦zip
✔️ 29917ef #16 2024-12-20 16:05:45 ~4 min ios 📦zip
✔️ 29917ef #16 2024-12-20 16:06:00 ~4 min macos 📦zip
✔️ 29917ef #15 2024-12-20 16:06:28 ~5 min linux 📦zip
✔️ 29917ef #15 2024-12-20 16:06:37 ~5 min android 📦aar
✔️ 29917ef #15 2024-12-20 16:06:47 ~5 min macos 📦zip
✔️ 29917ef #15 2024-12-20 16:07:49 ~6 min tests-rpc 📄log
✔️ 29917ef #13 2024-12-20 16:30:54 ~29 min tests 📄log

@igor-sirotin igor-sirotin marked this pull request as draft December 4, 2024 20:29
@Samyoul Samyoul force-pushed the policy/policy-zero branch 2 times, most recently from aaadf85 to a804bb4 Compare December 10, 2024 15:10
@Samyoul
Copy link
Member Author

Samyoul commented Dec 10, 2024

@igor-sirotin Do you know why my conventional commits validation is failing?

https://github.com/status-im/status-go/actions/runs/12259024416/job/34200188125?pr=6165

No release type found in pull request title "Introduction of policy zero". Add a prefix to indicate what kind of release this pull request corresponds to. For reference, see https://www.conventionalcommits.org/

Available types:
 - feat: A new feature
 - fix: A bug fix
 - docs: Documentation only changes
 - style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
 - refactor: A code change that neither fixes a bug nor adds a feature
 - perf: A code change that improves performance
 - test: Adding missing tests or correcting existing tests
 - build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
 - ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
 - chore: Other changes that don't modify src or test files
 - revert: Reverts a previous commit

All my PR commits are prefixed with docs(policy)_:

@Samyoul
Copy link
Member Author

Samyoul commented Dec 10, 2024

TODO. Add the README file

Copy link

codecov bot commented Dec 10, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 61.20%. Comparing base (0f7c26d) to head (29917ef).
Report is 7 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #6165      +/-   ##
===========================================
- Coverage    61.21%   61.20%   -0.02%     
===========================================
  Files          833      833              
  Lines       109925   109925              
===========================================
- Hits         67291    67276      -15     
- Misses       34761    34770       +9     
- Partials      7873     7879       +6     
Flag Coverage Δ
functional 19.32% <ø> (-0.01%) ⬇️
unit 60.02% <ø> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

see 22 files with indirect coverage changes

@igor-sirotin
Copy link
Collaborator

Do you know why my conventional commits validation is failing?

@Samyoul yes, because PR title must follow the same rules as commit messages.
You can see that Validate commit message passed, but Validate PR title didn't:
image

@igor-sirotin igor-sirotin marked this pull request as ready for review December 10, 2024 19:34
Copy link
Contributor

@ilmotta ilmotta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although I left a few comments, I think this Policy Zero PR is a welcome addition 💯

I usually prefer more soft guidelines and building trust among core contributors instead of hard policies. Some policies are obviously good (e.g. PR descriptions).

Or in other words, I think a more healthy open-source project is one where policies are minimized and guidelines thrive because the best software engineers I worked with are the ones who use guidelines as tools. But maybe status-go and Status will greatly benefit from policies, so let's see 👀

_docs/policies/000-submitting-policy.md Outdated Show resolved Hide resolved
_docs/policies/000-submitting-policy.md Outdated Show resolved Hide resolved
# Foundational Principles for Policies

**Purpose**: Policies establishes the fundamental rules that govern the creation, amendment, and enforcement of all actions within the status-go project. These policies reflect our core
values of inclusivity, transparency, and consensus-driven decision-making while defining enforceable rules that guide status-go contributions. Policies are not merely guidelines but are to be
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's unclear to me how the line will be drawn between guidelines vs policies. A policy is being stated as if it's the law, which in some cases could well be the way to go, but there's room for some people to abuse this policy system. At the same time, I much prefer this over a dictatorship model as many open-source projects follow.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for saying this. I 100% do not want this to be abused, I hope that have a very high quorum and a very high level of required consensus that it will make abuse more difficult. As we discussed offline I will continue to put serious thought into this.

Copy link
Member Author

@Samyoul Samyoul Dec 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • TODO: Improve the concept of policy versus guidelines.
  • TODO: Address the concept of "enforceability".

_docs/policies/000-submitting-policy.md Outdated Show resolved Hide resolved
_docs/policies/000-submitting-policy.md Outdated Show resolved Hide resolved
_docs/policies/000-submitting-policy.md Outdated Show resolved Hide resolved

# Review and Approval Process

The core function of the review and approval process for policy PRs is to reach consensus on any issue and to reflect the range of perspectives within the `status-go` community. Policy submissions must aim to achieve broad community support and give key stakeholders a chance to gain context of the policy requirements.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think that this part if redundant. It basically summarises what's described in the README: consensus, transparency and inclusivity.

But let's see what others say.

_docs/policies/000-submitting-policy.md Outdated Show resolved Hide resolved
- **Final agreement**: Policies should be approved by a clear consensus, meaning that while not everyone may agree 100%, all should feel their voices were heard and respected, and the final decision
reflects the community’s general will.

## 4. Enforceability and Respect for Policies
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part is probably the most important.

Although that sequentially I'd also put it after Inclusivity, Transparency and Consensus, I feel that it might be better to make it first. Otherwise most readers will not reach this most important part.

Copy link
Member Author

@Samyoul Samyoul Dec 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • TODO: Address the concept of "enforceability".

Copy link
Member Author

@Samyoul Samyoul Dec 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@igor-sirotin, @ilmotta, @micieslak and @alaibe

I've thought a lot about input from everyone on this particular subject of enforceability and I feel that I've failed in communicating well enough what our approach is. Given that you all have expressed your opinions on the concept of enforcement and enforceability would you mind giving me your thoughts on my newly phrased section for the subject.


Upholding Policies Through Consensus

Collective Agreement:

The enforceability of policies stems not from the authority of any single individual or group but from the collective agreement and shared commitment of all status-go contributors. Policies are not imposed unilaterally but are the result of transparent discussions and explicit recorded approval from key stakeholders. This includes team leads, members of the @status-im/status-go-guild GitHub team, and other relevant contributors.

Shared Responsibility:

Respecting and adhering to policies is a shared responsibility that reflects the values and goals of status-go contributors. Approved policies are not merely recommendations but agreed-upon standards, created through mutual understanding and collaboration, that guide how we work together and contribute to the project.

Mutual Enforcement through Alignment:

The power of enforcement does not rest with any one authority; it arises from the collective commitment of all contributors to uphold policies that have been collaboratively crafted and agreed upon. This ensures that policies are respected not out of obligation but because they represent the shared vision and trust of the contributors.

Fostering Alignment:

Policies are designed to ensure consistency, fairness, and alignment across the teams, creating a framework that supports effective collaboration and decision-making. By honouring the principles of inclusivity and consensus, we strengthen trust and accountability within all contributors.

By grounding our policies in transparency, mutual respect, and collective ownership, the status-go project ensures they are both enforceable and reflective of the shared goals of all contributors.

cc: @status-im/status-go-guild

@igor-sirotin igor-sirotin changed the title Introduction of policy zero docs(policy)_: Introduction of policy zero Dec 10, 2024

- **Key stakeholder approval**: The guild does not have unilateral enforcement power. Instead, policies require explicit recorded approval from all key stakeholders before becoming enforceable. This
includes team leads, the status-go Guild, and other relevant parties.
- **Respect and adherence**: Policies are not optional guidelines. Once approved, they are enforceable rules that all contributors to the status-go project are expected to respect. This ensures
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit unclear to me how the enforceability may work on a daily basis and how we can be sure that the policies are fully respected. Are reviewers the ones who are responsible for verification of given part of code regarding policies? Different people have different levels of understanding and can enforce them to different degrees. In practice, old habits also do well because they allow to move forward easily, even if it is a short-sighted action. Adjusting to new arrangements often means spending extra time to understand them and leaving the comfort zone, both for pr author and reviewers. In practice, this results in incomplete implementation of the arrangements. The question is whether we have any specific arrangements on how to counteract this

Copy link
Collaborator

@igor-sirotin igor-sirotin Dec 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@micieslak @alaibe

TLDR; Policies should not define HOW they're enforced, but define WHAT we agree to enforce.

This is just an instrument to agree on the rules of the game.
And we don't expect to have many policies.


It's a bit unclear to me how the enforceability may work on a daily basis

In my opinion, the real question should be: How can we ensure every core contributor is fully autonomous and able to contribute safely? Instead of asking, How can we enforce everything?

It depends on the certain policy. But in most cases it should be automated.

For example, "pull requests must have > 50% diff code coverage".
Obviously, it can't be checked by reviewers and should be automated (which we did).

Another example, "breaking changes policy", is not easy to automate, so indeed it would be mostly one developers and reviewers shoulders.

Copy link
Member Author

@Samyoul Samyoul Dec 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @micieslak, I have personally struggled with the concept of enforceability and where we draw the line between guidelines and rules. I don't like rules, and I don't like arbitrary rules.

The points you make are all reasonable and thoughtful, and I agree with everything you write, these are legitimate everyday scenarios. I believe that some cultural changes may be necessary from all status-go contributors and this will in some cases cause some slowing down of development speed. This is not a bad thing, in many cases it should reduce the overall development and QA time spent on features.

My opinion is that policies should be a social contract that status-go contributors agree to, this is why I have included a lot of detail about the importance of consensus and inclusivity. Policies should be introduced for things that can not be automated but are still essential for the long term health of the repo. The examples Igor make are good ones to highlight, as they show a distinction between what is automatable and what is not, yet both are needed for the long term health of the repo.

old habits also do well because they allow to move forward easily, even if it is a short-sighted action.

This particularly is an incredibly important point Michał, and it is in fact a major motivator for introducing a policy process that requires a high level of consensus. By engaging all contributors and leads my personal hope is that short-sighted behaviour will be seen as somewhat selfish and generally detrimental to the work of our fellow contributors, even across teams and specialities.

By requiring a very high level of consensus for any policy we can build mutually approved guidelines that will ensure that contributors from many teams and backgrounds have clear expectations and an even playing field.


Please see #6165 (comment)

@alaibe
Copy link
Collaborator

alaibe commented Dec 11, 2024

I agree with the point above—policies are only valuable if they are enforced. I’ve seen many policies that were never enforced and ended up in limbo.

Wouldn’t it be better to focus on building shared knowledge rather than trying to police everything? In my opinion, the real question should be: How can we ensure every core contributor is fully autonomous and able to contribute safely? Instead of asking, How can we enforce everything?

Lately, there’s been a trend of issuing messages “by decree of the guild” followed now by a new policies system. However, I don’t recall being invited to demos showcasing what can already be done in, for example, status-go, or how the guild has improved things over time (and u guys did, no doubt). Instead, I often see decrees and policies.

To be clear, I do believe that adding policies is sometimes necessary and valuable—this is why I’m approving the PR. However, I’d love to see a shift towards a different approach: focusing on sharing knowledge rather than merely enforcing it

@igor-sirotin
Copy link
Collaborator

igor-sirotin commented Dec 11, 2024

I agree with the point above—policies are only valuable if they are enforced. I’ve seen many policies that were never enforced and ended up in limbo.

💯

Wouldn’t it be better to focus on building shared knowledge rather than trying to police everything?

  1. We don't want to police everything. This is to agree on the contribution rules.
  2. Keeping the agreements documented in the repo is exactly about sharing knowledge.

@alaibe Or I think I'm missing your point about "sharing knowledge"?
I feel that it's about sharing knowledge about the codebase, but it seems to be not related to the topic at all 🤔

Lately, there’s been a trend of issuing messages “by decree of the guild” followed now by a new policies system.
... I often see decrees and policies.

I am sorry if we made you feel this way. We never liked this and only allowed ourselves to use By Decree of the Guild for minor obvious things. In fact, it was only PR title check, status-go goals and Breaking Changes Guidelines. Which I believe are minor things (with 1 of them bing only informational) that didn't encounter any disagreement.

This policies system is exactly to prevent such one-sided notification system.

@osmaczko
Copy link
Contributor

The backbone of the Status product, aka status-go, is a place without ownership (there's no dedicated team; the status-go guild is just a collection of CCs from different teams who try to improve things on a best-effort basis). status-go is developed by every team in Status, and that's fine, as the work is mainly driven by business priorities. The lack of ownership has an obvious drawback, which is the health of the codebase. People jump in, implement features, and jump out. The frequency of such actions varies greatly between contributors and usually goes hand in hand with the quality of the changes. I believe that, in such an environment, guidelines are not enough. Note that policies can and will go hand in hand with guidelines.

In the past, we've struggled a lot with regressions, breaking changes, and development speed—all caused by the workflow we've had until now. The initiative with policies is to agree on things that are a clear MUST for status-go to improve. The process is designed to establish consensus among CCs before introducing any enforced policy. This is exactly to avoid decisions made in isolation and announcements like "By decree of the guild." The number of approvals and potential discussions makes it difficult to add or change policies, which, we believe, will result in a limited number of well-thought-out, high-quality, and unambiguous policies. Policies will be enforced by CI checks, where possible.

CC @ilmotta @alaibe

Copy link
Contributor

@friofry friofry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's good to have agreements on how we interact with the repo. The policy-0 may look a bit "formal" RFC style, but the intention is great, to reduce chaos and improve quality and transparency.

I look forward to seeing the first policy come out.

Copy link
Contributor

@osmaczko osmaczko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR.

I think we missed an important aspect, which is how to handle exceptions to the policies. I am pretty sure there will be some, and we need to apply common sense in this case. If there are many approved exceptions, it means the policy is wrong and needs to be re-formulated.

I propose to add:

Policy exceptions

  • Exception to the policy MUST be documented with a clear justification in textual form.
  • Exception to the policy MUST be approved by at least one team lead (of Status Desktop and Mobile).
  • Exception to the policy MUST be approved by at least one member of the status-go Guild.
  • Policies MAY define additional rules for exceptions, provided these baseline requirements are also met.


Policy Zero establishes the foundational guidelines for creating, reviewing, and maintaining policies in the `status-go` GitHub repository. This policy aims to create a collaborative, inclusive, and transparent process for defining repository policies, specifically regarding how developers engage with and contribute to the repository.

# Submitting a Policy Proposal
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe it would be helpful to include the justification for the given policy as well.

  • A policy MUST include a brief justification, addressing the question: "Why has this policy been introduced?"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is an excellent point and I will add that now

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually added this to my latest pending commit.

@friofry
Copy link
Contributor

friofry commented Dec 12, 2024

Thanks for the PR.

I think we missed an important aspect, which is how to handle exceptions to the policies. I am pretty sure there will be some, and we need to apply common sense in this case. If there are many approved exceptions, it means the policy is wrong and needs to be re-formulated.

I propose to add:

Policy exceptions

  • Exception to the policy MUST be documented with a clear justification in textual form.
  • Exception to the policy MUST be approved by at least one team lead (of Status Desktop and Mobile).
  • Exception to the policy MUST be approved by at least one member of the status-go Guild.
  • Policies MAY define additional rules for exceptions, provided these baseline requirements are also met.

I recall the common understanding we agreed upon:
Any rule can be bypassed if it shouldn't block urgent PRs. However, the author must ensure a ticket is created to address this issue by the next release, with approval and awareness from some status-go members, team leads, and QA.

@igor-sirotin
Copy link
Collaborator

We can also specify codeowners for this directory, according to the rules in the policy:

/_docs/policies       @status-im/status-go-guild @iurimatias @alaibe @shivekkhurana @ilmotta

@igor-sirotin
Copy link
Collaborator

Also, do you think we clear everything else in _docs/policies/* in this PR?
As anything inside it should be introduced according to policy zero.

cc @status-im/status-go-guild

@osmaczko osmaczko requested a review from iurimatias December 12, 2024 20:31
@shivekkhurana
Copy link
Contributor

shivekkhurana commented Dec 13, 2024

@Samyoul

  1. Do you feel it makes sense to have a template to introduce policies ? Like EIPs
  2. What happens if the Policy is not approved ? Do we just record the decision on the PR and close it ?

@igor-sirotin
Copy link
Collaborator

  1. Do you feel it makes sense to have a template to introduce policies ? Like EIPs

@shivekkhurana I think we don't need this, as there should not be many policies. There should be not more than 5, worst case 10. So I wouldn't bother with a template in this case.
Also, at this point a some freedom of form is probably better, as we don't yet exactly know what will be in the policies.

@Samyoul
Copy link
Member Author

Samyoul commented Dec 16, 2024

@alaibe Your feedback here is very valuable, thank you for sharing it. I am very grateful that your thoughts were not made any later, as they all need to be addressed now.

The points you raise are the exact reason why a lot of time was spent trying to build into this policy as much language on requiring a high level of consensus and inclusivity. The README.md especially focuses on the respectful collaboration we all want in any part of our interactions.

Lately, there’s been a trend of issuing messages “by decree of the guild” followed now by a new policies system.

This point is really important to me, and for what it is worth this is an internally joke about the impotence of the Guild, though when reflected through your perspective it communicates as a thoughtless mandate. I am sorry, I don't want anyone to feel excluded, let alone be excluded. We will not use language like "by decree ..." any more. Thank you Anthony for your input here.

However, I’d love to see a shift towards a different approach: focusing on sharing knowledge rather than merely enforcing it.

I wholeheartedly agree with this sentiment. Policies should not exist in isolation or feel like rules imposed from above; they should be tools that empower everyone to contribute collaboratively and effectively. That’s why we’ve tried to weave into this process not only mechanisms for consensus but also a foundation of shared understanding and collaboration.

To address your specific concerns more concretely, I propose we make a deliberate effort to prioritise transparency and knowledge-sharing as part of the policy process moving forward. For example, we could organise regular demos or discussions to showcase how existing processes or checks like those the Guild have already introduced to status-go are evolving, what improvements have been made, and how they align with the consensus driven policies we hope to introduce. This would allow everyone to see the “why” behind the policies and offer a platform for constructive dialogue.

I also really appreciate your point about autonomy. Policies shouldn’t be about policing; they should be a means of ensuring that all contributors have the context, resources, and freedom they need to act independently while maintaining alignment with shared goals. If this aspect isn’t coming through strongly enough in our current approach, then it’s clear we need to adjust.

Thank you again for your thoughtful feedback, Anthony. It’s through conversations like this that we can refine our approach and build a system that serves everyone better. Please don’t hesitate to share any additional thoughts or suggestions, we really need them.

@Samyoul
Copy link
Member Author

Samyoul commented Dec 16, 2024

@osmaczko what do you think of the following:

Also @friofry I've tried to incorporate your point:

Basically making exceptions is ok, but documentation and EXPLICIT approvals are required.


Policy Overrides

On rare occasions, circumstances may necessitate that an established policy is circumvented. This is considered an Override and MUST follow the process outlined below to ensure transparency and collective agreement:

  • Any override MUST be documented in textual form and MUST include:
    • The specific policy being overridden,
    • The rationale for taking this action,
    • The potential risks and impacts, and
    • Steps taken to minimise those risks.
  • Before proceeding, the override MUST be approved by:
    • At least one team lead from the Status Desktop or Mobile teams, AND
    • At least one member of the status-go Guild.
  • If an override MUST be executed immediately due to urgency, the action SHOULD be documented as soon as possible, and retrospective approval MUST be sought.
  • Policies MAY define additional rules for handling overrides, provided these baseline requirements are also met.

@Samyoul
Copy link
Member Author

Samyoul commented Dec 16, 2024

Hey @shivekkhurana ,

Thanks for the review and your approval.

  • Do you feel it makes sense to have a template to introduce policies ? Like EIPs

I know that this policy is quite formal, but if we have more than 10 policies total by this time next year that will be too much. I think for the moment we shouldn't attempt to formalise how policies are structured. That may become an evident issue we must address in time, but for the moment we should attempt to agree to just the basics. There is already some queries on our intentions and so for now perhaps we can set the foundation we currently have and iterate.

  • What happens if the Policy is not approved ? Do we just record the decision on the PR and close it ?

Yes I think that is basically what should happen. A record of the policy submission will exist as the PR and the discussion will be public for all to see. I would be very happy to hear any other step you think we should consider.

Copy link
Collaborator

@igor-sirotin igor-sirotin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish we didn't have to introduce this policy.
And I wish there was a simpler way.

However, in the circumstances of 5 teams working on single owned-by-nobody codebase, there's no other way.


Thank you @Samyoul for making this!

_docs/policies/README.md Show resolved Hide resolved
_docs/policies/submitting-policy.md Show resolved Hide resolved
'4. Enforceability and Respect for Policies' with 'Upholding Policies Through Consensus'
@Samyoul
Copy link
Member Author

Samyoul commented Dec 17, 2024

Update

🙏 Thank you everyone that has participated so far, I appreciate all the time that you've spent on this and caring enough to give feedback to ensure we get it right. 🦄

Changes from Feedback


I believe that I have addressed all the feedback from each of you that gave a review. Would you mind re-reviewing this PR and let me know if you are happy to approve it. Thank you

cc: @osmaczko @micieslak @ilmotta @igor-sirotin @shivekkhurana @friofry @alaibe

Copy link
Member

@jrainville jrainville left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is well written. I personally don't have any objection to this.

I also don't know if I'd ever add a policy myself, but at least we have a baseline to do it.

_docs/policies/tests.md Outdated Show resolved Hide resolved
Copy link
Contributor

@osmaczko osmaczko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Despite many differing opinions, I believe this is for the better.. or at least, I truly hope so.


# Review and Approval Process

The core function of the review and approval process for policy
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel that the descriptions for each point, while very well written, may add a bit of noise, as they overlap with the README.md or are already clear from the title itself. For this particular point, it seems the 'Collective Agreement' section already covers it well.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok that is fair. How about for this section I replace the description with a new item:

- Reviewers SHOULD keep in mind the principles communicated in 
[the README.md](README.md)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, perhaps we could include a mention of README.md under the Purpose section? For example: "For a more detailed description, please refer to the README.md." This would then implicitly apply to all points.

Comment on lines 56 to 57
- At least one team lead from the Status Desktop or Mobile teams, AND
- At least one member of the @status-im/status-go-guild GitHub team.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to follow the form from "Review and approval process" for consistency?

- Before proceeding, the override:
  - MUST be approved by at least one team lead (of Status Desktop and Mobile).
  - MUST be approved by at least one member of the @status-im/status-go-guild

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, that is reasonable. What do you think about the following?

- Before approving the non-policy PR, the override:
  - MUST be approved in writing by at least one team lead from the Status Desktop or Mobile teams, AND
  - MUST be approved in writing by at least one member of the @status-im/status-go-guild.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks good. Since the policy might not be related to PRs, I would remove the reference to 'non-policy PR.' This approach would cover both PR and non-PR changes, making the policy 0 more flexible.

- At least one member of the @status-im/status-go-guild GitHub team.
- In exceptional circumstances if an override MUST be executed
immediately due to urgency, the action SHOULD be documented as soon
as possible, and retrospective approval MUST be sought and recorded
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please elaborate what do you mean by retrospective approval?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm beginning to feel doubt about this point. I wanted to make a provision to allow for flexibility in the case of a truly exceptional case, something where we needed to act immediately and justify the actions after. That is what I mean by retrospective approval, you do the work and merge it quick but after you receive approval and explain what happened and why.

I wonder if this would open the door to abuse though. What do you think? (or anyone else)

Copy link
Contributor

@osmaczko osmaczko Dec 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe approval from one team lead and one member of status-go-guild covers the exceptional cases to be honest - meaning no retrospective approval.

- The rationale for taking this action,
- The potential risks and impacts of the override, and
- Steps taken to minimise those risks.
- Before proceeding, the override MUST be approved in writing in the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am wondering whether "in writing" is really needed? Wouldn't PR approval be enough?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Explicitly acknowledging that you approve the PR to breaking one or more policy items creates a document trail that records that the override approvers were not just approving the PR, they were also specifically approving the override.

I'm imagining a case where someone approves a PR that is circumventing a policy, the approval itself doesn't communicate that the approver knew they were also approving the override.

I am overthinking this? Am I missing something?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's good point, you are right. The more explicit the approval of exception the better.

- The potential risks and impacts of the override, and
- Steps taken to minimise those risks.
- Before proceeding, the override MUST be approved in writing in the
circumventing feature PR by:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there might be some policies unrelated to PRs 🤔 A very abstract example could be something like a 'GitHub teams management policy' - not the best example, but I hope you get my point.

Copy link
Member Author

@Samyoul Samyoul Dec 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good point, what about replace "feature PR" with "non-policy PR"? I'm trying to communicate that the overriding PR is not another policy PR.

Suggested change
circumventing feature PR by:
circumventing non-policy PR by:

Let me know if I am not getting your point.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should add a new item?

- A policy MUST not override an other policy

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I meant is that policy can be in theory violated not necessarily by code (aka no PR triggered). I don't have many examples in my mind, but would be great to keep policy 0 generic enough to allow such cases.

_docs/policies/submitting-policy.md Outdated Show resolved Hide resolved
.github/CODEOWNERS Show resolved Hide resolved
Copy link
Contributor

@chaitanyaprem chaitanyaprem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

good to have such policy process defined, nice initiative @Samyoul .

Copy link
Contributor

@qfrank qfrank left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your effort. I hope for there won't be too much policies and hard to understand just like reading a law, yet I look forward to the implementation of knowledge sharing in doc and guidelines after this. @Samyoul

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.