InkkOops
Architecture
This page focuses on structure. It describes which components exist, which responsibilities they own, and how a request moves through the system from startup flag or CLI command to completed artifact bundle.
Top-level components
InkkOopsHostConfiguration: host-owned configuration root for catalogs, policies, and defaults.InkkOopsRuntimeService: coordinator for queued work, startup work, recording, and attach requests.InkkOopsGameHost: adapter between MonoGame host behavior and the automation runtime.IInkkOopsScriptCatalog: host-supplied lookup for named scripts.IInkkOopsArtifactNamingPolicy: host-supplied naming rules for run and recording bundles.IInkkOopsReplayPostamblePolicy: host-supplied replay tail behavior.CaptureTelemetryAsync: explicit runtime telemetry dump used for assertion-oriented diagnostics artifacts.
Request flow
- The app constructs the host configuration.
- The app starts
InkkOopsRuntimeServicewith runtime options plus the host configuration. - A request is created either from startup flags or from an attach-mode pipe request.
- The runtime resolves the script or recording replay.
- The runtime creates an artifact bundle using the naming policy.
- The runtime executes the script through
InkkOopsScriptRunnerandInkkOopsSession. - The host adapter performs the real resize, input, capture, and telemetry work.
- The runtime writes
result.json,commands.log, and any requested captures or telemetry artifacts.
Why the host configuration exists
The host configuration defines the policy boundary for the runtime. Pipe names, artifact roots, replay-tail behavior, diagnostics formatting, and script exposure come from the host profile rather than being embedded in command execution code. That keeps the runtime reusable while still allowing each host app to preserve its own defaults.
Catalog and script registration
The runtime only depends on IInkkOopsScriptCatalog. In this repository, the default host profile uses a reflection-backed catalog that discovers built-in script classes from the app assembly. That reflection step is an adapter, not a core runtime requirement.
Policy surfaces
- Naming policy: controls run directory names, recording directory names, result file names, command diagnostics file names, frame capture file names, and telemetry file names.
- Replay postamble policy: controls what extra commands are appended after a replay is generated from a recording.
- Diagnostics contributors: control which per-element facts are collected during telemetry generation.
Diagnostics pipeline
The telemetry system is built from diagnostics contributors. A generic tree walker captures the visual tree, contributors add per-element facts, and the serializer formats the result into the telemetry output file. This keeps diagnostics extensible while allowing framework-specific contributors to describe individual control types in more detail.