Summary
Define the architecture contract that makes dist/WorldOS.app observable and driveable by agents without replacing the real release gate.
This is the parent issue for the app-testability lane. It complements the UX-first sprint in #467 and the blind playtester architecture in #324 .
Required architecture decisions
viewer/server.py exposes a stable, read-only app-status contract for the live OpenWorlds surface.
A deterministic scripted DM/smoke provider proves the app wiring quickly without Claude/Codex/OpenClaw latency.
Stable accessibility labels and data-worldos-testid hooks make the browser UI driveable without pixel guessing.
A single evidence bundle captures screenshots, app-status snapshots, session surface, chat, moves, provider trace, console/network logs, build SHA, art status, and failure bucket.
Release gates remain split: fast deterministic built-app smoke, short real-provider playtest, and full non-partial five-persona RRI.
Invariants
Engine remains the sole writer of campaign state.
GUI/native app remains a thin reader plus /move intent submitter.
Private art is never committed.
No proxy preview or harness-created backend can count as release evidence.
Issues close only after next-build evidence proves non-reproduction.
Acceptance criteria
A tracked architecture doc defines the app-status v1 schema, deterministic smoke provider, stable UI hooks, evidence bundle, gate split, non-goals, and engine-sole-writer invariant.
The doc links [playtest][ARCHITECTURE] AI playtester harness — blind UI/UX test with 5 personas (Playwright + claude-p), structured bug reports, scoring rubric #324 , release: rerun clean non-partial 5-persona RRI after gate hardening #466 , sprint: UX-first release readiness after takeover stabilization #467 , Codex DM should avoid safety-cancelled setup/social tool calls #479 , and all child issues in this milestone.
The doc names the local/native lane and remote/support-VM lane separately.
Summary
Define the architecture contract that makes
dist/WorldOS.appobservable and driveable by agents without replacing the real release gate.This is the parent issue for the app-testability lane. It complements the UX-first sprint in #467 and the blind playtester architecture in #324.
Required architecture decisions
viewer/server.pyexposes a stable, read-only app-status contract for the live OpenWorlds surface.data-worldos-testidhooks make the browser UI driveable without pixel guessing.Invariants
/moveintent submitter.Acceptance criteria