Repository navigation
Releases
OP2TestHarness 1.0.0
The first version as a repository of its own (op2-rs issue #34), shown to work for the three projects it measures for:
the original game, op2-rs and outpost2-port (see Verified). It was developed as 0.9.0, which was never released.
Contract: identical to op2-rs's harness/ at commit ab5f74dd (2026-11-09): the same OP2H_* variables, run.sh
options, script verbs, unit names, output fields and scenario format. src/harness.cpp behaves as op2-rs's; it differs
only in comments and in the command line written into a recording's header.
History: op2-rs's harness/ history, filtered with git filter-repo and without oracle/ (PROVENANCE.md).
Added
windows/: an MSVC build of every DLL a release ships, reproducible with/Brepro(build.bat,msvc_compat.h:
harness.dll,zScenario.dll,zHarnessEnd.dlland the seven bots); a native Windows launcher that plays scenarios
in a private copy of the game, without Wine, with an optional bot (run_win.py), and itsselftest, the Makefile's
make checkon Windows; the release zip withSHA256SUMS(package.py); the original vs op2-rs on one
scenario, with op2-sim's tick-by-tick compare and both pictures side by side (compare.py); the original vs
outpost2-port (run_port.py,trace_diff.py,compare_port.py).- CI (GitHub Actions): both toolchains build all ten DLLs on every push (
makewith MinGW on Ubuntu,build.batwith
MSVC on Windows), each build must be reproducible, and avX.Y.Ztag publishes a GitHub release with
OP2TestHarness-<VERSION>-mingw.zipand-msvc.zip, their.sha256and this changelog's section. ARCHITECTURE.md,PROVENANCE.md, this changelog,VERSION,.gitignore,.gitattributes.
Changed
- README.md describes a project of its own: Windows and Linux quick starts, requirements, where prefixes and the game
copy live, and "Comparing with op2-rs". op2-rs's scenarios stay in op2-rs (harness/oracle/), written$ORACLE. test/session_check.pyreads the canonical campaign scripts from$ORACLE(defaultoracle/in this folder, as
inside op2-rs).- The Makefile reads TethysAPI from
vendor/includein this folder first;run.pycompares the installed DLLs with this
folder'sbuild/. - The Windows scripts write their text files (
scenario.json,scenario_script.txt, summaries, reports) with LF, as
run.pydoes on Linux, so they hash the same as op2-rs's recordings.
Verified on Windows 10:
- The original game. All 456 of op2-rs's scenarios (its
harness/oracle/scenarios, at ab5f74dd) run to their tick
limit with no timeout, crash or dialog.run_win.py selftestpasses (the self-test mission ends MissionAccomplished,
alone and withsample_bot.dll). - Both toolchains. The MinGW DLLs (CI) and the MSVC DLLs give byte-identical
trace.jsonl,telemetry.jsonland
gamedata.jsonon line_fast, cmb_duel_laser and cmb_duel_rail_gun, and so does op2-rs's own harness source at
ab5f74dd built with MSVC. Each toolchain's build is reproducible (CI checks this on every push). - op2-rs. op2-sim matches line_fast, cmb_duel_laser and cmb_duel_rail_gun on every trace field of every tick.
Against the hashes of op2-rs's recorded runs (accuracy/manifest.json, hashed with itsaccuracy/runs.py), over the
456 scenarios:gamedata.jsonandscenario_script.txtmatch on every run,scenario.jsonon 452 (the other 4
scenario files were edited after their runs were recorded),audio.jsonlon all 8 that have one, and 30 runs match
in every file. The othertrace.jsonlandtelemetry.jsonlfiles differ from recordings made by earlier harness
versions, which wrote fewer fields: no scenario added before 2026-10-31 matches and most added since do, and the
differing telemetry is the economy runs' newer fields (hives, beacons). op2-rs's ownruns.py check --freshaccepts
such runs asfresh_newer_fields. - outpost2-port. Compared with
windows/compare_port.py: 8 of 9 scenarios match the original (outpost2-port
958323a). Its upstream, marcelomgoncalves/outpost2 (1ac3673), matches cmb_duel_laser and cmb_duel_rail_gun on every
compared field, and line_fast on every tick but its arrival (tick 731, x 16/65536 of a pixel short); op2-rs matches
all three.
Not verified here: the Linux harness under Wine (run.sh, make check) since the move (CI builds it but can't run the
game), and op2-rs's runs.py check --fresh / make accuracy against this version's DLLs, which needs op2-rs's stored
recordings.