tools(render): self-gate kit - session config, teleport route, runner
Lead-run visual gate: direct character login through a session config, the owner-supplied /teleloc poses (cathedral floating stairs, Facility Hub stairs, Holtburg house), one screenshot per pose into the automation artifact directory, graceful close-client. The runner refuses to start while any AcDream.App process exists and never hard-kills a client. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
7adbffcb6a
commit
2b40c0bb38
3 changed files with 121 additions and 0 deletions
32
tools/overhaul-selfgate/route.txt
Normal file
32
tools/overhaul-selfgate/route.txt
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Campaign OVERHAUL self-gate route (lead-run visual gate; owner double-checks).
|
||||||
|
# Verbs: RetailUiAutomationScriptRunner. Screenshots land in
|
||||||
|
# ACDREAM_AUTOMATION_ARTIFACT_DIR as <name>.png (+ .metadata.json).
|
||||||
|
# Each teleport goes through the retail portal-space reveal, so give the
|
||||||
|
# world time to re-materialize before shooting.
|
||||||
|
|
||||||
|
wait world-visible 180000
|
||||||
|
sleep 4000
|
||||||
|
screenshot 00-login 15000
|
||||||
|
|
||||||
|
# Cathedral floating stairs (owner-supplied pose, 2026-09-02)
|
||||||
|
command /teleloc F4180112 38.999477 23.470444 178.053741 -0.980785 0.000000 0.000000 -0.195090
|
||||||
|
sleep 2000
|
||||||
|
wait world-visible 90000
|
||||||
|
sleep 6000
|
||||||
|
screenshot 01-cathedral-stairs 15000
|
||||||
|
|
||||||
|
# Facility Hub stairs (owner-supplied pose)
|
||||||
|
command /teleloc 8A02015E 60.251431 -38.848198 -5.995000 0.995004 0.000000 0.000000 -0.099833
|
||||||
|
sleep 2000
|
||||||
|
wait world-visible 90000
|
||||||
|
sleep 6000
|
||||||
|
screenshot 02-facility-stairs 15000
|
||||||
|
|
||||||
|
# Holtburg house interior (owner-supplied pose)
|
||||||
|
command /teleloc A9B4013F 134.555893 11.423566 94.005005 0.996917 0.000000 0.000000 -0.078459
|
||||||
|
sleep 2000
|
||||||
|
wait world-visible 90000
|
||||||
|
sleep 6000
|
||||||
|
screenshot 03-holtburg-house 15000
|
||||||
|
|
||||||
|
close-client
|
||||||
71
tools/overhaul-selfgate/run-selfgate.ps1
Normal file
71
tools/overhaul-selfgate/run-selfgate.ps1
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
# Campaign OVERHAUL self-gate runner (2026-09-02).
|
||||||
|
#
|
||||||
|
# Launches the Release client through a session config (direct character
|
||||||
|
# login), plays tools/overhaul-selfgate/route.txt (teleports + screenshots),
|
||||||
|
# and waits for the route's own close-client. Output: one directory per run
|
||||||
|
# under logs/selfgate-<stamp>-<label>/ with the PNGs, the client log, and a
|
||||||
|
# run.json naming the exact commit.
|
||||||
|
#
|
||||||
|
# Rules: refuses to run while any AcDream.App process exists (never touch an
|
||||||
|
# owner-started client); closes only the client it started, gracefully.
|
||||||
|
#
|
||||||
|
# Usage (from the worktree root):
|
||||||
|
# .\tools\overhaul-selfgate\run-selfgate.ps1 -Label g2-candidate
|
||||||
|
# .\tools\overhaul-selfgate\run-selfgate.ps1 -Label baseline -Route .\tools\overhaul-selfgate\route.txt
|
||||||
|
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory = $true)] [string]$Label,
|
||||||
|
[string]$Route = (Join-Path $PSScriptRoot 'route.txt'),
|
||||||
|
[string]$Session = (Join-Path $PSScriptRoot 'session.json'),
|
||||||
|
[string]$Password = 'testpassword',
|
||||||
|
[int]$TimeoutSeconds = 300
|
||||||
|
)
|
||||||
|
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
$repo = (Resolve-Path (Join-Path $PSScriptRoot '..\..')).Path
|
||||||
|
$exe = Join-Path $repo 'src\AcDream.App\bin\Release\net10.0\AcDream.App.exe'
|
||||||
|
if (-not (Test-Path -LiteralPath $exe)) { throw "Release client not built: $exe" }
|
||||||
|
if (Get-Process -Name AcDream.App -ErrorAction SilentlyContinue) {
|
||||||
|
throw 'An AcDream.App process is already running (owner client?). Not launching.'
|
||||||
|
}
|
||||||
|
|
||||||
|
$stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
|
||||||
|
$safeLabel = ($Label -replace '[^A-Za-z0-9._-]', '-')
|
||||||
|
$out = Join-Path $repo "logs\selfgate-$stamp-$safeLabel"
|
||||||
|
$artifacts = Join-Path $out 'artifacts'
|
||||||
|
New-Item -ItemType Directory -Force -Path $artifacts | Out-Null
|
||||||
|
|
||||||
|
Push-Location $repo
|
||||||
|
try {
|
||||||
|
$commit = (git rev-parse --short HEAD).Trim()
|
||||||
|
$dirty = (git status --porcelain).Length -gt 0
|
||||||
|
} finally { Pop-Location }
|
||||||
|
|
||||||
|
$env:ACDREAM_SELFGATE_PASS = $Password
|
||||||
|
$env:ACDREAM_UI_PROBE_SCRIPT = (Resolve-Path $Route).Path
|
||||||
|
$env:ACDREAM_AUTOMATION_ARTIFACT_DIR = $artifacts
|
||||||
|
$env:ACDREAM_AUTOMATION_EXACT_FRAMEBUFFER = '1'
|
||||||
|
$clientLog = Join-Path $out 'client.log'
|
||||||
|
|
||||||
|
[ordered]@{
|
||||||
|
label = $Label; commit = $commit; dirtyTree = $dirty
|
||||||
|
startedUtc = [DateTime]::UtcNow.ToString('o')
|
||||||
|
route = $env:ACDREAM_UI_PROBE_SCRIPT; session = (Resolve-Path $Session).Path
|
||||||
|
} | ConvertTo-Json | Set-Content -LiteralPath (Join-Path $out 'run.json') -Encoding utf8
|
||||||
|
|
||||||
|
Write-Host "self-gate '$Label' at $commit (dirty=$dirty) -> $out"
|
||||||
|
$proc = Start-Process -FilePath $exe -ArgumentList @('--session-config', (Resolve-Path $Session).Path) `
|
||||||
|
-RedirectStandardOutput $clientLog -RedirectStandardError (Join-Path $out 'client.err.log') `
|
||||||
|
-PassThru -WindowStyle Normal
|
||||||
|
|
||||||
|
if (-not $proc.WaitForExit($TimeoutSeconds * 1000)) {
|
||||||
|
Write-Warning "client still running after $TimeoutSeconds s; requesting graceful close"
|
||||||
|
$null = $proc.CloseMainWindow()
|
||||||
|
if (-not $proc.WaitForExit(20000)) {
|
||||||
|
Write-Warning 'client did not close gracefully; leaving it (owner rule: never hard-kill)'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Write-Host "client exit code: $($proc.ExitCode)"
|
||||||
|
Get-ChildItem -LiteralPath $artifacts -Filter '*.png' | ForEach-Object { Write-Host (" {0} {1:N0} bytes" -f $_.Name, $_.Length) }
|
||||||
|
Write-Host "log: $clientLog"
|
||||||
18
tools/overhaul-selfgate/session.json
Normal file
18
tools/overhaul-selfgate/session.json
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"process": {
|
||||||
|
"content": {
|
||||||
|
"datDirectory": "C:\\Users\\erikn\\Documents\\Asheron's Call",
|
||||||
|
"preparedAssetPath": "C:\\Users\\erikn\\Documents\\Asheron's Call\\acdream.pak"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sessions": [
|
||||||
|
{
|
||||||
|
"id": "overhaul-selfgate",
|
||||||
|
"endpoint": { "host": "127.0.0.1", "port": 9000 },
|
||||||
|
"account": "testaccount",
|
||||||
|
"character": { "name": "+Acdream" },
|
||||||
|
"credential": { "provider": "environment", "reference": "ACDREAM_SELFGATE_PASS" }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue