From 1d95a800fdbf10ec4b48e69685a593a207ffe176 Mon Sep 17 00:00:00 2001 From: Cyd Date: Fri, 10 Jul 2026 16:30:28 -0500 Subject: [PATCH] Add verify skill: drive the console against vPOD A project verify skill (.claude/skills/verify) capturing the recipe used this session: build the console + vPOD, launch both, drive the console's WinForms UI via UI Automation, and observe real behavior -- pod connection endpoint via netstat, egg contents in vPOD, the full Load/Run/Stop mission lifecycle -- rather than relying on tests alone. Co-Authored-By: Claude Fable 5 --- .claude/skills/verify/SKILL.md | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .claude/skills/verify/SKILL.md diff --git a/.claude/skills/verify/SKILL.md b/.claude/skills/verify/SKILL.md new file mode 100644 index 0000000..4bcb506 --- /dev/null +++ b/.claude/skills/verify/SKILL.md @@ -0,0 +1,56 @@ +--- +name: verify +description: Drive the TeslaConsole WinForms app against vPOD to verify console changes end-to-end on this machine. +--- + +# Verifying console changes against vPOD + +Build (Debug is what the exes below point at): + +``` +dotnet build Console/TeslaConsole.csproj +dotnet build vPOD/vPOD.csproj +``` + +Launch both (the machine's `C:\ProgramData\Tesla Console\local.siteconfig` +already has squad `bay1` with a provisioned `vPOD` pod at 127.0.0.1; vPOD's +session key persists in `%LocalAppData%\vPOD\TeslaKeyStore.key`): + +``` +Start-Process vPOD\bin\Debug\net48\vPOD.exe -ArgumentList "-app","bt" # or rp +Start-Process Console\bin\Debug\net48\TeslaConsole.exe +``` + +Drive the UI with System.Windows.Automation (UIA) — WinForms on net48 exposes +menus, buttons, checkboxes, and DataGridView rows/cells as real UIA elements: + +- Menus: ExpandCollapsePattern on "Games", InvokePattern on the item. +- Pilots grid cells are named like `Enabled Row 1`, `Pilot Row 1`; real mouse + clicks at the cell's BoundingRectangle center behave exactly like a user + (needed for CellEndEdit paths — programmatic value sets bypass them). + Click another cell afterwards to commit a checkbox cell edit. +- Type into a grid cell: click it, then `[System.Windows.Forms.SendKeys]::SendWait()`. +- The WeifenLuo dock tabs are NOT UIA TabItems; switch documents with + Ctrl+Tab sent to the focused window. +- Screenshots: Graphics.CopyFromScreen of the element's BoundingRectangle + (coordinates are physical pixels; fine to pass straight to SetCursorPos). + +Observe behavior: + +- Game connection endpoint: `Get-NetTCPConnection -OwningProcess + -RemotePort 1501`. vPOD binds 0.0.0.0:1501, so any 127.x.x.x target lands on + it — distinguish targets by the netstat RemoteAddress, not by whether vPOD + answered. +- Mission content: vPOD's Current Egg pane shows the decoded egg (player IPs, + pilots, map) after clicking Load; its protocol log timestamps connects, + disconnects, and state transitions. +- Full lifecycle: enable a pod row + pilot name → Load → Run Mission → Stop + Mission. With the watchdog checkbox on, vPOD drops the connection after a + mission ends and comes back in WaitingForEgg — an observed reconnect there + is normal. + +Gotchas: enabling a pod row only requests the connection once the cell edit +commits. A helper script with these UIA primitives from a previous session: +scratchpad `uia.ps1` (Get-Window / Find-ByName / Click-Elem / Screenshot) — +recreate from this recipe if gone. Close both apps when done +(`CloseMainWindow`, then Stop-Process stragglers).