{
  "schemaVersion": 1,
  "modelVersion": "1.0.0",
  "published": "2026-09-04",
  "generatedBy": "scripts/generate-results-oriented-poker-data.mjs",
  "title": "Decision quality and realized outcomes are separate variables",
  "question": "Can the same poker decision keep the same EV grade when one constructed instance wins and another loses?",
  "hypothesis": "For a closed-action river call, decision-time EV determines the grade; revealing a win or loss changes realized chips but cannot change that grade.",
  "evidenceStatus": {
    "kind": "synthetic logical demonstration",
    "observedUserData": false,
    "observedPokerHands": false,
    "pokerPlayerPsychologyData": false,
    "solverOutput": false,
    "strategyRecommendation": false,
    "randomnessUsed": false
  },
  "units": {
    "chips": "Abstract cash-game chips; no currency or monetary return is modeled.",
    "equity": "Decimal probability supplied as a constructed decision-time input.",
    "caseCount": "Four constructed cells in a 2 × 2 logical matrix; not a statistical sample."
  },
  "decisionConvention": {
    "baseline": "EV is measured immediately before Hero chooses call or fold, so folding is zero from this decision point.",
    "potBeforeAction": "The 300-chip pot already includes the opponent’s river bet and excludes Hero’s unmade 100-chip call.",
    "formula": "call EV = equity × (pot before action + call cost) − call cost.",
    "threshold": "required equity = call cost ÷ (pot before action + call cost).",
    "resultAccounting": "A called win receives the 400-chip final pot after paying 100 now, for +300 from the decision point; a called loss is −100.",
    "gradingRule": "Decision grade uses only the locked decision-time inputs and deterministic audit; realized outcome is excluded."
  },
  "assumptions": [
    "Every case is a constructed heads-up no-limit Hold’em cash-chip river decision, not an observed hand.",
    "Hero faces a 100-chip call into a 300-chip pot that already includes the opponent’s bet; calling makes the final pot 400 chips.",
    "Calling closes action. There is no remaining rake or drop, no tie, no side pot, no currency conversion, and no future street or action.",
    "The 30% and 15% equities are declared synthetic inputs selected to sit above and below the 25% break-even threshold.",
    "The two cases in each EV pair have identical decision-time inputs and identical pre-reveal audits; only the case identity and realized-outcome fields differ.",
    "No random sampling is performed, so a random seed and iteration count are not applicable."
  ],
  "caseMatrix": [
    {
      "caseId": "positive-ev-win",
      "pairId": "positive-ev-call",
      "decisionQualityAxis": "positive EV call",
      "outcomeAxis": "win",
      "decisionTime": {
        "gameFormat": "Heads-up no-limit Hold’em cash chips",
        "street": "river",
        "decision": "call-or-fold",
        "actionTaken": "call",
        "potBeforeActionChips": 300,
        "callCostChips": 100,
        "remainingRakeChips": 0,
        "tieProbability": 0,
        "futureActionPossible": false,
        "actionClosesHand": true,
        "decisionTimeLockedBeforeOutcome": true,
        "equityEstimate": 0.3,
        "equityBasis": "Constructed 30% equity input for arithmetic demonstration; not a solver range or observed frequency."
      },
      "decisionAudit": {
        "referenceType": "constructed-input deterministic arithmetic",
        "referenceModelId": "closed-action-river-call/1.0.0",
        "finalPotIfCallChips": 400,
        "requiredEquity": 0.25,
        "expectedGrossReceiptChips": 120,
        "foldEvChips": 0,
        "callEvChips": 20,
        "callMinusFoldEvChips": 20,
        "decisionGrade": "positive-ev-call",
        "preferredAction": "call",
        "actionAlignment": "aligned"
      },
      "resultReveal": {
        "realizedOutcome": "win",
        "chipsReceivedChips": 400,
        "realizedNetChipsFromDecision": 300,
        "decisionGradeAfterReveal": "positive-ev-call",
        "outcomeChangedDecisionGrade": false
      }
    },
    {
      "caseId": "positive-ev-loss",
      "pairId": "positive-ev-call",
      "decisionQualityAxis": "positive EV call",
      "outcomeAxis": "loss",
      "decisionTime": {
        "gameFormat": "Heads-up no-limit Hold’em cash chips",
        "street": "river",
        "decision": "call-or-fold",
        "actionTaken": "call",
        "potBeforeActionChips": 300,
        "callCostChips": 100,
        "remainingRakeChips": 0,
        "tieProbability": 0,
        "futureActionPossible": false,
        "actionClosesHand": true,
        "decisionTimeLockedBeforeOutcome": true,
        "equityEstimate": 0.3,
        "equityBasis": "Constructed 30% equity input for arithmetic demonstration; not a solver range or observed frequency."
      },
      "decisionAudit": {
        "referenceType": "constructed-input deterministic arithmetic",
        "referenceModelId": "closed-action-river-call/1.0.0",
        "finalPotIfCallChips": 400,
        "requiredEquity": 0.25,
        "expectedGrossReceiptChips": 120,
        "foldEvChips": 0,
        "callEvChips": 20,
        "callMinusFoldEvChips": 20,
        "decisionGrade": "positive-ev-call",
        "preferredAction": "call",
        "actionAlignment": "aligned"
      },
      "resultReveal": {
        "realizedOutcome": "loss",
        "chipsReceivedChips": 0,
        "realizedNetChipsFromDecision": -100,
        "decisionGradeAfterReveal": "positive-ev-call",
        "outcomeChangedDecisionGrade": false
      }
    },
    {
      "caseId": "negative-ev-win",
      "pairId": "negative-ev-call",
      "decisionQualityAxis": "negative EV call",
      "outcomeAxis": "win",
      "decisionTime": {
        "gameFormat": "Heads-up no-limit Hold’em cash chips",
        "street": "river",
        "decision": "call-or-fold",
        "actionTaken": "call",
        "potBeforeActionChips": 300,
        "callCostChips": 100,
        "remainingRakeChips": 0,
        "tieProbability": 0,
        "futureActionPossible": false,
        "actionClosesHand": true,
        "decisionTimeLockedBeforeOutcome": true,
        "equityEstimate": 0.15,
        "equityBasis": "Constructed 15% equity input for arithmetic demonstration; not a solver range or observed frequency."
      },
      "decisionAudit": {
        "referenceType": "constructed-input deterministic arithmetic",
        "referenceModelId": "closed-action-river-call/1.0.0",
        "finalPotIfCallChips": 400,
        "requiredEquity": 0.25,
        "expectedGrossReceiptChips": 60,
        "foldEvChips": 0,
        "callEvChips": -40,
        "callMinusFoldEvChips": -40,
        "decisionGrade": "negative-ev-call",
        "preferredAction": "fold",
        "actionAlignment": "not-aligned"
      },
      "resultReveal": {
        "realizedOutcome": "win",
        "chipsReceivedChips": 400,
        "realizedNetChipsFromDecision": 300,
        "decisionGradeAfterReveal": "negative-ev-call",
        "outcomeChangedDecisionGrade": false
      }
    },
    {
      "caseId": "negative-ev-loss",
      "pairId": "negative-ev-call",
      "decisionQualityAxis": "negative EV call",
      "outcomeAxis": "loss",
      "decisionTime": {
        "gameFormat": "Heads-up no-limit Hold’em cash chips",
        "street": "river",
        "decision": "call-or-fold",
        "actionTaken": "call",
        "potBeforeActionChips": 300,
        "callCostChips": 100,
        "remainingRakeChips": 0,
        "tieProbability": 0,
        "futureActionPossible": false,
        "actionClosesHand": true,
        "decisionTimeLockedBeforeOutcome": true,
        "equityEstimate": 0.15,
        "equityBasis": "Constructed 15% equity input for arithmetic demonstration; not a solver range or observed frequency."
      },
      "decisionAudit": {
        "referenceType": "constructed-input deterministic arithmetic",
        "referenceModelId": "closed-action-river-call/1.0.0",
        "finalPotIfCallChips": 400,
        "requiredEquity": 0.25,
        "expectedGrossReceiptChips": 60,
        "foldEvChips": 0,
        "callEvChips": -40,
        "callMinusFoldEvChips": -40,
        "decisionGrade": "negative-ev-call",
        "preferredAction": "fold",
        "actionAlignment": "not-aligned"
      },
      "resultReveal": {
        "realizedOutcome": "loss",
        "chipsReceivedChips": 0,
        "realizedNetChipsFromDecision": -100,
        "decisionGradeAfterReveal": "negative-ev-call",
        "outcomeChangedDecisionGrade": false
      }
    }
  ],
  "pairInvariants": [
    {
      "pairId": "positive-ev-call",
      "caseIds": [
        "positive-ev-win",
        "positive-ev-loss"
      ],
      "lockedEqualPaths": [
        "pairId",
        "decisionQualityAxis",
        "decisionTime",
        "decisionAudit"
      ],
      "allowedOutcomeDifferences": [
        "caseId",
        "outcomeAxis",
        "resultReveal.realizedOutcome",
        "resultReveal.chipsReceivedChips",
        "resultReveal.realizedNetChipsFromDecision"
      ],
      "expectedDecisionGrade": "positive-ev-call",
      "statement": "The 30% call is +20 chips before either result is revealed; winning or losing changes realized chips, not its decision grade.",
      "verifiedCaseCount": 2
    },
    {
      "pairId": "negative-ev-call",
      "caseIds": [
        "negative-ev-win",
        "negative-ev-loss"
      ],
      "lockedEqualPaths": [
        "pairId",
        "decisionQualityAxis",
        "decisionTime",
        "decisionAudit"
      ],
      "allowedOutcomeDifferences": [
        "caseId",
        "outcomeAxis",
        "resultReveal.realizedOutcome",
        "resultReveal.chipsReceivedChips",
        "resultReveal.realizedNetChipsFromDecision"
      ],
      "expectedDecisionGrade": "negative-ev-call",
      "statement": "The 15% call is -40 chips before either result is revealed; winning or losing changes realized chips, not its decision grade.",
      "verifiedCaseCount": 2
    }
  ],
  "quadrantMatrix": {
    "rowAxis": [
      "positive EV call",
      "negative EV call"
    ],
    "columnAxis": [
      "win",
      "loss"
    ],
    "cells": [
      {
        "decisionQuality": "positive EV call",
        "realizedOutcome": "win",
        "caseId": "positive-ev-win"
      },
      {
        "decisionQuality": "positive EV call",
        "realizedOutcome": "loss",
        "caseId": "positive-ev-loss"
      },
      {
        "decisionQuality": "negative EV call",
        "realizedOutcome": "win",
        "caseId": "negative-ev-win"
      },
      {
        "decisionQuality": "negative EV call",
        "realizedOutcome": "loss",
        "caseId": "negative-ev-loss"
      }
    ]
  },
  "reviewCard": {
    "csvFile": "results-oriented-review-card.csv",
    "encoding": "UTF-8",
    "lineEndings": "LF",
    "templateRowCount": 1,
    "exampleRowCount": 4,
    "totalRowCountExcludingHeader": 5,
    "header": [
      "record_kind",
      "case_id",
      "pair_id",
      "lock_completed_before_result",
      "lock_game_format",
      "lock_street",
      "lock_decision",
      "lock_action_taken",
      "lock_pot_before_action_chips",
      "lock_call_cost_chips",
      "lock_equity_estimate_pct",
      "lock_range_or_model_assumption",
      "lock_remaining_rake_chips",
      "lock_tie_probability_pct",
      "lock_future_action_possible",
      "lock_reasoning",
      "audit_reference_type",
      "audit_reference_label",
      "audit_reference_version_or_date",
      "audit_reference_equity_pct",
      "audit_final_pot_if_call_chips",
      "audit_required_equity_pct",
      "audit_call_ev_chips",
      "audit_decision_grade",
      "audit_action_alignment",
      "audit_notes",
      "reveal_unlocked_after_audit",
      "reveal_outcome",
      "reveal_chips_received_chips",
      "reveal_net_chips_from_decision",
      "reveal_did_outcome_change_decision_grade",
      "reveal_process_note",
      "update_target_belief",
      "update_evidence_unit",
      "update_sample_scope",
      "update_direction",
      "update_confidence",
      "update_next_test",
      "update_notes",
      "synthetic_disclosure"
    ],
    "chronologyBoundary": "Column order separates lock/audit from reveal/update, but completion timing is self-reported and cannot be enforced by a static CSV.",
    "stages": [
      {
        "pass": 1,
        "prefix": "lock_",
        "name": "Lock the decision-time record",
        "rule": "Complete these fields before seeing or entering the result."
      },
      {
        "pass": 1,
        "prefix": "audit_",
        "name": "Audit against a reference or declared model",
        "rule": "Grade the decision from information available at the decision; keep the result hidden."
      },
      {
        "pass": 2,
        "prefix": "reveal_",
        "name": "Reveal and record the result",
        "rule": "Record realized chips separately and do not overwrite the decision grade."
      },
      {
        "pass": 2,
        "prefix": "update_",
        "name": "Plan a future-belief update",
        "rule": "Change a future assumption only for identified new evidence and a declared comparison scope."
      }
    ]
  },
  "quickReviewCard": {
    "csvFile": "results-oriented-poker-quick-review.csv",
    "encoding": "UTF-8",
    "lineEndings": "LF",
    "templateRowCount": 1,
    "totalRowCountExcludingHeader": 1,
    "header": [
      "id",
      "locked_state_and_options",
      "locked_belief_or_range",
      "action_and_reason",
      "confidence",
      "reference_and_mismatch",
      "locked_model_based_action_grade",
      "raw_result",
      "post_reveal_snap_grade_or_change",
      "genuinely_new_evidence",
      "future_model_update",
      "next_comparable_sample"
    ],
    "purpose": "A plain chronological audit trail for one reviewed decision.",
    "chronologyBoundary": "Column order separates pre-reveal from post-reveal prompts, but completion timing is self-reported and cannot be enforced by a static CSV.",
    "validationBoundary": "This audit trail is not a validated test of outcome bias, psychology, or decision skill."
  },
  "syntheticDisclosure": "Synthetic logical demonstration only; not observed users, poker-player psychology data, solver output, or a strategy recommendation.",
  "interpretationBoundary": "The bundle demonstrates arithmetic and separation of variables under its declared inputs. Verification checks consistency against fixtures embedded in the verifier; the verifier source and pins must themselves be trusted, and a pass does not establish cryptographic provenance. The bundle does not measure outcome bias in poker players, estimate a real range, reproduce solver strategy, show long-run frequencies, or recommend a wager."
}
