Skip to content

[codex] Add Codex DM built-app provider path - #475

Merged
100yenadmin merged 10 commits into
mainfrom
codex/worldos-codex-dm-provider
May 31, 2026
Merged

[codex] Add Codex DM built-app provider path#475
100yenadmin merged 10 commits into
mainfrom
codex/worldos-codex-dm-provider

Conversation

@100yenadmin

@100yenadmin 100yenadmin commented May 31, 2026

Copy link
Copy Markdown
Member

Summary

  • add scripts/play_codex_dm.sh, a real Codex Dungeon Master provider wrapper that owns the live viewer, engine/rules/voice MCP contract, chat.jsonl, and player_moves.jsonl
  • point the native Codex provider at the DM wrapper while keeping scripts/play_codex_actor.sh as the constrained player/companion helper
  • preserve the active provider viewer across native restarts and replace stale standalone-viewer history when the UI hands off to a live provider session
  • fix the move-cursor race where player moves submitted during opening narration could be skipped
  • harden Codex DM provider prompts/tool boundaries: no speaker:null, no broad mid-session shell state discovery, no unconfigured solo companions, no startup/social safety-cancelled setup calls, and no opening-turn persist_beat
  • expose read-only /app-status / /__worldos/app-status.json for agent-facing app truth: build, provider, state root, private art, campaign/run, move sink, actor, enabled actions, and endpoints
  • update takeover docs/scorecard and add the agent-grade app testability contract plus a read-only evidence exporter
  • add keep-alive Part A harness evidence for app-status launcher/minted sessions and require first-turn readiness before counting gameplay proof

Licensing / CLA

  • I have read CLA.md and submit this contribution under the WorldOS Contributor License Agreement.
  • I have not included confidential information, private customer data, private imported content, or third-party-restricted material.
  • Any third-party material in this PR is clearly identified with source and license.

Built-app evidence

Local dist/WorldOS.app proof succeeded with a non-Claude Codex DM provider, private Baldur's Gate art, visible narration, enabled actions, submitted player move, and DM response.

Clean-tree app-code evidence root: /Volumes/LEXAR/Codex/worldos-built-app-playtest/codex-app-headproof-20260601T043909/

Clean-tree highlights:

  • app code SHA reported by harness: 8bd833f
  • latest PR head: d292def (docs/scorecard pointers after the app-code proof)
  • built app minted Codex session play-20260531213923 on port 8766
  • /app-status reported provider codex, private art present, Alfira as active player, writable move sink, and five enabled actions
  • /move accepted and resolved one player action
  • final chat roles: dm, player, dm
  • /session-surface remained live/actionable with can_act:true
  • provider trace summary: zero errors and zero failed tool calls
  • read-only app evidence exported to app-evidence/manifest.json

Preserved diagnostic evidence:

  • /Volumes/LEXAR/Codex/worldos-built-app-playtest/codex-app-socialclean-20260601T041604/: gameplay recovered but still had startup provider cancellations
  • /Volumes/LEXAR/Codex/worldos-built-app-playtest/codex-app-traceclean-20260601T042248/: pre-commit trace-clean proof from the same stabilization slice
  • /Volumes/LEXAR/Codex/worldos-built-app-playtest/codex-app-headproof-20260601T043402/: clean-tree proof before forbidding opening-turn persist_beat; preserved because it exposed the last Codex DM should avoid safety-cancelled setup/social tool calls #479 cancellation

The Photos/Music prompt visible in one earlier screenshot was traced via unified logs to TCC attribution contamination: responsible=dev.clawdnd.app, actual accessing=/usr/bin/find. The GUI runbook documents how to classify that separately from product bugs.

Validation

  • bash -n scripts/play_codex_dm.sh qa/ui_playtest_app.sh
  • uv run --directory servers/engine python -m pytest tests/test_codex_provider_wrapper.py -q -p no:xdist (20 passed)
  • python3 -m pytest viewer/tests/test_openworlds_static.py -q (38 passed, 2 subtests passed)
  • python3 -m pytest qa/test_macos_app_static.py qa/test_export_app_evidence.py -q (7 passed)
  • git diff --check
  • WOS_APP_PART=A WOS_APP_KEEP_MINTED_BACKEND=1 WORLDOS_ART_REPO_ROOT=/Users/lume/ClawDnD-val qa/ui_playtest_app.sh codex-app-headproof-20260601T043909 baldurs-gate newbie 1 3.00
  • post-run live probes: curl /app-status, curl /session-surface, provider trace error scan

Follow-up

This is product progress, not a release verdict. Next step is #466: a clean non-partial RRI sweep. Mac/local or macOS CI supplies built .app proof; support-vm-1 supplies heavy backend/persona sweeps only after VM preflight/auth setup. The agent-grade app testability lane continues under #480-#486.

Refs #466, #467, #474, #476, #477, #478, #479, #480, #481, #485, #486.

@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@100yenadmin, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 6 minutes and 31 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 91be756e-3d01-447f-a45f-cdc7836aeaff

📥 Commits

Reviewing files that changed from the base of the PR and between 286496f and d292def.

📒 Files selected for processing (17)
  • WorldOS-GUI-RUNBOOK.md
  • WorldOS-OPERATING-GOAL.md
  • WorldOS-RUNBOOK.md
  • docs/AGENT_GRADE_APP_TESTABILITY.md
  • qa/SCORECARD.md
  • qa/export_app_evidence.py
  • qa/test_export_app_evidence.py
  • qa/test_macos_app_static.py
  • qa/ui_playtest_app.sh
  • scripts/play_codex_dm.sh
  • servers/engine/server.py
  • servers/engine/tests/test_beat_roundtrip.py
  • servers/engine/tests/test_codex_provider_wrapper.py
  • servers/engine/tests/test_sessions.py
  • skills/dungeon-master/SKILL.md
  • viewer/server.py
  • viewer/tests/test_openworlds_static.py
📝 Walkthrough

Walkthrough

PR #475 implements a Codex "Dungeon Master" provider wrapper and related actor script changes, updates the macOS native app to reuse an active provider-viewer session across restarts, scopes roster world resolution to session-catalog snapshots, updates frontend navigation to replace history on live-viewer hops, and adds tests and runbook/operating-goal documentation reflecting the new DM path and evidence.

Changes

Codex DM Wrapper & Provider Adapter Routing

Layer / File(s) Summary
Codex DM wrapper script implementation
scripts/play_codex_dm.sh
New Bash script orchestrates Codex as a DM provider with environment validation, MCP server config generation, viewer supervision, optional hero pre-seeding via engine tools, opening narration, and a bounded move-processing loop resolving player moves.
Codex actor script model & approval adjustments
scripts/play_codex_actor.sh
Makes Codex model selection conditional via CLAWDND_CODEX_MODEL, changes default tool approval mode from auto to approve, and restructures codex exec argument wiring.
Provider adapter defaults & hero parameter wiring
macos/WorldOSApp/Sources/WorldOSApp/Services/ProviderAdapters.swift
Prefers scripts/play_codex_dm.sh when no custom command is configured, validates codex CLI and wrapper presence, forwards hero into providerEnvironment, and sets CLAWDND_PLAY_HERO when provided; OpenClaw also forwards hero.
Wrapper test coverage (dry-run & runtime)
servers/engine/tests/test_codex_provider_wrapper.py
Adds DM dry-run and runtime tests, hero propagation checks, static-source assertions, fake-codex runtime tests (unset-model, opening narration, queued-move processing), adapter-selection and CLI-flag consistency tests.

Native App Provider Viewer Attachment Across Restarts

Layer / File(s) Summary
AppProcessService viewer readiness & URL exposure
macos/WorldOSApp/Sources/WorldOSApp/Services/AppProcessService.swift
Exposes activeProviderOpenWorldsURL and adds markProviderViewerReady() to surface the provider viewer URL and mark the viewer endpoint running.
RootView provider reuse & lifecycle integration
macos/WorldOSApp/Sources/WorldOSApp/Views/RootView.swift
Adds keepActiveProviderViewerAttached() and an early-return in startOpenWorlds() to reuse an existing provider-attached viewer URL; calls markProviderViewerReady() immediately after starting a provider session.
Provider viewer attachment static contract test
qa/test_macos_app_static.py
Adds a static test asserting presence of readiness markers and that RootView reuses the provider viewer across native restarts (launchMessage = "Provider session active").

Browser Navigation & Roster Catalog Scoping

Layer / File(s) Summary
Browser navigation via location.replace in launch flows
viewer/openworlds/screen-launcher.jsx, viewer/openworlds/screen-create.jsx, viewer/openworlds/screen-roster.jsx
Replaces window.location.assign() with window.location.replace() for live viewer navigation to prevent back-button returns to pre-launch tables.
Roster campaign derivation from catalog & query parameter scoping
viewer/openworlds/screen-roster.jsx
Derives activeCampaign by matching computed campaignId, uses activeCampaign.campaign_id for roster campaign ID, and conditionally includes source and run query parameters from activeCampaign in /roster-surface requests.
Server-side catalog override & world_id resolution
viewer/server.py
Updates /roster-surface route to check for session-catalog overrides, extracts world_id from overridden snapshot when present, and extends build_roster_response() signature to accept optional world_id parameter overriding campaign-based derivation.
Viewer frontend & server roster surface static tests
viewer/tests/test_openworlds_static.py
Validates native provider launch screens use window.location.replace() navigation and roster screen uses catalog-scoped campaign derivation with source/run parameter wiring.
Roster surface test isolation & catalog-scoped world_id resolution test
viewer/tests/test_roster_surface.py
Adds test setup/teardown to preserve/restore server._HERE for isolation and introduces tests verifying /roster-surface resolves world_id from session-catalog snapshot and does not fall back when world_id is absent or empty.

Documentation & Runbook Updates

Layer / File(s) Summary
GUI runbook native provider & TCC guidance
WorldOS-GUI-RUNBOOK.md
Updates origin/main hash reference, clarifies DM vs actor wrapper routing and "do not swap" guidance, tightens release-proof statements, and adds macOS TCC privacy-prompt triage instructions.
Operating goal baseline update & evidence refresh
WorldOS-OPERATING-GOAL.md
Updates AS OF timestamp and baseline SHA to 6e03da4, records 2026-06-01 built-app first-turn DM evidence artifacts, and updates NEXT ACTION and UX-first sprint step 1 to require a short multi-move playtest.
Main runbook operational updates
WorldOS-RUNBOOK.md
Updates last-updated timestamp and local checkout hash to 6e03da4, and documents that the Codex provider default is the DM wrapper while actor wrapper remains a constrained helper.
Agents guidance and playtest scorecard
AGENTS.md, qa/SCORECARD.md
Adds AGENTS.md with run/verification guidance and updates qa/SCORECARD.md with a Built-app gameplay proof ledger entry.
Playtest harness enhancements
qa/ui_playtest_app.sh
Adds WOS_APP_KEEP_MINTED_BACKEND support for part A, first-turn readiness polling, conditional teardown preservation, and new output fields propagated into native/transition.json and run.json.

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Possibly related PRs

Poem

🐇 I found a script that guides the game,

DM in charge, the viewer stays the same.
Heroes seeded, logs hop in a row,
Tests hum softly, nav won't let you go.
Docs and scorecards bloom — a tidy show.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.45% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely summarizes the main change: adding a Codex DM built-app provider path.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The PR description provides a comprehensive summary, detailed built-app evidence, validation steps, and follow-up actions, closely matching the required template structure.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@100yenadmin

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
macos/WorldOSApp/Sources/WorldOSApp/Services/ProviderAdapters.swift (1)

111-126: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't hard-require play_codex_dm.sh for custom Codex commands.

Lines 111-118 and 143-146 fail closed on a missing checked-in wrapper before honoring preferences.codexCommand, so any custom Codex launch command is broken unless scripts/play_codex_dm.sh also exists locally.

Suggested guard change
-        guard FileManager.default.fileExists(atPath: wrapper.path) else {
-            return ProviderStatus(
-                kind: kind,
-                availability: .error,
-                detail: "Codex CLI found, but scripts/play_codex_dm.sh is missing from this checkout.",
-                detectedPath: cli
-            )
-        }
+        if configuredCommand.isEmpty {
+            guard FileManager.default.fileExists(atPath: wrapper.path) else {
+                return ProviderStatus(
+                    kind: kind,
+                    availability: .error,
+                    detail: "Codex CLI found, but scripts/play_codex_dm.sh is missing from this checkout.",
+                    detectedPath: cli
+                )
+            }
+        }
@@
-        let wrapper = repoPath.appendingPathComponent("scripts/play_codex_dm.sh")
-        guard FileManager.default.fileExists(atPath: wrapper.path) else {
-            throw ProviderError.configuration("Codex provider wrapper is missing: scripts/play_codex_dm.sh")
-        }
-
         let configuredCommand = preferences.codexCommand.trimmingCharacters(in: .whitespacesAndNewlines)
+        if configuredCommand.isEmpty {
+            let wrapper = repoPath.appendingPathComponent("scripts/play_codex_dm.sh")
+            guard FileManager.default.fileExists(atPath: wrapper.path) else {
+                throw ProviderError.configuration("Codex provider wrapper is missing: scripts/play_codex_dm.sh")
+            }
+        }
         let command = configuredCommand.isEmpty ? defaultCodexCommand : configuredCommand

Also applies to: 143-149

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@macos/WorldOSApp/Sources/WorldOSApp/Services/ProviderAdapters.swift` around
lines 111 - 126, The code currently always requires the checked-in wrapper
(wrapper.path) before honoring a user-configured Codex command, breaking custom
commands; update the logic so the FileManager.exists guard only runs when
configuredCommand.isEmpty (i.e., no user command), and when a user command is
provided set ProviderStatus.detectedPath to that configuredCommand (not the
wrapper or cli); apply the same conditional change in the other occurrence (the
block around the later 143-149 code) so custom preferences.codexCommand are
accepted without the wrapper file.
🧹 Nitpick comments (1)
servers/engine/tests/test_codex_provider_wrapper.py (1)

48-56: ⚡ Quick win

Use timeout-aware _run_dm calls for runtime DM tests.

One runtime test invokes the wrapper without a timeout, which can hang CI on regressions. Also, the second runtime test bypasses _run_dm, making invocation behavior inconsistent.

Proposed patch
-def _run_dm(args: list[str], env: dict[str, str]) -> subprocess.CompletedProcess:
+def _run_dm(
+    args: list[str], env: dict[str, str], timeout: float | None = None
+) -> subprocess.CompletedProcess:
     return subprocess.run(
         ["/bin/bash", str(DM_SCRIPT), *args],
         cwd=ROOT,
         env=env,
         capture_output=True,
         check=False,
         text=True,
+        timeout=timeout,
     )
@@
-    result = _run_dm([], env)
+    result = _run_dm([], env, timeout=20)
@@
-    result = subprocess.run(
-        ["/bin/bash", str(DM_SCRIPT)],
-        cwd=ROOT,
-        env=env,
-        capture_output=True,
-        check=False,
-        text=True,
-        timeout=20,
-    )
+    result = _run_dm([], env, timeout=20)

Also applies to: 197-197, 246-254

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@servers/engine/tests/test_codex_provider_wrapper.py` around lines 48 - 56,
The _run_dm helper currently invokes the wrapper without a timeout and some
tests call the wrapper directly, risking hangs; update _run_dm (function
_run_dm) to accept a timeout parameter (e.g., timeout: float | None) and pass it
to subprocess.run(timeout=timeout), then change the runtime tests that currently
call subprocess.run directly (and the runtime test at the second invocation
mentioned) to use _run_dm with a reasonable timeout value (e.g., 10s) so all
invocations of DM_SCRIPT go through the timeout-aware _run_dm helper; keep
DM_SCRIPT and existing args/env usage unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@viewer/server.py`:
- Around line 6198-6202: catalog snapshot handling is incorrectly allowing
build_roster_response to fall back to _roster_world_for_campaign when raw_snap
lacks a world_id; instead, extract world_id from catalog_ref only when
present/non-empty and pass that explicit value to build_roster_response (do not
pass an empty string), and update build_roster_response to accept a
None/explicit-missing sentinel for world_id and avoid calling
_roster_world_for_campaign when that sentinel is given; look for the
catalog_ref/raw_snap extraction and the
build_roster_response/_roster_world_for_campaign callers to implement this
guarded-passing behavior.

In `@WorldOS-GUI-RUNBOOK.md`:
- Around line 35-38: Update the sentence that references "2026-06-01" so it
includes an absolute timestamp source or timezone to avoid appearing
future-dated; for example append "recorded at 2026-06-01 UTC" or "recorded at
2026-06-01, local time UTC−07" (or indicate the proof was taken from a local
build log with its ISO8601 timestamp). Edit the paragraph containing the date
string "2026-06-01" to add that explicit timezone/timestamp notation or log
source (e.g., "recorded at <ISO8601> UTC / build log") so operators cannot
misinterpret recency.

In `@WorldOS-OPERATING-GOAL.md`:
- Around line 8-10: Update the "AS OF" and associated state-of-truth entries to
use an explicit ISO 8601 timestamp with local timezone offset instead of a
date-only string (e.g., replace "2026-06-01" with "2026-06-01T00:00:00-07:00" or
the actual local time used) so the canonical operational source is unambiguous;
apply the same change to the related entries in the MAIN BASELINE block and the
other occurrences noted (lines 27–33) so all baseline/proof timestamps include
full date-time plus timezone and retain the existing commit/hash text.

---

Outside diff comments:
In `@macos/WorldOSApp/Sources/WorldOSApp/Services/ProviderAdapters.swift`:
- Around line 111-126: The code currently always requires the checked-in wrapper
(wrapper.path) before honoring a user-configured Codex command, breaking custom
commands; update the logic so the FileManager.exists guard only runs when
configuredCommand.isEmpty (i.e., no user command), and when a user command is
provided set ProviderStatus.detectedPath to that configuredCommand (not the
wrapper or cli); apply the same conditional change in the other occurrence (the
block around the later 143-149 code) so custom preferences.codexCommand are
accepted without the wrapper file.

---

Nitpick comments:
In `@servers/engine/tests/test_codex_provider_wrapper.py`:
- Around line 48-56: The _run_dm helper currently invokes the wrapper without a
timeout and some tests call the wrapper directly, risking hangs; update _run_dm
(function _run_dm) to accept a timeout parameter (e.g., timeout: float | None)
and pass it to subprocess.run(timeout=timeout), then change the runtime tests
that currently call subprocess.run directly (and the runtime test at the second
invocation mentioned) to use _run_dm with a reasonable timeout value (e.g., 10s)
so all invocations of DM_SCRIPT go through the timeout-aware _run_dm helper;
keep DM_SCRIPT and existing args/env usage unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e5fcc3b1-ca4d-4d60-86a6-1f0b759cface

📥 Commits

Reviewing files that changed from the base of the PR and between 6e03da4 and 0d17d2d.

📒 Files selected for processing (16)
  • WorldOS-GUI-RUNBOOK.md
  • WorldOS-OPERATING-GOAL.md
  • WorldOS-RUNBOOK.md
  • macos/WorldOSApp/Sources/WorldOSApp/Services/AppProcessService.swift
  • macos/WorldOSApp/Sources/WorldOSApp/Services/ProviderAdapters.swift
  • macos/WorldOSApp/Sources/WorldOSApp/Views/RootView.swift
  • qa/test_macos_app_static.py
  • scripts/play_codex_actor.sh
  • scripts/play_codex_dm.sh
  • servers/engine/tests/test_codex_provider_wrapper.py
  • viewer/openworlds/screen-create.jsx
  • viewer/openworlds/screen-launcher.jsx
  • viewer/openworlds/screen-roster.jsx
  • viewer/server.py
  • viewer/tests/test_openworlds_static.py
  • viewer/tests/test_roster_surface.py

Comment thread viewer/server.py
Comment thread WorldOS-GUI-RUNBOOK.md Outdated
Comment thread WorldOS-OPERATING-GOAL.md Outdated
@100yenadmin

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@servers/engine/tests/test_codex_provider_wrapper.py`:
- Around line 48-57: The _run_dm helper currently uses subprocess.run with
timeout which lets the kernel SIGKILL the shell and prevents
scripts/play_codex_dm.sh trap handlers from running, leaving
viewer_supervisor/viewer/server.py (VPID_FILE) and CLAWDND_PLAY_PORT orphaned;
modify _run_dm to start the bash in a new process group/session (use
preexec_fn=os.setsid or start_new_session=True) via subprocess.Popen, call
communicate() with the timeout, and on TimeoutExpired send a termination signal
to the entire process group (os.killpg with SIGTERM, then SIGKILL if needed),
capture stdout/stderr and return a subprocess.CompletedProcess-like result;
ensure you still reference DM_SCRIPT and preserve cwd=ROOT, env,
capture_output/text behavior so the cleanup trap in scripts/play_codex_dm.sh can
run and kill the viewer supervisor.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ec0a723d-0389-4aaa-b2b9-6417b09e5bdc

📥 Commits

Reviewing files that changed from the base of the PR and between 0d17d2d and 7ce7ffd.

📒 Files selected for processing (7)
  • WorldOS-GUI-RUNBOOK.md
  • WorldOS-OPERATING-GOAL.md
  • WorldOS-RUNBOOK.md
  • macos/WorldOSApp/Sources/WorldOSApp/Services/ProviderAdapters.swift
  • servers/engine/tests/test_codex_provider_wrapper.py
  • viewer/server.py
  • viewer/tests/test_roster_surface.py
✅ Files skipped from review due to trivial changes (3)
  • WorldOS-RUNBOOK.md
  • WorldOS-GUI-RUNBOOK.md
  • WorldOS-OPERATING-GOAL.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • viewer/server.py
  • macos/WorldOSApp/Sources/WorldOSApp/Services/ProviderAdapters.swift

Comment thread servers/engine/tests/test_codex_provider_wrapper.py Outdated
@100yenadmin

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@100yenadmin

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@qa/ui_playtest_app.sh`:
- Around line 350-352: The teardown pkill lines assume the session world equals
$WORLD and thus miss processes when minted sessions come from a different
resumed campaign; update the pkill patterns to decouple from $WORLD and match
only on the minted session identifier and script names instead. Replace
occurrences of pkill -f "play_party.sh $WORLD $minted_run" and pkill -f "play.sh
$WORLD $minted_run" and pkill -f "$WORLD $minted_run " with pkill patterns that
search for "play_party.sh $minted_run", "play.sh $minted_run" and any
supervisor/DM/spend loop process names (e.g., supervisor, dm, spend_loop)
combined with $minted_run (or read PIDs from the minted_run-specific pidfiles if
available) so that teardown reliably kills processes tied to minted_run
regardless of $WORLD.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2e62d3de-bb25-4579-b0e0-6063fb968b75

📥 Commits

Reviewing files that changed from the base of the PR and between c3dfee6 and 286496f.

📒 Files selected for processing (6)
  • AGENTS.md
  • WorldOS-GUI-RUNBOOK.md
  • WorldOS-OPERATING-GOAL.md
  • qa/SCORECARD.md
  • qa/test_macos_app_static.py
  • qa/ui_playtest_app.sh
✅ Files skipped from review due to trivial changes (1)
  • qa/SCORECARD.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • WorldOS-GUI-RUNBOOK.md
  • qa/test_macos_app_static.py

Comment thread qa/ui_playtest_app.sh Outdated
@100yenadmin

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@100yenadmin
100yenadmin marked this pull request as ready for review May 31, 2026 22:11
@100yenadmin
100yenadmin merged commit 32ca561 into main May 31, 2026
10 checks passed
@100yenadmin
100yenadmin deleted the codex/worldos-codex-dm-provider branch May 31, 2026 22:11
100yenadmin added a commit that referenced this pull request May 31, 2026
Sync takeover truth docs to main@080497e after #475/#494/#495/#496. Records honest evidence split, issue hygiene, and transient harness-port guidance.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant