)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"641153abad2a6f103342d71dba0b577e36201030","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2ed71678_e74f6691","updated":"2022-01-26 16:59:17.000000000","message":"Code generally looks good, but at this point I think we should have some documentation/diagram somewhere detailing the data flow (and state) of the whole curator/consensus/cluster system. I\u0027m starting to have issues following it.","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"10f11fa299751c144175937c9a762f9c5da5642f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7fc9df4d_04ff1938","updated":"2022-01-26 12:24:33.000000000","message":"I\u0027ll need to take a closer look at the entirety of node/cluster and node/curator.","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d9adf9c67c4e20582678909dea9eb3a0c82ddaf0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"06652edd_cb3c0164","updated":"2022-02-21 13:35:50.000000000","message":"@lorenz Welcome back, PTAL :).","commit_id":"88885eed6ec4e86238132d6eedd80aac1ccbbbd3"}],"metropolis/node/core/cluster/cluster.go":[{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"10f11fa299751c144175937c9a762f9c5da5642f","unresolved":true,"context_lines":[{"line_number":128,"context_line":"\t}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"\tif err \u003d\u003d nil {"},{"line_number":131,"context_line":"\t\tsupervisor.Logger(ctx).Info(\"Cluster enrolment done.\")"},{"line_number":132,"context_line":"\t}"},{"line_number":133,"context_line":"\treturn err"},{"line_number":134,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":1,"id":"f7350312_3a6fa944","line":131,"updated":"2022-01-26 12:24:33.000000000","message":"typo","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2794b26c795038984d7422db2a0376284334af44","unresolved":true,"context_lines":[{"line_number":128,"context_line":"\t}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"\tif err \u003d\u003d nil {"},{"line_number":131,"context_line":"\t\tsupervisor.Logger(ctx).Info(\"Cluster enrolment done.\")"},{"line_number":132,"context_line":"\t}"},{"line_number":133,"context_line":"\treturn err"},{"line_number":134,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":1,"id":"ffa19cc5_610692ba","line":131,"in_reply_to":"0ea4d5dc_484ebae4","updated":"2022-01-27 13:37:48.000000000","message":"whoops, nevermind: https://en.wiktionary.org/wiki/enrolment","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"641153abad2a6f103342d71dba0b577e36201030","unresolved":true,"context_lines":[{"line_number":128,"context_line":"\t}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"\tif err \u003d\u003d nil {"},{"line_number":131,"context_line":"\t\tsupervisor.Logger(ctx).Info(\"Cluster enrolment done.\")"},{"line_number":132,"context_line":"\t}"},{"line_number":133,"context_line":"\treturn err"},{"line_number":134,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":1,"id":"0ea4d5dc_484ebae4","line":131,"in_reply_to":"f7350312_3a6fa944","updated":"2022-01-26 16:59:17.000000000","message":"Where is the typo? I don\u0027t see one.","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e07c89dbeee2c86494996460d5fdaa4e9653593","unresolved":false,"context_lines":[{"line_number":128,"context_line":"\t}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"\tif err \u003d\u003d nil {"},{"line_number":131,"context_line":"\t\tsupervisor.Logger(ctx).Info(\"Cluster enrolment done.\")"},{"line_number":132,"context_line":"\t}"},{"line_number":133,"context_line":"\treturn err"},{"line_number":134,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":1,"id":"3cbdba00_dfbad69a","line":131,"in_reply_to":"ffa19cc5_610692ba","updated":"2022-01-27 13:38:29.000000000","message":".","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"}],"metropolis/node/core/curator/bootstrap.go":[{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"10f11fa299751c144175937c9a762f9c5da5642f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"// This is ran by the cluster bootstrap workflow to finish bootstrapping a"},{"line_number":33,"context_line":"// cluster - afterwards, this cluster will be ready to serve."},{"line_number":34,"context_line":"//"},{"line_number":35,"context_line":"// This must only be used by the cluster bootstrap logic. It is idempotent, thus"},{"line_number":36,"context_line":"// can be called repeatedly in case of intermittent failures in the bootstrap"},{"line_number":37,"context_line":"// logic."},{"line_number":38,"context_line":"func BootstrapNodeFinish(ctx context.Context, etcd client.Namespaced, node *Node, ownerKey []byte) (caCertBytes, nodeCertBytes []byte, err error) {"}],"source_content_type":"text/x-go","patch_set":1,"id":"70c86679_c251de92","line":35,"updated":"2022-01-26 12:24:33.000000000","message":"😎","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"}],"metropolis/node/core/curator/impl_leader_curator.go":[{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"641153abad2a6f103342d71dba0b577e36201030","unresolved":true,"context_lines":[{"line_number":228,"context_line":"\t}"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"\tif net.ParseIP(req.Status.ExternalAddress) \u003d\u003d nil {"},{"line_number":231,"context_line":"\t\treturn nil, status.Errorf(codes.InvalidArgument, \"Status.ExternalAddress must be a valid address\")"},{"line_number":232,"context_line":"\t}"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"\t// As we\u0027re performing a node update with two etcd transactions below (one"}],"source_content_type":"text/x-go","patch_set":1,"id":"0b51cb39_c999abe4","line":231,"range":{"start_line":231,"start_character":90,"end_line":231,"end_character":91},"updated":"2022-01-26 16:59:17.000000000","message":"\"valid IP address\"? Because that\u0027s what this is verifying.","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"27412b942f45bd1adc221f513d7922d3f521ed00","unresolved":false,"context_lines":[{"line_number":228,"context_line":"\t}"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"\tif net.ParseIP(req.Status.ExternalAddress) \u003d\u003d nil {"},{"line_number":231,"context_line":"\t\treturn nil, status.Errorf(codes.InvalidArgument, \"Status.ExternalAddress must be a valid address\")"},{"line_number":232,"context_line":"\t}"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"\t// As we\u0027re performing a node update with two etcd transactions below (one"}],"source_content_type":"text/x-go","patch_set":1,"id":"bca8389a_a8d84080","line":231,"range":{"start_line":231,"start_character":90,"end_line":231,"end_character":91},"in_reply_to":"0b51cb39_c999abe4","updated":"2022-02-10 14:25:01.000000000","message":"Done","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"10f11fa299751c144175937c9a762f9c5da5642f","unresolved":true,"context_lines":[{"line_number":268,"context_line":"\twantTicket, err :\u003d l.ensureRegisterTicket(ctx)"},{"line_number":269,"context_line":"\tif err !\u003d nil {"},{"line_number":270,"context_line":"\t\t// TODO(issues/85): log err"},{"line_number":271,"context_line":"\t\treturn nil, status.Errorf(codes.Unavailable, \"could not retrieve register ticket: %v\", err)"},{"line_number":272,"context_line":"\t}"},{"line_number":273,"context_line":"\tgotTicket :\u003d req.RegisterTicket"},{"line_number":274,"context_line":"\tif subtle.ConstantTimeCompare(wantTicket, gotTicket) !\u003d 1 {"}],"source_content_type":"text/x-go","patch_set":1,"id":"a1616fe0_a966b1cb","line":271,"updated":"2022-01-26 12:24:33.000000000","message":"Should it take a %w?","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"641153abad2a6f103342d71dba0b577e36201030","unresolved":false,"context_lines":[{"line_number":268,"context_line":"\twantTicket, err :\u003d l.ensureRegisterTicket(ctx)"},{"line_number":269,"context_line":"\tif err !\u003d nil {"},{"line_number":270,"context_line":"\t\t// TODO(issues/85): log err"},{"line_number":271,"context_line":"\t\treturn nil, status.Errorf(codes.Unavailable, \"could not retrieve register ticket: %v\", err)"},{"line_number":272,"context_line":"\t}"},{"line_number":273,"context_line":"\tgotTicket :\u003d req.RegisterTicket"},{"line_number":274,"context_line":"\tif subtle.ConstantTimeCompare(wantTicket, gotTicket) !\u003d 1 {"}],"source_content_type":"text/x-go","patch_set":1,"id":"5539eb58_0566aeba","line":271,"in_reply_to":"a1616fe0_a966b1cb","updated":"2022-01-26 16:59:17.000000000","message":"That\u0027s a gRPC error, it needs to be a string","commit_id":"6831531adcb638d46ff81ad90e800fb00b2aef47"}]}
