[#46] Structured iteration log: every bench run machine-readable #48

Merged
robertismo merged 1 commit from 46-iter-log into master 2026-09-29 18:43:12 +00:00
Owner

What changed

Adds a structured, machine-readable iteration log to the bench harness (issue #46). Every --bench and --bench-vs run now appends one record to iterations.json in the repo root, committed alongside bench-results.md. The human-readable bench-results.md output is unchanged.

  • New iterlog.go: package-level IterationRecord, PresetRow, GauntletRow, VSRow types; appendIteration loads the existing file, appends, and rewrites — old records are never lost, and a corrupt log is reported as an error instead of being silently clobbered.
  • bench.go: runBench captures per-preset per-brain rows (wins/plays/avg equity/maxAbs) via presetRowFrom as each preset finishes, and runGauntlet returns per-specialist rows (wins/plays/presets-won) as it computes the existing per-preset print lines.
  • benchvs.go: runBenchVs appends a record whose BenchVS section carries current-vs-old wins/plays per brain.
  • main.go: --bench gains an optional hypothesis argument (--bench "text"), plus a --hypothesis text / --hypothesis=text flag; absent → "untagged run".
  • git SHA: captured inside the harness via git rev-parse HEAD (exec.Command).
  • Env knobs: BANKWARS_BENCH_GAMES / BANKWARS_GAUNTLET_GAMES shrink game counts for tiny smoke benches of the real binary (defaults unchanged: 100 / 40).
  • Tests: 5 new tests — append-preserves-N-records, fresh/empty file handling, corrupt file not clobbered, presetRowFrom conversion, and an end-to-end 1-game bench that asserts a complete record lands in iterations.json.

iterations.json schema

Top level: a JSON array of iteration records, one per bench run.

[
  {
    "hypothesis": "untagged run",
    "git_sha": "4bf460e...",
    "timestamp": "2026-09-29T18:35:00Z",
    "presets": {
      "base": {
        "wins":   {"empire": 1, "mill": 0, "vault": 0, "adapt": 0},
        "plays":  {"empire": 1, "mill": 1, "vault": 1, "adapt": 1},
        "avg_eq": {"empire": 1234.5, "mill": -20.0, "vault": 0.0, "adapt": 999.0},
        "max_abs":{"empire": 9000.0, "mill": 8500.0, "vault": 400.0, "adapt": 1000.0}
      }
    },
    "gauntlet": {
      "deposit-spec": {"wins": 5, "plays": 80, "presets_won": 2}
    },
    "bench_vs": {
      "empire": {"current_wins": 20, "current_plays": 375, "old_wins": 17, "old_plays": 375}
    }
  }
]
  • presets: keyed by preset name; per-brain wins, plays, average final equity, max |equity|.
  • gauntlet: keyed by specialist name; total specialist wins/plays and number of presets the specialist won at least once in.
  • bench_vs: keyed by brain name; current vs old wins/plays (empty object on plain bench runs).

Verification

No full bench run. Verified with tiny real-binary invocations (BANKWARS_BENCH_GAMES=1 ./bankwars --bench "text" etc.): inline-hypothesis, separate-flag, untagged default, bench-vs records, and 4 consecutive runs preserving all 4 records. go build / go vet ./... / go test -count=1 . green (10 tests).

## What changed Adds a structured, machine-readable iteration log to the bench harness (issue #46). Every `--bench` and `--bench-vs` run now appends one record to `iterations.json` in the repo root, committed alongside `bench-results.md`. The human-readable `bench-results.md` output is unchanged. - **New `iterlog.go`**: package-level `IterationRecord`, `PresetRow`, `GauntletRow`, `VSRow` types; `appendIteration` loads the existing file, appends, and rewrites — old records are never lost, and a corrupt log is reported as an error instead of being silently clobbered. - **`bench.go`**: `runBench` captures per-preset per-brain rows (wins/plays/avg equity/maxAbs) via `presetRowFrom` as each preset finishes, and `runGauntlet` returns per-specialist rows (wins/plays/presets-won) as it computes the existing per-preset print lines. - **`benchvs.go`**: `runBenchVs` appends a record whose `BenchVS` section carries current-vs-old wins/plays per brain. - **`main.go`**: `--bench` gains an optional hypothesis argument (`--bench "text"`), plus a `--hypothesis text` / `--hypothesis=text` flag; absent → `"untagged run"`. - **git SHA**: captured inside the harness via `git rev-parse HEAD` (exec.Command). - **Env knobs**: `BANKWARS_BENCH_GAMES` / `BANKWARS_GAUNTLET_GAMES` shrink game counts for tiny smoke benches of the real binary (defaults unchanged: 100 / 40). - **Tests**: 5 new tests — append-preserves-N-records, fresh/empty file handling, corrupt file not clobbered, `presetRowFrom` conversion, and an end-to-end 1-game bench that asserts a complete record lands in `iterations.json`. ## iterations.json schema Top level: a JSON array of iteration records, one per bench run. ```json [ { "hypothesis": "untagged run", "git_sha": "4bf460e...", "timestamp": "2026-09-29T18:35:00Z", "presets": { "base": { "wins": {"empire": 1, "mill": 0, "vault": 0, "adapt": 0}, "plays": {"empire": 1, "mill": 1, "vault": 1, "adapt": 1}, "avg_eq": {"empire": 1234.5, "mill": -20.0, "vault": 0.0, "adapt": 999.0}, "max_abs":{"empire": 9000.0, "mill": 8500.0, "vault": 400.0, "adapt": 1000.0} } }, "gauntlet": { "deposit-spec": {"wins": 5, "plays": 80, "presets_won": 2} }, "bench_vs": { "empire": {"current_wins": 20, "current_plays": 375, "old_wins": 17, "old_plays": 375} } } ] ``` - `presets`: keyed by preset name; per-brain wins, plays, average final equity, max |equity|. - `gauntlet`: keyed by specialist name; total specialist wins/plays and number of presets the specialist won at least once in. - `bench_vs`: keyed by brain name; current vs old wins/plays (empty object on plain bench runs). ## Verification No full bench run. Verified with tiny real-binary invocations (`BANKWARS_BENCH_GAMES=1 ./bankwars --bench "text"` etc.): inline-hypothesis, separate-flag, untagged default, bench-vs records, and 4 consecutive runs preserving all 4 records. `go build` / `go vet ./...` / `go test -count=1 .` green (10 tests).
[#46] Structured iteration log: iterations.json + --bench hypothesis flag
All checks were successful
build / build (push) Successful in 24s
4bf460e654
Every --bench / --bench-vs run appends an IterationRecord to iterations.json
in the repo root (load-existing + append + rewrite, old records never lost):
hypothesis text, git rev-parse HEAD, UTC timestamp, per-preset per-brain rows
(wins/plays/avg_eq/max_abs), per-specialist gauntlet rows (wins/plays +
presets-won), and bench-vs current-vs-old rows.

--bench gains an optional hypothesis argument (--bench "text" or
--hypothesis text); absent -> "untagged run". Human-readable
bench-results.md output is unchanged. BANKWARS_BENCH_GAMES /
BANKWARS_GAUNTLET_GAMES env knobs allow tiny smoke benches of the real
binary (defaults 100/40). 5 new tests cover append-preserve, corrupt-file
safety, row conversion, and an end-to-end 1-game bench.
First-time contributor

@Winnie can you show me an example of the output of this?

@Winnie can you show me an example of the output of this?
Author
Owner

Here is a real record, produced by running the actual binary on the branch (2 games per preset, 1 gauntlet game per specialist, hypothesis passed as --bench "example run for Robert: schema demo"):

{
"hypothesis": "example run for Robert: schema demo",
"git_sha": "4bf460e",
"timestamp": "2026-09-29T18:35:13Z",
"presets": {
"base": {
"wins": {"mill": 2, "adapt": 0, "empire": 0, "vault": 0},
"plays": {"mill": 2, "adapt": 2, "empire": 2, "vault": 2},
"avg_eq": {"mill": 29677.9, "vault": 4674.7, "adapt": 3186.7, "empire": 496.8},
"max_abs": {"mill": 57740.8, "vault": 8800.0, "adapt": 6124.9, "empire": 983.9}
},
"bond-economy": { ... wins: vault 2 ... },
... (all 13 presets)
},
"gauntlet": {
"loan-bond-spec": {"wins": 6, "plays": 26, "presets_won": 6},
"loan-spec": {"wins": 3, "plays": 26, "presets_won": 3},
"auction-spec": {"wins": 1, "plays": 26, "presets_won": 1},
"deposit-auction-spec": {"wins": 1, "plays": 26, "presets_won": 1},
"deposit-loan-spec": {"wins": 1, "plays": 26, "presets_won": 1},
"loan-auction-spec": {"wins": 1, "plays": 26, "presets_won": 1},
"bond-auction-spec": {"wins": 0, ...}, "bond-spec": {"wins": 0, ...},
"deposit-bond-spec": {"wins": 0, ...}, "deposit-spec": {"wins": 0, ...}
},
"bench_vs": {}
}

Every future --bench or --bench-vs run appends one record like this to iterations.json in the repo (old records are loaded and preserved; a corrupt file errors instead of clobbering). The #47 PDF pipeline reads exactly this to build the report tables, so nothing in the report is hand-typed. Full production runs use 100 bench games / 40 gauntlet games per preset.

Here is a real record, produced by running the actual binary on the branch (2 games per preset, 1 gauntlet game per specialist, hypothesis passed as --bench "example run for Robert: schema demo"): { "hypothesis": "example run for Robert: schema demo", "git_sha": "4bf460e", "timestamp": "2026-09-29T18:35:13Z", "presets": { "base": { "wins": {"mill": 2, "adapt": 0, "empire": 0, "vault": 0}, "plays": {"mill": 2, "adapt": 2, "empire": 2, "vault": 2}, "avg_eq": {"mill": 29677.9, "vault": 4674.7, "adapt": 3186.7, "empire": 496.8}, "max_abs": {"mill": 57740.8, "vault": 8800.0, "adapt": 6124.9, "empire": 983.9} }, "bond-economy": { ... wins: vault 2 ... }, ... (all 13 presets) }, "gauntlet": { "loan-bond-spec": {"wins": 6, "plays": 26, "presets_won": 6}, "loan-spec": {"wins": 3, "plays": 26, "presets_won": 3}, "auction-spec": {"wins": 1, "plays": 26, "presets_won": 1}, "deposit-auction-spec": {"wins": 1, "plays": 26, "presets_won": 1}, "deposit-loan-spec": {"wins": 1, "plays": 26, "presets_won": 1}, "loan-auction-spec": {"wins": 1, "plays": 26, "presets_won": 1}, "bond-auction-spec": {"wins": 0, ...}, "bond-spec": {"wins": 0, ...}, "deposit-bond-spec": {"wins": 0, ...}, "deposit-spec": {"wins": 0, ...} }, "bench_vs": {} } Every future --bench or --bench-vs run appends one record like this to iterations.json in the repo (old records are loaded and preserved; a corrupt file errors instead of clobbering). The #47 PDF pipeline reads exactly this to build the report tables, so nothing in the report is hand-typed. Full production runs use 100 bench games / 40 gauntlet games per preset.
First-time contributor

@Winnie why did you not give me a raw output, I want to literally see it, paste it directly in a json block.

@Winnie why did you not give me a raw output, I want to literally see it, paste it directly in a json block.
Author
Owner

Here is the raw record, verbatim from the binary on the branch (2 bench games / 1 gauntlet game per preset):

{
  "hypothesis": "example run for Robert: schema demo",
  "git_sha": "4bf460e6543b32cfdcf4b9cfa6dbee7b649baf9d",
  "timestamp": "2026-09-29T18:35:13Z",
  "presets": {
    "base": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 2,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 3186.695235722036,
        "empire": 496.8101776243129,
        "mill": 29677.94708620978,
        "vault": 4674.691312878116
      },
      "max_abs": {
        "adapt": 6124.943123035191,
        "empire": 983.9174524129485,
        "mill": 57740.76313342119,
        "vault": 8800
      }
    },
    "bond-economy": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 0,
        "vault": 2
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 978.5355552497349,
        "empire": 26732.496134432942,
        "mill": 10111.114580845751,
        "vault": 17953.1832375277
      },
      "max_abs": {
        "adapt": 978.5355552497349,
        "empire": 26732.496134432942,
        "mill": 15346.011229967466,
        "vault": 17953.1832375277
      }
    },
    "cash-glut": {
      "wins": {
        "adapt": 2,
        "empire": 0,
        "mill": 0,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 264121.0505075909,
        "empire": 105793.65013382502,
        "mill": 253295.65611942287,
        "vault": 134639.1752577319
      },
      "max_abs": {
        "adapt": 273269.5363377051,
        "empire": 105793.65013382502,
        "mill": 465327.70753061376,
        "vault": 135999.99999999994
      }
    },
    "default-storm": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 2,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 988.830662332537,
        "empire": 1157.4518505536835,
        "mill": 183167.5243636955,
        "vault": 8177.787101654161
      },
      "max_abs": {
        "adapt": 2912.5048018417438,
        "empire": 1588.7105436829443,
        "mill": 372918.7165372663,
        "vault": 16133.333333333343
      }
    },
    "deposit-drought": {
      "wins": {
        "adapt": 2,
        "empire": 0,
        "mill": 0,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 25680.894215073335,
        "empire": 11387.749827004325,
        "mill": 22611.047997500893,
        "vault": 13200.000000000004
      },
      "max_abs": {
        "adapt": 26116.394869736876,
        "empire": 11387.749827004325,
        "mill": 34921.961217724966,
        "vault": 13200.000000000004
      }
    },
    "duel": {
      "wins": {
        "adapt": 0,
        "mill": 1,
        "vault": 1
      },
      "plays": {
        "adapt": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 861.8581523810717,
        "mill": 51939.349299814305,
        "vault": 35351.19639637016
      },
      "max_abs": {
        "adapt": 979.4667007577373,
        "mill": 88468.15964139818,
        "vault": 70677.90299682203
      }
    },
    "hot-caps": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 2,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 971.799398534029,
        "empire": 1072.886017359735,
        "mill": 167797.09388991096,
        "vault": 3012.2448979591572
      },
      "max_abs": {
        "adapt": 971.799398534029,
        "empire": 1372.886017359735,
        "mill": 391765.17097935255,
        "vault": 3999.999999999971
      }
    },
    "mega-loans": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 1,
        "vault": 1
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 6168.037952189901,
        "empire": 8807.375393249502,
        "mill": 23578.838270027714,
        "vault": 39247.252436237206
      },
      "max_abs": {
        "adapt": 12418.396937712794,
        "empire": 8807.375393249502,
        "mill": 56284.82945577672,
        "vault": 74058.47877424123
      }
    },
    "micro-economy": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 2,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 74.04269826435666,
        "empire": 20.248114876208092,
        "mill": 1370.687709427004,
        "vault": 71.69109375119388
      },
      "max_abs": {
        "adapt": 74.04269826435666,
        "empire": 22.75326951538409,
        "mill": 2807.657415289046,
        "vault": 134.8622448979586
      }
    },
    "patient-market": {
      "wins": {
        "adapt": 1,
        "empire": 0,
        "mill": 1,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 32013.573853619455,
        "empire": 2883.5421039174107,
        "mill": 20521.545076701474,
        "vault": 14120.818009325416
      },
      "max_abs": {
        "adapt": 43311.32465928735,
        "empire": 7225.610026852868,
        "mill": 33244.79713046749,
        "vault": 15342.495025473814
      }
    },
    "rate-war": {
      "wins": {
        "adapt": 2,
        "empire": 0,
        "mill": 0,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 6209.207859367816,
        "empire": 6428.8854366954765,
        "mill": 14732.145864878275,
        "vault": 12366.598008698766
      },
      "max_abs": {
        "adapt": 14284.414268452092,
        "empire": 6428.8854366954765,
        "mill": 31467.678296646103,
        "vault": 12366.598008698766
      }
    },
    "thin-margins": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 1,
        "vault": 1
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 114.32896141766105,
        "empire": 440.20618556700356,
        "mill": 22397.213509506968,
        "vault": 4505.976165165528
      },
      "max_abs": {
        "adapt": 114.32896141766105,
        "empire": 800,
        "mill": 25359.48845187726,
        "vault": 15235.293227205577
      }
    },
    "tight-cash": {
      "wins": {
        "adapt": 0,
        "empire": 0,
        "mill": 2,
        "vault": 0
      },
      "plays": {
        "adapt": 2,
        "empire": 2,
        "mill": 2,
        "vault": 2
      },
      "avg_eq": {
        "adapt": 936.1496893108888,
        "empire": 819.6930806257296,
        "mill": 1883.2645318822879,
        "vault": 895.7796412899511
      },
      "max_abs": {
        "adapt": 936.1496893108888,
        "empire": 819.6930806257296,
        "mill": 2203.2699199232447,
        "vault": 999.9999999999964
      }
    }
  },
  "gauntlet": {
    "auction-spec": {
      "wins": 1,
      "plays": 26,
      "presets_won": 1
    },
    "bond-auction-spec": {
      "wins": 0,
      "plays": 26,
      "presets_won": 0
    },
    "bond-spec": {
      "wins": 0,
      "plays": 26,
      "presets_won": 0
    },
    "deposit-auction-spec": {
      "wins": 1,
      "plays": 26,
      "presets_won": 1
    },
    "deposit-bond-spec": {
      "wins": 0,
      "plays": 26,
      "presets_won": 0
    },
    "deposit-loan-spec": {
      "wins": 1,
      "plays": 26,
      "presets_won": 1
    },
    "deposit-spec": {
      "wins": 0,
      "plays": 26,
      "presets_won": 0
    },
    "loan-auction-spec": {
      "wins": 1,
      "plays": 26,
      "presets_won": 1
    },
    "loan-bond-spec": {
      "wins": 6,
      "plays": 26,
      "presets_won": 6
    },
    "loan-spec": {
      "wins": 3,
      "plays": 26,
      "presets_won": 3
    }
  },
  "bench_vs": {}
}
Here is the raw record, verbatim from the binary on the branch (2 bench games / 1 gauntlet game per preset): ```json { "hypothesis": "example run for Robert: schema demo", "git_sha": "4bf460e6543b32cfdcf4b9cfa6dbee7b649baf9d", "timestamp": "2026-09-29T18:35:13Z", "presets": { "base": { "wins": { "adapt": 0, "empire": 0, "mill": 2, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 3186.695235722036, "empire": 496.8101776243129, "mill": 29677.94708620978, "vault": 4674.691312878116 }, "max_abs": { "adapt": 6124.943123035191, "empire": 983.9174524129485, "mill": 57740.76313342119, "vault": 8800 } }, "bond-economy": { "wins": { "adapt": 0, "empire": 0, "mill": 0, "vault": 2 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 978.5355552497349, "empire": 26732.496134432942, "mill": 10111.114580845751, "vault": 17953.1832375277 }, "max_abs": { "adapt": 978.5355552497349, "empire": 26732.496134432942, "mill": 15346.011229967466, "vault": 17953.1832375277 } }, "cash-glut": { "wins": { "adapt": 2, "empire": 0, "mill": 0, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 264121.0505075909, "empire": 105793.65013382502, "mill": 253295.65611942287, "vault": 134639.1752577319 }, "max_abs": { "adapt": 273269.5363377051, "empire": 105793.65013382502, "mill": 465327.70753061376, "vault": 135999.99999999994 } }, "default-storm": { "wins": { "adapt": 0, "empire": 0, "mill": 2, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 988.830662332537, "empire": 1157.4518505536835, "mill": 183167.5243636955, "vault": 8177.787101654161 }, "max_abs": { "adapt": 2912.5048018417438, "empire": 1588.7105436829443, "mill": 372918.7165372663, "vault": 16133.333333333343 } }, "deposit-drought": { "wins": { "adapt": 2, "empire": 0, "mill": 0, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 25680.894215073335, "empire": 11387.749827004325, "mill": 22611.047997500893, "vault": 13200.000000000004 }, "max_abs": { "adapt": 26116.394869736876, "empire": 11387.749827004325, "mill": 34921.961217724966, "vault": 13200.000000000004 } }, "duel": { "wins": { "adapt": 0, "mill": 1, "vault": 1 }, "plays": { "adapt": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 861.8581523810717, "mill": 51939.349299814305, "vault": 35351.19639637016 }, "max_abs": { "adapt": 979.4667007577373, "mill": 88468.15964139818, "vault": 70677.90299682203 } }, "hot-caps": { "wins": { "adapt": 0, "empire": 0, "mill": 2, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 971.799398534029, "empire": 1072.886017359735, "mill": 167797.09388991096, "vault": 3012.2448979591572 }, "max_abs": { "adapt": 971.799398534029, "empire": 1372.886017359735, "mill": 391765.17097935255, "vault": 3999.999999999971 } }, "mega-loans": { "wins": { "adapt": 0, "empire": 0, "mill": 1, "vault": 1 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 6168.037952189901, "empire": 8807.375393249502, "mill": 23578.838270027714, "vault": 39247.252436237206 }, "max_abs": { "adapt": 12418.396937712794, "empire": 8807.375393249502, "mill": 56284.82945577672, "vault": 74058.47877424123 } }, "micro-economy": { "wins": { "adapt": 0, "empire": 0, "mill": 2, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 74.04269826435666, "empire": 20.248114876208092, "mill": 1370.687709427004, "vault": 71.69109375119388 }, "max_abs": { "adapt": 74.04269826435666, "empire": 22.75326951538409, "mill": 2807.657415289046, "vault": 134.8622448979586 } }, "patient-market": { "wins": { "adapt": 1, "empire": 0, "mill": 1, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 32013.573853619455, "empire": 2883.5421039174107, "mill": 20521.545076701474, "vault": 14120.818009325416 }, "max_abs": { "adapt": 43311.32465928735, "empire": 7225.610026852868, "mill": 33244.79713046749, "vault": 15342.495025473814 } }, "rate-war": { "wins": { "adapt": 2, "empire": 0, "mill": 0, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 6209.207859367816, "empire": 6428.8854366954765, "mill": 14732.145864878275, "vault": 12366.598008698766 }, "max_abs": { "adapt": 14284.414268452092, "empire": 6428.8854366954765, "mill": 31467.678296646103, "vault": 12366.598008698766 } }, "thin-margins": { "wins": { "adapt": 0, "empire": 0, "mill": 1, "vault": 1 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 114.32896141766105, "empire": 440.20618556700356, "mill": 22397.213509506968, "vault": 4505.976165165528 }, "max_abs": { "adapt": 114.32896141766105, "empire": 800, "mill": 25359.48845187726, "vault": 15235.293227205577 } }, "tight-cash": { "wins": { "adapt": 0, "empire": 0, "mill": 2, "vault": 0 }, "plays": { "adapt": 2, "empire": 2, "mill": 2, "vault": 2 }, "avg_eq": { "adapt": 936.1496893108888, "empire": 819.6930806257296, "mill": 1883.2645318822879, "vault": 895.7796412899511 }, "max_abs": { "adapt": 936.1496893108888, "empire": 819.6930806257296, "mill": 2203.2699199232447, "vault": 999.9999999999964 } } }, "gauntlet": { "auction-spec": { "wins": 1, "plays": 26, "presets_won": 1 }, "bond-auction-spec": { "wins": 0, "plays": 26, "presets_won": 0 }, "bond-spec": { "wins": 0, "plays": 26, "presets_won": 0 }, "deposit-auction-spec": { "wins": 1, "plays": 26, "presets_won": 1 }, "deposit-bond-spec": { "wins": 0, "plays": 26, "presets_won": 0 }, "deposit-loan-spec": { "wins": 1, "plays": 26, "presets_won": 1 }, "deposit-spec": { "wins": 0, "plays": 26, "presets_won": 0 }, "loan-auction-spec": { "wins": 1, "plays": 26, "presets_won": 1 }, "loan-bond-spec": { "wins": 6, "plays": 26, "presets_won": 6 }, "loan-spec": { "wins": 3, "plays": 26, "presets_won": 3 } }, "bench_vs": {} } ```
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Winnie/bankwars!48
No description provided.