For investigating a UI/layout bug that a unit test can't pin alone (timing, first-launch state, window
rendering) — driving the real GlueFormsCore.exe yourself is fine; the process doc's "don't drive the
tool yourself" rule is about the final user-facing manual-test step, not internal repro.
Landmines
- Build
Glue with All.sln, notGlue.csprojalone. AGlue.csproj-only build boots with no plugins loaded (Explorer tree, property grid, etc. all silently missing) — the window looks badly broken in a way that has nothing to do with the bug you're chasing. Costs a full rebuild cycle to notice. settings.xml'sLastProjectFilemust be the.csproj, not the.gluj. Glue opens it viaMicrosoft.Build.Evaluation.Project; a.glujpath throws a real "Could not load the project" popup.- User profile lives at
%AppData%\GlueFormsCore\settings.xmlandGlueLayoutSettings.xml. Back both up before simulating a fresh/first-launch profile (delete or rewrite them), restore after — these are the developer's real Glue preferences, not scratch files. - A backgrounded/unfocused window doesn't repaint.
Program.csforcesRenderOptions.ProcessRenderMode = SoftwareOnly; a screenshot of an occluded or non-foreground window shows stale/blank content. Bring it to the foreground and maximize (ShowWindow/SetForegroundWindowvia P/Invoke in PowerShell) immediately before capturing. - A project auto-load on startup can take minutes, not seconds (MSBuild restore, codegen) — a window
title still reading generic "FlatRedBall Editor" (no project path) means it hasn't finished; don't
read the UI state as final until the title shows the loaded
.csprojpath. exitwhenquietmay never fire. The automation hook (MainGlueWindow.StartExitWhenQuietWatcherIfRequested) exits only onceTaskManager.Self.AreAllAsyncTasksDonehas held for N seconds, and on some projects that never happens — Glue loads fine and then just stays open (issue #2053). Don't build a headless verify loop on a clean exit; launch, wait for the title to show the.csproj, kill, and assert on files written.
Reusable pattern
Self-serve-log via a temporary File.AppendAllText probe in the suspect code path (see the
self-serve-logging skill), launch the exe from Bash/PowerShell, drive it headlessly where possible
(writing settings.xml directly beats simulating clicks), then read the log — don't ask the user to
transcribe anything.