Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 41 additions & 14 deletions WorldOS-OPERATING-GOAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
Post-compaction agents: this 6-line block is ground truth. Do NOT reconstruct
state from scattered docs or old plans; trust this, verify the sha, then act.
──────────────────────────────────────────────────────────────────────────
AS OF: 2026-05-31 takeover stabilization
ORIGIN TIP: 82aeaf2 (verified by git fetch on 2026-05-31)
AS OF: 2026-05-31 post-takeover UX sprint sync
ORIGIN TIP: b15ad3c (PR #465 merged; verified by git fetch on 2026-05-31)
CANONICAL: /Users/lume/ClawDnD-val is the private-art/live-app checkout; observed at f5500ac
and behind origin/main by 3 commits before takeover. Do not fast-forward it
until the owner intentionally chooses to move the private-art checkout.
Expand All @@ -19,8 +19,9 @@
LAST VALID RELEASE GATE:
none after the RRI contract hardening. A release verdict requires expected
persona count, disk-backed palette/image/behavioral evidence, and built .app play.
NEXT ACTION: Stabilize gate truth first → rerun a clean gate on the 32GB VM for backend/personas
plus Mac/macOS CI built-app verification → then fix the trustworthy failure list.
NEXT ACTION: Run the clean post-hardening gate (#466) to get a trustworthy failure list, but
plan the next sprint UX-first (#467): first-turn playability, clickability/chrome, launcher
clarity, live-response feel, and CRPG depth before more hardening/proxy/security work.
DISCIPLINE: ≥2 clean reads before any fix (channel fabricates under host load); ONE heavy claude -p stream;
never probe-kill; test the BUILT .app, never a proxy; honest scores; never "100% confidence".
════════════════════════════════════════════════════════════════════════════ -->
Expand Down Expand Up @@ -157,20 +158,46 @@ verifier; can revert the goal to "fix" anytime.

---

## 9. CURRENT STATUS (2026-05-31 — takeover context, NOT a release verdict)
## 9. CURRENT STATUS (2026-05-31 — post-#465, NOT a release verdict)

- Repo truth is being stabilized from a Lexar worktree at `origin/main` (`82aeaf2`). The private-art
checkout at `/Users/lume/ClawDnD-val` was observed at `f5500ac` and behind by 3 commits; keep it
intact until the owner chooses to fast-forward it.
- Repo truth stabilization merged in PR #465. Current `origin/main` is `b15ad3c`; the private-art
checkout at `/Users/lume/ClawDnD-val` was observed at `f5500ac` before takeover. Keep it intact until
the owner intentionally fast-forwards the live app/private-art checkout.
- The `f5500ac` RRI (`2.7/10`) is preserved as partial evidence only. It proves the gate/harness was
not trustworthy enough for release scoring: one persona completed, others lacked `score.json`, and
image/palette/behavioral/UI audit sources were either missing or harness-contaminated.
- The stabilization lane is: make docs and RRI output truthful → make the gate fail on missing personas
and record exact evidence paths → fix high-confidence playability blockers → run the full backend/persona
sweep on the 32GB VM and the Mac-only built-app smoke on this Mac or macOS CI.
- Known product blockers to verify after harness trust is restored: built app playability, narration
stall/disabled-control behavior under real latency, image/private-art root routing, and legacy
`/dashboard` references that can mislead agents away from `/openworlds/`.
- The next evidence step is issue #466: run a clean non-partial five-persona RRI from `b15ad3c` or newer
on the 32GB VM for backend/personas, plus the Mac/macOS CI built-app playtest. The expected outcome is
either a trustworthy blocker list or a real 11/11 release result.
- Product direction is now UX-first (#467). Do not turn the next sprint into more gate hardening, proxy adapters,
transport/security work, UGC/legal, or renderer branches unless #466 proves they block the player-facing
session. The game must feel launchable, clickable, responsive, and deep before it needs more machinery.
- Highest-confidence UX risks to verify/fix next: first-turn built-app play; global click hit areas (#309);
title/chrome truth (#306); launcher clarity/stale campaigns (#358); per-beat latency/live response (#393);
portrait/gallery blockers (#379); and CRPG depth on Heroes/Battle/Inventory (#308/#318/#310,
with #462/#463 folded into Battle readability as presentation containment).

---

## 10. UX-FIRST SPRINT ORDER (after takeover stabilization)

Use the gate as evidence, not as the roadmap. The next sprint should optimize the felt session:

1. **Prove first-turn play in the built app.** A fresh player can launch, choose/start/resume, reach the
Table, submit one `/move`, and see narration resolve without critical console/runtime errors. Evidence:
issue #466 artifacts, not a proxy preview.
2. **Fix the "this is not clickable" feeling.** Close #309 only when clicking any visible tab/button
background works with mouse and keyboard. Pair with visual truth for #306 so the title/day/chrome no
longer look broken at common widths.
3. **Make the launcher feel like a real game shelf.** Remove stale/scratch campaign noise (#358), make
bridge/no-bridge state honest, and ensure each chronicle looks distinct enough to choose.
4. **Make slow turns feel alive.** Verify #393/#394-style streaming in a real built-app run; if text does
not appear within the first 15-30 seconds of a turn, prioritize streaming/proof-of-life UX over more
backend hardening.
5. **Add CRPG depth where players look for it.** Heroes spellbook/manage-spells (#308), Battle readability
(#318, including #462/#463 token containment/alignment as presentation truth), Inventory/paper-doll
feel (#310), and portrait/race gallery continuity (#379) beat proxy/security work until the session
feels like a game.

---

Expand Down
10 changes: 6 additions & 4 deletions WorldOS-RUNBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,10 +295,12 @@ out freely. Only **`claude -p` QA is host-heavy** (the duo/sprint spin up engine
## CURRENT STATE + WORK QUEUE

**Historical snapshot, not current authority:** this queue was written around `ea815fc`
(2026-05-27 cont.3). During the 2026-05-31 takeover, `origin/main` was refreshed to `82aeaf2`,
the canonical private-art checkout was observed at `f5500ac`, and the only current gate truth lives
in `WorldOS-OPERATING-GOAL.md` + `WorldOS-GUI-RUNBOOK.md` + `qa/SCORECARD.md`. Do not use this
section to decide release state.
(2026-05-27 cont.3). During the 2026-05-31 takeover, the gate-truth stabilization merged as PR #465;
current `origin/main` is `b15ad3c`, the canonical private-art checkout was observed at `f5500ac`, and
the only current gate truth lives in `WorldOS-OPERATING-GOAL.md` + `WorldOS-GUI-RUNBOOK.md` +
`qa/SCORECARD.md`. Do not use this section to decide release state. The next sprint is UX-first (#467):
prove first-turn built-app play via #466, then prioritize clickability/chrome, launcher clarity,
live-response feel, and CRPG depth before more hardening/proxy/security work.

**LATEST (2026-05-27 cont.3) — the Quest & Arc engine is COMPLETE + WIRED, all combat
defects closed, and the sibling's draft-PR backlog is fully landed.** Since the queue
Expand Down
5 changes: 4 additions & 1 deletion docs/roadmap/WORLDOS-GRAPHICS-ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
> second writer. This mirrors WorldOS's core architecture: the engine is the sole
> authority; everything downstream is a projection.
>
> Status: **FILED** — PR #424; milestones M0–M6 + Future-gated; issues #425–#461. Confidence
> Status: **FILED + PARTIAL M0 CONTRACTS LANDED** — PR #424 filed milestones M0–M6 +
> Future-gated issues #425–#461. PR #464 landed the parallel-safe M0 contract slice:
> #425/#426/#427/#431 closed; #428/#430/#433 remain open for fuller renderer/implementation proof;
> #429/#432 were intentionally held for coordinated `viewer/server.py` edits. Confidence
> on direction ≥95% (first-principles decision 2026-05-31). The full decision records
> (research report, architecture decision, T2-engine addendum) are operator-local
> session-notes and are intentionally not committed; this document is the in-repo canonical
Expand Down
17 changes: 11 additions & 6 deletions qa/GUI_WORKBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,18 @@
> Iteration surface: `http://127.0.0.1:8799/openworlds/` (`scripts/play.sh` from canonical).
> Gate surface: built `dist/WorldOS.app` via `qa/ui_playtest_app.sh`. See `WorldOS-GUI-RUNBOOK.md`.

## ★ HEADLINE (verified 2026-05-31, 3 clean reads on live canonical 8799)
## ★ HEADLINE (historical canonical f5500ac, verified 2026-05-31, 3 clean reads on live canonical 8799)
**Most of what the owner saw broken was a STALE-BUILD / WORKTREE-WITHOUT-ART artifact, not broken canonical code.** Served correctly from canonical:
- `can_act:true`; palette **5 exploration actions ENABLED** (continue/say/do/check/save); attack/bonus/reaction correctly disabled ("not in combat").
- **ALL images 200**: `location:loc-lower-city`, `portrait-rolan`, `portrait-minsc`, `map_lower-city`, `region:baldurs-gate`, `scene_baldurs-gate`.
- DM cold-open narration = 4842 chars with **27 paragraph breaks** (the prose IS well-formed).
⇒ The fix for "no images / no map / no palette" is **serve/build WITH `_private` art present** (infra), not 3 code PRs. The real *code* bugs are layout prominence + render formatting + the silent companion.

Post-#465 note: `origin/main` is now `b15ad3c`, and RRI release scoring requires a
disk-backed `palette_live` proof with **≥6 enabled actions** on a `can_act:true` surface. The 5-action
canonical read above remains useful orientation, but it is not release proof; issue #466 must either prove
the built app now meets the live palette gate or fail with an actionable artifact path.

## Phase 0 — infra (DONE)
- ✅ `launch.json` repointed off the deprecated LEXAR copy → canonical/8799/`/openworlds/`/live state.
- ✅ 8799 playable from canonical: `can_act:true`, PC Rolan + Minsc, images + map render.
Expand All @@ -23,11 +28,11 @@

| # | Defect | VERIFIED root cause | Fix | Status | Proof |
|---|---|---|---|---|---|
| G3 | Palette buried in 280px right-rail; `slice(0,6)` drops bonus-action+reaction; no center palette | screen-table.jsx action list used to live outside the main play column and cap rows | Drop slice; promote all exploration actions to main action column near Declare; group combat verbs separately | Fixed in current branch; needs live look + full gate | Static proof: `viewer/tests/test_openworlds_static.py::test_openworlds_table_renders_all_actions_without_truncation` and `test_openworlds_table_promotes_palette_to_main_column` |
| G4 | Chronicle renders as ONE block despite well-formed prose | `LogEntry` rendered `{text}` with default `white-space`, collapsing `\n\n` paragraph breaks | Keep sanitization, render narration with `whiteSpace: "pre-line"` | Fixed in current branch; needs live look + full gate | Static proof: `viewer/tests/test_openworlds_static.py::test_openworlds_table_chronicle_preserves_paragraph_breaks` |
| G6 | Companion (Minsc/Alfira, kind='companion') silently in solo party at cold-open, no narrated meeting | solo play.sh could prompt the DM into seating/recruiting a companion at cold-open | Solo prompt now says the player begins alone; `play_party.sh` with empty companion spec execs solo `play.sh` unchanged | Prompt guard fixed in current branch; needs live gate proof | Static proof: `qa/test_release_gate_static.py::test_solo_play_contract_does_not_silently_recruit_companion` |
| G5 | "No streaming visible" — VERIFY (may be infra: owner watched a stale/wrong surface) | /events+useLiveSession+log_event exist; DM emits paragraph-rich prose | Confirm mid-turn log_event on live 8799; fix only if current built-app play still batches blank waits | Open, needs built-app Part A+B evidence | DM prose well-formed; streaming path exists |
| G7 | Worktree/.app builds 404 images (no _private) | `_ingested_images_root()` (server.py:203) hardcoded to server.py's repo → worktree has no _private | Split code repo from art repo: viewer honors `WORLDOS_ART_REPO_ROOT`; native app has a Private art repo path and launch-root override for gate builds | Fixed in takeover branch; needs PR/CI + full gate | 2026-05-31 smoke: worktree `dist/WorldOS.app` pid 69755 launched without killing canonical app; spawned worktree `viewer/server.py` on 8765; `/image?scope=location:loc-lower-city` returned `200 904100`; Info.plist root=`/Volumes/LEXAR/repos/worldos-takeover-stabilization`, art=`/Users/lume/ClawDnD-val` |
| G3 | Palette buried in 280px right-rail; `slice(0,6)` drops bonus-action+reaction; no center palette | screen-table.jsx action list used to live outside the main play column and cap rows | Drop slice; promote all exploration actions to main action column near Declare; group combat verbs separately | Merged in #465; needs built-app palette-live proof from #466 | Static proof: `viewer/tests/test_openworlds_static.py::test_openworlds_table_renders_all_actions_without_truncation` and `test_openworlds_table_promotes_palette_to_main_column` |
| G4 | Chronicle renders as ONE block despite well-formed prose | `LogEntry` rendered `{text}` with default `white-space`, collapsing `\n\n` paragraph breaks | Keep sanitization, render narration with `whiteSpace: "pre-line"` | Merged in #465; needs built-app live look + full gate | Static proof: `viewer/tests/test_openworlds_static.py::test_openworlds_table_chronicle_preserves_paragraph_breaks` |
| G6 | Companion (Minsc/Alfira, kind='companion') silently in solo party at cold-open, no narrated meeting | solo play.sh could prompt the DM into seating/recruiting a companion at cold-open | Solo prompt now says the player begins alone; `play_party.sh` with empty companion spec execs solo `play.sh` unchanged | Merged in #465; needs live gate proof | Static proof: `qa/test_release_gate_static.py::test_solo_play_contract_does_not_silently_recruit_companion` |
| G5 | "No streaming visible" — VERIFY (may be infra: owner watched a stale/wrong surface) | /events+useLiveSession+log_event exist; DM emits paragraph-rich prose; PR #394 merged streaming-lite for #393 | Confirm mid-turn log_event on live 8799; fix only if current built-app play still batches blank waits | #394 merged; #393 remains open until built-app Part A+B proves no latency give-ups | DM prose well-formed; streaming path exists; proof still owed on built app |
| G7 | Worktree/.app builds 404 images (no _private) | `_ingested_images_root()` (server.py:203) hardcoded to server.py's repo → worktree has no _private | Split code repo from art repo: viewer honors `WORLDOS_ART_REPO_ROOT`; native app has a Private art repo path and launch-root override for gate builds | Merged in #465; needs #466 full gate proof | 2026-05-31 smoke: worktree `dist/WorldOS.app` pid 69755 launched without killing canonical app; spawned worktree `viewer/server.py` on 8765; `/image?scope=location:loc-lower-city` returned `200 904100`; Info.plist root=`/Volumes/LEXAR/repos/worldos-takeover-stabilization`, art=`/Users/lume/ClawDnD-val` |

## EVAPORATED on clean re-verification (were CORRUPTED READS — do NOT chase)
- **G1 "palette all-disabled / PC kind=pc / no active character"** — FALSE. Live PC Rolan is `kind='player'`; palette enabled. (A corrupted snapshot read invented `kind='pc'`/`npc-alfira`. Builder A killed — pushed no PR.)
Expand Down
Loading