wip: Campaign LA LA2 probe mode + idle policy — INCOMPLETE, stopped mid-task

Agent was stopped for token budget. Landed here: probe flag through
LiveSessionConnectOptions + the StartCore short-circuit, the mode field
with JsonRequired-to-semantic-validation move, host exit-code mapping,
and 34 passing tests including 3 new probe tests (agent last reported
green before the stop). NOT DONE: the idle-policy unit tests (next
step), full-suite verification, and the WSL run.

Build/test state UNVERIFIED at this commit. Next session: finish idle
policy tests, run Runtime+Headless Release suites Windows and WSL, then
dispatch the Opus dual-lens review.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-14 16:33:00 +02:00
parent 498f1c1182
commit c601942467
14 changed files with 830 additions and 35 deletions

View file

@ -200,6 +200,22 @@ internal sealed class HeadlessProcessHost : IDisposable
foreach (HeadlessSessionHost session in _sessions)
{
RuntimeSessionStartResult started = session.Start();
// Campaign LA slice LA2: ProbeComplete is a SUCCESS variant, not
// a connection failure — the session already connected, reported
// its roster, and gracefully disconnected before EnterWorld (see
// LiveSessionController's probe short-circuit). Continue to the
// next configured session instead of returning ConnectionError,
// so a probe session sharing a process with play sessions never
// tears the others down. ProbeHeadlessBotPolicy already reports
// IsComplete, so the scheduler below skips this session entirely.
if (started.Status == RuntimeSessionStartStatus.ProbeComplete)
{
_diagnostics.Lifecycle(
session.SessionId,
"probed",
session.Runtime);
continue;
}
if (started.Status != RuntimeSessionStartStatus.Connected)
{
if (started.Error is { } error)