This final entry is a map for review and reproduction. The experiment includes a desktop C++/Qt application and a browser implementation. They expose the same problem in different execution environments, but similar names do not guarantee identical code paths or numerical behavior.

Native and browser paths into the same poker experiment
Native and browser paths into the same poker experiment

On the C++/Qt side, begin with `model`: state features, action scores, updates, and model persistence define the policy path. `game` owns street progression, betting, pot settlement, and terminal flow such as `finishHand`. `card` is where deck representation and hand-strength calculation should be checked. `mainwindow` connects the visible interface, input, and simulation, which matters when identifying the exact state represented by a log line.

The browser side has a separate web engine. It is convenient for repeated runs and action visualization, but reward logic, features, and randomness must be compared directly with native code. A constant changed in one implementation should not be assumed to have changed in the other.

Source map across model, game, card, mainwindow, web engine, and snapshots
Source map across model, game, card, mainwindow, web engine, and snapshots

Model snapshots bridge code and observation. Cheolsu, younghee, and minsu demonstrate that similar visible moves can come from different internal preferences. A snapshot is only a sample at one training point, so preserve it with filename, commit, configuration, and random seed. Do not infer an entire strategy from one weight; trace the feature vector and action-selection function too.

A practical reading order starts where chip delta is computed at hand completion. Inspect the transformation in `finishHand`, follow the value into episode updates, load the saved weights, and compare resulting action scores. Finally replay equivalent initial conditions in the Qt interface and web engine. Record implementation differences as experimental variables.

The scope is important: this published source is a diagnostic snapshot of the policy-collapse investigation. It does not claim that the proposed reward redesign, mixed-opponent training, or improved credit assignment has already been implemented or has fixed the behavior. The guard shown earlier is containment, not a root-cause repair. Any follow-up change needs its own commit and the same seeded evaluation protocol.

The map is meant to let other developers recheck the observation without overstating it. Source, snapshots, reproduction settings, and failures together form the baseline for the next experiment.

22 files · 5,126 lines — open a folder and click a file to load its code.

Project root2 files
CMakeLists.txttext · 35 lines · 772B

Loading code…

README.mdmarkdown · 28 lines · 885B

Loading code…

models/3 files
models/cheolsu.modeltext · 86 lines · 686B

Loading code…

models/minsu.modeltext · 86 lines · 639B

Loading code…

models/younghee.modeltext · 86 lines · 743B

Loading code…

src/11 files
src/card.cppc++ · 409 lines · 11KB

Loading code…

src/card.hc++ · 27 lines · 757B

Loading code…

src/dealer.cppc++ · 22 lines · 560B

Loading code…

src/dealer.hc++ · 21 lines · 445B

Loading code…

src/game.cppc++ · 854 lines · 29KB

Loading code…

src/game.hc++ · 159 lines · 4KB

Loading code…

src/main.cppc++ · 19 lines · 380B

Loading code…

src/mainwindow.cppc++ · 1,193 lines · 50KB

Loading code…

src/mainwindow.hc++ · 49 lines · 996B

Loading code…

src/model.cppc++ · 303 lines · 11KB

Loading code…

src/model.hc++ · 55 lines · 1KB

Loading code…

web/6 files
web/css/table.csscss · 210 lines · 7KB

Loading code…

web/index.htmltext · 38 lines · 2KB

Loading code…

web/js/engine.jsjavascript · 985 lines · 29KB

Loading code…

web/js/ui.jsjavascript · 358 lines · 12KB

Loading code…

web/poker.mariago.kr.conftext · 33 lines · 722B

Loading code…

web/test.mjsjavascript · 70 lines · 3KB

Loading code…