Skip to content

Preserve raw Workshop semantics for Match Voice Chat #144

Description

@Teakowa

Blocks: wrightkit/wright#245
Related: #108, #110
Evidence: Wright #245 final real-project verification on pinned Bastion e1a0435d84f0fd1ae5192e5088e7321bcb547ab6

Goal

Make the canonical Workshop settings model preserve the real raw Workshop semantics of lobby Match Voice Chat across supported locales instead of rendering its enabled state through the generic On / Off boolean token family.

Context

The pinned Bastion workflow passes wright check in both zh-CN and en-US, but both locale compile workflows fail when the emitted Workshop artifact is parsed again. The current path receives enableMatchVoiceChat: true and emits Match Voice Chat: On / 比赛语音聊天: 开启.

Upstream executable evidence shows that this is one setting represented differently across layers, not two independent lobby settings:

  • current OverPy settings schema exposes lobby.enableMatchVoiceChat as a boolean;
  • an OverPy compile fixture with enableMatchVoiceChat: true emits raw Workshop Match Voice Chat: Enabled;
  • the matching decompiler fixture maps raw Workshop Match Voice Chat: Enabled back to enableMatchVoiceChat: true;
  • the reviewed Workshop locale corpus maps the raw Enabled token used by customGameSettings.lobby.values.enableMatchVoiceChat to zh-CN 启用.

workshop-rs currently carries both a lobby.matchVoiceChat enum projection and a generated lobby.enableMatchVoiceChat boolean projection. Their coexistence is not evidence of two semantic settings. The failure occurs because the generated boolean projection uses the generic Bool renderer, whose raw tokens are On / Off, while this Workshop setting uses the Enabled value family.

This is a canonical Workshop settings identity/value-presentation defect. It is not evidence that matchVoiceChat is an obsolete setting that should simply be removed, and it should not be worked around in Wright.

Scope

  • Reconcile the Match Voice Chat projections into one effective canonical setting identity/value contract.
  • Preserve the evidenced enabled-state semantics while emitting and parsing the raw Workshop value token used by Match Voice Chat rather than the generic boolean On token.
  • Preserve locale-specific raw Workshop presentation, including the evidenced zh-CN 启用 token.
  • Establish the disabled-state raw representation from reviewed Workshop/upstream evidence before encoding it as a stable contract.
  • Ensure parser and emitter resolve the same semantic setting without relying on projection ordering.
  • Add focused regression evidence covering the motivating enabled state and any independently evidenced disabled state.
  • Rerun the pinned Bastion en-US and zh-CN compile/reparse workflows.
  • Keep broader typed-settings catalog migration work in Build the canonical typed Workshop settings catalog #110 unless this defect requires a contract correction there.

Non-goals

  • Treating enableMatchVoiceChat and matchVoiceChat as two different user-facing lobby settings without evidence.
  • Deleting the enum projection solely because it appears older than the generated boolean projection.
  • Accepting Match Voice Chat: On / 比赛语音聊天: 开启 as valid raw Workshop syntax without independent evidence.
  • Adding a Bastion-specific exception.
  • Changing OverPy source syntax or Wright provider behavior.
  • Broad cleanup of unrelated settings-table duplication.
  • Weakening unknown-settings diagnostics for genuinely invalid values.

Acceptance criteria

  • The effective canonical settings model represents Match Voice Chat as one semantic lobby setting rather than two unrelated settings inferred from internal keys.
  • The evidenced enabled state emits as raw Workshop Match Voice Chat: Enabled in en-US and the corresponding 比赛语音聊天: 启用 form in zh-CN, and both forms parse back successfully.
  • Generic Bool rendering does not turn the Match Voice Chat enabled state into On / 开启 unless future Workshop evidence explicitly supports that form.
  • Any disabled-state mapping is backed by reviewed Workshop/upstream evidence rather than inferred only from naming symmetry.
  • Parser/emitter behavior does not depend on whether the hand-written or generated projection is encountered first.
  • A focused regression fails under the current generic-Bool behavior and passes after the fix.
  • Pinned Bastion src/main.opy compile/reparse no longer fails on Match Voice Chat in either zh-CN or en-US when consumed through the fixed workshop-rs implementation.
  • No Wright/Bastion-specific semantic workaround is introduced, and existing settings/parser/emitter regressions remain green.
  • Independent implementation ablation restoring the generic-Bool Match Voice Chat rendering makes the focused regression fail again.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions