hyperledger / hyperledger/fabric-x

Contribution process proposal

Open
#130 15 comments 3 reactions 1 assignee Claimed by @mbrandenburger View on GitHub
enhancement
Dominant language
Go
Stars
64
Forks
80
Avg merge
1d 22h
Merged PRs (30d)
15

Description

# Contribution Process Proposal

With the recent increase in contribution activity in our repository, it seems like a good time to formalize and automate our contribution process.

The [hier-sdk-python](https://github.com/hiero-ledger/hiero-sdk-python)
repository uses a well-designed workflow developed by its community. @exploreriii also gave an excellent presentation on this at LFDT Maintainer Days ([available on YouTube](https://www.youtube.com/watch?v=I87WCpiXOOs)). Inspired by that work, I’d like to propose the following process.

## Roles

| Role | Definition |
|----------------------|---|
| **Maintainer** | Has `admin` or `write` permission on the repository |
| **Core contributor** | Has `triage` permission on the repository |
| **Contributor** | Everyone else |

Maintainers and core contributors are exempt from all assignment and PR-linking rules described below. PRs from `dependabot` are also exempt. Maintainers may directly assign any contributor to any issue at any time, bypassing eligibility checks.

## Issue Lifecycle

### Issue types

Every issue should carry a type:

- `bug` — something is broken
- `feature` — new feature or improvement
- `task` - a specific piece of work

And zero or more state labels:

- `good-first-issue` — well-scoped, self-contained; suitable for a first contribution
- `ready` — triaged and accepted; an external contributor may open a PR for this issue

An issue without a `ready` label is **not ready for contribution**. External contributors should not start work on issues without one of these labels.

### Creating an issue

Anyone may open an issue using the `bug` or `feature` template. New issues start untriaged. Maintainers review and apply `ready` or `good-first-issue` once the issue is well-defined and accepted.

### Claiming an issue

Contributors must claim an issue **before** opening a PR:

1. Comment `/assign` on the issue.
2. The bot checks:
- The issue carries `ready`.
- The contributor has **no more than two open assigned issues** (limit: 2 across all issues).
3. If both conditions are met, the bot assigns the contributor and confirms in a comment.
4. To release an issue voluntarily, comment `/unassign`.

Maintainers may assign any contributor directly via GitHub's native assignment UI — this bypasses all bot eligibility checks.

### Issue inactivity

Once assigned, the bot monitors activity (comments, linked PR events):

- **After 5 days of no activity**: bot posts a reminder comment tagging the assignee.
- **After 7 days of no activity**: bot unassigns the contributor with an explanatory comment. The issue becomes available for others to claim.
- **After 9 days assigned with no linked PR opened**: bot posts a reminder asking the contributor to open a PR or comment `/working` if they are still active.

A contributor can reset the inactivity timer at any time by commenting `/working`.

## PR Lifecycle

### Linking a PR to an issue

Every PR opened by an contributor must reference an open issue carrying `ready`, using a closing keyword in the PR description (e.g. `Fixes #123`). Additionally:

- The PR author must be **assigned to the linked issue**.

PRs by maintainers, core contributors, and `dependabot` are exempt from both requirements.

If either condition is not met for an contributor's PR, the bot posts a warning comment. If the PR remains non-compliant for **12 hours**, it is automatically closed with an explanation.

### PR inactivity

- **After 5 days of no activity** (commits, review responses, comments): bot posts a reminder tagging the author.
- **After 7 days of no activity**: bot closes the PR with an explanatory comment. The linked issue is **not** automatically unassigned — the contributor may open a new PR against the same issue within their original assignment window.

### PR checks

Standard automated checks run on every PR:

- DCO sign-off
- Unit tests
- Integration tests
- Linter
- etc ..

A PR may not be merged until all checks pass. Maintainers may override in exceptional circumstances.

## Coordination Summary

```
Maintainer triages issue → labels it `ready`

Contributor comments /assign

Bot checks: label ok + open assignments within limits → assigns contributor

Contributor opens PR with "Fixes #N" within 7 days

Bot verifies: issue is open + author is assigned to it

CI passes + maintainer review → merge → issue closes automatically
```

---

# Next steps

Please review the proposal and share your feedback so we can refine it further. Once aligned, we can implement the process and test it on the fabric-x repository. If it proves effective, we can roll it out across other repositories (e.g., orderer, committer, FSC, TokenSDK, etc.).

What do you think?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.