From 37bc1386396b242dadd5ddc5f45a31ee34ed5713 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Sun, 1 Oct 2023 23:51:27 +0000 Subject: [PATCH 01/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 117 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 BOUNTY_PROGRAM.md diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md new file mode 100644 index 000000000..ade52b858 --- /dev/null +++ b/BOUNTY_PROGRAM.md @@ -0,0 +1,117 @@ +# AsyncAPI Bounty Program + + +Only individuals and sole proprietors in person (no legal entities or subcontractors) are eligible to participate in the Bounty Program. + +If Bounty Program Participant submits invoice expenses for more than $600 USD per calendar year to a Collective at OpenCollective with a Fiscal Host in the US ([AsyncAPI](https://opencollective.com/asyncapi) fits this description), she or he will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. + + +## Budget + +The budget of the Bounty Program per calendar year is twenty thousand US dollars 00 cents (USD 20,000.00), which is five thousand US dollars 00 cents (USD 5,000.00) per calendar quarter (three calendar months). + +Reward for Bounty Issue of Complexity Level `Medium` is two hundred US dollars 00 cents (USD 200.00). + +Reward for Bounty Issue of Complexity Level `Advanced` is four hundred US dollars 00 cents (USD 400.00). + +Approximate quantity of Bounty Issues per calendar quarter varies from thirteen to twenty five (from ((12 * 400) + (1 * 200)) to (25 * 200)). + + +## Prioritization of participants + +Bounty Program Participants are prioritized in the following order: + +1. AsyncAPI maintainers (from any repository) + +2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub organization) + +3. Other (if a GitHub user doesn't fall under the above, the maintainer can determine the criteria i. e. regular volunteers, etc) + + +## Bounty Issues' numbering + +To ensure ease of referencing, searching and automation, strictly defined format of Bounty Issues' numbering is used: + +1. In submissions of issues for Bounty Program: `[repo]#[issue]` (`cli#38`) + +2. In invoice claiming reward: invoice subject `Bounty [repo]#[issue]` (`Bounty cli#38`), tag `bounty` + + +## Submission + +Bounty Issues are submitted containing the following five fields: + +1. Number: `cli#361` + +2. Full GitHub link: https://github.com/asyncapi/cli/issues/361 + +3. Scope: `We need to extend the functionality of '--version' flag in AsyncAPI CLI to include info about versions of other AsyncAPI libraries used in the project` + +4. Complexity: `Medium` | `Advanced` + +5. Type: `Coding` | `Docs` | `Design` + + +## Timeline + +Start date in Bounty Program is counted from Monday of the next week when assignment of the Bounty Issue on GitHub happened. + +Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Program, UTC offset in Bounty Program Issues' start dates, end dates and weekdays is used. Start dates should be viewed as having addition of `00:00:00 UTC+12:00`. End dates and weekdays should be viewed as having addition of `23:59:59 UTC-12:00`. + +For Bounty Issues of Complexity Level `Medium`: +- Draft Pull Request must be submitted not later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request +- Final Pull Request must be submitted not later than on Friday of fourth week from the start date and merged not later than on Friday of sixth week from the start date + +For Bounty Issues of Complexity Level `Advanced`: +- Draft Pull Request must be submitted not later than on Friday of third week from the start date and updated on every Friday until submission of Final Pull Request +- Final Pull Request must be submitted not later than on Friday of sixth week from the start date and merged not later than on Friday of eighth week from the start date + +If the Bounty Program Participant has not provided a weekly PR update, they are pinged as a reminder to do so. +In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline. + +### Example Bounty Program Timeline + +| Complexity Level | Assignment date (by GitHub) | Start date (by BP rules) | End date (by BP rules) | Draft PR submission | Final PR submission | Final PR merge | +|------------------|-----------------------------|--------------------------|------------------------|---------------------|---------------------|----------------| +| Medium | 2023-04-27 | 2023-01-05 | **2023-06-09** | 2023-05-12 | 2023-05-26 | **2023-06-09** | +| Advanced | 2023-04-26 | 2023-01-05 | **2023-06-23** | 2023-05-19 | 2023-06-09 | **2023-06-23** | + + +## Extension of Bounty Issue's Timeline + +In case of absence of the person in charge from the AsyncAPI side, all target dates of the Bounty Issue are increased by duration of absence of the person in charge from the AsyncAPI side + one week. '+ one week' is required because if the person in charge from the AsyncAPI side was absent for a month or two (for any reason), the Bounty Program Participant would then have to spend some time getting back to the insides of the issue and nearly unfamiliar at that time his own code. + +In case of unpredicted force majeure circumstances which could not be foreseen and/or are beyond control of both contributor and maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in Bounty Issue's or Pull Request's comments. + + +## Constraints + +AsyncAPI maintainers are allowed to work on Bounty Issues submitted by themselves. + +Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous delivery. + +Doc documenting functionality, which is being covered in the Bounty Issue, should be created, edited, or altered simultaneously with Bounty Issue's resolution, in every situation when it's applicable. + +Abuses of edge cases, like one second behind deadline and similar, are not tolerated. + + +## Ban + +Should any Bounty Program Participant drop or fail to complete the Bounty Issue assigned to them once, she or he will not be eligible to participate in the Bounty Program during current and next calendar quarter as a penalty. + +Dropping or failing to complete the Bounty Issue for the second time will result in permanent ban from participation in the Bounty Program. + + +## Instruction on gaining a Ban + +First ask to assign the Bounty Issue to you, _only then_ start to think on the task, understand you can't do it, silently drop. + + +## Instruction on avoiding a Ban + +Think on the task, make sure that you understand how to do it and CAN do it, ask to assign the Bounty Issue to you, meet all milestones of the Bounty Issue Timeline. + + +##### This document is the consolidated and formalized version of information publicly available in free form at +##### https://github.com/orgs/asyncapi/discussions/541#discussioncomment-5462792 +##### https://github.com/orgs/asyncapi/discussions/877#discussioncomment-6970799 From 49145429b0e981165bb16c32a65a9c955f05b31a Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Sun, 1 Oct 2023 23:51:27 +0000 Subject: [PATCH 02/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index ade52b858..6a9378dc8 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -1,11 +1,6 @@ # AsyncAPI Bounty Program -Only individuals and sole proprietors in person (no legal entities or subcontractors) are eligible to participate in the Bounty Program. - -If Bounty Program Participant submits invoice expenses for more than $600 USD per calendar year to a Collective at OpenCollective with a Fiscal Host in the US ([AsyncAPI](https://opencollective.com/asyncapi) fits this description), she or he will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. - - ## Budget The budget of the Bounty Program per calendar year is twenty thousand US dollars 00 cents (USD 20,000.00), which is five thousand US dollars 00 cents (USD 5,000.00) per calendar quarter (three calendar months). @@ -37,9 +32,9 @@ To ensure ease of referencing, searching and automation, strictly defined format 2. In invoice claiming reward: invoice subject `Bounty [repo]#[issue]` (`Bounty cli#38`), tag `bounty` -## Submission +## Bounty Issue Submission -Bounty Issues are submitted containing the following five fields: +Up to two Bounty Issues per each calendar quarter round of the Bounty Program are submitted in comments of dedicated AsyncAPI GitHub Organization's Discussion by the AsyncAPI Maintainer of the repository where the candidate for the Bounty Issue is residing, containing the following five fields: 1. Number: `cli#361` @@ -52,7 +47,7 @@ Bounty Issues are submitted containing the following five fields: 5. Type: `Coding` | `Docs` | `Design` -## Timeline +## Bounty Issue Timeline Start date in Bounty Program is counted from Monday of the next week when assignment of the Bounty Issue on GitHub happened. @@ -69,7 +64,7 @@ For Bounty Issues of Complexity Level `Advanced`: If the Bounty Program Participant has not provided a weekly PR update, they are pinged as a reminder to do so. In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline. -### Example Bounty Program Timeline +### Example Bounty Issue Timeline | Complexity Level | Assignment date (by GitHub) | Start date (by BP rules) | End date (by BP rules) | Draft PR submission | Final PR submission | Final PR merge | |------------------|-----------------------------|--------------------------|------------------------|---------------------|---------------------|----------------| @@ -79,27 +74,27 @@ In case the Bounty Program Participant still doesn't provide the PR update after ## Extension of Bounty Issue's Timeline -In case of absence of the person in charge from the AsyncAPI side, all target dates of the Bounty Issue are increased by duration of absence of the person in charge from the AsyncAPI side + one week. '+ one week' is required because if the person in charge from the AsyncAPI side was absent for a month or two (for any reason), the Bounty Program Participant would then have to spend some time getting back to the insides of the issue and nearly unfamiliar at that time his own code. +In case of the online absence of the AsyncAPI Maintainer in Slack https://asyncapi.slack.com for a period of more than three working days in a raw, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a raw of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in Slack https://asyncapi.slack.com, the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time her or his own code. -In case of unpredicted force majeure circumstances which could not be foreseen and/or are beyond control of both contributor and maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in Bounty Issue's or Pull Request's comments. +In case of unpredicted force majeure circumstances that could not be foreseen and/or are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by either a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. +Communication on the necessity of the Bounty Issue Timeline extension should happen prior to any current milestone of the Bounty Issue's Timeline approaching, with a reflection of the start of such communication in the Bounty Issue's or Pull Request's comments, in case a communication platform other than GitHub is used. -## Constraints -AsyncAPI maintainers are allowed to work on Bounty Issues submitted by themselves. +## Additional conditions -Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous delivery. +AsyncAPI Maintainers are allowed to work on Bounty Issues submitted by themselves. -Doc documenting functionality, which is being covered in the Bounty Issue, should be created, edited, or altered simultaneously with Bounty Issue's resolution, in every situation when it's applicable. +Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous delivery. -Abuses of edge cases, like one second behind deadline and similar, are not tolerated. +In case the doc documenting functionality, which is being covered in the Bounty Issue, should be created, edited, or altered simultaneously with the Bounty Issue's resolution, such requirement should be explicitly stated in the Scope during Bounty Issue submission. ## Ban -Should any Bounty Program Participant drop or fail to complete the Bounty Issue assigned to them once, she or he will not be eligible to participate in the Bounty Program during current and next calendar quarter as a penalty. +Should any Bounty Program Participant drop or fail to complete one Bounty Issue assigned to them, she or he will not be eligible to participate in the Bounty Program during next calendar quarter as a penalty. -Dropping or failing to complete the Bounty Issue for the second time will result in permanent ban from participation in the Bounty Program. +Dropping or failing to complete two Bounty Issues will result in permanent ban from participation in the Bounty Program. ## Instruction on gaining a Ban From a5035d1eb5d5ad074aac3bdeb9a39cb66cfbbd0b Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Sun, 1 Oct 2023 23:51:27 +0000 Subject: [PATCH 03/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 76 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 16 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 6a9378dc8..1b4bf61f8 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -16,9 +16,9 @@ Approximate quantity of Bounty Issues per calendar quarter varies from thirteen Bounty Program Participants are prioritized in the following order: -1. AsyncAPI maintainers (from any repository) +1. AsyncAPI Maintainers (from any repository) -2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub organization) +2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub Organization) 3. Other (if a GitHub user doesn't fall under the above, the maintainer can determine the criteria i. e. regular volunteers, etc) @@ -29,12 +29,17 @@ To ensure ease of referencing, searching and automation, strictly defined format 1. In submissions of issues for Bounty Program: `[repo]#[issue]` (`cli#38`) -2. In invoice claiming reward: invoice subject `Bounty [repo]#[issue]` (`Bounty cli#38`), tag `bounty` +2. In invoices claiming reward: invoice subject `Bounty [repo]#[issue]` (e. g. `Bounty cli#38`), tag `bounty` + + +## Clarification on time periods + +Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00`. ## Bounty Issue Submission -Up to two Bounty Issues per each calendar quarter round of the Bounty Program are submitted in comments of dedicated AsyncAPI GitHub Organization's Discussion by the AsyncAPI Maintainer of the repository where the candidate for the Bounty Issue is residing, containing the following five fields: +Up to two Bounty Issues per each calendar quarter round of the Bounty Program are submitted in comments of a dedicated AsyncAPI GitHub Organization's Discussion by the AsyncAPI Maintainer of the repository where the candidate for the Bounty Issue is residing, containing the following five fields: 1. Number: `cli#361` @@ -46,12 +51,31 @@ Up to two Bounty Issues per each calendar quarter round of the Bounty Program ar 5. Type: `Coding` | `Docs` | `Design` +In case two Bounty Issues are inextricably linked and cannot be completed separately from each other, such connection must be explicitly stated in the Scope. + +In case total reward for all submitted Bounty Issues exceeds budget allocated for the upcoming calendar quarter round of the Bounty Program, full list of submitted Bounty Issues undergoes randomization with [random.org](https://random.org). At the same time inextricably linked Bounty Issues in the list of submitted Bounty Issues are excluded from randomization process and total reward for them is deducted from the budget allocated for the upcoming calendar quarter round of the Bounty Program. After this, the resulted randomized list is crawled from the beginning until total reward for the Bounty Issues reaches the resulted remaining amount of the budget. + +In case reward for the last Bounty Issue in the resulting randomized list generates excess of the budget, this and all following issues until the end of the resulted randomized list are excluded from participation in the upcoming calendar quarter round of the Bounty Program. Such Bounty Issues are allowed to be submitted during submission of Bounty Issues for the next calendar quarter round of the Bounty Program. + +All GitHub issues selected as Bounty Issues get labels on GitHub: + +- `bounty` + +- `level/medium` or `level/advanced` according to the Complexity Level of the Bounty Issue + +- label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates, e. g. `2023-Q4` + +After addition of labels GitHub issues selected as Bounty Issues can be viewed with GitHub's search tool using URL formed as: +``` +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3A2023-Q4 +``` + ## Bounty Issue Timeline Start date in Bounty Program is counted from Monday of the next week when assignment of the Bounty Issue on GitHub happened. -Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Program, UTC offset in Bounty Program Issues' start dates, end dates and weekdays is used. Start dates should be viewed as having addition of `00:00:00 UTC+12:00`. End dates and weekdays should be viewed as having addition of `23:59:59 UTC-12:00`. +In case assignment of the Bounty Issue on GitHub happened during two calendar weeks period before the start of the new calendar quarter round of the Bounty Program, start date in Bounty Program is counted from Monday of the first week of the new calendar quarter round. For Bounty Issues of Complexity Level `Medium`: - Draft Pull Request must be submitted not later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request @@ -62,7 +86,10 @@ For Bounty Issues of Complexity Level `Advanced`: - Final Pull Request must be submitted not later than on Friday of sixth week from the start date and merged not later than on Friday of eighth week from the start date If the Bounty Program Participant has not provided a weekly PR update, they are pinged as a reminder to do so. -In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline. + +In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, in the next calendar quarter round of the Bounty Program. At the same time the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from randomization process for the next calendar quarter round of the Bounty Program if such process is to take place. Second label indicating next calendar quarter round of the Bounty Program is added to the dropped Bounty Issue on GitHub, so it has for example `2023-Q4` and `2024-Q1`. + +In case dropped Bounty Issue was not resolved during two calendar quarter rounds of the Bounty Program in a raw, such Bounty Issue gets all bounty-related labels removed and becomes a usual GitHub issue which can again be submitted as a Bounty Issue candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. ### Example Bounty Issue Timeline @@ -74,7 +101,7 @@ In case the Bounty Program Participant still doesn't provide the PR update after ## Extension of Bounty Issue's Timeline -In case of the online absence of the AsyncAPI Maintainer in Slack https://asyncapi.slack.com for a period of more than three working days in a raw, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a raw of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in Slack https://asyncapi.slack.com, the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time her or his own code. +In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a raw, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a raw of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time her or his own code. In case of unpredicted force majeure circumstances that could not be foreseen and/or are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by either a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. @@ -85,28 +112,45 @@ Communication on the necessity of the Bounty Issue Timeline extension should hap AsyncAPI Maintainers are allowed to work on Bounty Issues submitted by themselves. -Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous delivery. +Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous resolution. + +In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope during Bounty Issue submission. + + +## Claiming reward + +Claiming reward for the completed Bounty Issue is made through submission of invoice at [AsyncAPI page on OpenCollective](https://opencollective.com/asyncapi) (button 'SUBMIT EXPENSE') with invoice subject '`Bounty [repo]#[issue]`' (e. g. '`Bounty cli#38`'), tag '`bounty`'. -In case the doc documenting functionality, which is being covered in the Bounty Issue, should be created, edited, or altered simultaneously with the Bounty Issue's resolution, such requirement should be explicitly stated in the Scope during Bounty Issue submission. +At the time of writing (2023-10-01) OpenCollective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with OpenCollective can request them to perform a payout using custom payment method. + +**Potential Bounty Program Participants should check whether they will be able to receive payment themselves before starting participation in the Bounty Program.** + +Note, that if Bounty Program Participant submits invoice expenses for more than $600 USD per calendar year to a Collective at OpenCollective with a Fiscal Host in the US (which is AsyncAPI), she or he will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. ## Ban -Should any Bounty Program Participant drop or fail to complete one Bounty Issue assigned to them, she or he will not be eligible to participate in the Bounty Program during next calendar quarter as a penalty. +Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Bans equal to zero. + +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs silent drop) for the first time, she or he receives a First Ban and will not be eligible to participate in the Bounty Program during the next one calendar quarter. After this period the First Ban expires. + +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs silent drop) for the second time during two calendar quarters after the expiration of the First Ban, she or he receives a Second Ban and will not be eligible to participate in the Bounty Program during the next three calendar quarters. After this period the Second Ban expires. + +After the expiration of the Second Ban or after two calendar quarters after the expiration of the First Ban if no Second Ban was received during this time, her or his Ban history is considered clean, and the quantity of Bans is reset to zero. -Dropping or failing to complete two Bounty Issues will result in permanent ban from participation in the Bounty Program. +A dedicated list is used for the purpose of tracking Ban history. -## Instruction on gaining a Ban +## Instruction on assuring a Ban receipt -First ask to assign the Bounty Issue to you, _only then_ start to think on the task, understand you can't do it, silently drop. +First ask to assign the Bounty Issue to you on GitHub, _only then_ start to think on the task, understand you can't do it, silently drop. -## Instruction on avoiding a Ban +## Instruction on avoiding a Ban receipt -Think on the task, make sure that you understand how to do it and CAN do it, ask to assign the Bounty Issue to you, meet all milestones of the Bounty Issue Timeline. +Think on the task, make sure that you understand how to do it and CAN do it, ask to assign the Bounty Issue to you on GitHub, meet all milestones of the Bounty Issue Timeline. -##### This document is the consolidated and formalized version of information publicly available in free form at +##### This document is the consolidated and formalized version of all information publicly available in free form at ##### https://github.com/orgs/asyncapi/discussions/541#discussioncomment-5462792 ##### https://github.com/orgs/asyncapi/discussions/877#discussioncomment-6970799 From 37861b0a4638cfafe9811cf635f63479ce0c294a Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Mon, 9 Oct 2023 22:43:59 +0000 Subject: [PATCH 04/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 1b4bf61f8..61688d19e 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -39,7 +39,7 @@ Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Pr ## Bounty Issue Submission -Up to two Bounty Issues per each calendar quarter round of the Bounty Program are submitted in comments of a dedicated AsyncAPI GitHub Organization's Discussion by the AsyncAPI Maintainer of the repository where the candidate for the Bounty Issue is residing, containing the following five fields: +Bounty Issues are submitted from the eighth to the twenty-first day (inclusive) of March, June, September and December, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by the AsyncAPI Maintainer of the given repository, containing the following five fields: 1. Number: `cli#361` From e90e0dc41fdf2a9ca5df5f0c71477da93f62eb52 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Mon, 9 Oct 2023 22:43:59 +0000 Subject: [PATCH 05/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 61688d19e..c87587ab5 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -65,10 +65,14 @@ All GitHub issues selected as Bounty Issues get labels on GitHub: - label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates, e. g. `2023-Q4` -After addition of labels GitHub issues selected as Bounty Issues can be viewed with GitHub's search tool using URL formed as: +After addition of labels GitHub issues selected as Bounty Issues can be viewed with GitHub's search tool using the URL formed as: ``` https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3A2023-Q4 ``` +Also, Bounty Issues that have no assignee and are free to pick up can be viewed with GitHub's search tool using the URL formed as: +``` +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+no%3Aassignee +``` ## Bounty Issue Timeline From 869942726cb91e927035f84fa92ecbf10883db26 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Mon, 9 Oct 2023 22:43:59 +0000 Subject: [PATCH 06/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index c87587ab5..b01ef035d 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -29,10 +29,10 @@ To ensure ease of referencing, searching and automation, strictly defined format 1. In submissions of issues for Bounty Program: `[repo]#[issue]` (`cli#38`) -2. In invoices claiming reward: invoice subject `Bounty [repo]#[issue]` (e. g. `Bounty cli#38`), tag `bounty` +2. In invoices claiming reward: invoice subject `Bounty [repo]#[issue]` (e.g., `Bounty cli#38`), tag `bounty` -## Clarification on time periods +## Clarification of time periods Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00`. @@ -53,9 +53,9 @@ Bounty Issues are submitted from the eighth to the twenty-first day (inclusive) In case two Bounty Issues are inextricably linked and cannot be completed separately from each other, such connection must be explicitly stated in the Scope. -In case total reward for all submitted Bounty Issues exceeds budget allocated for the upcoming calendar quarter round of the Bounty Program, full list of submitted Bounty Issues undergoes randomization with [random.org](https://random.org). At the same time inextricably linked Bounty Issues in the list of submitted Bounty Issues are excluded from randomization process and total reward for them is deducted from the budget allocated for the upcoming calendar quarter round of the Bounty Program. After this, the resulted randomized list is crawled from the beginning until total reward for the Bounty Issues reaches the resulted remaining amount of the budget. +In case total reward for all submitted Bounty Issues exceeds budget allocated for the upcoming calendar quarter round of the Bounty Program, full list of submitted Bounty Issues undergoes randomization with [random.org](https://random.org). Inextricably linked Bounty Issues in this case get joined into one generic issue (e.g., `cli#361-cli#38`). After randomization the resulted randomized list is crawled from the beginning until total reward for the Bounty Issues reaches the amount of the budget allocated for the upcoming calendar quarter round of the Bounty Program. -In case reward for the last Bounty Issue in the resulting randomized list generates excess of the budget, this and all following issues until the end of the resulted randomized list are excluded from participation in the upcoming calendar quarter round of the Bounty Program. Such Bounty Issues are allowed to be submitted during submission of Bounty Issues for the next calendar quarter round of the Bounty Program. +In case reward for the last Bounty Issue in the resulted randomized list generates excess of the budget, this and all following issues until the end of the resulted randomized list are excluded from participation in the upcoming calendar quarter round of the Bounty Program. Such Bounty Issues are allowed to be submitted during submission of Bounty Issues for the next calendar quarter round of the Bounty Program. All GitHub issues selected as Bounty Issues get labels on GitHub: @@ -63,13 +63,13 @@ All GitHub issues selected as Bounty Issues get labels on GitHub: - `level/medium` or `level/advanced` according to the Complexity Level of the Bounty Issue -- label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates, e. g. `2023-Q4` +- label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates (e.g., `2024-Q1`) After addition of labels GitHub issues selected as Bounty Issues can be viewed with GitHub's search tool using the URL formed as: ``` -https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3A2023-Q4 +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3A2024-Q1 ``` -Also, Bounty Issues that have no assignee and are free to pick up can be viewed with GitHub's search tool using the URL formed as: +Also, Bounty Issues that have no assignee and thus are free to pick up can be viewed with GitHub's search tool using the URL formed as: ``` https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+no%3Aassignee ``` @@ -79,7 +79,7 @@ https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+no%3Aassigne Start date in Bounty Program is counted from Monday of the next week when assignment of the Bounty Issue on GitHub happened. -In case assignment of the Bounty Issue on GitHub happened during two calendar weeks period before the start of the new calendar quarter round of the Bounty Program, start date in Bounty Program is counted from Monday of the first week of the new calendar quarter round. +In case assignment of the Bounty Issue on GitHub happened at any moment between twenty-second day of March, June, September or December and the last day of the month (inclusive), start date in Bounty Program is counted from the first Monday of the new calendar quarter round. For Bounty Issues of Complexity Level `Medium`: - Draft Pull Request must be submitted not later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request @@ -91,9 +91,9 @@ For Bounty Issues of Complexity Level `Advanced`: If the Bounty Program Participant has not provided a weekly PR update, they are pinged as a reminder to do so. -In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, in the next calendar quarter round of the Bounty Program. At the same time the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from randomization process for the next calendar quarter round of the Bounty Program if such process is to take place. Second label indicating next calendar quarter round of the Bounty Program is added to the dropped Bounty Issue on GitHub, so it has for example `2023-Q4` and `2024-Q1`. +In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, in the next calendar quarter round of the Bounty Program. At the same time the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from randomization process for the next calendar quarter round of the Bounty Program if such process is to take place. -In case dropped Bounty Issue was not resolved during two calendar quarter rounds of the Bounty Program in a raw, such Bounty Issue gets all bounty-related labels removed and becomes a usual GitHub issue which can again be submitted as a Bounty Issue candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. +Dropped Bounty Issue gets label of the second calendar quarter round (e.g., `2024-Q2`) and label `dropped`. If during two calendar months of the second calendar quarter round the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. ### Example Bounty Issue Timeline @@ -120,16 +120,19 @@ Bounty Program Participant is allowed to choose up to two Bounty Issues of any C In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope during Bounty Issue submission. +Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not resolved during the first calendar quarter round (e.g., `2024-Q1`), it gets label of the second calendar quarter round (e.g., `2024-Q2`) and label `stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. + + ## Claiming reward -Claiming reward for the completed Bounty Issue is made through submission of invoice at [AsyncAPI page on OpenCollective](https://opencollective.com/asyncapi) (button 'SUBMIT EXPENSE') with invoice subject '`Bounty [repo]#[issue]`' (e. g. '`Bounty cli#38`'), tag '`bounty`'. +Claiming reward for the completed Bounty Issue is made through submission of invoice at [AsyncAPI page on OpenCollective](https://opencollective.com/asyncapi) (button 'SUBMIT EXPENSE') with invoice subject '`Bounty [repo]#[issue]`' (e.g., '`Bounty cli#38`'), tag '`bounty`'. -At the time of writing (2023-10-01) OpenCollective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with OpenCollective can request them to perform a payout using custom payment method. +At the time of writing (2023-10-01) OpenCollective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with OpenCollective can request them to perform a payout using custom payment method to a non-sanctioned jurisdiction. **Potential Bounty Program Participants should check whether they will be able to receive payment themselves before starting participation in the Bounty Program.** -Note, that if Bounty Program Participant submits invoice expenses for more than $600 USD per calendar year to a Collective at OpenCollective with a Fiscal Host in the US (which is AsyncAPI), she or he will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. +Note, that if Bounty Program Participant submits invoice expenses for more than six hundred US dollars 00 cents (USD 600.00) per calendar year to a Collective at OpenCollective with a Fiscal Host in the US (which is AsyncAPI), she or he will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. ## Ban From d671b9c747a0153fa5cdd4bfed2fed5ac19c9952 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Mon, 9 Oct 2023 22:43:59 +0000 Subject: [PATCH 07/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index b01ef035d..17ad7216b 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -39,7 +39,7 @@ Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Pr ## Bounty Issue Submission -Bounty Issues are submitted from the eighth to the twenty-first day (inclusive) of March, June, September and December, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by the AsyncAPI Maintainer of the given repository, containing the following five fields: +Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the second and third weeks of the last month of the current calendar quarter, after call for such submission, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by the AsyncAPI Maintainer of the given repository, containing the following five fields: 1. Number: `cli#361` @@ -79,7 +79,7 @@ https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+no%3Aassigne Start date in Bounty Program is counted from Monday of the next week when assignment of the Bounty Issue on GitHub happened. -In case assignment of the Bounty Issue on GitHub happened at any moment between twenty-second day of March, June, September or December and the last day of the month (inclusive), start date in Bounty Program is counted from the first Monday of the new calendar quarter round. +In case assignment of the Bounty Issue on GitHub happened during fourth or fifth week of the last month of the calendar quarter, start date in Bounty Program is counted from the first Monday of the new calendar quarter round. For Bounty Issues of Complexity Level `Medium`: - Draft Pull Request must be submitted not later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request From 83eda2c542f1164bb974befe686c8aae1f338903 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Mon, 9 Oct 2023 22:43:59 +0000 Subject: [PATCH 08/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 17ad7216b..3fe5c4c10 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -20,7 +20,7 @@ Bounty Program Participants are prioritized in the following order: 2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub Organization) -3. Other (if a GitHub user doesn't fall under the above, the maintainer can determine the criteria i. e. regular volunteers, etc) +3. Other (if a GitHub user doesn't fall under the above, the AsyncAPI Maintainer can determine the criteria i. e. regular volunteers, etc) ## Bounty Issues' numbering From 46a6b679420050af30c9c5d51458ff7eddac6867 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Tue, 7 Nov 2023 02:20:48 +0000 Subject: [PATCH 09/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 3fe5c4c10..33e191708 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -18,7 +18,7 @@ Bounty Program Participants are prioritized in the following order: 1. AsyncAPI Maintainers (from any repository) -2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub Organization) +2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub Organization, checked with https://github.com/search?q=is%3Apr+org%3Aasyncapi+is%3Amerged+author%3Agh_username) 3. Other (if a GitHub user doesn't fall under the above, the AsyncAPI Maintainer can determine the criteria i. e. regular volunteers, etc) @@ -63,11 +63,11 @@ All GitHub issues selected as Bounty Issues get labels on GitHub: - `level/medium` or `level/advanced` according to the Complexity Level of the Bounty Issue -- label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates (e.g., `2024-Q1`) +- label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates (e.g., `bounty/2024-Q1`) After addition of labels GitHub issues selected as Bounty Issues can be viewed with GitHub's search tool using the URL formed as: ``` -https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3A2024-Q1 +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3Abounty/2024-Q1 ``` Also, Bounty Issues that have no assignee and thus are free to pick up can be viewed with GitHub's search tool using the URL formed as: ``` @@ -93,14 +93,14 @@ If the Bounty Program Participant has not provided a weekly PR update, they are In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, in the next calendar quarter round of the Bounty Program. At the same time the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from randomization process for the next calendar quarter round of the Bounty Program if such process is to take place. -Dropped Bounty Issue gets label of the second calendar quarter round (e.g., `2024-Q2`) and label `dropped`. If during two calendar months of the second calendar quarter round the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. +Dropped Bounty Issue gets label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and label `bounty/dropped`. If during two calendar months of the second calendar quarter round the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. ### Example Bounty Issue Timeline | Complexity Level | Assignment date (by GitHub) | Start date (by BP rules) | End date (by BP rules) | Draft PR submission | Final PR submission | Final PR merge | |------------------|-----------------------------|--------------------------|------------------------|---------------------|---------------------|----------------| -| Medium | 2023-04-27 | 2023-01-05 | **2023-06-09** | 2023-05-12 | 2023-05-26 | **2023-06-09** | -| Advanced | 2023-04-26 | 2023-01-05 | **2023-06-23** | 2023-05-19 | 2023-06-09 | **2023-06-23** | +| Medium | 2023-04-27 | 2023-05-01 | **2023-06-09** | 2023-05-12 | 2023-05-26 | **2023-06-09** | +| Advanced | 2023-04-26 | 2023-05-01 | **2023-06-23** | 2023-05-19 | 2023-06-09 | **2023-06-23** | ## Extension of Bounty Issue's Timeline @@ -120,7 +120,7 @@ Bounty Program Participant is allowed to choose up to two Bounty Issues of any C In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope during Bounty Issue submission. -Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not resolved during the first calendar quarter round (e.g., `2024-Q1`), it gets label of the second calendar quarter round (e.g., `2024-Q2`) and label `stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. +Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not resolved during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and label `bounty/stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. From a97027d027b5a452f3a5322e12ab13ff453da719 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Tue, 7 Nov 2023 04:38:17 +0000 Subject: [PATCH 10/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 33e191708..cfec99987 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -9,7 +9,7 @@ Reward for Bounty Issue of Complexity Level `Medium` is two hundred US dollars 0 Reward for Bounty Issue of Complexity Level `Advanced` is four hundred US dollars 00 cents (USD 400.00). -Approximate quantity of Bounty Issues per calendar quarter varies from thirteen to twenty five (from ((12 * 400) + (1 * 200)) to (25 * 200)). +Approximate quantity of Bounty Issues per calendar quarter round varies from thirteen to twenty five (from ((12 * 400) + (1 * 200)) to (25 * 200)). ## Prioritization of participants @@ -20,7 +20,11 @@ Bounty Program Participants are prioritized in the following order: 2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub Organization, checked with https://github.com/search?q=is%3Apr+org%3Aasyncapi+is%3Amerged+author%3Agh_username) -3. Other (if a GitHub user doesn't fall under the above, the AsyncAPI Maintainer can determine the criteria i. e. regular volunteers, etc) +3. Other (if a GitHub user doesn't fall under the above, the AsyncAPI Maintainer can determine the criteria i. e. regular volunteers, etc.) + +Assignment of the Bounty Issue on GitHub to users that fall under the first category can be performed immediately after the addition of the label `bounty` according to GitHub's timestamp. + +Assignment of the Bounty Issue on GitHub to users that fall under the second and third categories is performed not earlier than three calendar days after the addition of the label `bounty` according to GitHub's timestamp. ## Bounty Issues' numbering @@ -29,12 +33,12 @@ To ensure ease of referencing, searching and automation, strictly defined format 1. In submissions of issues for Bounty Program: `[repo]#[issue]` (`cli#38`) -2. In invoices claiming reward: invoice subject `Bounty [repo]#[issue]` (e.g., `Bounty cli#38`), tag `bounty` +2. In invoices claiming reward: invoice's subject `Bounty [repo]#[issue]` (e.g., `Bounty cli#38`), tag `bounty` ## Clarification of time periods -Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00`. +Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00` (inclusive). ## Bounty Issue Submission @@ -71,7 +75,7 @@ https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3Aboun ``` Also, Bounty Issues that have no assignee and thus are free to pick up can be viewed with GitHub's search tool using the URL formed as: ``` -https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+no%3Aassignee +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3Abounty/2024-Q1+no%3Aassignee ``` @@ -97,15 +101,15 @@ Dropped Bounty Issue gets label of the second calendar quarter round (e.g., `bou ### Example Bounty Issue Timeline -| Complexity Level | Assignment date (by GitHub) | Start date (by BP rules) | End date (by BP rules) | Draft PR submission | Final PR submission | Final PR merge | -|------------------|-----------------------------|--------------------------|------------------------|---------------------|---------------------|----------------| -| Medium | 2023-04-27 | 2023-05-01 | **2023-06-09** | 2023-05-12 | 2023-05-26 | **2023-06-09** | -| Advanced | 2023-04-26 | 2023-05-01 | **2023-06-23** | 2023-05-19 | 2023-06-09 | **2023-06-23** | +|Complexity Level|Assignment date (by GitHub)|Start date (by BP rules)|End date (by BP rules)|Draft PR submission|Final PR submission|Final PR merge| +|----------------|---------------------------|------------------------|----------------------|-------------------|-------------------|--------------| +|Medium |2023-04-27 |2023-05-01 |**2023-06-09** |2023-05-12 |2023-05-26 |**2023-06-09**| +|Advanced |2023-04-26 |2023-05-01 |**2023-06-23** |2023-05-19 |2023-06-09 |**2023-06-23**| ## Extension of Bounty Issue's Timeline -In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a raw, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a raw of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time her or his own code. +In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a row, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a row of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time her or his own code. In case of unpredicted force majeure circumstances that could not be foreseen and/or are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by either a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. @@ -120,7 +124,7 @@ Bounty Program Participant is allowed to choose up to two Bounty Issues of any C In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope during Bounty Issue submission. -Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not resolved during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and label `bounty/stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. +Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not assigned during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and label `bounty/stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue still was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. @@ -139,9 +143,9 @@ Note, that if Bounty Program Participant submits invoice expenses for more than Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Bans equal to zero. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs silent drop) for the first time, she or he receives a First Ban and will not be eligible to participate in the Bounty Program during the next one calendar quarter. After this period the First Ban expires. +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the first time, she or he receives a First Ban and will not be eligible to participate in the Bounty Program during the next one calendar quarter. After this period the First Ban expires. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs silent drop) for the second time during two calendar quarters after the expiration of the First Ban, she or he receives a Second Ban and will not be eligible to participate in the Bounty Program during the next three calendar quarters. After this period the Second Ban expires. +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the second time during two calendar quarters after the expiration of the First Ban, she or he receives a Second Ban and will not be eligible to participate in the Bounty Program during the next three calendar quarters. After this period the Second Ban expires. After the expiration of the Second Ban or after two calendar quarters after the expiration of the First Ban if no Second Ban was received during this time, her or his Ban history is considered clean, and the quantity of Bans is reset to zero. @@ -161,3 +165,4 @@ Think on the task, make sure that you understand how to do it and CAN do it, ask ##### This document is the consolidated and formalized version of all information publicly available in free form at ##### https://github.com/orgs/asyncapi/discussions/541#discussioncomment-5462792 ##### https://github.com/orgs/asyncapi/discussions/877#discussioncomment-6970799 +##### https://asyncapi.slack.com/archives/C05UHTSEHE2/p1699433566459269 From eda668f92b32cfbc88b4bf9805279d60e879c316 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Sun, 12 Nov 2023 22:13:05 +0000 Subject: [PATCH 11/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index cfec99987..f7d81e3ae 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -109,7 +109,7 @@ Dropped Bounty Issue gets label of the second calendar quarter round (e.g., `bou ## Extension of Bounty Issue's Timeline -In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a row, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a row of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time her or his own code. +In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a row, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a row of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. In case of unpredicted force majeure circumstances that could not be foreseen and/or are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by either a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. @@ -136,18 +136,18 @@ At the time of writing (2023-10-01) OpenCollective supports `ACH`, `Internationa **Potential Bounty Program Participants should check whether they will be able to receive payment themselves before starting participation in the Bounty Program.** -Note, that if Bounty Program Participant submits invoice expenses for more than six hundred US dollars 00 cents (USD 600.00) per calendar year to a Collective at OpenCollective with a Fiscal Host in the US (which is AsyncAPI), she or he will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. +Note, that if Bounty Program Participant submits invoice expenses for more than six hundred US dollars 00 cents (USD 600.00) per calendar year to a Collective at OpenCollective with a Fiscal Host in the US (which is AsyncAPI), they will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. ## Ban Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Bans equal to zero. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the first time, she or he receives a First Ban and will not be eligible to participate in the Bounty Program during the next one calendar quarter. After this period the First Ban expires. +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the first time, they receive a First Ban and will not be eligible to participate in the Bounty Program during the next one calendar quarter. After this period the First Ban expires. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the second time during two calendar quarters after the expiration of the First Ban, she or he receives a Second Ban and will not be eligible to participate in the Bounty Program during the next three calendar quarters. After this period the Second Ban expires. +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the second time during two calendar quarters after the expiration of the First Ban, they receive a Second Ban and will not be eligible to participate in the Bounty Program during the next three calendar quarters. After this period the Second Ban expires. -After the expiration of the Second Ban or after two calendar quarters after the expiration of the First Ban if no Second Ban was received during this time, her or his Ban history is considered clean, and the quantity of Bans is reset to zero. +After the expiration of the Second Ban or after two calendar quarters after the expiration of the First Ban if no Second Ban was received during this time, their Ban history is considered clean, and the quantity of Bans is reset to zero. A dedicated list is used for the purpose of tracking Ban history. @@ -166,3 +166,4 @@ Think on the task, make sure that you understand how to do it and CAN do it, ask ##### https://github.com/orgs/asyncapi/discussions/541#discussioncomment-5462792 ##### https://github.com/orgs/asyncapi/discussions/877#discussioncomment-6970799 ##### https://asyncapi.slack.com/archives/C05UHTSEHE2/p1699433566459269 +##### https://github.com/asyncapi/community/pull/897#discussion_r1390778779 From ed0f3b0a2d5f62bc755e10a1764a9f66a8795340 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Fri, 24 Nov 2023 08:08:56 +0000 Subject: [PATCH 12/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index f7d81e3ae..171daee0c 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -33,7 +33,7 @@ To ensure ease of referencing, searching and automation, strictly defined format 1. In submissions of issues for Bounty Program: `[repo]#[issue]` (`cli#38`) -2. In invoices claiming reward: invoice's subject `Bounty [repo]#[issue]` (e.g., `Bounty cli#38`), tag `bounty` +2. In invoices claiming reward: invoice's subject `Bounty [repo]#[issue]` (e.g., `Bounty cli#38`), tag `bounty` (two rewards can be joined into one sum, in this case a comma and a space should be used in the invoice's subject as a separator for Bounty Issues numbers, e.g., `Bounty cli#38, cli#361`) ## Clarification of time periods @@ -43,7 +43,7 @@ Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Pr ## Bounty Issue Submission -Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the second and third weeks of the last month of the current calendar quarter, after call for such submission, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by the AsyncAPI Maintainer of the given repository, containing the following five fields: +Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after call for such submission, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by the AsyncAPI Maintainer of the given repository, containing the following five fields: 1. Number: `cli#361` @@ -83,7 +83,7 @@ https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3Aboun Start date in Bounty Program is counted from Monday of the next week when assignment of the Bounty Issue on GitHub happened. -In case assignment of the Bounty Issue on GitHub happened during fourth or fifth week of the last month of the calendar quarter, start date in Bounty Program is counted from the first Monday of the new calendar quarter round. +In case assignment of the Bounty Issue on GitHub happened during third or fourth full (seven-day) calendar week of the last month of the calendar quarter, start date in Bounty Program is counted from the first Monday of the new calendar quarter round. For Bounty Issues of Complexity Level `Medium`: - Draft Pull Request must be submitted not later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request @@ -130,7 +130,7 @@ Bounty Issue has an overall time of life of five calendar months. If the Bounty ## Claiming reward -Claiming reward for the completed Bounty Issue is made through submission of invoice at [AsyncAPI page on OpenCollective](https://opencollective.com/asyncapi) (button 'SUBMIT EXPENSE') with invoice subject '`Bounty [repo]#[issue]`' (e.g., '`Bounty cli#38`'), tag '`bounty`'. +Claiming reward for the completed Bounty Issue is made through submission of invoice at [AsyncAPI page on OpenCollective](https://opencollective.com/asyncapi) (button 'SUBMIT EXPENSE') with invoice subject '`Bounty [repo]#[issue]`' (e.g., '`Bounty cli#38`' or '`Bounty cli#38, cli#361`' in case of two rewards joined into one sum), tag '`bounty`'. At the time of writing (2023-10-01) OpenCollective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with OpenCollective can request them to perform a payout using custom payment method to a non-sanctioned jurisdiction. @@ -165,5 +165,6 @@ Think on the task, make sure that you understand how to do it and CAN do it, ask ##### This document is the consolidated and formalized version of all information publicly available in free form at ##### https://github.com/orgs/asyncapi/discussions/541#discussioncomment-5462792 ##### https://github.com/orgs/asyncapi/discussions/877#discussioncomment-6970799 +##### https://docs.opencollective.com/help/expenses-and-getting-paid/tax-information ##### https://asyncapi.slack.com/archives/C05UHTSEHE2/p1699433566459269 ##### https://github.com/asyncapi/community/pull/897#discussion_r1390778779 From f4666278e9d2c02c55ece9d342ce5864e1a1e2f7 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Sat, 16 Dec 2023 11:02:08 +0000 Subject: [PATCH 13/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 76 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 171daee0c..349b1fea7 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -1,15 +1,24 @@ # AsyncAPI Bounty Program +The AsyncAPI Bounty Program is a specification of the software development process, customized to meet the needs of the AsyncAPI Initiative. + +The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding contributors to open source software while creating an artificial set of time constraints to make the schedule for achieving programming targets predictable. + +Anyone may implement this specification of the software development process with or without any modification in any way they find suitable. ## Budget -The budget of the Bounty Program per calendar year is twenty thousand US dollars 00 cents (USD 20,000.00), which is five thousand US dollars 00 cents (USD 5,000.00) per calendar quarter (three calendar months). +The budget of the Bounty Program per calendar year is twenty thousand US dollars and 00 cents (USD 20,000.00), which is five thousand US dollars and 00 cents (USD 5,000.00) per calendar quarter (three calendar months), split as follows: + +- four thousand six hundred US dollars and 00 cents (USD 4,600.00) per calendar quarter as the total amount of reward for Bounty Issues + +- four hundred US dollars and 00 cents (USD 400.00) per calendar quarter as the cost of the Bounty Program Coordination -Reward for Bounty Issue of Complexity Level `Medium` is two hundred US dollars 00 cents (USD 200.00). +Reward for Bounty Issue of Complexity Level `Medium` is two hundred US dollars and 00 cents (USD 200.00). -Reward for Bounty Issue of Complexity Level `Advanced` is four hundred US dollars 00 cents (USD 400.00). +Reward for Bounty Issue of Complexity Level `Advanced` is four hundred US dollars and 00 cents (USD 400.00). -Approximate quantity of Bounty Issues per calendar quarter round varies from thirteen to twenty five (from ((12 * 400) + (1 * 200)) to (25 * 200)). +Approximate maximum quantity of Bounty Issues per calendar quarter round varies from twelve to twenty three (from ((11 * 400) + (1 * 200)) to (23 * 200)). ## Prioritization of participants @@ -22,9 +31,9 @@ Bounty Program Participants are prioritized in the following order: 3. Other (if a GitHub user doesn't fall under the above, the AsyncAPI Maintainer can determine the criteria i. e. regular volunteers, etc.) -Assignment of the Bounty Issue on GitHub to users that fall under the first category can be performed immediately after the addition of the label `bounty` according to GitHub's timestamp. +Assignment of the Bounty Issue on GitHub to users that fall under the first category can be performed immediately after the addition of the GitHub label `bounty` (hex code `#0E8A16`) according to GitHub's timestamp. -Assignment of the Bounty Issue on GitHub to users that fall under the second and third categories is performed not earlier than three calendar days after the addition of the label `bounty` according to GitHub's timestamp. +Assignment of the Bounty Issue on GitHub to users that fall under the second and third categories is performed not earlier than three calendar days after the addition of the GitHub label `bounty` according to GitHub's timestamp. ## Bounty Issues' numbering @@ -38,7 +47,7 @@ To ensure ease of referencing, searching and automation, strictly defined format ## Clarification of time periods -Due to asynchronous nature of the AsyncAPI project itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00` (inclusive). +Due to asynchronous nature of the AsyncAPI Initiative itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00` (inclusive). ## Bounty Issue Submission @@ -63,20 +72,21 @@ In case reward for the last Bounty Issue in the resulted randomized list generat All GitHub issues selected as Bounty Issues get labels on GitHub: -- `bounty` +- GitHub label `bounty` -- `level/medium` or `level/advanced` according to the Complexity Level of the Bounty Issue +- text label `level/medium` or `level/advanced` according to the Complexity Level of the Bounty Issue -- label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates (e.g., `bounty/2024-Q1`) +- text label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates (e.g., `bounty/2024-Q1`) After addition of labels GitHub issues selected as Bounty Issues can be viewed with GitHub's search tool using the URL formed as: ``` -https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3Abounty/2024-Q1 +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+%22bounty/2024-Q1%22+in%3Acomments ``` Also, Bounty Issues that have no assignee and thus are free to pick up can be viewed with GitHub's search tool using the URL formed as: ``` -https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3Abounty+label%3Abounty/2024-Q1+no%3Aassignee +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+%22bounty/2024-Q1%22+in%3Acomments+no%3Aassignee ``` +Note, that results of the GitHub search are visible to logged-in GitHub users only. ## Bounty Issue Timeline @@ -97,7 +107,7 @@ If the Bounty Program Participant has not provided a weekly PR update, they are In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, in the next calendar quarter round of the Bounty Program. At the same time the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from randomization process for the next calendar quarter round of the Bounty Program if such process is to take place. -Dropped Bounty Issue gets label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and label `bounty/dropped`. If during two calendar months of the second calendar quarter round the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. +Dropped Bounty Issue gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/dropped`. If during two calendar months of the second calendar quarter round the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. ### Example Bounty Issue Timeline @@ -109,9 +119,9 @@ Dropped Bounty Issue gets label of the second calendar quarter round (e.g., `bou ## Extension of Bounty Issue's Timeline -In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a row, all target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a row of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. +In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a row, all remaining target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a row of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. -In case of unpredicted force majeure circumstances that could not be foreseen and/or are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by either a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. +In case of unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sites/3/2020/03/icc-forcemajeure-hardship-clauses-march2020.pdf) and/or circumstances that could not be foreseen and/or that are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. Communication on the necessity of the Bounty Issue Timeline extension should happen prior to any current milestone of the Bounty Issue's Timeline approaching, with a reflection of the start of such communication in the Bounty Issue's or Pull Request's comments, in case a communication platform other than GitHub is used. @@ -124,28 +134,48 @@ Bounty Program Participant is allowed to choose up to two Bounty Issues of any C In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope during Bounty Issue submission. -Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not assigned during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and label `bounty/stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue still was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. +Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not assigned during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue still was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. + +Upon request of the AsyncAPI Maintainer in the Bounty Issue's comments in the process of resolution, the Complexity Level of the Bounty Issue can be reclassified in any direction (both lowered to `Medium` and heightened to `Advanced`,) with corresponding changes to the Bounty Issue's Timeline. + +To avoid half-merges, unmet dependencies on the completion of other (inextricably linked) issues, waiting for merges of other separate PRs that provide critically important functionality for the given task, etc., and to avoid situations where AsyncAPI has already acquired an obligation to pay but factually the conditions of the Bounty Issue completion are not met yet, a system of double control with separation of concerns is exercised on the Bounty Issues: + +- after Bounty Issue's closure on GitHub, the AsyncAPI Maintainer, who was responsible for the resolution of the given Bounty Issue from the AsyncAPI's side, confirms the Bounty Issue's technical resolution by posting a separate confirming comment in this Bounty Issue's comments; +- the Bounty Program Participant proceeds with the process of claiming the reward only after the second comment from the Bounty Program Coordinator, confirming the Bounty Issue completion and readiness to perform the payout. -## Claiming reward +## Claiming the reward -Claiming reward for the completed Bounty Issue is made through submission of invoice at [AsyncAPI page on OpenCollective](https://opencollective.com/asyncapi) (button 'SUBMIT EXPENSE') with invoice subject '`Bounty [repo]#[issue]`' (e.g., '`Bounty cli#38`' or '`Bounty cli#38, cli#361`' in case of two rewards joined into one sum), tag '`bounty`'. +Claiming the reward for the completed Bounty Issue is done via submission of an invoice at [the AsyncAPI page on Open Collective](https://opencollective.com/asyncapi) (button '`SUBMIT EXPENSE`'.) -At the time of writing (2023-10-01) OpenCollective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with OpenCollective can request them to perform a payout using custom payment method to a non-sanctioned jurisdiction. +Requirements for the invoice: -**Potential Bounty Program Participants should check whether they will be able to receive payment themselves before starting participation in the Bounty Program.** +- Make sure that `Legal Name` and `Full name of the account holder` **are the same** and are YOUR REAL LEGAL NAME according to the passport/ID (nicknames are allowed only in `Settings / Public profile / Display name`, and it is **this** name that will be displayed publicly thoughout https://opencollective.com, if you have privacy concerns) + +- **Expense title**: '`Bounty [repo]#[issue]`' (e.g., '`Bounty cli#38`' or '`Bounty cli#38, cli#361`' in case of two rewards being joined into one sum) + +- **Tag**: '`bounty`' + +- **Set invoice details / Description**: mention full URL of the GitHub issue which served as the Bounty Issue + +AsyncAPI relies on Open Collective for [compliance with global sanctions](https://docs.opencollective.foundation/how-it-works/policies/international#international-activity-that-we-cant-enable). However, it has been empirically proven that even if the Bounty Program Participant is a citizen of a sanctioned jurisdiction, they can still receive the financial payment made to a payee in a non-sanctioned jurisdiction. Taking this into account, **potential Bounty Program Participants should check whether they will be able to receive payment themselves prior to starting participation in the Bounty Program**. AsyncAPI will not take any action if Open Collective refuses to relay the payment due to US or global sanctions imposed on a jurisdiction or an individual. + +Also, note, that if a Bounty Program Participant submits invoice expenses for more than six hundred US dollars and 00 cents (USD 600.00) per calendar year to a Collective at Open Collective with a Fiscal Host in the US (AsyncAPI fits this description,) they will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, **supplying a local Tax ID**. + +At the time of writing (2023-10-01) Open Collective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with Open Collective can request them to perform a payout using a custom payment method to a non-sanctioned jurisdiction. -Note, that if Bounty Program Participant submits invoice expenses for more than six hundred US dollars 00 cents (USD 600.00) per calendar year to a Collective at OpenCollective with a Fiscal Host in the US (which is AsyncAPI), they will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, supplying a local tax ID. ## Ban Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Bans equal to zero. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the first time, they receive a First Ban and will not be eligible to participate in the Bounty Program during the next one calendar quarter. After this period the First Ban expires. +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the first time, they receive a First Ban and will be prohibited from participating in the Bounty Program starting from the current moment, and during two calendar months from the beginning of the next calendar quarter. After this period, the First Ban expires. + +In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the second time during two calendar quarters after the expiration of the First Ban, they receive a Second Ban and will be prohibited from participating in the Bounty Program starting from the current moment, and during eight calendar months from the beginning of the next calendar quarter. After this period, the Second Ban expires. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the second time during two calendar quarters after the expiration of the First Ban, they receive a Second Ban and will not be eligible to participate in the Bounty Program during the next three calendar quarters. After this period the Second Ban expires. +In case a Bounty Program Participant stops rendering services directed towards resolution of two Bounty Issues simultaneously without any communication on the subject (performs 'silent drop',) the Second Ban is applied immediately. After the expiration of the Second Ban or after two calendar quarters after the expiration of the First Ban if no Second Ban was received during this time, their Ban history is considered clean, and the quantity of Bans is reset to zero. From b25938fc61e98e11c2531e0d253ea660764fb472 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Fri, 2 Feb 2024 10:53:43 +0000 Subject: [PATCH 14/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 104 ++++++++++++++++++++++++++++++---------------- 1 file changed, 68 insertions(+), 36 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 349b1fea7..b26b67e70 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -1,56 +1,59 @@ # AsyncAPI Bounty Program +## Overview + The AsyncAPI Bounty Program is a specification of the software development process, customized to meet the needs of the AsyncAPI Initiative. -The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding contributors to open source software while creating an artificial set of time constraints to make the schedule for achieving programming targets predictable. +The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding individual contributors to open source software while creating an artificial set of time constraints to make the schedule for achieving programming targets predictable. Anyone may implement this specification of the software development process with or without any modification in any way they find suitable. + ## Budget The budget of the Bounty Program per calendar year is twenty thousand US dollars and 00 cents (USD 20,000.00), which is five thousand US dollars and 00 cents (USD 5,000.00) per calendar quarter (three calendar months), split as follows: -- four thousand six hundred US dollars and 00 cents (USD 4,600.00) per calendar quarter as the total amount of reward for Bounty Issues +- four thousand six hundred US dollars and 00 cents (USD 4,600.00) per calendar quarter as the total amount of reward for completed Bounty Issues - four hundred US dollars and 00 cents (USD 400.00) per calendar quarter as the cost of the Bounty Program Coordination -Reward for Bounty Issue of Complexity Level `Medium` is two hundred US dollars and 00 cents (USD 200.00). +The reward for completion of the Bounty Issue of Complexity Level `Medium` is two hundred US dollars and 00 cents (USD 200.00). -Reward for Bounty Issue of Complexity Level `Advanced` is four hundred US dollars and 00 cents (USD 400.00). +The reward for completion of the Bounty Issue of Complexity Level `Advanced` is four hundred US dollars and 00 cents (USD 400.00). Approximate maximum quantity of Bounty Issues per calendar quarter round varies from twelve to twenty three (from ((11 * 400) + (1 * 200)) to (23 * 200)). -## Prioritization of participants +## Prioritization Of Participants Bounty Program Participants are prioritized in the following order: -1. AsyncAPI Maintainers (from any repository) +1. AsyncAPI Maintainers (from any repository,) checked at https://github.com/asyncapi/community/blob/master/MAINTAINERS.yaml 2. Regular contributors (GitHub users who have three or more Pull Requests merged throughout the AsyncAPI GitHub Organization, checked with https://github.com/search?q=is%3Apr+org%3Aasyncapi+is%3Amerged+author%3Agh_username) 3. Other (if a GitHub user doesn't fall under the above, the AsyncAPI Maintainer can determine the criteria i. e. regular volunteers, etc.) -Assignment of the Bounty Issue on GitHub to users that fall under the first category can be performed immediately after the addition of the GitHub label `bounty` (hex code `#0E8A16`) according to GitHub's timestamp. +Assignment of the Bounty Issue on GitHub to users that fall under the first category can be performed immediately after the addition of the GitHub label `bounty` according to GitHub's timestamp. Assignment of the Bounty Issue on GitHub to users that fall under the second and third categories is performed not earlier than three calendar days after the addition of the GitHub label `bounty` according to GitHub's timestamp. -## Bounty Issues' numbering +## Bounty Issues' Numbering To ensure ease of referencing, searching and automation, strictly defined format of Bounty Issues' numbering is used: 1. In submissions of issues for Bounty Program: `[repo]#[issue]` (`cli#38`) -2. In invoices claiming reward: invoice's subject `Bounty [repo]#[issue]` (e.g., `Bounty cli#38`), tag `bounty` (two rewards can be joined into one sum, in this case a comma and a space should be used in the invoice's subject as a separator for Bounty Issues numbers, e.g., `Bounty cli#38, cli#361`) +2. In invoices claiming reward: invoice's subject `Bounty [repo]#[issue]` (e.g., `Bounty cli#38`), tag `bounty` (two rewards can be joined into one sum, in this case a comma and a space must be used in the invoice's subject as a separator for Bounty Issues' numbers, e.g., `Bounty cli#38, cli#361`) -## Clarification of time periods +## Clarification Of Time Periods -Due to asynchronous nature of the AsyncAPI Initiative itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00` (inclusive). +Due to asynchronous nature of the AsyncAPI Initiative itself and thus its Bounty Program, UTC offset in Bounty Program Issues' starting and ending dates is used. Starting dates should be considered having start at `00:00:00 UTC+12:00`, ending dates should be considered having end at `23:59:59 UTC-12:00` (inclusive.) -## Bounty Issue Submission +## Bounty Issue's Submission Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after call for such submission, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by the AsyncAPI Maintainer of the given repository, containing the following five fields: @@ -64,6 +67,8 @@ Bounty Issues for the upcoming calendar quarter round of the Bounty Program are 5. Type: `Coding` | `Docs` | `Design` +In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope. + In case two Bounty Issues are inextricably linked and cannot be completed separately from each other, such connection must be explicitly stated in the Scope. In case total reward for all submitted Bounty Issues exceeds budget allocated for the upcoming calendar quarter round of the Bounty Program, full list of submitted Bounty Issues undergoes randomization with [random.org](https://random.org). Inextricably linked Bounty Issues in this case get joined into one generic issue (e.g., `cli#361-cli#38`). After randomization the resulted randomized list is crawled from the beginning until total reward for the Bounty Issues reaches the amount of the budget allocated for the upcoming calendar quarter round of the Bounty Program. @@ -89,27 +94,43 @@ https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+%22bounty/2024-Q1%22+in%3Ac Note, that results of the GitHub search are visible to logged-in GitHub users only. -## Bounty Issue Timeline +## Bounty Issue's Timeline Start date in Bounty Program is counted from Monday of the next week when assignment of the Bounty Issue on GitHub happened. In case assignment of the Bounty Issue on GitHub happened during third or fourth full (seven-day) calendar week of the last month of the calendar quarter, start date in Bounty Program is counted from the first Monday of the new calendar quarter round. For Bounty Issues of Complexity Level `Medium`: + - Draft Pull Request must be submitted not later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request + - Final Pull Request must be submitted not later than on Friday of fourth week from the start date and merged not later than on Friday of sixth week from the start date For Bounty Issues of Complexity Level `Advanced`: + - Draft Pull Request must be submitted not later than on Friday of third week from the start date and updated on every Friday until submission of Final Pull Request + - Final Pull Request must be submitted not later than on Friday of sixth week from the start date and merged not later than on Friday of eighth week from the start date -If the Bounty Program Participant has not provided a weekly PR update, they are pinged as a reminder to do so. +Updates to the Draft Pull Request are determined by: + +- activity in the `Commits` section of the Draft Pull Request + +- activity of the automated code analysis service that runs on every commit (`SonarCloud`) -In case the Bounty Program Participant still doesn't provide the PR update after three pings over three weeks, it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participant, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, in the next calendar quarter round of the Bounty Program. At the same time the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from randomization process for the next calendar quarter round of the Bounty Program if such process is to take place. +If no Pull Request is involved, updates on the Bounty Issue are determined by: -Dropped Bounty Issue gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/dropped`. If during two calendar months of the second calendar quarter round the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. +- activity in the Bounty Issue's comments -### Example Bounty Issue Timeline +In case the Bounty Program Participant has not provided a weekly update to the Draft Pull Request and/or on the Bounty Issue (on Monday, the last activity of any of the abovementioned types was five or more calendar days before, e.g., on `2024-01-29`, the last activity of any type was on `2024-01-24` or earlier,) they are pinged as a reminder to do so. + +In case the Bounty Program Participant has not provided an update to the Draft Pull Request and/or on the Bounty Issue after two pings over two Mondays, on the third Monday it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participants, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, both in the current and next calendar quarter rounds of the Bounty Program. + +In case the dropped Bounty Issue is transferred to the next calendar quarter round of the Bounty Program, the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from the randomization process for the next calendar quarter round of the Bounty Program if such a process is to take place. + +Dropped Bounty Issue gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/dropped`. If during two calendar months of the second calendar quarter round of the Bounty Program the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. + +### Bounty Issue's Timeline Example |Complexity Level|Assignment date (by GitHub)|Start date (by BP rules)|End date (by BP rules)|Draft PR submission|Final PR submission|Final PR merge| |----------------|---------------------------|------------------------|----------------------|-------------------|-------------------|--------------| @@ -117,7 +138,7 @@ Dropped Bounty Issue gets text label of the second calendar quarter round (e.g., |Advanced |2023-04-26 |2023-05-01 |**2023-06-23** |2023-05-19 |2023-06-09 |**2023-06-23**| -## Extension of Bounty Issue's Timeline +## Extension Of Bounty Issue's Timeline In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a row, all remaining target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a row of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. @@ -126,17 +147,12 @@ In case of unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sit Communication on the necessity of the Bounty Issue Timeline extension should happen prior to any current milestone of the Bounty Issue's Timeline approaching, with a reflection of the start of such communication in the Bounty Issue's or Pull Request's comments, in case a communication platform other than GitHub is used. -## Additional conditions - -AsyncAPI Maintainers are allowed to work on Bounty Issues submitted by themselves. - -Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous resolution. +## Bounty Issue's Reclassification -In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope during Bounty Issue submission. +Upon request of the AsyncAPI Maintainer who is responsible for the resolution of the given Bounty Issue from the AsyncAPI's side in the Bounty Issue's comments in the process of resolution, the Complexity Level of the Bounty Issue can be reclassified in any direction (both lowered to `Medium` and heightened to `Advanced`,) with corresponding changes to the Bounty Issue's Timeline. -Bounty Issue has an overall time of life of five calendar months. If the Bounty Issue was not assigned during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/stalled`. If during two calendar months of the second calendar quarter round the Bounty Issue still was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. -Upon request of the AsyncAPI Maintainer in the Bounty Issue's comments in the process of resolution, the Complexity Level of the Bounty Issue can be reclassified in any direction (both lowered to `Medium` and heightened to `Advanced`,) with corresponding changes to the Bounty Issue's Timeline. +## Bounty Issue's Completion To avoid half-merges, unmet dependencies on the completion of other (inextricably linked) issues, waiting for merges of other separate PRs that provide critically important functionality for the given task, etc., and to avoid situations where AsyncAPI has already acquired an obligation to pay but factually the conditions of the Bounty Issue completion are not met yet, a system of double control with separation of concerns is exercised on the Bounty Issues: @@ -145,13 +161,29 @@ To avoid half-merges, unmet dependencies on the completion of other (inextricabl - the Bounty Program Participant proceeds with the process of claiming the reward only after the second comment from the Bounty Program Coordinator, confirming the Bounty Issue completion and readiness to perform the payout. -## Claiming the reward +## Bounty Issue's Time Of Life + +Bounty Issue has an overall time of life of five calendar months since the start of the calendar quarter it was first introduced in. If the Bounty Issue was not assigned during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/stalled`. If during two calendar months of the second calendar quarter round of the Bounty Program the Bounty Issue still was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. + + +## Additional Conditions + +AsyncAPI Maintainers are allowed to work on Bounty Issues submitted by themselves. + +Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous resolution. + +GitHub label `bounty` has hex code `#0E8A16`. + + +## Claiming The Reward Claiming the reward for the completed Bounty Issue is done via submission of an invoice at [the AsyncAPI page on Open Collective](https://opencollective.com/asyncapi) (button '`SUBMIT EXPENSE`'.) +**Before submission of the invoice, the Bounty Program Participant MUST ensure that the account they will use for the payout is VERIFIED, fully operational, and able to receive payments.** + Requirements for the invoice: -- Make sure that `Legal Name` and `Full name of the account holder` **are the same** and are YOUR REAL LEGAL NAME according to the passport/ID (nicknames are allowed only in `Settings / Public profile / Display name`, and it is **this** name that will be displayed publicly thoughout https://opencollective.com, if you have privacy concerns) +- Make sure that your `Full Name` on GitHub, as well as `Legal Name` and `Full name of the account holder` on the invoice, **are the same** and are YOUR REAL LEGAL NAME according to the passport/ID (on Open Collective, nicknames are allowed only in `Settings / Public profile / Display name`, and it is **this** name that will be displayed publicly throughout all https://opencollective.com, if you have privacy concerns) - **Expense title**: '`Bounty [repo]#[issue]`' (e.g., '`Bounty cli#38`' or '`Bounty cli#38, cli#361`' in case of two rewards being joined into one sum) @@ -159,14 +191,13 @@ Requirements for the invoice: - **Set invoice details / Description**: mention full URL of the GitHub issue which served as the Bounty Issue -AsyncAPI relies on Open Collective for [compliance with global sanctions](https://docs.opencollective.foundation/how-it-works/policies/international#international-activity-that-we-cant-enable). However, it has been empirically proven that even if the Bounty Program Participant is a citizen of a sanctioned jurisdiction, they can still receive the financial payment made to a payee in a non-sanctioned jurisdiction. Taking this into account, **potential Bounty Program Participants should check whether they will be able to receive payment themselves prior to starting participation in the Bounty Program**. AsyncAPI will not take any action if Open Collective refuses to relay the payment due to US or global sanctions imposed on a jurisdiction or an individual. +AsyncAPI does not perform financial transactions itself and relies on Open Collective to service payments and, thus, [comply with global sanctions](https://docs.opencollective.foundation/how-it-works/policies/international#international-activity-that-we-cant-enable). However, it has been empirically proven that even if the Bounty Program Participant is a citizen of a sanctioned jurisdiction, they can still receive the financial payment made to a payee in a non-sanctioned jurisdiction. Taking this into account, **potential Bounty Program Participants must check whether they will be able to receive payment themselves prior to starting participation in the Bounty Program**. AsyncAPI will not take any action if Open Collective refuses to relay the payment due to US or global sanctions imposed on a jurisdiction or an individual. -Also, note, that if a Bounty Program Participant submits invoice expenses for more than six hundred US dollars and 00 cents (USD 600.00) per calendar year to a Collective at Open Collective with a Fiscal Host in the US (AsyncAPI fits this description,) they will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant is an individual or a sole proprietor, **supplying a local Tax ID**. +Also, note that if a Bounty Program Participant submits invoice expenses for more than six hundred US dollars and 00 cents (USD 600.00) per calendar year to a Collective at Open Collective with a Fiscal Host in the US (AsyncAPI fits this description,) they will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant has the legal status of an individual or of a sole proprietor, **supplying a local Tax ID**. At the time of writing (2023-10-01) Open Collective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with Open Collective can request them to perform a payout using a custom payment method to a non-sanctioned jurisdiction. - ## Ban Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Bans equal to zero. @@ -181,18 +212,19 @@ After the expiration of the Second Ban or after two calendar quarters after the A dedicated list is used for the purpose of tracking Ban history. - -## Instruction on assuring a Ban receipt +### Instruction on assuring a Ban receipt First ask to assign the Bounty Issue to you on GitHub, _only then_ start to think on the task, understand you can't do it, silently drop. - -## Instruction on avoiding a Ban receipt +### Instruction on avoiding a Ban receipt Think on the task, make sure that you understand how to do it and CAN do it, ask to assign the Bounty Issue to you on GitHub, meet all milestones of the Bounty Issue Timeline. -##### This document is the consolidated and formalized version of all information publicly available in free form at +## Sources + +This document is the consolidated and formalized version of all information publicly available in free form at + ##### https://github.com/orgs/asyncapi/discussions/541#discussioncomment-5462792 ##### https://github.com/orgs/asyncapi/discussions/877#discussioncomment-6970799 ##### https://docs.opencollective.com/help/expenses-and-getting-paid/tax-information From 73b6e98140c5b4c630053264ea2b48fb15728441 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Wed, 28 Feb 2024 10:45:02 +0000 Subject: [PATCH 15/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index b26b67e70..48de34dc5 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -13,9 +13,9 @@ Anyone may implement this specification of the software development process with The budget of the Bounty Program per calendar year is twenty thousand US dollars and 00 cents (USD 20,000.00), which is five thousand US dollars and 00 cents (USD 5,000.00) per calendar quarter (three calendar months), split as follows: -- four thousand six hundred US dollars and 00 cents (USD 4,600.00) per calendar quarter as the total amount of reward for completed Bounty Issues +- Four thousand six hundred US dollars and 00 cents (USD 4,600.00) per calendar quarter as the total amount of reward for completed Bounty Issues -- four hundred US dollars and 00 cents (USD 400.00) per calendar quarter as the cost of the Bounty Program Coordination +- Four hundred US dollars and 00 cents (USD 400.00) per calendar quarter as the cost of the Bounty Program Coordination The reward for completion of the Bounty Issue of Complexity Level `Medium` is two hundred US dollars and 00 cents (USD 200.00). From aa973110e44427de943905c67f26f4a8148be080 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Wed, 28 Feb 2024 10:45:02 +0000 Subject: [PATCH 16/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 48de34dc5..48539be14 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -177,7 +177,7 @@ GitHub label `bounty` has hex code `#0E8A16`. ## Claiming The Reward -Claiming the reward for the completed Bounty Issue is done via submission of an invoice at [the AsyncAPI page on Open Collective](https://opencollective.com/asyncapi) (button '`SUBMIT EXPENSE`'.) +Claiming the reward for the completed Bounty Issue is done via submission of an invoice at the [AsyncAPI page on Open Collective](https://opencollective.com/asyncapi) (button '`SUBMIT EXPENSE`'.) **Before submission of the invoice, the Bounty Program Participant MUST ensure that the account they will use for the payout is VERIFIED, fully operational, and able to receive payments.** @@ -191,7 +191,7 @@ Requirements for the invoice: - **Set invoice details / Description**: mention full URL of the GitHub issue which served as the Bounty Issue -AsyncAPI does not perform financial transactions itself and relies on Open Collective to service payments and, thus, [comply with global sanctions](https://docs.opencollective.foundation/how-it-works/policies/international#international-activity-that-we-cant-enable). However, it has been empirically proven that even if the Bounty Program Participant is a citizen of a sanctioned jurisdiction, they can still receive the financial payment made to a payee in a non-sanctioned jurisdiction. Taking this into account, **potential Bounty Program Participants must check whether they will be able to receive payment themselves prior to starting participation in the Bounty Program**. AsyncAPI will not take any action if Open Collective refuses to relay the payment due to US or global sanctions imposed on a jurisdiction or an individual. +AsyncAPI does not perform financial transactions itself and relies on Open Collective's Fiscal Host 'Open Source Collective' to service payments and, thus, [comply with global sanctions](https://docs.oscollective.org/how-it-works/basics/expense-policies-and-limitations#permitted-countries-ofac-checks-and-payments-to-certain-countries). However, it has been empirically proven that even if the Bounty Program Participant is a citizen of a sanctioned jurisdiction, they can still receive the financial payment made to a payee in a non-sanctioned jurisdiction. Taking this into account, **potential Bounty Program Participants must check whether they will be able to receive payment themselves prior to starting participation in the Bounty Program**. AsyncAPI will not take any action if Open Source Collective refuses to relay the payment due to US or global sanctions imposed on a jurisdiction or an individual. Also, note that if a Bounty Program Participant submits invoice expenses for more than six hundred US dollars and 00 cents (USD 600.00) per calendar year to a Collective at Open Collective with a Fiscal Host in the US (AsyncAPI fits this description,) they will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant has the legal status of an individual or of a sole proprietor, **supplying a local Tax ID**. From ded90ed18766f7b0a499ef4abf321474f464c5a3 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 14 Mar 2024 07:06:25 +0000 Subject: [PATCH 17/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 48539be14..2e19c3782 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -55,7 +55,7 @@ Due to asynchronous nature of the AsyncAPI Initiative itself and thus its Bounty ## Bounty Issue's Submission -Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after call for such submission, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by the AsyncAPI Maintainer of the given repository, containing the following five fields: +Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after call for such submission, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by one of the GitHub users whose GitHub handles are written in the `CODEOWNERS` file of the given repository (one of the AsyncAPI Maintainers of this repository,) containing the following five fields: 1. Number: `cli#361` From 2dad2105ffeaff6f59692f190a649588a8c102c1 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 14 Mar 2024 07:06:25 +0000 Subject: [PATCH 18/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 2e19c3782..141080b01 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -4,7 +4,7 @@ The AsyncAPI Bounty Program is a specification of the software development process, customized to meet the needs of the AsyncAPI Initiative. -The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding individual contributors to open source software while creating an artificial set of time constraints to make the schedule for achieving programming targets predictable. +The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding individual open source maintainers and contributors while creating an artificial set of time constraints to make the schedule for achieving programming targets predictable. Anyone may implement this specification of the software development process with or without any modification in any way they find suitable. @@ -55,7 +55,7 @@ Due to asynchronous nature of the AsyncAPI Initiative itself and thus its Bounty ## Bounty Issue's Submission -Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after call for such submission, in a quantity of no more than two issues per repository, in comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by one of the GitHub users whose GitHub handles are written in the `CODEOWNERS` file of the given repository (one of the AsyncAPI Maintainers of this repository,) containing the following five fields: +Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after the call for such submission, in a quantity of no more than two issues per repository, in the comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by an AsyncAPI Maintainer who will be responsible for the resolution of the given Bounty Issue from the AsyncAPI's side, containing the following five fields: 1. Number: `cli#361` @@ -149,7 +149,7 @@ Communication on the necessity of the Bounty Issue Timeline extension should hap ## Bounty Issue's Reclassification -Upon request of the AsyncAPI Maintainer who is responsible for the resolution of the given Bounty Issue from the AsyncAPI's side in the Bounty Issue's comments in the process of resolution, the Complexity Level of the Bounty Issue can be reclassified in any direction (both lowered to `Medium` and heightened to `Advanced`,) with corresponding changes to the Bounty Issue's Timeline. +Upon request of the AsyncAPI Maintainer who is responsible for the resolution of the given Bounty Issue from the AsyncAPI's side in the Bounty Issue's comments in the process of resolution, the Complexity Level of the Bounty Issue can be reclassified in any direction (both lowered to `Medium` and heightened to `Advanced`,) with corresponding changes to the Bounty Issue's Timeline in case of a need. ## Bounty Issue's Completion From d021ead1ab9573be88759a882967320ab396ccd4 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 14 Mar 2024 07:06:25 +0000 Subject: [PATCH 19/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 141080b01..eb9b5d58e 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -65,7 +65,7 @@ Bounty Issues for the upcoming calendar quarter round of the Bounty Program are 4. Complexity: `Medium` | `Advanced` -5. Type: `Coding` | `Docs` | `Design` +5. Type: `Coding` | `DevOps` | `Docs` | `Design` In case documentation must be provided together with solution requested in the Bounty Issue, such requirement should be explicitly stated in the Scope. From 3b32789b84a823087c4f8d4055ba1b8da75a4970 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 14 Mar 2024 07:06:25 +0000 Subject: [PATCH 20/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index eb9b5d58e..79f72ee86 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -202,13 +202,15 @@ At the time of writing (2023-10-01) Open Collective supports `ACH`, `Internation Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Bans equal to zero. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the first time, they receive a First Ban and will be prohibited from participating in the Bounty Program starting from the current moment, and during two calendar months from the beginning of the next calendar quarter. After this period, the First Ban expires. +In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the first time, they receive a First Ban and will be prohibited from participating in the Bounty Program starting from the current moment and during two calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the First Ban expires. -In case a Bounty Program Participant stops rendering services directed towards resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') for the second time during two calendar quarters after the expiration of the First Ban, they receive a Second Ban and will be prohibited from participating in the Bounty Program starting from the current moment, and during eight calendar months from the beginning of the next calendar quarter. After this period, the Second Ban expires. +In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the second time during two full (three-month) calendar quarters after the expiration of the First Ban, they receive a Second Ban and will be prohibited from participating in the Bounty Program starting from the current moment and during eight calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the Second Ban expires. -In case a Bounty Program Participant stops rendering services directed towards resolution of two Bounty Issues simultaneously without any communication on the subject (performs 'silent drop',) the Second Ban is applied immediately. +In case a Bounty Program Participant stops rendering services directed toward resolution of two Bounty Issues simultaneously without any communication on the subject (performs 'silent drop') and/or fails to complete two Bounty Issues within the assigned Timeline simultaneously, the Second Ban is applied immediately. -After the expiration of the Second Ban or after two calendar quarters after the expiration of the First Ban if no Second Ban was received during this time, their Ban history is considered clean, and the quantity of Bans is reset to zero. +Reward for the completed Bounty Issue (Bounty Issues) is not paid to the Bounty Program Participant who received Ban for this Bounty Issue (Bounty Issues) in the current and next one Bounty Program's calendar quarter round, even in case of its (their) voluntary completion. + +After the expiration of the Second Ban or after two full (three-month) calendar quarters after the expiration of the First Ban, if no Second Ban was received during this time, their Ban history is considered clean, and the quantity of Bans is reset to zero. A dedicated list is used for the purpose of tracking Ban history. From 94df2c0adc25b7f59ab6029eec592ec519dc0976 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 14 Mar 2024 07:06:25 +0000 Subject: [PATCH 21/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 79f72ee86..670f9554d 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -124,7 +124,7 @@ If no Pull Request is involved, updates on the Bounty Issue are determined by: In case the Bounty Program Participant has not provided a weekly update to the Draft Pull Request and/or on the Bounty Issue (on Monday, the last activity of any of the abovementioned types was five or more calendar days before, e.g., on `2024-01-29`, the last activity of any type was on `2024-01-24` or earlier,) they are pinged as a reminder to do so. -In case the Bounty Program Participant has not provided an update to the Draft Pull Request and/or on the Bounty Issue after two pings over two Mondays, on the third Monday it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Ban rules are applied to such Bounty Program Participants, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, both in the current and next calendar quarter rounds of the Bounty Program. +In case the Bounty Program Participant has not provided an update to the Draft Pull Request and/or on the Bounty Issue after two pings over two Mondays, on the third Monday it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Suspension rules are applied to such Bounty Program Participants, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, both in the current and next calendar quarter rounds of the Bounty Program. In case the dropped Bounty Issue is transferred to the next calendar quarter round of the Bounty Program, the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from the randomization process for the next calendar quarter round of the Bounty Program if such a process is to take place. @@ -198,27 +198,27 @@ Also, note that if a Bounty Program Participant submits invoice expenses for mor At the time of writing (2023-10-01) Open Collective supports `ACH`, `International SWIFT through Wise` (limitations of financial technology company 'Wise' are applied) and `PayPal` as automated payout methods. In rare cases (once per calendar year) Bounty Program Participant in personal communication with Open Collective can request them to perform a payout using a custom payment method to a non-sanctioned jurisdiction. -## Ban +## Suspension -Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Bans equal to zero. +Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Suspensions equal to zero. -In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the first time, they receive a First Ban and will be prohibited from participating in the Bounty Program starting from the current moment and during two calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the First Ban expires. +In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the first time, they receive a First Suspension and will be prohibited from participating in the Bounty Program starting from the current moment and during two calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the First Suspension expires. -In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the second time during two full (three-month) calendar quarters after the expiration of the First Ban, they receive a Second Ban and will be prohibited from participating in the Bounty Program starting from the current moment and during eight calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the Second Ban expires. +In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the second time during two full (three-month) calendar quarters after the expiration of the First Suspension, they receive a Second Suspension and will be prohibited from participating in the Bounty Program starting from the current moment and during eight calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the Second Suspension expires. -In case a Bounty Program Participant stops rendering services directed toward resolution of two Bounty Issues simultaneously without any communication on the subject (performs 'silent drop') and/or fails to complete two Bounty Issues within the assigned Timeline simultaneously, the Second Ban is applied immediately. +In case a Bounty Program Participant stops rendering services directed toward resolution of two Bounty Issues simultaneously without any communication on the subject (performs 'silent drop') and/or fails to complete two Bounty Issues within the assigned Timeline simultaneously, the Second Suspension is applied immediately. -Reward for the completed Bounty Issue (Bounty Issues) is not paid to the Bounty Program Participant who received Ban for this Bounty Issue (Bounty Issues) in the current and next one Bounty Program's calendar quarter round, even in case of its (their) voluntary completion. +Reward for the completed Bounty Issue (Bounty Issues) is not paid to the Bounty Program Participant who received Suspension for this Bounty Issue (Bounty Issues) in the current and next one Bounty Program's calendar quarter round, even in case of its (their) voluntary completion. -After the expiration of the Second Ban or after two full (three-month) calendar quarters after the expiration of the First Ban, if no Second Ban was received during this time, their Ban history is considered clean, and the quantity of Bans is reset to zero. +After the expiration of the Second Suspension or after two full (three-month) calendar quarters after the expiration of the First Suspension, if no Second Suspension was received during this time, their Suspension history is considered clean, and the quantity of Suspensions is reset to zero. -A dedicated list is used for the purpose of tracking Ban history. +A dedicated list is used for the purpose of tracking Suspension history. -### Instruction on assuring a Ban receipt +### Instruction on assuring a Suspension receipt First ask to assign the Bounty Issue to you on GitHub, _only then_ start to think on the task, understand you can't do it, silently drop. -### Instruction on avoiding a Ban receipt +### Instruction on avoiding a Suspension receipt Think on the task, make sure that you understand how to do it and CAN do it, ask to assign the Bounty Issue to you on GitHub, meet all milestones of the Bounty Issue Timeline. From c60009243bc1541435ae92c99ba1530decacf0b8 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 14 Mar 2024 07:06:25 +0000 Subject: [PATCH 22/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 1 + 1 file changed, 1 insertion(+) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 670f9554d..09f5358ee 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -232,3 +232,4 @@ This document is the consolidated and formalized version of all information publ ##### https://docs.opencollective.com/help/expenses-and-getting-paid/tax-information ##### https://asyncapi.slack.com/archives/C05UHTSEHE2/p1699433566459269 ##### https://github.com/asyncapi/community/pull/897#discussion_r1390778779 +##### https://github.com/asyncapi/community/issues/1072 From dd62e54b950ce4f541281fb371128bbd33097506 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Wed, 17 Apr 2024 21:24:48 +0000 Subject: [PATCH 23/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 09f5358ee..291d95e0a 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -4,7 +4,7 @@ The AsyncAPI Bounty Program is a specification of the software development process, customized to meet the needs of the AsyncAPI Initiative. -The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding individual open source maintainers and contributors while creating an artificial set of time constraints to make the schedule for achieving programming targets predictable. +The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding individual open source maintainers and contributors while creating an artificial set of time constraints to make the schedule for achieving assigned targets predictable. Anyone may implement this specification of the software development process with or without any modification in any way they find suitable. @@ -102,15 +102,15 @@ In case assignment of the Bounty Issue on GitHub happened during third or fourth For Bounty Issues of Complexity Level `Medium`: -- Draft Pull Request must be submitted not later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request +- Draft Pull Request, [appropriately linked to the Bounty Issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue), must be submitted no later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request -- Final Pull Request must be submitted not later than on Friday of fourth week from the start date and merged not later than on Friday of sixth week from the start date +- Final Pull Request must be submitted no later than on Friday of fourth week from the start date and merged no later than on Friday of sixth week from the start date For Bounty Issues of Complexity Level `Advanced`: -- Draft Pull Request must be submitted not later than on Friday of third week from the start date and updated on every Friday until submission of Final Pull Request +- Draft Pull Request, [appropriately linked to the Bounty Issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue), must be submitted no later than on Friday of third week from the start date and updated on every Friday until submission of Final Pull Request -- Final Pull Request must be submitted not later than on Friday of sixth week from the start date and merged not later than on Friday of eighth week from the start date +- Final Pull Request must be submitted no later than on Friday of sixth week from the start date and merged no later than on Friday of eighth week from the start date Updates to the Draft Pull Request are determined by: From fdd47944605741189738a1d14470c6ae4ad76f0a Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Mon, 22 Apr 2024 23:26:31 +0000 Subject: [PATCH 24/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 291d95e0a..605291b24 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -102,15 +102,15 @@ In case assignment of the Bounty Issue on GitHub happened during third or fourth For Bounty Issues of Complexity Level `Medium`: -- Draft Pull Request, [appropriately linked to the Bounty Issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue), must be submitted no later than on Friday of second week from the start date and updated on every Friday until submission of Final Pull Request +- Draft Pull Request, [linked to the Bounty Issue using a keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if applicable, must be submitted no later than Friday of the second week from the start date and updated every Friday until submission of Final Pull Request -- Final Pull Request must be submitted no later than on Friday of fourth week from the start date and merged no later than on Friday of sixth week from the start date +- Final Pull Request must be submitted no later than Friday of fourth week from the start date and merged no later than Friday of sixth week from the start date For Bounty Issues of Complexity Level `Advanced`: -- Draft Pull Request, [appropriately linked to the Bounty Issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue), must be submitted no later than on Friday of third week from the start date and updated on every Friday until submission of Final Pull Request +- Draft Pull Request, [linked to the Bounty Issue using a keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if applicable, must be submitted no later than Friday of the third week from the start date and updated every Friday until submission of Final Pull Request -- Final Pull Request must be submitted no later than on Friday of sixth week from the start date and merged no later than on Friday of eighth week from the start date +- Final Pull Request must be submitted no later than Friday of sixth week from the start date and merged no later than Friday of eighth week from the start date Updates to the Draft Pull Request are determined by: From dea11b4c632b858a61663914c2e7f66820665ba9 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 16 May 2024 13:10:43 +0000 Subject: [PATCH 25/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 75 ++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 27 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 605291b24..acadfe7d9 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -63,7 +63,7 @@ Bounty Issues for the upcoming calendar quarter round of the Bounty Program are 3. Scope: `We need to extend the functionality of '--version' flag in AsyncAPI CLI to include info about versions of other AsyncAPI libraries used in the project` -4. Complexity: `Medium` | `Advanced` +4. Complexity Level: `Medium` | `Advanced` 5. Type: `Coding` | `DevOps` | `Docs` | `Design` @@ -79,17 +79,19 @@ All GitHub issues selected as Bounty Issues get labels on GitHub: - GitHub label `bounty` -- text label `level/medium` or `level/advanced` according to the Complexity Level of the Bounty Issue +- text label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates (e.g., `bounty/2024-Q3`) -- text label indicating calendar quarter round of the Bounty Program in which Bounty Issue participates (e.g., `bounty/2024-Q1`) +- text labels `bounty/medium` | `bounty/advanced` according to the Complexity Level of the Bounty Issue + +- text labels `bounty/coding` | `bounty/devops` | `bounty/docs` | `bounty/design` according to the Type of the Bounty Issue After addition of labels GitHub issues selected as Bounty Issues can be viewed with GitHub's search tool using the URL formed as: ``` -https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+%22bounty/2024-Q1%22+in%3Acomments +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+%22bounty/2024-Q3%22+in%3Acomments ``` Also, Bounty Issues that have no assignee and thus are free to pick up can be viewed with GitHub's search tool using the URL formed as: ``` -https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+%22bounty/2024-Q1%22+in%3Acomments+no%3Aassignee +https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+%22bounty/2024-Q3%22+in%3Acomments+no%3Aassignee ``` Note, that results of the GitHub search are visible to logged-in GitHub users only. @@ -102,15 +104,15 @@ In case assignment of the Bounty Issue on GitHub happened during third or fourth For Bounty Issues of Complexity Level `Medium`: -- Draft Pull Request, [linked to the Bounty Issue using a keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if applicable, must be submitted no later than Friday of the second week from the start date and updated every Friday until submission of Final Pull Request +- Draft Pull Request, [linked to the Bounty Issue using a keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if applicable, must be submitted no later than Sunday of the second week from the start date and updated every week no later than Sunday, until submission of Final Pull Request and the start of its merging process -- Final Pull Request must be submitted no later than Friday of fourth week from the start date and merged no later than Friday of sixth week from the start date +- Final Pull Request must be submitted, and its merging process started no later than Sunday of the fourth week from the start date, with the merging process' successful ending no later than Sunday of the sixth week from the start date For Bounty Issues of Complexity Level `Advanced`: -- Draft Pull Request, [linked to the Bounty Issue using a keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if applicable, must be submitted no later than Friday of the third week from the start date and updated every Friday until submission of Final Pull Request +- Draft Pull Request, [linked to the Bounty Issue using a keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if applicable, must be submitted no later than Sunday of the third week from the start date and updated every week no later than Sunday, until submission of Final Pull Request and the start of its merging process -- Final Pull Request must be submitted no later than Friday of sixth week from the start date and merged no later than Friday of eighth week from the start date +- Final Pull Request must be submitted, and its merging process started no later than Sunday of the sixth week from the start date, with the merging process' successful ending no later than Sunday of the eighth week from the start date Updates to the Draft Pull Request are determined by: @@ -122,25 +124,26 @@ If no Pull Request is involved, updates on the Bounty Issue are determined by: - activity in the Bounty Issue's comments -In case the Bounty Program Participant has not provided a weekly update to the Draft Pull Request and/or on the Bounty Issue (on Monday, the last activity of any of the abovementioned types was five or more calendar days before, e.g., on `2024-01-29`, the last activity of any type was on `2024-01-24` or earlier,) they are pinged as a reminder to do so. +In case the Bounty Program Participant has not provided a weekly update to the Draft Pull Request and/or on the Bounty Issue (on Monday, the last activity of any of the abovementioned types was four or more calendar days before, e.g., on `2024-05-20`, the last activity of any type was on `2024-05-16` or earlier,) they are pinged as a reminder to do so. + +In case the Bounty Program Participant has not provided an update to the Draft Pull Request and/or on the Bounty Issue after two pings over two consecutive Mondays, on the third consecutive Monday it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Suspension rules are applied to such Bounty Program Participants, and the End Of Life rules to such Bounty Issues. -In case the Bounty Program Participant has not provided an update to the Draft Pull Request and/or on the Bounty Issue after two pings over two Mondays, on the third Monday it is assumed that the task cannot be completed within the rest of the time, and the Bounty Program Participant has silently dropped the Bounty Issue. Suspension rules are applied to such Bounty Program Participants, and the Bounty Issue becomes free for assignment to another Bounty Program Participant with a reset timeline, both in the current and next calendar quarter rounds of the Bounty Program. +In case the Bounty Program Participant has not provided the critical fixes required to make the Final Pull Request merging possible during the last week of the Timeline, they are pinged on Thursday, four days before the last day of the Timeline, to do so. -In case the dropped Bounty Issue is transferred to the next calendar quarter round of the Bounty Program, the reward for this Bounty Issue does not alter the budget allocated for the next calendar quarter round of the Bounty Program, and it is excluded from the randomization process for the next calendar quarter round of the Bounty Program if such a process is to take place. +In case the Bounty Program Participant has not provided critical fixes during the next four days, on Monday, after the last day of the Bounty Issues' Timeline, it is considered that the Bounty Program Participant did not complete the Bounty Issue within the assigned Timeline due to their own misperformance. Suspension rules are applied to such Bounty Program Participants, and the End Of Life rules to such Bounty Issues. -Dropped Bounty Issue gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/dropped`. If during two calendar months of the second calendar quarter round of the Bounty Program the dropped Bounty Issue was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and this Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. It also can again be assigned to the same Bounty Program Participant who dropped it. ### Bounty Issue's Timeline Example -|Complexity Level|Assignment date (by GitHub)|Start date (by BP rules)|End date (by BP rules)|Draft PR submission|Final PR submission|Final PR merge| -|----------------|---------------------------|------------------------|----------------------|-------------------|-------------------|--------------| -|Medium |2023-04-27 |2023-05-01 |**2023-06-09** |2023-05-12 |2023-05-26 |**2023-06-09**| -|Advanced |2023-04-26 |2023-05-01 |**2023-06-23** |2023-05-19 |2023-06-09 |**2023-06-23**| +|Complexity Level|Assignment Date (by GitHub)|Start Date (by BP Rules)|End Date (by BP Rules)|Draft PR Submission|Final PR Merge Start|Final PR Merge End| +|----------------|---------------------------|------------------------|----------------------|-------------------|--------------------|------------------| +|Medium |2024-06-21 |2024-07-01 |**2024-08-11** |2024-07-14 |2024-07-28 |**2024-08-11** | +|Advanced |2024-06-25 |2024-07-01 |**2024-08-25** |2024-07-21 |2024-08-11 |**2024-08-25** | ## Extension Of Bounty Issue's Timeline -In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three working days in a row, all remaining target dates of the Bounty Issue Timeline are increased by one calendar week per each three working days in a row of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. +In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue Timeline are increased by one calendar week per each three consecutive working days of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. In case of unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sites/3/2020/03/icc-forcemajeure-hardship-clauses-march2020.pdf) and/or circumstances that could not be foreseen and/or that are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. @@ -151,19 +154,33 @@ Communication on the necessity of the Bounty Issue Timeline extension should hap Upon request of the AsyncAPI Maintainer who is responsible for the resolution of the given Bounty Issue from the AsyncAPI's side in the Bounty Issue's comments in the process of resolution, the Complexity Level of the Bounty Issue can be reclassified in any direction (both lowered to `Medium` and heightened to `Advanced`,) with corresponding changes to the Bounty Issue's Timeline in case of a need. +Reclassified Bounty Issue gets one of historical text labels `bounty/downgraded` or `bounty/upgraded` accordingly. + ## Bounty Issue's Completion To avoid half-merges, unmet dependencies on the completion of other (inextricably linked) issues, waiting for merges of other separate PRs that provide critically important functionality for the given task, etc., and to avoid situations where AsyncAPI has already acquired an obligation to pay but factually the conditions of the Bounty Issue completion are not met yet, a system of double control with separation of concerns is exercised on the Bounty Issues: -- after Bounty Issue's closure on GitHub, the AsyncAPI Maintainer, who was responsible for the resolution of the given Bounty Issue from the AsyncAPI's side, confirms the Bounty Issue's technical resolution by posting a separate confirming comment in this Bounty Issue's comments; +- After Bounty Issue's closure on GitHub, the AsyncAPI Maintainer, who was responsible for the resolution of the given Bounty Issue from the AsyncAPI's side, confirms the Bounty Issue's technical resolution by posting a separate confirming comment in this Bounty Issue's comments (followed by another confirming comment from the AsyncAPI Maintainer of this specific repository, if these were two different persons) + +- The Bounty Program Participant proceeds with the process of claiming the reward only after the second comment from the Bounty Program Coordinator, confirming the Bounty Issue completion and readiness to perform the payout + + +## Bounty Issue's End Of Life -- the Bounty Program Participant proceeds with the process of claiming the reward only after the second comment from the Bounty Program Coordinator, confirming the Bounty Issue completion and readiness to perform the payout. +GitHub issue participates in the Bounty Program and is considered a Bounty Issue starting from the second of addition of the GitHub label `bounty` according to GitHub's timestamp until the Bounty Issue's End Of Life, which starts after the last second of the last day of the first calendar month since the start of the calendar quarter round of the Bounty Program it was introduced in, inclusive. +In case a Bounty Issue gets an assignee before the End Of Life and continues to have an assignee after the End Of Life, it continues to be a Bounty Issue until completion. -## Bounty Issue's Time Of Life +In case a Bounty Issue does not get an assignee before the End Of Life, after reaching End Of Life it gets the historical text label `bounty/unpicked` and is considered the one that reached End Of Life. -Bounty Issue has an overall time of life of five calendar months since the start of the calendar quarter it was first introduced in. If the Bounty Issue was not assigned during the first calendar quarter round (e.g., `bounty/2024-Q1`), it gets text label of the second calendar quarter round (e.g., `bounty/2024-Q2`) and text label `bounty/stalled`. If during two calendar months of the second calendar quarter round of the Bounty Program the Bounty Issue still was not picked up by any Bounty Program Participant for resolution, all bounty-related labels are removed from it and Bounty Issue becomes a regular GitHub issue, which can again be submitted as a Bounty Issue Candidate. +In case a Bounty Issue gets an assignee before the End Of Life and is dropped after the End Of Life, it gets the historical text label `bounty/dropped` and is considered the one that reached End Of Life. + +In case a Bounty Issue gets an assignee before the End Of Life and does not get completed within the assigned Timeline after the End Of Life due to Bounty Program Participant's misperformance, it gets the historical text label `bounty/misperformed` and is considered the one that reached End Of Life. + +Bounty Issue that reached End Of Life gets the historical text label `bounty/eol`, reward for this Bounty Issue gets excluded from the budget allocated for the corresponding calendar quarter round of the Bounty Program, and this Bounty Issue becomes a regular GitHub issue, which can be submitted again as a Bounty Issue Candidate. + +Dropped Bounty Issue can be assigned again to the same Bounty Program Participant who dropped it. ## Additional Conditions @@ -202,15 +219,19 @@ At the time of writing (2023-10-01) Open Collective supports `ACH`, `Internation Each new Bounty Program Participant starts participation in the Bounty Program with the quantity of Suspensions equal to zero. -In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the first time, they receive a First Suspension and will be prohibited from participating in the Bounty Program starting from the current moment and during two calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the First Suspension expires. +In case a Bounty Program Participant stops rendering services directed toward resolution of the (**one**) Bounty Issue without any communication on the subject ('silently dropped') and/or fails to complete the (**one**) Bounty Issue within the assigned Timeline due to their own misperformance, for the **first time**, they receive a **First Suspension** and will be prohibited from participating in the Bounty Program **starting from the current moment and during two calendar months from the beginning of the next full (three-month) calendar quarter**. After this period, the First Suspension expires. + +In case a Bounty Program Participant stops rendering services directed toward resolution of the (**one**) Bounty Issue without any communication on the subject ('silently dropped') and/or fails to complete the (**one**) Bounty Issue within the assigned Timeline due to their own misperformance, for the **second time** during five calendar months from the beginning of the next full (three-month) calendar quarter after the expiration of the First Suspension, they receive a **Second Suspension** and will be prohibited from participating in the Bounty Program **starting from the current moment and during eight calendar months from the beginning of the next full (three-month) calendar quarter**. After this period, the Second Suspension expires. + +In case a Bounty Program Participant stops rendering services directed toward resolution of **one of two** Bounty Issues, chosen for simultaneous resolution, without any communication on the subject ('silently dropped') and/or fails to complete **one of two** Bounty Issues chosen for simultaneous resolution within the assigned Timeline due to their own misperformance, for the **first time**, they receive a **First Suspension** and will be prohibited from participating in the Bounty Program **during two calendar months from the beginning of the next full (three-month) calendar quarter**. After this period, the First Suspension expires. -In case a Bounty Program Participant stops rendering services directed toward resolution of the Bounty Issue without any communication on the subject (performs 'silent drop') and/or fails to complete the Bounty Issue within the assigned Timeline, for the second time during two full (three-month) calendar quarters after the expiration of the First Suspension, they receive a Second Suspension and will be prohibited from participating in the Bounty Program starting from the current moment and during eight calendar months from the beginning of the next full (three-month) calendar quarter. After this period, the Second Suspension expires. +In case a Bounty Program Participant stops rendering services directed toward resolution of **one of two** Bounty Issues, chosen for simultaneous resolution, without any communication on the subject ('silently dropped') and/or fails to complete **one of two** Bounty Issues chosen for simultaneous resolution within the assigned Timeline due to their own misperformance, for the **second time** during five calendar months from the beginning of the next full (three-month) calendar quarter after the expiration of the First Suspension, they receive a **Second Suspension** and will be prohibited from participating in the Bounty Program **during eight calendar months from the beginning of the next full (three-month) calendar quarter**. After this period, the Second Suspension expires. -In case a Bounty Program Participant stops rendering services directed toward resolution of two Bounty Issues simultaneously without any communication on the subject (performs 'silent drop') and/or fails to complete two Bounty Issues within the assigned Timeline simultaneously, the Second Suspension is applied immediately. +In case a Bounty Program Participant stops rendering services directed toward resolution of **two** Bounty Issues **simultaneously** without any communication on the subject ('silently dropped') and/or fails to complete **two** Bounty Issues within the assigned Timeline due to their own misperformance **simultaneously**, they receive a **Second Suspension** immediately and will be prohibited from participating in the Bounty Program **starting from the current moment and during eight calendar months from the beginning of the next full (three-month) calendar quarter**. After this period, the Second Suspension expires. -Reward for the completed Bounty Issue (Bounty Issues) is not paid to the Bounty Program Participant who received Suspension for this Bounty Issue (Bounty Issues) in the current and next one Bounty Program's calendar quarter round, even in case of its (their) voluntary completion. +Reward for the completed Bounty Issue (Bounty Issues) is not paid to the Bounty Program Participant who received Suspension for this Bounty Issue (Bounty Issues) during the Suspension period, even in case of its (their) voluntary completion. -After the expiration of the Second Suspension or after two full (three-month) calendar quarters after the expiration of the First Suspension, if no Second Suspension was received during this time, their Suspension history is considered clean, and the quantity of Suspensions is reset to zero. +After the expiration of the Second Suspension or after five calendar months from the beginning of the next full (three-month) calendar quarter after the expiration of the First Suspension, if no Second Suspension was received during this time, their Suspension history is considered clean, and the quantity of Suspensions is reset to zero. A dedicated list is used for the purpose of tracking Suspension history. From 7804f9774dfdf00a3e2d8f1a9adec31c34ea63bc Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 20 Jun 2024 09:58:30 +0000 Subject: [PATCH 26/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index acadfe7d9..f97e2b6d3 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -208,7 +208,7 @@ Requirements for the invoice: - **Set invoice details / Description**: mention full URL of the GitHub issue which served as the Bounty Issue -AsyncAPI does not perform financial transactions itself and relies on Open Collective's Fiscal Host 'Open Source Collective' to service payments and, thus, [comply with global sanctions](https://docs.oscollective.org/how-it-works/basics/expense-policies-and-limitations#permitted-countries-ofac-checks-and-payments-to-certain-countries). However, it has been empirically proven that even if the Bounty Program Participant is a citizen of a sanctioned jurisdiction, they can still receive the financial payment made to a payee in a non-sanctioned jurisdiction. Taking this into account, **potential Bounty Program Participants must check whether they will be able to receive payment themselves prior to starting participation in the Bounty Program**. AsyncAPI will not take any action if Open Source Collective refuses to relay the payment due to US or global sanctions imposed on a jurisdiction or an individual. +AsyncAPI does not perform financial transactions itself and relies on Open Collective's Fiscal Host 'Open Source Collective' to service payments and, thus, [comply with global sanctions](https://docs.oscollective.org/how-it-works/basics/expense-policies-and-limitations#permitted-countries-ofac-checks-and-payments-to-certain-countries). However, it has been empirically proven that even if the Bounty Program Participant is a citizen of a sanctioned jurisdiction, they can still receive the financial payment made to a payee in a non-sanctioned jurisdiction. Taking this into account, **potential Bounty Program Participants must [check themselves](https://wise.com/help/articles/2978049/which-countries-can-i-use-wise-in) to see whether they will be able to receive payment prior to starting participation in the Bounty Program**. AsyncAPI will not take any action if Open Source Collective refuses to relay the payment due to US or global sanctions imposed on a jurisdiction or an individual. Also, note that if a Bounty Program Participant submits invoice expenses for more than six hundred US dollars and 00 cents (USD 600.00) per calendar year to a Collective at Open Collective with a Fiscal Host in the US (AsyncAPI fits this description,) they will be asked to fill out an IRS tax information form, which will be either a `W-8BEN` or a `W-8BEN-E` depending on whether the Bounty Program Participant has the legal status of an individual or of a sole proprietor, **supplying a local Tax ID**. From 9a94195e59f6c181b0cc5bc7d680bc0534f7069a Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Tue, 30 Jul 2024 12:53:20 +0000 Subject: [PATCH 27/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index f97e2b6d3..05e0b9246 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -4,7 +4,7 @@ The AsyncAPI Bounty Program is a specification of the software development process, customized to meet the needs of the AsyncAPI Initiative. -The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding individual open source maintainers and contributors while creating an artificial set of time constraints to make the schedule for achieving assigned targets predictable. +The AsyncAPI Bounty Program operates exclusively on donated funds, does not seek financial profit, uses publicly and freely available tools only, and has as its main purpose rewarding individual open source maintainers and contributors of **Middle** and **Senior** professional levels while creating an artificial set of time constraints to make the schedule for achieving assigned targets predictable. Anyone may implement this specification of the software development process with or without any modification in any way they find suitable. @@ -143,7 +143,7 @@ In case the Bounty Program Participant has not provided critical fixes during th ## Extension Of Bounty Issue's Timeline -In case of the online absence of the AsyncAPI Maintainer in [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue Timeline are increased by one calendar week per each three consecutive working days of the online absence of the AsyncAPI Maintainer plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained a confident online presence in [Slack](https://asyncapi.slack.com), the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. +In case of the AsyncAPI Maintainer's delay in response in [GitHub](https://github.com) and/or [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue's Timeline are increased by one calendar week per each of the three consecutive working days of the AsyncAPI Maintainer's response delay plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained online presence, the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. In case of unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sites/3/2020/03/icc-forcemajeure-hardship-clauses-march2020.pdf) and/or circumstances that could not be foreseen and/or that are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. @@ -189,6 +189,12 @@ AsyncAPI Maintainers are allowed to work on Bounty Issues submitted by themselve Bounty Program Participant is allowed to choose up to two Bounty Issues of any Complexity Level for simultaneous resolution. +Two or more GitHub issues (each of which individually has a Complexity Level lower than `Medium` or those that are coupled tightly but not inextricably) can be aggregated to form one Bounty Issue, which is then submitted for participation in the Bounty Program. Aggregated Bounty Issues have the prefix `[BOUNTY]`. + +Regular contributors should explain in meaningful words how they are going to approach the resolution process when expressing a desire to work on a Bounty Issue. + +All Bounty Program-related activities (expression of a desire to work on a Bounty Issue, explanation of the presumed approach to resolution of the Bounty Issue, etc.) are taken into consideration only if they have happened after the addition of the GitHub label `bounty` to the GitHub issue. + GitHub label `bounty` has hex code `#0E8A16`. From f4fb2d52c31df1ea927f04c1be925594346d7a9c Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Fri, 30 Aug 2024 00:32:11 +0000 Subject: [PATCH 28/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 05e0b9246..f914eae49 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -55,7 +55,7 @@ Due to asynchronous nature of the AsyncAPI Initiative itself and thus its Bounty ## Bounty Issue's Submission -Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after the call for such submission, in a quantity of no more than two issues per repository, in the comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by an AsyncAPI Maintainer who will be responsible for the resolution of the given Bounty Issue from the AsyncAPI's side, containing the following five fields: +Bounty Issues for the upcoming calendar quarter round of the Bounty Program are submitted during the first and second full (seven-day) calendar weeks of the last month of the current calendar quarter, after the call for such submission, in the comments of the dedicated [AsyncAPI Organization's Discussion](https://github.com/orgs/asyncapi/discussions), by an AsyncAPI Maintainer who will be responsible for the resolution of the given Bounty Issue from the AsyncAPI's side, containing the following five fields: 1. Number: `cli#361` From 79f0edbfcb613acd08f572a3c47c88decb248dd1 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Thu, 7 Nov 2024 13:12:42 +0000 Subject: [PATCH 29/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index f914eae49..532507694 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -143,7 +143,7 @@ In case the Bounty Program Participant has not provided critical fixes during th ## Extension Of Bounty Issue's Timeline -In case of the AsyncAPI Maintainer's delay in response in [GitHub](https://github.com) and/or [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue's Timeline are increased by one calendar week per each of the three consecutive working days of the AsyncAPI Maintainer's response delay plus one calendar week. 'Plus one calendar week' period is required because after the AsyncAPI Maintainer has regained online presence, the Bounty Program Participant would have to spend time getting back to the insides of the issue, and nearly unfamiliar at that time their own code. +In case a response critical for the technical resolution of the Bounty Issue is delayed in [GitHub](https://github.com) and/or [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue's Timeline are increased by one calendar week per each of the three consecutive working days the critically important response was delayed, plus one calendar week in case of two and more periods of the three consecutive working days. 'Plus one calendar week' period is required because after the critically important response that was delayed for a significant amount of time has been given, the Bounty Program Participant would have to spend time getting back to the insides of the issue and nearly unfamiliar at that time their own code. 'Working days' are weekdays, from Monday through Friday. Friday and Monday may be considered consecutive in the sequences 'Thursday-Friday-Monday' and 'Friday-Monday-Tuesday.' In case of unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sites/3/2020/03/icc-forcemajeure-hardship-clauses-march2020.pdf) and/or circumstances that could not be foreseen and/or that are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. From c7274b64cc30e9484df778c068aa27741bf384e8 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Wed, 27 Nov 2024 10:41:14 +0200 Subject: [PATCH 30/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 532507694..a8afb0aa7 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -178,6 +178,8 @@ In case a Bounty Issue gets an assignee before the End Of Life and is dropped af In case a Bounty Issue gets an assignee before the End Of Life and does not get completed within the assigned Timeline after the End Of Life due to Bounty Program Participant's misperformance, it gets the historical text label `bounty/misperformed` and is considered the one that reached End Of Life. +In case a Bounty Issue gets an assignee before the End Of Life and during its technical resolution it becomes clear that this Bounty Issue cannot be completed due to unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sites/3/2020/03/icc-forcemajeure-hardship-clauses-march2020.pdf) and/or circumstances that could not be foreseen and/or that are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, it gets the historical text label `bounty/canceled` and is considered the one that reached End Of Life. + Bounty Issue that reached End Of Life gets the historical text label `bounty/eol`, reward for this Bounty Issue gets excluded from the budget allocated for the corresponding calendar quarter round of the Bounty Program, and this Bounty Issue becomes a regular GitHub issue, which can be submitted again as a Bounty Issue Candidate. Dropped Bounty Issue can be assigned again to the same Bounty Program Participant who dropped it. From 8648e2fc4c715f8d32fbf967c048fad006fb67e0 Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Wed, 4 Dec 2024 11:31:20 +0200 Subject: [PATCH 31/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index a8afb0aa7..983a54f1e 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -143,7 +143,7 @@ In case the Bounty Program Participant has not provided critical fixes during th ## Extension Of Bounty Issue's Timeline -In case a response critical for the technical resolution of the Bounty Issue is delayed in [GitHub](https://github.com) and/or [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue's Timeline are increased by one calendar week per each of the three consecutive working days the critically important response was delayed, plus one calendar week in case of two and more periods of the three consecutive working days. 'Plus one calendar week' period is required because after the critically important response that was delayed for a significant amount of time has been given, the Bounty Program Participant would have to spend time getting back to the insides of the issue and nearly unfamiliar at that time their own code. 'Working days' are weekdays, from Monday through Friday. Friday and Monday may be considered consecutive in the sequences 'Thursday-Friday-Monday' and 'Friday-Monday-Tuesday.' +In case a response critical for the technical resolution of the Bounty Issue is delayed in [GitHub](https://github.com) and/or [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue's Timeline are increased by one calendar week per each of the three consecutive working days the critically important response was delayed, plus one calendar week in case of three and more periods of the three consecutive working days. 'Plus one calendar week' period is required because after the critically important response that was delayed for a significant amount of time has been given, the Bounty Program Participant would have to spend time getting back to the insides of the issue and nearly unfamiliar at that time their own code. 'Working days' are weekdays, from Monday through Friday. Friday and Monday may be considered consecutive in the sequences 'Thursday-Friday-Monday' and 'Friday-Monday-Tuesday.' In case of unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sites/3/2020/03/icc-forcemajeure-hardship-clauses-march2020.pdf) and/or circumstances that could not be foreseen and/or that are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments. From 119594b42f7dce713fb3d7af5cfaf25e05b1a0fb Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Fri, 10 Jan 2025 10:43:44 +0200 Subject: [PATCH 32/32] docs: add Bounty Program Rules --- BOUNTY_PROGRAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOUNTY_PROGRAM.md b/BOUNTY_PROGRAM.md index 983a54f1e..a7439193e 100644 --- a/BOUNTY_PROGRAM.md +++ b/BOUNTY_PROGRAM.md @@ -143,7 +143,7 @@ In case the Bounty Program Participant has not provided critical fixes during th ## Extension Of Bounty Issue's Timeline -In case a response critical for the technical resolution of the Bounty Issue is delayed in [GitHub](https://github.com) and/or [Slack](https://asyncapi.slack.com) for a period of more than three consecutive working days, all remaining target dates of the Bounty Issue's Timeline are increased by one calendar week per each of the three consecutive working days the critically important response was delayed, plus one calendar week in case of three and more periods of the three consecutive working days. 'Plus one calendar week' period is required because after the critically important response that was delayed for a significant amount of time has been given, the Bounty Program Participant would have to spend time getting back to the insides of the issue and nearly unfamiliar at that time their own code. 'Working days' are weekdays, from Monday through Friday. Friday and Monday may be considered consecutive in the sequences 'Thursday-Friday-Monday' and 'Friday-Monday-Tuesday.' +In case a response critical for the technical resolution of the Bounty Issue is delayed in [GitHub](https://github.com) and/or [Slack](https://asyncapi.slack.com) for a period of three or more consecutive working days, all remaining target dates of the Bounty Issue's Timeline are increased by one calendar week per each of the three consecutive working days the critically important response was delayed. 'Working days' are weekdays, from Monday through Friday. Friday and Monday are considered consecutive. In case of unpredicted [force majeure](https://iccwbo.org/wp-content/uploads/sites/3/2020/03/icc-forcemajeure-hardship-clauses-march2020.pdf) and/or circumstances that could not be foreseen and/or that are beyond the control of both the Bounty Program Participant and the AsyncAPI Maintainer, the Bounty Issue Timeline can be increased by a fixed or indefinite amount of time, with a fair explanation in the Bounty Issue's or Pull Request's comments.