)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2aaf21eac3e42352dafacd6ea0276b01c08f4ac9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"cd2a7d46_8dc7a103","updated":"2025-08-05 06:43:01.000000000","message":"Nice find and fix Tim!","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0c3ed45a70be005c8fb045c79f2f811b3e3439d9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"982751e4_d09ee8f1","updated":"2025-08-04 05:48:19.000000000","message":"Nice spot!\n\nDone some testing and yeah I was gettin the seg fault on occation too before this patch!\n\n-1 because I think your incrementing num_failures too soon.","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"}],"src/builtin/xor_codes/xor_code.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5b593388b9eb1a32054b464b50131cd465b8f867","unresolved":true,"context_lines":[{"line_number":82,"context_line":"failure_pattern_t get_failure_pattern(xor_code_t *code_desc, int *missing_idxs)"},{"line_number":83,"context_line":"{"},{"line_number":84,"context_line":"  int i \u003d 0;"},{"line_number":85,"context_line":"  int num_failures \u003d 0;"},{"line_number":86,"context_line":"  failure_pattern_t pattern \u003d FAIL_PATTERN_0D_0P;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  while (missing_idxs[i] \u003e -1) {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"d4823b6b_e8d6d44c","line":85,"updated":"2025-07-29 20:29:47.000000000","message":"We defined it, and even check against it! We just forgot to actually *change* it...","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0c3ed45a70be005c8fb045c79f2f811b3e3439d9","unresolved":true,"context_lines":[{"line_number":86,"context_line":"  failure_pattern_t pattern \u003d FAIL_PATTERN_0D_0P;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  while (missing_idxs[i] \u003e -1) {"},{"line_number":89,"context_line":"    num_failures++;"},{"line_number":90,"context_line":"    if (num_failures \u003e\u003d code_desc-\u003ehd) {"},{"line_number":91,"context_line":"      pattern \u003d FAIL_PATTERN_GE_HD;"},{"line_number":92,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"a0a6bf76_31c5750f","line":89,"updated":"2025-08-04 05:48:19.000000000","message":"Should this be incremented here, or down near the `i` incrementation? Otherwise why did we even both defaulting num_failures to 0?","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2aaf21eac3e42352dafacd6ea0276b01c08f4ac9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"  failure_pattern_t pattern \u003d FAIL_PATTERN_0D_0P;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  while (missing_idxs[i] \u003e -1) {"},{"line_number":89,"context_line":"    num_failures++;"},{"line_number":90,"context_line":"    if (num_failures \u003e\u003d code_desc-\u003ehd) {"},{"line_number":91,"context_line":"      pattern \u003d FAIL_PATTERN_GE_HD;"},{"line_number":92,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"df8640de_e26d3da7","line":89,"in_reply_to":"17581af2_51b1f74e","updated":"2025-08-05 06:43:01.000000000","message":"Yeah good point. Nah we defined it, let\u0027s just use it ;)","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8cbdae2fc13ba3ac47fbaa2b8a79122f5bbd16a4","unresolved":true,"context_lines":[{"line_number":86,"context_line":"  failure_pattern_t pattern \u003d FAIL_PATTERN_0D_0P;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  while (missing_idxs[i] \u003e -1) {"},{"line_number":89,"context_line":"    num_failures++;"},{"line_number":90,"context_line":"    if (num_failures \u003e\u003d code_desc-\u003ehd) {"},{"line_number":91,"context_line":"      pattern \u003d FAIL_PATTERN_GE_HD;"},{"line_number":92,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"17581af2_51b1f74e","line":89,"in_reply_to":"a0a6bf76_31c5750f","updated":"2025-08-04 18:14:23.000000000","message":"So `missing_idxs` is a list of missing indexes, right? But it\u0027s variable-length and can include zero, so the sentinel for end-of-list is a negative number. As soon as we see there\u0027s a missing index (ie, `missing_idxs[i] \u003e -1`), we should increment -- otherwise we can return `FAIL_PATTERN_3D_0P` or something for `flat_xor_hd3` when we *should* be returning `FAIL_PATTERN_GE_HD`.\n\nI suppose an alternative would be to get rid of `num_failures` all together, and have\n```\n    if (i + 1 \u003e\u003d code_desc-\u003ehd) {\n      pattern \u003d FAIL_PATTERN_GE_HD;\n    }\n```\nbelow -- got a preference?","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a26230accdab56092daaf8f2bcdaa9a1703fabd","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        pattern \u003d (missing_idxs[i] \u003c code_desc-\u003ek) ? FAIL_PATTERN_2D_1P : FAIL_PATTERN_1D_2P;"},{"line_number":108,"context_line":"        break;"},{"line_number":109,"context_line":"      case FAIL_PATTERN_1D_2P:"},{"line_number":110,"context_line":"        pattern \u003d FAIL_PATTERN_GE_HD;"},{"line_number":111,"context_line":"        break;"},{"line_number":112,"context_line":"      case FAIL_PATTERN_2D_1P:"},{"line_number":113,"context_line":"        pattern \u003d FAIL_PATTERN_GE_HD;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"593a8f81_0e355ef4","line":110,"updated":"2025-08-01 05:30:44.000000000","message":"Off-topic: I think this is overly pessimistic -- if we lose another *data*, yeah, it\u0027s going to get hairy -- but (for m \u003d 5 or 6) depending on *which* parities remain, we *might* be able to rebuild.","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a26230accdab56092daaf8f2bcdaa9a1703fabd","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        pattern \u003d FAIL_PATTERN_GE_HD;"},{"line_number":111,"context_line":"        break;"},{"line_number":112,"context_line":"      case FAIL_PATTERN_2D_1P:"},{"line_number":113,"context_line":"        pattern \u003d FAIL_PATTERN_GE_HD;"},{"line_number":114,"context_line":"        break;"},{"line_number":115,"context_line":"      case FAIL_PATTERN_0D_1P:"},{"line_number":116,"context_line":"        pattern \u003d (missing_idxs[i] \u003c code_desc-\u003ek) ? FAIL_PATTERN_1D_1P : FAIL_PATTERN_0D_2P;"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"1bdb986b_50921f59","line":113,"updated":"2025-08-01 05:30:44.000000000","message":"I *think* there are even cases where we ought to be able to rebuild here, too -- but like I said, it\u0027d probably get a little hairy.","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a26230accdab56092daaf8f2bcdaa9a1703fabd","unresolved":true,"context_lines":[{"line_number":119,"context_line":"        pattern \u003d (missing_idxs[i] \u003c code_desc-\u003ek) ? FAIL_PATTERN_1D_2P : FAIL_PATTERN_0D_3P;"},{"line_number":120,"context_line":"        break;"},{"line_number":121,"context_line":"      case FAIL_PATTERN_0D_3P:"},{"line_number":122,"context_line":"        pattern \u003d FAIL_PATTERN_GE_HD;"},{"line_number":123,"context_line":"        break;"},{"line_number":124,"context_line":"      case FAIL_PATTERN_GE_HD:"},{"line_number":125,"context_line":"      default:"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"b796f3ab_d6ecadc5","line":122,"updated":"2025-08-01 05:30:44.000000000","message":"This one\u0027s *especially* weird -- if we\u0027ve only lost parity, we should absolutely be able to reconstruct (and rebuild parities). This should totally look more like\n```\npattern \u003d (missing_idxs[i] \u003c code_desc-\u003ek) ? FAIL_PATTERN_GE_HD : FAIL_PATTERN_0D_3P;\n```","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"}],"src/builtin/xor_codes/xor_hd_code.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5b593388b9eb1a32054b464b50131cd465b8f867","unresolved":true,"context_lines":[{"line_number":371,"context_line":"      case FAIL_PATTERN_GE_HD:"},{"line_number":372,"context_line":"      default:"},{"line_number":373,"context_line":"        ret \u003d -1;"},{"line_number":374,"context_line":"        break;"},{"line_number":375,"context_line":"    }"},{"line_number":376,"context_line":"  }"},{"line_number":377,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":1,"id":"abe32588_a09c9145","line":374,"updated":"2025-07-29 20:29:47.000000000","message":"We really should have been suspicious about behaving *exactly* the same way we did for `FAIL_PATTERN_0D_0P`....","commit_id":"cafdc14aef03b0edf81fcdbe26e7f2635e865543"}]}
