Contribution Workflow

May 8, 2026 · View on GitHub

The Fabric Smart Client project adopts the contribution workflow developed by the Hiero community, presented at LFDT Maintainer Days (recording).

The process is designed to:

  • Reduce duplicate work and assignment conflicts.
  • Give external contributors a clear path to claim and deliver work.
  • Keep issues and PRs moving without requiring constant manual intervention from maintainers.

Issue Lifecycle

Issue Types

Every issue should have a type:

TypeMeaning
BugSomething is broken
FeatureNew feature or improvement
TaskA specific, bounded piece of work

And one of the following status labels:

LabelMeaning
status: awaiting triageNew issue that needs to be reviewed and categorized by maintainers
status: ready for devFully defined and ready for a contributor to pick up
status: in progressA contributor is actively working on this issue

An issue without a status: ready for dev label is not ready for contribution.

Skill System

Every issue carries a skill-level label that determines who can claim it:

LabelPrerequisite
skill: good first issueNone — open to all (max 5 completions per contributor)
skill: beginner2 completed skill: good first issue issues
skill: intermediate3 completed skill: beginner issues
skill: advanced3 completed skill: intermediate issues

When you comment /assign, the bot verifies your prerequisite count. If the check fails, it posts a comment showing your current progress and links to issues you can work on first.

A contributor who has already completed any issue at a given level or higher automatically satisfies prerequisites for lower levels.

Creating an Issue

Anyone may open an issue using the bug, feature, or task template. New issues start untriaged.

Maintainers and core contributors review new issues and apply status: ready for dev once the issue is well-defined, scoped, and accepted.

Parent and Child Issues

For larger efforts, a parent issue may be opened to capture the overall goal, with individual child issues that are well scoped and actionable. Each child issue is the unit of assignment, status: ready for dev labeling, and PR linking. Note that dependencies between children can be expressed using the Marked as blocked by relationship.

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 status: ready for dev.
    • The issue has a skill-level label and the contributor meets the prerequisite (see Skill System).
    • The contributor has no more than two open assigned issues (limit across all issues in the repository).
  3. If all 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 — this bypasses all bot eligibility checks.

Issue Inactivity

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

ThresholdAction
5 days of no activityBot posts a reminder tagging the assignee
7 days of no activityBot unassigns the contributor with an explanatory comment; issue becomes available for re-assignment

Issues carrying status: blocked are exempt from the above timeline. Instead, the bot posts a check-in comment every 30 days asking whether the issue is still blocked. The label is applied by maintainers when progress is gated on an external factor (e.g. a dependency or upstream fix).

The 7-day unassignment window is intentionally short to keep the queue moving. For issues of higher complexity, a maintainer may manually extend the window or re-assign as appropriate.

Pull Request (PR) Lifecycle

Linking a PR to an Issue

Every PR opened by a contributor must:

  1. Reference an open issue carrying status: ready for dev, using a closing keyword in the PR description (e.g. Fixes #123).
  2. Have the PR author assigned to the linked issue.

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

If either condition is not met for a contributor's PR, the bot posts a warning comment.

PR Labels

LabelMeaning
status: needs reviewThe pull request is ready for maintainer review
status: needs revisionThe pull request requires changes from the author before it can be reviewed or merged

PR Inactivity

ThresholdAction
PR labeled status: needs reviewSkipped — the bot does not flag PRs that are waiting for maintainer review
PR labeled status: blockedExempt from close/warn; bot posts a check-in comment every 30 days instead
5 days of no activity (commits, review responses, comments)Bot posts a reminder tagging the author
7 days of no activityBot closes the PR with an explanatory comment

When a PR is auto-closed, the linked issue is also reset: the assignee is removed and the label reverts to status: ready for dev. The contributor may re-claim the issue by commenting /assign.

PR Checks

Standard automated checks run on every PR:

  • DCO sign-off
  • Unit tests
  • Integration tests
  • Linter / static analysis

The full set of checks is defined in the repository's CI configuration.

Roles

RoleDefinition
MaintainerHas admin or write permission on the repository
Core contributorHas triage permission on the repository
ContributorEveryone 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.

Maintainer and Core Contributor Commands

CommandWho can useEffect
/finalizeMaintainers and core contributorsValidates that the issue has a skill-level label, updates the issue title and body to the expected format, and transitions the status label to status: ready for dev.

References