XTester 0.0.68: long-session stability and more reliable debugging

Most of the work in version 0.0.68 focuses on long-session stability, strategy debugging, and interface behavior in situations that could previously waste time or stop an active process without a clear warning.
Stability during long sessions
One investigated failure terminated XTester with exit code 0xffffffff while AI Copilot and the strategy editor were in active use. This was not a regular .NET exception. The process was exhausting its GDI/USER resource allowance.
The underlying issue was an accumulation of interface objects: tooltips, fonts, and other graphics resources were repeatedly created when the Copilot panel was rebuilt, editor tabs were changed, or frequently drawn controls were refreshed. During a long session, the process could eventually approach the Windows resource limit.
Version 0.0.68 changes how these resources are managed:
- reusable tooltips and fonts are no longer recreated on every refresh;
- charts, source-control views, and other frequently drawn controls use cached resources;
- old child controls are explicitly disposed before an interface section is rebuilt;
- GDI/USER counters and a periodic resource heartbeat are now included in diagnostics.
The last change is useful beyond this particular fix. If a similar leak appears later, its growth can be seen in the diagnostic log before the process reaches the system limit.
Debugging without a false CS0269 error
Debug mode instruments strategy code with probes that expose method parameters, local variables, and fields. Previously, the instrumentor could try to capture an out parameter before its first assignment. The original strategy was valid, but the instrumented version could fail to compile with CS0269.
In 0.0.68, out parameters are excluded from early capture. The fallback path has also been changed:
- if the instrumented version fails to compile, XTester compiles the clean source separately;
- if the clean source also fails, the user receives the real error locations from the original files;
- if the clean source succeeds, the strategy can run without debug probes while the instrumentor failure is logged separately.
Double-clicking a textual compiler error now opens the corresponding file and line even when the log entry did not originally include a structured navigation link.
First OnBar call and loop protection
Some strategies perform one-time indicator bootstrapping during the first OnBar() call. That work can be substantially heavier than later bars and could previously be mistaken for an execution timeout.
The first OnBar() call now receives a separate warm-up budget of up to 15 seconds. When a debugger is attached, the wall-clock limit is disabled so debugger pauses are not mistaken for a hang. Checkpoint-based loop protection remains active and continues to stop genuine runaway execution.
Protecting an active AI Research Lab session
Closing the main window or the AI Research Lab window during an experiment could previously stop active work after an overly generic exit confirmation.
XTester now states explicitly that the lab is running and offers two clear choices: stop the experiment and exit, or continue working. The same protection is applied when the lab window is closed programmatically.
Interface changes
The release also includes several smaller interface fixes:
- the project tree follows the active editor tab instead of restoring a stale selection;
- the update dialog now defaults to 720×640, remembers its size, and opens centered over the main window;
- the changelog text is no longer fully selected when the update dialog opens;
- long labels in simulation auto-pause settings no longer overlap the neighboring column.
Updated landing page
The xtester.pw landing page has also been updated. It now presents the current XTester scope in one place: data from 14 CEX and 3 DEX, spot and futures, linear and inverse contracts, out-of-sample validation, 163 MCP tools, and Live Launcher.
Version 0.0.68 does not change the core project workflow. It resolves several issues that matter during daily use: long-running sessions, debugging complex strategies, navigating compiler errors, and safely ending an active research run.

