)]}'
{"web/src/containers/build/Console.jsx":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2665a1ae96a37597f3c76ceecc29dcfb3b6260cc","unresolved":false,"context_lines":[{"line_number":331,"context_line":"          })"},{"line_number":332,"context_line":"        })"},{"line_number":333,"context_line":"      })"},{"line_number":334,"context_line":"    })"},{"line_number":335,"context_line":"  }"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"  render () {"}],"source_content_type":"text/jsx","patch_set":4,"id":"7faddb67_1a0bbf2b","line":334,"updated":"2019-08-08 00:30:51.000000000","message":"Agreed, we should move it there in a followup.","commit_id":"c035bc69babb8150d50fe6f6f9ac0fff350715f2"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"079a747d7fecba54e4472a18ed48dc7eab6b7fb9","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    const { output } \u003d this.props"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    const errorIds \u003d new Set()"},{"line_number":306,"context_line":"    this.errorIds \u003d errorIds"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    // Identify all of the hosttasks (and therefore tasks, plays, and"},{"line_number":309,"context_line":"    // playbooks) which have failed.  The errorIds are either task or"},{"line_number":310,"context_line":"    // play uuids, or the phase+index for the playbook.  Since they are"},{"line_number":311,"context_line":"    // different formats, we can store them in the same set without"},{"line_number":312,"context_line":"    // collisions."},{"line_number":313,"context_line":"    output.forEach(playbook \u003d\u003e {"},{"line_number":314,"context_line":"      playbook.plays.forEach(play \u003d\u003e {"},{"line_number":315,"context_line":"        play.tasks.forEach(task \u003d\u003e {"},{"line_number":316,"context_line":"          Object.entries(task.hosts).forEach(([, host]) \u003d\u003e {"},{"line_number":317,"context_line":"            if (host.results) {"},{"line_number":318,"context_line":"              host.results.forEach(result \u003d\u003e {"},{"line_number":319,"context_line":"                if (didTaskFail(result)) {"},{"line_number":320,"context_line":"                  errorIds.add(task.task.id)"},{"line_number":321,"context_line":"                  errorIds.add(play.play.id)"},{"line_number":322,"context_line":"                  errorIds.add(playbook.phase + playbook.index)"},{"line_number":323,"context_line":"                }"},{"line_number":324,"context_line":"              })"},{"line_number":325,"context_line":"            }"},{"line_number":326,"context_line":"            if (didTaskFail(host)) {"},{"line_number":327,"context_line":"              errorIds.add(task.task.id)"},{"line_number":328,"context_line":"              errorIds.add(play.play.id)"},{"line_number":329,"context_line":"              errorIds.add(playbook.phase + playbook.index)"},{"line_number":330,"context_line":"            }"},{"line_number":331,"context_line":"          })"},{"line_number":332,"context_line":"        })"},{"line_number":333,"context_line":"      })"},{"line_number":334,"context_line":"    })"},{"line_number":335,"context_line":"  }"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"  render () {"}],"source_content_type":"text/jsx","patch_set":4,"id":"7faddb67_f27a8d23","line":334,"range":{"start_line":305,"start_character":0,"end_line":334,"end_character":6},"updated":"2019-08-07 20:17:40.000000000","message":"This type of onetime computation could be performed by the action and saved in the store along with the output. This would ensure it\u0027s not re-computed when switching pane, and this would also better separate data processing from data rendering.","commit_id":"c035bc69babb8150d50fe6f6f9ac0fff350715f2"}]}
