Skip to content

fix(DM): prose-not-scaffolding — DM echoed its planning notes as the scene (narrative crit) - #647

Merged
100yenadmin merged 1 commit into
mainfrom
fix/dm-prose-not-scaffolding
Jun 5, 2026
Merged

fix(DM): prose-not-scaffolding — DM echoed its planning notes as the scene (narrative crit)#647
100yenadmin merged 1 commit into
mainfrom
fix/dm-prose-not-scaffolding

Conversation

@100yenadmin

@100yenadmin 100yenadmin commented Jun 5, 2026

Copy link
Copy Markdown
Member

QA 2026-06-05 (sweep-3b, narrative persona — 2 criticals, blocks_progress=True): the .app DM rendered its internal scaffolding notes verbatim as the scene instead of lived prose:

actual: "Devella presses Renn on the doubled patrol and the broken seal. Renn: the rangers made that call themselves — no log entry, no deviation filed…" — pure scaffolding, zero prose.

The #642 runbook injection made it worse — the DM treated the injected arc directive as content to echo. (newbie/veteran were unaffected at 8/7; narrative dropped 8→4.)

Fix:

  1. Frame the runbook as [ARC CUE — internal planning ONLY; do NOT quote/echo this line; weave its INTENT into the scene] — so it drives the arc without being rendered.
  2. A hard prose-only output rule with the exact failure example (Wrong: terse 'X presses Y…' / Right: render it lived — her jaw tightening, the quoted line, the room).

Keeps the G1 win (the runbook still fires → combat still drives; only its framing changed). Guard test_play_party_drives_the_arc_runbook updated. bash -n clean; 10 harness tests pass. Validation: next multi-run sweep (does narrative recover + combat hold).

Summary by CodeRabbit

  • Tests
    • Expanded test coverage to validate that internal planning directives and scaffolding instructions are correctly processed without being displayed to end-users. Updated test assertions ensure the system properly segregates internal planning content and enforces non-echo constraints, maintaining system integrity.

…id note-output

QA 2026-06-05 (narrative persona, 2 criticals, blocks_progress=True): the .app DM rendered its
internal scaffolding notes VERBATIM as the scene — "Devella presses Renn on the seal. Renn: the
rangers made that call — no log filed." — instead of lived 2nd-person prose. The #642 runbook
injection made it worse: the DM treated the injected arc directive as content to echo.

Fix: (1) frame the runbook as "[ARC CUE — internal planning ONLY; do NOT quote/echo this line]"
so the DM weaves its INTENT into the scene rather than rendering it verbatim; (2) a hard prose-only
output rule carrying the exact failure example (Wrong: 'X presses Y...' / Right: render it lived).
Keeps the G1 combat-driving (the runbook still fires — only its FRAMING changed). Guard updated.
@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: aba1f771-2247-4bd4-a49f-df7c145cbb5a

📥 Commits

Reviewing files that changed from the base of the PR and between 4dd0fc8 and ba459b9.

📒 Files selected for processing (2)
  • scripts/play_party.sh
  • servers/engine/tests/test_dm_session_remint.py

📝 Walkthrough

Walkthrough

This PR adds an internal planning framing directive to the per-beat DM prompt in the game engine's beat-play orchestrator, marking the runbook and planning content as non-player-facing, and extends test assertions to verify that the DM does not echo this scaffolding into player narration.

Changes

DM Prompt Restructuring

Layer / File(s) Summary
ARC CUE internal planning framing and scaffolding prevention
scripts/play_party.sh, servers/engine/tests/test_dm_session_remint.py
The per-beat DM prompt now opens with an "ARC CUE — internal planning ONLY" directive before injecting the runbook, signaling that planning content should not reach player-facing narration. Test assertions verify this framing is present and that explicit "do NOT quote/echo/render" and "terse scaffolding" constraints prevent the DM from rendering planning text.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Possibly related PRs

  • electricsheephq/WorldOS#631: Both PRs modify scripts/play_party.sh's DM prompt construction and update servers/engine/tests/test_dm_session_remint.py with assertions around that injected DM prompt content.
  • electricsheephq/WorldOS#642: Both PRs update scripts/play_party.sh's per-beat DM prompt flow to inject the $RUNBOOK and extend test_dm_session_remint.py to assert runbook-driven beat behavior, with this PR adding the "ARC CUE/internal planning only" framing and stricter anti-scaffolding checks.
  • electricsheephq/WorldOS#388: Both PRs modify scripts/play_party.sh to prevent internal planning and scaffolding text from being echoed in player-facing narration, with this PR adding the ARC CUE directive and runbook injection framing.

Poem

🐰 A whisper marked "internal planning only,"
The runbook tucked away, safe and lonely,
No scaffolding leaks to spoil the scene—
The DM's secrets stay backstage, unseen! 📖✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers the problem (DM echoing scaffolding), root cause (runbook injection framing), and solution (internal-only framing + prose rules), but is missing the required CLA certification and licensing checkboxes from the template. Add the Licensing/CLA section with the required checkboxes checked (or explicitly addressed) to confirm CLA compliance and that no restricted content is included.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: fixing a critical DM narrative output bug where internal scaffolding notes were being echoed verbatim as scene prose instead of being used for internal planning only.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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

@100yenadmin
100yenadmin merged commit 62024a4 into main Jun 5, 2026
15 checks passed
100yenadmin pushed a commit that referenced this pull request Jun 5, 2026
…hronicle leak)

The dc0d625 re-baseline sweep narrative persona hit a MAJOR: a DM-internal scene
summary leaked into the player Chronicle at the end of the cold open — "Cold open —
Lower City, Murl's Rest... Choice: return to Sundries and say nothing, or head for
Rivington to find the survivor." — a 3rd-person director's note with a Choice: branch
list, not player-facing prose.

Root: the #623 live-progress rule (play_party.sh:145) tells the DM to log_event a
'player-facing progress beat' for the /events stream, but — unlike the cold-open REPLY
guard (line ~459, which forbids 3rd-person setup briefs/'COLD OPEN —' notation) — it
carried NO scaffolding guard, so the DM logged its 3rd-person scene-PLAN as the progress
beat and it rendered straight into the chronicle.

Fix: extend the live-progress rule to require 2nd-person prose addressed to 'you' and
forbid scene summaries, 'Cold open —'/'Scene:'/'Setup:' headers, 'Choice: X or Y' branch
lists, bracketed stage directions, and director/planning notes. Mirrors the reply guard.

Prompt-only change; validated in the next 5-persona re-sweep (no deterministic unit test
for DM prose). Part of the prose-not-scaffolding class (#636/#647).
100yenadmin added a commit that referenced this pull request Jun 5, 2026
…hronicle leak) (#678)

The dc0d625 re-baseline sweep narrative persona hit a MAJOR: a DM-internal scene
summary leaked into the player Chronicle at the end of the cold open — "Cold open —
Lower City, Murl's Rest... Choice: return to Sundries and say nothing, or head for
Rivington to find the survivor." — a 3rd-person director's note with a Choice: branch
list, not player-facing prose.

Root: the #623 live-progress rule (play_party.sh:145) tells the DM to log_event a
'player-facing progress beat' for the /events stream, but — unlike the cold-open REPLY
guard (line ~459, which forbids 3rd-person setup briefs/'COLD OPEN —' notation) — it
carried NO scaffolding guard, so the DM logged its 3rd-person scene-PLAN as the progress
beat and it rendered straight into the chronicle.

Fix: extend the live-progress rule to require 2nd-person prose addressed to 'you' and
forbid scene summaries, 'Cold open —'/'Scene:'/'Setup:' headers, 'Choice: X or Y' branch
lists, bracketed stage directions, and director/planning notes. Mirrors the reply guard.

Prompt-only change; validated in the next 5-persona re-sweep (no deterministic unit test
for DM prose). Part of the prose-not-scaffolding class (#636/#647).

Co-authored-by: Eva <arncalso@gmail.com>
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