Files
TeslaSuite/.claude/skills/verify/SKILL.md
T
CydandClaude Fable 5 1d95a800fd 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 <noreply@anthropic.com>
2026-07-10 16:30:28 -05:00

2.5 KiB

name, description
name description
verify 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 <consolePid> -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).