<?xml version="1.0"?>
<?xml-stylesheet href="/puzzles.xsl" type="text/xsl"?>
<puzzles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.0pdd.com/puzzles.xsd" version="BUILD" date="2026-01-08T01:28:59+00:00">
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-87e4ea39</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>49-50</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>The specification is still rather vague for now. I haven't written any assumptions here just yet. Let's write them down here as they come up.</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/261" closed="2018-01-29T13:54:54+00:00">261</issue>
    <id>1-422bba33</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>56-59</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>We should have a class diagram here. Ideally, we should have a tool that autogenerates the diagrams at deploy time from text data. However, we haven't decided yet on what this tool should be. Once that's been agreed upon, include the class diagrams right here.</body>
    <role>DES</role>
    <children>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>261-83965aa4</id>
        <ticket>261</ticket>
        <file>src/jekyll/_posts/2014/apr/2014-04-01-architecture.md</file>
        <lines>39-42</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Our data model class diagrams are now generated by Requs and included in the SRS. But, we also need to show the classes and interfaces that involve the other parts of the system, e.g. API infrastructure, UI classes, data persistence classes, etc.</body>
        <role>DES</role>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-0c2dd6e7</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>60-62</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Let's define the packaging structure of Thindeck. Describe the purposes of each package, the classes and resources that they contain, etc. Include a diagram showing how they are all related.</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-8220001d</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>68-71</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>So far we don't know what components we're going to use. Let's find out, and document those decisions here. Think about what we're going to need here - APIs for services that we're going to use, code libraries, web framework, etc.</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-21a7e6b2</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>77-79</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>We don't know what the system looks like when it's been deployed. Let's document that here. Stuff that we might need to think about: 1) Web hosting, 2) Code repository (Github, most likely), 3) Data hosting</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-4e36e10e</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>85-86</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Requs should automatically generate the use case sequence diagrams. It doesn't support it yet, but when it does, let's include that here.</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-0f336fa3</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>92-93</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>We need to identify the risks associated with this project. Let's document those risks in this section.</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-2ac4b43a</id>
    <ticket>1</ticket>
    <file>src/site/apt/architecture.apt.vm</file>
    <lines>99-100</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Let's document the architectural and design decisions in this section.</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>1-9b3a63bd</id>
    <ticket>1</ticket>
    <file>target/site/architecture.html</file>
    <lines>106-108</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Let's define the packaging structure of Thindeck. Describe the purposes of each package, the classes and resources that they contain, etc. Include a diagram showing how they are all related.</body>
    <role>DES</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>239-59e78fdb</id>
    <ticket>239</ticket>
    <file>src/jekyll/_posts/2014/jun/2014-06-24-component-view.md</file>
    <lines>162-165</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>How should we decide which hostname needs more containers? I'm not sure how to do it. Should be a combination of factors, including data from Meter. It's important to have at least three running containers for any repository.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>239-fde3f532</id>
    <ticket>239</ticket>
    <file>src/jekyll/_posts/2014/jun/2014-06-24-component-view.md</file>
    <lines>172-174</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>How we decide when to start/stop Tanks? I'm not sure how to make such a decision. Should be a combination of factors.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>136-94e0aa31</id>
    <ticket>136</ticket>
    <file>thindeck-cockpit/src/main/webapp/xsl/stats.xsl</file>
    <lines>41-41</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Create page 'Runtime stats'.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>136-59781d81</id>
    <ticket>136</ticket>
    <file>thindeck-cockpit/src/main/webapp/xsl/welcome.xsl</file>
    <lines>41-41</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Fill the text of 'how it work' part.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>136-1ffa9f73</id>
    <ticket>136</ticket>
    <file>thindeck-cockpit/src/main/webapp/xsl/welcome.xsl</file>
    <lines>47-47</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Fill the text of 'Pricing' part.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>136-360ecdbc</id>
    <ticket>136</ticket>
    <file>thindeck-cockpit/src/main/webapp/xsl/welcome.xsl</file>
    <lines>55-56</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Fill the text of 'Terms of service' part. It might need to create separate page for that</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>136-c30c85e1</id>
    <ticket>136</ticket>
    <file>thindeck-cockpit/src/main/webapp/xsl/welcome.xsl</file>
    <lines>63-64</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Fill the text of 'Terms of service' part. It should be here.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>256-65bbc8b6</id>
    <ticket>256</ticket>
    <file>src/jekyll/_posts/2014/apr/2014-04-01-architecture.md</file>
    <lines>125-126</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Let's document next set of decisions made, by removing ellipsis, from the above list.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>256-25d36e08</id>
    <ticket>256</ticket>
    <file>src/jekyll/_posts/2014/aug/2014-08-03-packaging.md</file>
    <lines>20-20</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Add a diagram showing how packages are related.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/312" closed="2018-01-29T13:54:55+00:00">312</issue>
    <id>293-c68bbdc4</id>
    <ticket>293</ticket>
    <file>src/main/java/com/thindeck/steps/LoadBalancer.java</file>
    <lines>40-44</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Let's implement a class Nginx that implements this interface. It should be able to connect via SSH to a server that has Nginx installed. At the minimum, we should be update the Nginx configuration of the server it's connected to. This class will be used primarily for the UpdateLB step. See https://github.com/yegor256/thindeck/issues/303 for more details.</body>
    <role>IMP</role>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/345" closed="2018-01-29T13:54:56+00:00">345</issue>
        <id>312-b2cbc220</id>
        <ticket>312</ticket>
        <file>src/main/java/com/thindeck/steps/Nginx.java</file>
        <lines>67-68</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Handle case when given host is not yet configured, need to create basic main.conf and hosts.conf files, and add them to ngnix.conf.</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>345-7e2a1db1</id>
            <ticket>345</ticket>
            <file>src/main/java/com/thindeck/steps/Nginx.java</file>
            <lines>69-72</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>When a *hosts.conf file is created for a new host, it should be included in nginx.conf so that it can be loaded by the Nginx server. See the explanation in in https://github.com/yegor256/thindeck/issues/347 for more details.</body>
            <role>IMP</role>
            <children/>
          </puzzle>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>345-8793b688</id>
            <ticket>345</ticket>
            <file>src/main/java/com/thindeck/steps/Nginx.java</file>
            <lines>73-79</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Let's handle the file *main.conf, which should contain the server configuration for a given host. The file name is prefixed by the host name, e.g. the host "www.example.com" will have the file name "www.example.com.hosts.conf". If the file doesn't exist yet, we should create it and include it in nginx.conf. If it already exists, we should update it. See the Javadoc above or the explanation in https://github.com/yegor256/thindeck/issues/347 for more details.</body>
            <role>IMP</role>
            <children/>
          </puzzle>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>345-06272fcc</id>
            <ticket>345</ticket>
            <file>src/main/java/com/thindeck/steps/Nginx.java</file>
            <lines>71-78</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Let's handle the file *main.conf, which should contain the server configuration for a given host. The file name is prefixed by the host name, e.g. the host "www.example.com" will have the file name "www.example.com.hosts.conf". If the file doesn't exist yet, we should create it and include it in nginx.conf. If it already exists, we should update it. See the Javadoc above or the explanation in https://github.com/yegor256/thindeck/issues/347 for more details. @checkstyle MultipleStringLiterals (300 lines)</body>
            <role>IMP</role>
            <children/>
          </puzzle>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>345-f56694d0</id>
            <ticket>345</ticket>
            <file>src/main/java/com/thindeck/steps/Nginx.java</file>
            <lines>66-72</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Let's handle the file *main.conf, which should contain the server configuration for a given host. The file name is prefixed by the host name, e.g. the host "www.example.com" will have the file name "www.example.com.main.conf". If the file doesn't exist yet, we should create it and include it in nginx.conf. If it already exists, we should update it. See the Javadoc above or the explanation in https://github.com/yegor256/thindeck/issues/347 for more details.</body>
            <role>IMP</role>
            <children/>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>312-375f6020</id>
        <ticket>312</ticket>
        <file>src/main/java/com/thindeck/steps/Nginx.java</file>
        <lines>69-70</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Handle case when given hosts is already in the load balancing group.</body>
        <role>IMP</role>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>312-6fb7b082</id>
        <ticket>312</ticket>
        <file>src/main/java/com/thindeck/steps/Nginx.java</file>
        <lines>71-71</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Add a test for this class.</body>
        <role>IMP</role>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>312-8be93123</id>
        <ticket>312</ticket>
        <file>src/test/java/com/thindeck/steps/NginxTest.java</file>
        <lines>51-52</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Create a test to check that ngnix process receives HUP signal, after configuration update.</body>
        <role>IMP</role>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/311" closed="2018-01-29T13:54:57+00:00">311</issue>
    <id>293-6e4765a2</id>
    <ticket>293</ticket>
    <file>src/test/java/com/thindeck/steps/UpdateLBTest.java</file>
    <lines>52-58</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>The test is currently ignored for two reasons: 1. The schema memo.xsd does not yet define the domain element. The test will fail because the XML validation will throw an exception. 2. UpdateLB is not yet implemented, which means the verify statements will fail even if the Memo XML is valid. Let's address these issues and enable this test. See Github issue https://github.com/yegor256/thindeck/issues/308 for further details.</body>
    <role>IMP</role>
    <children>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>311-b0b102b2</id>
        <ticket>311</ticket>
        <file>src/test/java/com/thindeck/steps/UpdateLBTest.java</file>
        <lines>52-54</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>The test is currently ignored because UpdateLB is not yet implemented. Let's implement it and enable the test. See Github issue https://github.com/yegor256/thindeck/issues/308 for further details.</body>
        <role>IMP</role>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/310" closed="2018-01-29T13:54:58+00:00">310</issue>
    <id>291-536f8d9b</id>
    <ticket>291</ticket>
    <file>src/test/java/com/thindeck/steps/ReadConfigTest.java</file>
    <lines>57-60</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>This test is currently ignored because ReadConfig is not yet implemented. Let's implement it, and have it read the info from the .thindeck.yml file of the repository root and update the Memo XML. See https://github.com/yegor256/thindeck/issues/291 for further details.</body>
    <role>IMP</role>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/369" closed="2018-01-29T13:54:59+00:00">369</issue>
        <id>310-82db8b8c</id>
        <ticket>310</ticket>
        <file>src/main/java/com/thindeck/steps/ReadConfig.java</file>
        <lines>53-55</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Add check if domains and ports are already in memo. Current implementation duplicates them if step is called several times on the same context.</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>369-8972f543</id>
            <ticket>369</ticket>
            <file>src/test/java/com/thindeck/steps/ReadConfigTest.java</file>
            <lines>59-61</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>This unit test additionally checks if step called on the same context does not duplicate domains and ports. It should be put into another unit test, instead.</body>
            <role>IMP</role>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/319" closed="2018-01-29T13:55:00+00:00">319</issue>
    <id>289-341cbc3a</id>
    <ticket>289</ticket>
    <file>pom.xml</file>
    <lines>480-481</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Increase test code coverage &gt;= 80% for all packages and uncomment lines below.</body>
    <role>IMP</role>
    <children>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>319-be3482ea</id>
        <ticket>319</ticket>
        <file>src/test/java/com/thindeck/life/LifecycleTest.java</file>
        <lines>57-57</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>When jcabi-aspects#95 is fixed enable this test.</body>
        <role>IMP</role>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/351" closed="2018-01-29T13:55:01+00:00">351</issue>
        <id>319-17808bfb</id>
        <ticket>319</ticket>
        <file>src/test/java/com/thindeck/life/LifecycleTest.java</file>
        <lines>81-81</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Migrate to com.thindeck.api.mock classes instead of mockito.</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>351-ebb2c3b5</id>
            <ticket>351</ticket>
            <file>src/test/java/com/thindeck/life/LifecycleTest.java</file>
            <lines>81-83</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Implement MkScenario and MkStep. Rewrite the test after that using mocks from com.thindeck.api.mock package instead of mockito.</body>
            <role>IMP</role>
            <children/>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/554" closed="2026-01-07T20:09:08+00:00">554</issue>
        <ticket>319</ticket>
        <estimate>0</estimate>
        <role>IMP</role>
        <id>319-6d18aceb</id>
        <lines>710-712</lines>
        <body>Increase code coverage &gt; 30%, by uncommenting the lines below and writting test classes.</body>
        <file>pom.xml</file>
        <author>Yegor Bugayenko</author>
        <email>yegor256@gmail.com</email>
        <time>2017-01-23T07:47:16Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/580" closed="2026-01-08T01:28:57+00:00">580</issue>
        <ticket>319</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>319-9b930429</id>
        <lines>602-604</lines>
        <body>Increase code coverage &gt; 30%, by uncommenting the lines below and writing test classes.</body>
        <file>pom.xml</file>
        <author>@yegor256</author>
        <email>yegor256@gmail.com</email>
        <time>2026-01-07T20:08:56Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>290-3defbeba</id>
    <ticket>290</ticket>
    <file>src/main/java/com/thindeck/cockpit/ReposRs.java</file>
    <lines>93-93</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Add a CasperJS test for adding repositories by user.</body>
    <role>IMP</role>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/322" closed="2018-01-29T13:55:03+00:00">322</issue>
    <id>290-ed461ae0</id>
    <ticket>290</ticket>
    <file>src/main/java/com/thindeck/dynamo/DyBase.java</file>
    <lines>47-47</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Implement user, repos and txn methods to retrieve data from</body>
    <role>IMP</role>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/372" closed="2018-01-29T13:55:04+00:00">372</issue>
        <id>322-31a411b0</id>
        <ticket>322</ticket>
        <file>src/main/java/com/thindeck/dynamo/DyBase.java</file>
        <lines>47-47</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Implement txn method to retrieve data from appropriate table.</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/thindeck/issues/462" closed="2018-01-29T13:55:05+00:00">462</issue>
            <id>372-437563d3</id>
            <ticket>372</ticket>
            <file>src/main/java/com/thindeck/dynamo/DyTxn.java</file>
            <lines>60-60</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>increment should use actions fetched from item.</body>
            <role>IMP</role>
            <children>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>462-c5de49b4</id>
                <ticket>462</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyContext.java</file>
                <lines>45-46</lines>
                <estimate>30</estimate>
                <body>DyContext.memo() should be implemented. This method should return the Memo object that will use in this context.</body>
                <role>IMP</role>
                <author>oruam85</author>
                <email>oruam85@gmail.com</email>
                <time>2015-01-26T14:31:02Z</time>
                <children/>
              </puzzle>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>462-ec070d26</id>
                <ticket>462</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyContext.java</file>
                <lines>52-53</lines>
                <estimate>30</estimate>
                <body>DyContext.log() should be implemented. This method should add a new line in the log.</body>
                <role>IMP</role>
                <author>oruam85</author>
                <email>oruam85@gmail.com</email>
                <time>2015-01-26T14:31:02Z</time>
                <children/>
              </puzzle>
            </children>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/thindeck/issues/464" closed="2018-01-29T13:55:06+00:00">464</issue>
            <id>372-6dfa5421</id>
            <ticket>372</ticket>
            <file>src/test/java/com/thindeck/dynamo/DyBaseTest.java</file>
            <lines>66-66</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>should retrieve DyTxn.</body>
            <role>IMP</role>
            <children>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>464-b7102912</id>
                <ticket>464</ticket>
                <file>src/test/java/com/thindeck/dynamo/DyBaseTest.java</file>
                <lines>68-68</lines>
                <estimate>30</estimate>
                <author>unknown</author>
                <email>unknown@0pdd.com</email>
                <time>2016-12-14T11:11:37Z</time>
                <body>Remove the @Ignore this when DyTxn is fully implemented.</body>
                <role>IMP</role>
                <children/>
              </puzzle>
            </children>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/373" closed="2018-01-29T13:55:07+00:00">373</issue>
        <id>322-5e7e33aa</id>
        <ticket>322</ticket>
        <file>src/main/java/com/thindeck/dynamo/DyRepo.java</file>
        <lines>43-43</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Implement tasks and memo methods.</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/thindeck/issues/405" closed="2018-01-29T13:55:08+00:00">405</issue>
            <id>373-67a7ac85</id>
            <ticket>373</ticket>
            <file>src/main/java/com/thindeck/dynamo/DyRepo.java</file>
            <lines>44-44</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Implement memo method.</body>
            <role>IMP</role>
            <children>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>405-d6ee4a6b</id>
                <ticket>405</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyMemo.java</file>
                <lines>47-47</lines>
                <estimate>30</estimate>
                <author>unknown</author>
                <email>unknown@0pdd.com</email>
                <time>2016-12-14T11:11:37Z</time>
                <body>implement update.</body>
                <role>IMP</role>
                <children/>
              </puzzle>
            </children>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/thindeck/issues/406" closed="2018-01-29T13:55:09+00:00">406</issue>
            <id>373-e9bbc535</id>
            <ticket>373</ticket>
            <file>src/main/java/com/thindeck/dynamo/DyTasks.java</file>
            <lines>46-46</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Implement get and open methods.</body>
            <role>IMP</role>
            <children>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>406-e0d78f7e</id>
                <ticket>406</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyTask.java</file>
                <lines>46-46</lines>
                <estimate>30</estimate>
                <author>unknown</author>
                <email>unknown@0pdd.com</email>
                <time>2016-12-14T11:11:37Z</time>
                <body>Implement command method.</body>
                <role>IMP</role>
                <children/>
              </puzzle>
              <puzzle alive="false">
                <issue href="https://github.com/yegor256/thindeck/issues/420" closed="2018-01-29T13:55:10+00:00">420</issue>
                <id>406-14dae9d0</id>
                <ticket>406</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyTask.java</file>
                <lines>47-47</lines>
                <estimate>30</estimate>
                <author>unknown</author>
                <email>unknown@0pdd.com</email>
                <time>2016-12-14T11:11:37Z</time>
                <body>Implement scenario method.</body>
                <role>IMP</role>
                <children>
                  <puzzle alive="false">
                    <issue>unknown</issue>
                    <id>420-427af42c</id>
                    <ticket>420</ticket>
                    <file>src/main/java/com/thindeck/dynamo/DyScenario.java</file>
                    <lines>42-42</lines>
                    <estimate>30</estimate>
                    <author>unknown</author>
                    <email>unknown@0pdd.com</email>
                    <time>2016-12-14T11:11:37Z</time>
                    <body>Implement steps method - example in OnDeploy. Task command will determine steps.</body>
                    <role>IMP</role>
                    <children/>
                  </puzzle>
                </children>
              </puzzle>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>406-b5fe8676</id>
                <ticket>406</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyTasks.java</file>
                <lines>50-50</lines>
                <estimate>30</estimate>
                <author>unknown</author>
                <email>unknown@0pdd.com</email>
                <time>2016-12-14T11:11:37Z</time>
                <body>Implement open method.</body>
                <role>IMP</role>
                <children/>
              </puzzle>
            </children>
          </puzzle>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>373-400c0a90</id>
            <ticket>373</ticket>
            <file>src/main/java/com/thindeck/dynamo/DyTasks.java</file>
            <lines>47-47</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Implement all and add methods.</body>
            <role>IMP</role>
            <children/>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>322-1ad9bb23</id>
        <ticket>322</ticket>
        <file>src/main/java/com/thindeck/dynamo/DyRepos.java</file>
        <lines>43-43</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Implement iterate method.</body>
        <role>IMP</role>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/370" closed="2018-01-29T13:55:11+00:00">370</issue>
        <id>322-123c6c41</id>
        <ticket>322</ticket>
        <file>src/main/java/com/thindeck/dynamo/DyRepos.java</file>
        <lines>44-44</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Create test for this class when jcabi/jcabi-dynamo#13 is done.</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>370-bb822dca</id>
            <ticket>370</ticket>
            <file>src/main/java/com/thindeck/dynamo/DyRepos.java</file>
            <lines>48-48</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Create test for #add new repo</body>
            <role>IMP</role>
            <children/>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/374" closed="2018-01-29T13:55:12+00:00">374</issue>
        <id>322-75940d12</id>
        <ticket>322</ticket>
        <file>src/main/java/com/thindeck/dynamo/DyUser.java</file>
        <lines>43-43</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Implement repos and usage methods.</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/thindeck/issues/409" closed="2018-01-29T13:55:13+00:00">409</issue>
            <id>374-bb504035</id>
            <ticket>374</ticket>
            <file>src/main/java/com/thindeck/dynamo/DyUser.java</file>
            <lines>44-50</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>At the moment, the repos() method returns all Repos associated with the Dynamo region, and this is definitely incorrect. I think we need to refactor DyRepos in order to include a user criteria (probably URN) in its constructor, and have DyUser pass it so that it will only return the associated criteria. I'm not completely sure about this design, feel free to implement something else if you think it's wrong. The intuition behind it is that we should only get the repos associated with the current user.</body>
            <role>IMP</role>
            <children>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>409-272f0225</id>
                <ticket>409</ticket>
                <file>src/main/java/com/thindeck/api/Repo.java</file>
                <lines>46-48</lines>
                <estimate>30</estimate>
                <body>Let's add a new method User user(). It should return the User whom the Repo is associated to. Let's also add implementations in the classes that implement this interface.</body>
                <role>IMP</role>
                <author>Carlos Miranda</author>
                <email>carlosmiranda@users.noreply.github.com</email>
                <time>2015-03-19T05:21:58Z</time>
                <children/>
              </puzzle>
            </children>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/thindeck/issues/408" closed="2018-01-29T13:55:13+00:00">408</issue>
            <id>374-a01072dc</id>
            <ticket>374</ticket>
            <file>src/main/java/com/thindeck/dynamo/DyUser.java</file>
            <lines>51-53</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Implement usage method. To do this we need to implement a class DyUsage that implements the Usage interface. This will obtain the usage associated to this user from Dynamo DB.</body>
            <role>IMP</role>
            <children>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>408-195c40b4</id>
                <ticket>408</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyUsage.java</file>
                <lines>69-71</lines>
                <estimate>30</estimate>
                <body>Let's implement the add() method. This method should add the supplied Value to the usage info of the current user. Make sure to include unit tests for this method in DyUsageTest.</body>
                <role>IMP</role>
                <author>Carlos Miranda</author>
                <email>carlosmiranda@users.noreply.github.com</email>
                <time>2015-03-02T03:26:27Z</time>
                <children/>
              </puzzle>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>408-b5d67474</id>
                <ticket>408</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyUsage.java</file>
                <lines>77-79</lines>
                <estimate>30</estimate>
                <body>Let's implement the select() method. This method should return the values that fit the given criteria (user and date range). Make sure to include unit tests for this method in DyUsageTest.</body>
                <role>IMP</role>
                <author>Carlos Miranda</author>
                <email>carlosmiranda@users.noreply.github.com</email>
                <time>2015-03-02T03:26:27Z</time>
                <children/>
              </puzzle>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>408-75ca2bde</id>
                <ticket>408</ticket>
                <file>src/main/java/com/thindeck/dynamo/DyUsage.java</file>
                <lines>85-87</lines>
                <estimate>30</estimate>
                <body>Let's implement the sum() method. This method should return the aggregate sum of values that fit the given criteria. Make sure to include unit tests for this method in DyUsageTest.</body>
                <role>IMP</role>
                <author>Carlos Miranda</author>
                <email>carlosmiranda@users.noreply.github.com</email>
                <time>2015-03-02T03:26:27Z</time>
                <children/>
              </puzzle>
            </children>
          </puzzle>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/thindeck/issues/410" closed="2018-01-29T13:55:14+00:00">410</issue>
            <id>374-c45270af</id>
            <ticket>374</ticket>
            <file>src/test/java/com/thindeck/dynamo/DyUserTest.java</file>
            <lines>52-54</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>We should create an integration test for DyUser. Let's call it DyUserITCase. It should test whether DyUser can perform its operations on a real (local) Dynamo server. When done, ensure that this puzzle is removed.</body>
            <role>IMP</role>
            <children>
              <puzzle alive="false">
                <issue>unknown</issue>
                <id>410-108e5987</id>
                <ticket>410</ticket>
                <file>src/test/java/com/thindeck/dynamo/DyUserTestITCase.java</file>
                <lines>45-45</lines>
                <estimate>30</estimate>
                <body>Implement an integration test for DyUser.repos()</body>
                <role>IMP</role>
                <author>Adam Siemion</author>
                <email>adam.siemion+github@gmail.com</email>
                <time>2015-02-13T08:14:46Z</time>
                <children/>
              </puzzle>
            </children>
          </puzzle>
        </children>
      </puzzle>
      <puzzle alive="false">
        <issue>unknown</issue>
        <id>322-7e6f773d</id>
        <ticket>322</ticket>
        <file>src/test/java/com/thindeck/dynamo/DyBaseTest.java</file>
        <lines>55-55</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>Enable this test when jcabi/jcabi-dynamo#13 is done.</body>
        <role>IMP</role>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/321" closed="2018-01-29T13:55:15+00:00">321</issue>
    <id>290-5f41f67f</id>
    <ticket>290</ticket>
    <file>src/main/java/com/thindeck/dynamo/DyBase.java</file>
    <lines>49-50</lines>
    <estimate>30</estimate>
    <author>unknown</author>
    <email>unknown@0pdd.com</email>
    <time>2016-12-14T11:11:37Z</time>
    <body>Add dynamo maven plugin and create IT tests for dynamo based classes.</body>
    <role>IMP</role>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/thindeck/issues/341" closed="2018-01-29T13:55:17+00:00">341</issue>
        <id>321-7e1601a9</id>
        <ticket>321</ticket>
        <file>src/test/java/dynamo/DyBaseITCase.java</file>
        <lines>51-54</lines>
        <estimate>30</estimate>
        <author>unknown</author>
        <email>unknown@0pdd.com</email>
        <time>2016-12-14T11:11:37Z</time>
        <body>DyBase should be implemented to make this test pass. You should make sure the DynamoDB Local has all the required tables, and all methods of all API-classes are implemented in com.thinkdeck.dynamo package</body>
        <role>IMP</role>
        <children>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>341-7e1601a9</id>
            <ticket>341</ticket>
            <file>src/test/java/dynamo/DyBaseITCase.java</file>
            <lines>52-55</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>DyBase should be implemented to make this test pass. You should make sure the DynamoDB Local has all the required tables, and all methods of all API-classes are implemented in com.thinkdeck.dynamo package</body>
            <role>IMP</role>
            <children/>
          </puzzle>
          <puzzle alive="false">
            <issue>unknown</issue>
            <id>341-c00e1503</id>
            <ticket>341</ticket>
            <file>src/test/java/dynamo/DyBaseITCase.java</file>
            <lines>53-54</lines>
            <estimate>30</estimate>
            <author>unknown</author>
            <email>unknown@0pdd.com</email>
            <time>2016-12-14T11:11:37Z</time>
            <body>Add definition of tasks table to dynamoDb local and remove Ignore annotation.</body>
            <role>IMP</role>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue>unknown</issue>
    <id>491-fa4a100f</id>
    <ticket>491</ticket>
    <file>src/test/java/com/thindeck/dynamo/DyTasksTest.java</file>
    <lines>81-82</lines>
    <estimate>15</estimate>
    <body>Unignore following test when #492 is finished and check the test passes</body>
    <role>IMP</role>
    <author>Artem Nakonechny</author>
    <email>wentwog@gmail.com</email>
    <time>2015-01-21T09:29:24Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/thindeck/issues/555" closed="2026-01-08T01:28:59+00:00">555</issue>
    <ticket>460</ticket>
    <estimate>0</estimate>
    <role>IMP</role>
    <id>460-15412ba6</id>
    <lines>722-722</lines>
    <body>add EqualsAndHashCode verifier, e.g. http://www.jqno.nl/equalsverifier/</body>
    <file>pom.xml</file>
    <author>Yegor Bugayenko</author>
    <email>yegor256@gmail.com</email>
    <time>2017-01-23T07:47:16Z</time>
    <children/>
  </puzzle>
</puzzles>
