# GREENROOM source and solver notices

## Optional completed-review action values

The source now includes an optional NoRegrets conditional-action-value integration, **disabled by default** (`HOLDEM_REVIEW_EV=1` is required at server start). Its code being distributed does not imply it is enabled on the running service. It is separate from the native heads-up solver below and from bot strategy.

NoRegrets upstream: https://github.com/conorarmstrong/noregrets at `757f7692738069522195d2b486eec60a8b010c0c`, MIT license. The complete modified runtime source and MIT notice are under `ev-runtime/`; no pretrained strategies or compiled binaries are distributed. See `ev-runtime/README.md` in the archive for build, resource policy, input boundaries, scope and rollout checks. This path uses 4,096 decision-root MCCFR+ iterations (not 20,000 blueprint iterations) and 512 samples per abstract candidate, with explicit opponent-range assumptions. Its values are conditional estimates, not optimal-action recommendations.


The corresponding source code for this deployment is available as `greenroom-source.tar.gz` from the application entry path. It excludes credentials, live room state and private hand archives.

The bundled native solver uses **postflop-solver**, Copyright (C) 2022 Wataru Inariba, licensed GNU AGPL version 3 or later. Upstream: https://github.com/b-inary/postflop-solver . Pinned revision: `9d1509fe5077d019825f833eed04b16d342dfda1`. Full license is included in `solver/LICENSE` and `solver/upstream/LICENSE` in the archive. Three explicit raw-pointer borrows were added in upstream `src/action_tree.rs` for current Rust compatibility; the full modified source is included.

The application integration and review additions in this source distribution are also made available under GNU AGPL version 3 or later. See `solver/LICENSE` for the full text. No warranty is provided.

## Build and run

Requirements: Node.js 22+, stable Rust/Cargo, a C/C++ linker. No Node packages are needed.

```
cargo build --release --manifest-path solver/Cargo.toml
node --test
PORT=3190 node server.js
```

`DATA_DIR` may point to a private writable directory. Do not serve that directory publicly. The native solver launches on demand with two Rayon threads, one concurrent request, 30-second wall timeout, at most 500 iterations and a 512 MiB solver allocation limit. Default search is 500 iterations. Inputs use assumed ranges, fixed bet sizes, no rake. Supported postflop decisions: OOP with no street bet, or IP after an OOP check. Facing bets and all-in players are explicitly unsupported. A limited approximate solve is not a guaranteed exact GTO solution.

Optional AI coaching uses free OpenRouter models and a server-only API credential in `~/.config/holdem/credentials.env`, or `HOLDEM_OPENROUTER_API_KEY`. Never place credentials under `public/` or include them in an archive. With no credential or a provider error, the calculator remains usable and coaching reports unavailable. See source for environment overrides. Only completed hand, current-decision information is sent; hidden opponent hands/future board are not sent.
