From 14de0ae736d7b7917a5488436fe850095fb15b3e Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Fri, 8 Mar 2024 16:09:50 -0500 Subject: [PATCH 01/10] init --- .../good_first_and_help_wanted_issues.md | 68 +++++++++++++++++++ documentation/meta/contribution/index.md | 1 + 2 files changed, 69 insertions(+) create mode 100644 documentation/meta/contribution/good_first_and_help_wanted_issues.md diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md new file mode 100644 index 00000000000..55a5fd0321e --- /dev/null +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -0,0 +1,68 @@ +# Maintainer guidelines for "Good first" and "Help wanted" issues + +GitHub issues tagged "good first issue" and "help wanted" are often a +contributors entry-point into a project. As such, it is important that these +issues not only are true to their tag names, but that they are also giving new +contributors an ideal first experience. Finally, _providing_ this experience +needs to be straightforward and repeatable for maintainers. + +Here you will find guidelines, predefined responses, and tools for creating +these issues and guiding the contributors who seek to resolve them. + +# Good first issues + +## What makes an issue a good first issue? + +Generally speaking, a good first issue is one that provides a contributor an +isolated, discrete task that teaches the contributor something new about +Openverse. This learning enables the contributor to take on subsequent issues +with increased confidence. + +Here are some example signs that an issue is sufficiently isolated. These +issues: + +- Do not require a holistic understanding of Openverse's ingestion pipeline +- Are limited to single programming language or programming paradigm (i.e, + frontend JS, CSS, and markup) +- Occupy a single slice of the Openverse stack +- Touch a single file or as few files as necessary; ideally these files are + colocated in the repository +- They are based on the `main` branch and not sub-features of a larger, multi-PR + changeset. + +Other qualities of appropriate "good first" issues are that they: + +- Are not 'high priority', 'critical priority', or otherwise time-sensitive. +- Are appropriate for those new to open source or Git workflows in-general. + +## Writing good first issue descriptions + +Good first issue descriptions should provide as much context as possible. These +issues should generally be self-contained; all the documentation necessary to +complete the issue should be included or linked to in the issue description. The +aim is to make the issue as approachable as possible while setting clear +expectations. This up-front effort is better for contributors and decreases +maintainer burden through the development process of an issue. + +Descriptions should: + +- Clearly articulate the expected outcome of resolving the issue +- Link to the relevant files and/or lines of code which need changing +- Reference any past PRs which will help the contributor, for example: + - A PR with a similar change + - A PR which oroginally implemented the feature being modified + +--- + +## Reply Templates + +- Scenario: A "first time contributor" asks if they can work on an issue. + + ```md + Hi @{user}, thank you for your interest in contributing to Openverse! I've + assigned this issue to you. If you have any questions, please leave them here. + Please check out our + [welcome](https://docs.openverse.org/general/contributing.html) and + [quickstart](https://docs.openverse.org/general/quickstart.html) documentation + pages for getting started. + ``` diff --git a/documentation/meta/contribution/index.md b/documentation/meta/contribution/index.md index 9cb3538b324..019ec8a20d5 100644 --- a/documentation/meta/contribution/index.md +++ b/documentation/meta/contribution/index.md @@ -14,4 +14,5 @@ communication_aliases becoming_a_committer maintainer_tasks codespell +good_first_and_help_wanted_issues ``` From 4aafe3c938117ff28548fb84176f033c53df2363 Mon Sep 17 00:00:00 2001 From: zack <6351754+zackkrida@users.noreply.github.com> Date: Wed, 13 Mar 2024 13:55:11 -0400 Subject: [PATCH 02/10] Apply suggestions from code review Co-authored-by: sarayourfriend <24264157+sarayourfriend@users.noreply.github.com> --- .../good_first_and_help_wanted_issues.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index 55a5fd0321e..d452dce3e8c 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -46,12 +46,16 @@ maintainer burden through the development process of an issue. Descriptions should: -- Clearly articulate the expected outcome of resolving the issue +- Clearly articulate the expected outcome of resolving the issue. Include any of the following, when relevant: + - Changes (modifications or additions) to tests + - Link to instructions for updating Playwright snapshots if the change might require it + - Changes (modifications or additions) to documentation - Link to the relevant files and/or lines of code which need changing - Reference any past PRs which will help the contributor, for example: - A PR with a similar change - - A PR which oroginally implemented the feature being modified - + - A PR which originally implemented the feature being modified +- Relevant Openverse domain knowledge, either links to succinct documentation or links and a summary of the important aspects when documentation is detailed + - Ideally "good first issue"s require essentially no Openverse-specific domain knowledge, but if they at all do (for example, to explain why a non-obvious solution is requested) then it must be included --- ## Reply Templates @@ -64,5 +68,5 @@ Descriptions should: Please check out our [welcome](https://docs.openverse.org/general/contributing.html) and [quickstart](https://docs.openverse.org/general/quickstart.html) documentation - pages for getting started. + pages for getting started with setting up your local environment. ``` From b17794ec04da73a5ca0f9a7830226a27bcf7dd38 Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Wed, 13 Mar 2024 14:12:40 -0400 Subject: [PATCH 03/10] Clarify maintainer/contributor benefits of upfront work. Co-authored-by: sarayourfriend <24264157+sarayourfriend@users.noreply.github.com> --- .../good_first_and_help_wanted_issues.md | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index d452dce3e8c..19b0fa38340 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -27,35 +27,47 @@ issues: - Occupy a single slice of the Openverse stack - Touch a single file or as few files as necessary; ideally these files are colocated in the repository -- They are based on the `main` branch and not sub-features of a larger, multi-PR - changeset. +- Are based on the `main` branch and not sub-features of a larger, multi-PR + changeset Other qualities of appropriate "good first" issues are that they: -- Are not 'high priority', 'critical priority', or otherwise time-sensitive. -- Are appropriate for those new to open source or Git workflows in-general. +- Are not 'high priority', 'critical priority', or otherwise time sensitive +- Are appropriate for those new to open source or Git workflows in-general +- Can be, approximately, completed within two hours, one of which may be + necessary for local development environment setup ## Writing good first issue descriptions Good first issue descriptions should provide as much context as possible. These issues should generally be self-contained; all the documentation necessary to -complete the issue should be included or linked to in the issue description. The -aim is to make the issue as approachable as possible while setting clear -expectations. This up-front effort is better for contributors and decreases -maintainer burden through the development process of an issue. +complete the issue should be included with or linked to in the issue +description. The aim is to make the issue as approachable as possible while +setting clear expectations. This up-front effort is to the benefit of +contributors and maintainers. Ideally, it decreases the amount of time +maintainers spend reviewing PRs that have not met the minimum requirements +(e.g., no unit tests, linting failures, and so on). For contributors, it helps +prevent them from feeling discouraged after completing the "core functionality" +of a PR to then have to revisit the PR and add significant changes. Descriptions should: -- Clearly articulate the expected outcome of resolving the issue. Include any of the following, when relevant: +- Clearly articulate the expected outcome of resolving the issue. Include any of + the following, when relevant: - Changes (modifications or additions) to tests - - Link to instructions for updating Playwright snapshots if the change might require it + - Link to instructions for updating Playwright snapshots if the change might + require it - Changes (modifications or additions) to documentation - Link to the relevant files and/or lines of code which need changing - Reference any past PRs which will help the contributor, for example: - A PR with a similar change - A PR which originally implemented the feature being modified -- Relevant Openverse domain knowledge, either links to succinct documentation or links and a summary of the important aspects when documentation is detailed - - Ideally "good first issue"s require essentially no Openverse-specific domain knowledge, but if they at all do (for example, to explain why a non-obvious solution is requested) then it must be included +- Relevant Openverse domain knowledge, either links to succinct documentation or + links and a summary of the important aspects when documentation is detailed + - Ideally "good first issue"s require essentially no Openverse-specific domain + knowledge, but if they at all do (for example, to explain why a non-obvious + solution is requested) then it must be included + --- ## Reply Templates From 220cf85f9aaafb1cb29c38475e47895fdff944ea Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Wed, 13 Mar 2024 14:45:39 -0400 Subject: [PATCH 04/10] Additional template for an incorrect PR description --- .../contribution/good_first_and_help_wanted_issues.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index 19b0fa38340..fb8e0204650 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -82,3 +82,11 @@ Descriptions should: [quickstart](https://docs.openverse.org/general/quickstart.html) documentation pages for getting started with setting up your local environment. ``` + +- Scenario: A community pull request author did not use the pull request + template or failed to fill out all sections correctly. + ```md + Hi @{user}, could you update your pr description to use the + [pull request template](https://github.com/WordPress/openverse/blob/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md)? + If you have any questions please let us know in the comments. + ``` From a24b157994a0e75ebb01d66aebb4f23f562236ec Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Thu, 21 Mar 2024 12:10:03 -0400 Subject: [PATCH 05/10] Issue boilerplate WIP and scenario formatting + additions --- .../good_first_and_help_wanted_issues.md | 107 ++++++++++++++---- 1 file changed, 87 insertions(+), 20 deletions(-) diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index fb8e0204650..9699fd98224 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -68,25 +68,92 @@ Descriptions should: knowledge, but if they at all do (for example, to explain why a non-obvious solution is requested) then it must be included +### Additional boilerplate for "good first issues" + +In addition to our standard issue template, good first issues should _also_ +contain the following block of requirements: + +```md +## Good first issue checks + +- Have I filled out the PR template correctly? + - Did I include testing instructions? +- Does my PR pass linting? (Test either via precommit or by running `just lint` + manually) +- Do all the tests still pass? + - If JavaScript changes, run `pnpm -r run test` + - If API changes, run ` just api/test` + - If catalog changes, run `just catalog/test` +``` + --- -## Reply Templates - -- Scenario: A "first time contributor" asks if they can work on an issue. - - ```md - Hi @{user}, thank you for your interest in contributing to Openverse! I've - assigned this issue to you. If you have any questions, please leave them here. - Please check out our - [welcome](https://docs.openverse.org/general/contributing.html) and - [quickstart](https://docs.openverse.org/general/quickstart.html) documentation - pages for getting started with setting up your local environment. - ``` - -- Scenario: A community pull request author did not use the pull request - template or failed to fill out all sections correctly. - ```md - Hi @{user}, could you update your pr description to use the - [pull request template](https://github.com/WordPress/openverse/blob/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md)? - If you have any questions please let us know in the comments. - ``` +## Reply templates and behaviors + +These predefined responses ("predefs") provide consistient solutions to common +situations. + +If you find yourself dealing with a recurring scenario that _isn't_ included in +this list, please submit a pull request to add it here. + +### Scenario 1: Issue Request + +A "first time contributor" asks if they can work on an issue. + +#### Initial Response + +```md +Hi `@user`, thank you for your interest in contributing to Openverse! I've +assigned this issue to you. If you have any questions, you may leave them here. + +Please check out our +[welcome](https://docs.openverse.org/general/contributing.html) and +[quickstart](https://docs.openverse.org/general/quickstart.html) documentation +pages for getting started with setting up your local environment. +``` + +#### Follow up + +Assign the issue to the user. + +### Scenario 2: Improper PR Template + +A community pull request author did not use the pull request template or failed +to fill out all sections correctly. + +#### Initial Response + +```md +Hi `@user`, could you update your pr description to use the +[pull request template](https://github.com/WordPress/openverse/blob/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md)? +If you have any questions please let us know in the comments. +``` + +#### Follow through + +If the contributor doesn't reply or update the PR, move on to +[scenario #3](#scenario-3-absent-contributor). + +### Scenario 3: Absent Contributor + +A contributor opened a pull request but hasn't updated it or responded to +changes in the required timeframe. + +#### Initial Response + +```md +Hi {@user}, are you still able to work on this PR? We appreciate all the work +you have completed so far. If you are not able to finish this pull request we +can unassign you, so a maintainer can take over the remaining work. +``` + +#### Follow through + +Wait 5 business days for the user to respond. If they do not respond, unassign +the PR, draft the PR, and reply with the following: + +```md +@{user} thank you again for your efforts here. I have unassigned this PR and +drafted it to be picked up by a maintainer when avaliable. If you would ever +like to resume work, do not hesitate to let us know here. +``` From c7fb7347a4a10b806172d1c6daf59de0483f22ce Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Thu, 21 Mar 2024 12:41:13 -0400 Subject: [PATCH 06/10] MVP --- documentation/general/contributing.md | 5 ++ .../good_first_and_help_wanted_issues.md | 47 ++++++++++++++++--- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/documentation/general/contributing.md b/documentation/general/contributing.md index 7207257003d..c41ad4ddc7b 100644 --- a/documentation/general/contributing.md +++ b/documentation/general/contributing.md @@ -86,6 +86,11 @@ issue be assigned to you when you're ready to work on it. - [Good first issues](https://github.com/WordPress/openverse/issues?q=is:issue+is:open+sort:updated-desc+label:%22good+first+issue%22) - [Issues wanting help](https://github.com/WordPress/openverse/issues?q=is:issue+is:open+sort:updated-desc+label:%22help+wanted%22) +It is reccommended that first-time contributors begin with a "good first issue". +For more information on how Openverse maintainers think about "good first +issues", please see +[our additional documentation](/meta/contribution/good_first_and_help_wanted_issues.md). + ## Non-code contributions If programming is not your cup of tea, there are ways to contribute to Openverse diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index 9699fd98224..506b3532df0 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -9,7 +9,11 @@ needs to be straightforward and repeatable for maintainers. Here you will find guidelines, predefined responses, and tools for creating these issues and guiding the contributors who seek to resolve them. -# Good first issues +> **Note**: Looking for quick information to deal with an open issue? See: +> +> - [Predefined responses](#reply-templates-and-behaviors) +> - [Timing and process](#timing-and-process) +> - [Good first issue template boilerplate](#additional-boilerplate-for-good-first-issue-templates) ## What makes an issue a good first issue? @@ -68,7 +72,7 @@ Descriptions should: knowledge, but if they at all do (for example, to explain why a non-obvious solution is requested) then it must be included -### Additional boilerplate for "good first issues" +### Additional boilerplate for good first issue templates In addition to our standard issue template, good first issues should _also_ contain the following block of requirements: @@ -82,11 +86,38 @@ contain the following block of requirements: manually) - Do all the tests still pass? - If JavaScript changes, run `pnpm -r run test` - - If API changes, run ` just api/test` + - If API changes, run `just api/test` - If catalog changes, run `just catalog/test` ``` ---- +## On "help wanted" issues + +All good first issues are naturally "help wanted" issues as well. "Help wanted" +issues which do not also include the "good first issue" label are excellent +candidates for second, third, fourth, and so on issues from repeat contributors. +If a contributor is labeled as a "first time contributor" in the GitHub user +interface, make sure the issue they are working on is indeed marked "good first +issue", or that it is otherwise clear that they have advanced knowledge of the +issue's problem space that makes them an appropriate candidate. + +For example, the maintainer of a 3rd party library we use might see we are +having an issue with their code and offer a PR with a fix. This would be +appropriate given their expertise. + +## Timing and process + +It can often be tricky to determine how and when to make requests of a comunity +contributor. The following table provides guidelines for specific scenarios. + +Response times may be from the contributor _or_ from a maintainer depending on +the situation. + +| Scenario | Recommended Response Time (Days) | +| -------------------------------------------- | ---------------------------------------------------------------- | +| New PR submitted | Typically priority based, but for community PRs should be 3 days | +| Maintainer has pinged PR author | 3-5 | +| Maintainer follow-up on previous PR feedback | 1-2 | +| PR is ready for merge | 1-2 | ## Reply templates and behaviors @@ -114,7 +145,9 @@ pages for getting started with setting up your local environment. #### Follow up -Assign the issue to the user. +Assign the issue to the user. Check on progress of the issue as part of our +regular prioritization process. If the contributor doesn't reply or create the +PR, move on to [scenario #3](#scenario-3-absent-contributor). ### Scenario 2: Improper PR Template @@ -132,7 +165,9 @@ If you have any questions please let us know in the comments. #### Follow through If the contributor doesn't reply or update the PR, move on to -[scenario #3](#scenario-3-absent-contributor). +[scenario #3](#scenario-3-absent-contributor). If they update the template, +proceed. If they ask for help or have other concerns, update the template for +them. ### Scenario 3: Absent Contributor From c0a02894497e0fcd3aedc1f1c0848be1ee71bd8d Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Thu, 21 Mar 2024 13:03:58 -0400 Subject: [PATCH 07/10] fix linting --- documentation/general/contributing.md | 2 +- .../meta/contribution/good_first_and_help_wanted_issues.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/general/contributing.md b/documentation/general/contributing.md index c41ad4ddc7b..fbd0485594d 100644 --- a/documentation/general/contributing.md +++ b/documentation/general/contributing.md @@ -86,7 +86,7 @@ issue be assigned to you when you're ready to work on it. - [Good first issues](https://github.com/WordPress/openverse/issues?q=is:issue+is:open+sort:updated-desc+label:%22good+first+issue%22) - [Issues wanting help](https://github.com/WordPress/openverse/issues?q=is:issue+is:open+sort:updated-desc+label:%22help+wanted%22) -It is reccommended that first-time contributors begin with a "good first issue". +It is recommended that first-time contributors begin with a "good first issue". For more information on how Openverse maintainers think about "good first issues", please see [our additional documentation](/meta/contribution/good_first_and_help_wanted_issues.md). diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index 506b3532df0..951f4f593c5 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -106,7 +106,7 @@ appropriate given their expertise. ## Timing and process -It can often be tricky to determine how and when to make requests of a comunity +It can often be tricky to determine how and when to make requests of a community contributor. The following table provides guidelines for specific scenarios. Response times may be from the contributor _or_ from a maintainer depending on @@ -189,6 +189,6 @@ the PR, draft the PR, and reply with the following: ```md @{user} thank you again for your efforts here. I have unassigned this PR and -drafted it to be picked up by a maintainer when avaliable. If you would ever +drafted it to be picked up by a maintainer when available. If you would ever like to resume work, do not hesitate to let us know here. ``` From c2392224f1c07080268093f6e39ebbbde2cfbe44 Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Sun, 31 Mar 2024 11:07:30 -0400 Subject: [PATCH 08/10] Revert documentation/general/contributing.md changes --- documentation/general/contributing.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/documentation/general/contributing.md b/documentation/general/contributing.md index fbd0485594d..7207257003d 100644 --- a/documentation/general/contributing.md +++ b/documentation/general/contributing.md @@ -86,11 +86,6 @@ issue be assigned to you when you're ready to work on it. - [Good first issues](https://github.com/WordPress/openverse/issues?q=is:issue+is:open+sort:updated-desc+label:%22good+first+issue%22) - [Issues wanting help](https://github.com/WordPress/openverse/issues?q=is:issue+is:open+sort:updated-desc+label:%22help+wanted%22) -It is recommended that first-time contributors begin with a "good first issue". -For more information on how Openverse maintainers think about "good first -issues", please see -[our additional documentation](/meta/contribution/good_first_and_help_wanted_issues.md). - ## Non-code contributions If programming is not your cup of tea, there are ways to contribute to Openverse From c000cb75bc0e9012ee777ec76c83ae4ebacacb88 Mon Sep 17 00:00:00 2001 From: zack <6351754+zackkrida@users.noreply.github.com> Date: Mon, 8 Apr 2024 10:41:20 -0400 Subject: [PATCH 09/10] Update documentation/meta/contribution/good_first_and_help_wanted_issues.md Co-authored-by: Olga Bulat --- .../meta/contribution/good_first_and_help_wanted_issues.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index 951f4f593c5..33f0b9a2f85 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -157,7 +157,7 @@ to fill out all sections correctly. #### Initial Response ```md -Hi `@user`, could you update your pr description to use the +Hi `@user`, could you update your PR description to use the [pull request template](https://github.com/WordPress/openverse/blob/main/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md)? If you have any questions please let us know in the comments. ``` From 363046b1f1a6da7226c06d8b9a5cdd4f77a4b348 Mon Sep 17 00:00:00 2001 From: zackdotcat Date: Mon, 8 Apr 2024 10:46:18 -0400 Subject: [PATCH 10/10] Refine follow-up instructions for Scenario 2 --- .../good_first_and_help_wanted_issues.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/documentation/meta/contribution/good_first_and_help_wanted_issues.md b/documentation/meta/contribution/good_first_and_help_wanted_issues.md index 33f0b9a2f85..3be0b7ba676 100644 --- a/documentation/meta/contribution/good_first_and_help_wanted_issues.md +++ b/documentation/meta/contribution/good_first_and_help_wanted_issues.md @@ -164,10 +164,15 @@ If you have any questions please let us know in the comments. #### Follow through -If the contributor doesn't reply or update the PR, move on to -[scenario #3](#scenario-3-absent-contributor). If they update the template, -proceed. If they ask for help or have other concerns, update the template for -them. +If the PR author updates the template, proceed. If they ask for help, continue +work on the PR but do not update the template, or have other concerns, update +the template for them, within reason. For example, if it's a matter of checking +the completed checklist items, go ahead. If the PR requires detailed testing +instructions, fix everything else with the template and ping the author again to +request the testing instructions. + +If the contributor doesn't reply or update the PR description, move on to +[scenario #3](#scenario-3-absent-contributor). ### Scenario 3: Absent Contributor