You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make typed Custom Game settings a first-class, stable part of the workshop-rs public semantic API and use that work as the main pre-1.0 API-hardening track.
workshop-rs should expose Workshop concepts in a form that is natural for raw Workshop tooling and reusable by independent source-language implementations such as opy-rs, deltin-rs, and future consumers without copying settings schemas, locale mappings, validation, or emission behavior.
Context
The current repository already has strong raw Workshop, catalog, locale, hero/slot, settings, corpus, and conformance evidence. The current settings implementation also already knows important value kinds and carries settings facts across exact path tables, generated locale data, hero-setting data, validation, parser/emitter behavior, and source-preserving Settings nodes.
The next step is not to invent a generic configuration framework. It is to consolidate those Workshop facts into a canonical typed semantic model and ergonomic multi-consumer API that follows Workshop terminology and source structure closely.
For hero settings, the public semantic contract is effective applicability to a hero / logical ability target. Catalog authoring may use common definitions, explicit exclusions, and hero-specific additions to avoid duplication, but consumers should not need to know or depend on that internal organization.
Canonical setting identity should describe the setting concept rather than localized/display ability names where possible. Hero/ability specificity normally comes from SettingTarget using canonical hero + logical slot + optional variant semantics.
Numeric and percent settings should carry evidence-backed Workshop effective min/max ranges where available. Where Workshop clamps an authored out-of-range value, the model must distinguish authored value from effective clamped value without silently rewriting source. UI-only increment/step metadata is not part of the canonical contract without independent semantic evidence.
The existing Settings / SettingsNode tree remains the source-preserving carrier. Typed settings are a canonical semantic/query/edit layer over that carrier, not a replacement that requires whole-file regeneration.
Source-language/project carriers are deliberately outside this owner contract. .lobby, legacy OSTW/DeltinScript customGameSettings.json, OPY settings syntax, and future source-language-specific configuration formats remain owned by their source-language implementations; those consumers lower into the canonical typed settings API provided here. workshop-rs#33 was closed as not planned after this ownership review.
#10/#21 remain evidence/seasonal-validation work and are not implementation dependencies for ordinary typed settings unless a real ambiguity requires live-client evidence.
Canonical data:Build the canonical typed Workshop settings catalog #110 reconciles current settings tables, hero-setting data, corpus/docs, locale mappings, numeric bounds, and mature reference implementations into one source of truth.
Consumer proof: after Expose typed settings query, validation, and source-preserving edit APIs #111 is released, create or update focused integration work in wright, opy-rs, and deltin-rs only where current consumers actually need changes. Source-language-specific settings syntax/carriers stay in those repositories.
Do not start #112 as a broad cleanup while #109-#111 are still changing the settings contract.
Scope
Treat workshop-rs as the canonical Rust implementation of the Overwatch Workshop language and reviewed static semantics.
Provide stable, locale-independent setting concepts and explicit value domains.
Preserve Workshop-native setting scopes/ownership structure rather than inventing a normalized replacement language.
Model semantic targets separately from source scope, including hero and logical ability-slot targeting where applicable.
Expose effective applicability without making catalog inheritance/deduplication strategy part of the required consumer contract.
Reuse canonical hero + logical slot + optional variant semantics rather than deriving canonical identity from localized/display ability names.
Keep localized Workshop labels as presentation/resolution data.
Include evidence-backed numeric/percent effective bounds and clamping semantics where Workshop behavior supports them.
Preserve the existing raw settings carrier, provenance, unknown/unsupported representation, and fail-explicit diagnostics.
Make the resulting API suitable for raw Workshop tools and source-language lowering/reconstruction consumers.
Use current raw Workshop corpus, documented Workshop surface, mature OverPy/OSTW behavior, and existing repository data as evidence; upstream implementations are references, not architecture owners.
Non-goals
A generic schema/configuration framework unrelated to Workshop.
Rust type-level programming that encodes every hero or applicability rule in generic parameters.
Making common/exclusion/addition catalog authoring a mandatory public semantic abstraction.
Assuming every hero or every logical slot has identical settings.
Generating one giant bespoke Rust settings struct per hero.
Encoding localized/display ability names into canonical setting identity when generic ability concepts + targets are sufficient.
UI-only step/slider metadata without semantic evidence.
Parsing or owning OPY/DEL/OSTW project/config carriers in workshop-rs.
OPY/DEL/Wright syntax or product features in this repository.
Guaranteeing that a statically valid Workshop program is accepted or behaves correctly in every current live Overwatch build.
Modeling temporary live-service restrictions as static setting schema.
Broad parser/emitter rewrites or architecture cleanup unrelated to the public contract.
Acceptance criteria
The typed settings semantic model, catalog, and public Rust API are documented as stable Workshop-facing contracts.
SettingDefinition consolidates existing path/type/locale/applicability/provenance facts rather than introducing a parallel source of truth.
Canonical setting identities normally describe setting concepts rather than concrete localized/display ability names.
Workshop source scope and semantic target remain distinct, intuitive concepts.
Setting value domains are machine-readable and include evidence-backed numeric/percent effective min/max ranges where known.
Evidenced clamp behavior preserves authored source value while making effective value queryable/diagnosable.
Effective hero/ability applicability represents the reviewed surface without consumer-side schema hacks or exposing catalog inheritance details.
Raw Settings source preservation and provenance remain available alongside typed query/edit semantics.
Parser/validation/emission and supported locale conversion use the same canonical settings definitions rather than parallel tables.
Source-language implementations can lower their own settings syntax/carriers into the public typed settings contract without copying Workshop settings data or semantics into their repositories.
Goal
Make typed Custom Game settings a first-class, stable part of the
workshop-rspublic semantic API and use that work as the main pre-1.0 API-hardening track.workshop-rsshould expose Workshop concepts in a form that is natural for raw Workshop tooling and reusable by independent source-language implementations such asopy-rs,deltin-rs, and future consumers without copying settings schemas, locale mappings, validation, or emission behavior.Context
The current repository already has strong raw Workshop, catalog, locale, hero/slot, settings, corpus, and conformance evidence. The current settings implementation also already knows important value kinds and carries settings facts across exact path tables, generated locale data, hero-setting data, validation, parser/emitter behavior, and source-preserving
Settingsnodes.The next step is not to invent a generic configuration framework. It is to consolidate those Workshop facts into a canonical typed semantic model and ergonomic multi-consumer API that follows Workshop terminology and source structure closely.
For hero settings, the public semantic contract is effective applicability to a hero / logical ability target. Catalog authoring may use common definitions, explicit exclusions, and hero-specific additions to avoid duplication, but consumers should not need to know or depend on that internal organization.
Canonical setting identity should describe the setting concept rather than localized/display ability names where possible. Hero/ability specificity normally comes from
SettingTargetusing canonical hero + logical slot + optional variant semantics.Numeric and percent settings should carry evidence-backed Workshop effective
min/maxranges where available. Where Workshop clamps an authored out-of-range value, the model must distinguish authored value from effective clamped value without silently rewriting source. UI-only increment/stepmetadata is not part of the canonical contract without independent semantic evidence.The existing
Settings/SettingsNodetree remains the source-preserving carrier. Typed settings are a canonical semantic/query/edit layer over that carrier, not a replacement that requires whole-file regeneration.Source-language/project carriers are deliberately outside this owner contract.
.lobby, legacy OSTW/DeltinScriptcustomGameSettings.json, OPY settings syntax, and future source-language-specific configuration formats remain owned by their source-language implementations; those consumers lower into the canonical typed settings API provided here.workshop-rs#33was closed as not planned after this ownership review.Execution issues
Typed settings foundation
Source contract before API freeze
1.0 candidate
#10/#21 remain evidence/seasonal-validation work and are not implementation dependencies for ordinary typed settings unless a real ambiguity requires live-client evidence.
Roadmap order
wright,opy-rs, anddeltin-rsonly where current consumers actually need changes. Source-language-specific settings syntax/carriers stay in those repositories.Do not start #112 as a broad cleanup while #109-#111 are still changing the settings contract.
Scope
workshop-rsas the canonical Rust implementation of the Overwatch Workshop language and reviewed static semantics.Non-goals
step/slider metadata without semantic evidence.workshop-rs.Acceptance criteria
SettingDefinitionconsolidates existing path/type/locale/applicability/provenance facts rather than introducing a parallel source of truth.min/maxranges where known.Settingssource preservation and provenance remain available alongside typed query/edit semantics.