thirdshift 0.22.0

Turn a GitHub issue into a ready-for-review pull request, unattended
<li class="command" id="{{ row.id }}" tabindex="0" data-live="{{ row.live }}" data-state="{{ row.state }}" data-started-ms="{{ row.started_ms }}" data-occurred-ms="{{ row.occurred_ms }}" data-logging="{{ row.logging }}" data-log-growth="{{ row.log_growth }}" data-command="{{ row.selector }}" data-peek="{{ row.peek_url() }}" data-log="{{ row.log_url() }}">
  <div class="row-head">{% if row.live %}<span class="heartbeat" aria-label="Log activity"></span>{% endif %}<span class="state">{{ row.state }}</span> <span class="subject" title="{{ row.subject }}">{% match row.account %}{% when Some with (account) %}<span class="account-tag" title="Other-account Command · read-only">{{ account }}</span> {% when None %}{% endmatch %}{% match row.subject_url %}{% when Some with (url) %}<a href="{{ url }}">{% match row.subject.rsplit_once('#') %}{% when Some with ((repository, number)) %}<span class="subject-repository">{{ repository }}</span><span class="subject-issue">#{{ number }}</span>{% when None %}{{ row.subject }}{% endmatch %}</a>{% when None %}{{ row.subject }}{% endmatch %}</span> <span class="issue-title">{{ row.title }}</span><span class="gist" title="{{ self.gist()|readable }}">{{ self.gist()|readable }}</span><span class="new" hidden>New since you last looked</span><span class="age"{% match row.timing.finish %}{% when Some with (finish) %} title="Ended {{ finish.label }}"{% when None %}{% endmatch %}>{% match row.timing.finish %}{% when Some with (finish) %}<span class="finish"><time datetime="{{ finish.datetime }}">Ended {{ finish.label }}</time> · </span>{% when None %}{% endmatch %}{{ row.timing.age }}</span>
    {% match row.ci %}{% when Some with (ci) %}<span class="pr-checks"><span class="ci" data-ci="{{ ci.label() }}" title="Latest pull request head · last GitHub answer">{{ ci.label() }}</span>{% if row.merge_conflict %}<span class="merge-conflict" title="Pull request conflicts with its Base branch · last GitHub answer">Merge conflict</span>{% endif %}</span>{% when None %}{% endmatch %}
    {% if can_copy || (can_act && row.can_dismiss) %}<div class="row-controls">{% if can_copy %}<span class="copy"><button type="button" data-copy-context>Copy</button> <span data-copy-status role="status"></span></span>{% endif %}
    {% if can_act && row.can_dismiss %}<form method="post" action="/dismiss" data-dismiss><input type="hidden" name="command" value="{{ row.selector }}"><input type="hidden" name="csrf" value="{{ csrf }}"><button id="dismiss-{{ row.id }}">Dismiss</button><span role="status"></span></form>{% endif %}</div>{% endif %}
  </div>
  <p class="now">{{ row.now_line|linkify }}</p>
  {% match row.fix_command %}{% when Some with (cli) %}<p class="peek-cli fix-command"><code>{{ cli }}</code> <button type="button" data-copy-cli="{{ cli }}">Copy fix command</button> <span data-copy-status role="status"></span></p>{% when None %}{% endmatch %}
  {% match row.resume_command %}{% when Some with (cli) %}<p class="peek-cli"><code>{{ cli }}</code> <button type="button" data-copy-cli="{{ cli }}">Copy resume command</button> <span data-copy-status role="status"></span></p>{% when None %}{% endmatch %}
  <a href="{{ row.logs_url }}">Command logs and Session traces</a>
  {% if !row.harness.is_empty() %}<p class="harness">{{ row.harness }}</p>{% endif %}
  {% if !row.pull_request.is_empty() %}<p class="pr">{{ row.pull_request|linkify }}</p>{% endif %}
  {% if row.count > 1 %}<p>{{ row.count }} Commands with this cause: {{ row.cause|linkify }}</p>{% else if !row.cause.is_empty() %}<p{% if row.state == "Paused" %} class="cause"{% endif %}>{{ row.cause|linkify }}</p>{% endif %}
  {% if !row.left.is_empty() %}<p class="left">{{ row.left|readable }}</p>{% endif %}
  {% if !row.tickets.is_empty() %}<ul class="plan" aria-label="Tickets">{% for ticket in row.tickets %}<li>{{ ticket|linkify }}</li>{% endfor %}</ul>{% endif %}
  <div class="row-actions"><p><a class="peek-link" href="{{ row.peek_url() }}">Details</a> · <a href="{{ row.log_url() }}">Full log</a></p></div>
  {% if can_security && !row.findings.is_empty() %}<ul aria-label="Security findings">{% for finding in row.findings %}<li>{{ finding.title }} · {% match finding.severity %}{% when Some with (severity) %}{{ severity }}{% when None %}ungraded{% endmatch %} · {{ finding.url|linkify }}</li>{% endfor %}</ul>{% endif %}
  {% if !row.sessions.is_empty() %}<ul aria-label="Session traces">{% for session in row.sessions %}<li><a href="{{ row.session_url(session) }}">{{ session.display() }}</a></li>{% endfor %}</ul>{% endif %}
  {% if !row.children.is_empty() %}<ul class="children">{% for child in row.children %}{{ self.child(child)|safe }}{% endfor %}</ul>{% endif %}
</li>