<?xml version="1.0"?>
<puzzles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.0pdd.com/puzzles.xsd" date="2020-05-27T13:48:31+00:00" version="0.30.21">
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/4" closed="2017-10-25T15:32:48+00:00">4</issue>
    <ticket>1</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>1-c3b485bc</id>
    <lines>24-26</lines>
    <body>We don't have any Slack-talking crew. Let's implement a simple one, which would listen to the new channels and create new projects when someone is asking for it.</body>
    <file>src/main/java/com/zerocracy/farm/package-info.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2016-12-14T19:49:09Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/5" closed="2017-10-25T15:32:49+00:00">5</issue>
    <ticket>3</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>3-2274f2a3</id>
    <lines>42-46</lines>
    <body>Current implementation has a big flaw -- it reads the last message in an issue, not the one posted by the user. Thus, if there were a few messages after the original one, we will lose them all together with the original one and will process just the latest one in the thread.</body>
    <file>src/main/java/com/zerocracy/crews/gh/GithubCrew.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2016-12-14T19:49:09Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/8" closed="2017-10-25T15:32:50+00:00">8</issue>
    <ticket>6</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>6-00c8b61e</id>
    <lines>34-37</lines>
    <body>We don't want to upload objects to S3 every time. We have to check first, whether any changes were actually made. Only if they were made, we will upload. Otherwise, just delete the file and that's it.</body>
    <file>src/main/java/com/zerocracy/farm/S3Item.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2017-01-03T14:30:21Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/10" closed="2017-10-25T15:32:51+00:00">10</issue>
    <ticket>9</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>9-d729c789</id>
    <lines>75-77</lines>
    <body>Even if the document already exists, we must check that it has the right URI of the XSD schema. The most important thing is its version. If the URI is wrong, we must update it.</body>
    <file>src/main/java/com/zerocracy/Xocument.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2017-01-06T19:33:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/18" closed="2017-10-25T15:32:52+00:00">18</issue>
    <ticket>17</ticket>
    <estimate>15</estimate>
    <role>IMP</role>
    <id>17-9258a674</id>
    <lines>29-31</lines>
    <body>This object doesn't implement method toString(), but it should, in order to allow other decorators to re-use it and print project name correctly.</body>
    <file>src/main/java/com/zerocracy/farm/S3Project.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2017-01-24T16:37:36Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/44" closed="2017-10-25T15:32:53+00:00">44</issue>
    <ticket>43</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>43-30d30d87</id>
    <lines>30-33</lines>
    <body>At the moment this pool of items will never be cleaned. They will get into the pool but will never be removed. There has to be some mechanism to implement that cache cleaning. Otherwise, we'll hit out-of-memory, sooner or later.</body>
    <file>src/main/java/com/zerocracy/farm/sync/SyncProject.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2017-03-27T16:49:00Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/48" closed="2017-10-25T15:32:54+00:00">48</issue>
    <ticket>47</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>47-634f267d</id>
    <lines>82-86</lines>
    <body>We have to predict that exceptions, in order to optimize performance. No need to try to process each and every stakeholder for every claim. We must learn which of them throw on which types of claims and avoid sending them more of the same type.</body>
    <file>src/main/java/com/zerocracy/farm/reactive/Brigade.java</file>
    <author>yegor256</author>
    <email>yegor256@gmail.com</email>
    <time>2017-05-02T17:42:05Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/53" closed="2017-10-25T15:32:55+00:00">53</issue>
    <ticket>43</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>43-8cbb05fb</id>
    <lines>31-34</lines>
    <body>At the moment this pool of items will never be cleaned. They will asValue into the pool but will never be removed. There has to be some mechanism to implement that cache cleaning. Otherwise, we'll hit out-of-memory, sooner or later.</body>
    <file>src/main/java/com/zerocracy/farm/sync/SyncProject.java</file>
    <author>yegor256</author>
    <email>yegor256@gmail.com</email>
    <time>2017-06-15T20:32:40Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/89" closed="2018-06-11T00:15:48+00:00">89</issue>
    <ticket>62</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>62-6eaaf140</id>
    <lines>30-35</lines>
    <body>We have to implement simple slack session object to use inside 'notify_in_slack' stakeholder-script and fake object for tests. This session object may wrap `SlackSession` from `com.ullink.slack.simpleslackapi`. After that we should get rid of `Mockito` in this test.</body>
    <file>src/test/resources/com/zerocracy/bundles/notify_in_slack_without_user/_before.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-07-18T21:22:37Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1139" closed="2018-08-03T16:24:39+00:00">1139</issue>
        <ticket>89</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>89-f08c5086</id>
        <lines>31-33</lines>
        <body>Add a new class FkSkSession that implements interface SkSession, and then use this new class in tests instead of using Mockito. This task can be implemented only when SkSession replaces SlackSession.</body>
        <file>src/test/resources/com/zerocracy/bundles/notify_in_slack_without_user/_before.groovy</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-06-11T00:02:22Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1544" closed="2020-05-25T15:14:21+00:00">1544</issue>
            <ticket>1139</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1139-7ab7e83e</id>
            <lines>31-33</lines>
            <body>Finish implementation of FkSkSession, FkTeam and FkPersona, fake classes implementing SkSession, SlackTeam and SlackPersona. Then use these classes to replace Mockito in tests</body>
            <file>src/test/resources/com/zerocracy/bundles/notify_in_slack_without_user/_before.groovy</file>
            <author>Paulo Lobo</author>
            <email>pauloeduardolobo@gmail.com</email>
            <time>2018-08-01T04:42:01Z</time>
            <children>
              <puzzle alive="true">
                <issue href="https://github.com/zerocracy/farm/issues/2282">2282</issue>
                <ticket>1544</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>1544-03b86ed3</id>
                <lines>31-36</lines>
                <body>Finish implementation of FkSkSession, FkTeam and FkPersona, fake classes implementing SkSession, SlackTeam and SlackPersona. Then use these classes to replace Mockito in tests. In particular, try to remove from SkSession any reference to the underlying com.ullink.slack library in the same way SkUser and SkChannel abstracts over SlackUser and SlackChannel.</body>
                <file>src/main/java/com/zerocracy/radars/slack/FkSkSession.java</file>
                <author>Victor No&#xEB;l</author>
                <email>victor.noel@crazydwarves.org</email>
                <time>2020-04-25T14:04:01Z</time>
                <children/>
              </puzzle>
              <puzzle alive="true">
                <issue href="https://github.com/zerocracy/farm/issues/2283">2283</issue>
                <ticket>1544</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>1544-efc40b22</id>
                <lines>37-41</lines>
                <body>Remove the need for the ConfusingTernary suppress warning caused by the if/else in channel and user. A good solution would be not to return null and handle non-existence of a channel or a user in a different more OO way. This would also impact RealSkSession and its users.</body>
                <file>src/main/java/com/zerocracy/radars/slack/FkSkSession.java</file>
                <author>Victor No&#xEB;l</author>
                <email>victor.noel@crazydwarves.org</email>
                <time>2020-04-25T14:04:01Z</time>
                <children/>
              </puzzle>
              <puzzle alive="true">
                <issue href="https://github.com/zerocracy/farm/issues/2284">2284</issue>
                <ticket>1544</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>1544-05cf05b1</id>
                <lines>23-27</lines>
                <body>Change this bundle to test notify_in_slack but with an existing user. FkSkSession should store the messages sent to users and in this implementation of _after, we should verify the message is present. When it is done, don't forget to change the name of the bundle too.</body>
                <file>src/test/resources/com/zerocracy/bundles/upBkMF_notify_in_slack_without_user/_after.groovy</file>
                <author>Victor No&#xEB;l</author>
                <email>victor.noel@crazydwarves.org</email>
                <time>2020-04-25T14:04:01Z</time>
                <children/>
              </puzzle>
            </children>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1140" closed="2018-07-27T10:22:58+00:00">1140</issue>
        <ticket>89</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>89-93f0abbe</id>
        <lines>29-31</lines>
        <body>Use this interface and its implementation RealSkSession everywhere instead of SlackSession that is used currently. When it's done some tests can be refactored to get rid of Mockito library.</body>
        <file>src/main/java/com/zerocracy/radars/slack/SkSession.java</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-06-11T00:02:22Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/93" closed="2017-10-25T15:32:55+00:00">93</issue>
    <ticket>83</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>83-dbce8209</id>
    <lines>23-27</lines>
    <body>We should add new "bans" to this XML document every time we add a new job to the WBS. Lets create a new stakeholder pm.staff.bans.ban_github_reporter. It has to catch "Job was added to WBS" type, check whether the job starts with gh: and then take the author of the ticket from GitHub.</body>
    <file>src/test/resources/com/zerocracy/bundles/not_assign_task_to_reporter/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-07-21T06:36:58Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/181" closed="2018-01-11T18:21:23+00:00">181</issue>
        <ticket>93</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>93-9038cbbe</id>
        <lines>23-27</lines>
        <body>Task reporter is already added to bans.xml. However, this test still fails for some reason. It could be because the election mechanism is broken (https://github.com/zerocracy/farm/issues/150), or that the test setup or data is not complete. Let's find out what's wrong and revise the test appropriately, perhaps even rewriting it.</body>
        <file>src/test/resources/com/zerocracy/bundles/not_assign_task_to_reporter/_after.groovy</file>
        <author>Carlos Miranda</author>
        <email>carlosmiranda@users.noreply.github.com</email>
        <time>2017-08-07T04:11:58Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/122" closed="2017-10-25T15:32:56+00:00">122</issue>
    <ticket>75</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>75-f02bb746</id>
    <lines>34-37</lines>
    <body>Need to parse telegram message and post as claim to a project. It should be similar to Slack implementations. Bot must understand only profile commands, q-profile.xml from slack can be copied.</body>
    <file>src/main/java/com/zerocracy/radars/telegram/TelegramRadar.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-07-26T07:04:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/123" closed="2017-10-25T15:32:57+00:00">123</issue>
    <ticket>75</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>75-ba330a25</id>
    <lines>38-41</lines>
    <body>Add notify_in_telegram stakeholder script. This script should take Telegram session from binding properties and send a message to sessions's chat. It may be direct chat or Telegram channel.</body>
    <file>src/main/java/com/zerocracy/radars/telegram/TelegramRadar.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-07-26T07:04:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/124" closed="2017-10-25T15:32:58+00:00">124</issue>
    <ticket>63</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>63-beda870f</id>
    <lines>26-31</lines>
    <body>We should multiply the payment with the given boost factor if a boost factor has been set for the task. The boost factor is defined in an XML document and the schema is in `pm/cost/boosts.xsd`. Default job size is 15 minutes. In case boost is not specified, the default factor should be 2, which means default payment is 30. Let's also use the same boost factor in awarding points in add_award_points.groovy.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/cost/make_payment.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-07-28T02:38:00Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/131" closed="2017-10-25T15:32:59+00:00">131</issue>
    <ticket>96</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>96-82b5d3bf</id>
    <lines>66-73</lines>
    <body>This test as well as TkAgendaTest.redirectsWhenAccessingNonexistentUsersAgenda should return a redirect status code. RqSecureLogin actually throws RsFailure, which is a HTTPException subtype that embeds 301 status. However, invoking the scenario through an actual request in TkApp causes it to be embedded in UncheckedIOException, causing the Takes framework to return HTTP 500 error status instead. Let's find out what's going on and fix it. After fix is applied we should re-enable these tests.</body>
    <file>src/test/java/com/zerocracy/tk/profile/TkAgendaTest.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-07-30T08:01:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/138" closed="2017-10-25T15:33:00+00:00">138</issue>
    <ticket>110</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>110-87d46df2</id>
    <lines>29-32</lines>
    <body>Add a stakeholder to change person's vacation status and two commands in `q-profile`: "vacation on" and "vacation off". Stakeholder should change `vacation` flag in people.xml.</body>
    <file>src/main/java/com/zerocracy/pm/staff/voters/Vacation.java</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-08-01T07:50:56Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/151" closed="2017-10-25T15:33:01+00:00">151</issue>
    <ticket>69</ticket>
    <estimate>15</estimate>
    <role>IMP</role>
    <id>69-d2b8b32f</id>
    <lines>24-28</lines>
    <body>This assertion is disabled because the mock Github pull request created in _before.groovy is not recognized as a valid pull request. See https://github.com/jcabi/jcabi-github/issues/1323. When the issue is fixed, jcabi-github version should be updated and the assertion should be enabled.</body>
    <file>src/test/resources/com/zerocracy/bundles/adds_new_pull_request_to_wbs/_after.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-08-02T09:12:17Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/152" closed="2017-10-25T15:33:02+00:00">152</issue>
    <ticket>69</ticket>
    <estimate>15</estimate>
    <role>IMP</role>
    <id>69-df6def77</id>
    <lines>51-54</lines>
    <body>We're now using this class here and adds_new_pull_request_to_wbs/_before.groovy. In the future we might have even more uses after we've expanded the bundles tests. Probably better to factor this out into its own class file in src/test/java.</body>
    <file>src/test/resources/com/zerocracy/bundles/adds_new_pull_request_to_wbs/_before.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-08-02T09:12:17Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/164" closed="2017-10-25T15:33:03+00:00">164</issue>
    <ticket>72</ticket>
    <estimate>15</estimate>
    <role>IMP</role>
    <id>72-38387e3c</id>
    <lines>24-29</lines>
    <body>The assertion at the end is disabled because the mock Github pull request created in _before.groovy is not recognized as a valid pull request. So it is not recognized as a PR and the test fails. See https://github.com/jcabi/jcabi-github/issues/1323. When the issue is fixed, jcabi-github version should be updated and the assertion should be enabled.</body>
    <file>src/test/resources/com/zerocracy/bundles/awards_points_to_arc_for_pull_request/_after.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-08-03T06:24:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/173" closed="2017-10-25T15:33:03+00:00">173</issue>
    <ticket>145</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>145-58d6666a</id>
    <lines>26-29</lines>
    <body>Needs project cross-item synchronization. Now WBS can be changed during elections cleanup that resulting in keeping unused elections until next WBS update. To avoid this behavior we need some kind of transactional items change.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/scope/wbs/cleanup_elections.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2017-08-05T15:14:59Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/179" closed="2017-10-26T18:36:18+00:00">179</issue>
    <ticket>165</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>165-d25ac016</id>
    <lines>23-29</lines>
    <body>Implement archive mechanism. There is empty stakeholder `archive_job` that handles 'Job removed from WBS' claims. It should get some job info (such as created time, performer, boost, close reason) * and submit it into `archive.xml`. Also it's needed to complete this bundle-test with some archive assertions.</body>
    <file>src/test/resources/com/zerocracy/bundles/archive_job/_after.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2017-08-06T19:21:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/185" closed="2018-06-13T08:51:04+00:00">185</issue>
    <ticket>166</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>166-540fefdb</id>
    <lines>28-30</lines>
    <body>let's implement this stakeholder. It will update precedences.xml. The update should occur whenever a GitHub ticket gets assigned to a milestone.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/staff/milestones/update_precedences.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-08-08T08:49:03Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1143" closed="2019-04-23T19:36:48+00:00">1143</issue>
        <ticket>185</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>185-4c683176</id>
        <lines>27-30</lines>
        <body>let's implement this stakeholder. It will update precedences.xml. It should use the Precedences class, similar to how the Milestones class is used in update_milestones.groovy. The update should occur whenever a GitHub ticket gets assigned to a milestone.</body>
        <file>src/main/groovy/com/zerocracy/stk/pm/staff/milestones/update_precedences.groovy</file>
        <author>amihaiemil</author>
        <email>amihaiemil@gmail.com</email>
        <time>2018-06-07T14:16:09Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/186" closed="2018-02-20T15:13:12+00:00">186</issue>
    <ticket>166</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>166-073320e4</id>
    <lines>28-31</lines>
    <body>let's implement this stakeholder. It will update milestones.xml, taking information from GitHub milestones. It has to be triggered by GitHub webhook: when milestones are updated. For each milestone, it has to add gh: prefix to the name found on GitHub.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/staff/milestones/update_milestones.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-08-08T08:49:03Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/609" closed="2018-03-13T15:02:05+00:00">609</issue>
        <ticket>186</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>186-75ab7a62</id>
        <lines>30-33</lines>
        <body>Let's implement this `Rebound`. It should post a claim with type 'Add milestone' and params 'milestone' and 'date' on github web-hook with new milestone. Milestone param is a label of milestone, date is a milestone date.</body>
        <file>src/main/java/com/zerocracy/radars/github/RbMilestone.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-01-23T12:32:43Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/187" closed="2017-10-25T15:33:04+00:00">187</issue>
    <ticket>166</ticket>
    <estimate>15</estimate>
    <role>IMP</role>
    <id>166-fa2613a2</id>
    <lines>19-21</lines>
    <body>The latest Github milestones information is contained in milestones.xml document. We should display those updated milestones right here in project.xsl.</body>
    <file>src/main/xsl/project.xsl</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-08-08T08:49:03Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/212" closed="2018-01-09T21:11:32+00:00">212</issue>
    <ticket>156</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>156-a417a2c5</id>
    <lines>36-39</lines>
    <body>We need to check issue closer's role. If his role is 'PO' or 'ARC' we should skip warning message about bad practice and just say that issue has been closed by ARC (or PO).</body>
    <file>src/main/java/com/zerocracy/radars/github/RbVerifyCloser.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2017-08-14T21:01:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/223" closed="2017-10-25T15:33:05+00:00">223</issue>
    <ticket>172</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>172-5f493d13</id>
    <lines>29-32</lines>
    <body>This class has been migrated to the zerocracy/jstk project. It is now in com.zerocracy.jstk.fake.FkProjectFarm. When the change has been released let's update the jstk library, remove ProjectFarm class, and substitute FkProjectFarm in its place wherever we are using it.</body>
    <file>src/test/java/com/zerocracy/farm/ProjectFarm.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2017-08-16T01:07:36Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/245" closed="2018-01-05T06:54:51+00:00">245</issue>
    <ticket>148</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>148-ab92e4ca</id>
    <lines>63-66</lines>
    <body>Let's make it possible for a user to say `@0crat waiting`. When this is done we should register an impediment for the job of type "unknown" in impediments.xml. See http://datum.zerocracy.com/pages/policy.html#7.</body>
    <file>src/main/resources/com/zerocracy/radars/q-tracker.xml</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2017-08-23T07:27:24Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/250" closed="2017-10-25T15:33:06+00:00">250</issue>
    <ticket>158</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>158-f2c9ed8b</id>
    <lines>30-32</lines>
    <body>Add new stakeholder that should add a record to speed.xml on each 'Order was finished' claim. Also we need a voter which will pay attention to that numbers and vote for that person who is the fastest.</body>
    <file>src/main/java/com/zerocracy/pmo/Speed.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-08-29T07:44:18Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/347" closed="2017-12-25T14:39:48+00:00">347</issue>
        <ticket>250</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>250-6fc9b9f3</id>
        <lines>30-32</lines>
        <body>Add new voter for `speed.xml` This voter should pay attention to user's speed from `speed.xml` and vote for that person who is the fastest.</body>
        <file>src/main/java/com/zerocracy/pmo/Speed.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2017-10-09T17:43:20Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/264" closed="2018-01-11T18:21:25+00:00">264</issue>
    <ticket>258</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>258-3baf5506</id>
    <lines>32-34</lines>
    <body>This assertion `elections.elected(job)` always failing on Rultor but passing locally and on Shippable. It related to #258 bug. This `assert` should be uncommented after #258 fix.</body>
    <file>src/test/resources/com/zerocracy/bundles/not_assign_task_to_reporter/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-09-22T18:50:34Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/265" closed="2018-01-11T18:38:24+00:00">265</issue>
    <ticket>228</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>228-a2ff440f</id>
    <lines>23-25</lines>
    <body>We should be able to test PMO items, e.g. 'agenda/&lt;login&gt;.xml'. Now it's impossible because `BundlesTest` uses FkProject for all resources. Also 'farm' can't be accessed via `binding.variables` in test groovy script.</body>
    <file>src/test/resources/com/zerocracy/bundles/workload/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-09-19T17:47:21Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/266" closed="2017-10-25T15:33:06+00:00">266</issue>
    <ticket>137</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>137-34509103</id>
    <lines>28-32</lines>
    <body>Add new stakeholder, which will go through all orders and check their age. If they are old enough to create a new reminder (5 days, 8 days) - we should create it and send a notification to the user that the task will be taken away from him in 10 days (this is our policy).</body>
    <file>src/test/java/com/zerocracy/pm/time/RemindersTest.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-09-18T19:11:07Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/333" closed="2017-11-01T07:59:15+00:00">333</issue>
        <ticket>266</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>266-c54a4e62</id>
        <lines>32-34</lines>
        <body>Notify users about job in github with reminder's label. It can be new stakeholder which will react to 'Ping' claim.</body>
        <file>src/main/resources/com/zerocracy/stk/pm/time/reminders/remind.groovy</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2017-10-23T19:36:23Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/267" closed="2017-10-25T15:33:07+00:00">267</issue>
    <ticket>209</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>209-04646802</id>
    <lines>131-133</lines>
    <body>Add set title command here (q-profile.xml) which should be handled by new `set_title` stakeholder. This stakeholder should change project title in `catalog.xml` /catalog/project/title.</body>
    <file>src/main/resources/com/zerocracy/radars/q-profile.xml</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-08-30T11:21:26Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/273" closed="2018-02-09T15:01:37+00:00">273</issue>
    <ticket>272</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>272-5f75250e</id>
    <lines>40-42</lines>
    <body>Error handling in `StkSafe::process` method is similar to `ReSafe` in telegram, slack and github error handling. We need to refactor it. Let's use one class for it, now it's placed in `TxtUnrecoverableError`.</body>
    <file>src/main/java/com/zerocracy/farm/StkSafe.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-10-02T16:53:27Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/281" closed="2018-02-21T13:21:25+00:00">281</issue>
    <ticket>235</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>235-ca1d9c8f</id>
    <lines>23-26</lines>
    <body>This test started to fail after `remove_assignee` script fix. In this test stakeholder can't find assignee in MkIssue which throws an exception: XPath '/github/repos/repo[@coords='test/test']/issues/issue[number='2']' not found</body>
    <file>src/test/resources/com/zerocracy/bundles/resigns_tasks_upon_quit/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-10-04T19:30:44Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/284" closed="2018-03-02T15:10:24+00:00">284</issue>
    <ticket>155</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>155-f2c0cacb</id>
    <lines>41-45</lines>
    <body>This test and `FtParamTest` fail because they require proper 'mongod' installation. Locally test fails with error: "Cannot run program "mongod": error=2, No such file or directory", on Shippable it's 'MongoTimeoutException'.</body>
    <file>src/test/java/com/zerocracy/tk/project/TkFootprintTest.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-10-08T12:17:11Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/302" closed="2017-10-25T15:33:08+00:00">302</issue>
    <ticket>117</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>117-a7f94555</id>
    <lines>52-54</lines>
    <body>Remove this debug message when slack messages duplicates will be solved now this string needs to clarify Slack stakeholder work</body>
    <file>src/main/resources/com/zerocracy/stk/pm/comm/notify_in_slack.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2017-10-12T18:54:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/368" closed="2018-03-05T14:44:58+00:00">368</issue>
    <ticket>362</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>362-23595687</id>
    <lines>52-55</lines>
    <body>This verification is disabled because GitHub goes over quota very soon, since some issues have too many events. Let's find a way to make less requests to GitHub. The same problem exists in finish_stale_github_order.groovy</body>
    <file>src/main/resources/com/zerocracy/stk/pm/scope/wbs/remove_stale_github_ticket_from_wbs.groovy</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2017-12-25T16:00:36Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/371" closed="2018-01-18T14:10:44+00:00">371</issue>
    <ticket>360</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>360-726376b1</id>
    <lines>39-42</lines>
    <body>Download and analyze heap dump from http://www.0crat.com/heapdump after next out of memory error, then fix memory leaks and remove this debug class.</body>
    <file>src/main/java/com/zerocracy/tk/TkDump.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-01-03T08:12:52Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/408" closed="2018-02-15T18:07:31+00:00">408</issue>
    <ticket>73</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>73-6d39317c</id>
    <lines>83-86</lines>
    <body>Add command to rate the quality, the format is 'quality is good|bad|acceptable', this command should trigger 'Finish order' with 'quality' param (see #73 comments for details) and pay 15 min to QA user.</body>
    <file>src/main/resources/com/zerocracy/radars/q-tracker.xml</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-01-10T12:47:23Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/424" closed="2018-01-23T03:43:32+00:00">424</issue>
    <ticket>409</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>409-3fa451d0</id>
    <lines>105-108</lines>
    <body>Txn.Item is not implemented. This class should keep local changes for single item and push them to origin item on commit. Also it should revert all local changes when transaction closed without commit() call.</body>
    <file>src/main/java/com/zerocracy/Txn.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-01-17T20:31:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/425" closed="2018-03-05T11:39:50+00:00">425</issue>
    <ticket>360</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>360-7aef014d</id>
    <lines>39-42</lines>
    <body>Download and analyze heap dump from https://www.0crat.com/heapdump after next out of memory error, then fix memory leaks and remove this debug class.</body>
    <file>src/main/java/com/zerocracy/tk/TkDump.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2018-01-18T14:10:33Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/725" closed="2018-06-21T12:29:29+00:00">725</issue>
        <ticket>425</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>425-40a20d3d</id>
        <lines>38-40</lines>
        <body>Download and analyze heap dump from https://www.0crat.com/heapdump after next out of memory error, then fix detected memory leaks. Also waiting for #400 to be solved.</body>
        <file>src/main/java/com/zerocracy/tk/TkDump.java</file>
        <author>amihaiemil</author>
        <email>amihaiemil@gmail.com</email>
        <time>2018-03-03T16:29:23Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1202" closed="2018-06-21T13:28:45+00:00">1202</issue>
            <ticket>725</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>725-3ad115cb</id>
            <lines>43-46</lines>
            <body>Fix memory leak in async-flush. AsyncFlush consumes about half of application memory (before OutOfMemoryError). It may keep references to threads via SmartLock references in `locks` field.</body>
            <file>src/main/java/com/zerocracy/farm/reactive/AsyncFlush.java</file>
            <author>g4s8</author>
            <email>g4s8.public@gmail.com</email>
            <time>2018-06-21T12:25:11Z</time>
            <children/>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1203" closed="2018-06-21T12:59:04+00:00">1203</issue>
            <ticket>725</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>725-e530d946</id>
            <lines>46-48</lines>
            <body>Fix memory leak in Terminator. It may keep references to threads via thread local variable in `killer` method. I think it can be replaced with WeakReference to thread.</body>
            <file>src/main/java/com/zerocracy/farm/sync/Terminator.java</file>
            <author>g4s8</author>
            <email>g4s8.public@gmail.com</email>
            <time>2018-06-21T12:25:11Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/476" closed="2018-04-23T09:34:30+00:00">476</issue>
    <ticket>297</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>297-8a8d277c</id>
    <lines>30-33</lines>
    <body>App shutdown is not implemented. This take will be called by Rultor during deploy. We should stop all background threads, services, wait until they stopped and return 200-OK status to Rultor.</body>
    <file>src/main/java/com/zerocracy/tk/TkShutdown.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-01-21T09:40:43Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/963" closed="2018-08-08T09:37:17+00:00">963</issue>
        <ticket>476</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>476-cbedeee7</id>
        <lines>124-127</lines>
        <body>Method freeze should wait for all processed claims, and stop giving new claims with IOException, it should block all SyncProjects so they stops to return SyncItems and wait for all current opened SyncItems to close.</body>
        <file>src/test/java/com/zerocracy/farm/sync/SyncFarmTest.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-04-23T07:35:02Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/477" closed="2018-02-20T15:49:29+00:00">477</issue>
    <ticket>297</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>297-c88f3107</id>
    <lines>34-36</lines>
    <body>Shutdown endpoint can be accessed without authentication. We should verify that /shutdown request was sent by Rultor during deploy. It can be implemented with auth header.</body>
    <file>src/main/java/com/zerocracy/tk/TkShutdown.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-01-23T10:00:01Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/478" closed="2018-02-26T11:20:46+00:00">478</issue>
    <ticket>403</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>403-fdebb43c</id>
    <lines>42-44</lines>
    <body>Right now we are adding the label 'in' to the issue to a Github job that is in WBS. We should also remove it when the issue is removed from WBS (out of scope).</body>
    <file>src/main/resources/com/zerocracy/stk/pm/scope/wbs/add_label_to_github_ticket.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlos.m.a.miranda@accenture.com</email>
    <time>2018-01-23T08:47:27Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/480" closed="2018-01-26T14:30:23+00:00">480</issue>
    <ticket>380</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>380-d5fa189f</id>
    <lines>42-44</lines>
    <body>Single claim xsl is missing. We need to display one claim xml as a single page to show it in election link.</body>
    <file>src/main/java/com/zerocracy/tk/project/TkClaim.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-01-21T14:06:26Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/481" closed="2018-01-26T15:38:01+00:00">481</issue>
    <ticket>380</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>380-7a7b9529</id>
    <lines>45-48</lines>
    <body>Add link to election claim instead of election full election text in chats. See https://github.com/zerocracy/farm/issues/380#issue-287764148 for details. It should be in format /footprint/(project)/(claim-id)</body>
    <file>src/main/java/com/zerocracy/tk/project/TkClaim.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-01-21T14:06:26Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/494" closed="2018-03-03T05:57:44+00:00">494</issue>
    <ticket>390</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>390-ecc63501</id>
    <lines>35-37</lines>
    <body>We should remove people from people.xml when their score goes below 200. Let's implement that. We should also notify the person in case that happens.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/staff/awards/reject_people_below_score.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlos.m.a.miranda@accenture.com</email>
    <time>2018-01-30T03:14:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/495" closed="2018-03-01T11:47:22+00:00">495</issue>
    <ticket>404</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>404-c83766b8</id>
    <lines>64-68</lines>
    <body>Use of the Twitter API in this project is neither reusable nor testable. Let's introduce an interface that will serve as our frontend for the Twitter API. We should have a real implementation and also a fake one for testing. This interface should be used where the twitter API is currently used, and we should add tests for the usage of Twitter.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/publish_project.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlos.m.a.miranda@accenture.com</email>
    <time>2018-01-24T03:52:47Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/545" closed="2018-02-14T13:07:59+00:00">545</issue>
    <ticket>384</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>384-734984f7</id>
    <lines>25-32</lines>
    <body>Let's implement this stakeholder. This script should send a notification to all users, who is not on vacation. Let's mention in the notification, that if they don't want to receive them anymore, they just have to turn the vacation mode ON. Also 'publish_project' bundle test should be fixed. And 'Notify test' claim in this script should be replaced with actual implementation.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/comm/notify_all.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-11T11:53:54Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/552" closed="2018-03-19T17:18:19+00:00">552</issue>
    <ticket>366</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>366-6dccce28</id>
    <lines>43-47</lines>
    <body>Let's keep person reputation, agenda and project count inside `people.xml` and update them when reputation, agenda or projects changed as described in https://github.com/zerocracy/farm/issues/366#issuecomment-359568311 It should be done after #386 bug to avoid conflicts.</body>
    <file>src/main/java/com/zerocracy/pmo/People.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-02-13T10:07:15Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/840" closed="2018-05-30T13:23:59+00:00">840</issue>
        <ticket>552</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>552-b158b0f7</id>
        <lines>39-41</lines>
        <body>Add tests for details(), links(), wallet() and rate() in People.java because these methods are not fully covered. Then remove People.java from jacoco excludes in pom.xml</body>
        <file>src/test/java/com/zerocracy/pmo/PeopleTest.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-03-12T10:22:09Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1059" closed="2018-06-24T10:56:17+00:00">1059</issue>
            <ticket>840</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>840-1e70f3dd</id>
            <lines>44-46</lines>
            <body>Add tests for links(), wallet() and rate() in People.java because these methods are not fully covered. Then remove People.java from jacoco excludes in pom.xml</body>
            <file>src/test/java/com/zerocracy/pmo/PeopleTest.java</file>
            <author>rultor</author>
            <email>me@rultor.com</email>
            <time>2018-05-30T13:09:09Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/841" closed="2018-07-02T09:34:26+00:00">841</issue>
        <ticket>552</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>552-9d3ef349</id>
        <lines>44-47</lines>
        <body>Let's keep agenda inside `people.xml` and update it when agenda changed as described in https://github.com/zerocracy/farm/issues/366#issuecomment-359568311 Also put it as 'agenda' element in TkGang xml.</body>
        <file>src/main/java/com/zerocracy/pmo/People.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-03-10T18:17:34Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/556" closed="2018-06-24T11:42:47+00:00">556</issue>
    <ticket>511</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>511-1a49e160</id>
    <lines>129-132</lines>
    <body>S3Item does not handle InterruptedException properly. It should not allow reading from io.channel stream if thread was interrupted because it automatically check thread status before reading and can throw `ClosedChannelException`.</body>
    <file>src/test/java/com/zerocracy/farm/S3ItemTest.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-02T19:41:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/559" closed="2018-07-11T17:39:39+00:00">559</issue>
    <ticket>492</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>492-2cc36189</id>
    <lines>26-30</lines>
    <body>Let's implement this stakeholder. It will take a random user from the list, which has the oldest updated attribute, go to its GitHub account, fetch all repositories he owns and contributes to and fetch the most popular languages from them. GitHub provides that information.</body>
    <file>src/main/resources/com/zerocracy/stk/pmo/people/update_skills.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-02T16:15:10Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1411">1411</issue>
        <ticket>559</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>559-80a85ff3</id>
        <lines>27-30</lines>
        <body>Create a method People.oldestSkillsUpdate to retrieve the login of the user that needs theirs skills updated and fetch all repositories he owns and contributes to and fetch the most popular languages from them. GitHub provides that information.</body>
        <file>src/main/groovy/com/zerocracy/stk/pmo/people/update_skills.groovy</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-07-10T21:07:26Z</time>
        <children/>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1412">1412</issue>
        <ticket>559</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>559-34ba884a</id>
        <lines>45-46</lines>
        <body>Let's display the data from people/skills on the profile page of a given user as well as on the team page.</body>
        <file>src/main/java/com/zerocracy/tk/TkTeam.java</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-07-10T21:07:26Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/599" closed="2018-03-03T06:09:34+00:00">599</issue>
    <ticket>539</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>539-4e7a4000</id>
    <lines>28-33</lines>
    <body>The ticket should be removed from WBS and performer should receive payment and awards only if ticket was closed by the reporter, ARC or PO. In other cases we should say "sorry, we won't pay". So let's provide who close an issue in claim params in `RbOnClose` and check it in 'Close job' and 'Remove job from WBS' scripts, then commented tests will be worked. Also policy have to be updated.</body>
    <file>src/test/resources/com/zerocracy/bundles/close_the_job/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-15T13:54:18Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/602" closed="2018-02-20T17:28:09+00:00">602</issue>
    <ticket>520</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>520-a0cac38b</id>
    <lines>38-40</lines>
    <body>TkJoin does not handle POST requests. It can be sent from join page on submit. Let's process this request and send gathered information to all users with reputation 1024+</body>
    <file>src/test/java/com/zerocracy/tk/TkJoinTest.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-12T20:13:18Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/613" closed="2018-06-04T06:14:14+00:00">613</issue>
    <ticket>474</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>474-ba887765</id>
    <lines>609-611</lines>
    <body>branch coverage, complexity coverage and class coverage limits are disabled, because current coverage is too low. Let's add tests and increase class and branch coverage.</body>
    <file>pom.xml</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-20T16:56:22Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1083" closed="2018-07-06T07:53:24+00:00">1083</issue>
        <ticket>613</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>613-9bd5aca0</id>
        <lines>621-623</lines>
        <body>Continue increasing coverages to reach branch coverage of 65% and class missed count of max 15. Remember to increase those coverages below in jacoco configuration.</body>
        <file>pom.xml</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-05-18T19:07:33Z</time>
        <children>
          <puzzle alive="true">
            <issue href="https://github.com/zerocracy/farm/issues/1351">1351</issue>
            <ticket>1083</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1083-da87ec45</id>
            <lines>487-489</lines>
            <body>Continue to increase the coverages to reach branch coverage of 65% and class missed count of max 15. Remember to increase those coverages below in jacoco configuration.</body>
            <file>pom.xml</file>
            <author>rultor</author>
            <email>me@rultor.com</email>
            <time>2018-07-06T07:37:01Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/652" closed="2018-03-03T06:09:35+00:00">652</issue>
    <ticket>447</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>447-38b7b52b</id>
    <lines>27-29</lines>
    <body>register_impediment stakeholder should pay attention to impediment count requested by user and not allow to register new impediments if threshold has been reached. See #447 comments for details.</body>
    <file>src/test/resources/com/zerocracy/bundles/impediments/_after.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-26T06:13:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/656" closed="2018-03-06T18:01:52+00:00">656</issue>
    <ticket>646</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>646-eda38fad</id>
    <lines>29-32</lines>
    <body>We should place the demand for review into the XML document 'pm/qa/reviews.xml' and then place the mark there, when the review is completed. When the order gets removed from orders.xml we automatically destroy the review (should happen in Datum by auto update).</body>
    <file>src/main/resources/com/zerocracy/stk/pm/qa/complete_qa_review.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-02-26T06:58:25Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/668" closed="2018-04-05T10:56:46+00:00">668</issue>
    <ticket>450</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>450-6f8e6904</id>
    <lines>24-28</lines>
    <body>Let's implement this stakeholder: it should deduct 256 points from claim author for breakup. At moment it's not possible because 'Make payment' script and Awards requires job parameter, but in 'breakup' there is no any job. Also test in 'invite_a_friend/_after.groovy' should be uncommented.</body>
    <file>src/main/resources/com/zerocracy/stk/pmo/profile/penalize_for_breakup.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-02-28T11:17:25Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/703" closed="2018-05-21T12:47:12+00:00">703</issue>
    <ticket>258</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>258-bca58f1a</id>
    <lines>24-28</lines>
    <body>Options are not implemented. We should be able to access `options/{username}.xml` file (where {username} is a person name from `people.xml`) to read and modify user options. Also some mechanism should be invented to allow user to change this options.</body>
    <file>src/test/java/com/zerocracy/pmo/OptionsTest.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-03-02T08:41:53Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1035" closed="2018-06-19T13:57:52+00:00">1035</issue>
        <ticket>703</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>703-5f3e27dc</id>
        <lines>33-36</lines>
        <body>Options are not used. Election should check maxJobsInAgenda option, notify stakeholders should check notify options: notifyPublish, notifyRfps, notifyStudents. Also user should be able to download, edit and upload options.xml file on profile page.</body>
        <file>src/main/java/com/zerocracy/pmo/Options.java</file>
        <author>Yegor Bugayenko</author>
        <email>yegor256@gmail.com</email>
        <time>2018-05-21T12:46:41Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1185" closed="2018-08-13T10:02:27+00:00">1185</issue>
            <ticket>1035</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1035-248d802b</id>
            <lines>33-36</lines>
            <body>Notify stakeholders should check notify options from the Options object specific to given user whether to notify him about certain events. Options that should be used: notifyPublish, notifyRfps, notifyStudents.</body>
            <file>src/main/java/com/zerocracy/pmo/Options.java</file>
            <author>Krzysztof Krason</author>
            <email>Krzysztof.Krason@gmail.com</email>
            <time>2018-06-15T21:19:40Z</time>
            <children/>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1186" closed="2018-07-24T13:08:36+00:00">1186</issue>
            <ticket>1035</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1035-a9c9989f</id>
            <lines>37-39</lines>
            <body>Options should be changeable by the user from their profile page. Allow users to download, edit and upload options.xml file on profile page.</body>
            <file>src/main/java/com/zerocracy/pmo/Options.java</file>
            <author>Krzysztof Krason</author>
            <email>Krzysztof.Krason@gmail.com</email>
            <time>2018-06-15T21:19:40Z</time>
            <children>
              <puzzle alive="true">
                <issue href="https://github.com/zerocracy/farm/issues/1472">1472</issue>
                <ticket>1186</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>1186-c29461b2</id>
                <lines>29-34</lines>
                <body>Add ability to change options notifyStudents, notifyRfps and notifyPublish. This stakeholder (and maybe Options class itself) most probably will need to be refactored to allow easier addition of any future options. Introduce also handling of `/option` - should display all available options with their current values, and `/option name` - should display current value of a given option.</body>
                <file>src/main/groovy/com/zerocracy/stk/pmo/profile/change_option.groovy</file>
                <author>Krzysztof Krason</author>
                <email>Krzysztof.Krason@gmail.com</email>
                <time>2018-07-19T17:53:21Z</time>
                <children/>
              </puzzle>
            </children>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1187" closed="2018-07-21T17:59:13+00:00">1187</issue>
            <ticket>1035</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1035-3b7a2d5a</id>
            <lines>23-25</lines>
            <body>Options are not used. Election should check maxJobsInAgenda option and not elect users that already have already max number of jobs. After this is implemented uncomment this test.</body>
            <file>src/test/resources/com/zerocracy/bundles/elections_dont_exceed_max_jobs_option/_after.groovy</file>
            <author>Krzysztof Krason</author>
            <email>Krzysztof.Krason@gmail.com</email>
            <time>2018-06-15T21:19:40Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/709" closed="2018-03-04T07:45:16+00:00">709</issue>
    <ticket>447</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>447-7f13e82b</id>
    <lines>27-29</lines>
    <body>register_impediment stakeholder should charge attention to impediment count requested by user and not allow to register new impediments if threshold has been reached. See #447 comments for details.</body>
    <file>src/test/resources/com/zerocracy/bundles/impediments/_after.groovy</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2018-03-03T06:09:25Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/710" closed="2018-03-06T20:53:32+00:00">710</issue>
    <ticket>539</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>539-28713f59</id>
    <lines>28-33</lines>
    <body>The ticket should be removed from WBS and performer should receive payment and awards only if ticket was closed by the reporter, ARC or PO. In other cases we should say "sorry, we won't charge". So let's provide who close an issue in claim params in `RbOnClose` and check it in 'Close job' and 'Remove job from WBS' scripts, then commented tests will be worked. Also policy have to be updated.</body>
    <file>src/test/resources/com/zerocracy/bundles/close_the_job/_after.groovy</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2018-03-02T09:35:22Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/728" closed="2018-03-26T12:39:45+00:00">728</issue>
    <ticket>496</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>496-4b81e8fe</id>
    <lines>8-12</lines>
    <body>Let's implement this stakeholder. It has to fetch all users from people.xml, pick random 5, go through their agendas and check that each job they have there really exist in the correspondent projects. If they don't exist, it should remove them from the agenda. Also uncomment 'delete_stale_jobs' test assertion.</body>
    <file>src/main/resources/com/zerocracy/stk/pmo/agenda/delete_stale_jobs.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-03-05T14:08:33Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/760" closed="2018-05-06T04:52:47+00:00">760</issue>
    <ticket>536</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>536-488b0c6c</id>
    <lines>41-43</lines>
    <body>Every time we close a ticket in GitHub, which was not a job, or when we close a pull request, which was not merged, we should add it to blanks.xml</body>
    <file>src/main/resources/com/zerocracy/stk/pm/in/orders/close_job.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-03-07T18:45:34Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/761" closed="2018-05-14T13:20:28+00:00">761</issue>
    <ticket>489</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>489-3f92a3b1</id>
    <lines>39-41</lines>
    <body>Write more test cases for a claim's children. Currently only the no-children case is validated, tests for one and for more children are required.</body>
    <file>src/test/java/com/zerocracy/tk/project/TkClaimTest.java</file>
    <author>amihaiemil</author>
    <email>amihaiemil@gmail.com</email>
    <time>2018-03-07T21:00:05Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/762">762</issue>
    <ticket>489</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>489-f307c752</id>
    <lines>54-57</lines>
    <body>Change claim.xsl in such a way that it displays the children of this claim as well. They are returned in the children element and represent all the claims that have the cause equal to this claim's id.</body>
    <file>src/main/java/com/zerocracy/tk/project/TkClaim.java</file>
    <author>amihaiemil</author>
    <email>amihaiemil@gmail.com</email>
    <time>2018-03-02T17:57:54Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/765" closed="2018-07-06T08:45:55+00:00">765</issue>
    <ticket>400</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>400-9e938816</id>
    <lines>43-45</lines>
    <body>Should use HeapDump to get contents from S3, rather than from the server file, as it might be deleted and won't be available anymore.</body>
    <file>src/main/java/com/zerocracy/tk/TkDump.java</file>
    <author>Izbassar Tolegen</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-03-06T19:17:38Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/766" closed="2018-06-25T02:23:59+00:00">766</issue>
    <ticket>400</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>400-fba0df9b</id>
    <lines>32-35</lines>
    <body>Use this class, to periodically update contents from ./heapdump.hprof file to S3. Should be implemented after #680 would be resolved as part of the routine work, that needs to be done in background.</body>
    <file>src/main/java/com/zerocracy/entry/HeapDump.java</file>
    <author>Izbassar Tolegen</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-03-06T19:17:38Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1232" closed="2018-08-12T13:54:41+00:00">1232</issue>
        <ticket>766</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>766-8d00e56f</id>
        <lines>30-32</lines>
        <body>Add a unit test for this stakeholder using fake S3 storage. Maybe you will need to modify the stakeholder itself so that is allows using fake S3 storage.</body>
        <file>src/main/groovy/com/zerocracy/stk/internal/update_heapdump.groovy</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-06-25T02:08:09Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/767" closed="2018-07-02T10:24:16+00:00">767</issue>
    <ticket>400</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>400-cf11083e</id>
    <lines>80-84</lines>
    <body>Should return the latest version of heap dump, available in S3 or temporary storage (if it is up to date). Cover implementation with unit and integration tests.</body>
    <file>src/main/java/com/zerocracy/entry/HeapDump.java</file>
    <author>Izbassar Tolegen</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-03-06T19:17:38Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/768" closed="2018-06-06T08:08:37+00:00">768</issue>
    <ticket>400</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>400-1ca94fd4</id>
    <lines>94-98</lines>
    <body>Should save heap dump to S3 bucket if file with dump exists, but only do that, if there is new version of file available. Ignore, if we already have latest version in S3. Should be covered with unit and integration tests.</body>
    <file>src/main/java/com/zerocracy/entry/HeapDump.java</file>
    <author>Izbassar Tolegen</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-03-06T19:17:38Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/770" closed="2018-09-12T10:55:08+00:00">770</issue>
    <ticket>510</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>510-7cdf5e0a</id>
    <lines>23-27</lines>
    <body>Let's implement a test for small-size pull requests. At moment it's not possible because it requires to construct specific json for PR with fields 'additions' and 'deletions' via MkStorage. Also `add_new_pull_request_to_wbs` should be fixed. See https://developer.github.com/v3/pulls/#get-a-single-pull-request</body>
    <file>src/test/resources/com/zerocracy/bundles/small_pr_skip_wbs/_before.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-03-06T21:49:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/783" closed="2018-06-05T09:21:05+00:00">783</issue>
    <ticket>535</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>535-b70e915c</id>
    <lines>34-38</lines>
    <body>Every time we close a job completed by a developer, we should count the amount of messages that person posted in the GitHub issue or a pull request. Let's count not only issue messages, but also commit messages. Then, post it to verbosity.xml</body>
    <file>src/main/resources/com/zerocracy/stk/pm/in/orders/close_job.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-03-07T19:08:04Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1096" closed="2018-07-08T17:37:35+00:00">1096</issue>
        <ticket>783</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>783-b88b1a6d</id>
        <lines>35-37</lines>
        <body>Commit messages are not counted. We have to find commits belongs to issue and pushed by task performer and consider it as a verbosity of a user.</body>
        <file>src/main/groovy/com/zerocracy/stk/pm/in/orders/update_verbosity.groovy</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-06-04T16:30:39Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/833" closed="2018-04-05T10:56:48+00:00">833</issue>
    <ticket>546</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>546-c1316cdf</id>
    <lines>66-68</lines>
    <body>Let's add project adviser in bootstrap, it should be passed as a bootstrap command parameter (change in q-project.xml) then bootstrap.groovy script should update catalog.xml with this parameter.</body>
    <file>src/main/resources/com/zerocracy/stk/pm/bootstrap.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-03-19T06:48:19Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/835" closed="2018-04-05T10:56:49+00:00">835</issue>
    <ticket>555</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>555-426f09d2</id>
    <lines>50-52</lines>
    <body>Let's implement 'Delete user' stakeholder which should find user by id from 'login' param and delete it. Also 'remove_stale_users._after' test should be fixed.</body>
    <file>src/main/resources/com/zerocracy/stk/pmo/people/remove_stale_users.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-03-09T09:15:26Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/896" closed="2018-06-25T11:39:00+00:00">896</issue>
        <ticket>835</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>835-3f8bfc99</id>
        <lines>38-41</lines>
        <body>At moment user.exists() throws NullPointerException for tests, see https://github.com/jcabi/jcabi-github/issues/1370 After jcabi bug fix this condition should be removed and test assertion in `remove_stale_users/_after.groovy` should be uncommented.</body>
        <file>src/main/resources/com/zerocracy/stk/pmo/people/remove_stale_users.groovy</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-04-05T10:01:33Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/843" closed="2018-06-06T22:30:48+00:00">843</issue>
    <ticket>422</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>422-1711e986</id>
    <lines>37-42</lines>
    <body>Title element, of an order in agenda, has been declared in agenda.xsd. Let's add method title(...), which will set the title of on order and add a new stakeholder, set_agenda_title_from_github.groovy, which will get title of a job from GitHub and set it to Agenda. THe reason for the new stakeholder is that not all orders will come from Github, some may also come from Jira, Trello etc, in the future.</body>
    <file>src/main/java/com/zerocracy/pmo/Agenda.java</file>
    <author>amihaiemil</author>
    <email>amihaiemil@gmail.com</email>
    <time>2018-03-19T18:36:25Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1105" closed="2018-06-14T10:51:43+00:00">1105</issue>
        <ticket>843</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>843-976686f8</id>
        <lines>24-29</lines>
        <body>Title element, of an order in agenda, has been declared in agenda.xsd. Let's add a new stakeholder, set_agenda_title_from_github.groovy, which will get title of a job from GitHub and set it to Agenda. THe reason for the new stakeholder is that not all orders will come from Github, some may also come from Jira, Trello etc, in the future.</body>
        <file>src/main/groovy/com/zerocracy/stk/package-info.java</file>
        <author>Roman Proshin</author>
        <email>roman@proshin.org</email>
        <time>2018-06-04T21:56:43Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1152" closed="2018-07-02T08:16:18+00:00">1152</issue>
            <ticket>1105</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1105-a65697ae</id>
            <lines>24-29</lines>
            <body>Title element, of an order in agenda, has been declared in agenda.xsd. The stakeholder set_agenda_title_from_github.groovy must be implemented correctly: it just runs an script that returns the same value. It must get the title value from github issue and set agenda title with this value. The tests were already implemented in #1105 resolution.</body>
            <file>src/main/groovy/com/zerocracy/stk/package-info.java</file>
            <author>Paulo Lobo</author>
            <email>pauloeduardolobo@gmail.com</email>
            <time>2018-06-13T13:19:05Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/903">903</issue>
    <ticket>696</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>696-65091594</id>
    <lines>38-40</lines>
    <body>Add test for pay_all_depts stakeholder script. It is not possible because payments are not testable. It should be fixed in #565 ticket.</body>
    <file>src/main/resources/com/zerocracy/stk/pmo/debts/pay_all_debts.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-04-02T13:54:17Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/908" closed="2018-06-13T12:29:10+00:00">908</issue>
    <ticket>800</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>800-10ded7b0</id>
    <lines>40-51</lines>
    <body>Requests to /join should add an entry to 'resumes.xml' then an 'examiner' should be assigned. When the examiner "invites" a user, we check whether there was a resume for that user. If yes, we pay examiner +32 points. Examiner can reject a resume by saying 'deny {username}' (where username is a login in 'resumes.xml') to Zerocrat. In that case we also pay +32 to the examiner. Each user should see the status of his/her resume at /join. If the resume is there, he/she should see the resume, not the form. If he/she already has a mentor, there should be a redirect, saying that "User @yegor256 is already your mentor, no need to join again". See https://github.com/zerocracy/farm/issues/800#issuecomment-375551970 comment for details.</body>
    <file>src/main/java/com/zerocracy/tk/TkJoin.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-03-26T09:35:30Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1146" closed="2018-07-06T08:19:46+00:00">1146</issue>
        <ticket>908</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>908-27b4bc69</id>
        <lines>32-37</lines>
        <body>Let's create new stakeholder to assign resume to examiner and notify. When the examiner "invites" a user, we check whether there was a resume for that user. If yes, we pay examiner +32 points. Examiner can reject a resume by saying 'deny {username}' (where username is a login in 'resumes.xml') to Zerocrat. In that case we also pay +32 to the examiner.</body>
        <file>src/main/java/com/zerocracy/pmo/Resumes.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-06-07T17:14:39Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1352" closed="2018-07-26T17:39:20+00:00">1352</issue>
            <ticket>1146</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1146-0cb0fd88</id>
            <lines>38-44</lines>
            <body>New user should be invited only by examiner. We should check that user has a resume in resumes.xml and author of invite is his examiner also new users can be invited by PMO members (has any role in PMO project) without resumes check. On invite we should notify user and examiner and add +32 reputation points to examiner. Also examiner should be able to reject resume by saying `deny @username`.</body>
            <file>src/main/groovy/com/zerocracy/stk/pmo/resumes/assign_examiner.groovy</file>
            <author>g4s8</author>
            <email>g4s8.public@gmail.com</email>
            <time>2018-07-04T19:11:54Z</time>
            <children>
              <puzzle alive="false">
                <issue href="https://github.com/zerocracy/farm/issues/1486" closed="2018-08-04T15:30:32+00:00">1486</issue>
                <ticket>1352</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>1352-131ebec6</id>
                <lines>39-44</lines>
                <body>New users can also be invited by PMO members (has any role in PMO project) or QAs in Zerocracy (C3NDPUA8L) project without resumes check. On invite we should notify user and examiner and add +32 reputation points to examiner. Also examiner should be able to reject resume by saying `deny @username`.</body>
                <file>src/main/groovy/com/zerocracy/stk/pmo/resumes/assign_examiner.groovy</file>
                <author>Krzysztof Krason</author>
                <email>Krzysztof.Krason@gmail.com</email>
                <time>2018-07-24T19:53:29Z</time>
                <children>
                  <puzzle alive="false">
                    <issue href="https://github.com/zerocracy/farm/issues/1552" closed="2018-08-24T14:10:18+00:00">1552</issue>
                    <ticket>1486</ticket>
                    <estimate>30</estimate>
                    <role>DEV</role>
                    <id>1486-f5becce5</id>
                    <lines>39-41</lines>
                    <body>On invite we should notify user and examiner and add +32 reputation points to examiner. Also examiner should be able to reject resume by saying `deny @username`.</body>
                    <file>src/main/groovy/com/zerocracy/stk/pmo/resumes/assign_examiner.groovy</file>
                    <author>g4s8</author>
                    <email>g4s8.public@gmail.com</email>
                    <time>2018-08-04T15:19:14Z</time>
                    <children>
                      <puzzle alive="false">
                        <issue href="https://github.com/zerocracy/farm/issues/1649" closed="2018-08-27T18:49:28+00:00">1649</issue>
                        <ticket>1552</ticket>
                        <estimate>30</estimate>
                        <role>DEV</role>
                        <id>1552-d7bf68d4</id>
                        <lines>39-41</lines>
                        <body>Allow examiner to reject resume by saying `deny @username`. In that case examiner should still get +32 points of reputation (and be notified about that).</body>
                        <file>src/main/groovy/com/zerocracy/stk/pmo/resumes/assign_examiner.groovy</file>
                        <author>Krzysztof Krason</author>
                        <email>Krzysztof.Krason@gmail.com</email>
                        <time>2018-08-23T13:30:13Z</time>
                        <children/>
                      </puzzle>
                      <puzzle alive="false">
                        <issue href="https://github.com/zerocracy/farm/issues/1666" closed="2018-09-15T07:35:22+00:00">1666</issue>
                        <ticket>1552</ticket>
                        <estimate>30</estimate>
                        <role>DEV</role>
                        <id>1552-5d564f66</id>
                        <lines>39-44</lines>
                        <body>Allow examiner to reject resume by saying `deny @username`. In that case examiner should still get +32 points of reputation (and be notified about that). Implement deny @username stakeholder and create claim Deny resume which must accept parameters set in deny_resume_application\claims.xml. Then uncomment deny_resume_application\_after.groovy tests.</body>
                        <file>src/main/groovy/com/zerocracy/stk/pmo/resumes/assign_examiner.groovy</file>
                        <author>rultor</author>
                        <email>me@rultor.com</email>
                        <time>2018-08-27T18:30:26Z</time>
                        <children/>
                      </puzzle>
                    </children>
                  </puzzle>
                </children>
              </puzzle>
            </children>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1353" closed="2018-08-21T07:51:18+00:00">1353</issue>
            <ticket>1146</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1146-1c2b1c20</id>
            <lines>45-47</lines>
            <body>Test for this stakeholder is missed. We should verify that new resume can be assigned only to high-reputation user (&gt;= 1024) and can't be assigned to users on vacation.</body>
            <file>src/main/groovy/com/zerocracy/stk/pmo/resumes/assign_examiner.groovy</file>
            <author>g4s8</author>
            <email>g4s8.public@gmail.com</email>
            <time>2018-07-04T19:11:54Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1147" closed="2018-06-19T08:45:17+00:00">1147</issue>
        <ticket>908</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>908-f22ecc2e</id>
        <lines>45-50</lines>
        <body>Each user should see the status of his/her resume at /join. If the resume is there, he/she should see the resume, not the form. If he/she already has a mentor, there should be a redirect, saying that "User @yegor256 is already your mentor, no need to join again". See https://github.com/zerocracy/farm/issues/800#issuecomment-375551970 comment for details.</body>
        <file>src/main/java/com/zerocracy/tk/TkJoin.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-06-07T17:14:39Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1179" closed="2018-07-30T12:24:28+00:00">1179</issue>
            <ticket>1147</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1147-60d5b5b4</id>
            <lines>45-52</lines>
            <body>Each user should see the status of his/her resume at /join. If the resume is there, he/she should see the resume, not the form. If he/she already has a mentor, there should be a redirect, saying that "User @yegor256 is already your mentor, no need to join again". See https://github.com/zerocracy/farm/issues/800#issuecomment-375551970 comment for details. These two conditions are already tested in TkJoinTest, in showResumeIfAlreadyApplied and showAlreadyHasMentor, and the ignore tag on the tests should be removed upon puzzle completion.</body>
            <file>src/main/java/com/zerocracy/tk/TkJoin.java</file>
            <author>rultor</author>
            <email>me@rultor.com</email>
            <time>2018-06-19T08:28:37Z</time>
            <children>
              <puzzle alive="false">
                <issue href="https://github.com/zerocracy/farm/issues/1506" closed="2018-08-08T20:31:07+00:00">1506</issue>
                <ticket>1179</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>1179-61ff2e4f</id>
                <lines>43-48</lines>
                <body>Each user should see the status of his/her resume at /join. If the resume is there, he/she should see the resume, not the form. See https://github.com/zerocracy/farm/issues/800#issuecomment-375551970 comment for details. This condition is already tested in TkJoinTest, in showResumeIfAlreadyApplied. If implemented, update the test if necessary and the ignore tag should be removed upon puzzle completion.</body>
                <file>src/main/java/com/zerocracy/tk/TkJoin.java</file>
                <author>Carlos Miranda</author>
                <email>carlosmiranda@users.noreply.github.com</email>
                <time>2018-07-30T10:07:58Z</time>
                <children>
                  <puzzle alive="false">
                    <issue href="https://github.com/zerocracy/farm/issues/1568" closed="2018-11-29T07:32:11+00:00">1568</issue>
                    <ticket>1506</ticket>
                    <estimate>30</estimate>
                    <role>DEV</role>
                    <id>1506-ecd7faa7</id>
                    <lines>30-36</lines>
                    <body>Each user should see the status of his/her resume at /join. If the resume is there, he/she should see the resume, not the form. For this, a resume page must be implemented in zerocracy-datum (pmo/resume .xsl), which will show the resume extracted from Resumes.This condition is already tested in TkJoinTest, in showResumeIfAlreadyApplied. When implemented, update the test and the ignore tag should be removed upon puzzle completion.</body>
                    <file>src/main/java/com/zerocracy/tk/TkJoin.java</file>
                    <author>Paulo Lobo</author>
                    <email>pauloeduardolobo@gmail.com</email>
                    <time>2018-08-07T02:56:07Z</time>
                    <children>
                      <puzzle alive="false">
                        <issue href="https://github.com/zerocracy/farm/issues/1805" closed="2019-05-28T09:10:16+00:00">1805</issue>
                        <ticket>1568</ticket>
                        <estimate>30</estimate>
                        <role>DEV</role>
                        <id>1568-f8e630b6</id>
                        <lines>38-41</lines>
                        <body>TkJoinTest is not checking if join page is being rendered correctly; it just checks if something is rendered. Improve this test making sure that a user that not joined yet is requisting /join and that join page is bein correctly fetched.</body>
                        <file>src/test/java/com/zerocracy/tk/TkJoinTest.java</file>
                        <author>paulodamaso</author>
                        <email>pauloeduardolobo@gmail.com</email>
                        <time>2018-11-28T15:32:45Z</time>
                        <children/>
                      </puzzle>
                    </children>
                  </puzzle>
                  <puzzle alive="false">
                    <issue href="https://github.com/zerocracy/farm/issues/1569" closed="2018-08-23T21:15:44+00:00">1569</issue>
                    <ticket>1506</ticket>
                    <estimate>30</estimate>
                    <role>DEV</role>
                    <id>1506-9a48ed63</id>
                    <lines>31-35</lines>
                    <body>Implement resumes.resume(login), which will return the resume sent for some user. It will have to return a Resume (the interface needs to be created, too) object mapping the resume information so it can be used in resume page. Don't forget to create a test for it in ResumesTest.</body>
                    <file>src/main/java/com/zerocracy/pmo/Resumes.java</file>
                    <author>Paulo Lobo</author>
                    <email>pauloeduardolobo@gmail.com</email>
                    <time>2018-08-07T02:56:07Z</time>
                    <children>
                      <puzzle alive="false">
                        <issue href="https://github.com/zerocracy/farm/issues/1645" closed="2018-10-23T18:14:13+00:00">1645</issue>
                        <ticket>1569</ticket>
                        <estimate>30</estimate>
                        <role>DEV</role>
                        <id>1569-990fecb8</id>
                        <lines>31-36</lines>
                        <body>Implement resumes.resume(login), which will return the resume sent for some user. It will have to return a Resume implementation which reads the resume from resumes.xml. It must read /resumes/resume attributes and return them in its methods. Then remove expected from ResumesTest.findResume so it can be tested to be used in resume page.</body>
                        <file>src/main/java/com/zerocracy/pmo/Resumes.java</file>
                        <author>Paulo Lobo</author>
                        <email>pauloeduardolobo@gmail.com</email>
                        <time>2018-08-22T03:13:06Z</time>
                        <children>
                          <puzzle alive="false">
                            <issue href="https://github.com/zerocracy/farm/issues/1774" closed="2019-02-21T21:23:16+00:00">1774</issue>
                            <ticket>1645</ticket>
                            <estimate>30</estimate>
                            <role>DEV</role>
                            <id>1645-dc067a6a</id>
                            <lines>41-43</lines>
                            <body>Handle resume not found in resumes.resume(login). It will have to throw a meaningful message using a SoftException. A test should be written to cover this situation.</body>
                            <file>src/test/java/com/zerocracy/pmo/ResumesTest.java</file>
                            <author>Victor No&#xEB;l</author>
                            <email>victor.noel@crazydwarves.org</email>
                            <time>2018-10-07T11:11:33Z</time>
                            <children/>
                          </puzzle>
                        </children>
                      </puzzle>
                    </children>
                  </puzzle>
                </children>
              </puzzle>
            </children>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/909" closed="2018-04-10T09:28:14+00:00">909</issue>
    <ticket>680</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>680-5b4d7868</id>
    <lines>1-6</lines>
    <body>Change jobStore to JDBC to store job info persistently. Now all quartz jobs will be restarted on application restart, database store will solve it. Before changing job store to JDBC a database should be connected, I suppose via Heroku plugin. This link will be helpful also: http://www.quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering.html</body>
    <file>src/main/resources/quartz.properties</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-04-02T18:01:22Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/956" closed="2018-06-13T07:43:28+00:00">956</issue>
    <ticket>653</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>653-b9d34fcf</id>
    <lines>40-43</lines>
    <body>We should allow user to send `/join` requests only once a week, it can be checked and updated via People.applied methods. The 7 days value can be accessed via Par after https://github.com/zerocracy/zerocracy.github.io/issues/9 fix.</body>
    <file>src/main/java/com/zerocracy/tk/TkJoin.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-04-01T10:14:09Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/970" closed="2018-06-28T15:38:21+00:00">970</issue>
    <ticket>925</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>925-41a80871</id>
    <lines>33-35</lines>
    <body>Vacancies are not rendered on `/vacancies` page. This page should list all current vacancies in all projects. Let's display vacancy author, date and text.</body>
    <file>src/main/java/com/zerocracy/pmo/Vacancies.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-04-26T13:23:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/971" closed="2018-06-26T17:14:59+00:00">971</issue>
    <ticket>925</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>925-74129afd</id>
    <lines>36-38</lines>
    <body>Old vacancies are not removed automatically. Let's add new stakeholder which will remove vacancies from `vacancies.xml` which are older than 32 days.</body>
    <file>src/main/java/com/zerocracy/pmo/Vacancies.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-04-26T13:23:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1006" closed="2018-06-04T14:10:25+00:00">1006</issue>
    <ticket>715</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>715-1243e0dc</id>
    <lines>24-27</lines>
    <body>Change 'com.zerocracy.pmo' classes constructor to accept `Pmo` instead of `Project`, also all tests and groovy scripts should be fixed after refactoring. It is: Agenda, Catalog, People, Projects, Rfps, Speed.</body>
    <file>src/main/java/com/zerocracy/pmo/package-info.java</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2018-05-11T04:09:32Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1036" closed="2018-06-15T11:30:32+00:00">1036</issue>
    <ticket>889</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>889-ebed2d87</id>
    <lines>23-27</lines>
    <body>Implement stakeholder 'check_automatic_vacation.groovy'. We should implement auto-vacation mechanism. See https://github.com/zerocracy/farm/issues/889 and http://www.zerocracy.com/policy.html#52 for details. When done uncomment the assertion below to enable this test.</body>
    <file>src/test/resources/com/zerocracy/bundles/turn_on_vacation_for_too_many_negative_awards/_after.groovy</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2018-05-21T12:46:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1060" closed="2018-06-25T02:44:27+00:00">1060</issue>
    <ticket>687</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>687-bf5e0265</id>
    <lines>38-40</lines>
    <body>There are no tests for the refresh method (and as a result start method also) of SlackRadar class. Please add tests verifying behavior of those methods.</body>
    <file>src/test/java/com/zerocracy/radars/slack/SlackRadarTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-05-20T18:42:06Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1061" closed="2018-06-30T10:41:41+00:00">1061</issue>
    <ticket>808</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>808-5c63d8cf</id>
    <lines>41-44</lines>
    <body>VsWorkload test is missed, workload votes are not tested neither with first constructor (farm, others) nor with second (farm, project, others). First should be tested for all agenda items, second only for project items.</body>
    <file>src/main/java/com/zerocracy/pm/staff/votes/VsWorkload.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-05-29T08:24:35Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1062" closed="2018-06-28T14:19:00+00:00">1062</issue>
    <ticket>402</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>402-12bf0024</id>
    <lines>41-42</lines>
    <body>Let's write a test for RsPage that will check a general case that any page sent to Firefox will be rendered as html and not xml.</body>
    <file>src/test/java/com/zerocracy/tk/profile/TkAgendaTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-05-21T05:26:15Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1063" closed="2018-06-27T14:31:40+00:00">1063</issue>
    <ticket>402</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>402-85a1a26e</id>
    <lines>43-44</lines>
    <body>Write a test confirming that awards page when opened in a Firefox browser will always render html and not xml.</body>
    <file>src/test/java/com/zerocracy/tk/profile/TkAgendaTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-05-21T05:26:15Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1064" closed="2018-06-28T14:19:05+00:00">1064</issue>
    <ticket>402</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>402-71bf3c7f</id>
    <lines>45-46</lines>
    <body>Write a test confirming that profile page when opened in a Firefox browser will always render html and not xml.</body>
    <file>src/test/java/com/zerocracy/tk/profile/TkAgendaTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-05-21T05:26:15Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1066" closed="2018-07-03T09:27:00+00:00">1066</issue>
    <ticket>565</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>565-02a276a9</id>
    <lines>36-46</lines>
    <body>Implement method pay() that will write details about payment to the xml file in this format: `&amp;lt;payments&amp;gt; ` &amp;lt;payment&amp;gt; ` &amp;lt;target&amp;gt;trg&amp;lt;/target&amp;gt; ` &amp;lt;amount&amp;gt;$0.55&amp;lt;/amount&amp;gt; ` &amp;lt;details&amp;gt;dtls&amp;lt;/details&amp;gt; ` &amp;lt;result&amp;gt;E0885448-5DEE-11E8-9C2D-FA7AE01BBEBC&amp;lt;/result&amp;gt; ` &amp;lt;/payment&amp;gt; `&amp;lt;/payments&amp;gt; Unignore relevant test case from FkBankTest.</body>
    <file>src/main/java/com/zerocracy/pmo/banks/FkBank.java</file>
    <author>Tolegen Izbassar</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-05-22T18:50:23Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1067" closed="2018-07-04T16:01:45+00:00">1067</issue>
    <ticket>565</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>565-1108b582</id>
    <lines>47-55</lines>
    <body>Implement method fee() that will write details about fee to the xml file in this format: `&amp;lt;fees&amp;gt; ` &amp;lt;fee&amp;gt; ` &amp;lt;amount&amp;gt;$0.50&amp;lt;/amount&amp;gt; ` &amp;lt;result&amp;gt;$0.80&amp;lt;/result&amp;gt; ` &amp;lt;/fee&amp;gt; `&amp;lt;/fees&amp;gt; Unignore relevant test case from FkBankTest.</body>
    <file>src/main/java/com/zerocracy/pmo/banks/FkBank.java</file>
    <author>Tolegen Izbassar</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-05-22T18:50:23Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1068" closed="2018-07-04T10:10:40+00:00">1068</issue>
    <ticket>566</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>566-492b5668</id>
    <lines>56-59</lines>
    <body>Implement equals so that it conforms the relevant test case from FkBankTest. Implement relevant to equals hashcode method. Implement toString() method, that will print the content of the underlying xml file. Cover with required test cases.</body>
    <file>src/main/java/com/zerocracy/pmo/banks/FkBank.java</file>
    <author>Tolegen Izbassar</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-05-22T18:50:23Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1069" closed="2018-07-15T08:48:08+00:00">1069</issue>
    <ticket>565</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>565-edf33878</id>
    <lines>60-62</lines>
    <body>Add FkBank to the Payroll under the file payment method. Ensure, that the opened files are closed properly and cover Payroll with tests.</body>
    <file>src/main/java/com/zerocracy/pmo/banks/FkBank.java</file>
    <author>Tolegen Izbassar</author>
    <email>t.izbassar@gmail.com</email>
    <time>2018-05-22T18:50:23Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1428">1428</issue>
        <ticket>1069</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1069-c7edbb2e</id>
        <lines>57-60</lines>
        <body>Add FkBank to the Payroll under the file payment method. Ensure, that the opened files are closed properly and implement walletIsEmpty, unsupportedPaymentMethod and makePayment tests in PayrollTest.</body>
        <file>src/main/java/com/zerocracy/pmo/banks/FkBank.java</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-07-15T08:31:07Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1070" closed="2018-07-05T08:55:31+00:00">1070</issue>
    <ticket>939</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>939-5d35582c</id>
    <lines>33-38</lines>
    <body>Implement TkViber. We should be able to receive Viber webhook requests and react to them accordingly. In the case of "message" events, we should route them to ReProfile. For the rest we should at least be able to return a 200 OK response to Viber. When fully implemented this should be added to Main.java so that it can be called. See https://developers.viber.com/docs/api/rest-bot-api/</body>
    <file>src/main/java/com/zerocracy/radars/viber/TkViber.java</file>
    <author>Carlos Miranda</author>
    <email>carlos.m.a.miranda@accenture.com</email>
    <time>2018-05-09T06:57:46Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1071" closed="2018-07-20T07:53:59+00:00">1071</issue>
    <ticket>939</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>939-6d7b5358</id>
    <lines>25-29</lines>
    <body>Implement Viber bot. We should be able to send messages via the Viber REST API. There are other operations but I think that is the only operation we need (I might be wrong). See: https://developers.viber.com/docs/api/rest-bot-api/#authentication-token https://developers.viber.com/docs/api/rest-bot-api/#send-message</body>
    <file>src/main/java/com/zerocracy/radars/viber/VbBot.java</file>
    <author>Carlos Miranda</author>
    <email>carlos.m.a.miranda@accenture.com</email>
    <time>2018-05-09T06:57:46Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1449">1449</issue>
        <ticket>1071</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1071-28281b2a</id>
        <lines>32-37</lines>
        <body>Let's allow notification via Viber. If we receive a Notify claim with a 'viber' prefixed token, we copy the claim to a new claim, "Notify in Viber". Then, create a stakeholder that will handle the claim and send the actual message to the user. Also create a mock/fake VbBot implementation that we can use for stakeholder testing (may require extracting an interface for VbBot).</body>
        <file>src/main/groovy/com/zerocracy/stk/pm/comm/notify.groovy</file>
        <author>Carlos Miranda</author>
        <email>carlosmiranda@users.noreply.github.com</email>
        <time>2018-07-17T07:43:40Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1072" closed="2018-07-04T10:33:58+00:00">1072</issue>
    <ticket>939</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>939-6bf607a5</id>
    <lines>28-30</lines>
    <body>Implement VbEvent.Simple and VbEvent.Message. These classes should be able to parse the underlying JSON and return the correct data via the defined interface methods.</body>
    <file>src/main/java/com/zerocracy/radars/viber/VbEvent.java</file>
    <author>Carlos Miranda</author>
    <email>carlos.m.a.miranda@accenture.com</email>
    <time>2018-05-09T06:57:46Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1079" closed="2018-07-01T16:09:28+00:00">1079</issue>
    <ticket>1074</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1074-b36594a1</id>
    <lines>27-29</lines>
    <body>Zold payments are not implemented, we have to modify wallet by including new transaction for user and push it to some node via java-api: https://github.com/zold-io/java-api</body>
    <file>src/main/java/com/zerocracy/pmo/banks/Zold.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-02T21:19:07Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1088" closed="2018-07-09T16:11:43+00:00">1088</issue>
    <ticket>747</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>747-d2018a51</id>
    <lines>652-654</lines>
    <body>Groovy scripts are excluded from coverage report because they are not fully tested. Let's add tests for them and remove this `&lt;exclude&gt;` line.</body>
    <file>pom.xml</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-04-23T08:29:02Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1391">1391</issue>
        <ticket>1088</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1088-c6f329b3</id>
        <lines>492-496</lines>
        <body>Groovy scripts are now not excluded, as a result complexity coverage ration dropped from 0.57, and instruction coverage dropped from 0.60. Add tests to stakeholder scripts to the previous coverage of 0.57 for complexity and 0.60 for instruction coverage.</body>
        <file>pom.xml</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-07-07T11:50:22Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1089" closed="2018-07-30T08:17:00+00:00">1089</issue>
    <ticket>747</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>747-f5927788</id>
    <lines>23-25</lines>
    <body>This test started to fail after moving groovy stakeholder scripts to groovy directory. Assertion `elections.elected` is false now, so it's needed to investigate why this test is failing and fix it.</body>
    <file>src/test/resources/com/zerocracy/bundles/not_assign_task_to_reporter/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-05-04T07:53:22Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1504">1504</issue>
        <ticket>1089</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1089-d64db1c1</id>
        <lines>23-29</lines>
        <body>This test should be fixed already. However, it is not stable and fails intermittently. Let's stabilize the test and uncomment the code below. Elections elections = new Elections(project).bootstrap() String job = 'gh:test/farm#1' assert elections.elected(job) assert elections.winner(job) == 'g4s8'</body>
        <file>src/test/resources/com/zerocracy/bundles/not_assign_task_to_reporter/_after.groovy</file>
        <author>Carlos Miranda</author>
        <email>carlosmiranda@users.noreply.github.com</email>
        <time>2018-07-30T07:21:11Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1123" closed="2018-07-11T06:47:41+00:00">1123</issue>
    <ticket>1121</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1121-f96bc81e</id>
    <lines>46-48</lines>
    <body>Speed and Agenda is skipped now because it causes slow page loading. We have to fix #1121 bug and show it on page as before.</body>
    <file>src/main/java/com/zerocracy/tk/TkTeam.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-06-08T19:35:50Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1141" closed="2018-07-20T08:17:31+00:00">1141</issue>
    <ticket>540</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>540-880d3ffd</id>
    <lines>32-39</lines>
    <body>Finish implementing and testing this class, decide on the XML format and declare it in /datum repository. When done, use this metric inside resin_on_delay.groovy. After this, finish implementing the voter VsNegligence: similar to VsSpeed and VsWorkload, it should vote for the user with the highest negligence (most number of delays). When done, the voter should be declared in elect_performer.groovy with weight -1 (since the highest negligence will have the highest vote).</body>
    <file>src/main/java/com/zerocracy/pmo/Negligence.java</file>
    <author>amihaiemil</author>
    <email>amihaiemil@gmail.com</email>
    <time>2018-06-07T20:03:01Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1450" closed="2019-07-05T07:59:43+00:00">1450</issue>
        <ticket>1141</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1141-7253381b</id>
        <lines>33-38</lines>
        <body>Use this metric inside resing_on_delay.groovy. After this, finish implementing the voter VsNegligence: similar to VsSpeed and VsWorkload, it should vote for the user with the highest negligence (most number of delays). When done, the voter should be declared in elect_performer.groovy with weight -1 (since the highest negligence will have the highest vote).</body>
        <file>src/main/java/com/zerocracy/pmo/Negligence.java</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-07-20T07:59:57Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1142" closed="2018-07-10T06:55:35+00:00">1142</issue>
    <ticket>1080</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1080-e7775be0</id>
    <lines>107-109</lines>
    <body>Refactor this method and similar functionality in TkAwardsTest into a reusable class in which we could control what kind of view we want to generate.</body>
    <file>src/test/java/com/zerocracy/tk/profile/TkProfileTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-06-12T07:32:30Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1399">1399</issue>
        <ticket>1142</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1142-5773798e</id>
        <lines>30-32</lines>
        <body>This class should be tested that it actually forwards the call to the TkApp with the url provided by the user, and that the resulting page is an xml or html, depending on the method.</body>
        <file>src/test/java/com/zerocracy/tk/View.java</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-07-09T08:32:51Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1145" closed="2019-11-18T16:30:18+00:00">1145</issue>
    <ticket>989</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>989-2e7ad176</id>
    <lines>32-36</lines>
    <body>MkGithub can't create private repository, any repository from MkGithub is public, see _before in this test. I suppose it's bug in jcabi-github, see https://github.com/jcabi/jcabi-github/issues/1421 When the bug is fixed, update jcabi-github and uncomment code below.</body>
    <file>src/test/resources/com/zerocracy/bundles/assign_role/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-06-08T14:29:27Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1163" closed="2018-07-15T09:11:14+00:00">1163</issue>
    <ticket>1015</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1015-7cbe8f93</id>
    <lines>26-28</lines>
    <body>Fix the problem when PR job is assigned manually it has role of DEV and 30 points award. After fixing it uncomment following two lines and the test should pass.</body>
    <file>src/test/resources/com/zerocracy/bundles/assigns_performer_pr/_after.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-17T12:27:14Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1167" closed="2018-08-12T14:43:48+00:00">1167</issue>
    <ticket>1050</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1050-8012ef0f</id>
    <lines>73-77</lines>
    <body>This test is not stable (depending on environment it fails in about 5% cases) refactor it to make it stable. Remember to run large number of builds to make sure it doesn't fail (at least 100 builds are needed, maybe more). The trouble is most probably in ExtMongo for the fake Mongo instance.</body>
    <file>src/test/java/com/zerocracy/pm/FootprintTest.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-18T08:14:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1189">1189</issue>
    <ticket>1144</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1144-dd8c18c5</id>
    <lines>43-46</lines>
    <body>Create an implementation of GitLab API that will mirror the one we use for Github (Github class and friends). We only need those API endpoints that we use in farm project so don't try to implement the full API.</body>
    <file>src/main/java/com/zerocracy/radars/gitlab/TkGitlab.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-20T07:12:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1190">1190</issue>
    <ticket>1144</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1144-5990610c</id>
    <lines>47-52</lines>
    <body>Create a generic interface for hosted version control systems that we could use in stakeholders (and other classes) where we don't care about specific vendor (Github or Gitlab). Remember that besides the generic interface stakeholders have to have a way to find out if they are working with GitLab or GitHub. Most probably React and Rebound interfaces should be reworked to support such general vendor.</body>
    <file>src/main/java/com/zerocracy/radars/gitlab/TkGitlab.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-20T07:12:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1191">1191</issue>
    <ticket>1144</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1144-d78254a3</id>
    <lines>53-55</lines>
    <body>Mimic the functionality of TkGithub in this class. For Gitlab we should support all the webhook notifications that we currently do for Github.</body>
    <file>src/main/java/com/zerocracy/radars/gitlab/TkGitlab.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-20T07:12:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1196" closed="2018-06-20T20:54:59+00:00">1196</issue>
    <ticket>1168</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1168-91afb756</id>
    <lines>34-36</lines>
    <body>TkBadge is temporary disabled because of high load. There are a lot of requests to project badges, each request trigger SyncFarm lock acquire, which is broken right now.</body>
    <file>src/main/java/com/zerocracy/tk/project/TkBadge.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-06-20T13:42:13Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1201" closed="2018-06-21T21:38:38+00:00">1201</issue>
    <ticket>1168</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1168-428c4b61</id>
    <lines>38-40</lines>
    <body>Revert all unnecessary changes which appeared during #1168 bug fixing. It is: lock timeouts was changed, badges takes was deleted, log levels was changed.</body>
    <file>src/test/java/com/zerocracy/tk/PingTest.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-06-21T10:56:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1215" closed="2018-06-25T18:37:58+00:00">1215</issue>
    <ticket>1208</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1208-ab499773</id>
    <lines>48-50</lines>
    <body>During #1208 fixing PMO claims was saved locally and removed from production. We need to analyze it, find critical claims and submit them to current `claims.xml` in PMO.</body>
    <file>src/main/java/com/zerocracy/pm/Claims.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-06-22T08:08:40Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1245" closed="2018-07-02T08:38:56+00:00">1245</issue>
        <ticket>1215</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1215-4176ce2c</id>
        <lines>38-47</lines>
        <body>We should not try to add claims with 'Error' type and stacktrace if error was thrown from Claims.add because of claims overflow. It may produce very huge stacktraces (about 2000 lines for stacktrace): claims.xml is full, we try to add new claim, Claims throws an exception about overflow, this exception is handled in StkSafe catch (Throwable), submitted again (goto step 2), this exception may goes in a loop about few hundred times, until some claims will be removed from claims.xml, and then this error with thousand lines of stacktrace lines will be added to `claims.xml`.</body>
        <file>src/main/java/com/zerocracy/farm/StkSafe.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-06-25T18:36:52Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1246" closed="2018-07-25T08:34:17+00:00">1246</issue>
        <ticket>1215</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1215-032c8ff3</id>
        <lines>47-51</lines>
        <body>Invent mechanism to prevent huge claims.xml files. We can check claims.xml size before working with it and pause a project if this size is too big. We can skip downloading from S3, just need to check attributes, and if claims.xml is bigger than 10MB stop working with this project and send notification to PMO.</body>
        <file>src/main/java/com/zerocracy/pm/Claims.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-06-25T18:36:52Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1225" closed="2018-07-30T14:23:18+00:00">1225</issue>
    <ticket>1055</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1055-055a4c3b</id>
    <lines>23-26</lines>
    <body>Implement logic for removal of all orders and clear WBS when the link to the Github repo is removed by the user. After it is implemented uncomment terminates_orders_wbs_on_link_removal test.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/in/links/terminate_orders_wbs_on_link_removal.groovy</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-06-24T05:50:28Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1226" closed="2018-08-04T14:44:03+00:00">1226</issue>
    <ticket>1048</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1048-04512f73</id>
    <lines>25-31</lines>
    <body>Implement logic for adding webhook in add_github_webhook stakeholder (see #1048 for details). After it is implemented uncomment adds_github_webhook test and make sure it passes. In production we need to use url: http://www.rehttp.net/p/https://www.0crat.com/ghook, and in testing we use current url of our instance + "/ghook". Add another test that will check that in case we don't have enough permissions we will inform the user about it.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/hooks/add_github_webhook/add_github_webhook.groovy</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-06-24T05:31:44Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1550">1550</issue>
        <ticket>1226</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1226-cf6a00fb</id>
        <lines>29-36</lines>
        <body>add_github_webhook.groovy bundletest can't be properly implemented because we are not able to retrieve a valid github hook instance: repo.hooks().get(0) returns a MkHook instance and MkHook does not have the #json() method implemented. Wait for the resolution of this case (https://github.com/jcabi/jcabi-github/issues/1425) or find another solution and then uncomment the remaining tests and add another test that will check that in case we don't have enough permissions we will inform the user about it.</body>
        <file>src/test/resources/com/zerocracy/bundles/adds_github_webhook/_after.groovy</file>
        <author>Paulo Lobo</author>
        <email>pauloeduardolobo@gmail.com</email>
        <time>2018-07-31T19:33:02Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1231" closed="2018-08-03T14:36:36+00:00">1231</issue>
    <ticket>1041</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1041-c307d5cc</id>
    <lines>997-1002</lines>
    <body>These tests are failing on Windows system, some of them because of locale and decimal point, see https://github.com/zerocracy/farm/pull/1178#discussion_r196476659 for more details. We need to fix them and remove surefire exclusions from this profile and jacoco exlusions also.</body>
    <file>pom.xml</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-06-19T15:46:03Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1542">1542</issue>
        <ticket>1231</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1231-e8f4cee3</id>
        <lines>1026-1032</lines>
        <body>Fixing language issues of #1231 did not resolved problems with S3ItemTest. Discover why S3ItemTest is not working in windows builds and fix it. Remove surefire and jacoco exclusions after fixing this problem and update jacoco coverage values. See #1041 https://github.com/zerocracy/farm/pull/1178#discussion_r196476659 for more details about windows build failure.</body>
        <file>pom.xml</file>
        <author>Paulo Lobo</author>
        <email>pauloeduardolobo@gmail.com</email>
        <time>2018-08-01T13:31:40Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1240" closed="2018-08-06T09:11:24+00:00">1240</issue>
    <ticket>1200</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1200-fd0f2266</id>
    <lines>45-47</lines>
    <body>Add a test that validates that pings are sent to projects in batches depending on the ping interval. All projects need to be pinged eventually.</body>
    <file>src/test/java/com/zerocracy/entry/PingTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-06-22T13:13:47Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1257" closed="2018-08-03T15:33:46+00:00">1257</issue>
    <ticket>917</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>917-ba7a1a04</id>
    <lines>36-39</lines>
    <body>Notify all project about expired vacancy. Notification text should include that vacancy was removed because it was expired. Vacancies.removeOlderThan in such case should return project ids of removed vacancies.</body>
    <file>src/main/groovy/com/zerocracy/stk/pmo/vacancies/remove_old_vacancies.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-06-26T13:48:58Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1543">1543</issue>
        <ticket>1257</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1257-c5a38319</id>
        <lines>32-34</lines>
        <body>After all the puzzles are solved from #89 (a way to test slack communication) add an assert that will validate that slack messages notifying project about expired vacancies has been posted.</body>
        <file>src/test/resources/com/zerocracy/bundles/remove_old_vacancies/_after.groovy</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-08-01T19:40:51Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1267" closed="2018-07-06T16:11:24+00:00">1267</issue>
    <ticket>1121</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1121-eb4ead73</id>
    <lines>738-742</lines>
    <body>We should periodically compute average speed for each person and update it. This stat will be displayed in Team page. Probably the most logical time to do this is after "Order was finished" claim. We can add this logic to compute_speed.groovy stakeholder. We should also add tests for it.</body>
    <file>src/main/java/com/zerocracy/pmo/People.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-06-25T10:02:25Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1278" closed="2018-10-12T09:17:27+00:00">1278</issue>
    <ticket>1054</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1054-f370f52f</id>
    <lines>76-77</lines>
    <body>The code inside the init if should be extracted into another class (a decorator?), as it doesn't belong here at all.</body>
    <file>src/test/java/com/zerocracy/tk/RqWithUser.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-06-28T07:00:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1279" closed="2018-11-09T08:07:42+00:00">1279</issue>
    <ticket>1054</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1054-30c8b97d</id>
    <lines>69-71</lines>
    <body>A check whether user is a PO in any of the projects happens in this method and in RqLogin#value. Extract this check to a common place and reuse it in both places.</body>
    <file>src/main/java/com/zerocracy/tk/RqUser.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-06-27T14:54:42Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1284" closed="2020-03-25T18:49:48+00:00">1284</issue>
    <ticket>993</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>993-2ea9b05d</id>
    <lines>81-83</lines>
    <body>Fix NullPointerException due concurrency issues. Txn.acq() is throwing an NullPointerException when trying to read this.items. Ignore annotation must be removed after puzzle solution.</body>
    <file>src/test/java/com/zerocracy/TxnTest.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-29T07:51:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1304" closed="2018-08-27T08:28:28+00:00">1304</issue>
    <ticket>980</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>980-46a74068</id>
    <lines>43-45</lines>
    <body>We need to drop Etherium support from Zerocracy: Remove ETH support mentioned in Policy (&#xA7;20) and Remove ETH wallets support informing that ETH cannot be used when user tries to use it.</body>
    <file>src/main/java/com/zerocracy/pmo/banks/Crypto.java</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-07-02T00:08:44Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1305" closed="2018-09-26T04:22:03+00:00">1305</issue>
    <ticket>952</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>952-47c309d2</id>
    <lines>45-48</lines>
    <body>Continue replacing old Date classes with Instant. Remember also to remove instances of `DateAsText` (Instant.toString should be used). There is a lot of classes to change so try to find a good small cluster of related classes that can be updated.</body>
    <file>src/test/java/com/zerocracy/pmo/PeopleTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-07-01T21:37:37Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1761">1761</issue>
        <ticket>1305</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1305-25fd047a</id>
        <lines>38-42</lines>
        <body>Continue replacing old Date classes with Instant. Remember also to remove instances of `DateAsText` (Instant.toString should be used). Be careful to ensure Groovy classes are properly updated since typing is sometimes dodgy in there. There is a lot of classes to change so try to find a good small cluster of related classes that can be updated.</body>
        <file>src/main/java/com/zerocracy/pmo/Catalog.java</file>
        <author>Victor No&#xEB;l</author>
        <email>victor.noel@crazydwarves.org</email>
        <time>2018-09-23T09:03:49Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1311">1311</issue>
    <ticket>1291</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1291-e0f9fdc9</id>
    <lines>29-32</lines>
    <body>Add tests for payments via concrete banks, I suppose `Payroll` may check 'testing' property in farm and return fake `Bank` implementations for each supported payment method. First of all we need to test Zold payments.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/cost/funding/send_zold.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-02T11:21:25Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1317" closed="2018-07-06T16:51:14+00:00">1317</issue>
    <ticket>1307</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1307-a0596409</id>
    <lines>52-55</lines>
    <body>Changes for #1245 fix were reverted in a2f5821c23469a680485ae8bb6ac875316eb3b24 because they produces #1307 bug: some claims may be missed and never added to claims.xml, so 0crat lose Github or chat actions.</body>
    <file>src/main/java/com/zerocracy/pm/Claims.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-02T21:07:07Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1325" closed="2019-03-14T10:10:12+00:00">1325</issue>
    <ticket>1119</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1119-cdea2c77</id>
    <lines>44-46</lines>
    <body>Reason is not attached to transaction as 'details' because of this bug: https://github.com/zold-io/wts.zold.io/issues/36 let's use reason claim parameter as reason when it will be fixed.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/cost/funding/send_zold.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-03T12:05:57Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1364" closed="2018-07-22T13:23:24+00:00">1364</issue>
    <ticket>1302</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1302-97bdfff0</id>
    <lines>23-26</lines>
    <body>This test always fail because for unknown reason roles.xml in PMO is full copy of roles.xml in this fake project. Files in PMO and in bundle test project should be different and not correlate somehow.</body>
    <file>src/test/resources/com/zerocracy/bundles/resign_on_delay/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-06T15:08:53Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1462">1462</issue>
        <ticket>1364</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1364-17eeb363</id>
        <lines>104-108</lines>
        <body>This class is way to complex for a unit test. Most of the code here should be extracted into another class. And this new class should be covered with unit tests. And BundlesTess should be a simple class that just calls a method or two from the other class. Most of the checkstyle excludes should be removed after this refactoring.</body>
        <file>src/test/java/com/zerocracy/BundlesTest.java</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-07-19T12:12:24Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1366" closed="2018-07-17T17:07:44+00:00">1366</issue>
    <ticket>1269</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1269-a1c2eb54</id>
    <lines>30-34</lines>
    <body>Each time a release is published, we should pay the architect a release bonus. Let's create a stakeholder that will react to the "Release was published" claim that will do this. See the following: https://github.com/zerocracy/farm/issues/1269#issuecomment-402054891 http://www.zerocracy.com/policy.html#53</body>
    <file>src/main/java/com/zerocracy/radars/github/RbRelease.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-07-06T08:42:36Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1380" closed="2018-07-22T13:02:12+00:00">1380</issue>
    <ticket>1016</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1016-094de400</id>
    <lines>35-38</lines>
    <body>Add a new stackeholder, remove_impediment.groovy, that will remove the impediment once a user says "@0crat continue" on an Issue that is on hold. The "continue" command is already registered in q-tracker.xml, the code is "Remove impediment".</body>
    <file>src/main/java/com/zerocracy/pm/in/Impediments.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-07-08T17:21:41Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1461">1461</issue>
        <ticket>1380</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1380-39754ff8</id>
        <lines>30-34</lines>
        <body>The impediment should also be removed from the Agenda. We should implement a mechanism similar to how register_impediment.groovy and add_impediment_to_agenda.groovy are working. This stakeholder should send a 'Impediment was removed' claim, caught and handled by remove_impediment_from_agenda.groovy.</body>
        <file>src/main/groovy/com/zerocracy/stk/pm/in/impediments/remove_impediment.groovy</file>
        <author>amihaiemil</author>
        <email>amihaiemil@gmail.com</email>
        <time>2018-07-18T11:05:32Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1381" closed="2018-07-26T15:56:26+00:00">1381</issue>
    <ticket>860</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>860-c0f3bfe5</id>
    <lines>38-40</lines>
    <body>Modify the stakeholder where the payments are made and use method Speed.bonus(...) to pay the user a bonus in minutes if they completed the job in less than 48 hours.</body>
    <file>src/main/java/com/zerocracy/pmo/Speed.java</file>
    <author>amihaiemil</author>
    <email>amihaiemil@gmail.com</email>
    <time>2018-07-08T13:58:22Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1483">1483</issue>
        <ticket>1381</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1381-932a555e</id>
        <lines>28-31</lines>
        <body>Create a test for checking that the speed bonus for REV tasks is calculated correctly, and validate that for both DEV and REV tasks when quality is good, the bonus for speed and quality accumulates correctly.</body>
        <file>src/test/resources/com/zerocracy/bundles/add_speed_bonus/_after.groovy</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-07-26T15:37:45Z</time>
        <children/>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1484">1484</issue>
        <ticket>1381</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1381-6fac770c</id>
        <lines>58-62</lines>
        <body>This message has to be moved to the final message in make_payment.groovy stakeholder. Leaving it here adds a pointless message in issue tracker, we could reduce it into a single message that contains all the reasons for bonuses (QA and speed). For that you'll most probably need to create a new parameter that can be retrieved during the payment.</body>
        <file>src/main/groovy/com/zerocracy/stk/pm/in/orders/finish_order.groovy</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-07-26T15:37:45Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1385">1385</issue>
    <ticket>1037</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1037-a0e84825</id>
    <lines>78-80</lines>
    <body>Xocument is not thread safe. Because of this, multiple threads modifying the same file can result in race conditions. Let's fix the concurrency issue, then enable this unit test.</body>
    <file>src/test/java/com/zerocracy/XocumentTest.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-07-09T02:45:35Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1388">1388</issue>
    <ticket>926</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>926-86594440</id>
    <lines>53-56</lines>
    <body>we should synchronize elected, but not assigned jobs between different projects, because one project may elect a user as a performer for few jobs and another project may elect same user before jobs from first project will be assigned to the performer.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/staff/elections/elect_performer.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-07-09T14:56:33Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1389" closed="2018-10-20T13:09:07+00:00">1389</issue>
    <ticket>926</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>926-0d29fc00</id>
    <lines>96-100</lines>
    <body>Refactor this method - extract to some class, because it's used in two different places: here and in VsNoRoom, this class should encapsulate farm or pmo and accept login as argument and should get this information from policy, not hard code it.</body>
    <file>src/main/java/com/zerocracy/pm/staff/votes/VsOverElected.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-07-09T14:56:33Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1435" closed="2018-10-20T13:09:08+00:00">1435</issue>
    <ticket>1433</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1433-9a8228e9</id>
    <lines>33-36</lines>
    <body>VsOverElected may cause dead-locks in some cases. Looks like lock for election.xml file can be acquired but never released for unknown reason (not sure about it). After fix also uncomment line in elect_performer script with this Votes.</body>
    <file>src/main/java/com/zerocracy/pm/staff/votes/VsOverElected.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-16T15:06:34Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1448" closed="2018-08-13T09:35:46+00:00">1448</issue>
    <ticket>1414</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1414-beb41dc9</id>
    <lines>35-41</lines>
    <body>Cleanup of stale jobs is disabled for QA roles. This is because QA jobs are not in Orders, but in Reviews. This causes a bug where QA agenda is removed even though the jobs have not completed review yet. For QA roles, get the list of jobs from Reviews.findByInspector(). Let's also add a Bundles test case where delete_stale_jobs should clean up jobs that are not in Reviews and retains those that are still awaiting verdict.</body>
    <file>src/main/groovy/com/zerocracy/stk/pmo/agenda/delete_stale_jobs.groovy</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-07-19T03:05:09Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1458" closed="2019-01-03T08:14:23+00:00">1458</issue>
    <ticket>1193</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1193-ee91f3f9</id>
    <lines>19-22</lines>
    <body>When https://github.com/zerocracy/datum/issues/375 is done we should refactor this template to display debts table with Job/Project | Added | Amount. Where job should be a job number with a link to the issue/PR, and amount should include both cash value and minutes (as close as possible to agenda table).</body>
    <file>src/main/resources/xsl/profile.xsl</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-07-21T17:16:40Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1460">1460</issue>
    <ticket>1395</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1395-2f0f55eb</id>
    <lines>39-41</lines>
    <body>This assertion fails because Wbs.role(job, role) is not working in `add_job_to_wbs` groovy script for this test case. We need to understand why it fails and fix it.</body>
    <file>src/test/resources/com/zerocracy/bundles/close_job_with_quality_review/_after.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-07-22T10:43:56Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1463" closed="2018-07-25T08:34:19+00:00">1463</issue>
    <ticket>773</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>773-d4aeb93a</id>
    <lines>50-53</lines>
    <body>Use Amazon SQS instead of xml files for claims. Let's convert `Claims` to interface and add two implementations: one for SQS and another for xml file (we need to use xml claims in bundle tests).</body>
    <file>src/main/java/com/zerocracy/pm/Claims.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-22T13:19:38Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1464" closed="2018-08-02T13:44:48+00:00">1464</issue>
    <ticket>773</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>773-91937673</id>
    <lines>29-34</lines>
    <body>Use long-polling for claims instead of reactions. We are going to split application into web part and worker parts, so we have to submit new claims in both parts, but receive them only in worker parts via claims polling. Worker app will not be physically connected to web part, so web part will not be able to notify worker app about new claims as now via `Flush`es.</body>
    <file>src/main/java/com/zerocracy/farm/reactive/Flush.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-22T13:19:38Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1533" closed="2018-09-17T07:02:37+00:00">1533</issue>
        <ticket>1464</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1464-5424b9c6</id>
        <lines>29-34</lines>
        <body>Get rid of flushes and refactor the code to use similar logic for unit-tests and web app. Now web-app logic located in ClaimsRoutine class + com.zerocracy.claims.proc classes, ClaimsRoutine was designed to use claims long-polling with Amazon SQS, but unit tests uses claims.xml files and Flush implementations with RvFarm class.</body>
        <file>src/main/java/com/zerocracy/farm/reactive/Flush.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-08-02T13:43:20Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1465" closed="2018-08-23T20:51:26+00:00">1465</issue>
    <ticket>773</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>773-13f5d30a</id>
    <lines>29-32</lines>
    <body>Use external synchronization of items instead of java locks. There will be multiple instances of worker apps which can access same resources from different machines. We need to invent something to be able to synchronize access to files for all worker instances.</body>
    <file>src/main/java/com/zerocracy/farm/sync/SyncItem.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-22T13:19:38Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1644" closed="2018-09-02T06:38:46+00:00">1644</issue>
        <ticket>1465</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1465-4595fca1</id>
        <lines>26-29</lines>
        <body>Implement external locking mechanism based in MongoDB. The lock must be set to some resource in a table where resource path and name must be set, along with time of lock. Then remove expects from MongoDBLockTest.</body>
        <file>src/main/java/com/zerocracy/farm/sync/MongoDbLock.java</file>
        <author>Paulo Lobo</author>
        <email>pauloeduardolobo@gmail.com</email>
        <time>2018-08-22T01:44:25Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1680" closed="2018-10-20T13:09:10+00:00">1680</issue>
            <ticket>1644</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1644-df92de1b</id>
            <lines>29-36</lines>
            <body>Implement external locking mechanism based in MongoDB. Implement tests for methods in MongoDbLock (stacktrace(), lock(), lockInterruptibly(), tryLock(), tryLock(final long time, final TimeUnit unit), unlock() and newCondition()). These methods must behave as specified in in java 8 java.util.concurrent.locks.Lock interface, except stacktrace() which must behave like SmartLock.stacktrace(). Then implement these methods so they'll pass all the tests below.</body>
            <file>src/test/java/com/zerocracy/farm/sync/MongoDbLockTest.java</file>
            <author>rultor</author>
            <email>me@rultor.com</email>
            <time>2018-09-02T06:20:35Z</time>
            <children/>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/zerocracy/farm/issues/1681" closed="2018-10-20T13:09:11+00:00">1681</issue>
            <ticket>1644</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1644-7ed092c3</id>
            <lines>84-88</lines>
            <body>Implement external locking mechanism based in MongoDB. According to javas Lock interface, when there is already a lock on given resource, it should suspend the thread until it is possible to do a lock. This class is not implementing this behavior on lock() method. Implement this so this lock should block until the resource is unlocked.</body>
            <file>src/main/java/com/zerocracy/farm/sync/MongoDbLock.java</file>
            <author>rultor</author>
            <email>me@rultor.com</email>
            <time>2018-09-02T06:20:35Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1466">1466</issue>
    <ticket>733</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>733-0f01ea8f</id>
    <lines>76-82</lines>
    <body>Prevent StkSafe from swallowing exceptions generated in tests. It was discovered in #733 that StkSafe is treating all exceptions requests in the same way: thay're wrapped in an notify claim and processed. This causes tests to never fail when throwing exceptions: the exception which should break the test is treated like a notification and does not breaks it. We should create a way to avoid this exception swallowing.</body>
    <file>src/main/java/com/zerocracy/farm/StkSafe.java</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-07-20T13:12:20Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1480" closed="2018-08-01T16:53:45+00:00">1480</issue>
    <ticket>1436</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1436-66b5a846</id>
    <lines>27-29</lines>
    <body>Add SQS claims implementation and integration test to verify that it's working, then use it for production code in `ClaimsOf` and use `ClaimsXml` for tests.</body>
    <file>src/main/java/com/zerocracy/pm/Claims.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-07-24T06:55:08Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1532" closed="2018-08-02T13:44:49+00:00">1532</issue>
        <ticket>1480</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1480-7db2565f</id>
        <lines>39-41</lines>
        <body>Prevent claims duplication, let's add claim's hash based on it's content to claims attributes, save it in footprint and check before processing new claim.</body>
        <file>src/main/java/com/zerocracy/pm/ClaimsSqs.java</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-08-02T07:23:57Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1492">1492</issue>
    <ticket>1214</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1214-eb4dd687</id>
    <lines>58-62</lines>
    <body>0crat is assigning closed jobs. It happens when the issue was closed in github but the Close Job flow fails for some reason and the job does not leave WBS. Assure that we are iterating only in open issues when electing performer and uncomment _after.groovy tests in dont_assign_job_closed bundle.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/staff/elections/elect_performer.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-07-27T17:11:24Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1508" closed="2019-01-02T18:08:38+00:00">1508</issue>
    <ticket>1218</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1218-6ccd8af1</id>
    <lines>40-44</lines>
    <body>refresh_awards.groovy is submitting claims for all users in Zerocracy even if reputation didn't change. Fix refresh_awards.groovy so it only submit claims when there is a reputation change for user and uncomment tests in dont_refresh_awards_when_no_change/_after.groovy</body>
    <file>src/main/groovy/com/zerocracy/stk/pmo/awards/refresh_awards.groovy</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-07-28T02:04:52Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1513">1513</issue>
    <ticket>1099</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1099-6ff2eb5a</id>
    <lines>22-24</lines>
    <body>After upgrading datum, version to 0.62.3 this test stopped working (the only changes were adding of `added` field to verbosity, speed and blanks). Find out why and fix it.</body>
    <file>src/test/resources/com/zerocracy/bundles/refresh_person_job_count_on_agenda_update/_after.groovy</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-07-29T15:09:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1519" closed="2019-03-14T09:31:19+00:00">1519</issue>
    <ticket>1233</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1233-8e345196</id>
    <lines>56-60</lines>
    <body>Verbosity.add is throwing an exception when trying to add verbosity to a job more than once. We should check verbosity before adding a new element and override the previous value to prevent this exception being thrown. After the fix, test the code removing ignore tag from VerbositTest.overrideVerbosity.</body>
    <file>src/main/java/com/zerocracy/pmo/Verbosity.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-01T09:54:38Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1541">1541</issue>
    <ticket>575</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>575-5d95eb0b</id>
    <lines>33-35</lines>
    <body>This rank just check that issue is milestoned, but it should check it's due-date param, it can be obtained from milestones.xml by repo coordinates and milestone title.</body>
    <file>src/main/java/com/zerocracy/pm/staff/ranks/RnkGithubMilestone.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-08-01T11:56:52Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1547">1547</issue>
    <ticket>1390</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1390-12031a91</id>
    <lines>53-57</lines>
    <body>Adjust call below to Quota.over with proper message and create test case for the scenario it returns true. The PR https://github.com/zerocracy/farm/pull/1501 introduced this change on Quota.over and has example of its adjustment and test for the case of over use in AcceptInvitations.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/comm/notify_in_github.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-04T10:10:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1548">1548</issue>
    <ticket>1390</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1390-d5feac23</id>
    <lines>150-154</lines>
    <body>Adjust call to Quota.over with proper message and create test case for the scenario it returns true. PR https://github.com/zerocracy/farm/pull/1501 introduced this change on Quota.over and has example of its adjustment and test for AcceptInvitations.</body>
    <file>src/main/java/com/zerocracy/radars/github/TkGithub.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-04T10:10:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1564" closed="2018-08-12T15:13:40+00:00">1564</issue>
    <ticket>1553</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1553-3bca3cf4</id>
    <lines>63-77</lines>
    <body>This 'stylesheet' is not merely a document transform, but in fact the central mechanism for determining the result of the election. Not only is this approach confusing and convoluted, it's also very inefficient, since we have to do a XSL transform each and every time we want to determine the result of an election. Let's remove this XSL transform, and replace it with a programmatic version. What I am thinking is to create an inner type, Elections.Result, representing a single election. It should contain the following information: 1) "elected", true if at least one person has a total non-zero vote 2) "winner", username of person with the highest non-zero vote. 3) "reason", the reason why the winner won. We should replace all usages of XSL Stylesheet with Elections.Result. Let's prioritize implementing "elected", since the repeated usage of this in assign_performer.groovy and elect_performer.groovy is not scalable for increasingly big projects.</body>
    <file>src/main/java/com/zerocracy/pm/staff/Elections.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-08-07T03:35:15Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1583" closed="2018-08-12T18:21:58+00:00">1583</issue>
        <ticket>1564</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1564-96d4a109</id>
        <lines>36-38</lines>
        <body>Change this stakeholder to handle 'Performer was elected' claims instead of 'Ping' and assign elected performer from 'login' param to job from 'job' claim param.</body>
        <file>src/main/groovy/com/zerocracy/stk/pm/in/orders/assign_performer.groovy</file>
        <author>g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-08-09T17:12:47Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1584">1584</issue>
    <ticket>1539</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1539-240ed028</id>
    <lines>47-49</lines>
    <body>Create a FakeMessage and use it each test where a Message is used. An example is in staysAtOneIfBlocked, remove Mockito mock and use the newly created fake message.</body>
    <file>src/test/java/com/zerocracy/claims/proc/CountingProcTest.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-08-10T15:34:44Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1586">1586</issue>
    <ticket>1500</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1500-e289d746</id>
    <lines>581-586</lines>
    <body>Code warnings in groovy scripts doesn't affect build process. Let's try to fail build if any warning in groovy code was found. It may be an option in gmaven plugin like 'treat warnings as errors' or some codenarc option. We need to prevent such mistakes as in #1500 bug.</body>
    <file>pom.xml</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-08-12T20:51:11Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1589" closed="2018-08-13T11:40:33+00:00">1589</issue>
    <ticket>1567</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1567-45090e1f</id>
    <lines>134-139</lines>
    <body>This method is too complicated at the moment. Let's separate the functionality of extending validity of messages into another class somehow. Note, one complication: we need to keep track of which messages have already been sent by AsyncProc for processing (since they are deleted from the queue very soon after). After refactoring let's remove any unnecessary suppressions here.</body>
    <file>src/main/java/com/zerocracy/claims/proc/AsyncProc.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-08-13T08:27:30Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1595">1595</issue>
    <ticket>1172</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1172-7bc2550f</id>
    <lines>26-33</lines>
    <body>Add performance metrics: add measurement of time taken to execute Measured stakeholder. Time taken must be saved to mongodb instance on database "metrics", collection "time_taken". Fields to be saved: "stakeholder" with stakeholder class qualified name, "claim_type" with claim type, "date_time" with datetime of execution, "time_taken" with time taken to stakeholder process claim. After this decorate StkRuntime so it could really collect the metrics and fix test in MeasuredText .collectTimeTakenToExecute if needed.</body>
    <file>src/main/java/com/zerocracy/Measured.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-14T07:34:40Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1596">1596</issue>
    <ticket>1172</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1172-adac8449</id>
    <lines>34-37</lines>
    <body>Add performance metrics: add measurement of other performance metrics (track S3 artifacts download, xml document modifications, footprint access) and save the to mongodb under database "metrics".</body>
    <file>src/main/java/com/zerocracy/Measured.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-14T07:34:40Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1606" closed="2018-08-22T15:06:08+00:00">1606</issue>
    <ticket>1534</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1534-c808318e</id>
    <lines>29-30</lines>
    <body>For 'Ping' claims, we should add expiry attribute to SQS messages. The expiry period should be 5 minutes after the claim is created.</body>
    <file>src/main/java/com/zerocracy/claims/proc/ExpiryProc.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-08-14T11:50:27Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1608">1608</issue>
    <ticket>1077</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1077-1ed65c72</id>
    <lines>22-26</lines>
    <body>Job is not removed from agenda on repo rename. Some jobs are not being removed from agenda. In one of the cases, when a repo is renamed the jobs are not removed from the agenda. After fixing this problem uncomment the test below to assure that the job is being correctly removed</body>
    <file>src/test/resources/com/zerocracy/bundles/remove_from_agenda_on_repo_rename/_after.groovy</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-15T19:22:59Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1610">1610</issue>
    <ticket>512</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>512-6c0350fb</id>
    <lines>82-85</lines>
    <body>0crat is displaying an error page when trying to use PsByFlag=PsGithub parameter. This test is triggering this behavior. Find what is causing it and fix it so this exception screen is not displayed anymore and un-ingnore the test below.</body>
    <file>src/test/java/com/zerocracy/tk/TkAppTest.java</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-16T14:52:15Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1620">1620</issue>
    <ticket>1098</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1098-b2de21b6</id>
    <lines>25-29</lines>
    <body>Wire pulse information from /pulse into Pulse as Ticks. See implementation in rultor project on how to initalize Pulse objetcs in program start and how to make it Tick every minute to collect execution data. Then add SVG created in TkTicks to start page (or wherever the pulse bar have to be shown).</body>
    <file>src/main/java/com/zerocracy/pulse/Pulse.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-20T13:59:19Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1621">1621</issue>
    <ticket>1545</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1545-87cf0a16</id>
    <lines>27-29</lines>
    <body>Implement BatchClaims for sending claims in batch. Assure that maximum batch size is 256KB for each batch and after implementation remove expected exception from tests in BatchClaimsTest.</body>
    <file>src/main/java/com/zerocracy/claims/BatchClaims.java</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-17T04:35:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1622" closed="2018-08-24T16:58:12+00:00">1622</issue>
    <ticket>1545</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1545-78dce506</id>
    <lines>33-35</lines>
    <body>We should use Fake classes instead of Mocks. So, implement another way of testing BatchClaims behavior in this test without relying on mockito and mocking.</body>
    <file>src/test/java/com/zerocracy/claims/BatchClaimsTest.java</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-17T19:03:25Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1640" closed="2020-05-07T06:51:39+00:00">1640</issue>
    <ticket>1159</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1159-ca75469b</id>
    <lines>42-44</lines>
    <body>Modify add method to accept user that created the given Wbs item and use it in stakeholders (and tests). All Wbs items should have an author (see zerocracy/datum#383).</body>
    <file>src/main/java/com/zerocracy/pm/scope/Wbs.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-23T17:47:49Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/2279">2279</issue>
        <ticket>1640</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1640-5874bcfa</id>
        <lines>30-34</lines>
        <body>Implement wbs.add(job, author) and wbs.author(job) methods to change wbs.add() method behavior (every wbs item should have an author). The method wbs.add(job) must be deleted when wbs.add(job, author) is implemented. After this, remove addsAndRemovesJobs() test and replace it by addsAndRemovesJobWithAuthor() removing its ignore annotation.</body>
        <file>src/test/java/com/zerocracy/pm/scope/WbsTest.java</file>
        <author>paulodamaso</author>
        <email>pauloeduardolobo@gmail.com</email>
        <time>2020-05-03T15:54:57Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1641">1641</issue>
    <ticket>1159</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1159-ce5d7ee6</id>
    <lines>34-37</lines>
    <body>Change implementation of this Take to print the Wbs data created by user from request and format it using an xsl file. To do that you will need to extend `Wbs` with a method that retrieves only those elements that were created by user (see zerocracy/datum#383).</body>
    <file>src/main/java/com/zerocracy/tk/profile/TkUserWbs.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-23T17:47:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1643">1643</issue>
    <ticket>1102</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1102-4d6d1bcf</id>
    <lines>22-24</lines>
    <body>0crat should not add job to WBS and create order if issue is already closed. Correct add_job_to_wbs.groovy so closed jobs aren't added to WBS. Then uncomment this test.</body>
    <file>src/test/resources/com/zerocracy/bundles/dont_add_closed_job_to_wbs/_after.groovy</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-19T03:52:39Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1647" closed="2018-08-27T13:29:43+00:00">1647</issue>
    <ticket>921</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>921-1530b8b3</id>
    <lines>22-25</lines>
    <body>0crat ignores debt on new payment. Change make_payment.groovy so we check if user already has some debts on new payment. If he/she already has, fail the payment and add it to debts. After this, uncomment this test to assure that payment has been added to debts.</body>
    <file>src/test/resources/com/zerocracy/bundles/add_payment_to_debts_if_has_debt/_after.groovy</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-21T03:57:37Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1648" closed="2018-08-27T19:13:51+00:00">1648</issue>
    <ticket>1346</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1346-59918b04</id>
    <lines>44-50</lines>
    <body>Incorrect zold extra payments. Zold payments are not including shares part of the payment, just cash part. Correct this and change send_zold so it emits a notification of payment even when testing ('Notify test' claim) so we can assure that the correct value was calculated. Then, uncomment \send_correct_zold_value\_after.groovy which checks footprint for these notifications in this bundle test. See #1346 for the correct formula for calculating zold value.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/cost/funding/send_zold.groovy</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-24T02:57:44Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1657" closed="2019-03-21T04:35:19+00:00">1657</issue>
    <ticket>1333</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1333-6882f9fb</id>
    <lines>51-53</lines>
    <body>Board page is slow, load all project properties present in board page in catalog.xml similar it is made in team page. After this, uncomment test catalogHasBoardPageInfo</body>
    <file>src/test/java/com/zerocracy/pmo/CatalogTest.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-08-27T07:39:29Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1952" closed="2019-03-21T05:33:06+00:00">1952</issue>
        <ticket>1657</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1657-8629e708</id>
        <lines>45-49</lines>
        <body>Implement stakeholders to update catalog project properties such as architect, members, jobs, orders, cash, languages. Languages should be loaded from github repository. This stakeholder should be started once a day. All update should be performed in a transaction.</body>
        <file>src/main/java/com/zerocracy/tk/TkBoard.java</file>
        <author>@g4s8</author>
        <email>g4s8.public@gmail.com</email>
        <time>2019-03-20T18:29:56Z</time>
        <children>
          <puzzle alive="true">
            <issue href="https://github.com/zerocracy/farm/issues/1954">1954</issue>
            <ticket>1952</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>1952-ecca0a03</id>
            <lines>59-61</lines>
            <body>Right now we are displaying all languages for all repositories. We should only display the top 4 languages (ranked by bytes of code, as returned by Github) across all project repos.</body>
            <file>src/main/groovy/com/zerocracy/stk/pmo/catalog/update_catalog_props.groovy</file>
            <author>Kirill</author>
            <email>g4s8.public@gmail.com</email>
            <time>2019-03-21T05:29:37Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1953">1953</issue>
        <ticket>1657</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1657-7708bb25</id>
        <lines>38-41</lines>
        <body>Board implementation was changed, let's updated this tests according new implementation based on `0.64` datum update which changed catalog.xml format with new catalog properties.</body>
        <file>src/test/java/com/zerocracy/tk/TkBoardTest.java</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2019-03-20T18:29:56Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1658" closed="2018-11-21T10:49:12+00:00">1658</issue>
    <ticket>1536</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1536-7b5e8444</id>
    <lines>22-25</lines>
    <body>Project is not paying adviser when being funded. Correct fund_by_stripe.groovy and donate.groovy to send a payment of 4% of the amount of funding to the project advisor on every funding operation. Then uncomment these tests to make sure that these payments are happening.'</body>
    <file>src/test/resources/com/zerocracy/bundles/pays_adviser_on_funding/_after.groovy</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-24T20:37:55Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1790" closed="2018-11-22T07:04:41+00:00">1790</issue>
        <ticket>1658</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1658-f3d9a105</id>
        <lines>41-43</lines>
        <body>We should allow negative balance only to PMO project. If any other project tries to submit a transaction which changes the balance to negative value we should fail this transaction.</body>
        <file>src/main/java/com/zerocracy/pm/cost/Ledger.java</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-11-21T10:48:35Z</time>
        <children/>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1791">1791</issue>
        <ticket>1658</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1658-5dca0572</id>
        <lines>88-90</lines>
        <body>Add adviser info to policy and provide amount of adviser payments there, then replace current constants which are used to calculate the payment with `Par` objects.</body>
        <file>src/main/groovy/com/zerocracy/stk/pm/cost/funding/fund_by_stripe.groovy</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-11-21T10:48:35Z</time>
        <children/>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1792">1792</issue>
        <ticket>1658</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1658-62012fd9</id>
        <lines>22-24</lines>
        <body>It's not possible to test ledger related code because it uses PgLedger Postgres implementation, let's extract interface of PgLedger and create fake ledger object to use it for testing. Then uncomment this test.</body>
        <file>src/test/resources/com/zerocracy/bundles/pays_adviser_on_funding/_after.groovy</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2018-11-21T10:48:35Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1669" closed="2019-07-25T13:00:32+00:00">1669</issue>
    <ticket>1570</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1570-01eb7ff8</id>
    <lines>31-36</lines>
    <body>cleanup_comments often fails. This happens because we are trying to remove from github some comment that had already been deleted before using github interface. We must test if the comment exists in github before trying to delete it. After the correction, uncomment tests in /cleanup_comments/_after.groovy. Don't forget to remove the lines that skip this stakeholder in test mode too so we can test its behavior.</body>
    <file>src/main/groovy/com/zerocracy/stk/internal/cleanup_comments.groovy</file>
    <author>Paulo Lobo</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2018-08-27T18:07:28Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1670" closed="2018-10-20T13:09:12+00:00">1670</issue>
    <ticket>1663</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1663-4d268a0e</id>
    <lines>24-26</lines>
    <body>Elections.remove is not working for this test, it's called in `remove_stale_elections` but doesn't affect target file in this test. Let's fix it and uncomment this test.</body>
    <file>src/test/resources/com/zerocracy/bundles/remove_invalid_elections/_after.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-08-27T16:19:57Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1687" closed="2019-03-21T04:35:21+00:00">1687</issue>
    <ticket>930</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>930-ecca0a03</id>
    <lines>188-190</lines>
    <body>Right now we are displaying all languages for all repositories. We should only display the top 4 languages (ranked by bytes of code, as returned by Github) across all project repos.</body>
    <file>src/main/java/com/zerocracy/tk/TkBoard.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-09-03T04:59:38Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1692" closed="2019-08-06T10:29:37+00:00">1692</issue>
    <ticket>1332</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1332-94d9282c</id>
    <lines>66-71</lines>
    <body>After zerocracy/datum#386 is done remove below filtering based on Awards below and get the data directly from people.xml file. Also people.xml needs to be updated with "active=true" when given person receives any award, and when there is no reward for the last 90 days, we should automatically updated people.xml with "active=false".</body>
    <file>src/main/java/com/zerocracy/tk/TkTeam.java</file>
    <author>Krzysztof Krason</author>
    <email>Krzysztof.Krason@gmail.com</email>
    <time>2018-09-06T09:05:04Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1705" closed="2018-10-20T13:09:13+00:00">1705</issue>
    <ticket>1347</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1347-5a27c21a</id>
    <lines>7-11</lines>
    <body>Call this script from maven build (maybe on `process-test-resources` if possible), the execution of this script should be enabled with maven profile, e.g.: `mvn process-test-resources -Pupgrade-bundles`. Note: this script depends on compiled farm classes, such as Xocument, Farm, so it's required to reference farm classes somehow before run.</body>
    <file>upgrade_bundles.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-09-17T06:44:53Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/1762">1762</issue>
        <ticket>1705</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1705-5eef677d</id>
        <lines>152-156</lines>
        <body>Xocument writes upgraded xml files with formatting incompatible with xcop validation. When upgrade-bundles profile is activated it results in xcop errors in the upgraded files. After this has been resolved enable upgrade-bundles profile in rultor and travis builds.</body>
        <file>src/main/java/com/zerocracy/Xocument.java</file>
        <author>Krzysztof Krason</author>
        <email>Krzysztof.Krason@gmail.com</email>
        <time>2018-09-23T10:19:30Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1706">1706</issue>
    <ticket>1347</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1347-214c7ed4</id>
    <lines>61-66</lines>
    <body>Xocument is the most slow part of the system, especially in bundle tests: bootstrap of a new file can take few hundreds ms to complete (in BundleTests too many new files to bootstrap). Also there are too many `modify` calls, which can take few seconds in sum for one bundle test. Let's investigate how to speed up this class and discuss the solution.</body>
    <file>src/main/java/com/zerocracy/Xocument.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-09-17T06:44:53Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1871" closed="2019-01-28T10:48:38+00:00">1871</issue>
        <ticket>1706</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1706-b3b081d2</id>
        <lines>61-63</lines>
        <body>Find all usages of this method and replace them with acq(file, mode) methods with correct access mode, when all done, remove this default method.</body>
        <file>src/main/java/com/zerocracy/Project.java</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2019-01-27T19:27:06Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/zerocracy/farm/issues/1872" closed="2019-01-28T10:48:40+00:00">1872</issue>
        <ticket>1706</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>1706-2d297284</id>
        <lines>30-31</lines>
        <body>Implement ReadWriteLock in PgLock and use it here also add many tests to verify that postgres locks are working correctly.</body>
        <file>src/main/java/com/zerocracy/farm/sync/PgLocks.java</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2019-01-27T19:27:06Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1763">1763</issue>
    <ticket>1396</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1396-ad84ffab</id>
    <lines>26-28</lines>
    <body>This stakeholder was disabled, because `Elections` class was removed. Let's find another way to check the lack of staff to notify a project about it.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/staff/hint_when_lack_of_staff.groovy</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-09-19T10:24:42Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <ticket>1662</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1662-c5598e85</id>
    <lines>35-41</lines>
    <body>Ledger is really slow when it grows big. Performance degrades linearly (O(n)) with the size of the ledger due to the need to perform ID lookups. The slowdown is roughly 50ms per 1000 entries. See https://github.com/zerocracy/farm/issues/1662#issuecomment-416454156 for details. Let's move away from using XML and record entries using Postgres. For more info see https://github.com/zerocracy/farm/issues/1662#issuecomment-422759929</body>
    <file>src/main/java/com/zerocracy/pm/cost/Ledger.java</file>
    <author>Carlos Miranda</author>
    <email>carlosmiranda@users.noreply.github.com</email>
    <time>2018-09-21T06:52:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1764">1764</issue>
    <ticket>1662</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1662-8f6d00af</id>
    <lines>46-48</lines>
    <body>Run this test with embedded postgres installation on Travis and Rultor. Embedded database should be started before tests and updated with liquibase changelog from maven.</body>
    <file>src/test/java/com/zerocracy/pm/cost/PgLedgerITCase.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-09-27T06:02:13Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1765" closed="2018-11-22T18:55:31+00:00">1765</issue>
    <ticket>1162</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1162-5bbf3bac</id>
    <lines>40-42</lines>
    <body>In continuation of #1162, add a test to ensure that a payment results on points being awarded. Once this is done, add a todo to continue the work on the the "Make Payment" started with #1162.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/cost/make_payment.groovy</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-10-05T03:18:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1766">1766</issue>
    <ticket>1731</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1731-c06199b7</id>
    <lines>57-59</lines>
    <body>ClaimsRoutine is too complex and not testable, let's refactor it to few simpler classes and unit test them if possible.</body>
    <file>src/main/java/com/zerocracy/claims/ClaimsRoutine.java</file>
    <author>g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-10-05T06:34:22Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1767">1767</issue>
    <ticket>1711</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1711-5de0b041</id>
    <lines>48-50</lines>
    <body>Provide a single Mongo database instance (process) for all tests. The ExtMongo launches a new Mongo database process every time it is requested for the testing purposes.</body>
    <file>src/main/java/com/zerocracy/entry/ExtMongo.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-10-15T09:28:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1768">1768</issue>
    <ticket>1711</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1711-0d4ee784</id>
    <lines>51-55</lines>
    <body>Provide a documentation on how to configure an external (local or remote) Mongo database authorization. It is not clear how to do this properly. If a Mongo database security.authorization option is turned on, it is impossible to pass the authentication by running associated unit tests.</body>
    <file>src/main/java/com/zerocracy/entry/ExtMongo.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-10-15T09:28:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1769">1769</issue>
    <ticket>1711</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1711-a20e4cad</id>
    <lines>56-58</lines>
    <body>Fix up failing cases when an external Mongo database is specified for tests. Under these conditions the Mongo database data is not get cleared every time a new database related test is started.</body>
    <file>src/main/java/com/zerocracy/entry/ExtMongo.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-10-15T09:28:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1780">1780</issue>
    <ticket>1779</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1779-30eba46a</id>
    <lines>94-97</lines>
    <body>We are ignoring ping claims duplicates due to Sentry over loading, ping duplicates are not critical, but we need to uncomment this check (!claim.type().equals("Ping")) after duplicate issue fix in #1770.</body>
    <file>src/main/java/com/zerocracy/claims/Footprint.java</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-10-29T08:21:14Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1796">1796</issue>
    <ticket>1162</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1162-41dbc93d</id>
    <lines>43-44</lines>
    <body>In continuation of #1162, add a test to ensure that a payment results on points being awarded. Also add tests for transfer_shares and pay_cash stakeholders.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/cost/make_payment.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-11-22T18:42:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1819" closed="2019-02-26T19:50:45+00:00">1819</issue>
    <ticket>1815</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1815-c9e7ebc3</id>
    <lines>136-139</lines>
    <body>We're loading all transactions here, it would be better to implement lazy loading for transaction pages and return iterable which will trigger next page loading when previous pages are read.</body>
    <file>src/main/java/com/zerocracy/pmo/banks/coinbase/Coinbase.java</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2018-12-07T16:20:44Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1893">1893</issue>
    <ticket>1892</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1892-81b01170</id>
    <lines>26-28</lines>
    <body>This test is failing on rultor but is working fine on local and on travis CI. It seems there is some issue with parallel test execution (may be I'm wrong about it, just a guess).</body>
    <file>src/test/resources/com/zerocracy/bundles/pr_assigns_performer/_after.groovy</file>
    <author>@g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-02-13T09:27:30Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/1905" closed="2019-04-09T09:42:30+00:00">1905</issue>
    <ticket>1775</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1775-79469cb7</id>
    <lines>30-32</lines>
    <body>Reimplement this class - it should return not constant set of users, but all users who has any role in PMO project and users who has QA role in Zerocracy project.</body>
    <file>src/main/java/com/zerocracy/pm/staff/GlobalInviters.java</file>
    <author>@g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-02-21T18:12:13Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1908">1908</issue>
    <ticket>1904</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1904-85820cd7</id>
    <lines>33-35</lines>
    <body>0crat often can't update agenda of performer on 'Start QA review' because failed to find the job in agenda. 0crat is responding with message "can't inspect" right in the ticket.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/qa/start_qa_review.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-02-22T08:56:10Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1922">1922</issue>
    <ticket>1753</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1753-e367fe73</id>
    <lines>74-78</lines>
    <body>It's a temporary workaround to use `login` as a name, because jcabi-github can't check that real name is present because of bug https://github.com/jcabi/jcabi-github/issues/1495 After fix `hasName` in jcabi-github uncomment the code above and remove name variable initialization.</body>
    <file>src/main/groovy/com/zerocracy/stk/pmo/profile/invite_friend.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-03-03T18:07:33Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1968">1968</issue>
    <ticket>1966</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1966-8492b125</id>
    <lines>375-379</lines>
    <body>Refactor wallet usage, wallet command was removed from chat bots, so we're sending all payments only via Zold WTS by Github username. So let's update datum and remove elements from 'people' scheme and remove it from farm then. Same for bank() method.</body>
    <file>src/main/java/com/zerocracy/pmo/People.java</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-03-29T18:41:20Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1989">1989</issue>
    <ticket>1897</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1897-424356db</id>
    <lines>47-50</lines>
    <body>MkPull.merge is not implemented in jcabi github library let's submit a bug to jcabi, wait for fix and remove this check for testing mode. MkPull.merge should change 'merged' boolean flag in pull JSON, see github docs. Also jcabi can implement Pull.Smart.merged() method to check that PR was merged.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/cost/pay_architect_for_pull_request.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-04-08T19:28:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/1996">1996</issue>
    <ticket>1507</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1507-c0ca2252</id>
    <lines>23-25</lines>
    <body>When implementing 1507 this test was broken because mock code was removed from `remove_stale_users` script. Let's implement this test in other way and not use mocking in stakeholder scripts.</body>
    <file>src/test/resources/com/zerocracy/bundles/upbcWp_remove_stale_users/_after.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-04-11T15:41:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/2049">2049</issue>
    <ticket>2030</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>2030-8edd287a</id>
    <lines>48-54</lines>
    <body>Reimplement this stakeholder in such way: it should react to 'Reputation was updated' for the user, and if it was less than 1024 but becomes greater than 1024 then kick out user from sandbox projects. If user decided to join sandbox project when he/she has more than 1024 reputation, then we should not kick out such user. Use 33.sandbox-rep-threshold instead of 1024 like in this stk.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/staff/roles/kickout_from_sandbox.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-05-24T15:58:28Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/2084" closed="2019-10-08T11:46:08+00:00">2084</issue>
    <ticket>1453</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1453-269b8f94</id>
    <lines>49-52</lines>
    <body>Add new command to handle `sandbox on|off` command in q-project.xml and stakeholder to change sandbox in catalog.xml via Catalog.sandbox(...) methods. This stakeholder should allow to change sandbox flag only to users with role in PMO.</body>
    <file>src/main/java/com/zerocracy/pmo/Catalog.java</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-05-30T14:35:15Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/2102">2102</issue>
    <ticket>1349</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>1349-1d1c3726</id>
    <lines>32-35</lines>
    <body>Remove application when user get the role in project (invited by ARC or PO), keep in mind, that user can be invited even he/she is not in the `applications.xml` list. Also, let's remove old application (older than one month), we can check it periodically every week.</body>
    <file>src/main/java/com/zerocracy/pm/staff/Applications.java</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-06-28T12:22:29Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/2165" closed="2019-10-14T12:54:22+00:00">2165</issue>
    <ticket>2150</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>2150-34dfa09b</id>
    <lines>32-37</lines>
    <body>- Lets introduce new `Farm`, `Project` and `Item` implementation which should check that `project.acq()` and `item.close()` are called on proper project thread (see this class for thread name pattern), then replace `SyncProject` with new implementation. It will trigger some design issues (like some stakeholders may access resources of different projects), so it should be solved before.</body>
    <file>src/main/java/com/zerocracy/claims/proc/ExecFor.java</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-10-09T12:40:33Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/2170">2170</issue>
        <ticket>2165</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>2165-34dfa09b</id>
        <lines>36-42</lines>
        <body>- Lets introduce new `Farm`, `Project` and `Item` implementation which should check that `project.acq()` and `item.close()` are called on proper project thread (see this class for thread name pattern), then replace `SyncProject` with new implementation. It will trigger some design issues (like some stakeholders may access resources of different projects), so it should be solved before.</body>
        <file>src/main/java/com/zerocracy/claims/proc/AsyncSink.java</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2019-10-14T12:51:35Z</time>
        <children/>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/zerocracy/farm/issues/2171">2171</issue>
        <ticket>2165</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>2165-6203cc2e</id>
        <lines>189-192</lines>
        <body>Some threads are getting terminated by someone from outside. More often PQ-PMO thread is interrupted. Most probably `Terminator` is the problem here. Let's fix this issue and remove this dirty hack from this object.</body>
        <file>src/main/java/com/zerocracy/claims/proc/ProjectQueue.java</file>
        <author>Kirill</author>
        <email>g4s8.public@gmail.com</email>
        <time>2019-10-14T18:39:24Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/zerocracy/farm/issues/2178" closed="2019-10-15T20:41:24+00:00">2178</issue>
    <ticket>2177</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>2177-1b35d377</id>
    <lines>32-36</lines>
    <body>Continue replacing `project.acq(file)` with explicit `project.acq(file, mode)`. When done, remove `default acq(file)` method from interface. Also, find a way to avoid unnecessary bootstrap on each access, since it's expensive read-write locking operation.</body>
    <file>src/main/java/com/zerocracy/Project.java</file>
    <author>@g4s8</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-10-15T19:09:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/2195" closed="2020-04-17T15:04:34+00:00">2195</issue>
    <ticket>2194</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>2194-2e5e4df3</id>
    <lines>63-67</lines>
    <body>Election is disabled for huge WBS (&gt; 50 items). Analyze the bottleneck of election performance, most probably it can be solved by caching some external resources, such as Github labels etc. Then optimize election process and enable it back.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/staff/elections/elect_performer.groovy</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2019-11-04T10:13:05Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/2203">2203</issue>
    <ticket>2202</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>2202-a6c7d53a</id>
    <lines>102-106</lines>
    <body>Fix JobAudit. It may complain about not existing issues. Most probably it counts only PR comments to find authors, but CR comments can be different entities in Github. After fix skip payment if any complaints exist.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/in/orders/finish_order.groovy</file>
    <author>Kirill</author>
    <email>g4s8.public@gmail.com</email>
    <time>2019-11-15T09:53:14Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/2204">2204</issue>
    <ticket>2051</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>2051-5324c0a4</id>
    <lines>52-56</lines>
    <body>Adding milestones which doesn't match the pattern '[a-z]{2}:[A-Z0-9a-z.\-#/]+' fail with exception on XML validation Validation happens inside com.jcabi.xml.StrictXML constructor, outside of this project's codebase. Un-ignore this test and remove comment after impediments are resolved.</body>
    <file>src/test/java/com/zerocracy/pm/time/MilestonesTest.java</file>
    <author>loro2</author>
    <email>oroszlany.lorant@gmail.com</email>
    <time>2019-10-26T10:06:32Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/zerocracy/farm/issues/2285">2285</issue>
    <ticket>2237</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>2237-76833224</id>
    <lines>33-38</lines>
    <body>Don't kickout graduates from sandbox projects Instead of removing the script, we must add a way to enable and disable a feature. Add Assume.feature method that will check for the feature name in a list of enabled features. Then change claims.xml type to `Ping hourly' to add dont_kickout_graduates_from_sandbox to tests execution.</body>
    <file>src/main/groovy/com/zerocracy/stk/pm/staff/roles/kickout_from_sandbox.groovy</file>
    <author>paulodamaso</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2020-05-03T17:47:23Z</time>
    <children/>
  </puzzle>
</puzzles>
