FS.GG.Game.Harness
0.16.0
Prefix Reserved
dotnet add package FS.GG.Game.Harness --version 0.16.0
NuGet\Install-Package FS.GG.Game.Harness -Version 0.16.0
<PackageReference Include="FS.GG.Game.Harness" Version="0.16.0" />
<PackageVersion Include="FS.GG.Game.Harness" Version="0.16.0" />
<PackageReference Include="FS.GG.Game.Harness" />
paket add FS.GG.Game.Harness --version 0.16.0
#r "nuget: FS.GG.Game.Harness, 0.16.0"
#:package FS.GG.Game.Harness@0.16.0
#addin nuget:?package=FS.GG.Game.Harness&version=0.16.0
#tool nuget:?package=FS.GG.Game.Harness&version=0.16.0
FS.GG.Game.Harness
Deterministic, headless gameplay test harness on FS.GG.Game.Core.
Drives a game's world through the standard Command input frontier, folds whole fixed steps, and
fingerprints the world trace as a value — so a replay is a comparison, not a tolerance check.
Depends on nothing but FS.GG.Game.Core and the BCL — no render/input stack, no keymap type, no I/O
(WI-6, Game#425). Everything below lives in the
FS.GG.Game.Harness namespace.
The vocabulary
Trace— the provenance-carrying comparison surface. ATrace<'f>is the world's evolution fingerprinted as a value, tagged with itsOrigin, so two runs are compared as data rather than re-simulated and eyeballed.Playable— the driven-game contract (Playable<'world,'key>) plusBot<'view>, the in-process policy that turns a view of the world into commands. This is what a game implements to be driven by the harness.Driver— the drivers that produce aRun<'f>: scripted raw-key → keymap →Commandinput folded over whole fixed steps, and an in-process bot policy driving the sameCommandfrontier.Journey— the stronger boot-to-outcome route. AProductionJourneystarts from a product's real boot function, drives timestamp-free host events through production mapping/update/tick/effect seams, and emits an opaque, boundedJourneyReceipt. ItsOrigin.ProductionJourneyprovenance is distinct fromPlayable's simulation/component evidence.fsgg-playtestobtains the receipt only by executing anIProductionJourneyProofand never accepts a caller-authored receipt file.emit-evidenceserializes the validated receipt as a versionedjourneyReceiptmap and generates a JUnit report from that same in-memory execution. The shared execution id and receipt-binding digest mean a caller-supplied stale or fabricated TRX cannot stand in for the journey run.Workload— named expected-workload scripts and a product cost adapter. It keeps Release-only timing and bounded work observations separate from the deterministicTrace, and renders the generated scaffold's performance-evidence shape.Matrix— the multi-seed, bot-vs-bot match matrix.Seat,MatchSetup<'world,'view>andMatch<'view>set up a seeded field of matches so a policy is exercised across many seeds, not one.Synthetic— the typed synthetic-state escape hatch: a labeled fallback that keeps its own evidence self-identifying, so a synthetic trace can never be mistaken for a real driven one.ContinuousArena— a neutral movement/obstacle/collectible/hazard product that composes the kinematic world throughPlayable, making score, health, win, loss and restart outcomes available to the same command-driven trace authority as adopter games.
Guarantees
Headlessly testable — zero Skia and zero Scene. It drives only through Game.Core's device-free
Command vocabulary and whole fixed steps, so identical input replays byte-identically. The optional
Workload.run clock feeds only WorkloadObservation; it never contaminates trace frames.
House style: .fsi is the sole public surface; net10.0; -preview channel.
See FS-GG/FS.GG.Game and ADR-0022.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FS.GG.Game.Core (>= 0.16.0)
- FSharp.Core (>= 10.1.302)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.16.0 | 88 | 9/14/2026 |
| 0.15.0 | 93 | 9/13/2026 |
| 0.14.0 | 113 | 8/25/2026 |
| 0.13.0 | 3,837 | 7/28/2026 |
| 0.12.0 | 1,301 | 7/26/2026 |
| 0.11.0 | 116 | 7/26/2026 |
| 0.10.1 | 120 | 7/26/2026 |
| 0.10.0 | 112 | 7/25/2026 |
| 0.9.1 | 117 | 7/25/2026 |
| 0.9.0 | 114 | 7/22/2026 |
| 0.8.0 | 118 | 7/21/2026 |
| 0.7.1 | 114 | 7/19/2026 |
| 0.7.0 | 113 | 7/19/2026 |
| 0.6.0 | 112 | 7/19/2026 |