Sam Sung and Claude Opus 5.5
61f17d46c3
who_sort: the class, race and zone arms order a miss after every resolved name and tie two misses, a total order sort_by can take ( #626 )
...
`dbc_name_cmp`, behind the who list's class, race and zone keys, answered `Equal` whenever either name was empty. So `"" = "Mage"` and `"" = "Warrior"` while `"Mage" < "Warrior"`: not a total order, and since Rust 1.81 `slice::sort_by` may panic on one. Empty names are real input, since `who_row` writes `""` for any id with no name.
The reference's arms (`0x5ada7b`, `0x5adadf`, `0x5adb40`) look both ids up and, when either row is missing, jump to the chain loop's continue label (`0x5adbb2`, from `0x5adab6`): a tie. Its `qsort` tolerates that; ours cannot. Now:
- two resolved names compare as before;
- two misses tie, so the next key decides, as in the reference;
- a miss orders after every resolved name. That case is marked as a deviation, since no total order can tie there.
`the_dbc_arms_are_a_total_order` checks antisymmetry and transitivity over a mixed 21-row set for each key. It fails with the old arm, as do `an_unresolved_dbc_name_sorts_after_the_resolved_ones` and `sorting_a_mixed_list_puts_misses_last_without_panicking`. Built and gated on macOS.
Fixes #620
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-29 19:08:28 +07:00
..
2026-09-29 02:30:40 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 17:26:43 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 00:12:27 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 16:31:47 +07:00
2026-09-29 02:30:40 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 17:26:43 +07:00
2026-09-25 17:26:43 +07:00
2026-09-29 03:19:56 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 03:19:56 +07:00
2026-09-28 10:11:40 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 10:09:02 +07:00
2026-09-28 11:40:53 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 15:53:20 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:44:52 +07:00
2026-09-28 13:32:22 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 17:01:02 +07:00
2026-09-29 03:19:56 +07:00
2026-09-28 20:19:05 +07:00
2026-09-28 15:09:27 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 17:26:43 +07:00
2026-09-28 22:12:45 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 02:30:40 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 02:30:40 +07:00
2026-09-25 17:26:43 +07:00
2026-09-29 01:44:52 +07:00
2026-09-29 01:21:17 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 10:09:02 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 00:12:27 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-28 22:12:45 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 17:26:43 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 10:51:21 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 03:19:56 +07:00
2026-09-25 17:26:43 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 10:51:21 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 17:26:43 +07:00
2026-09-25 15:55:32 +07:00
2026-09-29 03:19:56 +07:00
2026-09-25 17:01:02 +07:00
2026-09-29 03:19:56 +07:00
2026-09-29 03:19:56 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 12:59:54 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 03:19:56 +07:00
2026-09-29 16:31:47 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:21:17 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:44:52 +07:00
2026-09-29 02:30:40 +07:00
2026-09-29 03:19:56 +07:00
2026-09-29 03:19:56 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:44:52 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 03:19:56 +07:00
2026-09-26 08:57:47 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 02:30:40 +07:00
2026-09-25 17:26:43 +07:00
2026-09-29 00:12:27 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 17:26:43 +07:00
2026-09-29 01:44:52 +07:00
2026-09-29 16:31:47 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 02:30:40 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 16:31:47 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 02:30:40 +07:00
2026-09-29 16:31:47 +07:00
2026-09-28 15:28:30 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 01:44:52 +07:00
2026-09-25 01:58:49 +07:00
2026-09-28 22:12:45 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 19:08:28 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 03:19:56 +07:00
2026-09-25 01:58:49 +07:00
2026-09-25 01:58:49 +07:00
2026-09-29 02:30:40 +07:00