)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"91e689a120f2e9f917b037cbf71d39f7387205fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c43501d9_385d1ee9","updated":"2022-12-31 13:53:18.000000000","message":"LGTM, a few remarks","commit_id":"8c3cec2039136e4f259c4bf0ef7f642d5638b4cc"}],"cloud/agent/api/agent.proto":[{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":18,"context_line":"  string device_model \u003d 2;"},{"line_number":19,"context_line":"  string serial_number \u003d 3;"},{"line_number":20,"context_line":"  bytes wwn \u003d 4;"},{"line_number":21,"context_line":"  bool rotational \u003d 5;"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  // Usable capacity in bytes"},{"line_number":24,"context_line":"  int64 capacity_bytes \u003d 6;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"f285876e_c5019fd5","line":21,"range":{"start_line":21,"start_character":7,"end_line":21,"end_character":17},"updated":"2022-11-08 14:45:46.000000000","message":"Extremely important: bool spinning_rust \u003d 5.\n\n:^)","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  string device_model \u003d 2;"},{"line_number":19,"context_line":"  string serial_number \u003d 3;"},{"line_number":20,"context_line":"  bytes wwn \u003d 4;"},{"line_number":21,"context_line":"  bool rotational \u003d 5;"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  // Usable capacity in bytes"},{"line_number":24,"context_line":"  int64 capacity_bytes \u003d 6;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"8a071a48_31dac210","line":21,"range":{"start_line":21,"start_character":7,"end_line":21,"end_character":17},"in_reply_to":"f285876e_c5019fd5","updated":"2022-11-08 18:25:12.000000000","message":"🤣","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":51,"context_line":"  // On SATA disks this is technically equivalent to Raw_Read_Error_Rate, but"},{"line_number":52,"context_line":"  // only a tiny minority of devices populate that sanely. So instead this is"},{"line_number":53,"context_line":"  // defined as the sum of S.M.A.R.T. attributes 5, 197 and 198."},{"line_number":54,"context_line":"  // TODO: Make this -1 if unavailable?"},{"line_number":55,"context_line":"  int64 media_errors \u003d 12;"},{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"e1b0d530_f9204fab","line":54,"range":{"start_line":54,"start_character":11,"end_line":54,"end_character":39},"updated":"2022-11-08 14:45:46.000000000","message":"I\u0027d rather have this encode in the types. There\u0027s the new proto3 optional field mechanism that might actually work here, as we control both sides of the API (proto3 optionals are considered harmful mostly when dealing with old/broken implementations).","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  // On SATA disks this is technically equivalent to Raw_Read_Error_Rate, but"},{"line_number":52,"context_line":"  // only a tiny minority of devices populate that sanely. So instead this is"},{"line_number":53,"context_line":"  // defined as the sum of S.M.A.R.T. attributes 5, 197 and 198."},{"line_number":54,"context_line":"  // TODO: Make this -1 if unavailable?"},{"line_number":55,"context_line":"  int64 media_errors \u003d 12;"},{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"a88c0757_77bf68b5","line":54,"range":{"start_line":54,"start_character":11,"end_line":54,"end_character":39},"in_reply_to":"e1b0d530_f9204fab","updated":"2022-11-08 18:25:12.000000000","message":"Done","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":64,"context_line":"  // Maximum number of bytes per second this network interface can transmit in"},{"line_number":65,"context_line":"  // one direction without protocol overhead."},{"line_number":66,"context_line":"  // TODO: This will be derived from the list of supported modes, do we want to"},{"line_number":67,"context_line":"  // just provide supported modes (a potentially long enum), supported link"},{"line_number":68,"context_line":"  // speeds (a much shorter enum) or just this value? Or a combination?"},{"line_number":69,"context_line":"  int64 max_bandwidth \u003d 3;"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  // Does the interface have an active link."}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"af4ed249_5bb898cc","line":68,"range":{"start_line":67,"start_character":61,"end_line":68,"end_character":33},"updated":"2022-11-08 14:45:46.000000000","message":"How about an enum like this?\n\n   1GBASE (contains all 1000BASE-* standards)\n   10GBASE (contains all 10GBASE-* standards)\n   25GBASE (contains all 25GBASE-* standards)\n   40GBASE (contains all 40GBASE-* standards)\n   \netc? We don\u0027t really care about the exact mode/variant, just the line rate in the end. I\u0027m also find with the current implementation, though.","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":false,"context_lines":[{"line_number":64,"context_line":"  // Maximum number of bytes per second this network interface can transmit in"},{"line_number":65,"context_line":"  // one direction without protocol overhead."},{"line_number":66,"context_line":"  // TODO: This will be derived from the list of supported modes, do we want to"},{"line_number":67,"context_line":"  // just provide supported modes (a potentially long enum), supported link"},{"line_number":68,"context_line":"  // speeds (a much shorter enum) or just this value? Or a combination?"},{"line_number":69,"context_line":"  int64 max_bandwidth \u003d 3;"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  // Does the interface have an active link."}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"1ed39788_c748ed02","line":68,"range":{"start_line":67,"start_character":61,"end_line":68,"end_character":33},"in_reply_to":"af4ed249_5bb898cc","updated":"2022-11-08 18:25:12.000000000","message":"I went with a simple speed int64 as the enum was very large and had annoying quirks (like with 2.5GBASE and 25GBASE) as well as essentially being a list of LM_[NUMBER]BASE.","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":69,"context_line":"  int64 max_bandwidth \u003d 3;"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  // Does the interface have an active link."},{"line_number":72,"context_line":"  bool has_link \u003d 4;"},{"line_number":73,"context_line":"  // Currently-negotiated bandwidth in bytes per second. Unstable on marginal"},{"line_number":74,"context_line":"  // links."},{"line_number":75,"context_line":"  int64 current_bandwidth \u003d 5;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"0cb5e3f5_90a8d729","line":72,"range":{"start_line":72,"start_character":7,"end_line":72,"end_character":15},"updated":"2022-11-08 14:45:46.000000000","message":"nit: link_up?","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  int64 max_bandwidth \u003d 3;"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  // Does the interface have an active link."},{"line_number":72,"context_line":"  bool has_link \u003d 4;"},{"line_number":73,"context_line":"  // Currently-negotiated bandwidth in bytes per second. Unstable on marginal"},{"line_number":74,"context_line":"  // links."},{"line_number":75,"context_line":"  int64 current_bandwidth \u003d 5;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"9c312eaa_981a29b0","line":72,"range":{"start_line":72,"start_character":7,"end_line":72,"end_character":15},"in_reply_to":"0cb5e3f5_90a8d729","updated":"2022-11-08 18:25:12.000000000","message":"Done","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"message CPU {"},{"line_number":90,"context_line":"  enum ISA {"},{"line_number":91,"context_line":"    UNDEFINED \u003d 0;"},{"line_number":92,"context_line":"    X86_64 \u003d 1;"},{"line_number":93,"context_line":"    ARM64 \u003d 2;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"7ea2546e_df46a017","line":90,"range":{"start_line":90,"start_character":7,"end_line":90,"end_character":10},"updated":"2022-11-08 14:45:46.000000000","message":"I would call this something significantly less formal like \u0027family\u0027 and have our own definitions of what each one means (eg. in terms of compatibility with other naming schemes), as talking about instruction set architectures in context of ARM and especially RISC-V is the world\u0027s largest can of worms.","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":true,"context_lines":[{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"message CPU {"},{"line_number":90,"context_line":"  enum ISA {"},{"line_number":91,"context_line":"    UNDEFINED \u003d 0;"},{"line_number":92,"context_line":"    X86_64 \u003d 1;"},{"line_number":93,"context_line":"    ARM64 \u003d 2;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"fe3c15ea_0828889a","line":90,"range":{"start_line":90,"start_character":7,"end_line":90,"end_character":10},"in_reply_to":"7ea2546e_df46a017","updated":"2022-11-08 18:25:12.000000000","message":"Have a look at the updated definition.","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"2aa65be42133d3ec1e9c68358cf95308327dde6d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"message CPU {"},{"line_number":90,"context_line":"  enum ISA {"},{"line_number":91,"context_line":"    UNDEFINED \u003d 0;"},{"line_number":92,"context_line":"    X86_64 \u003d 1;"},{"line_number":93,"context_line":"    ARM64 \u003d 2;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"7ceadfb5_33473ddb","line":90,"range":{"start_line":90,"start_character":7,"end_line":90,"end_character":10},"in_reply_to":"fe3c15ea_0828889a","updated":"2022-11-10 14:09:05.000000000","message":"Ack","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":94,"context_line":"    RISCV64 \u003d 3;"},{"line_number":95,"context_line":"  }"},{"line_number":96,"context_line":"  ISA isa \u003d 1;"},{"line_number":97,"context_line":"  int32 cores \u003d 2;"},{"line_number":98,"context_line":"  // Everything below is not guaranteed to be present, but should be available on most systems."},{"line_number":99,"context_line":"  int32 threads_per_core \u003d 3;"},{"line_number":100,"context_line":"  string vendor \u003d 5;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"5eb82a00_a0d064eb","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":13},"updated":"2022-11-08 14:45:46.000000000","message":"This needs a definition. If you\u0027re set on immediately implementing RISC-V support please specify on how this relates to harts/hardware threads.\n\n(I would drop ARM64 and RISCV64 support for now and/or have cores\u0026threads_per_core be defined per ISA/Family)","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":true,"context_lines":[{"line_number":94,"context_line":"    RISCV64 \u003d 3;"},{"line_number":95,"context_line":"  }"},{"line_number":96,"context_line":"  ISA isa \u003d 1;"},{"line_number":97,"context_line":"  int32 cores \u003d 2;"},{"line_number":98,"context_line":"  // Everything below is not guaranteed to be present, but should be available on most systems."},{"line_number":99,"context_line":"  int32 threads_per_core \u003d 3;"},{"line_number":100,"context_line":"  string vendor \u003d 5;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"f86eff09_0079bc5f","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":13},"in_reply_to":"5eb82a00_a0d064eb","updated":"2022-11-08 18:25:12.000000000","message":"The idea was that cores are the amount of \"cores\", i.e. entities not sharing execution units. So in RISC-V harts would show up in threads_per_core. harts are basically just RISC-Vs version of SMT which should be covered cores/threads_per_core.\nBut I\u0027m thinking about exposing threads (harts in RISC-V speak) as the top-level thing as it\u0027s the most reliable indicator.","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"2aa65be42133d3ec1e9c68358cf95308327dde6d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    RISCV64 \u003d 3;"},{"line_number":95,"context_line":"  }"},{"line_number":96,"context_line":"  ISA isa \u003d 1;"},{"line_number":97,"context_line":"  int32 cores \u003d 2;"},{"line_number":98,"context_line":"  // Everything below is not guaranteed to be present, but should be available on most systems."},{"line_number":99,"context_line":"  int32 threads_per_core \u003d 3;"},{"line_number":100,"context_line":"  string vendor \u003d 5;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"23b84d0b_2b1805da","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":13},"in_reply_to":"f86eff09_0079bc5f","updated":"2022-11-10 14:09:05.000000000","message":"Ack","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":99,"context_line":"  int32 threads_per_core \u003d 3;"},{"line_number":100,"context_line":"  string vendor \u003d 5;"},{"line_number":101,"context_line":"  string model_name \u003d 6;"},{"line_number":102,"context_line":"  int32 model \u003d 7;"},{"line_number":103,"context_line":"  // Specific to x86, but important"},{"line_number":104,"context_line":"  int32 family \u003d 8;"},{"line_number":105,"context_line":"}"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"67a31365_ff67174e","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":13},"updated":"2022-11-08 14:45:46.000000000","message":"What\u0027s that?","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  int32 threads_per_core \u003d 3;"},{"line_number":100,"context_line":"  string vendor \u003d 5;"},{"line_number":101,"context_line":"  string model_name \u003d 6;"},{"line_number":102,"context_line":"  int32 model \u003d 7;"},{"line_number":103,"context_line":"  // Specific to x86, but important"},{"line_number":104,"context_line":"  int32 family \u003d 8;"},{"line_number":105,"context_line":"}"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"1e2dbf38_4524fba1","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":13},"in_reply_to":"67a31365_ff67174e","updated":"2022-11-08 18:25:12.000000000","message":"Done","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":100,"context_line":"  string vendor \u003d 5;"},{"line_number":101,"context_line":"  string model_name \u003d 6;"},{"line_number":102,"context_line":"  int32 model \u003d 7;"},{"line_number":103,"context_line":"  // Specific to x86, but important"},{"line_number":104,"context_line":"  int32 family \u003d 8;"},{"line_number":105,"context_line":"}"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"cd130b87_88d1f928","line":103,"range":{"start_line":103,"start_character":5,"end_line":103,"end_character":20},"updated":"2022-11-08 14:45:46.000000000","message":"Encode this in the type then (ie. put it in a message specific to x86_64), as per the comment about cores/threads?","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":false,"context_lines":[{"line_number":100,"context_line":"  string vendor \u003d 5;"},{"line_number":101,"context_line":"  string model_name \u003d 6;"},{"line_number":102,"context_line":"  int32 model \u003d 7;"},{"line_number":103,"context_line":"  // Specific to x86, but important"},{"line_number":104,"context_line":"  int32 family \u003d 8;"},{"line_number":105,"context_line":"}"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"c65e6a9c_74a6156c","line":103,"range":{"start_line":103,"start_character":5,"end_line":103,"end_character":20},"in_reply_to":"cd130b87_88d1f928","updated":"2022-11-08 18:25:12.000000000","message":"Done","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"6ab900f82f31609ff66c3600e37f6dfc92a0e3b7","unresolved":true,"context_lines":[{"line_number":128,"context_line":"  // across kernel versions and even firmware configuration settings and should"},{"line_number":129,"context_line":"  // only be used to detect gross mismatches. 1 means all of the claimed"},{"line_number":130,"context_line":"  // installed memory is available, 0 means none."},{"line_number":131,"context_line":"  float memory_usable_fraction \u003d 9;"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"  repeated CPU cpu \u003d 10;"},{"line_number":134,"context_line":"  repeated BlockDevice block_device \u003d 11;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"a96fbf1c_742c960d","line":131,"range":{"start_line":131,"start_character":22,"end_line":131,"end_character":30},"updated":"2022-11-08 14:45:46.000000000","message":"Ratio?","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"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":"7882b8fa7b4cdbb3afae9e950f2d40e85342f063","unresolved":false,"context_lines":[{"line_number":128,"context_line":"  // across kernel versions and even firmware configuration settings and should"},{"line_number":129,"context_line":"  // only be used to detect gross mismatches. 1 means all of the claimed"},{"line_number":130,"context_line":"  // installed memory is available, 0 means none."},{"line_number":131,"context_line":"  float memory_usable_fraction \u003d 9;"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"  repeated CPU cpu \u003d 10;"},{"line_number":134,"context_line":"  repeated BlockDevice block_device \u003d 11;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"5a52a037_3c5899c6","line":131,"range":{"start_line":131,"start_character":22,"end_line":131,"end_character":30},"in_reply_to":"a96fbf1c_742c960d","updated":"2022-11-08 18:25:12.000000000","message":"Done","commit_id":"9d975b9f79b694274bcb6a28b8d2a055b9d4cb1b"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"dcf4b11322c6451417f48cc569ce30c2ae8d1b3a","unresolved":true,"context_lines":[{"line_number":23,"context_line":"    ATA \u003d 2; // TODO: There are cases where SCSI and ATA cannot be reliably distinguished, do we want to only keep SCSI?"},{"line_number":24,"context_line":"    NVME \u003d 3;"},{"line_number":25,"context_line":"    MMC \u003d 4;"},{"line_number":26,"context_line":"    // TODO: I\u0027m not aware of any other block storage media. SPI flash doesn\u0027t count (not a block device and needs FTL)"},{"line_number":27,"context_line":"    // and CompactFlash are just ATA on the protocol layer, newer SD cards are NVME."},{"line_number":28,"context_line":"  }"},{"line_number":29,"context_line":"  Protocol protocol \u003d 9;"}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"978dcb31_e928ec17","line":26,"updated":"2022-11-28 17:48:56.000000000","message":"USB mass storage perhaps? Or do we ignore them?","commit_id":"92de2954bee487908ec248444edf60d113bfb697"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1325e796725f7a3db68c3b4cb69a7eb6d059c30f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    ATA \u003d 2; // TODO: There are cases where SCSI and ATA cannot be reliably distinguished, do we want to only keep SCSI?"},{"line_number":24,"context_line":"    NVME \u003d 3;"},{"line_number":25,"context_line":"    MMC \u003d 4;"},{"line_number":26,"context_line":"    // TODO: I\u0027m not aware of any other block storage media. SPI flash doesn\u0027t count (not a block device and needs FTL)"},{"line_number":27,"context_line":"    // and CompactFlash are just ATA on the protocol layer, newer SD cards are NVME."},{"line_number":28,"context_line":"  }"},{"line_number":29,"context_line":"  Protocol protocol \u003d 9;"}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"0e5eef34_5bc7b346","line":26,"in_reply_to":"7dd3e93d_c27f9f70","updated":"2022-11-29 16:08:54.000000000","message":"Ack","commit_id":"92de2954bee487908ec248444edf60d113bfb697"},{"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":"bc6b455f344099e465a6a343aa34ebbac4c8d049","unresolved":true,"context_lines":[{"line_number":23,"context_line":"    ATA \u003d 2; // TODO: There are cases where SCSI and ATA cannot be reliably distinguished, do we want to only keep SCSI?"},{"line_number":24,"context_line":"    NVME \u003d 3;"},{"line_number":25,"context_line":"    MMC \u003d 4;"},{"line_number":26,"context_line":"    // TODO: I\u0027m not aware of any other block storage media. SPI flash doesn\u0027t count (not a block device and needs FTL)"},{"line_number":27,"context_line":"    // and CompactFlash are just ATA on the protocol layer, newer SD cards are NVME."},{"line_number":28,"context_line":"  }"},{"line_number":29,"context_line":"  Protocol protocol \u003d 9;"}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"7dd3e93d_c27f9f70","line":26,"in_reply_to":"978dcb31_e928ec17","updated":"2022-11-29 12:24:38.000000000","message":"That\u0027s actually (a specified subset of) SCSI. Could be distinguished by looking for a specific driver, but not by protocol.","commit_id":"92de2954bee487908ec248444edf60d113bfb697"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"dcf4b11322c6451417f48cc569ce30c2ae8d1b3a","unresolved":true,"context_lines":[{"line_number":29,"context_line":"  Protocol protocol \u003d 9;"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  // Set if the block device has reasons to believe that it will fail soon."},{"line_number":32,"context_line":"  // This is entirely controlled by firmware, it\u0027s accuracy is as good as"},{"line_number":33,"context_line":"  // the vendor has made it."},{"line_number":34,"context_line":"  bool critical_warning \u003d 10;"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"4cf099d8_f726ce0d","line":32,"range":{"start_line":32,"start_character":46,"end_line":32,"end_character":50},"updated":"2022-11-28 17:48:56.000000000","message":"*its","commit_id":"92de2954bee487908ec248444edf60d113bfb697"},{"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":"17e14ec00a1c8a781a25f4438756ea6300a3ea40","unresolved":false,"context_lines":[{"line_number":29,"context_line":"  Protocol protocol \u003d 9;"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  // Set if the block device has reasons to believe that it will fail soon."},{"line_number":32,"context_line":"  // This is entirely controlled by firmware, it\u0027s accuracy is as good as"},{"line_number":33,"context_line":"  // the vendor has made it."},{"line_number":34,"context_line":"  bool critical_warning \u003d 10;"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"fa86803a_91532936","line":32,"range":{"start_line":32,"start_character":46,"end_line":32,"end_character":50},"in_reply_to":"4cf099d8_f726ce0d","updated":"2022-12-20 16:40:15.000000000","message":"Done","commit_id":"92de2954bee487908ec248444edf60d113bfb697"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"91e689a120f2e9f917b037cbf71d39f7387205fc","unresolved":true,"context_lines":[{"line_number":3,"context_line":"option go_package \u003d \"source.monogon.dev/cloud/agent/api\";"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"message BlockDevice {"},{"line_number":6,"context_line":"  string vendor \u003d 1;"},{"line_number":7,"context_line":"  string device_model \u003d 2;"},{"line_number":8,"context_line":"  string serial_number \u003d 3;"},{"line_number":9,"context_line":"  bytes wwn \u003d 4;"},{"line_number":10,"context_line":"  bool rotational \u003d 5;"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"  // Usable capacity in bytes"},{"line_number":13,"context_line":"  int64 capacity_bytes \u003d 6;"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"7e910e9c_e86bea8f","line":11,"range":{"start_line":6,"start_character":0,"end_line":11,"end_character":0},"updated":"2022-12-31 13:53:18.000000000","message":"nit: these are mostly self-explanatory, but perhaps add some documentation too?","commit_id":"8c3cec2039136e4f259c4bf0ef7f642d5638b4cc"},{"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":"8b15e11ecf40f553ab05f19f6d6afd8532d8ad89","unresolved":false,"context_lines":[{"line_number":3,"context_line":"option go_package \u003d \"source.monogon.dev/cloud/agent/api\";"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"message BlockDevice {"},{"line_number":6,"context_line":"  string vendor \u003d 1;"},{"line_number":7,"context_line":"  string device_model \u003d 2;"},{"line_number":8,"context_line":"  string serial_number \u003d 3;"},{"line_number":9,"context_line":"  bytes wwn \u003d 4;"},{"line_number":10,"context_line":"  bool rotational \u003d 5;"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"  // Usable capacity in bytes"},{"line_number":13,"context_line":"  int64 capacity_bytes \u003d 6;"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"cbfb3355_87d86eab","line":11,"range":{"start_line":6,"start_character":0,"end_line":11,"end_character":0},"in_reply_to":"7e910e9c_e86bea8f","updated":"2023-01-03 17:25:07.000000000","message":"Done","commit_id":"8c3cec2039136e4f259c4bf0ef7f642d5638b4cc"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"91e689a120f2e9f917b037cbf71d39f7387205fc","unresolved":true,"context_lines":[{"line_number":40,"context_line":"  // Fraction of spare space still available to replace bad blocks."},{"line_number":41,"context_line":"  // If this reaches zero, the disk generally dies."},{"line_number":42,"context_line":"  optional float available_spare \u003d 12;"},{"line_number":43,"context_line":"  // Fraction of the estimated life of the device used up."},{"line_number":44,"context_line":"  // Only considers flash wear, not runtime or similar."},{"line_number":45,"context_line":"  // Reported by firmware, as accurate as the vendor has made it."},{"line_number":46,"context_line":"  optional float used \u003d 13;"},{"line_number":47,"context_line":"}"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"message NetworkInterface {"},{"line_number":50,"context_line":"  // Contains the EUI-48 MAC address of the interface."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"4d7bf402_92ae86e7","line":47,"range":{"start_line":43,"start_character":0,"end_line":47,"end_character":0},"updated":"2022-12-31 13:53:18.000000000","message":"Best practices question for Serge: worth to always denominate units in field names? e.g. `used_percentage`, or `current_speed_bps`, like with Prometheus metrics?","commit_id":"8c3cec2039136e4f259c4bf0ef7f642d5638b4cc"},{"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":"017fb12e1ddb0282b132bbe46914de7913788b76","unresolved":true,"context_lines":[{"line_number":40,"context_line":"  // Fraction of spare space still available to replace bad blocks."},{"line_number":41,"context_line":"  // If this reaches zero, the disk generally dies."},{"line_number":42,"context_line":"  optional float available_spare \u003d 12;"},{"line_number":43,"context_line":"  // Fraction of the estimated life of the device used up."},{"line_number":44,"context_line":"  // Only considers flash wear, not runtime or similar."},{"line_number":45,"context_line":"  // Reported by firmware, as accurate as the vendor has made it."},{"line_number":46,"context_line":"  optional float used \u003d 13;"},{"line_number":47,"context_line":"}"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"message NetworkInterface {"},{"line_number":50,"context_line":"  // Contains the EUI-48 MAC address of the interface."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"b964098b_6db39665","line":47,"range":{"start_line":43,"start_character":0,"end_line":47,"end_character":0},"in_reply_to":"4d7bf402_92ae86e7","updated":"2023-01-03 10:15:06.000000000","message":"Yeah, I think that would be a good rule to follow.","commit_id":"8c3cec2039136e4f259c4bf0ef7f642d5638b4cc"},{"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":"8b15e11ecf40f553ab05f19f6d6afd8532d8ad89","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  // Fraction of spare space still available to replace bad blocks."},{"line_number":41,"context_line":"  // If this reaches zero, the disk generally dies."},{"line_number":42,"context_line":"  optional float available_spare \u003d 12;"},{"line_number":43,"context_line":"  // Fraction of the estimated life of the device used up."},{"line_number":44,"context_line":"  // Only considers flash wear, not runtime or similar."},{"line_number":45,"context_line":"  // Reported by firmware, as accurate as the vendor has made it."},{"line_number":46,"context_line":"  optional float used \u003d 13;"},{"line_number":47,"context_line":"}"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"message NetworkInterface {"},{"line_number":50,"context_line":"  // Contains the EUI-48 MAC address of the interface."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"c34c1434_9aa8ecbe","line":47,"range":{"start_line":43,"start_character":0,"end_line":47,"end_character":0},"in_reply_to":"b964098b_6db39665","updated":"2023-01-03 17:25:07.000000000","message":"Done","commit_id":"8c3cec2039136e4f259c4bf0ef7f642d5638b4cc"}]}
