Skip to content

fix(emit): the delve's own machinery narrated itself to the player - #332

Merged
stellarfeline merged 2 commits into
mainfrom
fix/command-feedback-leak
Aug 8, 2026
Merged

fix(emit): the delve's own machinery narrated itself to the player#332
stellarfeline merged 2 commits into
mainfrom
fix/command-feedback-leak

Conversation

@stellarfeline

Copy link
Copy Markdown
Owner

Owner playtest finding, 2026-08-07: "左侧信息那里能不能把「已触发[xxx]」隐藏掉" — every dialogue option printed Triggered [dw.dlg_antiphos] in chat beside the line the character had just said.

Root cause

Dialogue options are trigger-type scoreboard objectives (dw.dlg_<npc>, dw.class), so picking one runs /trigger and vanilla answers it in chat. emit::sealing_commands sets eight gamerules to seal the box garden — spawning, time, weather, griefing, fire spread, respawn scatter, inventory-on-death, TNT — and send_command_feedback was simply missing from that list. Command feedback is engine implementation reaching the player, which is precisely what every other rule in that list exists to stop.

Not version-gated, on purpose

tnt_explodes is gated on the v0.6 world stage because it gates a new capability and pre-0.6 fixtures must stay byte-identical. This is a defect: a campaign at any dsl_version wants its dialogue to stop announcing its scoreboard. The island is at 0.6/0.8 and gets the fix without an adoption round.

The validator earned its keep

The first attempt wrote the legacy camelCase sendCommandFeedback. 1.21.11 renamed the gamerules to snake_case and rejects the old spelling outright — and the compiler's own command validator refused the line against the vendored 1.21.11 command tree before it could reach a world:

CommandError { line: "gamerule sendCommandFeedback false",
               reason: "does not match the 1.21.11 command tree (root `gamerule`)" }

Blast radius, measured against the build the owner is playing right now

baseline (stage/r22-batch)  cf882e2e...b337a45
with this fix               24638a3c...903dada9
$ diff -rq <baseline>/datapack <fixed>/datapack
Files .../function/setup.mcfunction differ
$ diff .../setup.mcfunction
8a9
> gamerule send_command_feedback false

One added line, in one file. Nothing else moves. Full workspace suite: 154 test binaries, 0 failures.

rcon replies to its caller regardless of this rule, so the harness and validation/ are unaffected; the creator overlay's log stamp is log_admin_commands, a different rule.

Gate

Player-visible, so it joins the owner's playtest batch rather than merging on green — but it is the batch's smallest possible item and she asked for it by name.

Owner playtest 2026-08-07: every dialogue option a player picks printed
"Triggered [dw.dlg_antiphos]" in chat, beside the line the character had
just spoken.

Root cause, not the symptom: dialogue options are `trigger`-type scoreboard
objectives (`dw.dlg_<npc>`, `dw.class`), so choosing one runs `/trigger`
and vanilla answers it. `sealing_commands` sets eight gamerules to seal the
box garden — spawning, time, weather, griefing, fire, respawn scatter,
inventory-on-death, TNT — and `send_command_feedback` was simply missing from
that list. Command feedback is engine implementation reaching the player,
which is the one thing every other rule there exists to stop.

NOT version-gated, unlike `tnt_explodes`: that rule gates a new capability, so
old campaigns must stay byte-identical. This is a defect, and a campaign at any
`dsl_version` wants its dialogue to stop announcing its scoreboard.

The compiler's own command validator earned its keep here: the first attempt
wrote the legacy camelCase `sendCommandFeedback`, which 1.21.11 rejects
outright, and the validator refused it against the vendored command tree before
it could reach a world.

rcon replies to its caller regardless of this rule, so the harness and
`validation/` are unaffected; the creator overlay's log stamp is
`log_admin_commands`, a different rule.

Measured against the build the owner is playing: one added line in one file
(`setup.mcfunction`), nothing else moves.
  baseline  cf882e2e...b337a45
  with fix  24638a3c...903dada9
Full workspace suite: 154 test binaries, 0 failures.
@stellarfeline
stellarfeline merged commit 9f5599d into main Aug 8, 2026
12 checks passed
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