changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "description": "One postflop solver node: the acting player's strategy and the legal next segments.",
+ "properties": {
+ "actingPlayer": {
+ "description": "0 for out of position, 1 for in position.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "actionFreqs": {
+ "description": "Full detail: aggregate frequency per action.",
+ "items": {
+ "description": "Reach-weighted frequency for the action at this index.",
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "actions": {
+ "description": "Actions at the node with their reach-weighted frequency.",
+ "items": {
+ "description": "One action available at a postflop node.",
+ "properties": {
+ "action": {
+ "description": "Action segment including its size, e.g. \"Bet 5.5\".",
+ "type": "string"
+ },
+ "actionType": {
+ "description": "Action label without the size.",
+ "type": "string"
+ },
+ "addBb": {
+ "description": "Chips this action adds, in big blinds.",
+ "type": "number"
+ },
+ "comparisonKey": {
+ "description": "Size-normalised action key used to line two nodes up, e.g. \"Bet 75% pot\".",
+ "type": "string"
+ },
+ "evBb": {
+ "description": "Action EV in big blinds where the pack publishes it.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "evLossBb": {
+ "description": "EV given up against the best action, in big blinds.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "frequency": {
+ "description": "Reach-weighted frequency from 0 to 1.",
+ "type": "number"
+ },
+ "label": {
+ "description": "Action label, e.g. \"Check\", \"Bet\", \"Call\".",
+ "type": "string"
+ },
+ "sizePotPct": {
+ "description": "Bet size as a percent of the pot, bets only.",
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "board": {
+ "anyOf": [
+ {
+ "description": "Board in spaced form.",
+ "type": "string"
+ },
+ {
+ "description": "Cards visible at this node.",
+ "items": {
+ "description": "One card.",
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ],
+ "description": "Board at this node."
+ },
+ "childSegments": {
+ "description": "Append one of these to `path` to walk deeper.",
+ "items": {
+ "description": "An action like \"Bet 5.5\" or a runout like \"deal:7c\".",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "columns": {
+ "description": "Column order for `hands`: combo, reach, frequencies, evBb, evLossBb, actionEvBb.",
+ "items": {
+ "description": "Column name.",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "combo": {
+ "description": "The requested combo, when one was asked for.",
+ "type": "string"
+ },
+ "hands": {
+ "description": "Compact rows in `columns` order, or the full per-combo strategy objects in full detail.",
+ "items": {
+ "anyOf": [
+ {
+ "description": "One compact row.",
+ "type": "array"
+ },
+ {
+ "description": "One combo's stored strategy.",
+ "type": "object"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "hint": {
+ "description": "How to narrow, page, or widen the same query.",
+ "type": "string"
+ },
+ "node": {
+ "description": "Full detail: the stored node. Null at a chance point, where runouts hang directly under the path.",
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "path": {
+ "description": "Segments walked from the root to this node.",
+ "items": {
+ "description": "One segment from the root.",
+ "type": "string"
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "potBb": {
+ "description": "Pot at this node in big blinds.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "reach": {
+ "description": "Full detail: the acting player's per-combo reach.",
+ "items": {
+ "description": "A combo and its reach weight.",
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "summary": {
+ "description": "What the compact range left out, so nothing looks complete when it is sampled.",
+ "properties": {
+ "classes": {
+ "description": "Postflop: hand classes with reach at the node.",
+ "type": "integer"
+ },
+ "matchingHands": {
+ "description": "plo5: classes that take the action before the cut.",
+ "type": "integer"
+ },
+ "minFreq": {
+ "description": "plo5: the frequency floor applied.",
+ "type": "number"
+ },
+ "mixedHands": {
+ "description": "Classes strictly between 0.005 and 0.995.",
+ "type": "integer"
+ },
+ "mixedInReturned": {
+ "description": "plo5: mixed classes among the returned rows.",
+ "type": "integer"
+ },
+ "nonzeroHands": {
+ "description": "Hand classes with a frequency above 0.",
+ "type": "integer"
+ },
+ "omitted": {
+ "description": "Rows dropped by the compact cut.",
+ "type": "integer"
+ },
+ "pureHands": {
+ "description": "Classes at frequency 0.995 or higher.",
+ "type": "integer"
+ },
+ "pureInReturned": {
+ "description": "plo5: pure classes among the returned rows.",
+ "type": "integer"
+ },
+ "returned": {
+ "description": "Rows in this response.",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+}