From 2a1826f4c37cd689322373e5bb65c6628c42cacb Mon Sep 17 00:00:00 2001 From: folkengine Date: Sat, 19 Sep 2026 13:53:14 -0700 Subject: [PATCH] diary annotated --- CHANGELOG.md | 11 + Cargo.toml | 2 +- DIARY_LINKED.md | 876 ++++++++++++++++++++++++++++++++++++++++++ Makefile | 7 +- scripts/link_diary.py | 79 ++++ 5 files changed, 973 insertions(+), 2 deletions(-) create mode 100644 DIARY_LINKED.md create mode 100644 scripts/link_diary.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 95fbe483..eb4d5b0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,17 @@ All notable changes to this project are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.15.2] - 2026-09-19 + +### Added + +- **`DIARY_LINKED.md`**, a copy of `DIARY.md` where every line links to the + GitHub tree at the commit that wrote it, so each diary entry opens the repo as + it was at that point. Regenerate it with `make diary-links` + (`scripts/link_diary.py`). The script uses `git blame -C -C` to follow lines + back through the diary's move out of `README.md`; a plain blame would credit + most of the diary to that move. + ## [0.15.1] - 2026-09-16 ### Added diff --git a/Cargo.toml b/Cargo.toml index fa708d6c..cb56eaef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "pkcore" description = "Prototype core poker library." -version = "0.15.1" +version = "0.15.2" rust-version = "1.94.1" edition = "2024" authors = ["electronicpanopticon "] diff --git a/DIARY_LINKED.md b/DIARY_LINKED.md new file mode 100644 index 00000000..134cffab --- /dev/null +++ b/DIARY_LINKED.md @@ -0,0 +1,876 @@ + + +# [Outline of work](https://github.com/ImperialBower/pkcore/tree/9186e6df381d280977a1d41b015c97d1b8117161 "2024-02-24 · 9186e6d") + +[This is an outline of the work as it is done.](https://github.com/ImperialBower/pkcore/tree/a615a3d9ee0144c1c97457106a4c9ece56fff79a "2024-02-19 · a615a3d") + +* [Create pkcore lib](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Set #!\[warn(clippy::pedantic)\]](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") +* [EPIC: Display HandRank](https://github.com/ImperialBower/pkcore/tree/c4ce071e07bfee9ffa9ee08e0dfe8c1f3d64770c "2022-05-27 · c4ce071") + * [Rank](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [lib:PKError](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [create enum](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [::from(char)](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Testing: TELL THE HEROES STORY](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * Tests using [rstest](https://crates.io/crates/rstest) BRUTE FORCE [↗ 65386ea](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [Readability of tests names (short, matching, clear)](https://github.com/ImperialBower/pkcore/tree/0d38b37fb5a6edbec84a749e6924ce2bee4fa141 "2022-05-22 · 0d38b37") + * [Hub and spoke... take your time on the core.](https://github.com/ImperialBower/pkcore/tree/0d38b37fb5a6edbec84a749e6924ce2bee4fa141 "2022-05-22 · 0d38b37") + * [Negative boundary conditions](https://github.com/ImperialBower/pkcore/tree/0d38b37fb5a6edbec84a749e6924ce2bee4fa141 "2022-05-22 · 0d38b37") + * [::from_str()](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [test neg scenarios #\[allow(non_snake_case)\]](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Suit](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [create enum](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [::from(char)](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * Tests using [rstest](https://crates.io/crates/rstest) [↗ c7a793c](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [::from_str()](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [test neg scenarios #\[allow(non_snake_case)\]](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Card](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [CKC Card Number consts](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Intro to CKC Numbers](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [::as_u32()](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [::from (filter)](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [#\[derive(Clone, Copy, Debug, Default, Eq, PartialEq)\]](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Talk about brute force testing philosophy.](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Add Rank.number(), .bits(), .prime(), and .shift8().](https://github.com/ImperialBower/pkcore/tree/de09c04c998f3ffe6adf15a950507cdf6c6e7625 "2022-05-17 · de09c04") + * [strum::EnumIter && tests](https://github.com/ImperialBower/pkcore/tree/de09c04c998f3ffe6adf15a950507cdf6c6e7625 "2022-05-17 · de09c04") + * [card_consts](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [::new](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [.is_blank()](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [.from_str()](https://github.com/ImperialBower/pkcore/tree/de09c04c998f3ffe6adf15a950507cdf6c6e7625 "2022-05-17 · de09c04") + * [Boundary conditions tests.](https://github.com/ImperialBower/pkcore/tree/de09c04c998f3ffe6adf15a950507cdf6c6e7625 "2022-05-17 · de09c04") + * [THE WONDERFUL ? operator](https://github.com/ImperialBower/pkcore/tree/11f0059cf70bf6ec57310a4e056f03d8fa578e89 "2022-05-28 · 11f0059") + * [Detour on Testing as the Hero's Journey](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [tell the story](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [scannable](https://github.com/ImperialBower/pkcore/tree/c7a793cd546a276f8f4485d4e69cd1c372963aac "2022-05-16 · c7a793c") + * [Move card numbers and make private](https://github.com/ImperialBower/pkcore/tree/755a7abebd1556604149454b9e3beda43f1cc141 "2022-05-17 · 755a7ab") + * [.to_string() which means doing it for Rank and Suit.](https://github.com/ImperialBower/pkcore/tree/b8cdfae8e4b49ce6f6243e84f037fe148a971a36 "2022-05-17 · b8cdfae") + * [Rank](https://github.com/ImperialBower/pkcore/tree/b8cdfae8e4b49ce6f6243e84f037fe148a971a36 "2022-05-17 · b8cdfae") + * [.to_string() thus .to_char()](https://github.com/ImperialBower/pkcore/tree/b8cdfae8e4b49ce6f6243e84f037fe148a971a36 "2022-05-17 · b8cdfae") + * [Suit](https://github.com/ImperialBower/pkcore/tree/b8cdfae8e4b49ce6f6243e84f037fe148a971a36 "2022-05-17 · b8cdfae") + * [.to_string() thus .to_char()](https://github.com/ImperialBower/pkcore/tree/b8cdfae8e4b49ce6f6243e84f037fe148a971a36 "2022-05-17 · b8cdfae") + * [Card](https://github.com/ImperialBower/pkcore/tree/a6541a1d6368172723d2ea9c524cd501000c24f0 "2022-05-18 · a6541a1") + * [.to_string()](https://github.com/ImperialBower/pkcore/tree/a6541a1d6368172723d2ea9c524cd501000c24f0 "2022-05-18 · a6541a1") + * [Cards](https://github.com/ImperialBower/pkcore/tree/72755ce6e7c08b9da4819b4aa718ba83a977154d "2022-05-18 · 72755ce") + * [indexmap::IndexSet](https://github.com/bluss/indexmap) [↗ 98ed245](https://github.com/ImperialBower/pkcore/tree/98ed245dee359be9775f4556960878daaabdbfb8 "2022-05-18 · 98ed245") + * [indexmap::set::Iter](https://github.com/ImperialBower/pkcore/tree/b814225cc82275cfb961784023e1fc351639743c "2022-05-18 · b814225") + * [.len() .is_empty()](https://github.com/ImperialBower/pkcore/tree/72755ce6e7c08b9da4819b4aa718ba83a977154d "2022-05-18 · 72755ce") + * [.insert and .iter()](https://github.com/ImperialBower/pkcore/tree/72755ce6e7c08b9da4819b4aa718ba83a977154d "2022-05-18 · 72755ce") + * [.to_string()](https://github.com/ImperialBower/pkcore/tree/b814225cc82275cfb961784023e1fc351639743c "2022-05-18 · b814225") + * [.sort() (adding Ord)](https://github.com/ImperialBower/pkcore/tree/b814225cc82275cfb961784023e1fc351639743c "2022-05-18 · b814225") + * [Card](https://github.com/ImperialBower/pkcore/tree/2bc2a9411c88f986094bef6c281df6c9d68ebc30 "2022-05-19 · 2bc2a94") + * [.bit_string() -- Talk about expressive logging.](https://github.com/ImperialBower/pkcore/tree/2bc2a9411c88f986094bef6c281df6c9d68ebc30 "2022-05-19 · 2bc2a94") + * [REFACTORING I don't expect you to copy out every part of the test code, although you are more than happy to. Think of this as a cooking show where I, your humble host, does most of the boring parts off camera so that you don't get bored. Voila! Losts of tests refactored!](https://github.com/ImperialBower/pkcore/tree/2bc2a9411c88f986094bef6c281df6c9d68ebc30 "2022-05-19 · 2bc2a94") + * [CardNumber enum](https://github.com/ImperialBower/pkcore/tree/c3b1a7a425b1ef0394c3719ae34156e685397965 "2022-05-18 · c3b1a7a") + * [into()](https://github.com/ImperialBower/pkcore/tree/1e01b124a04f68d840265a57df41978f10afda51 "2022-05-19 · 1e01b12") + * [rstests: Consolidating tests](https://github.com/ImperialBower/pkcore/tree/2bc2a9411c88f986094bef6c281df6c9d68ebc30 "2022-05-19 · 2bc2a94") + * [The problem is that they aren't really testing for value Just number not number to actual card](https://github.com/ImperialBower/pkcore/tree/2bc2a9411c88f986094bef6c281df6c9d68ebc30 "2022-05-19 · 2bc2a94") + * [Five INTRODUCING CACTUS KEV](https://github.com/ImperialBower/pkcore/tree/2bc2a9411c88f986094bef6c281df6c9d68ebc30 "2022-05-19 · 2bc2a94") + * [Cards](https://github.com/ImperialBower/pkcore/tree/10115effe64dc2e7176233fe5d70c40cb0535883 "2022-05-20 · 10115ef") + * [implement FromStr so can be used by arrays like Five.](https://github.com/ImperialBower/pkcore/tree/10115effe64dc2e7176233fe5d70c40cb0535883 "2022-05-20 · 10115ef") + * [need get_index() to do Five.from_str()](https://github.com/ImperialBower/pkcore/tree/3bb70598d073d965edeae288e1850e08f5e64012 "2022-05-20 · 3bb7059") + * [Five](https://github.com/ImperialBower/pkcore/tree/10115effe64dc2e7176233fe5d70c40cb0535883 "2022-05-20 · 10115ef") + * [impl TryFrom](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [now implement FromStr leveraging Cards.from_str()](https://github.com/ImperialBower/pkcore/tree/10115effe64dc2e7176233fe5d70c40cb0535883 "2022-05-20 · 10115ef") + * [.to_arr()](https://github.com/ImperialBower/pkcore/tree/29e912092baff857ac27e02fa6c221e53cf1df5d "2022-05-20 · 29e9120") + * [Get Five eval to return HandRank Number](https://github.com/ImperialBower/pkcore/tree/2bc2a9411c88f986094bef6c281df6c9d68ebc30 "2022-05-19 · 2bc2a94") + * [.rank()](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [.or_bits()](https://github.com/ImperialBower/pkcore/tree/29e912092baff857ac27e02fa6c221e53cf1df5d "2022-05-20 · 29e9120") + * [.or_rank_bits()](https://github.com/ImperialBower/pkcore/tree/29e912092baff857ac27e02fa6c221e53cf1df5d "2022-05-20 · 29e9120") + * [.and_bits()](https://github.com/ImperialBower/pkcore/tree/b10759940e00119666c4602f0a87e66a4562d9d1 "2022-05-20 · b107599") + * [.is_flush()](https://github.com/ImperialBower/pkcore/tree/b10759940e00119666c4602f0a87e66a4562d9d1 "2022-05-20 · b107599") + * [.rank()](https://github.com/ImperialBower/pkcore/tree/193b59f9b00138d4414d402a558a0aec99a4fbee "2022-05-20 · 193b59f") + * [flushes](https://github.com/ImperialBower/pkcore/tree/193b59f9b00138d4414d402a558a0aec99a4fbee "2022-05-20 · 193b59f") + * [unique](https://github.com/ImperialBower/pkcore/tree/d485d9e889af08e9d4337c32b335f8e45edc3a4a "2022-05-21 · d485d9e") + * [the rest](https://github.com/ImperialBower/pkcore/tree/d485d9e889af08e9d4337c32b335f8e45edc3a4a "2022-05-21 · d485d9e") + * [.multiply_primes()](https://github.com/ImperialBower/pkcore/tree/d485d9e889af08e9d4337c32b335f8e45edc3a4a "2022-05-21 · d485d9e") + * [Card.get_prime() (Add to get_rank tests)](https://github.com/ImperialBower/pkcore/tree/464f9f00807b7a08c9bdd21815fd921f6c74a653 "2022-05-21 · 464f9f0") + * [REFACTORING: Section for pub fn then private fn](https://github.com/ImperialBower/pkcore/tree/c1112b9cc127a8ab9c2ff46dde6bd5b8dac5392a "2022-05-21 · c1112b9") + * [not_unique()](https://github.com/ImperialBower/pkcore/tree/c1112b9cc127a8ab9c2ff46dde6bd5b8dac5392a "2022-05-21 · c1112b9") + * [find_in_products()](https://github.com/ImperialBower/pkcore/tree/c1112b9cc127a8ab9c2ff46dde6bd5b8dac5392a "2022-05-21 · c1112b9") + * [refactoring from ckc (compare)](https://github.com/ImperialBower/pkcore/tree/c1112b9cc127a8ab9c2ff46dde6bd5b8dac5392a "2022-05-21 · c1112b9") + * [POSSIBLE DEFECT: Cards in different orders aren't equal](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [Cards](https://github.com/ImperialBower/pkcore/tree/6d3b0ef9057238270c9b0d687b6b5df6d583810a "2022-05-21 · 6d3b0ef") + * [REFACTORING: Clippy found call to `str::trim` before `str::split_whitespace` cards.rs:72:20](https://github.com/ImperialBower/pkcore/tree/6d3b0ef9057238270c9b0d687b6b5df6d583810a "2022-05-21 · 6d3b0ef") + * [Five](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [rank() basic tests](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [INTRODUCING HandRank struct](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [type aliases (HandRankValue, CactusKev)](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [CLIPPY: HandRankValue clippy::module_name_repetitions](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [hand_rank module (talk about separating files as old habit)](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [HandRankName](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [about strum::EnumIter;](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [refactoring HandRank.determine_name() to HandRankName::from (small test range... ranges of testing)](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [HandRankClass](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [refactoring HandRank.determine_class() to HandRankClass::from](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [CLIPPY #\[warn(clippy::too_many_lines)\]"](https://github.com/ImperialBower/pkcore/tree/c40524434b043672223aaeb6b3cec965563b6f92 "2022-05-21 · c405244") + * [AUDIBLE (waiting for HandRank MEGA TEST to capture all) (AUDIBLE = change from standard flow)](https://github.com/ImperialBower/pkcore/tree/4f9eba76ee41f0e80bb4219fd7ed8d6da48f5a87 "2022-05-21 · 4f9eba7") + * [REFACTORING: impl Default to derive](https://github.com/ImperialBower/pkcore/tree/bae31667920726f6c6c1867a4e623b385c80bb27 "2022-05-21 · bae3166") + * [HandRank::from(HandRankValue)](https://github.com/ImperialBower/pkcore/tree/bae31667920726f6c6c1867a4e623b385c80bb27 "2022-05-21 · bae3166") + * [Favor traits over functions](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [PROCESS NOTE::: Step by step](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [why I do small commits](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [git muscle memory get into the habit of knowing the commands](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [REFACTORING name and class no longer public (remove need for ckc.is_a_valid_hand_rank())](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [HARDENING (over thinking? Maybe)](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [TRAIT: SOK - I find boring names hard to remember](https://github.com/ImperialBower/pkcore/tree/b8c269ba0c9ef257762a2c463e429aa76707a5a4 "2022-05-21 · b8c269b") + * [arrays::HandRanker](https://github.com/ImperialBower/pkcore/tree/65386ea1d01ecf8208a98087ee3a3028d1447222 "2022-05-21 · 65386ea") + * [remove Five::rank() replace with HandRanker](https://github.com/ImperialBower/pkcore/tree/ee309974fe201e38f392b56b8379e8197f8f50ec "2022-05-21 · ee30997") + * [REFACTOR: remove validated methods from Trait](https://github.com/ImperialBower/pkcore/tree/75544b824716f733e3bd1a43867bf423f53257f5 "2022-05-21 · 75544b8") + * [Hand HandRanker BIG KAHUNA TEST](https://github.com/ImperialBower/pkcore/tree/43e20247aa79d72f94ff9aaf91033ff3552a8372 "2022-05-22 · 43e2024") + * [using //region](https://github.com/ImperialBower/pkcore/tree/75544b824716f733e3bd1a43867bf423f53257f5 "2022-05-21 · 75544b8") + * [REFACTORING HandRankName HandRankClass to Name and Class](https://github.com/ImperialBower/pkcore/tree/75544b824716f733e3bd1a43867bf423f53257f5 "2022-05-21 · 75544b8") + * [DETOUR: Generating lookup tables](https://github.com/ImperialBower/pkcore/tree/856ce01a6d5b59e303a6fdf61c941302535a4999 "2022-05-26 · 856ce01") + * [Is Straight Flush?](https://github.com/ImperialBower/pkcore/tree/856ce01a6d5b59e303a6fdf61c941302535a4999 "2022-05-26 · 856ce01") + * [Is Straight?](https://github.com/ImperialBower/pkcore/tree/856ce01a6d5b59e303a6fdf61c941302535a4999 "2022-05-26 · 856ce01") + * [Let's add tests for all types of straights](https://github.com/ImperialBower/pkcore/tree/d2d29aa4a5dd318f35ff479532e8a7f279c89651 "2022-05-26 · d2d29aa") + * [WHEEL???!!!!](https://github.com/ImperialBower/pkcore/tree/856ce01a6d5b59e303a6fdf61c941302535a4999 "2022-05-26 · 856ce01") + * [Already have .is_flush()](https://github.com/ImperialBower/pkcore/tree/9e7df766cf9c58ceb6627d45fd55f93544016821 "2022-05-26 · 9e7df76") + * [.is_straight_flush()](https://github.com/ImperialBower/pkcore/tree/9e7df766cf9c58ceb6627d45fd55f93544016821 "2022-05-26 · 9e7df76") + * [INTRODUCING: IterTools](https://github.com/ImperialBower/pkcore/tree/67277eb1fb7a33d1198b59618f9fa6195f5da6c1 "2022-05-26 · 67277eb") + * [Cards.combinations()](https://github.com/ImperialBower/pkcore/tree/67277eb1fb7a33d1198b59618f9fa6195f5da6c1 "2022-05-26 · 67277eb") + * [Cards::from>](https://github.com/ImperialBower/pkcore/tree/67277eb1fb7a33d1198b59618f9fa6195f5da6c1 "2022-05-26 · 67277eb") + * [Five::try_from>](https://github.com/ImperialBower/pkcore/tree/67277eb1fb7a33d1198b59618f9fa6195f5da6c1 "2022-05-26 · 67277eb") + * [TEACHABLE: let rust show you what to return](https://github.com/ImperialBower/pkcore/tree/1df423db5a7106324782d9d9bceab9b164d177bc "2022-05-27 · 1df423d") + * [Six](https://github.com/ImperialBower/pkcore/tree/c942e494d3ba482f6bc2881a90945101bd3d2d89 "2022-05-21 · c942e49") + * [Before we get started lets update the repl so that we get more feedback](https://github.com/ImperialBower/pkcore/tree/c942e494d3ba482f6bc2881a90945101bd3d2d89 "2022-05-21 · c942e49") + * [impl TryFrom](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [Five.display](https://github.com/ImperialBower/pkcore/tree/c942e494d3ba482f6bc2881a90945101bd3d2d89 "2022-05-21 · c942e49") + * [Cards::from(Card)](https://github.com/ImperialBower/pkcore/tree/c942e494d3ba482f6bc2881a90945101bd3d2d89 "2022-05-21 · c942e49") + * [Cards::from(Five)](https://github.com/ImperialBower/pkcore/tree/c942e494d3ba482f6bc2881a90945101bd3d2d89 "2022-05-21 · c942e49") + * [examples/repl.rs Update to use Cards](https://github.com/ImperialBower/pkcore/tree/7cc002b64fb0bdb61293e690e04b6f13bc37b5b5 "2022-05-21 · 7cc002b") + * [Cards.draw() reqs Cards.deck()](https://github.com/ImperialBower/pkcore/tree/9ed376fcbea04871837be644a4d3e8fc93aad843 "2022-05-21 · 9ed376f") + * [.hand_rank()](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Let IDE drive with the TODO](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [yay todo!()](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Understand the dynamics of teams, bend to the norms. Different people react differently to code styles. It's OK Be cool](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [adding .five_from_permutation to HandRanker](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Adding to trait because I know I will need it for Seven as well. NOTE: This is not strict TDD.](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [REFACTORING: Originally a separate trait Permutator in ckc-rs. Decided to consolidate make cleaner.](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [REFACTORING: Move to Trait](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Five.sort() no method named `sort` found for struct `Five` in the current scope](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Adding to HandRanker trait](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Later refactoring to handle less then five cards (Another trait?)](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [And we're green!!!](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [More tests](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [REFACTORING: Adding HandRanker.hand_rank_and_hand() to trait](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Fleshing out](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Deliberate using different forms of index strings](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Be careful with your patterns and assumptions. TDD can be a self-fulfilling prophecy divorced from reality](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [.sort()](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [TODO: Note on Five.sort() for wheels Ace on top](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [ASIDE: I am fiercely pro TODOs. Many people hate them. That's OK. However, this is my kingdom and I rule it with an iron fist! When you write your book, you too can be Absolute Ruler of your one person empire (Unless you have an editor 😉).](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Seven](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Seven holdem boards etc](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [BONUS CREDIT:](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [OK, if you are seriously hard core and want to go for bonus points (awarded via my GFY Cryptocurrency guaranteed to be worthless!!!) Try coding Seven yourself.](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [What are its reqs? What's different about Six and Seven?](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [.from(array)](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [impl TryFrom](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [Drive from implementing HandRanker](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [.five_from_permutation()](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Get not yet implemented error](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Fix error](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [make green](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [.hand_rank_value_and_hand()](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [Why AD 6S 4S AS 5D 3C 2S?](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [paste over test from Six (which will fail for Seven)](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [get rid of not yet implemented error](https://github.com/ImperialBower/pkcore/tree/a5945bb3e546c7db90d00fec4cb84ff89befbd28 "2022-05-22 · a5945bb") + * [make green](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [Clippy](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [TODO: No assessors besides .to_arr() do I really need the others?](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [UPDATE repl to handle multiple card lengths](https://github.com/ImperialBower/pkcore/tree/1f1ec47298bcb71afd6c70d231e5866c14f79886 "2022-05-27 · 1f1ec47") + * [Print out HandRank info for best hand if five or more cards.](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [Update to look at Cards length and usher to the right struct](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [NOTE on driving through repl instead of tests](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [move index out to variable. (Why is it called index?)](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [check in repl again](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [let cards = Cards::from_str(index).unwrap();](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [check in repl again](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [Add match for default _](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [Add match for five](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [impl TryFrom for Five](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [REFACTOR: move match from from_str to TryFrom](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [NEEDED: to_string() for Five, Six and Seven](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [impl Display for Five](https://github.com/ImperialBower/pkcore/tree/e81667959ef5e78f56ec9c6ee00ab7c0cfbaef19 "2022-05-22 · e816679") + * [5 => println!("{}", Five::try_from(cards)?),](https://github.com/ImperialBower/pkcore/tree/cf91f149416a0d6cb6601bea7839aa5cacc11b37 "2022-05-22 · cf91f14") + * [update main to return error](https://github.com/ImperialBower/pkcore/tree/cf91f149416a0d6cb6601bea7839aa5cacc11b37 "2022-05-22 · cf91f14") + * [update sig to fn main() -> Result<(), PKError> {](https://github.com/ImperialBower/pkcore/tree/cf91f149416a0d6cb6601bea7839aa5cacc11b37 "2022-05-22 · cf91f14") + * [must return Ok(())](https://github.com/ImperialBower/pkcore/tree/cf91f149416a0d6cb6601bea7839aa5cacc11b37 "2022-05-22 · cf91f14") + * [Verify `❯ cargo run --example repl -- -c "AS KS QS JS TS"`](https://github.com/ImperialBower/pkcore/tree/cf91f149416a0d6cb6601bea7839aa5cacc11b37 "2022-05-22 · cf91f14") + * [6 => println!("Six: {}", Six::try_from(cards)?),](https://github.com/ImperialBower/pkcore/tree/bbab865461e2363c85d5a112f4f508609c1cc56e "2022-05-24 · bbab865") + * [impl Display for Six](https://github.com/ImperialBower/pkcore/tree/076d6e3045a83f2801da8efd796edd2d2ae25aa1 "2022-05-25 · 076d6e3") + * [7](https://github.com/ImperialBower/pkcore/tree/076d6e3045a83f2801da8efd796edd2d2ae25aa1 "2022-05-25 · 076d6e3") + * [.to_arr()](https://github.com/ImperialBower/pkcore/tree/076d6e3045a83f2801da8efd796edd2d2ae25aa1 "2022-05-25 · 076d6e3") + * [.display()](https://github.com/ImperialBower/pkcore/tree/076d6e3045a83f2801da8efd796edd2d2ae25aa1 "2022-05-25 · 076d6e3") + * [UPDATE REPL: Display HandRank](https://github.com/ImperialBower/pkcore/tree/1f1ec47298bcb71afd6c70d231e5866c14f79886 "2022-05-27 · 1f1ec47") + * [show() - Handle generic input for function](https://github.com/ImperialBower/pkcore/tree/1f1ec47298bcb71afd6c70d231e5866c14f79886 "2022-05-27 · 1f1ec47") + * [DEFECT: Make sure it sorts the best hand](https://github.com/ImperialBower/pkcore/tree/1f1ec47298bcb71afd6c70d231e5866c14f79886 "2022-05-27 · 1f1ec47") + * [Five.is_wheel()](https://github.com/ImperialBower/pkcore/tree/1f1ec47298bcb71afd6c70d231e5866c14f79886 "2022-05-27 · 1f1ec47") + * [Make sure it sorts wheels correctly](https://github.com/ImperialBower/pkcore/tree/1f1ec47298bcb71afd6c70d231e5866c14f79886 "2022-05-27 · 1f1ec47") + * [UPDATE: Make it display the original cards](https://github.com/ImperialBower/pkcore/tree/8f5f53fc69ff6a66502284c1832909bd4673938b "2022-05-27 · 8f5f53f") + * [Add Display to function's trait requirements](https://github.com/ImperialBower/pkcore/tree/8f5f53fc69ff6a66502284c1832909bd4673938b "2022-05-27 · 8f5f53f") + * [FEATURE COMPLETE!!!!](https://github.com/ImperialBower/pkcore/tree/8f5f53fc69ff6a66502284c1832909bd4673938b "2022-05-27 · 8f5f53f") +* [ASIDE: Code Coverage](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [Through Clion](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [gcov etc...](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") +* [EPIC: GAME PLAY - Hold'Em play out hand](https://github.com/ImperialBower/pkcore/tree/c4ce071e07bfee9ffa9ee08e0dfe8c1f3d64770c "2022-05-27 · c4ce071") + * [Two](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [Assessors](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [::from_str()](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [TryFrom](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [From<\[Card; 2\]>](https://github.com/ImperialBower/pkcore/tree/b67736f1bfb355e03d4b2d6929120d1bb9724477 "2022-05-27 · b67736f") + * [Introducing example/calc](https://github.com/ImperialBower/pkcore/tree/9336194848cc9f36fe8dc67713b139bfe923a305 "2022-05-28 · 9336194") + * [Clap Args: dealt, board](https://github.com/ImperialBower/pkcore/tree/9336194848cc9f36fe8dc67713b139bfe923a305 "2022-05-28 · 9336194") + * [Display dealt and board](https://github.com/ImperialBower/pkcore/tree/9336194848cc9f36fe8dc67713b139bfe923a305 "2022-05-28 · 9336194") + * [Have main return Result<(), PKError>](https://github.com/ImperialBower/pkcore/tree/9336194848cc9f36fe8dc67713b139bfe923a305 "2022-05-28 · 9336194") + * [Introducing play::hands::Hands](https://github.com/ImperialBower/pkcore/tree/8f594dd2201a531ef0753e8cb9f16a241a798178 "2022-05-29 · 8f594dd") + * [Hands::try_from(Cards)](https://github.com/ImperialBower/pkcore/tree/fd194680fba147f1367c888128fe7f886f8d7222 "2022-05-28 · fd19468") + * [Two::new(card, card)](https://github.com/ImperialBower/pkcore/tree/4b07f7679c3f517431feef32d0c14b1f350ec256 "2022-05-28 · 4b07f76") + * [HP](https://github.com/ImperialBower/pkcore/tree/518537e9b1cc7ebb207561f54dc042bc119cf16b "2022-05-28 · 518537e") + * [Must be unique](https://github.com/ImperialBower/pkcore/tree/518537e9b1cc7ebb207561f54dc042bc119cf16b "2022-05-28 · 518537e") + * [RF: Returns result](https://github.com/ImperialBower/pkcore/tree/518537e9b1cc7ebb207561f54dc042bc119cf16b "2022-05-28 · 518537e") + * [Implements SOK to test for uniqueness](https://github.com/ImperialBower/pkcore/tree/518537e9b1cc7ebb207561f54dc042bc119cf16b "2022-05-28 · 518537e") + * [Drive through SOK](https://github.com/ImperialBower/pkcore/tree/518537e9b1cc7ebb207561f54dc042bc119cf16b "2022-05-28 · 518537e") + * [First card needs to be higher than second.](https://github.com/ImperialBower/pkcore/tree/6cd711ddd635d61ea25e19dd5aaeb5422d8861cc "2022-05-28 · 6cd711d") + * [Add to happy path test](https://github.com/ImperialBower/pkcore/tree/5d3e9343ce3c20e252bf6b5866d76c74b11dced7 "2022-05-28 · 5d3e934") + * [Hands::from_str()](https://github.com/ImperialBower/pkcore/tree/fd194680fba147f1367c888128fe7f886f8d7222 "2022-05-28 · fd19468") + * [Hands::to_string()](https://github.com/ImperialBower/pkcore/tree/8f594dd2201a531ef0753e8cb9f16a241a798178 "2022-05-29 · 8f594dd") + * [Two](https://github.com/ImperialBower/pkcore/tree/8f594dd2201a531ef0753e8cb9f16a241a798178 "2022-05-29 · 8f594dd") + * [.to_string()](https://github.com/ImperialBower/pkcore/tree/8f594dd2201a531ef0753e8cb9f16a241a798178 "2022-05-29 · 8f594dd") + * [.to_vec()](https://github.com/ImperialBower/pkcore/tree/8f594dd2201a531ef0753e8cb9f16a241a798178 "2022-05-29 · 8f594dd") + * [REFACTOR: use Cards to display instead of code duplication](https://github.com/ImperialBower/pkcore/tree/8f594dd2201a531ef0753e8cb9f16a241a798178 "2022-05-29 · 8f594dd") + * [Also refactor for other array types](https://github.com/ImperialBower/pkcore/tree/ffe8b3809255fcb3346a77ed5af6a8170f551c6a "2022-05-29 · ffe8b38") + * [.to_vec()](https://github.com/ImperialBower/pkcore/tree/ffe8b3809255fcb3346a77ed5af6a8170f551c6a "2022-05-29 · ffe8b38") + * [I LOVE DELETING CODE](https://github.com/ImperialBower/pkcore/tree/ffe8b3809255fcb3346a77ed5af6a8170f551c6a "2022-05-29 · ffe8b38") + * [THE FLOP](https://github.com/ImperialBower/pkcore/tree/79e642fc23ef9209924caa5160763fba53e99e0a "2022-05-29 · 79e642f") + * [Show HandRank for each player.](https://github.com/ImperialBower/pkcore/tree/79e642fc23ef9209924caa5160763fba53e99e0a "2022-05-29 · 79e642f") + * [INTRODUCING: Game](https://github.com/ImperialBower/pkcore/tree/79e642fc23ef9209924caa5160763fba53e99e0a "2022-05-29 · 79e642f") + * [Flop: arrays::three::Three](https://github.com/ImperialBower/pkcore/tree/79e642fc23ef9209924caa5160763fba53e99e0a "2022-05-29 · 79e642f") + * [DO IT!](https://github.com/ImperialBower/pkcore/tree/79e642fc23ef9209924caa5160763fba53e99e0a "2022-05-29 · 79e642f") + * [NOTE ON READABILITY: I deal with a lot of code. I want to scan it](https://github.com/ImperialBower/pkcore/tree/79e642fc23ef9209924caa5160763fba53e99e0a "2022-05-29 · 79e642f") + * [CODE SPEED READING](https://github.com/ImperialBower/pkcore/tree/79e642fc23ef9209924caa5160763fba53e99e0a "2022-05-29 · 79e642f") + * `From<[Card; 3]>` [↗ 77034d2](https://github.com/ImperialBower/pkcore/tree/77034d2db4f718da862414ebcfae4b741b27ce5d "2022-05-30 · 77034d2") + * [`impl SOK for Three`](https://github.com/ImperialBower/pkcore/tree/77034d2db4f718da862414ebcfae4b741b27ce5d "2022-05-30 · 77034d2") + * [`impl TryFrom for Three`](https://github.com/ImperialBower/pkcore/tree/77034d2db4f718da862414ebcfae4b741b27ce5d "2022-05-30 · 77034d2") + * [`impl Display for Three`](https://github.com/ImperialBower/pkcore/tree/77034d2db4f718da862414ebcfae4b741b27ce5d "2022-05-30 · 77034d2") + * [INTRODUCING: Board](https://github.com/ImperialBower/pkcore/tree/2c435600da3de3cb0efa96b7e4264afbdd9f6eb7 "2022-05-29 · 2c43560") + * [The power of `pub` on struct fields.](https://github.com/ImperialBower/pkcore/tree/2c435600da3de3cb0efa96b7e4264afbdd9f6eb7 "2022-05-29 · 2c43560") + * [TryFrom for Board](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [too few](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [too many](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [three cards](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [display](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [Default: "FLOP: ____ __, TURN:__, RIVER: __"](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [THE BOARD from THE HAND](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [four cards](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [getting clunky](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [REFACTOR: Cards.draw_one from Option to Result](https://github.com/ImperialBower/pkcore/tree/f01e73e7263641b68e5ac1636097672845c764a7 "2022-05-30 · f01e73e") + * [five cards](https://github.com/ImperialBower/pkcore/tree/026438ecaebee0cf3bff22d92c94039e3621e0af "2022-05-30 · 026438e") + * [FromStr for Board](https://github.com/ImperialBower/pkcore/tree/026438ecaebee0cf3bff22d92c94039e3621e0af "2022-05-30 · 026438e") + * [Update calc to display Hands and Board](https://github.com/ImperialBower/pkcore/tree/026438ecaebee0cf3bff22d92c94039e3621e0af "2022-05-30 · 026438e") + * [REFACTOR: Game{Hands, Board}](https://github.com/ImperialBower/pkcore/tree/026438ecaebee0cf3bff22d92c94039e3621e0af "2022-05-30 · 026438e") + * [Game.to_string()](https://github.com/ImperialBower/pkcore/tree/77034d2db4f718da862414ebcfae4b741b27ce5d "2022-05-30 · 77034d2") + * [TEST REFACTORING: `fn state() -> (Hands, Board, Game) {`](https://github.com/ImperialBower/pkcore/tree/77034d2db4f718da862414ebcfae4b741b27ce5d "2022-05-30 · 77034d2") + * `DEALT: [6♠ 6♥, 5♦ 5♣] FLOP: 9♣ 6♦ 5♥, TURN: 5♠, RIVER: 8♠` [↗ 4cc5749](https://github.com/ImperialBower/pkcore/tree/4cc5749b8caae9f2df62fa957d998ebdc300ce48 "2022-05-30 · 4cc5749") + * [PHASE TWO: Calc the Flop](https://github.com/ImperialBower/pkcore/tree/4cc5749b8caae9f2df62fa957d998ebdc300ce48 "2022-05-30 · 4cc5749") + * [THE PLAN:](https://github.com/ImperialBower/pkcore/tree/1238db6e905a64ce8d1aa4b632b03b29faf97471 "2022-05-30 · 1238db6") + * [Display HandRank for each hand](https://github.com/ImperialBower/pkcore/tree/1238db6e905a64ce8d1aa4b632b03b29faf97471 "2022-05-30 · 1238db6") + * [Display winning percentages](https://github.com/ImperialBower/pkcore/tree/4cc5749b8caae9f2df62fa957d998ebdc300ce48 "2022-05-30 · 4cc5749") + * [Display outs](https://github.com/ImperialBower/pkcore/tree/4cc5749b8caae9f2df62fa957d998ebdc300ce48 "2022-05-30 · 4cc5749") + * [PHASE 2.1: Display HandRank for each hand](https://github.com/ImperialBower/pkcore/tree/1238db6e905a64ce8d1aa4b632b03b29faf97471 "2022-05-30 · 1238db6") + * [Five::from_2and3()](https://github.com/ImperialBower/pkcore/tree/1238db6e905a64ce8d1aa4b632b03b29faf97471 "2022-05-30 · 1238db6") + * [calc: iterate through each player's hand and show it's `HandRank`.](https://github.com/ImperialBower/pkcore/tree/1238db6e905a64ce8d1aa4b632b03b29faf97471 "2022-05-30 · 1238db6") + * [REFACTOR: Make `Game` struct fields public.](https://github.com/ImperialBower/pkcore/tree/80a953289496e7a67f1f9625208f4baa969c84da "2022-05-30 · 80a9532") + * [Hands.iter()](https://github.com/ImperialBower/pkcore/tree/80a953289496e7a67f1f9625208f4baa969c84da "2022-05-30 · 80a9532") + * [Game.five_at_flop()](https://github.com/ImperialBower/pkcore/tree/93788309e25c94b9796cd8621d5ede7be21004c1 "2022-06-01 · 9378830") + * [Hands.get()](https://github.com/ImperialBower/pkcore/tree/f9851e90f72b18ba858649807be343ba3e4f60d5 "2022-06-01 · f9851e9") + * [DEFECT: HandRank for Five::default()](https://github.com/ImperialBower/pkcore/tree/93788309e25c94b9796cd8621d5ede7be21004c1 "2022-06-01 · 9378830") + * [impl SOK for Five](https://github.com/ImperialBower/pkcore/tree/93788309e25c94b9796cd8621d5ede7be21004c1 "2022-06-01 · 9378830") + * [DEFECT DETOUR: Sort Five by card frequency](https://github.com/ImperialBower/pkcore/tree/2694bb54e2e4625cb1d85a1418f2ae57647131de "2022-06-04 · 2694bb5") + * [.map_by_rank()](https://github.com/ImperialBower/pkcore/tree/2694bb54e2e4625cb1d85a1418f2ae57647131de "2022-06-04 · 2694bb5") + * [Card frequency flags](https://github.com/ImperialBower/pkcore/tree/b6ed374f12196e6957e5ee4ef7c363328d8bab09 "2022-06-04 · b6ed374") + * [Card.frequency_paired()](https://github.com/ImperialBower/pkcore/tree/b6ed374f12196e6957e5ee4ef7c363328d8bab09 "2022-06-04 · b6ed374") + * [Card.frequency_tripped()](https://github.com/ImperialBower/pkcore/tree/b6ed374f12196e6957e5ee4ef7c363328d8bab09 "2022-06-04 · b6ed374") + * [Cards.map_by_rank()](https://github.com/ImperialBower/pkcore/tree/05758ae77580d72c997234604274d680daebd2da "2022-06-04 · 05758ae") + * [impl indexmap::set::IntoIter for Cards (needs to be indexmap::set::IntoIter not std::vec::IntoIter)](https://github.com/ImperialBower/pkcore/tree/05758ae77580d72c997234604274d680daebd2da "2022-06-04 · 05758ae") + * [impl From> for Cards](https://github.com/ImperialBower/pkcore/tree/05758ae77580d72c997234604274d680daebd2da "2022-06-04 · 05758ae") + * [Card.is_flagged_ ... (Used to filter cards)](https://github.com/ImperialBower/pkcore/tree/2218958ed1cf09de5dccff5c5d81e53570b44e13 "2022-06-04 · 2218958") + * [REFACTOR: Card.is_flagged()](https://github.com/ImperialBower/pkcore/tree/2218958ed1cf09de5dccff5c5d81e53570b44e13 "2022-06-04 · 2218958") + * [REFACTOR: Delete is_flagged_ methods and just use .is_flagged()](https://github.com/ImperialBower/pkcore/tree/2218958ed1cf09de5dccff5c5d81e53570b44e13 "2022-06-04 · 2218958") + * [Cards.flag_](https://github.com/ImperialBower/pkcore/tree/09109a06de9a390cebd19344927ea32f3890ff83 "2022-06-05 · 09109a0") + * [Cards.frequency_weighted()](https://github.com/ImperialBower/pkcore/tree/09109a06de9a390cebd19344927ea32f3890ff83 "2022-06-05 · 09109a0") + * [Cards.add()](https://github.com/ImperialBower/pkcore/tree/1cdd7439e67770ba8cd12866db77b45934a31b39 "2022-06-05 · 1cdd743") + * [Five test effect of adding weighted values on CKC eval](https://github.com/ImperialBower/pkcore/tree/1cdd7439e67770ba8cd12866db77b45934a31b39 "2022-06-05 · 1cdd743") + * [Cards.dump() debugging helper](https://github.com/ImperialBower/pkcore/tree/1cdd7439e67770ba8cd12866db77b45934a31b39 "2022-06-05 · 1cdd743") + * [DEFECT FOUND: Issue with Card.bit_string()](https://github.com/ImperialBower/pkcore/tree/1cdd7439e67770ba8cd12866db77b45934a31b39 "2022-06-05 · 1cdd743") + * [CLOSE IT OUT](https://github.com/ImperialBower/pkcore/tree/83ed175450091917b2aac81e6ec9444f70136bc6 "2022-06-05 · 83ed175") + * [Five #\[test\] sort__pair()](https://github.com/ImperialBower/pkcore/tree/83ed175450091917b2aac81e6ec9444f70136bc6 "2022-06-05 · 83ed175") + * [PHASE 2.2: Display winning percentages](https://github.com/ImperialBower/pkcore/tree/e8dfbd7e2408e820804b717050fd80cc1640d985 "2022-06-04 · e8dfbd7") + * [THE PLAN:](https://github.com/ImperialBower/pkcore/tree/2ec3dcd2f37d7a2374bebcde7af93b4fa9d0943d "2022-06-07 · 2ec3dcd") + * [Determine all cards in hands and on board at flop.](https://github.com/ImperialBower/pkcore/tree/2ec3dcd2f37d7a2374bebcde7af93b4fa9d0943d "2022-06-07 · 2ec3dcd") + * [Get every remaining combination of turn and river cards.](https://github.com/ImperialBower/pkcore/tree/2ec3dcd2f37d7a2374bebcde7af93b4fa9d0943d "2022-06-07 · 2ec3dcd") + * [Get HandRank for each hand against possible board.](https://github.com/ImperialBower/pkcore/tree/2ec3dcd2f37d7a2374bebcde7af93b4fa9d0943d "2022-06-07 · 2ec3dcd") + * [Add up winning hand](https://github.com/ImperialBower/pkcore/tree/2ec3dcd2f37d7a2374bebcde7af93b4fa9d0943d "2022-06-07 · 2ec3dcd") + * [Determine the percentages](https://github.com/ImperialBower/pkcore/tree/2ec3dcd2f37d7a2374bebcde7af93b4fa9d0943d "2022-06-07 · 2ec3dcd") + * Introducing [Win Counter](https://github.com/ContractBridge/wincounter) [↗ e8dfbd7](https://github.com/ImperialBower/pkcore/tree/e8dfbd7e2408e820804b717050fd80cc1640d985 "2022-06-04 · e8dfbd7") + * [AUDIBLE: moved crate code to util::wincounter for now for easy updating.](https://github.com/ImperialBower/pkcore/tree/67b970db591bd5450dc8470091d836822d408974 "2022-06-19 · 67b970d") + * [Three all possible at flop](https://github.com/ImperialBower/pkcore/tree/a36e3512ada5dc2327f470f3e3e4fe64d9c4d711 "2022-06-06 · a36e351") + * [Cards.deck_minus()](https://github.com/ImperialBower/pkcore/tree/a36e3512ada5dc2327f470f3e3e4fe64d9c4d711 "2022-06-06 · a36e351") + * [Cards.get()](https://github.com/ImperialBower/pkcore/tree/a36e3512ada5dc2327f470f3e3e4fe64d9c4d711 "2022-06-06 · a36e351") + * [Cards.shuffle() - Want this to harden the unit tests for deck_minus()](https://github.com/ImperialBower/pkcore/tree/a36e3512ada5dc2327f470f3e3e4fe64d9c4d711 "2022-06-06 · a36e351") + * [util::RandomOrdering](https://github.com/ImperialBower/pkcore/tree/a36e3512ada5dc2327f470f3e3e4fe64d9c4d711 "2022-06-06 · a36e351") + * Add [rand crate](https://crates.io/crates/rand) [↗ a36e351](https://github.com/ImperialBower/pkcore/tree/a36e3512ada5dc2327f470f3e3e4fe64d9c4d711 "2022-06-06 · a36e351") + * [REFACTOR: Hands.get() top return Option](https://github.com/ImperialBower/pkcore/tree/dbb617ab90849fbc7c5ed1138a5948dc6581d970 "2022-06-07 · dbb617a") + * [REFACTOR: Game.five_at_flop() to return Result](https://github.com/ImperialBower/pkcore/tree/dbb617ab90849fbc7c5ed1138a5948dc6581d970 "2022-06-07 · dbb617a") + * [Calc trait - Don't think that I like that name, but it will do for now.](https://github.com/ImperialBower/pkcore/tree/a7acc0d145c649ab9ceb09782b8ac28a527a6394 "2022-06-07 · a7acc0d") + * [.cards()](https://github.com/ImperialBower/pkcore/tree/a7acc0d145c649ab9ceb09782b8ac28a527a6394 "2022-06-07 · a7acc0d") + * [impl Calc for Card, Two, Three, Five, Six, Seven, Hands](https://github.com/ImperialBower/pkcore/tree/a7acc0d145c649ab9ceb09782b8ac28a527a6394 "2022-06-07 · a7acc0d") + * [REFACTOR: rename to Pile](https://github.com/ImperialBower/pkcore/tree/a7acc0d145c649ab9ceb09782b8ac28a527a6394 "2022-06-07 · a7acc0d") + * [REFACTOR: add .to_vec to trait](https://github.com/ImperialBower/pkcore/tree/49bb35ec46aa81503b7ab6d65f4e9a69c07534d7 "2022-06-07 · 49bb35e") + * [Delete Cards::from - No longer needed](https://github.com/ImperialBower/pkcore/tree/a3858532694c6755ebb1a070ec028e4967532c4b "2022-06-07 · a385853") + * [I really love this refactor. It simplifies all the communication between card collections.](https://github.com/ImperialBower/pkcore/tree/a7acc0d145c649ab9ceb09782b8ac28a527a6394 "2022-06-07 · a7acc0d") + * [Game.remaining_cards_at_flop()](https://github.com/ImperialBower/pkcore/tree/a3858532694c6755ebb1a070ec028e4967532c4b "2022-06-07 · a385853") + * [Game.play_out_flop() INTRODUCING PLAY OUT!!! WOOOOO!!!!! TPOS 1.1](https://github.com/ImperialBower/pkcore/tree/920722a52c83eafb9570a8cd8d4fe7a8a66f20ef "2022-06-11 · 920722a") + * [Game.case_seven()](https://github.com/ImperialBower/pkcore/tree/be0ae4e7444eb9da2d2a727e213c24ee1ac6e868 "2022-06-09 · be0ae4e") + * [HandRank Eval](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [impl Ord for HandRank](https://github.com/ImperialBower/pkcore/tree/cf62ff44d50a03576657d16abc145339066a907e "2022-06-09 · cf62ff4") + * [STEP 1: Eval](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [::new(hand_rank: HandRank, hand: Five)](https://github.com/ImperialBower/pkcore/tree/fe5cf3cf6fcbefdf0d6a37404401fb383217c496 "2022-06-09 · fe5cf3c") + * [impl From for Eval](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [impl PartialEq for Eval](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [impl Hash for Eval](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [impl From for Eval - Why did I do Five first??!!](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [impl Display for Eval](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [introducing Logging!](https://github.com/ImperialBower/pkcore/tree/b592963020cafc6e87d034dcab29b3867fe204c4 "2022-06-11 · b592963") + * [log crate](https://crates.io/crates/log) [↗ b592963](https://github.com/ImperialBower/pkcore/tree/b592963020cafc6e87d034dcab29b3867fe204c4 "2022-06-11 · b592963") + * [env_logger](https://crates.io/crates/env_logger) [↗ b592963](https://github.com/ImperialBower/pkcore/tree/b592963020cafc6e87d034dcab29b3867fe204c4 "2022-06-11 · b592963") + * [.sort()](https://github.com/ImperialBower/pkcore/tree/920722a52c83eafb9570a8cd8d4fe7a8a66f20ef "2022-06-11 · 920722a") + * [verify that Vec sorts as desired](https://github.com/ImperialBower/pkcore/tree/920722a52c83eafb9570a8cd8d4fe7a8a66f20ef "2022-06-11 · 920722a") + * [verify that Vec sorts as desired](https://github.com/ImperialBower/pkcore/tree/2f9b35211fc797308afcf6517a5198cc725e1bdf "2022-06-11 · 2f9b352") + * [sort__vector_of_fives()](https://github.com/ImperialBower/pkcore/tree/2f9b35211fc797308afcf6517a5198cc725e1bdf "2022-06-11 · 2f9b352") + * [Now let's crunch some Wins](https://github.com/ImperialBower/pkcore/tree/1a96b040ec059ce56644663f44728657ff429d21 "2022-06-11 · 1a96b04") + * [TPOS 1.2: PlayOut Trait (_wild hare_)](https://github.com/ImperialBower/pkcore/tree/04489553e86e1c23e5ebaa5a1ee165edb8276d9a "2022-06-12 · 0448955") + * [REFACTORING: Game.remaining_cards_at_flop() to Hands.remaining_after()](https://github.com/ImperialBower/pkcore/tree/04489553e86e1c23e5ebaa5a1ee165edb8276d9a "2022-06-12 · 0448955") + * [REFACTORING: Sick question? Can I add remaining() and remaining_after to the Pile struct?](https://github.com/ImperialBower/pkcore/tree/04489553e86e1c23e5ebaa5a1ee165edb8276d9a "2022-06-12 · 0448955") + * [The answer is yes :-)](https://github.com/ImperialBower/pkcore/tree/04489553e86e1c23e5ebaa5a1ee165edb8276d9a "2022-06-12 · 0448955") + * [WE ARE STILL RED??!! Let's implement PlayerWins](https://github.com/ImperialBower/pkcore/tree/fbe61ceacff8891ebbe1ff332d1cc4e9488c5f6a "2022-06-12 · fbe61ce") + * [OK, we got it to build.](https://github.com/ImperialBower/pkcore/tree/fbe61ceacff8891ebbe1ff332d1cc4e9488c5f6a "2022-06-12 · fbe61ce") + * [VERY IMPORTANT DANGER DANGER WILL ROBINSON](https://github.com/ImperialBower/pkcore/tree/fbe61ceacff8891ebbe1ff332d1cc4e9488c5f6a "2022-06-12 · fbe61ce") + * [Commit before you do a major, structural refactoring!!!](https://github.com/ImperialBower/pkcore/tree/fbe61ceacff8891ebbe1ff332d1cc4e9488c5f6a "2022-06-12 · fbe61ce") + * [For now, we will have a private pof generic injection for game. Later on we may want to get fancier.](https://github.com/ImperialBower/pkcore/tree/fbe61ceacff8891ebbe1ff332d1cc4e9488c5f6a "2022-06-12 · fbe61ce") + * [NOTE: for now, I am playing without a unit test net. I am using the flow of the repl guide me. Later on, when I am done I will harden the code with tests, but for now we freefall. Weeeee!!!!](https://github.com/ImperialBower/pkcore/tree/fbe61ceacff8891ebbe1ff332d1cc4e9488c5f6a "2022-06-12 · fbe61ce") + * [OK, now let's clippy this MFer.](https://github.com/ImperialBower/pkcore/tree/1d58350b5eaabad0ec9bc4d79b7b7e8e10b73061 "2022-06-12 · 1d58350") + * [There are few greater highs for me then deleting code after a refactoring. Deleting code is the highest calling of a programmer. Learn to treasure these moments. This is the way.](https://github.com/ImperialBower/pkcore/tree/1d58350b5eaabad0ec9bc4d79b7b7e8e10b73061 "2022-06-12 · 1d58350") + * [Deleting Game.case_seven()](https://github.com/ImperialBower/pkcore/tree/1d58350b5eaabad0ec9bc4d79b7b7e8e10b73061 "2022-06-12 · 1d58350") + * [REFACTORING: Introducing the analysis module](https://github.com/ImperialBower/pkcore/tree/5a881678537280a4a5b062c6acc434fac85e87b2 "2022-06-12 · 5a88167") + * [REFACTORING: Adding combinations_after() and enumerate_after() to Pile.](https://github.com/ImperialBower/pkcore/tree/193f45db7cb521832a31353ac7802c4457932508 "2022-06-12 · 193f45d") + * [REFACTORING: PlayOut.play_out_flop() Hands just needs a reference.](https://github.com/ImperialBower/pkcore/tree/193f45db7cb521832a31353ac7802c4457932508 "2022-06-12 · 193f45d") + * [RF: Hands.realize_case_at_flop()](https://github.com/ImperialBower/pkcore/tree/193f45db7cb521832a31353ac7802c4457932508 "2022-06-12 · 193f45d") + * [Three::from_str()](https://github.com/ImperialBower/pkcore/tree/193f45db7cb521832a31353ac7802c4457932508 "2022-06-12 · 193f45d") + * [DEFECT ALERT: The Five stored in case is frequency rated for sorting so doesn't match a raw Five, even though they are the same hand. We need to strip those flags before storing them in case.](https://github.com/ImperialBower/pkcore/tree/193f45db7cb521832a31353ac7802c4457932508 "2022-06-12 · 193f45d") + * [Adding .clean() to Pile trait.](https://github.com/ImperialBower/pkcore/tree/66f5db28818af4deab88c0c521264d8885e3cd63 "2022-06-12 · 66f5db2") + * [The beautiful todo!() macro](https://github.com/ImperialBower/pkcore/tree/66f5db28818af4deab88c0c521264d8885e3cd63 "2022-06-12 · 66f5db2") + * [Implement for Card](https://github.com/ImperialBower/pkcore/tree/66f5db28818af4deab88c0c521264d8885e3cd63 "2022-06-12 · 66f5db2") + * [Card::FREQUENCY_MASK_FILTER](https://github.com/ImperialBower/pkcore/tree/12b2604c7173fad6281a7641467d12d40c366060 "2022-06-12 · 12b2604") + * [Five.clean()](https://github.com/ImperialBower/pkcore/tree/b77a890572c0a1201f55a4d26981d123b66e11c9 "2022-06-12 · b77a890") + * [Add `assert_eq!(hand.sort().clean(), five);` to Five hand_rank mega test](https://github.com/ImperialBower/pkcore/tree/b77a890572c0a1201f55a4d26981d123b66e11c9 "2022-06-12 · b77a890") + * [Added .clean() to Seven.hand_rank_value_and_hand() hand return](https://github.com/ImperialBower/pkcore/tree/b77a890572c0a1201f55a4d26981d123b66e11c9 "2022-06-12 · b77a890") + * [Removed unneeded .strip() and .clean() from hand_rank_case_tests::from__seven() test](https://github.com/ImperialBower/pkcore/tree/f81e8e1f44854b2f934e0ef8406e0dc90d9f0fae "2022-06-12 · f81e8e1") + * [STEP 2: CaseEval](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [.push()](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [INTRODUCING: pub(crate) TestData mod](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [Hands::from(Vec)](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [Refactoring Hands test data to use TestData.](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [Adding constants to Two](https://github.com/ImperialBower/pkcore/tree/ae1f06ddefeecc21b7128ba0f36b146c2200ee65 "2022-06-18 · ae1f06d") + * [Added util::wincounter from crate for easier updating](https://github.com/ImperialBower/pkcore/tree/67b970db591bd5450dc8470091d836822d408974 "2022-06-19 · 67b970d") + * [CaseEval.win_count()](https://github.com/ImperialBower/pkcore/tree/a95739b6c7022bf8e3eaf359e7365079e83d90bf "2022-06-19 · a95739b") + * [Win::from(index)](https://github.com/ImperialBower/pkcore/tree/a95739b6c7022bf8e3eaf359e7365079e83d90bf "2022-06-19 · a95739b") + * [TODO RF: Refactor `Count` as a `struct Count(u16)`.](https://github.com/ImperialBower/pkcore/tree/30cc53604c671caa124fae216dcfd70eedbfeacd "2022-06-19 · 30cc536") + * [DEFECT ALERT: Copied the wrong function in the test data.](https://github.com/ImperialBower/pkcore/tree/30cc53604c671caa124fae216dcfd70eedbfeacd "2022-06-19 · 30cc536") + * [Test #3: A TIE](https://github.com/ImperialBower/pkcore/tree/7c31059c3cfe6fa2a2121af07b7493c3374214b4 "2022-06-19 · 7c31059") + * [Win::or()](https://github.com/ImperialBower/pkcore/tree/7c31059c3cfe6fa2a2121af07b7493c3374214b4 "2022-06-19 · 7c31059") + * [STEP 3: CaseEvals](https://github.com/ImperialBower/pkcore/tree/a5c647358b343bdfad35f103448515738ce3a171 "2022-06-20 · a5c6473") + * [examples/calc command() function to display command](https://github.com/ImperialBower/pkcore/tree/8b764b14e87bb90cd631f834adb840b16f6e7fee "2022-06-24 · 8b764b1") + * [impl Pile for Board](https://github.com/ImperialBower/pkcore/tree/8b764b14e87bb90cd631f834adb840b16f6e7fee "2022-06-24 · 8b764b1") + * [deprecate Game .play_out_flop() .pof() & .remaining_cards_at_flop()](https://github.com/ImperialBower/pkcore/tree/9a4917c719e0e7d28f4ebe84d8fcd164bd0ff356 "2022-06-26 · 9a4917c") + * [Step 4: Results](https://github.com/ImperialBower/pkcore/tree/971ec415ffee4c59d307d8fa323a63262ced171d "2022-06-26 · 971ec41") + * [REFACTORING: util::Util::calculate_percentage()](https://github.com/ImperialBower/pkcore/tree/971ec415ffee4c59d307d8fa323a63262ced171d "2022-06-26 · 971ec41") + * [TestData::wins_the_hand()](https://github.com/ImperialBower/pkcore/tree/60db69ed1df7666b804297decf2bed0f0c7455f3 "2022-06-26 · 60db69e") + * [REFACTORING: Results struct to include case and player count.](https://github.com/ImperialBower/pkcore/tree/f67839f53f244c79dd15f018f38fc1d0989f486d "2022-06-27 · f67839f") + * [.wins_total()](https://github.com/ImperialBower/pkcore/tree/f67839f53f244c79dd15f018f38fc1d0989f486d "2022-06-27 · f67839f") + * [.wins_and_ties()](https://github.com/ImperialBower/pkcore/tree/f67839f53f244c79dd15f018f38fc1d0989f486d "2022-06-27 · f67839f") + * [REFACTORING: .wins_total() to use .wins_and_ties()](https://github.com/ImperialBower/pkcore/tree/f67839f53f244c79dd15f018f38fc1d0989f486d "2022-06-27 · f67839f") + * [.wins_and_ties_percentages()](https://github.com/ImperialBower/pkcore/tree/f67839f53f244c79dd15f018f38fc1d0989f486d "2022-06-27 · f67839f") + * [removed Wins::percent_calculator() since dupe of Util::calculate_percentage()](https://github.com/ImperialBower/pkcore/tree/f67839f53f244c79dd15f018f38fc1d0989f486d "2022-06-27 · f67839f") + * [Fixed Results::from_wins() to include case_count and _player_count.](https://github.com/ImperialBower/pkcore/tree/959669d73a633535657f842d33182e01ad4424c1 "2025-11-23 · 959669d") + * [.wins_total_percentage()](https://github.com/ImperialBower/pkcore/tree/1110840a041637f223cb104b309d66f9a38d27fb "2022-06-28 · 1110840") + * [.player_to_string()](https://github.com/ImperialBower/pkcore/tree/1110840a041637f223cb104b309d66f9a38d27fb "2022-06-28 · 1110840") + * [impl Display](https://github.com/ImperialBower/pkcore/tree/1110840a041637f223cb104b309d66f9a38d27fb "2022-06-28 · 1110840") + * [Three: The nuts in order](https://github.com/ImperialBower/pkcore/tree/6eaff038512350ffae3fc1b890b9e01a7784a770 "2022-06-30 · 6eaff03") + * [TheNuts(Vec)](https://github.com/ImperialBower/pkcore/tree/6eaff038512350ffae3fc1b890b9e01a7784a770 "2022-06-30 · 6eaff03") + * [impl From> for TheNuts](https://github.com/ImperialBower/pkcore/tree/6eaff038512350ffae3fc1b890b9e01a7784a770 "2022-06-30 · 6eaff03") + * [.to_vec()](https://github.com/ImperialBower/pkcore/tree/6eaff038512350ffae3fc1b890b9e01a7784a770 "2022-06-30 · 6eaff03") + * [.sort()](https://github.com/ImperialBower/pkcore/tree/09632d57a8f471feeddfacb43c1c0043b2a87361 "2022-07-01 · 09632d5") + * [Two KT constants (for The Fold)](https://github.com/ImperialBower/pkcore/tree/09632d57a8f471feeddfacb43c1c0043b2a87361 "2022-07-01 · 09632d5") + * [REFACTOR: renamed to Hands to HoleCards](https://github.com/ImperialBower/pkcore/tree/09632d57a8f471feeddfacb43c1c0043b2a87361 "2022-07-01 · 09632d5") + * [HoleCards.three_into_fives(&self, three: Three) -> Vec](https://github.com/ImperialBower/pkcore/tree/39c03e3e4798868c7dae3c62c8af7d9a504d1ae0 "2022-07-01 · 39c03e3") + * [HoleCards.three_into_evals(&self, three: Three) -> Vec](https://github.com/ImperialBower/pkcore/tree/39c03e3e4798868c7dae3c62c8af7d9a504d1ae0 "2022-07-01 · 39c03e3") + * [impl From<&Five> for Eval](https://github.com/ImperialBower/pkcore/tree/39c03e3e4798868c7dae3c62c8af7d9a504d1ae0 "2022-07-01 · 39c03e3") + * [TestData::evals_the_fold()](https://github.com/ImperialBower/pkcore/tree/1ebb026fb2a7e9282be8d1d4f68bd34ecc02e66b "2022-07-01 · 1ebb026") + * [Pile.the_nuts()](https://github.com/ImperialBower/pkcore/tree/dcd10353f8ddf246ea14ad830d47fe93c0b5f581 "2022-07-01 · dcd1035") + * [impl From> for Two](https://github.com/ImperialBower/pkcore/tree/665f4087dd32199548d5a808286a36cd0b628677 "2022-07-02 · 665f408") + * [REFACTORING to HashMap](https://github.com/ImperialBower/pkcore/tree/429192641e4b5343ea72159756f3a61d560845ac "2022-07-02 · 4291926") + * [SIDETRACK: impl Pile for Cards](https://github.com/ImperialBower/pkcore/tree/429192641e4b5343ea72159756f3a61d560845ac "2022-07-02 · 4291926") + * [Pile.contains_blank() as replacement for SOK trait](https://github.com/ImperialBower/pkcore/tree/0d576684ed428486d8efec3c0fa3758b97fffe00 "2022-07-02 · 0d57668") + * [REFACTORING: Pile.is_dealt() to replace SOK.salright()](https://github.com/ImperialBower/pkcore/tree/3ac0cebb9656348cf120fd0d0d34c6a2ffae1b11 "2022-07-02 · 3ac0ceb") + * [Five overriding `Eq`](https://github.com/ImperialBower/pkcore/tree/75b845988182db9870faafb9d7e0f784008df0ab "2022-07-02 · 75b8459") + * [CANCELLED: This experiment failed.](https://github.com/ImperialBower/pkcore/tree/2d0172bc48cfd1f21a3dde8aee09191242f04976 "2022-07-03 · 2d0172b") + * [SIDETRACK: Bard](https://github.com/ImperialBower/pkcore/tree/2d0172bc48cfd1f21a3dde8aee09191242f04976 "2022-07-03 · 2d0172b") + * [impl BitOr for Bard](https://github.com/ImperialBower/pkcore/tree/2d0172bc48cfd1f21a3dde8aee09191242f04976 "2022-07-03 · 2d0172b") + * [impl BitAnd for Bard](https://github.com/ImperialBower/pkcore/tree/8520d56a707bef80266fa1baa9be9540f882e89d "2022-07-03 · 8520d56") + * [BitXor, BitAndAssign, BitOrAssign, BitXorAssign](https://github.com/ImperialBower/pkcore/tree/3e24d4deb6197ee199145d19cd65ebb5f2f92f67 "2022-07-03 · 3e24d4d") + * [DOUBLE SIDETRACK: Added bitwise todo!s to Cards.](https://github.com/ImperialBower/pkcore/tree/2139fe491e85dbdd0ce9c9d7ede343277ae6b34b "2022-07-03 · 2139fe4") + * [Nutty.get()](https://github.com/ImperialBower/pkcore/tree/052768c24b2fe398510b5ebf988447aa0f7fbc0e "2022-07-03 · 052768c") + * [Evals](https://github.com/ImperialBower/pkcore/tree/052768c24b2fe398510b5ebf988447aa0f7fbc0e "2022-07-03 · 052768c") + * [examples/evals_per_class.rs](https://github.com/ImperialBower/pkcore/tree/5719f8750d5f0339ddac3430ef936a088204fc52 "2022-07-04 · 5719f87") + * [HandRanker.eval()](https://github.com/ImperialBower/pkcore/tree/5719f8750d5f0339ddac3430ef936a088204fc52 "2022-07-04 · 5719f87") + * [EvalsPerClass in TheNuts' rustdoc](https://github.com/ImperialBower/pkcore/tree/5719f8750d5f0339ddac3430ef936a088204fc52 "2022-07-04 · 5719f87") + * [REFACTOR: Pile.the_nuts() to .possible_evals()](https://github.com/ImperialBower/pkcore/tree/613a0dc5e7524da66d89ff0d0af819ab26a3a5ab "2022-07-05 · 613a0dc") + * [Done!](https://github.com/ImperialBower/pkcore/tree/613a0dc5e7524da66d89ff0d0af819ab26a3a5ab "2022-07-05 · 613a0dc") + * [REFACTOR: Moved possible_evals() test from TheNuts to Three](https://github.com/ImperialBower/pkcore/tree/dc461a8159a4dc2b3462801596c1f197ea9812a9 "2022-07-05 · dc461a8") + * [Two: .possible_evals()](https://github.com/ImperialBower/pkcore/tree/3e8a41bb76d33f359229e78ce317344ee4b1b568 "2022-07-06 · 3e8a41b") + * [impl From> for Three](https://github.com/ImperialBower/pkcore/tree/3e8a41bb76d33f359229e78ce317344ee4b1b568 "2022-07-06 · 3e8a41b") + * [PHASE THREE: Calc the Turn](https://github.com/ImperialBower/pkcore/tree/8c551ea23596dd3d906ceff0a9a6cff5a705d675 "2022-07-07 · 8c551ea") + * [examples.calc add display of the nuts at flop.](https://github.com/ImperialBower/pkcore/tree/8c551ea23596dd3d906ceff0a9a6cff5a705d675 "2022-07-07 · 8c551ea") + * [REFACTOR: move the_hand() from game tests to `TestData`. (Note the clippy warning from the refactoring. Nice catch 📎!)](https://github.com/ImperialBower/pkcore/tree/fcd4bb6cf794ce6eca71b66ae18e6d9f8a1c9e6b "2022-07-07 · fcd4bb6") + * [Game.possible_evals_at_flop()](https://github.com/ImperialBower/pkcore/tree/9909fccf57b07b537c9e092bb6275d049f37e736 "2022-07-08 · 9909fcc") + * [Game.possible_evals_at_turn()](https://github.com/ImperialBower/pkcore/tree/9909fccf57b07b537c9e092bb6275d049f37e736 "2022-07-08 · 9909fcc") + * [!.is_dealt()](https://github.com/ImperialBower/pkcore/tree/9909fccf57b07b537c9e092bb6275d049f37e736 "2022-07-08 · 9909fcc") + * [Four](https://github.com/ImperialBower/pkcore/tree/cf8cd77cc111c9aa0aca2838e09775b0434cd658 "2022-07-08 · cf8cd77") + * [impl From> for Four](https://github.com/ImperialBower/pkcore/tree/cf8cd77cc111c9aa0aca2838e09775b0434cd658 "2022-07-08 · cf8cd77") + * [impl Pile for Four](https://github.com/ImperialBower/pkcore/tree/cf8cd77cc111c9aa0aca2838e09775b0434cd658 "2022-07-08 · cf8cd77") + * [Game.flop_and_turn()](https://github.com/ImperialBower/pkcore/tree/cf8cd77cc111c9aa0aca2838e09775b0434cd658 "2022-07-08 · cf8cd77") + * [Four::from_turn()](https://github.com/ImperialBower/pkcore/tree/15cf8e0b2572e7fd4eff6fc2651a719e092d0e24 "2022-07-09 · 15cf8e0") + * [REFACTORING: Move PlayerWins::seven_at_flop() to Seven::from_case_at_flop()](https://github.com/ImperialBower/pkcore/tree/15cf8e0b2572e7fd4eff6fc2651a719e092d0e24 "2022-07-09 · 15cf8e0") + * [Seven::from_case_at_turn()](https://github.com/ImperialBower/pkcore/tree/264bbc1f31b9dafb32790739ec1743f5028d02ea "2022-07-09 · 264bbc1") + * [PlayerWins.case_evals_turn()](https://github.com/ImperialBower/pkcore/tree/264bbc1f31b9dafb32790739ec1743f5028d02ea "2022-07-09 · 264bbc1") + * [Calc.display_odds()](https://github.com/ImperialBower/pkcore/tree/001f268038843eb04fe377373971a42937914c49 "2022-07-09 · 001f268") + * [Game.five_at_turn()](https://github.com/ImperialBower/pkcore/tree/001f268038843eb04fe377373971a42937914c49 "2022-07-09 · 001f268") + * [PHASE 3.1: Outs](https://github.com/ImperialBower/pkcore/tree/d0dfe50369e1cb4619e7e42e64ac3e19b378c4e0 "2022-07-09 · d0dfe50") + * [REFACTOR: possible_evals to evals](https://github.com/ImperialBower/pkcore/tree/db7ecad966d3f8461cef2e8321aa9d3a03f9e3bc "2022-07-09 · db7ecad") + * [REFACTOR: Game.evals_at_turn() to .the_nuts_at_turn()](https://github.com/ImperialBower/pkcore/tree/db7ecad966d3f8461cef2e8321aa9d3a03f9e3bc "2022-07-09 · db7ecad") + * [REFACTOR: HandRank struct to own mod](https://github.com/ImperialBower/pkcore/tree/e908d11405b55c7c7d97946f4546b99ee569c5bf "2022-07-09 · e908d11") + * [REFACTOR: All hand_rank mods to analysis](https://github.com/ImperialBower/pkcore/tree/e908d11405b55c7c7d97946f4546b99ee569c5bf "2022-07-09 · e908d11") + * [SPIKE: examples/outs.rs](https://github.com/ImperialBower/pkcore/tree/b908d088845a4e08ef88cb29dac4043e40385c76 "2022-07-15 · b908d08") + * [REFACTOR: Move display odds methods to Game](https://github.com/ImperialBower/pkcore/tree/b908d088845a4e08ef88cb29dac4043e40385c76 "2022-07-15 · b908d08") + * [REFACTOR: Move Game.player_wins_at_flop() to PlayerWins::at_flop()](https://github.com/ImperialBower/pkcore/tree/1b2bf05d3b944f78766b30fc456ae9a2857e0189 "2022-07-16 · 1b2bf05") + * [REFACTOR: Move Game.player_wins_at_turn() to PlayerWins::at_turn()](https://github.com/ImperialBower/pkcore/tree/9bc9e9a097ea55c4987219885e3d33c44083be77 "2022-07-16 · 9bc9e9a") + * [Outs.touch()](https://github.com/ImperialBower/pkcore/tree/b490117a3afe2a52a8a6de359638c5b2b5c93259 "2022-07-16 · b490117") + * [Outs.add()](https://github.com/ImperialBower/pkcore/tree/b490117a3afe2a52a8a6de359638c5b2b5c93259 "2022-07-16 · b490117") + * [REFACTORING](https://github.com/ImperialBower/pkcore/tree/16afc9f0425c588a885b7f4b914b5beb1c00f234 "2022-07-16 · 16afc9f") + * [Outs.len_for_player()](https://github.com/ImperialBower/pkcore/tree/a58e868cf69e38fe4ec93764bf0ff9d520d7e6ce "2022-07-16 · a58e868") + * [Outs.len_longest()](https://github.com/ImperialBower/pkcore/tree/8cdb051e31ef1898d668076eb5c7ef017eb24c7d "2022-07-16 · 8cdb051") + * [Outs.longest_player()](https://github.com/ImperialBower/pkcore/tree/c2749aadcf1d0d1a231e0e38295f72a5f53a846d "2022-07-16 · c2749aa") + * [Outs.add_from_player_flag()](https://github.com/ImperialBower/pkcore/tree/18e6938385ac2c805ada2c71d13a319fd33ea390 "2022-07-17 · 18e6938") + * [CaseEval adding case Cards field](https://github.com/ImperialBower/pkcore/tree/0d39c79d0f5d6c014b31b2ec67ede7d3a61ce5fb "2022-07-21 · 0d39c79") + * [.cards()](https://github.com/ImperialBower/pkcore/tree/1a1b650b0d05e4dee323052f3f05f3d5752c8ee7 "2022-07-23 · 1a1b650") + * [.card()](https://github.com/ImperialBower/pkcore/tree/1a1b650b0d05e4dee323052f3f05f3d5752c8ee7 "2022-07-23 · 1a1b650") + * [.cards_is_empty() & .cards_len()](https://github.com/ImperialBower/pkcore/tree/1a1b650b0d05e4dee323052f3f05f3d5752c8ee7 "2022-07-23 · 1a1b650") + * [Outs.add_from_case_eval()](https://github.com/ImperialBower/pkcore/tree/0df650365333faf4bf7fda2788ece300bf092dca "2022-07-23 · 0df6503") + * [Game.case_eval_at_turn()](https://github.com/ImperialBower/pkcore/tree/0df650365333faf4bf7fda2788ece300bf092dca "2022-07-23 · 0df6503") + * [Cards::from<&Card>](https://github.com/ImperialBower/pkcore/tree/0df650365333faf4bf7fda2788ece300bf092dca "2022-07-23 · 0df6503") + * [REFACTORING: Game.case_evals_at_turn() moved from PlayerWins.case_evals_flop()](https://github.com/ImperialBower/pkcore/tree/839a4130c6ba3105669c42bda1d4bd1a8541422b "2022-07-24 · 839a413") + * [REFACTORING: Game.turn_case_evals() & Game.turn_case_eval()](https://github.com/ImperialBower/pkcore/tree/839a4130c6ba3105669c42bda1d4bd1a8541422b "2022-07-24 · 839a413") + * [REFACTORING: All Game methods to phase (flop, turn, river) first naming](https://github.com/ImperialBower/pkcore/tree/c8d9b2de86e6034912a6265ddc1b2caa672d7809 "2022-07-24 · c8d9b2d") + * [REFACTORING: Game turn and flop wins](https://github.com/ImperialBower/pkcore/tree/19f3a2c2c44fb04540483acb23e5fb6ccbac4daf "2022-07-24 · 19f3a2c") + * [CaseEvals.wins()](https://github.com/ImperialBower/pkcore/tree/ed2daa5274450a7db27a9a67e500ad250176f7ab "2022-07-24 · ed2daa5") + * [Game.turn_calculations()](https://github.com/ImperialBower/pkcore/tree/ed2daa5274450a7db27a9a67e500ad250176f7ab "2022-07-24 · ed2daa5") + * [Game.flop_calculations()](https://github.com/ImperialBower/pkcore/tree/0bb81fde65e7b73f60c934fed38f33cf93bf6aaa "2022-07-25 · 0bb81fd") + * [Game.turn_display_odds() check that turn is dealt](https://github.com/ImperialBower/pkcore/tree/c986bdb0f6f7e90b9429235fd3a3732d69b26c86 "2022-07-29 · c986bdb") + * [DEFECT: discrepancy with fudd](https://github.com/ImperialBower/pkcore/tree/ecb4b016e397b634dc73bed09a64ed2fc7613b23 "2022-07-30 · ecb4b01") + * [REFACTORING: Updated Results.player_to_string()](https://github.com/ImperialBower/pkcore/tree/ecb4b016e397b634dc73bed09a64ed2fc7613b23 "2022-07-30 · ecb4b01") + * [RESOLUTION: Game.turn_remaining()](https://github.com/ImperialBower/pkcore/tree/02ad9f36ded41ed8c722216c9f0e3eb9b2ef1c61 "2022-07-30 · 02ad9f3") + * [REFACTORING: Game.turn_cards()](https://github.com/ImperialBower/pkcore/tree/921392e7bc7a55ef33f781438b4da4927a72d814 "2022-07-30 · 921392e") + * [REFACTORING: Change to take in reference: Outs::from(&case_evals)](https://github.com/ImperialBower/pkcore/tree/07790fa9939fa529e69894773b71fd9094ccfd24 "2022-07-30 · 07790fa") + * [FINISHED Outs!](https://github.com/ImperialBower/pkcore/tree/e3fdb7fd4ff1a99554f0e8abd7bc0343985dd218 "2022-07-30 · e3fdb7f") + * [PHASE FOUR: Game.river_display_results()](https://github.com/ImperialBower/pkcore/tree/94ffee12e4ce92e02b9b81cd2304061136d27fa3 "2022-07-30 · 94ffee1") + * [TAKE 1: impl From for Five NOT NEEDED](https://github.com/ImperialBower/pkcore/tree/f0d8292c8648a0dfa75a42e62b55a2541e2cb006 "2022-07-30 · f0d8292") + * [TAKE 2: Seven::from_case_at_river() ABORT!](https://github.com/ImperialBower/pkcore/tree/f0d8292c8648a0dfa75a42e62b55a2541e2cb006 "2022-07-30 · f0d8292") + * [TAKE 3: HoleCards.river_case_eval()](https://github.com/ImperialBower/pkcore/tree/f0d8292c8648a0dfa75a42e62b55a2541e2cb006 "2022-07-30 · f0d8292") + * [Seven.from_case_and_board()](https://github.com/ImperialBower/pkcore/tree/f0d8292c8648a0dfa75a42e62b55a2541e2cb006 "2022-07-30 · f0d8292") + * [Meditation: Pass primitives by reference or by value?](https://github.com/ImperialBower/pkcore/tree/f0d8292c8648a0dfa75a42e62b55a2541e2cb006 "2022-07-30 · f0d8292") + * [TODO: Align around passing by reference or value for primitives.](https://github.com/ImperialBower/pkcore/tree/f0d8292c8648a0dfa75a42e62b55a2541e2cb006 "2022-07-30 · f0d8292") + * [Game.river_display_results()](https://github.com/ImperialBower/pkcore/tree/94ffee12e4ce92e02b9b81cd2304061136d27fa3 "2022-07-30 · 94ffee1") + * [CaseEval.winner()](https://github.com/ImperialBower/pkcore/tree/94ffee12e4ce92e02b9b81cd2304061136d27fa3 "2022-07-30 · 94ffee1") + * [REFACTORING to return PlayerFlag instead of a single winning index.](https://github.com/ImperialBower/pkcore/tree/94ffee12e4ce92e02b9b81cd2304061136d27fa3 "2022-07-30 · 94ffee1") + * [ERROR: Inverting winner call to use existing code](https://github.com/ImperialBower/pkcore/tree/94ffee12e4ce92e02b9b81cd2304061136d27fa3 "2022-07-30 · 94ffee1") + * [Game.river_case_eval()](https://github.com/ImperialBower/pkcore/tree/0e63ade4f92cf5310391ada4959a3592e6687e05 "2022-07-30 · 0e63ade") + * [DEFECT: Outs displayed wrong: `cargo run --example calc -- -d "A♠ K♥ 8♦ 6♣" -b "A♣ 8♥ 7♥ 9♠ 5♠" -n`](https://github.com/ImperialBower/pkcore/tree/3824f55157218a1c48d562441c4a5be252047ce8 "2022-08-05 · 3824f55") + * [FIXED](https://github.com/ImperialBower/pkcore/tree/3665610e8418f300ef199a9f7846cf580b00ad11 "2022-08-17 · 3665610") + * [TODO TD: Write real performance tests.](https://github.com/ImperialBower/pkcore/tree/3665610e8418f300ef199a9f7846cf580b00ad11 "2022-08-17 · 3665610") + * [PHASE FIVE: Concurrency](https://github.com/ImperialBower/pkcore/tree/3665610e8418f300ef199a9f7846cf580b00ad11 "2022-08-17 · 3665610") + * [REFACTOR: Turn](https://github.com/ImperialBower/pkcore/tree/3665610e8418f300ef199a9f7846cf580b00ad11 "2022-08-17 · 3665610") + * [REFACTOR: Add .the_nuts() to Pile trait and have .evals() use it to return evals.](https://github.com/ImperialBower/pkcore/tree/7ce7c823af8c436efa8d9dc50284a59467e0c271 "2022-08-17 · 7ce7c82") + * [HARDENING: Pile trait .the_nuts() tests for arrays](https://github.com/ImperialBower/pkcore/tree/7ce7c823af8c436efa8d9dc50284a59467e0c271 "2022-08-17 · 7ce7c82") + * [HARDENING: Added getters to TheNuts against underlying evals array.](https://github.com/ImperialBower/pkcore/tree/7ce7c823af8c436efa8d9dc50284a59467e0c271 "2022-08-17 · 7ce7c82") + * [TheNuts.get()](https://github.com/ImperialBower/pkcore/tree/083b1517caed8f1811a49577c48af03cb008ddff "2022-08-20 · 083b151") + * [REFACTOR: play/stages](https://github.com/ImperialBower/pkcore/tree/12077ce9bc2b02e19feffad5070b144764091c98 "2022-08-20 · 12077ce") + * [Flop (renamed FlopEval)](https://github.com/ImperialBower/pkcore/tree/a686f359f93e354c8a1847f23670b8d8cc28b27f "2022-08-28 · a686f35") + * [.gen_case_evals()](https://github.com/ImperialBower/pkcore/tree/12077ce9bc2b02e19feffad5070b144764091c98 "2022-08-20 · 12077ce") + * [CaseEval](https://github.com/ImperialBower/pkcore/tree/018ac60d6af52d39814add96445dfdd8c4c56862 "2022-08-21 · 018ac60") + * [.from_holdem_at_flop()](https://github.com/ImperialBower/pkcore/tree/018ac60d6af52d39814add96445dfdd8c4c56862 "2022-08-21 · 018ac60") + * [impl TryFrom<&\[Card\]> for Two](https://github.com/ImperialBower/pkcore/tree/018ac60d6af52d39814add96445dfdd8c4c56862 "2022-08-21 · 018ac60") + * [REFACTORING: impl TryFrom for Two](https://github.com/ImperialBower/pkcore/tree/018ac60d6af52d39814add96445dfdd8c4c56862 "2022-08-21 · 018ac60") + * [Tests - Negative Boundary Conditions:](https://github.com/ImperialBower/pkcore/tree/018ac60d6af52d39814add96445dfdd8c4c56862 "2022-08-21 · 018ac60") + * [.try_from__card_slice__empty_slice()](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [.try_from__card_slice__one_card()](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [.try_from__card_slice__three_cards()](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [.try_from__card_slice__first_card_blank()](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [BAD PASS!!! 😱](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [impl TryFrom for Card](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [FAIL](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [TAKE TWO: Card::filter()](https://github.com/ImperialBower/pkcore/tree/474228df8b8d69c68b2505fe0cd1c7385c6b4a18 "2022-08-21 · 474228d") + * [PASS!](https://github.com/ImperialBower/pkcore/tree/bf5d1a0353b12d2001f31972c6cb6faf5fd4539b "2022-08-21 · bf5d1a0") + * [.try_from__card_slice__second_card_blank()](https://github.com/ImperialBower/pkcore/tree/11d56d694f122638a27f7ed35b7611168b05ea85 "2022-08-21 · 11d56d6") + * [.try_from__card_slice__both_cards_blank()](https://github.com/ImperialBower/pkcore/tree/11d56d694f122638a27f7ed35b7611168b05ea85 "2022-08-21 · 11d56d6") + * [REFACTORING: rstest for blank tests](https://github.com/ImperialBower/pkcore/tree/ba3c5ea872ff5c8d9ee999565a39025185cd6f65 "2022-08-21 · ba3c5ea") + * [REFACTORING PART DEUX: Mega Consolidation](https://github.com/ImperialBower/pkcore/tree/ba3c5ea872ff5c8d9ee999565a39025185cd6f65 "2022-08-21 · ba3c5ea") + * [first add error param to existing three cases](https://github.com/ImperialBower/pkcore/tree/ba3c5ea872ff5c8d9ee999565a39025185cd6f65 "2022-08-21 · ba3c5ea") + * [add remaining as failures (Don't change error case)](https://github.com/ImperialBower/pkcore/tree/fa8bb64d9dc9db37c17daf69888b04ecf14c742f "2022-08-21 · fa8bb64") + * [Make em pass](https://github.com/ImperialBower/pkcore/tree/f4afa99a0e6a6cd02c4cbdace80fb8d3f0f9647a "2022-08-21 · f4afa99") + * [the cleanup](https://github.com/ImperialBower/pkcore/tree/e1510a520a4fa1ead382f187da774838bf535a7c "2022-08-21 · e1510a5") + * [REFACTOR: sig to return Result](https://github.com/ImperialBower/pkcore/tree/e1510a520a4fa1ead382f187da774838bf535a7c "2022-08-21 · e1510a5") + * [First test: happy path using The Hand](https://github.com/ImperialBower/pkcore/tree/e1510a520a4fa1ead382f187da774838bf535a7c "2022-08-21 · e1510a5") + * [BUGFIX: Two::display() for blank cards](https://github.com/ImperialBower/pkcore/tree/e428d86a02a8d79e38fb284c5cb211525d133137 "2022-08-27 · e428d86") + * [Finished tests with negative boundary conditions](https://github.com/ImperialBower/pkcore/tree/374d3268eba3fae6320c3de45cca7acd906da528 "2022-08-27 · 374d326") + * [CaseEvals](https://github.com/ImperialBower/pkcore/tree/374d3268eba3fae6320c3de45cca7acd906da528 "2022-08-27 · 374d326") + * [Two::from_from>](https://github.com/ImperialBower/pkcore/tree/374d3268eba3fae6320c3de45cca7acd906da528 "2022-08-27 · 374d326") + * [REFACTORING: Deleted Game.flop_case_eval() and flop_case_evals() moved to own structs](https://github.com/ImperialBower/pkcore/tree/8c87ae76e75f7f4627035fdb158027ae99889bd2 "2022-08-27 · 8c87ae7") + * [REFACTOR: Renamed FlopEval](https://github.com/ImperialBower/pkcore/tree/a686f359f93e354c8a1847f23670b8d8cc28b27f "2022-08-28 · a686f35") + * [REFACTOR: Eliminate Game.flop_display_the_nuts() move to Evals.display()](https://github.com/ImperialBower/pkcore/tree/332902a7312608e5c9116804da1fd40ceb6e8075 "2022-08-27 · 332902a") + * [REFACTOR: Eliminate Game.display_evals()](https://github.com/ImperialBower/pkcore/tree/332902a7312608e5c9116804da1fd40ceb6e8075 "2022-08-27 · 332902a") + * [Added test for CaseEvals::new()](https://github.com/ImperialBower/pkcore/tree/a686f359f93e354c8a1847f23670b8d8cc28b27f "2022-08-28 · a686f35") + * [impl TryFrom for FlopEval](https://github.com/ImperialBower/pkcore/tree/5bb93a5f246586b0b8f113b366dc00c5aa3f6566 "2022-08-28 · 5bb93a5") + * [Added PKError::NotDealt](https://github.com/ImperialBower/pkcore/tree/5bb93a5f246586b0b8f113b366dc00c5aa3f6566 "2022-08-28 · 5bb93a5") + * [Removed dupe of eval_for_player: eval_for_hand](https://github.com/ImperialBower/pkcore/tree/529d3392d5a16beb7fb19ae8fb81e33af7bf9a0c "2022-08-29 · 529d339") + * [Finished Display](https://github.com/ImperialBower/pkcore/tree/529d3392d5a16beb7fb19ae8fb81e33af7bf9a0c "2022-08-29 · 529d339") + * [TurnEval](https://github.com/ImperialBower/pkcore/tree/f35879ff06e7122cd0b0b58794c2fe5d2530f768 "2022-08-29 · f35879f") + * [Deconstructing Calc: DEALING WITH calc PERFORMANCE](https://github.com/ImperialBower/pkcore/tree/aaf1ae87f93e96c717ebaee36dcd34bc9e918a09 "2023-04-01 · aaf1ae8") + * [Created examples/fixed and examples/long](https://github.com/ImperialBower/pkcore/tree/aaf1ae87f93e96c717ebaee36dcd34bc9e918a09 "2023-04-01 · aaf1ae8") + * [log is going to work out in minute detail the flop calculations](https://github.com/ImperialBower/pkcore/tree/aaf1ae87f93e96c717ebaee36dcd34bc9e918a09 "2023-04-01 · aaf1ae8") + * [Added Deck from fudd::types::poker_deck](https://github.com/ImperialBower/pkcore/tree/aaf1ae87f93e96c717ebaee36dcd34bc9e918a09 "2023-04-01 · aaf1ae8") + * [VICTORY!!! CaseEvals::from_holdem_at_flop_mpsc()](https://github.com/ImperialBower/pkcore/tree/15ca3ecef0ec394679a1a3399f007e3152049592 "2023-04-03 · 15ca3ec") + * [finally figured out how to use concurrency to make this faster.](https://github.com/ImperialBower/pkcore/tree/15ca3ecef0ec394679a1a3399f007e3152049592 "2023-04-03 · 15ca3ec") + * [We got it down to under 1 second.](https://github.com/ImperialBower/pkcore/tree/f15e548cc87db62de5ca7369556ea3c90df0520b "2023-05-14 · f15e548") + * [PHASE SIX: Pre flop DUN DUN DUNNNNNNN](https://github.com/ImperialBower/pkcore/tree/15ca3ecef0ec394679a1a3399f007e3152049592 "2023-04-03 · 15ca3ec") + * [6.1 - Construct Bards from Card](https://github.com/ImperialBower/pkcore/tree/15ca3ecef0ec394679a1a3399f007e3152049592 "2023-04-03 · 15ca3ec") + * [6.2 - Cards from Bard](https://github.com/ImperialBower/pkcore/tree/54c262e66ce2932c83d5e0c0c8c0dd51a55cd9a0 "2023-04-05 · 54c262e") + * [6.2.1 - Card try_from Bard](https://github.com/ImperialBower/pkcore/tree/54c262e66ce2932c83d5e0c0c8c0dd51a55cd9a0 "2023-04-05 · 54c262e") + * [TODO: Store analysis Bard results in memory](https://github.com/ImperialBower/pkcore/tree/bc52253ae9491254e0713d5815aa90261edd47c1 "2023-07-01 · bc52253") + * Created [pkterm](https://github.com/ImperialBower/pkterm) [↗ 864d457](https://github.com/ImperialBower/pkcore/tree/864d45781a87b59fb0244521f1b1650802e25476 "2023-06-10 · 864d457") + * [EPIC SEVEN: Transposition](https://github.com/ImperialBower/pkcore/tree/bc52253ae9491254e0713d5815aa90261edd47c1 "2023-07-01 · bc52253") + * [Shift Suit trait](https://github.com/ImperialBower/pkcore/tree/3b37bdb0aa0c93ed13959612050b909ad7be3c6f "2023-07-04 · 3b37bdb") + * [`impl SuitShift for Suit`](https://github.com/ImperialBower/pkcore/tree/3b37bdb0aa0c93ed13959612050b909ad7be3c6f "2023-07-04 · 3b37bdb") + * [`impl SuitShift for Card`](https://github.com/ImperialBower/pkcore/tree/3b37bdb0aa0c93ed13959612050b909ad7be3c6f "2023-07-04 · 3b37bdb") + * [`impl SuitShift for Two`](https://github.com/ImperialBower/pkcore/tree/3b37bdb0aa0c93ed13959612050b909ad7be3c6f "2023-07-04 · 3b37bdb") + * [HeadsUp](https://github.com/ImperialBower/pkcore/tree/3b37bdb0aa0c93ed13959612050b909ad7be3c6f "2023-07-04 · 3b37bdb") + * Spike: Storage using [Sled](https://github.com/spacejam/sled/tree/main) [↗ 3b37bdb](https://github.com/ImperialBower/pkcore/tree/3b37bdb0aa0c93ed13959612050b909ad7be3c6f "2023-07-04 · 3b37bdb") + * [First relive BCM CSV fun](https://github.com/ImperialBower/pkcore/tree/1fe88088bfefc0e4f87004619b9d43f8d0119854 "2023-07-04 · 1fe8808") + * [CSV without Bard. Pure Cards.](https://github.com/ImperialBower/pkcore/tree/1fe88088bfefc0e4f87004619b9d43f8d0119854 "2023-07-04 · 1fe8808") + * [`SevenEval`: Need to store Evals with the original `Seven`.](https://github.com/ImperialBower/pkcore/tree/1fe88088bfefc0e4f87004619b9d43f8d0119854 "2023-07-04 · 1fe8808") + * [Cards.remaining() (Trying to get only bcm repl example to work here)](https://github.com/ImperialBower/pkcore/tree/1fe88088bfefc0e4f87004619b9d43f8d0119854 "2023-07-04 · 1fe8808") + * [HA!!! Already exists in Pile trait. Wooo!!!!](https://github.com/ImperialBower/pkcore/tree/1fe88088bfefc0e4f87004619b9d43f8d0119854 "2023-07-04 · 1fe8808") + * [Cards.into_twos() - Copying over bcrepl functionality](https://github.com/ImperialBower/pkcore/tree/1fe88088bfefc0e4f87004619b9d43f8d0119854 "2023-07-04 · 1fe8808") + * [Cards.divisible_by](https://github.com/ImperialBower/pkcore/tree/1fe88088bfefc0e4f87004619b9d43f8d0119854 "2023-07-04 · 1fe8808") + * [examples/csv_card.rs](https://github.com/ImperialBower/pkcore/tree/8df2f27f9cd0111c4b53bf7d764cfad1942828cd "2023-07-05 · 8df2f27") + * [Serialize `Card` using symbols](https://github.com/ImperialBower/pkcore/tree/3e6460e385281f72f213ea5982eec279846067c9 "2023-07-05 · 3e6460e") + * [analysis/store/heads_up/Row](https://github.com/ImperialBower/pkcore/tree/58f2b4eb557f47844ec6798ddaaa73bf54a6cc9b "2023-07-08 · 58f2b4e") + * [DEFECT #BAD_TWOS](https://github.com/ImperialBower/pkcore/tree/f8fe1899abc1c5755565b02723d1413f773c6cff "2023-07-08 · f8fe189") + * [Cards.as_twos() fixed](https://github.com/ImperialBower/pkcore/tree/d842b3d29cc89c6dcdddd40664adaee895ab3e31 "2023-07-09 · d842b3d") + * [headsup::PreflopRowHash](https://github.com/ImperialBower/pkcore/tree/75cd6b902b73bee42c9e8e5e8f86b14e27b44cb8 "2023-07-09 · 75cd6b9") + * [headsup::HUP static trait](https://github.com/ImperialBower/pkcore/tree/f4434ca96ba3d0b580731de025d8187537afa52a "2023-07-09 · f4434ca") + * [HUP::two_to_index()](https://github.com/ImperialBower/pkcore/tree/f4434ca96ba3d0b580731de025d8187537afa52a "2023-07-09 · f4434ca") + * [________________________](https://github.com/ImperialBower/pkcore/tree/1ba8653cf79e6251a82e6e24c95ea1ff1d744ad2 "2023-07-15 · 1ba8653") + * [GETTING REAL: STORAGE](https://github.com/ImperialBower/pkcore/tree/1ba8653cf79e6251a82e6e24c95ea1ff1d744ad2 "2023-07-15 · 1ba8653") + * [Generate bcm.csv using Serde `examples/generate_bcm.rs`](https://github.com/ImperialBower/pkcore/tree/7b76269f139039ec8afcd20640f3951464e82182 "2023-07-09 · 7b76269") + * [analysis::store::bcm::binary_card_map::BCM](https://github.com/ImperialBower/pkcore/tree/7e59c47f69d880bc5a05a72e10f74e6a8435cd23 "2023-07-09 · 7e59c47") + * [`impl From> for Bard`](https://github.com/ImperialBower/pkcore/tree/775ecf1ead5477c5925f39be91bdc55e17370f1f "2023-07-10 · 775ecf1") + * [analysis::store::bcm::index_card_map::ICM](https://github.com/ImperialBower/pkcore/tree/8f97fcf0ca7eeed408f7be43583067f2caf06cc4 "2023-07-11 · 8f97fcf") + * [Storing data in the sled embedded database](https://github.com/ImperialBower/pkcore/tree/1ba8653cf79e6251a82e6e24c95ea1ff1d744ad2 "2023-07-15 · 1ba8653") + * [examples/generate_sled.rs](https://github.com/ImperialBower/pkcore/tree/1ba8653cf79e6251a82e6e24c95ea1ff1d744ad2 "2023-07-15 · 1ba8653") + * [Storing data in SQLite](https://github.com/ImperialBower/pkcore/tree/1ba8653cf79e6251a82e6e24c95ea1ff1d744ad2 "2023-07-15 · 1ba8653") + * [impl From for Bard](https://github.com/ImperialBower/pkcore/tree/f00e9917b4ebc862658ebbbb23b0d4a7aa08b071 "2023-07-16 · f00e991") + * [Got bcm storage to work. WOOO!!!!](https://github.com/ImperialBower/pkcore/tree/5a9b02a3ee48b1eb82d50938c924339922028516 "2023-07-17 · 5a9b02a") + * [TODO: rusqlite in memory tests.](https://github.com/ImperialBower/pkcore/tree/550fa84223c45f6efab767b4d5bafaa283b4f0fe "2023-07-17 · 550fa84") + * [THE MAIN EVENT: Heads up preflop calc.](https://github.com/ImperialBower/pkcore/tree/5a9b02a3ee48b1eb82d50938c924339922028516 "2023-07-17 · 5a9b02a") + * [hupcache example](https://github.com/ImperialBower/pkcore/tree/550fa84223c45f6efab767b4d5bafaa283b4f0fe "2023-07-17 · 550fa84") + * [SortedHeadsUp refactoring.](https://github.com/ImperialBower/pkcore/tree/f488872849ae0c14fd3b16761271a69dccfcb9c6 "2023-07-18 · f488872") + * [PKError::NotEnoughHands](https://github.com/ImperialBower/pkcore/tree/f488872849ae0c14fd3b16761271a69dccfcb9c6 "2023-07-18 · f488872") + * [PKError::TooManyHands](https://github.com/ImperialBower/pkcore/tree/f54272df7dac2e4f29a1989338805e0d4bc65153 "2023-07-20 · f54272d") + * [HUPResult](https://github.com/ImperialBower/pkcore/tree/f54272df7dac2e4f29a1989338805e0d4bc65153 "2023-07-20 · f54272d") + * [sqlite::Sqlable Trait](https://github.com/ImperialBower/pkcore/tree/f54272df7dac2e4f29a1989338805e0d4bc65153 "2023-07-20 · f54272d") + * [SortedHeadsUp::higher_as_bard()](https://github.com/ImperialBower/pkcore/tree/ebc2e54881366df5eed0b31737a6eab9bcd11413 "2023-07-21 · ebc2e54") + * [impl From for Bard](https://github.com/ImperialBower/pkcore/tree/ebc2e54881366df5eed0b31737a6eab9bcd11413 "2023-07-21 · ebc2e54") + * [TestData::the_hand_as_hup_result()](https://github.com/ImperialBower/pkcore/tree/46100b8bd6066438fa96e412a24216172ba13d1a "2023-07-21 · 46100b8") + * [impl TryFrom for Two](https://github.com/ImperialBower/pkcore/tree/46100b8bd6066438fa96e412a24216172ba13d1a "2023-07-21 · 46100b8") + * [REFACTORING: bcm csv storage](https://github.com/ImperialBower/pkcore/tree/0a664c7e95ccfeee20bc17221659b06d5989e1f7 "2023-07-22 · 0a664c7") + * [SevenFiveBCM::DEFAULT_PKCORE_75BCM_CSV_PATH](https://github.com/ImperialBower/pkcore/tree/0a664c7e95ccfeee20bc17221659b06d5989e1f7 "2023-07-22 · 0a664c7") + * [SevenFiveBCM::get_csv_filepath()](https://github.com/ImperialBower/pkcore/tree/0a664c7e95ccfeee20bc17221659b06d5989e1f7 "2023-07-22 · 0a664c7") + * [TODO: bcm csv feature flag](https://github.com/ImperialBower/pkcore/tree/0a664c7e95ccfeee20bc17221659b06d5989e1f7 "2023-07-22 · 0a664c7") + * [impl Pile for SortedHeadsUp](https://github.com/ImperialBower/pkcore/tree/0a664c7e95ccfeee20bc17221659b06d5989e1f7 "2023-07-22 · 0a664c7") + * [SortedHeadsUp::all_possible() -> std::collections::HashSet](https://github.com/ImperialBower/pkcore/tree/2140620f7419912ebd54dcb7b8b4e2e241d9fb36 "2023-07-22 · 2140620") + * [NOTE renamed unique()](https://github.com/ImperialBower/pkcore/tree/7082ed4e88ed349d0988a3567deeaafe4401949b "2023-07-24 · 7082ed4") + * [The Blueprint](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [SortedHeadsUp::wins() returning default for now](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [TODO: Convert SortedHeadsUp and Wins into a HUPResult.](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [TODO: Store them in our DB.](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [TODO: Once we verified that our DB plays nice, we can wire in our BC_RANK_HASHMAP megacache and do the real work.](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [HUPResult::from_sorted_heads_up(shu: SortedHeadsUp, wins: Wins)](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [SortedHeadsUp.higher_as_bard()](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [SortedHeadsUp.lower_as_bard()](https://github.com/ImperialBower/pkcore/tree/437d2ca0937bdd46de6ca1a18b17ea9bef6fd3d8 "2023-07-22 · 437d2ca") + * [impl SuitShift for SortedHeadsUp](https://github.com/ImperialBower/pkcore/tree/151652da16e20c000c4f0113effbf23acf673be2 "2023-07-23 · 151652d") + * [SuitShift.shifts()](https://github.com/ImperialBower/pkcore/tree/e9dfd180826c220ebdf498e8a79889e3cddb0a38 "2023-07-23 · e9dfd18") + * [Added transpositions to examples/hup.rs](https://github.com/ImperialBower/pkcore/tree/7b7992d21d66b0b56688a46fac25f1185e8eecac "2023-07-23 · 7b7992d") + * [impl FromStr for SortedHeadsUp](https://github.com/ImperialBower/pkcore/tree/be778c1156f5d624aeb86f395ff3a7d700adca90 "2023-07-24 · be778c1") + * [SortedHeadsUp::generate_csv()](https://github.com/ImperialBower/pkcore/tree/be778c1156f5d624aeb86f395ff3a7d700adca90 "2023-07-24 · be778c1") + * [Migrate bcrepl methods to SortedHeadsUp](https://github.com/ImperialBower/pkcore/tree/4832198a28d834e37bd6b2943e2f04972ba7a561 "2023-07-25 · 4832198") + * [Shifty shifts and other_shifts](https://github.com/ImperialBower/pkcore/tree/3c5ac18f0f6007950365d5b17172a7e323ed0127 "2023-07-25 · 3c5ac18") + * [TODO TD: The great bcrepl fudd investigation.](https://github.com/ImperialBower/pkcore/tree/3c5ac18f0f6007950365d5b17172a7e323ed0127 "2023-07-25 · 3c5ac18") + * [SortedHeadsUp.distinct()](https://github.com/ImperialBower/pkcore/tree/3c5ac18f0f6007950365d5b17172a7e323ed0127 "2023-07-25 · 3c5ac18") + * [SortedHeadsUp.remove_shifts()](https://github.com/ImperialBower/pkcore/tree/3c5ac18f0f6007950365d5b17172a7e323ed0127 "2023-07-25 · 3c5ac18") + * [Refactoring distinct()](https://github.com/ImperialBower/pkcore/tree/f4551387c668c7de8ac4162f8d02fb025aaf5b72 "2023-07-25 · f455138") + * [impl From for HUPResult](https://github.com/ImperialBower/pkcore/tree/286cbc77bfcff491c9f8c4cf804bc0ce466ec119 "2023-07-26 · 286cbc7") + * [examples/preflop.rs let's go!](https://github.com/ImperialBower/pkcore/tree/37a6c675b84d07b4ce2f6364631c5efecf3fbdd7 "2023-07-27 · 37a6c67") + * [impl SuitShift for HUPResult](https://github.com/ImperialBower/pkcore/tree/2b32dd80584891972680785e1bb0e6a69ab67820 "2023-07-28 · 2b32dd8") + * [impl From for SortedHeadsUp](https://github.com/ImperialBower/pkcore/tree/2b32dd80584891972680785e1bb0e6a69ab67820 "2023-07-28 · 2b32dd8") + * [TODO TD: SuitShift.opposite() don't trust it.](https://github.com/ImperialBower/pkcore/tree/2b32dd80584891972680785e1bb0e6a69ab67820 "2023-07-28 · 2b32dd8") + * [preflop - take count](https://github.com/ImperialBower/pkcore/tree/2b32dd80584891972680785e1bb0e6a69ab67820 "2023-07-28 · 2b32dd8") + * [impl Shifty for HUPResult {}](https://github.com/ImperialBower/pkcore/tree/c40bd1f42df5a9184adbcc7bef8dcc19b5230ac6 "2023-07-28 · c40bd1f") + * [inserting test](https://github.com/ImperialBower/pkcore/tree/ee549cb4df16fdc70df82e1fd26c34d808e34d7d "2023-07-28 · ee549cb") + * [need Sqlable.exists()](https://github.com/ImperialBower/pkcore/tree/e81c36305d0f8d0830fcff184ffce65ad7529969 "2023-07-28 · e81c363") + * [HUPResult::exists()](https://github.com/ImperialBower/pkcore/tree/a56187a33a7e3f1b0933be6a8acf07ad306c5324 "2023-07-28 · a56187a") + * [Added data/sample_hups.db for testing our HUPResult sql.](https://github.com/ImperialBower/pkcore/tree/e3a1533b9681d7655045ffade1799351ad92ccdc "2023-07-29 · e3a1533") + * [HUPResult to csv](https://github.com/ImperialBower/pkcore/tree/99fb2cb22c7d25ac9cfb88ccfc90e6e0f463ef48 "2023-07-29 · 99fb2cb") + * [hup_dump.rs](https://github.com/ImperialBower/pkcore/tree/99fb2cb22c7d25ac9cfb88ccfc90e6e0f463ef48 "2023-07-29 · 99fb2cb") + * [HUPResult::read_db](https://github.com/ImperialBower/pkcore/tree/99fb2cb22c7d25ac9cfb88ccfc90e6e0f463ef48 "2023-07-29 · 99fb2cb") + * [Refactoring impl From for HUPResult](https://github.com/ImperialBower/pkcore/tree/d2be9815bfa4c84fa00fcb35ce92c5dfcdf5218b "2023-07-30 · d2be981") + * [TestData shu_hup_alignment() test.](https://github.com/ImperialBower/pkcore/tree/d2be9815bfa4c84fa00fcb35ce92c5dfcdf5218b "2023-07-30 · d2be981") + * [tests directory for heavy tests.](https://github.com/ImperialBower/pkcore/tree/f39bd8d587d5f8252383c19082fb770c29f9d8ae "2023-07-30 · f39bd8d") + * [Bring in the Fudd](https://github.com/ImperialBower/pkcore/tree/484cf89d2a9d24f727c463d6f1b5314cb4d243d7 "2023-08-01 · 484cf89") + * [Refactor hup_check](https://github.com/ImperialBower/pkcore/tree/484cf89d2a9d24f727c463d6f1b5314cb4d243d7 "2023-08-01 · 484cf89") + * [PKError::SqlError](https://github.com/ImperialBower/pkcore/tree/484cf89d2a9d24f727c463d6f1b5314cb4d243d7 "2023-08-01 · 484cf89") + * [The return of bitvec](https://github.com/ImperialBower/pkcore/tree/0e7b574e4dfb4ad648436f9471449c4a12434155 "2023-08-04 · 0e7b574") + * [impl Binary for Bard](https://github.com/ImperialBower/pkcore/tree/0e7b574e4dfb4ad648436f9471449c4a12434155 "2023-08-04 · 0e7b574") + * [impl Display for Bard](https://github.com/ImperialBower/pkcore/tree/0e7b574e4dfb4ad648436f9471449c4a12434155 "2023-08-04 · 0e7b574") + * [Bard.guided()](https://github.com/ImperialBower/pkcore/tree/d07163d9da1ff0cdbff816598d1e3687efc97a88 "2023-08-05 · d07163d") + * [impl IntoIterator for Cards](https://github.com/ImperialBower/pkcore/tree/80492d077b618ecbe01e66793a1f247b6532ca4c "2023-08-06 · 80492d0") + * [impl SuitShift for Cards](https://github.com/ImperialBower/pkcore/tree/904a8761d7efe8e8aa34ef3c55e33ad21a66f136 "2023-08-06 · 904a876") + * [SortedHeadsUpSuitBinary](https://github.com/ImperialBower/pkcore/tree/501260851549e63dedf023a6606c2d47d2e5213c "2023-08-06 · 5012608") + * [Masks](https://github.com/ImperialBower/pkcore/tree/5a460c8d30a801af3565c985594f670a5b0c7e3d "2023-08-09 · 5a460c8") + * [SuitMask](https://github.com/ImperialBower/pkcore/tree/5a460c8d30a801af3565c985594f670a5b0c7e3d "2023-08-09 · 5a460c8") + * [Texture](https://github.com/ImperialBower/pkcore/tree/5a460c8d30a801af3565c985594f670a5b0c7e3d "2023-08-09 · 5a460c8") + * [RankMask](https://github.com/ImperialBower/pkcore/tree/5a460c8d30a801af3565c985594f670a5b0c7e3d "2023-08-09 · 5a460c8") + * [Masked](https://github.com/ImperialBower/pkcore/tree/0208cfabb188e080ad6e1f1390e338ec0eabb7a2 "2023-08-12 · 0208cfa") + * [Two.invert_suits()](https://github.com/ImperialBower/pkcore/tree/506668c6699a33db72a179df58ae7e94f10d03fe "2023-08-12 · 506668c") + * [SortedHeadsUp.invert_suits()](https://github.com/ImperialBower/pkcore/tree/506668c6699a33db72a179df58ae7e94f10d03fe "2023-08-12 · 506668c") + * [.type_one_shifts()](https://github.com/ImperialBower/pkcore/tree/0208cfabb188e080ad6e1f1390e338ec0eabb7a2 "2023-08-12 · 0208cfa") + * [.type_six_shifts()](https://github.com/ImperialBower/pkcore/tree/0208cfabb188e080ad6e1f1390e338ec0eabb7a2 "2023-08-12 · 0208cfa") + * [impl Shifty for Masked](https://github.com/ImperialBower/pkcore/tree/0208cfabb188e080ad6e1f1390e338ec0eabb7a2 "2023-08-12 · 0208cfa") + * [MASKED_UNIQUE_TYPEs](https://github.com/ImperialBower/pkcore/tree/f1cb0346567aa8be3a4bfd9f000b2420f51b846f "2023-08-12 · f1cb034") + * [SORTED_HEADS_UP_UNIQUE_TYPEs](https://github.com/ImperialBower/pkcore/tree/b97c28972e243aa3b4da107830b55607096cff93 "2023-08-12 · b97c289") + * [Masked::distinct()](https://github.com/ImperialBower/pkcore/tree/5d7b6b4c73e8b0abffea7f91062d4bf9091bb5b0 "2023-08-13 · 5d7b6b4") + * [Back to storing distinct](https://github.com/ImperialBower/pkcore/tree/f155e95c6399b82ef8fd6ac6fe5b5d368469c082 "2023-08-13 · f155e95") + * [util::terminal::receive_usize()](https://github.com/ImperialBower/pkcore/tree/f155e95c6399b82ef8fd6ac6fe5b5d368469c082 "2023-08-13 · f155e95") + * [archive old examples](https://github.com/ImperialBower/pkcore/tree/71878ab20253aca9463ca6a9b980bf158db8a763 "2023-08-13 · 71878ab") + * [Cleanup Masked type tests and functions](https://github.com/ImperialBower/pkcore/tree/71878ab20253aca9463ca6a9b980bf158db8a763 "2023-08-13 · 71878ab") + * [~~type_six_shifts()~~](https://github.com/ImperialBower/pkcore/tree/71878ab20253aca9463ca6a9b980bf158db8a763 "2023-08-13 · 71878ab") + * [~~type_one_shifts()~~](https://github.com/ImperialBower/pkcore/tree/71878ab20253aca9463ca6a9b980bf158db8a763 "2023-08-13 · 71878ab") + * [Masked.shifts_check()](https://github.com/ImperialBower/pkcore/tree/5d70b013003ce27d965f642ca9825ce30cbe7290 "2023-08-13 · 5d70b01") + * [distinct_diff.csv](https://github.com/ImperialBower/pkcore/tree/5c20141a3e1433baef9097597dd2171cdfdac82f "2023-08-13 · 5c20141") + * [examples/insert_distinct](https://github.com/ImperialBower/pkcore/tree/e1211a9eacaf3637a70106cb7d8f35d7fc7ec352 "2023-08-20 · e1211a9") + * [examples/audit](https://github.com/ImperialBower/pkcore/tree/b7141ea95399ab5841d0673a9d2c2959f12560bc "2023-08-20 · b7141ea") + * [DEFECT: TYPE6 audit fail](https://github.com/ImperialBower/pkcore/tree/91665e3748ca9a1ac0892209f86097e044cb05b0 "2023-08-21 · 91665e3") + * [REFACTORING: created arrays::matchups::masks module](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [FIXED with new SuitTextures](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [examples/strip.rs to get DB with just clean HUPS](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [examples/pf.rs](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [DEFECT: Type X shift defect](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [gaps detour](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [THE MAIN EVENT REDUX](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [arrays::hole_cards::holdem](https://github.com/ImperialBower/pkcore/tree/4db372e4491c8a21322778fffa07298fb76c43db "2023-09-16 · 4db372e") + * [EPIC _____: Bets](https://github.com/ImperialBower/pkcore/tree/3b37bdb0aa0c93ed13959612050b909ad7be3c6f "2023-07-04 · 3b37bdb") + * [Added in sample data from pluribus, etc.](https://github.com/ImperialBower/pkcore/tree/20ae8666a3dde25e11c4eea88377e067a8526d5b "2023-07-01 · 20ae866") + * [Introducing: The Casino Module](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [cashier submodule](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [tables submodule](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [players submodule](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * Adding [uuid](https://crates.io/crates/uuid) crate [↗ b3c9dd9](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [Player struct](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * using [random_name_generator](https://crates.io/crates/random_name_generator) for test player names [↗ b3c9dd9](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [Chips struct](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [.bet](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [.all_in()](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [impl Add for Chips](https://github.com/ImperialBower/pkcore/tree/b3c9dd90f314f5b871487bceb826dfc9905b4f3f "2023-10-22 · b3c9dd9") + * [YAML feature](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [nubibus](https://github.com/ImperialBower/nubibus) Pluribus log parser spike [↗ f01d97c](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Two::from_pluribus](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [pub trait Nubibus](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [refactored Two::from_pluribus to trait](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Refactored Nubibus trait to return Result](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [impl Nubibus for Three](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [pub struct Pluribus](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [impl Nubibus for Board](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [DEFECT: Card::from_str("QQ") doesn't return `PKError::InvalidIndex`](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [pluribus::actions::Actions](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Actions::parse_round()](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [examples/pluribus acts spike](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [DEFECT: tripping when the play ends before the flop RESOLVED.](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Seat Struct](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [impl Sub for Chips](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [CLIPPY UPDATE (rustup update to 1.73.0): added clippy::iter_without_into_iter and clippy::should_implement_trait to allow for now until I can figure it out.](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Seat.bet()](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [impl Display for Seat](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Seat.fold](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [TODO: Tracing/Logging for Pluribus etc](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [REFACTORING: Seat.seat_number from Cell(u8) to u8](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [seat::SeatSnapshot](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [play::positions::Position6Max](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Refactored Seat number to Position using enum](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Updated Bint crate with BintCell](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Lots of work on Nubibus](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Added ActionTypes: check sb and bb](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Moving actions to queues inside the Nubibus struct](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [NOTE: Experimenting with copilot generation](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Update to PhaseHoldem added PhaseHoldemTracker](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Added Position6MaxPointer](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [added .next() and increment()](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Refactoring: removed BintCell not needed](https://github.com/ImperialBower/pkcore/tree/f01d97c30a11b3f2398d91974c98e48b8d112470 "2023-10-22 · f01d97c") + * [Refactoring Nubibus: Removing BintCell Adding Position6MaxPointer](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Refactoring Nubibus: Isolating individual acts with `act()`](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Adding Action ledger](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Adding Seat.desc()](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [.pop() to walk through steps](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [.seat_check() to validate .pop()](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [DEFECT: .seat_state() off by one FIXED](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [PROBlEM: How do I know a round of play is over?](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [POSSIBLE SOLUTION: play::action::Action](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Done!](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Add play::action::Action to Nubibus](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Renamed play::action::Action to play::action::ActionTracker](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [ActionTracker.next_round()](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Added ActionTracker to Nubibus](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Two UPDATES](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Two::combos()](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Two::filter_pairs()](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [arrays::combos::twos::Twos](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [REFACTOR: Ranges to return Twos](https://github.com/ImperialBower/pkcore/tree/635cfeac835875f8b0ce0e6589a4e62b3436fd65 "2023-12-03 · 635cfea") + * [Ranges: Finished basic range macro... now need to work on combining them](https://github.com/ImperialBower/pkcore/tree/9f75b13ea2bf51ad248555fb3eba445c80f14d9a "2023-12-07 · 9f75b13") + * [DEFECT: hopefully fixed https://github.com/rust-lang/rust/pull/52234](https://github.com/ImperialBower/pkcore/tree/2ab674d30a3c3af51c4b3e1778b0ba76ce5bb228 "2023-12-07 · 2ab674d") + * [FEATURE: Twos +](https://github.com/ImperialBower/pkcore/tree/0babff9edc9884151ea3e82da9a4193b0ebfa15b "2023-12-23 · 0babff9") + * [Twos pairs +](https://github.com/ImperialBower/pkcore/tree/0babff9edc9884151ea3e82da9a4193b0ebfa15b "2023-12-23 · 0babff9") + * [Twos::from_str()](https://github.com/ImperialBower/pkcore/tree/0babff9edc9884151ea3e82da9a4193b0ebfa15b "2023-12-23 · 0babff9") + * [Twos::parse_individual_range()](https://github.com/ImperialBower/pkcore/tree/0babff9edc9884151ea3e82da9a4193b0ebfa15b "2023-12-23 · 0babff9") + * [Twos::to_string()](https://github.com/ImperialBower/pkcore/tree/0babff9edc9884151ea3e82da9a4193b0ebfa15b "2023-12-23 · 0babff9") + * [REFACTOR: Twos into Twos(HashSet)](https://github.com/ImperialBower/pkcore/tree/0babff9edc9884151ea3e82da9a4193b0ebfa15b "2023-12-23 · 0babff9") + * [EPIC TWO Interlude](https://github.com/ImperialBower/pkcore/tree/40b577b10e6fea18b7dd0e0be3f6c8e67ce6f66e "2024-01-31 · 40b577b") + * [Testing command line and web services](https://github.com/ImperialBower/pkcore/tree/40b577b10e6fea18b7dd0e0be3f6c8e67ce6f66e "2024-01-31 · 40b577b") + * [HOUSECLEANING:](https://github.com/ImperialBower/pkcore/tree/b6b2f77c40b7ba9aa6f682283cf9bb556319c9d7 "2024-02-19 · b6b2f77") + * [Bumped versions](https://github.com/ImperialBower/pkcore/tree/b6b2f77c40b7ba9aa6f682283cf9bb556319c9d7 "2024-02-19 · b6b2f77") + * [Updated deprecated `IndexSet::remove` to `swap_remove`.](https://github.com/ImperialBower/pkcore/tree/b6b2f77c40b7ba9aa6f682283cf9bb556319c9d7 "2024-02-19 · b6b2f77") + * [PKWEB](https://github.com/ImperialBower/pkcore/tree/137c1773573f50d23fcc3a6e771f29d2c00a8da5 "2024-02-24 · 137c177") + * [Added Two::get_letter_index()](https://github.com/ImperialBower/pkcore/tree/137c1773573f50d23fcc3a6e771f29d2c00a8da5 "2024-02-24 · 137c177") + * [Added SortedHeadsUp::get_letter_index()](https://github.com/ImperialBower/pkcore/tree/20b1da4959b44dad2c53e9ced637ef6e5167d92d "2024-02-24 · 20b1da4") + * [FEATURE: OMAHA](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [impl Ord properly for Eval](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [Adding omaha permutations to Four](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [TODO: Refactor game analysis from array structs](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [Four::omaha_high()](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [8 or better](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [Cards.collapse()](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [moved to Pile trait](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [Rank.to_eight_or_better_lo_bit](https://github.com/ImperialBower/pkcore/tree/6ca77f7684e4bde01402c4c4c707498a57c38fb6 "2024-04-03 · 6ca77f7") + * [BACK TO OMAHA](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [games::omaha::OmahaHigh](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [impl Display for OmahaHigh ](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [impl FromStr for OmahaHigh](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [impl FromStr for Four](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [impl TryFrom for Four](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [impl TryFrom for OmahaHigh](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [ASIDE: Renamed PKError::InvalidIndex to InvalidCardIndex](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [made Five internal array pub(crate) visible](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [impl Pile for OmahaHigh](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [OmahaHigh.is_valid](https://github.com/ImperialBower/pkcore/tree/6634edb15216dab3a64a5451a93e16b024a64c88 "2024-04-17 · 6634edb") + * [FEATURE: Razz (v0.0.13)](https://github.com/ImperialBower/pkcore/tree/2122e451e7d99b4be9f6ca0c019e0b534c1d943f "2025-07-19 · 2122e45") + * [Add bit flag consts to rank](https://github.com/ImperialBower/pkcore/tree/1d973e3e9e3cf5c799ecf5e72d7c6ee0fb5bcdd1 "2025-07-04 · 1d973e3") + * [Ranks struct to manage hand rank evals.](https://github.com/ImperialBower/pkcore/tree/7514c1f3d5511121aefd2f2988589bd5011a55cb "2025-07-05 · 7514c1f") + * [Ranks::sum_or()](https://github.com/ImperialBower/pkcore/tree/7514c1f3d5511121aefd2f2988589bd5011a55cb "2025-07-05 · 7514c1f") + * [Ranks::count_ones()](https://github.com/ImperialBower/pkcore/tree/7514c1f3d5511121aefd2f2988589bd5011a55cb "2025-07-05 · 7514c1f") + * [Pile::ranks()](https://github.com/ImperialBower/pkcore/tree/7514c1f3d5511121aefd2f2988589bd5011a55cb "2025-07-05 · 7514c1f") + * [razz::California for all Razz hand ranks](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [five::hands::Hands a frequency ranked hand collection](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [rank added rank bit flags and methods for Razz hand calcs](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [Added Ranks struct to hold collections of Ranks](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [Added to arrays::HandRanker](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [razz_hand_rank()](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [razz_hand_rank_and_hand()](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [razz_hand_rank_value_and_hand()](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [All of these methods added to the Five, Six, and Seven structs implementations](https://github.com/ImperialBower/pkcore/tree/3f480df3138acd56456ef79d063b88adb0809688 "2025-07-19 · 3f480df") + * [FEATURE: Ranger](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [Created Ranger example ](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [Created HCSymbols ](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [Added Terminal::receive_range()](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [Created arrays::ranges modules. ](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [Moved range into it](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [Created ranked::Combo struct](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [Added PKError::InvalidComboIndex](https://github.com/ImperialBower/pkcore/tree/5e9441707fbf2edfecccb17aa142a0ed949ed5f1 "2025-07-25 · 5e94417") + * [FAILURE: Tried to create a pkrange crate, but got lost in macro hell and had to abandon.](https://github.com/ImperialBower/pkcore/tree/c11f67c31314540dacac4b2590b163d06a0574cc "2025-07-27 · c11f67c") + * [Combo struct THE PLAN:](https://github.com/ImperialBower/pkcore/tree/c11f67c31314540dacac4b2590b163d06a0574cc "2025-07-27 · c11f67c") + * [Combo constants](https://github.com/ImperialBower/pkcore/tree/c11f67c31314540dacac4b2590b163d06a0574cc "2025-07-27 · c11f67c") + * [Combo strings to Combo constants](https://github.com/ImperialBower/pkcore/tree/c11f67c31314540dacac4b2590b163d06a0574cc "2025-07-27 · c11f67c") + * [Combo constants to range! macros](https://github.com/ImperialBower/pkcore/tree/c11f67c31314540dacac4b2590b163d06a0574cc "2025-07-27 · c11f67c") + * [Combo constructor from string (_i._e. QQ+, AKs-98s, AQJs+)](https://github.com/ImperialBower/pkcore/tree/959669d73a633535657f842d33182e01ad4424c1 "2025-11-23 · 959669d") + * [...](https://github.com/ImperialBower/pkcore/tree/c11f67c31314540dacac4b2590b163d06a0574cc "2025-07-27 · c11f67c") + * [Profit!](https://github.com/ImperialBower/pkcore/tree/c11f67c31314540dacac4b2590b163d06a0574cc "2025-07-27 · c11f67c") + * [Finished parsing of sub ranges, aka `AKs-98s`](https://github.com/ImperialBower/pkcore/tree/cee0462b048b909f6c1d05e2d8559a812443581c "2025-08-06 · cee0462") + * [FEATURE: Added support for `A♠ A♥,A♦ K♦` and `A♠ A♥ - A♦ K♦` style index strings to `Cards::from_str()`](https://github.com/ImperialBower/pkcore/tree/cee0462b048b909f6c1d05e2d8559a812443581c "2025-08-06 · cee0462") + * [Removed HCSymbols for Combos](https://github.com/ImperialBower/pkcore/tree/cc4d205f0529264251cedc00ecc98ceb4e0aa18c "2025-08-16 · cc4d205") + * [Added Solver and gto example](https://github.com/ImperialBower/pkcore/tree/8ebb75e5e1a63d05c17705c613d59b45d447ff7e "2025-08-16 · 8ebb75e") + * [FEATURE: Compute Combo Blocker percentage ](https://github.com/ImperialBower/pkcore/tree/3954eaf9a6ad9111d8cf4a4f11160c37dafee88a "2025-08-17 · 3954eaf") + * [Added From for Combo](https://github.com/ImperialBower/pkcore/tree/3954eaf9a6ad9111d8cf4a4f11160c37dafee88a "2025-08-17 · 3954eaf") + * [Added ComboCount struct to hole available Two hands per Combo](https://github.com/ImperialBower/pkcore/tree/3954eaf9a6ad9111d8cf4a4f11160c37dafee88a "2025-08-17 · 3954eaf") + * [Added better ComboPairs.display() function](https://github.com/ImperialBower/pkcore/tree/e74c98a66760b4dbb13db65e984d13d04faf24ca "2025-08-22 · e74c98a") + * [Renaming Solver to vs::Versus](https://github.com/ImperialBower/pkcore/tree/2b0c3e9257eb32b7c21f17d41f65a1d39b4b288b "2025-08-23 · 2b0c3e9") + * [Removed Board from Solver since not used yet](https://github.com/ImperialBower/pkcore/tree/2b0c3e9257eb32b7c21f17d41f65a1d39b4b288b "2025-08-23 · 2b0c3e9") + * [FEATURE: Casino Table](https://github.com/ImperialBower/pkcore/tree/25d1c31c4a7e55c64eca6cb810a192bb3255f757 "2025-10-05 · 25d1c31") + * [Created CardsCell instead of using cardpack.rs' version.](https://github.com/ImperialBower/pkcore/tree/25d1c31c4a7e55c64eca6cb810a192bb3255f757 "2025-10-05 · 25d1c31") + * [Creating log::TableEvent](https://github.com/ImperialBower/pkcore/tree/25d1c31c4a7e55c64eca6cb810a192bb3255f757 "2025-10-05 · 25d1c31") + * [set_button and move_button methods](https://github.com/ImperialBower/pkcore/tree/9c0f7771e8bcf6126e87b37f8564fc84d75652d3 "2025-10-13 · 9c0f777") + * [Upgraded bint to 0.1.9 to fix 0 boundary defect](https://github.com/ImperialBower/pkcore/tree/9c0f7771e8bcf6126e87b37f8564fc84d75652d3 "2025-10-13 · 9c0f777") + * [Upgraded bint to 0.1.11 to make it cooler](https://github.com/ImperialBower/pkcore/tree/21289351fe89012424bcf594cc80949e142ddc75 "2025-10-13 · 2128935") + * [Added cc! and cards! macros](https://github.com/ImperialBower/pkcore/tree/21289351fe89012424bcf594cc80949e142ddc75 "2025-10-13 · 2128935") + * [Added support for Pile with CardsCell](https://github.com/ImperialBower/pkcore/tree/21289351fe89012424bcf594cc80949e142ddc75 "2025-10-13 · 2128935") + * [Added CardsCell.force_draw ](https://github.com/ImperialBower/pkcore/tree/21289351fe89012424bcf594cc80949e142ddc75 "2025-10-13 · 2128935") + * [Added From> to CardsCell](https://github.com/ImperialBower/pkcore/tree/21289351fe89012424bcf594cc80949e142ddc75 "2025-10-13 · 2128935") + * [Added uuid to table](https://github.com/ImperialBower/pkcore/tree/21289351fe89012424bcf594cc80949e142ddc75 "2025-10-13 · 2128935") + * [Added add() to Pile](https://github.com/ImperialBower/pkcore/tree/b040daf8ed3016225fdc4c742ec936b3a8e36c7a "2026-02-07 · b040daf") + * [Experimenting with letting CoPilot implement. Weeeeee](https://github.com/ImperialBower/pkcore/tree/b040daf8ed3016225fdc4c742ec936b3a8e36c7a "2026-02-07 · b040daf") + * [FEATURE: Table Manager](https://github.com/ImperialBower/pkcore/tree/941666bc390f442c7777aec6b9cf31ce05271291 "2026-02-08 · 941666b") + * [The Plan:](https://github.com/ImperialBower/pkcore/tree/941666bc390f442c7777aec6b9cf31ce05271291 "2026-02-08 · 941666b") + * [Read in a vector of Pluribus hands. ](https://github.com/ImperialBower/pkcore/tree/941666bc390f442c7777aec6b9cf31ce05271291 "2026-02-08 · 941666b") + * [✅ Added Util::read_lines() and Pluribus::read_in_log()](https://github.com/ImperialBower/pkcore/tree/941666bc390f442c7777aec6b9cf31ce05271291 "2026-02-08 · 941666b") + * [Splice the dealt cards into a deck so that they can be dealt back out.](https://github.com/ImperialBower/pkcore/tree/941666bc390f442c7777aec6b9cf31ce05271291 "2026-02-08 · 941666b") + * [Drive through one hand from the Pluribus struct. ](https://github.com/ImperialBower/pkcore/tree/941666bc390f442c7777aec6b9cf31ce05271291 "2026-02-08 · 941666b") + * [Create From To Pluribus validation](https://github.com/ImperialBower/pkcore/tree/941666bc390f442c7777aec6b9cf31ce05271291 "2026-02-08 · 941666b") + * [PLURIBUS example](https://github.com/ImperialBower/pkcore/tree/b8adc8d517967bb6fa55c55ec7cce6ddbde8b929 "2026-02-10 · b8adc8d") + * [REFACTORING: Remove Table.phase() let it be calculated by the table state](https://github.com/ImperialBower/pkcore/tree/b8adc8d517967bb6fa55c55ec7cce6ddbde8b929 "2026-02-10 · b8adc8d") + * [FEATURE: Dealer](https://github.com/ImperialBower/pkcore/tree/76649f43a81db9bb3ede74bcb45817908f133ca9 "2026-03-13 · 76649f4") + * [Create a struct that manages the action for a Table struct, routing actions from players.](https://github.com/ImperialBower/pkcore/tree/76649f43a81db9bb3ede74bcb45817908f133ca9 "2026-03-13 · 76649f4") + * [Initial stab done with Dealer struct and dealer_repl example. ](https://github.com/ImperialBower/pkcore/tree/76649f43a81db9bb3ede74bcb45817908f133ca9 "2026-03-13 · 76649f4") + * [DEFECT: Current Dealer game loop requires a human deal to trigger play events. This needs to be automated.](https://github.com/ImperialBower/pkcore/tree/76649f43a81db9bb3ede74bcb45817908f133ca9 "2026-03-13 · 76649f4") + * [Added PlayerState::Ready, used to indicate that the player is ready to play the next hand.](https://github.com/ImperialBower/pkcore/tree/76649f43a81db9bb3ede74bcb45817908f133ca9 "2026-03-13 · 76649f4") + * [Updated seat player functions to start the player struct with the state of Out. Won't be able to play until they specifically switch their state to Ready.](https://github.com/ImperialBower/pkcore/tree/76649f43a81db9bb3ede74bcb45817908f133ca9 "2026-03-13 · 76649f4") + * [Add ready action to Dealer. ](https://github.com/ImperialBower/pkcore/tree/76649f43a81db9bb3ede74bcb45817908f133ca9 "2026-03-13 · 76649f4") + * [ISSUE: Isolate split pots.](https://github.com/ImperialBower/pkcore/tree/ef60db1b1670ed241ab8559c949c4bf15e1d3507 "2026-03-16 · ef60db1") + * [Types:](https://github.com/ImperialBower/pkcore/tree/ef60db1b1670ed241ab8559c949c4bf15e1d3507 "2026-03-16 · ef60db1") + * [The players ... ](https://github.com/ImperialBower/pkcore/tree/b80cb3bb27d452d5b9ee18dfa108a8fa6dedc567 "2026-03-17 · b80cb3b") + * [ISSUE: Pots where player goes all in and another player goes all in as well, the player isn't having their excess chips returned to them. ](https://github.com/ImperialBower/pkcore/tree/b80cb3bb27d452d5b9ee18dfa108a8fa6dedc567 "2026-03-17 · b80cb3b") diff --git a/Makefile b/Makefile index b5e7baeb..59d5aed6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: test-serial clean build test build_test fmt clippy actionlint create_docs ayce default help docs test-nightly clippy-nightly nightly tree tree-duplicates deny audit unused-deps install-tools watch install-watch check-wasm check-purity generate-hups-bin test-debug-json nextest heavy marathon mutants mutants-diff coverage coverage-open ci ci-fresh pokerbench-data validate-okf release-notes perf-build perf-native perf-report perf-profile perf-check perf-build-all perf-native-all perf-sweep perf-bench +.PHONY: test-serial clean build test build_test fmt clippy actionlint create_docs ayce default help docs test-nightly clippy-nightly nightly tree tree-duplicates deny audit unused-deps install-tools watch install-watch check-wasm check-purity generate-hups-bin test-debug-json nextest heavy marathon mutants mutants-diff coverage coverage-open ci ci-fresh pokerbench-data validate-okf release-notes diary-links perf-build perf-native perf-report perf-profile perf-check perf-build-all perf-native-all perf-sweep perf-bench # Default target default: ayce @@ -47,6 +47,7 @@ help: @echo " make audit - Run advisory-only security audit" @echo " make validate-okf - Check .okf/ knowledge bundle conformance (OKF v0.1, strict)" @echo " make release-notes - Preview release notes for TAG=vX.Y.Z" + @echo " make diary-links - Regenerate DIARY_LINKED.md (each DIARY.md line linked to its commit)" @echo "" @echo "WebAssembly:" @echo " make check-wasm - Check the library compiles for wasm32-unknown-unknown" @@ -171,6 +172,10 @@ validate-okf: python3 scripts/okf_validate.py .okf --strict; \ fi +# Regenerate DIARY_LINKED.md: every DIARY.md line linked to the commit that wrote it. +diary-links: + @python3 scripts/link_diary.py DIARY.md DIARY_LINKED.md + # Check for unused dependencies (requires nightly) unused-deps: @echo "Checking for unused dependencies..." diff --git a/scripts/link_diary.py b/scripts/link_diary.py new file mode 100644 index 00000000..18450ec4 --- /dev/null +++ b/scripts/link_diary.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""Write DIARY_LINKED.md: DIARY.md with every line linked to the commit that wrote it. + +Each link opens the GitHub tree at that commit, so a diary entry takes you to the +repo as it was when the entry was written. `git blame -C -C` follows lines copied +across files, which matters here: the diary started life in README.md and was +moved to DIARY.md in 9186e6d, and a plain blame would credit that move. + +A line shows its *last* change, so an entry edited later links to the edit. + +Lines that already hold a markdown link, or a code span with brackets in it, +cannot be wrapped in a link; they keep their text and get a trailing `↗ `. + +Run: python3 scripts/link_diary.py [SOURCE] [OUTPUT] (defaults: DIARY.md DIARY_LINKED.md) +""" +from __future__ import annotations + +import datetime +import re +import subprocess +import sys + +REPO_TREE = "https://github.com/ImperialBower/pkcore/tree/" +LINE_START = re.compile(r"^(\s*(?:[*+-]|\d+\.|#+)\s+)?(.*)$") +SHA = re.compile(r"[0-9a-f]{40}") + + +def blame(source: str) -> list[tuple[str, str, str]]: + """Return (sha, yyyy-mm-dd, text) for each line of `source`.""" + porcelain = subprocess.run( + ["git", "blame", "-w", "-C", "-C", "--line-porcelain", source], + capture_output=True, + text=True, + check=True, + ).stdout.splitlines() + rows, sha, date = [], "", "" + for line in porcelain: + if line.startswith("\t"): + rows.append((sha, date, line[1:])) + continue + field, _, value = line.partition(" ") + if SHA.fullmatch(field): + sha = field + elif field == "author-time": + stamp = datetime.datetime.fromtimestamp(int(value), datetime.timezone.utc) + date = stamp.strftime("%Y-%m-%d") + return rows + + +def link_line(sha: str, date: str, text: str) -> str: + if not text.strip(): + return text + target = f'{REPO_TREE}{sha} "{date} · {sha[:7]}"' + prefix, body = LINE_START.match(text).groups() + has_brackets = "[" in body or "]" in body + if "](" in body or ("`" in body and has_brackets) or body.startswith(("|", "<")): + return f"{text} [↗ {sha[:7]}]({target})" + escaped = body.replace("[", "\\[").replace("]", "\\]") + return f"{prefix or ''}[{escaped}]({target})" + + +def main() -> int: + source = sys.argv[1] if len(sys.argv) > 1 else "DIARY.md" + output = sys.argv[2] if len(sys.argv) > 2 else "DIARY_LINKED.md" + rows = blame(source) + lines = [ + f"", + "", + ] + lines += [link_line(sha, date, text) for sha, date, text in rows] + with open(output, "w", encoding="utf-8") as handle: + handle.write("\n".join(lines) + "\n") + print(f"{output}: {len(rows)} lines, {len({sha for sha, _, _ in rows})} commits") + return 0 + + +if __name__ == "__main__": + sys.exit(main())