)]}'
{"/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":"5472095ea0009ca84dc38a2cf68a7d3a7a5e4460","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f11680b5_5c54646c","updated":"2021-08-26 15:48:46.000000000","message":"LGTM. I like the design of the authorization being proto attributes with generic reflection-based interceptors. Neat!","commit_id":"1d6faa9cc78e2905acefaec12388a0933d0e3d0c"}],"metropolis/node/core/curator/authorization.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":"5472095ea0009ca84dc38a2cf68a7d3a7a5e4460","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"// authorize performs an authorization check for the given gRPC context"},{"line_number":56,"context_line":"// (containing peer information) and given RPC method name (as obtained from"},{"line_number":57,"context_line":"// FullMethodName in {Unary,Stream}ServerInfo. The actual authorization"},{"line_number":58,"context_line":"// requirements per method are retrieved from the Authorization protobuf"},{"line_number":59,"context_line":"// option applied to the RPC method."},{"line_number":60,"context_line":"//"}],"source_content_type":"text/x-go","patch_set":5,"id":"65d6dbba_31f0260b","line":57,"range":{"start_line":57,"start_character":45,"end_line":57,"end_character":46},"updated":"2021-08-26 15:48:46.000000000","message":"Missing closing bracket","commit_id":"1d6faa9cc78e2905acefaec12388a0933d0e3d0c"},{"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":"d0c742c120adc615b2a633adaafc95ab389adad1","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"// authorize performs an authorization check for the given gRPC context"},{"line_number":56,"context_line":"// (containing peer information) and given RPC method name (as obtained from"},{"line_number":57,"context_line":"// FullMethodName in {Unary,Stream}ServerInfo. The actual authorization"},{"line_number":58,"context_line":"// requirements per method are retrieved from the Authorization protobuf"},{"line_number":59,"context_line":"// option applied to the RPC method."},{"line_number":60,"context_line":"//"}],"source_content_type":"text/x-go","patch_set":5,"id":"1f71b78b_49bd5c3a","line":57,"range":{"start_line":57,"start_character":45,"end_line":57,"end_character":46},"in_reply_to":"65d6dbba_31f0260b","updated":"2021-09-01 12:59:57.000000000","message":"Done","commit_id":"1d6faa9cc78e2905acefaec12388a0933d0e3d0c"},{"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":"5472095ea0009ca84dc38a2cf68a7d3a7a5e4460","unresolved":true,"context_lines":[{"line_number":75,"context_line":"\t\treturn status.Error(codes.InvalidArgument, \"querying method name did not yield a MethodDescriptor\")"},{"line_number":76,"context_line":"\t}"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"\t// Get authorization extension, default to no options set."},{"line_number":79,"context_line":"\tauthz, ok :\u003d proto.GetExtension(method.Options(), epb.E_Authorization).(*epb.Authorization)"},{"line_number":80,"context_line":"\tif !ok || authz \u003d\u003d nil {"},{"line_number":81,"context_line":"\t\tauthz \u003d \u0026epb.Authorization{}"}],"source_content_type":"text/x-go","patch_set":5,"id":"191c63fa_50b61a9e","line":78,"range":{"start_line":78,"start_character":33,"end_line":78,"end_character":40},"updated":"2021-08-26 15:48:46.000000000","message":"defaults","commit_id":"1d6faa9cc78e2905acefaec12388a0933d0e3d0c"},{"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":"d0c742c120adc615b2a633adaafc95ab389adad1","unresolved":false,"context_lines":[{"line_number":75,"context_line":"\t\treturn status.Error(codes.InvalidArgument, \"querying method name did not yield a MethodDescriptor\")"},{"line_number":76,"context_line":"\t}"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"\t// Get authorization extension, default to no options set."},{"line_number":79,"context_line":"\tauthz, ok :\u003d proto.GetExtension(method.Options(), epb.E_Authorization).(*epb.Authorization)"},{"line_number":80,"context_line":"\tif !ok || authz \u003d\u003d nil {"},{"line_number":81,"context_line":"\t\tauthz \u003d \u0026epb.Authorization{}"}],"source_content_type":"text/x-go","patch_set":5,"id":"8062cc13_6f9bcf55","line":78,"range":{"start_line":78,"start_character":33,"end_line":78,"end_character":40},"in_reply_to":"191c63fa_50b61a9e","updated":"2021-09-01 12:59:57.000000000","message":"Done","commit_id":"1d6faa9cc78e2905acefaec12388a0933d0e3d0c"}],"metropolis/node/core/curator/impl_leader_test.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":"5472095ea0009ca84dc38a2cf68a7d3a7a5e4460","unresolved":true,"context_lines":[{"line_number":23,"context_line":"// implementation and returns a client to it."},{"line_number":24,"context_line":"//"},{"line_number":25,"context_line":"// The entire gRPC layer is encrypted and authenticated in the same way as in"},{"line_number":26,"context_line":"// the Metropolis production. An ephemeral cluster CA and node/manager"},{"line_number":27,"context_line":"// credentials are created, and are used to establish a secure channel when"},{"line_number":28,"context_line":"// creating the gRPC listener and client."},{"line_number":29,"context_line":"//"}],"source_content_type":"text/x-go","patch_set":5,"id":"1324d8cb_75edde3a","line":26,"range":{"start_line":26,"start_character":28,"end_line":26,"end_character":29},"updated":"2021-08-26 15:48:46.000000000","message":"deployment? setup?","commit_id":"1d6faa9cc78e2905acefaec12388a0933d0e3d0c"},{"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":"d0c742c120adc615b2a633adaafc95ab389adad1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"// implementation and returns a client to it."},{"line_number":24,"context_line":"//"},{"line_number":25,"context_line":"// The entire gRPC layer is encrypted and authenticated in the same way as in"},{"line_number":26,"context_line":"// the Metropolis production. An ephemeral cluster CA and node/manager"},{"line_number":27,"context_line":"// credentials are created, and are used to establish a secure channel when"},{"line_number":28,"context_line":"// creating the gRPC listener and client."},{"line_number":29,"context_line":"//"}],"source_content_type":"text/x-go","patch_set":5,"id":"93dc00ac_3b38b071","line":26,"range":{"start_line":26,"start_character":28,"end_line":26,"end_character":29},"in_reply_to":"1324d8cb_75edde3a","updated":"2021-09-01 12:59:57.000000000","message":"Used \u0027production\u0027 as a noun here. Let me rephrase that.","commit_id":"1d6faa9cc78e2905acefaec12388a0933d0e3d0c"}]}
